[hibernate-commits] Hibernate SVN: r14128 - in core/trunk/documentation/manual: pot and 14 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Mon Oct 22 11:48:12 EDT 2007
Author: steve.ebersole at jboss.com
Date: 2007-10-22 11:48:10 -0400 (Mon, 22 Oct 2007)
New Revision: 14128
Added:
core/trunk/documentation/manual/pot/
core/trunk/documentation/manual/pot/Hibernate_Reference.pot
core/trunk/documentation/manual/pot/content/
core/trunk/documentation/manual/pot/content/architecture.pot
core/trunk/documentation/manual/pot/content/association_mapping.pot
core/trunk/documentation/manual/pot/content/basic_mapping.pot
core/trunk/documentation/manual/pot/content/batch.pot
core/trunk/documentation/manual/pot/content/best_practices.pot
core/trunk/documentation/manual/pot/content/collection_mapping.pot
core/trunk/documentation/manual/pot/content/component_mapping.pot
core/trunk/documentation/manual/pot/content/configuration.pot
core/trunk/documentation/manual/pot/content/events.pot
core/trunk/documentation/manual/pot/content/example_mappings.pot
core/trunk/documentation/manual/pot/content/example_parentchild.pot
core/trunk/documentation/manual/pot/content/example_weblog.pot
core/trunk/documentation/manual/pot/content/filters.pot
core/trunk/documentation/manual/pot/content/inheritance_mapping.pot
core/trunk/documentation/manual/pot/content/performance.pot
core/trunk/documentation/manual/pot/content/persistent_classes.pot
core/trunk/documentation/manual/pot/content/preface.pot
core/trunk/documentation/manual/pot/content/query_criteria.pot
core/trunk/documentation/manual/pot/content/query_hql.pot
core/trunk/documentation/manual/pot/content/query_sql.pot
core/trunk/documentation/manual/pot/content/session_api.pot
core/trunk/documentation/manual/pot/content/toolset_guide.pot
core/trunk/documentation/manual/pot/content/transactions.pot
core/trunk/documentation/manual/pot/content/tutorial.pot
core/trunk/documentation/manual/pot/content/xml.pot
core/trunk/documentation/manual/pot/legal_notice.pot
core/trunk/documentation/manual/translations/
core/trunk/documentation/manual/translations/es-ES/
core/trunk/documentation/manual/translations/es-ES/Hibernate_Reference.po
core/trunk/documentation/manual/translations/es-ES/content/
core/trunk/documentation/manual/translations/es-ES/content/architecture.po
core/trunk/documentation/manual/translations/es-ES/content/association_mapping.po
core/trunk/documentation/manual/translations/es-ES/content/basic_mapping.po
core/trunk/documentation/manual/translations/es-ES/content/batch.po
core/trunk/documentation/manual/translations/es-ES/content/best_practices.po
core/trunk/documentation/manual/translations/es-ES/content/collection_mapping.po
core/trunk/documentation/manual/translations/es-ES/content/component_mapping.po
core/trunk/documentation/manual/translations/es-ES/content/configuration.po
core/trunk/documentation/manual/translations/es-ES/content/events.po
core/trunk/documentation/manual/translations/es-ES/content/example_mappings.po
core/trunk/documentation/manual/translations/es-ES/content/example_parentchild.po
core/trunk/documentation/manual/translations/es-ES/content/example_weblog.po
core/trunk/documentation/manual/translations/es-ES/content/filters.po
core/trunk/documentation/manual/translations/es-ES/content/inheritance_mapping.po
core/trunk/documentation/manual/translations/es-ES/content/performance.po
core/trunk/documentation/manual/translations/es-ES/content/persistent_classes.po
core/trunk/documentation/manual/translations/es-ES/content/preface.po
core/trunk/documentation/manual/translations/es-ES/content/query_criteria.po
core/trunk/documentation/manual/translations/es-ES/content/query_hql.po
core/trunk/documentation/manual/translations/es-ES/content/query_sql.po
core/trunk/documentation/manual/translations/es-ES/content/quickstart.po
core/trunk/documentation/manual/translations/es-ES/content/session_api.po
core/trunk/documentation/manual/translations/es-ES/content/toolset_guide.po
core/trunk/documentation/manual/translations/es-ES/content/transactions.po
core/trunk/documentation/manual/translations/es-ES/content/tutorial.po
core/trunk/documentation/manual/translations/es-ES/content/xml.po
core/trunk/documentation/manual/translations/es-ES/legal_notice.po
core/trunk/documentation/manual/translations/fr-FR/
core/trunk/documentation/manual/translations/fr-FR/Hibernate_Reference.po
core/trunk/documentation/manual/translations/fr-FR/content/
core/trunk/documentation/manual/translations/fr-FR/content/architecture.po
core/trunk/documentation/manual/translations/fr-FR/content/association_mapping.po
core/trunk/documentation/manual/translations/fr-FR/content/basic_mapping.po
core/trunk/documentation/manual/translations/fr-FR/content/batch.po
core/trunk/documentation/manual/translations/fr-FR/content/best_practices.po
core/trunk/documentation/manual/translations/fr-FR/content/collection_mapping.po
core/trunk/documentation/manual/translations/fr-FR/content/component_mapping.po
core/trunk/documentation/manual/translations/fr-FR/content/configuration.po
core/trunk/documentation/manual/translations/fr-FR/content/events.po
core/trunk/documentation/manual/translations/fr-FR/content/example_mappings.po
core/trunk/documentation/manual/translations/fr-FR/content/example_parentchild.po
core/trunk/documentation/manual/translations/fr-FR/content/example_weblog.po
core/trunk/documentation/manual/translations/fr-FR/content/filters.po
core/trunk/documentation/manual/translations/fr-FR/content/inheritance_mapping.po
core/trunk/documentation/manual/translations/fr-FR/content/performance.po
core/trunk/documentation/manual/translations/fr-FR/content/persistent_classes.po
core/trunk/documentation/manual/translations/fr-FR/content/preface.po
core/trunk/documentation/manual/translations/fr-FR/content/query_criteria.po
core/trunk/documentation/manual/translations/fr-FR/content/query_hql.po
core/trunk/documentation/manual/translations/fr-FR/content/query_sql.po
core/trunk/documentation/manual/translations/fr-FR/content/quickstart.po
core/trunk/documentation/manual/translations/fr-FR/content/session_api.po
core/trunk/documentation/manual/translations/fr-FR/content/toolset_guide.po
core/trunk/documentation/manual/translations/fr-FR/content/transactions.po
core/trunk/documentation/manual/translations/fr-FR/content/tutorial.po
core/trunk/documentation/manual/translations/fr-FR/content/xml.po
core/trunk/documentation/manual/translations/fr-FR/legal_notice.po
core/trunk/documentation/manual/translations/ja-JP/
core/trunk/documentation/manual/translations/ja-JP/Hibernate_Reference.po
core/trunk/documentation/manual/translations/ja-JP/content/
core/trunk/documentation/manual/translations/ja-JP/content/architecture.po
core/trunk/documentation/manual/translations/ja-JP/content/association_mapping.po
core/trunk/documentation/manual/translations/ja-JP/content/basic_mapping.po
core/trunk/documentation/manual/translations/ja-JP/content/batch.po
core/trunk/documentation/manual/translations/ja-JP/content/best_practices.po
core/trunk/documentation/manual/translations/ja-JP/content/collection_mapping.po
core/trunk/documentation/manual/translations/ja-JP/content/component_mapping.po
core/trunk/documentation/manual/translations/ja-JP/content/configuration.po
core/trunk/documentation/manual/translations/ja-JP/content/events.po
core/trunk/documentation/manual/translations/ja-JP/content/example_mappings.po
core/trunk/documentation/manual/translations/ja-JP/content/example_parentchild.po
core/trunk/documentation/manual/translations/ja-JP/content/example_weblog.po
core/trunk/documentation/manual/translations/ja-JP/content/filters.po
core/trunk/documentation/manual/translations/ja-JP/content/inheritance_mapping.po
core/trunk/documentation/manual/translations/ja-JP/content/performance.po
core/trunk/documentation/manual/translations/ja-JP/content/persistent_classes.po
core/trunk/documentation/manual/translations/ja-JP/content/preface.po
core/trunk/documentation/manual/translations/ja-JP/content/query_criteria.po
core/trunk/documentation/manual/translations/ja-JP/content/query_hql.po
core/trunk/documentation/manual/translations/ja-JP/content/query_sql.po
core/trunk/documentation/manual/translations/ja-JP/content/quickstart.po
core/trunk/documentation/manual/translations/ja-JP/content/session_api.po
core/trunk/documentation/manual/translations/ja-JP/content/toolset_guide.po
core/trunk/documentation/manual/translations/ja-JP/content/transactions.po
core/trunk/documentation/manual/translations/ja-JP/content/tutorial.po
core/trunk/documentation/manual/translations/ja-JP/content/xml.po
core/trunk/documentation/manual/translations/ja-JP/legal_notice.po
core/trunk/documentation/manual/translations/ko-KR/
core/trunk/documentation/manual/translations/ko-KR/Hibernate_Reference.po
core/trunk/documentation/manual/translations/ko-KR/content/
core/trunk/documentation/manual/translations/ko-KR/content/architecture.po
core/trunk/documentation/manual/translations/ko-KR/content/association_mapping.po
core/trunk/documentation/manual/translations/ko-KR/content/basic_mapping.po
core/trunk/documentation/manual/translations/ko-KR/content/batch.po
core/trunk/documentation/manual/translations/ko-KR/content/best_practices.po
core/trunk/documentation/manual/translations/ko-KR/content/collection_mapping.po
core/trunk/documentation/manual/translations/ko-KR/content/component_mapping.po
core/trunk/documentation/manual/translations/ko-KR/content/configuration.po
core/trunk/documentation/manual/translations/ko-KR/content/events.po
core/trunk/documentation/manual/translations/ko-KR/content/example_mappings.po
core/trunk/documentation/manual/translations/ko-KR/content/example_parentchild.po
core/trunk/documentation/manual/translations/ko-KR/content/example_weblog.po
core/trunk/documentation/manual/translations/ko-KR/content/filters.po
core/trunk/documentation/manual/translations/ko-KR/content/inheritance_mapping.po
core/trunk/documentation/manual/translations/ko-KR/content/performance.po
core/trunk/documentation/manual/translations/ko-KR/content/persistent_classes.po
core/trunk/documentation/manual/translations/ko-KR/content/preface.po
core/trunk/documentation/manual/translations/ko-KR/content/query_criteria.po
core/trunk/documentation/manual/translations/ko-KR/content/query_hql.po
core/trunk/documentation/manual/translations/ko-KR/content/query_sql.po
core/trunk/documentation/manual/translations/ko-KR/content/quickstart.po
core/trunk/documentation/manual/translations/ko-KR/content/session_api.po
core/trunk/documentation/manual/translations/ko-KR/content/toolset_guide.po
core/trunk/documentation/manual/translations/ko-KR/content/transactions.po
core/trunk/documentation/manual/translations/ko-KR/content/tutorial.po
core/trunk/documentation/manual/translations/ko-KR/content/xml.po
core/trunk/documentation/manual/translations/ko-KR/legal_notice.po
core/trunk/documentation/manual/translations/pt-BR/
core/trunk/documentation/manual/translations/pt-BR/Hibernate_Reference.po
core/trunk/documentation/manual/translations/pt-BR/content/
core/trunk/documentation/manual/translations/pt-BR/content/architecture.po
core/trunk/documentation/manual/translations/pt-BR/content/association_mapping.po
core/trunk/documentation/manual/translations/pt-BR/content/basic_mapping.po
core/trunk/documentation/manual/translations/pt-BR/content/batch.po
core/trunk/documentation/manual/translations/pt-BR/content/best_practices.po
core/trunk/documentation/manual/translations/pt-BR/content/collection_mapping.po
core/trunk/documentation/manual/translations/pt-BR/content/component_mapping.po
core/trunk/documentation/manual/translations/pt-BR/content/configuration.po
core/trunk/documentation/manual/translations/pt-BR/content/events.po
core/trunk/documentation/manual/translations/pt-BR/content/example_mappings.po
core/trunk/documentation/manual/translations/pt-BR/content/example_parentchild.po
core/trunk/documentation/manual/translations/pt-BR/content/example_weblog.po
core/trunk/documentation/manual/translations/pt-BR/content/filters.po
core/trunk/documentation/manual/translations/pt-BR/content/inheritance_mapping.po
core/trunk/documentation/manual/translations/pt-BR/content/performance.po
core/trunk/documentation/manual/translations/pt-BR/content/persistent_classes.po
core/trunk/documentation/manual/translations/pt-BR/content/preface.po
core/trunk/documentation/manual/translations/pt-BR/content/query_criteria.po
core/trunk/documentation/manual/translations/pt-BR/content/query_hql.po
core/trunk/documentation/manual/translations/pt-BR/content/query_sql.po
core/trunk/documentation/manual/translations/pt-BR/content/quickstart.po
core/trunk/documentation/manual/translations/pt-BR/content/session_api.po
core/trunk/documentation/manual/translations/pt-BR/content/toolset_guide.po
core/trunk/documentation/manual/translations/pt-BR/content/transactions.po
core/trunk/documentation/manual/translations/pt-BR/content/tutorial.po
core/trunk/documentation/manual/translations/pt-BR/content/xml.po
core/trunk/documentation/manual/translations/pt-BR/legal_notice.po
core/trunk/documentation/manual/translations/zh-CN/
core/trunk/documentation/manual/translations/zh-CN/Hibernate_Reference.po
core/trunk/documentation/manual/translations/zh-CN/content/
core/trunk/documentation/manual/translations/zh-CN/content/architecture.po
core/trunk/documentation/manual/translations/zh-CN/content/association_mapping.po
core/trunk/documentation/manual/translations/zh-CN/content/basic_mapping.po
core/trunk/documentation/manual/translations/zh-CN/content/batch.po
core/trunk/documentation/manual/translations/zh-CN/content/best_practices.po
core/trunk/documentation/manual/translations/zh-CN/content/collection_mapping.po
core/trunk/documentation/manual/translations/zh-CN/content/component_mapping.po
core/trunk/documentation/manual/translations/zh-CN/content/configuration.po
core/trunk/documentation/manual/translations/zh-CN/content/events.po
core/trunk/documentation/manual/translations/zh-CN/content/example_mappings.po
core/trunk/documentation/manual/translations/zh-CN/content/example_parentchild.po
core/trunk/documentation/manual/translations/zh-CN/content/example_weblog.po
core/trunk/documentation/manual/translations/zh-CN/content/filters.po
core/trunk/documentation/manual/translations/zh-CN/content/inheritance_mapping.po
core/trunk/documentation/manual/translations/zh-CN/content/performance.po
core/trunk/documentation/manual/translations/zh-CN/content/persistent_classes.po
core/trunk/documentation/manual/translations/zh-CN/content/preface.po
core/trunk/documentation/manual/translations/zh-CN/content/query_criteria.po
core/trunk/documentation/manual/translations/zh-CN/content/query_hql.po
core/trunk/documentation/manual/translations/zh-CN/content/query_sql.po
core/trunk/documentation/manual/translations/zh-CN/content/quickstart.po
core/trunk/documentation/manual/translations/zh-CN/content/session_api.po
core/trunk/documentation/manual/translations/zh-CN/content/toolset_guide.po
core/trunk/documentation/manual/translations/zh-CN/content/transactions.po
core/trunk/documentation/manual/translations/zh-CN/content/tutorial.po
core/trunk/documentation/manual/translations/zh-CN/content/xml.po
core/trunk/documentation/manual/translations/zh-CN/legal_notice.po
Log:
translation po/gettext conversion
Added: core/trunk/documentation/manual/pot/Hibernate_Reference.pot
===================================================================
--- core/trunk/documentation/manual/pot/Hibernate_Reference.pot (rev 0)
+++ core/trunk/documentation/manual/pot/Hibernate_Reference.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,34 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:23-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: ./Hibernate_Reference.xml:33(None) ./Hibernate_Reference.xml:36(None)
+msgid "@@image: 'images/hibernate_logo_a.png'; md5=38bd6cfd79e676660440f316f4ab452c"
+msgstr ""
+
+#: ./Hibernate_Reference.xml:26(title)
+msgid "HIBERNATE - Relational Persistence for Idiomatic Java"
+msgstr ""
+
+#: ./Hibernate_Reference.xml:27(subtitle)
+msgid "Hibernate Reference Documentation"
+msgstr ""
+
+#: ./Hibernate_Reference.xml:30(issuenum)
+msgid "1"
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: ./Hibernate_Reference.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/architecture.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/architecture.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/architecture.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,256 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:28-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: architecture.xml:32(None)
+msgid "@@image: '../images/overview.svg'; md5=2d9211eace02ecef615f7dd42beec14c"
+msgstr ""
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: architecture.xml:35(None)
+msgid "@@image: '../images/overview.png'; md5=a2b5f0f7dc75d9773305d4d824880e8c"
+msgstr ""
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: architecture.xml:54(None)
+msgid "@@image: '../images/lite.svg'; md5=2178e70b3b165736d33b085dcad93699"
+msgstr ""
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: architecture.xml:57(None)
+msgid "@@image: '../images/lite.png'; md5=7dd864188937e2dfef42a706235f74c3"
+msgstr ""
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: architecture.xml:68(None)
+msgid "@@image: '../images/full_cream.svg'; md5=4ef192f03e90e451e5dcb287d2709687"
+msgstr ""
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: architecture.xml:71(None)
+msgid "@@image: '../images/full_cream.png'; md5=c3ee197b49364a876bc5867d5c2c6db7"
+msgstr ""
+
+#: architecture.xml:21(title)
+msgid "Architecture"
+msgstr ""
+
+#: architecture.xml:24(title)
+msgid "Overview"
+msgstr ""
+
+#: architecture.xml:26(para)
+msgid "A (very) high-level view of the Hibernate architecture:"
+msgstr ""
+
+#: architecture.xml:39(para)
+msgid "This diagram shows Hibernate using the database and configuration data to provide persistence services (and persistent objects) to the application."
+msgstr ""
+
+#: architecture.xml:44(para)
+msgid "We would like to show a more detailed view of the runtime architecture. Unfortunately, Hibernate is flexible and supports several approaches. We will show the two extremes. The \"lite\" architecture has the application provide its own JDBC connections and manage its own transactions. This approach uses a minimal subset of Hibernate's APIs:"
+msgstr ""
+
+#: architecture.xml:61(para)
+msgid "The \"full cream\" architecture abstracts the application away from the underlying JDBC/JTA APIs and lets Hibernate take care of the details."
+msgstr ""
+
+#: architecture.xml:80(term)
+msgid "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+msgstr ""
+
+#: architecture.xml:82(para)
+msgid "A threadsafe (immutable) cache of compiled mappings for a single database. A factory for <literal>Session</literal> and a client of <literal>ConnectionProvider</literal>. Might hold an optional (second-level) cache of data that is reusable between transactions, at a process- or cluster-level."
+msgstr ""
+
+#: architecture.xml:92(term)
+msgid "Session (<literal>org.hibernate.Session</literal>)"
+msgstr ""
+
+#: architecture.xml:94(para)
+msgid "A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC connection. Factory for <literal>Transaction</literal>. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier."
+msgstr ""
+
+#: architecture.xml:104(term)
+msgid "Persistent objects and collections"
+msgstr ""
+
+#: architecture.xml:106(para)
+msgid "Short-lived, single threaded objects containing persistent state and business function. These might be ordinary JavaBeans/POJOs, the only special thing about them is that they are currently associated with (exactly one) <literal>Session</literal>. As soon as the <literal>Session</literal> is closed, they will be detached and free to use in any application layer (e.g. directly as data transfer objects to and from presentation)."
+msgstr ""
+
+#: architecture.xml:117(term)
+msgid "Transient and detached objects and collections"
+msgstr ""
+
+#: architecture.xml:119(para)
+msgid "Instances of persistent classes that are not currently associated with a <literal>Session</literal>. They may have been instantiated by the application and not (yet) persisted or they may have been instantiated by a closed <literal>Session</literal>."
+msgstr ""
+
+#: architecture.xml:128(term)
+msgid "Transaction (<literal>org.hibernate.Transaction</literal>)"
+msgstr ""
+
+#: architecture.xml:130(para)
+msgid "(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. Abstracts application from underlying JDBC, JTA or CORBA transaction. A <literal>Session</literal> might span several <literal>Transaction</literal>s in some cases. However, transaction demarcation, either using the underlying API or <literal>Transaction</literal>, is never optional!"
+msgstr ""
+
+#: architecture.xml:141(term)
+msgid "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+msgstr ""
+
+#: architecture.xml:143(para)
+msgid "(Optional) A factory for (and pool of) JDBC connections. Abstracts application from underlying <literal>Datasource</literal> or <literal>DriverManager</literal>. Not exposed to application, but can be extended/implemented by the developer."
+msgstr ""
+
+#: architecture.xml:151(term)
+msgid "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+msgstr ""
+
+#: architecture.xml:153(para)
+msgid "(Optional) A factory for <literal>Transaction</literal> instances. Not exposed to the application, but can be extended/implemented by the developer."
+msgstr ""
+
+#: architecture.xml:160(emphasis)
+msgid "Extension Interfaces"
+msgstr ""
+
+#: architecture.xml:162(para)
+msgid "Hibernate offers many optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details."
+msgstr ""
+
+#: architecture.xml:75(para)
+msgid "Heres some definitions of the objects in the diagrams: <placeholder-1/>"
+msgstr ""
+
+#: architecture.xml:171(para)
+msgid "Given a \"lite\" architecture, the application bypasses the <literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or <literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly."
+msgstr ""
+
+#: architecture.xml:179(title)
+msgid "Instance states"
+msgstr ""
+
+#: architecture.xml:180(para)
+msgid "An instance of a persistent classes may be in one of three different states, which are defined with respect to a <emphasis>persistence context</emphasis>. The Hibernate <literal>Session</literal> object is the persistence context:"
+msgstr ""
+
+#: architecture.xml:188(term)
+msgid "transient"
+msgstr ""
+
+#: architecture.xml:190(para)
+msgid "The instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value)."
+msgstr ""
+
+#: architecture.xml:198(term)
+msgid "persistent"
+msgstr ""
+
+#: architecture.xml:200(para)
+msgid "The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, Hibernate <emphasis>guarantees</emphasis> that persistent identity is equivalent to Java identity (in-memory location of the object)."
+msgstr ""
+
+#: architecture.xml:212(term)
+msgid "detached"
+msgstr ""
+
+#: architecture.xml:214(para)
+msgid "The instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corrsponding row in the database. For detached instances, Hibernate makes no guarantees about the relationship between persistent identity and Java identity."
+msgstr ""
+
+#: architecture.xml:229(title)
+msgid "JMX Integration"
+msgstr ""
+
+#: architecture.xml:231(para)
+msgid "JMX is the J2EE standard for management of Java components. Hibernate may be managed via a JMX standard service. We provide an MBean implementation in the distribution, <literal>org.hibernate.jmx.HibernateService</literal>."
+msgstr ""
+
+#: architecture.xml:237(para)
+msgid "For an example how to deploy Hibernate as a JMX service on the JBoss Application Server, please see the JBoss User Guide. On JBoss AS, you also get these benefits if you deploy using JMX:"
+msgstr ""
+
+#: architecture.xml:245(para)
+msgid "<emphasis>Session Management:</emphasis> The Hibernate <literal>Session</literal>'s life cycle can be automatically bound to the scope of a JTA transaction. This means you no longer have to manually open and close the <literal>Session</literal>, this becomes the job of a JBoss EJB interceptor. You also don't have to worry about transaction demarcation in your code anymore (unless you'd like to write a portable persistence layer of course, use the optional Hibernate <literal>Transaction</literal> API for this). You call the <literal>HibernateContext</literal> to access a <literal>Session</literal>."
+msgstr ""
+
+#: architecture.xml:257(para)
+msgid "<emphasis>HAR deployment:</emphasis> Usually you deploy the Hibernate JMX service using a JBoss service deployment descriptor (in an EAR and/or SAR file), it supports all the usual configuration options of a Hibernate <literal>SessionFactory</literal>. However, you still have to name all your mapping files in the deployment descriptor. If you decide to use the optional HAR deployment, JBoss will automatically detect all mapping files in your HAR file."
+msgstr ""
+
+#: architecture.xml:268(para)
+msgid "Consult the JBoss AS user guide for more information about these options."
+msgstr ""
+
+#: architecture.xml:272(para)
+msgid "Another feature available as a JMX service are runtime Hibernate statistics. See <xref linkend=\"configuration-optional-statistics\"/>."
+msgstr ""
+
+#: architecture.xml:279(title)
+msgid "JCA Support"
+msgstr ""
+
+#: architecture.xml:280(para)
+msgid "Hibernate may also be configured as a JCA connector. Please see the website for more details. Please note that Hibernate JCA support is still considered experimental."
+msgstr ""
+
+#: architecture.xml:287(title)
+msgid "Contextual Sessions"
+msgstr ""
+
+#: architecture.xml:288(para)
+msgid "Most applications using Hibernate need some form of \"contextual\" sessions, where a given session is in effect throughout the scope of a given context. However, across applications the definition of what constitutes a context is typically different; and different contexts define different scopes to the notion of current. Applications using Hibernate prior to version 3.0 tended to utilize either home-grown <literal>ThreadLocal</literal>-based contextual sessions, helper classes such as <literal>HibernateUtil</literal>, or utilized third-party frameworks (such as Spring or Pico) which provided proxy/interception-based contextual sessions."
+msgstr ""
+
+#: architecture.xml:297(para)
+msgid "Starting with version 3.0.1, Hibernate added the <literal>SessionFactory.getCurrentSession()</literal> method. Initially, this assumed usage of <literal>JTA</literal> transactions, where the <literal>JTA</literal> transaction defined both the scope and context of a current session. The Hibernate team maintains that, given the maturity of the numerous stand-alone <literal>JTA TransactionManager</literal> implementations out there, most (if not all) applications should be using <literal>JTA</literal> transaction management whether or not they are deployed into a <literal>J2EE</literal> container. Based on that, the <literal>JTA</literal>-based contextual sessions is all you should ever need to use."
+msgstr ""
+
+#: architecture.xml:307(para)
+msgid "However, as of version 3.1, the processing behind <literal>SessionFactory.getCurrentSession()</literal> is now pluggable. To that end, a new extension interface (<literal>org.hibernate.context.CurrentSessionContext</literal>) and a new configuration parameter (<literal>hibernate.current_session_context_class</literal>) have been added to allow pluggability of the scope and context of defining current sessions."
+msgstr ""
+
+#: architecture.xml:314(para)
+msgid "See the Javadocs for the <literal>org.hibernate.context.CurrentSessionContext</literal> interface for a detailed discussion of its contract. It defines a single method, <literal>currentSession()</literal>, by which the implementation is responsible for tracking the current contextual session. Out-of-the-box, Hibernate comes with three implementations of this interface."
+msgstr ""
+
+#: architecture.xml:324(para)
+msgid "<literal>org.hibernate.context.JTASessionContext</literal> - current sessions are tracked and scoped by a <literal>JTA</literal> transaction. The processing here is exactly the same as in the older JTA-only approach. See the Javadocs for details."
+msgstr ""
+
+#: architecture.xml:332(para)
+msgid "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - current sessions are tracked by thread of execution. Again, see the Javadocs for details."
+msgstr ""
+
+#: architecture.xml:338(para)
+msgid "<literal>org.hibernate.context.ManagedSessionContext</literal> - current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a <literal>Session</literal> instance with static methods on this class, it does never open, flush, or close a <literal>Session</literal>."
+msgstr ""
+
+#: architecture.xml:347(para)
+msgid "The first two implementations provide a \"one session - one database transaction\" programming model, also known and used as <emphasis>session-per-request</emphasis>. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programatic transaction demarcation in plain JSE without JTA, you are adviced to use the Hibernate <literal>Transaction</literal> API to hide the underlying transaction system from your code. If you use JTA, use the JTA interfaces to demarcate transactions. If you execute in an EJB container that supports CMT, transaction boundaries are defined declaratively and you don't need any transaction or session demarcation operations in your code. Refer to <xref linkend=\"transactions\"/> for more information and code examples."
+msgstr ""
+
+#: architecture.xml:359(para)
+msgid "The <literal>hibernate.current_session_context_class</literal> configuration parameter defines which <literal>org.hibernate.context.CurrentSessionContext</literal> implementation should be used. Note that for backwards compatibility, if this config param is not set but a <literal>org.hibernate.transaction.TransactionManagerLookup</literal> is configured, Hibernate will use the <literal>org.hibernate.context.JTASessionContext</literal>. Typically, the value of this parameter would just name the implementation class to use; for the three out-of-the-box implementations, however, there are three corresponding short names, \"jta\", \"thread\", and \"managed\"."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: architecture.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/association_mapping.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/association_mapping.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/association_mapping.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,160 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:28-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: association_mapping.xml:6(title)
+msgid "Association Mappings"
+msgstr ""
+
+#: association_mapping.xml:9(title)
+msgid "Introduction"
+msgstr ""
+
+#: association_mapping.xml:11(para)
+msgid "Association mappings are the often most difficult thing to get right. In this section we'll go through the canonical cases one by one, starting with unidirectional mappings, and then considering the bidirectional cases. We'll use <literal>Person</literal> and <literal>Address</literal> in all the examples."
+msgstr ""
+
+#: association_mapping.xml:19(para)
+msgid "We'll classify associations by whether or not they map to an intervening join table, and by multiplicity."
+msgstr ""
+
+#: association_mapping.xml:24(para)
+msgid "Nullable foreign keys are not considered good practice in traditional data modelling, so all our examples use not null foreign keys. This is not a requirement of Hibernate, and the mappings will all work if you drop the nullability constraints."
+msgstr ""
+
+#: association_mapping.xml:34(title)
+msgid "Unidirectional associations"
+msgstr ""
+
+#: association_mapping.xml:37(title) association_mapping.xml:195(title)
+msgid "many to one"
+msgstr ""
+
+#: association_mapping.xml:39(para)
+msgid "A <emphasis>unidirectional many-to-one association</emphasis> is the most common kind of unidirectional association."
+msgstr ""
+
+#: association_mapping.xml:66(title) association_mapping.xml:229(title) association_mapping.xml:373(title) association_mapping.xml:479(title)
+msgid "one to one"
+msgstr ""
+
+#: association_mapping.xml:68(para)
+msgid "A <emphasis>unidirectional one-to-one association on a foreign key</emphasis> is almost identical. The only difference is the column unique constraint."
+msgstr ""
+
+#: association_mapping.xml:93(para)
+msgid "A <emphasis>unidirectional one-to-one association on a primary key</emphasis> usually uses a special id generator. (Notice that we've reversed the direction of the association in this example.)"
+msgstr ""
+
+#: association_mapping.xml:121(title) association_mapping.xml:161(title)
+msgid "one to many"
+msgstr ""
+
+#: association_mapping.xml:123(para)
+msgid "A <emphasis>unidirectional one-to-many association on a foreign key</emphasis> is a very unusual case, and is not really recommended."
+msgstr ""
+
+#: association_mapping.xml:149(para)
+msgid "We think it's better to use a join table for this kind of association."
+msgstr ""
+
+#: association_mapping.xml:158(title)
+msgid "Unidirectional associations with join tables"
+msgstr ""
+
+#: association_mapping.xml:163(para)
+msgid "A <emphasis>unidirectional one-to-many association on a join table</emphasis> is much preferred. Notice that by specifying <literal>unique=\"true\"</literal>, we have changed the multiplicity from many-to-many to one-to-many."
+msgstr ""
+
+#: association_mapping.xml:197(para)
+msgid "A <emphasis>unidirectional many-to-one association on a join table</emphasis> is quite common when the association is optional."
+msgstr ""
+
+#: association_mapping.xml:231(para)
+msgid "A <emphasis>unidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr ""
+
+#: association_mapping.xml:265(title) association_mapping.xml:525(title)
+msgid "many to many"
+msgstr ""
+
+#: association_mapping.xml:267(para)
+msgid "Finally, we have a <emphasis>unidirectional many-to-many association</emphasis>."
+msgstr ""
+
+#: association_mapping.xml:298(title)
+msgid "Bidirectional associations"
+msgstr ""
+
+#: association_mapping.xml:301(title) association_mapping.xml:436(title)
+msgid "one to many / many to one"
+msgstr ""
+
+#: association_mapping.xml:303(para)
+msgid "A <emphasis>bidirectional many-to-one association</emphasis> is the most common kind of association. (This is the standard parent/child relationship.)"
+msgstr ""
+
+#: association_mapping.xml:333(para)
+msgid "If you use a <literal>List</literal> (or other indexed collection) you need to set the <literal>key</literal> column of the foreign key to <literal>not null</literal>, and let Hibernate manage the association from the collections side to maintain the index of each element (making the other side virtually inverse by setting <literal>update=\"false\"</literal> and <literal>insert=\"false\"</literal>):"
+msgstr ""
+
+#: association_mapping.xml:361(para)
+msgid "It is important that you define <literal>not-null=\"true\"</literal> on the <literal><key></literal> element of the collection mapping if the underlying foreign key column is <literal>NOT NULL</literal>. Don't only declare <literal>not-null=\"true\"</literal> on a possible nested <literal><column></literal> element, but on the <literal><key></literal> element."
+msgstr ""
+
+#: association_mapping.xml:375(para)
+msgid "A <emphasis>bidirectional one-to-one association on a foreign key</emphasis> is quite common."
+msgstr ""
+
+#: association_mapping.xml:402(para)
+msgid "A <emphasis>bidirectional one-to-one association on a primary key</emphasis> uses the special id generator."
+msgstr ""
+
+#: association_mapping.xml:433(title)
+msgid "Bidirectional associations with join tables"
+msgstr ""
+
+#: association_mapping.xml:438(para)
+msgid "A <emphasis>bidirectional one-to-many association on a join table</emphasis>. Note that the <literal>inverse=\"true\"</literal> can go on either end of the association, on the collection, or on the join."
+msgstr ""
+
+#: association_mapping.xml:481(para)
+msgid "A <emphasis>bidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr ""
+
+#: association_mapping.xml:527(para)
+msgid "Finally, we have a <emphasis>bidirectional many-to-many association</emphasis>."
+msgstr ""
+
+#: association_mapping.xml:564(title)
+msgid "More complex association mappings"
+msgstr ""
+
+#: association_mapping.xml:566(para)
+msgid "More complex association joins are <emphasis>extremely</emphasis> rare. Hibernate makes it possible to handle more complex situations using SQL fragments embedded in the mapping document. For example, if a table with historical account information data defines <literal>accountNumber</literal>, <literal>effectiveEndDate</literal> and <literal>effectiveStartDate</literal>columns, mapped as follows:"
+msgstr ""
+
+#: association_mapping.xml:584(para)
+msgid "Then we can map an association to the <emphasis>current</emphasis> instance (the one with null <literal>effectiveEndDate</literal>) using:"
+msgstr ""
+
+#: association_mapping.xml:596(para)
+msgid "In a more complex example, imagine that the association between <literal>Employee</literal> and <literal>Organization</literal> is maintained in an <literal>Employment</literal> table full of historical employment data. Then an association to the employee's <emphasis>most recent</emphasis> employer (the one with the most recent <literal>startDate</literal>) might be mapped this way:"
+msgstr ""
+
+#: association_mapping.xml:617(para)
+msgid "You can get quite creative with this functionality, but it is usually more practical to handle these kinds of cases using HQL or a criteria query."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: association_mapping.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/basic_mapping.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/basic_mapping.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/basic_mapping.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1532 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:29-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: basic_mapping.xml:5(title)
+msgid "Basic O/R Mapping"
+msgstr ""
+
+#: basic_mapping.xml:8(title)
+msgid "Mapping declaration"
+msgstr ""
+
+#: basic_mapping.xml:10(para)
+msgid "Object/relational mappings are usually defined in an XML document. The mapping document is designed to be readable and hand-editable. The mapping language is Java-centric, meaning that mappings are constructed around persistent class declarations, not table declarations."
+msgstr ""
+
+#: basic_mapping.xml:17(para)
+msgid "Note that, even though many Hibernate users choose to write the XML by hand, a number of tools exist to generate the mapping document, including XDoclet, Middlegen and AndroMDA."
+msgstr ""
+
+#: basic_mapping.xml:23(para)
+msgid "Lets kick off with an example mapping:"
+msgstr ""
+
+#: basic_mapping.xml:92(para)
+msgid "We will now discuss the content of the mapping document. We will only describe the document elements and attributes that are used by Hibernate at runtime. The mapping document also contains some extra optional attributes and elements that affect the database schemas exported by the schema export tool. (For example the <literal> not-null</literal> attribute.)"
+msgstr ""
+
+#: basic_mapping.xml:103(title)
+msgid "Doctype"
+msgstr ""
+
+#: basic_mapping.xml:105(para)
+msgid "All XML mappings should declare the doctype shown. The actual DTD may be found at the URL above, in the directory <literal>hibernate-x.x.x/src/org/hibernate </literal> or in <literal>hibernate3.jar</literal>. Hibernate will always look for the DTD in its classpath first. If you experience lookups of the DTD using an Internet connection, check your DTD declaration against the contents of your claspath."
+msgstr ""
+
+#: basic_mapping.xml:115(title)
+msgid "EntityResolver"
+msgstr ""
+
+#: basic_mapping.xml:116(para)
+msgid "As mentioned previously, Hibernate will first attempt to resolve DTDs in its classpath. The manner in which it does this is by registering a custom <literal>org.xml.sax.EntityResolver</literal> implementation with the SAXReader it uses to read in the xml files. This custom <literal>EntityResolver</literal> recognizes two different systemId namespaces."
+msgstr ""
+
+#: basic_mapping.xml:124(para)
+msgid "a <literal>hibernate namespace</literal> is recognized whenever the resolver encounteres a systemId starting with <literal>http://hibernate.sourceforge.net/</literal>; the resolver attempts to resolve these entities via the classlaoder which loaded the Hibernate classes."
+msgstr ""
+
+#: basic_mapping.xml:133(para)
+msgid "a <literal>user namespace</literal> is recognized whenever the resolver encounteres a systemId using a <literal>classpath://</literal> URL protocol; the resolver will attempt to resolve these entities via (1) the current thread context classloader and (2) the classloader which loaded the Hibernate classes."
+msgstr ""
+
+#: basic_mapping.xml:142(para)
+msgid "An example of utilizing user namespacing:"
+msgstr ""
+
+#: basic_mapping.xml:160(para)
+msgid "Where <literal>types.xml</literal> is a resource in the <literal>your.domain</literal> package and contains a custom <xref linkend=\"mapping-types-custom\">typedef</xref>."
+msgstr ""
+
+#: basic_mapping.xml:168(title)
+msgid "hibernate-mapping"
+msgstr ""
+
+#: basic_mapping.xml:170(para)
+msgid "This element has several optional attributes. The <literal>schema</literal> and <literal>catalog</literal> attributes specify that tables referred to in this mapping belong to the named schema and/or catalog. If specified, tablenames will be qualified by the given schema and catalog names. If missing, tablenames will be unqualified. The <literal>default-cascade</literal> attribute specifies what cascade style should be assumed for properties and collections which do not specify a <literal>cascade</literal> attribute. The <literal>auto-import</literal> attribute lets us use unqualified class names in the query language, by default."
+msgstr ""
+
+#: basic_mapping.xml:202(para)
+msgid "<literal>schema</literal> (optional): The name of a database schema."
+msgstr ""
+
+#: basic_mapping.xml:207(para)
+msgid "<literal>catalog</literal> (optional): The name of a database catalog."
+msgstr ""
+
+#: basic_mapping.xml:212(para)
+msgid "<literal>default-cascade</literal> (optional - defaults to <literal>none</literal>): A default cascade style."
+msgstr ""
+
+#: basic_mapping.xml:218(para)
+msgid "<literal>default-access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing all properties. Can be a custom implementation of <literal>PropertyAccessor</literal>."
+msgstr ""
+
+#: basic_mapping.xml:225(para)
+msgid "<literal>default-lazy</literal> (optional - defaults to <literal>true</literal>): The default value for unspecifed <literal>lazy</literal> attributes of class and collection mappings."
+msgstr ""
+
+#: basic_mapping.xml:232(para)
+msgid "<literal>auto-import</literal> (optional - defaults to <literal>true</literal>): Specifies whether we can use unqualified class names (of classes in this mapping) in the query language."
+msgstr ""
+
+#: basic_mapping.xml:239(para)
+msgid "<literal>package</literal> (optional): Specifies a package prefix to assume for unqualified class names in the mapping document."
+msgstr ""
+
+#: basic_mapping.xml:247(para)
+msgid "If you have two persistent classes with the same (unqualified) name, you should set <literal>auto-import=\"false\"</literal>. Hibernate will throw an exception if you attempt to assign two classes to the same \"imported\" name."
+msgstr ""
+
+#: basic_mapping.xml:253(para)
+msgid "Note that the <literal>hibernate-mapping</literal> element allows you to nest several persistent <literal><class></literal> mappings, as shown above. It is however good practice (and expected by some tools) to map only a single persistent class (or a single class hierarchy) in one mapping file and name it after the persistent superclass, e.g. <literal>Cat.hbm.xml</literal>, <literal>Dog.hbm.xml</literal>, or if using inheritance, <literal>Animal.hbm.xml</literal>."
+msgstr ""
+
+#: basic_mapping.xml:266(title) basic_mapping.xml:3077(literal)
+msgid "class"
+msgstr ""
+
+#: basic_mapping.xml:268(para)
+msgid "You may declare a persistent class using the <literal>class</literal> element:"
+msgstr ""
+
+#: basic_mapping.xml:322(para)
+msgid "<literal>name</literal> (optional): The fully qualified Java class name of the persistent class (or interface). If this attribute is missing, it is assumed that the mapping is for a non-POJO entity."
+msgstr ""
+
+#: basic_mapping.xml:329(para)
+msgid "<literal>table</literal> (optional - defaults to the unqualified class name): The name of its database table."
+msgstr ""
+
+#: basic_mapping.xml:335(para)
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses, used for polymorphic behaviour. Acceptable values include <literal>null</literal> and <literal>not null</literal>."
+msgstr ""
+
+#: basic_mapping.xml:342(para)
+msgid "<literal>mutable</literal> (optional, defaults to <literal>true</literal>): Specifies that instances of the class are (not) mutable."
+msgstr ""
+
+#: basic_mapping.xml:348(para) basic_mapping.xml:2605(para)
+msgid "<literal>schema</literal> (optional): Override the schema name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr ""
+
+#: basic_mapping.xml:354(para) basic_mapping.xml:2611(para)
+msgid "<literal>catalog</literal> (optional): Override the catalog name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr ""
+
+#: basic_mapping.xml:360(para)
+msgid "<literal>proxy</literal> (optional): Specifies an interface to use for lazy initializing proxies. You may specify the name of the class itself."
+msgstr ""
+
+#: basic_mapping.xml:366(para)
+msgid "<literal>dynamic-update</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>UPDATE</literal> SQL should be generated at runtime and contain only those columns whose values have changed."
+msgstr ""
+
+#: basic_mapping.xml:373(para)
+msgid "<literal>dynamic-insert</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>INSERT</literal> SQL should be generated at runtime and contain only the columns whose values are not null."
+msgstr ""
+
+#: basic_mapping.xml:380(para)
+msgid "<literal>select-before-update</literal> (optional, defaults to <literal>false</literal>): Specifies that Hibernate should <emphasis>never</emphasis> perform an SQL <literal>UPDATE</literal> unless it is certain that an object is actually modified. In certain cases (actually, only when a transient object has been associated with a new session using <literal>update()</literal>), this means that Hibernate will perform an extra SQL <literal>SELECT</literal> to determine if an <literal>UPDATE</literal> is actually required."
+msgstr ""
+
+#: basic_mapping.xml:390(para)
+msgid "<literal>polymorphism</literal> (optional, defaults to <literal>implicit</literal>): Determines whether implicit or explicit query polymorphism is used."
+msgstr ""
+
+#: basic_mapping.xml:396(para)
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving objects of this class"
+msgstr ""
+
+#: basic_mapping.xml:402(para)
+msgid "<literal>persister</literal> (optional): Specifies a custom <literal>ClassPersister</literal>."
+msgstr ""
+
+#: basic_mapping.xml:407(para)
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for fetching instances of this class by identifier."
+msgstr ""
+
+#: basic_mapping.xml:413(para)
+msgid "<literal>optimistic-lock</literal> (optional, defaults to <literal>version</literal>): Determines the optimistic locking strategy."
+msgstr ""
+
+#: basic_mapping.xml:419(para)
+msgid "<literal>lazy</literal> (optional): Lazy fetching may be completely disabled by setting <literal>lazy=\"false\"</literal>."
+msgstr ""
+
+#: basic_mapping.xml:425(para)
+msgid "<literal>entity-name</literal> (optional, defaults to the class name): Hibernate3 allows a class to be mapped multiple times (to different tables, potentially), and allows entity mappings that are represented by Maps or XML at the Java level. In these cases, you should provide an explicit arbitrary name for the entity. See <xref linkend=\"persistent-classes-dynamicmodels\"/> and <xref linkend=\"xml\"/> for more information."
+msgstr ""
+
+#: basic_mapping.xml:435(para)
+msgid "<literal>check</literal> (optional): A SQL expression used to generate a multi-row <emphasis>check</emphasis> constraint for automatic schema generation."
+msgstr ""
+
+#: basic_mapping.xml:441(para)
+msgid "<literal>rowid</literal> (optional): Hibernate can use so called ROWIDs on databases which support. E.g. on Oracle, Hibernate can use the <literal>rowid</literal> extra column for fast updates if you set this option to <literal>rowid</literal>. A ROWID is an implementation detail and represents the physical location of a stored tuple."
+msgstr ""
+
+#: basic_mapping.xml:449(para)
+msgid "<literal>subselect</literal> (optional): Maps an immutable and read-only entity to a database subselect. Useful if you want to have a view instead of a base table, but don't. See below for more information."
+msgstr ""
+
+#: basic_mapping.xml:456(para)
+msgid "<literal>abstract</literal> (optional): Used to mark abstract superclasses in <literal><union-subclass></literal> hierarchies."
+msgstr ""
+
+#: basic_mapping.xml:464(para)
+msgid "It is perfectly acceptable for the named persistent class to be an interface. You would then declare implementing classes of that interface using the <literal><subclass></literal> element. You may persist any <emphasis>static</emphasis> inner class. You should specify the class name using the standard form ie. <literal>eg.Foo$Bar</literal>."
+msgstr ""
+
+#: basic_mapping.xml:471(para)
+msgid "Immutable classes, <literal>mutable=\"false\"</literal>, may not be updated or deleted by the application. This allows Hibernate to make some minor performance optimizations."
+msgstr ""
+
+#: basic_mapping.xml:476(para)
+msgid "The optional <literal>proxy</literal> attribute enables lazy initialization of persistent instances of the class. Hibernate will initially return CGLIB proxies which implement the named interface. The actual persistent object will be loaded when a method of the proxy is invoked. See \"Initializing collections and proxies\" below."
+msgstr ""
+
+#: basic_mapping.xml:483(para)
+msgid "<emphasis>Implicit</emphasis> polymorphism means that instances of the class will be returned by a query that names any superclass or implemented interface or the class and that instances of any subclass of the class will be returned by a query that names the class itself. <emphasis>Explicit</emphasis> polymorphism means that class instances will be returned only by queries that explicitly name that class and that queries that name the class will return only instances of subclasses mapped inside this <literal><class></literal> declaration as a <literal><subclass></literal> or <literal><joined-subclass></literal>. For most purposes the default, <literal>polymorphism=\"implicit\"</literal>, is appropriate. Explicit polymorphism is useful when two different classes are mapped to the same table (this allows a \"lightweight\" class that contains a subset of the table columns)."
+msgstr ""
+
+#: basic_mapping.xml:495(para)
+msgid "The <literal>persister</literal> attribute lets you customize the persistence strategy used for the class. You may, for example, specify your own subclass of <literal>org.hibernate.persister.EntityPersister</literal> or you might even provide a completely new implementation of the interface <literal>org.hibernate.persister.ClassPersister</literal> that implements persistence via, for example, stored procedure calls, serialization to flat files or LDAP. See <literal>org.hibernate.test.CustomPersister</literal> for a simple example (of \"persistence\" to a <literal>Hashtable</literal>)."
+msgstr ""
+
+#: basic_mapping.xml:506(para)
+msgid "Note that the <literal>dynamic-update</literal> and <literal>dynamic-insert</literal> settings are not inherited by subclasses and so may also be specified on the <literal><subclass></literal> or <literal><joined-subclass></literal> elements. These settings may increase performance in some cases, but might actually decrease performance in others. Use judiciously."
+msgstr ""
+
+#: basic_mapping.xml:514(para)
+msgid "Use of <literal>select-before-update</literal> will usually decrease performance. It is very useful to prevent a database update trigger being called unnecessarily if you reattach a graph of detached instances to a <literal>Session</literal>."
+msgstr ""
+
+#: basic_mapping.xml:520(para)
+msgid "If you enable <literal>dynamic-update</literal>, you will have a choice of optimistic locking strategies:"
+msgstr ""
+
+#: basic_mapping.xml:526(para)
+msgid "<literal>version</literal> check the version/timestamp columns"
+msgstr ""
+
+#: basic_mapping.xml:531(para)
+msgid "<literal>all</literal> check all columns"
+msgstr ""
+
+#: basic_mapping.xml:536(para)
+msgid "<literal>dirty</literal> check the changed columns, allowing some concurrent updates"
+msgstr ""
+
+#: basic_mapping.xml:541(para)
+msgid "<literal>none</literal> do not use optimistic locking"
+msgstr ""
+
+#: basic_mapping.xml:546(para)
+msgid "We <emphasis>very</emphasis> strongly recommend that you use version/timestamp columns for optimistic locking with Hibernate. This is the optimal strategy with respect to performance and is the only strategy that correctly handles modifications made to detached instances (ie. when <literal>Session.merge()</literal> is used)."
+msgstr ""
+
+#: basic_mapping.xml:553(para)
+msgid "There is no difference between a view and a base table for a Hibernate mapping, as expected this is transparent at the database level (note that some DBMS don't support views properly, especially with updates). Sometimes you want to use a view, but can't create one in the database (ie. with a legacy schema). In this case, you can map an immutable and read-only entity to a given SQL subselect expression:"
+msgstr ""
+
+#: basic_mapping.xml:574(para)
+msgid "Declare the tables to synchronize this entity with, ensuring that auto-flush happens correctly, and that queries against the derived entity do not return stale data. The <literal><subselect></literal> is available as both as an attribute and a nested mapping element."
+msgstr ""
+
+#: basic_mapping.xml:584(title)
+msgid "id"
+msgstr ""
+
+#: basic_mapping.xml:586(para)
+msgid "Mapped classes <emphasis>must</emphasis> declare the primary key column of the database table. Most classes will also have a JavaBeans-style property holding the unique identifier of an instance. The <literal><id></literal> element defines the mapping from that property to the primary key column."
+msgstr ""
+
+#: basic_mapping.xml:613(para)
+msgid "<literal>name</literal> (optional): The name of the identifier property."
+msgstr ""
+
+#: basic_mapping.xml:618(para)
+msgid "<literal>type</literal> (optional): A name that indicates the Hibernate type."
+msgstr ""
+
+#: basic_mapping.xml:623(para)
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the primary key column."
+msgstr ""
+
+#: basic_mapping.xml:629(para)
+msgid "<literal>unsaved-value</literal> (optional - defaults to a \"sensible\" value): An identifier property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session."
+msgstr ""
+
+#: basic_mapping.xml:637(para) basic_mapping.xml:1187(para) basic_mapping.xml:1343(para) basic_mapping.xml:1433(para) basic_mapping.xml:1559(para) basic_mapping.xml:1775(para) basic_mapping.xml:1963(para) basic_mapping.xml:2162(para) basic_mapping.xml:2914(para)
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the property value."
+msgstr ""
+
+#: basic_mapping.xml:645(para)
+msgid "If the <literal>name</literal> attribute is missing, it is assumed that the class has no identifier property."
+msgstr ""
+
+#: basic_mapping.xml:650(para)
+msgid "The <literal>unsaved-value</literal> attribute is almost never needed in Hibernate3."
+msgstr ""
+
+#: basic_mapping.xml:654(para)
+msgid "There is an alternative <literal><composite-id></literal> declaration to allow access to legacy data with composite keys. We strongly discourage its use for anything else."
+msgstr ""
+
+#: basic_mapping.xml:660(title)
+msgid "Generator"
+msgstr ""
+
+#: basic_mapping.xml:662(para)
+msgid "The optional <literal><generator></literal> child element names a Java class used to generate unique identifiers for instances of the persistent class. If any parameters are required to configure or initialize the generator instance, they are passed using the <literal><param></literal> element."
+msgstr ""
+
+#: basic_mapping.xml:684(literal)
+msgid "increment"
+msgstr ""
+
+#: basic_mapping.xml:686(para)
+msgid "generates identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal> that are unique only when no other process is inserting data into the same table. <emphasis>Do not use in a cluster.</emphasis>"
+msgstr ""
+
+#: basic_mapping.xml:695(literal)
+msgid "identity"
+msgstr ""
+
+#: basic_mapping.xml:697(para)
+msgid "supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>."
+msgstr ""
+
+#: basic_mapping.xml:705(literal)
+msgid "sequence"
+msgstr ""
+
+#: basic_mapping.xml:707(para)
+msgid "uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>"
+msgstr ""
+
+#: basic_mapping.xml:715(literal)
+msgid "hilo"
+msgstr ""
+
+#: basic_mapping.xml:717(para)
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a table and column (by default <literal>hibernate_unique_key</literal> and <literal>next_hi</literal> respectively) as a source of hi values. The hi/lo algorithm generates identifiers that are unique only for a particular database."
+msgstr ""
+
+#: basic_mapping.xml:727(literal)
+msgid "seqhilo"
+msgstr ""
+
+#: basic_mapping.xml:729(para)
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a named database sequence."
+msgstr ""
+
+#: basic_mapping.xml:737(literal)
+msgid "uuid"
+msgstr ""
+
+#: basic_mapping.xml:739(para)
+msgid "uses a 128-bit UUID algorithm to generate identifiers of type string, unique within a network (the IP address is used). The UUID is encoded as a string of hexadecimal digits of length 32."
+msgstr ""
+
+#: basic_mapping.xml:747(literal)
+msgid "guid"
+msgstr ""
+
+#: basic_mapping.xml:749(para)
+msgid "uses a database-generated GUID string on MS SQL Server and MySQL."
+msgstr ""
+
+#: basic_mapping.xml:755(literal)
+msgid "native"
+msgstr ""
+
+#: basic_mapping.xml:757(para)
+msgid "picks <literal>identity</literal>, <literal>sequence</literal> or <literal>hilo</literal> depending upon the capabilities of the underlying database."
+msgstr ""
+
+#: basic_mapping.xml:765(literal)
+msgid "assigned"
+msgstr ""
+
+#: basic_mapping.xml:767(para)
+msgid "lets the application to assign an identifier to the object before <literal>save()</literal> is called. This is the default strategy if no <literal><generator></literal> element is specified."
+msgstr ""
+
+#: basic_mapping.xml:775(literal)
+msgid "select"
+msgstr ""
+
+#: basic_mapping.xml:777(para)
+msgid "retrieves a primary key assigned by a database trigger by selecting the row by some unique key and retrieving the primary key value."
+msgstr ""
+
+#: basic_mapping.xml:784(literal)
+msgid "foreign"
+msgstr ""
+
+#: basic_mapping.xml:786(para)
+msgid "uses the identifier of another associated object. Usually used in conjunction with a <literal><one-to-one></literal> primary key association."
+msgstr ""
+
+#: basic_mapping.xml:793(literal)
+msgid "sequence-identity"
+msgstr ""
+
+#: basic_mapping.xml:795(para)
+msgid "a specialized sequence generation strategy which utilizes a database sequence for the actual value generation, but combines this with JDBC3 getGeneratedKeys to actually return the generated identifier value as part of the insert statement execution. This strategy is only known to be supported on Oracle 10g drivers targetted for JDK 1.4. Note comments on these insert statements are disabled due to a bug in the Oracle drivers."
+msgstr ""
+
+#: basic_mapping.xml:676(para)
+msgid "All generators implement the interface <literal>org.hibernate.id.IdentifierGenerator</literal>. This is a very simple interface; some applications may choose to provide their own specialized implementations. However, Hibernate provides a range of built-in implementations. There are shortcut names for the built-in generators: <placeholder-1/>"
+msgstr ""
+
+#: basic_mapping.xml:812(title)
+msgid "Hi/lo algorithm"
+msgstr ""
+
+#: basic_mapping.xml:813(para)
+msgid "The <literal>hilo</literal> and <literal>seqhilo</literal> generators provide two alternate implementations of the hi/lo algorithm, a favorite approach to identifier generation. The first implementation requires a \"special\" database table to hold the next available \"hi\" value. The second uses an Oracle-style sequence (where supported)."
+msgstr ""
+
+#: basic_mapping.xml:835(para)
+msgid "Unfortunately, you can't use <literal>hilo</literal> when supplying your own <literal>Connection</literal> to Hibernate. When Hibernate is using an application server datasource to obtain connections enlisted with JTA, you must properly configure the <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr ""
+
+#: basic_mapping.xml:844(title)
+msgid "UUID algorithm"
+msgstr ""
+
+#: basic_mapping.xml:845(para)
+msgid "The UUID contains: IP address, startup time of the JVM (accurate to a quarter second), system time and a counter value (unique within the JVM). It's not possible to obtain a MAC address or memory address from Java code, so this is the best we can do without using JNI."
+msgstr ""
+
+#: basic_mapping.xml:854(title)
+msgid "Identity columns and sequences"
+msgstr ""
+
+#: basic_mapping.xml:855(para)
+msgid "For databases which support identity columns (DB2, MySQL, Sybase, MS SQL), you may use <literal>identity</literal> key generation. For databases that support sequences (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) you may use <literal>sequence</literal> style key generation. Both these strategies require two SQL queries to insert a new object."
+msgstr ""
+
+#: basic_mapping.xml:873(para)
+msgid "For cross-platform development, the <literal>native</literal> strategy will choose from the <literal>identity</literal>, <literal>sequence</literal> and <literal>hilo</literal> strategies, dependant upon the capabilities of the underlying database."
+msgstr ""
+
+#: basic_mapping.xml:882(title)
+msgid "Assigned identifiers"
+msgstr ""
+
+#: basic_mapping.xml:883(para)
+msgid "If you want the application to assign identifiers (as opposed to having Hibernate generate them), you may use the <literal>assigned</literal> generator. This special generator will use the identifier value already assigned to the object's identifier property. This generator is used when the primary key is a natural key instead of a surrogate key. This is the default behavior if you do no specify a <literal><generator></literal> element."
+msgstr ""
+
+#: basic_mapping.xml:892(para)
+msgid "Choosing the <literal>assigned</literal> generator makes Hibernate use <literal>unsaved-value=\"undefined\"</literal>, forcing Hibernate to go to the database to determine if an instance is transient or detached, unless there is a version or timestamp property, or you define <literal>Interceptor.isUnsaved()</literal>."
+msgstr ""
+
+#: basic_mapping.xml:902(title)
+msgid "Primary keys assigned by triggers"
+msgstr ""
+
+#: basic_mapping.xml:903(para)
+msgid "For legacy schemas only (Hibernate does not generate DDL with triggers)."
+msgstr ""
+
+#: basic_mapping.xml:913(para)
+msgid "In the above example, there is a unique valued property named <literal>socialSecurityNumber</literal> defined by the class, as a natural key, and a surrogate key named <literal>person_id</literal> whose value is generated by a trigger."
+msgstr ""
+
+#: basic_mapping.xml:925(title)
+msgid "Enhanced identifier generators"
+msgstr ""
+
+#: basic_mapping.xml:927(para)
+msgid "Starting with release 3.2.3, there are 2 new generators which represent a re-thinking of 2 different aspects of identifier generation. The first aspect is database portability; the second is optimization (not having to query the database for every request for a new identifier value). These two new generators are intended to take the place of some of the named generators described above (starting in 3.3.x); however, they are included in the current releases and can be referenced by FQN."
+msgstr ""
+
+#: basic_mapping.xml:949(para)
+msgid "<literal>sequence_name</literal> (optional, defaults to <literal>hibernate_sequence</literal>): The name of the sequence (or table) to be used."
+msgstr ""
+
+#: basic_mapping.xml:955(para)
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the sequence/table. In sequence creation terms, this is analogous to the clause typical named \"STARTS WITH\"."
+msgstr ""
+
+#: basic_mapping.xml:962(para)
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the sequence/table should differ. In sequence creation terms, this is analogous to the clause typical named \"INCREMENT BY\"."
+msgstr ""
+
+#: basic_mapping.xml:969(para)
+msgid "<literal>force_table_use</literal> (optional, defaults to <literal>false</literal>): Should we force the use of a table as the backing structure even though the dialect might support sequence?"
+msgstr ""
+
+#: basic_mapping.xml:976(para)
+msgid "<literal>value_column</literal> (optional, defaults to <literal>next_val</literal>): Only relevant for table structures! The name of the column on the table which is used to hold the value."
+msgstr ""
+
+#: basic_mapping.xml:983(para)
+msgid "<literal>optimizer</literal> (optional, defaults to <literal>none</literal>): See <xref linkend=\"mapping-declaration-id-enhanced-optimizers\"/>"
+msgstr ""
+
+#: basic_mapping.xml:935(para)
+msgid "The first of these new generators is <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> which is intended firstly as a replacement for the <literal>sequence</literal> generator and secondly as a better portability generator than <literal>native</literal> (because <literal>native</literal> (generally) chooses between <literal>identity</literal> and <literal>sequence</literal> which have largely different semantics which can cause subtle isssues in applications eyeing portability). <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> however achieves portability in a different manner. It chooses between using a table or a sequence in the database to store its incrementing values depending on the capabilities of the dialect being used. The difference between this and <literal>native</literal> is that table-based and sequence-based storage have the same exact semantic (in fact sequences are exactly what Hibernate tries to emmulate with its!
table-based generators). This generator has a number of configuration parameters: <placeholder-1/>"
+msgstr ""
+
+#: basic_mapping.xml:1000(para)
+msgid "<literal>table_name</literal> (optional, defaults to <literal>hibernate_sequences</literal>): The name of the table to be used."
+msgstr ""
+
+#: basic_mapping.xml:1006(para)
+msgid "<literal>value_column_name</literal> (optional, defaults to <literal>next_val</literal>): The name of the column on the table which is used to hold the value."
+msgstr ""
+
+#: basic_mapping.xml:1012(para)
+msgid "<literal>segment_column_name</literal> (optional, defaults to <literal>sequence_name</literal>): The name of the column on the table which is used to hold the \"segement key\". This is the value which distinctly identifies which increment value to use."
+msgstr ""
+
+#: basic_mapping.xml:1019(para)
+msgid "<literal>segment_value</literal> (optional, defaults to <literal>default</literal>): The \"segment key\" value for the segment from which we want to pull increment values for this generator."
+msgstr ""
+
+#: basic_mapping.xml:1026(para)
+msgid "<literal>segment_value_length</literal> (optional, defaults to <literal>255</literal>): Used for schema generation; the column size to create this segment key column."
+msgstr ""
+
+#: basic_mapping.xml:1032(para)
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the table."
+msgstr ""
+
+#: basic_mapping.xml:1038(para)
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the table should differ."
+msgstr ""
+
+#: basic_mapping.xml:1044(para)
+msgid "<literal>optimizer</literal> (optional, defaults to <literal/>): See <xref linkend=\"mapping-declaration-id-enhanced-optimizers\"/>"
+msgstr ""
+
+#: basic_mapping.xml:990(para)
+msgid "The second of these new generators is <literal>org.hibernate.id.enhanced.TableGenerator</literal> which is intended firstly as a replacement for the <literal>table</literal> generator (although it actually functions much more like <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal>) and secondly as a re-implementation of <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal> utilizing the notion of pluggable optimiziers. Essentially this generator defines a table capable of holding a number of different increment values simultaneously by using multiple distinctly keyed rows. This generator has a number of configuration parameters: <placeholder-1/>"
+msgstr ""
+
+#: basic_mapping.xml:1054(title)
+msgid "Identifier generator optimization"
+msgstr ""
+
+#: basic_mapping.xml:1063(para)
+msgid "<literal>none</literal> (generally this is the default if no optimizer was specified): This says to not perform any optimizations, and hit the database each and every request."
+msgstr ""
+
+#: basic_mapping.xml:1069(para)
+msgid "<literal>hilo</literal>: applies a hi/lo algorithm around the database retrieved values. The values from the database for this optimizer are expected to be sequential. The values retrieved from the database structure for this optimizer indicates the \"group number\"; the <literal>increment_size</literal> is multiplied by that value in memory to define a group \"hi value\"."
+msgstr ""
+
+#: basic_mapping.xml:1078(para)
+msgid "<literal>pooled</literal>: like was discussed for <literal>hilo</literal>, this optimizers attempts to minimize the number of hits to the database. Here, however, we simply store the starting value for the \"next group\" into the database structure rather than a sequential value in combination with an in-memory grouping algorithm. <literal>increment_size</literal> here refers to the values coming from the database."
+msgstr ""
+
+#: basic_mapping.xml:1055(para)
+msgid "For identifier generators which store values in the database, it is inefficient for them to hit the database on each and every call to generate a new identifier value. Instead, you'd ideally want to group a bunch of them in memory and only hit the database when you have exhausted your in-memory value group. This is the role of the pluggable optimizers. Currently only the two enhanced generators (<xref linkend=\"mapping-declaration-id-enhanced\"/> support this notion. <placeholder-1/>"
+msgstr ""
+
+#: basic_mapping.xml:1091(title)
+msgid "composite-id"
+msgstr ""
+
+#: basic_mapping.xml:1105(para)
+msgid "For a table with a composite key, you may map multiple properties of the class as identifier properties. The <literal><composite-id></literal> element accepts <literal><key-property></literal> property mappings and <literal><key-many-to-one></literal> mappings as child elements."
+msgstr ""
+
+#: basic_mapping.xml:1117(para)
+msgid "Your persistent class <emphasis>must</emphasis> override <literal>equals()</literal> and <literal>hashCode()</literal> to implement composite identifier equality. It must also implements <literal>Serializable</literal>."
+msgstr ""
+
+#: basic_mapping.xml:1123(para)
+msgid "Unfortunately, this approach to composite identifiers means that a persistent object is its own identifier. There is no convenient \"handle\" other than the object itself. You must instantiate an instance of the persistent class itself and populate its identifier properties before you can <literal>load()</literal> the persistent state associated with a composite key. We call this approach an <emphasis>embedded</emphasis> composite identifier, and discourage it for serious applications."
+msgstr ""
+
+#: basic_mapping.xml:1132(para)
+msgid "A second approach is what we call a <emphasis>mapped</emphasis> composite identifier, where the identifier properties named inside the <literal><composite-id></literal> element are duplicated on both the persistent class and a separate identifier class."
+msgstr ""
+
+#: basic_mapping.xml:1143(para)
+msgid "In this example, both the composite identifier class, <literal>MedicareId</literal>, and the entity class itself have properties named <literal>medicareNumber</literal> and <literal>dependent</literal>. The identifier class must override <literal>equals()</literal> and <literal>hashCode()</literal> and implement. <literal>Serializable</literal>. The disadvantage of this approach is quite obvious—code duplication."
+msgstr ""
+
+#: basic_mapping.xml:1152(para)
+msgid "The following attributes are used to specify a mapped composite identifier:"
+msgstr ""
+
+#: basic_mapping.xml:1158(para)
+msgid "<literal>mapped</literal> (optional, defaults to <literal>false</literal>): indicates that a mapped composite identifier is used, and that the contained property mappings refer to both the entity class and the composite identifier class."
+msgstr ""
+
+#: basic_mapping.xml:1166(para)
+msgid "<literal>class</literal> (optional, but required for a mapped composite identifier): The class used as a composite identifier."
+msgstr ""
+
+#: basic_mapping.xml:1173(para)
+msgid "We will describe a third, even more convenient approach where the composite identifier is implemented as a component class in <xref linkend=\"components-compositeid\"/>. The attributes described below apply only to this alternative approach:"
+msgstr ""
+
+#: basic_mapping.xml:1181(para)
+msgid "<literal>name</literal> (optional, required for this approach): A property of component type that holds the composite identifier (see chapter 9)."
+msgstr ""
+
+#: basic_mapping.xml:1193(para)
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The component class used as a composite identifier (see next section)."
+msgstr ""
+
+#: basic_mapping.xml:1200(para)
+msgid "This third approach, an <emphasis>identifier component</emphasis> is the one we recommend for almost all applications."
+msgstr ""
+
+#: basic_mapping.xml:1208(title)
+msgid "discriminator"
+msgstr ""
+
+#: basic_mapping.xml:1210(para)
+msgid "The <literal><discriminator></literal> element is required for polymorphic persistence using the table-per-class-hierarchy mapping strategy and declares a discriminator column of the table. The discriminator column contains marker values that tell the persistence layer what subclass to instantiate for a particular row. A restricted set of types may be used: <literal>string</literal>, <literal>character</literal>, <literal>integer</literal>, <literal>byte</literal>, <literal>short</literal>, <literal>boolean</literal>, <literal>yes_no</literal>, <literal>true_false</literal>."
+msgstr ""
+
+#: basic_mapping.xml:1237(para)
+msgid "<literal>column</literal> (optional - defaults to <literal>class</literal>) the name of the discriminator column."
+msgstr ""
+
+#: basic_mapping.xml:1243(para)
+msgid "<literal>type</literal> (optional - defaults to <literal>string</literal>) a name that indicates the Hibernate type"
+msgstr ""
+
+#: basic_mapping.xml:1249(para)
+msgid "<literal>force</literal> (optional - defaults to <literal>false</literal>) \"force\" Hibernate to specify allowed discriminator values even when retrieving all instances of the root class."
+msgstr ""
+
+#: basic_mapping.xml:1256(para)
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>) set this to <literal>false</literal> if your discriminator column is also part of a mapped composite identifier. (Tells Hibernate to not include the column in SQL <literal>INSERT</literal>s.)"
+msgstr ""
+
+#: basic_mapping.xml:1264(para)
+msgid "<literal>formula</literal> (optional) an arbitrary SQL expression that is executed when a type has to be evaluated. Allows content-based discrimination."
+msgstr ""
+
+#: basic_mapping.xml:1272(para)
+msgid "Actual values of the discriminator column are specified by the <literal>discriminator-value</literal> attribute of the <literal><class></literal> and <literal><subclass></literal> elements."
+msgstr ""
+
+#: basic_mapping.xml:1278(para)
+msgid "The <literal>force</literal> attribute is (only) useful if the table contains rows with \"extra\" discriminator values that are not mapped to a persistent class. This will not usually be the case."
+msgstr ""
+
+#: basic_mapping.xml:1284(para)
+msgid "Using the <literal>formula</literal> attribute you can declare an arbitrary SQL expression that will be used to evaluate the type of a row:"
+msgstr ""
+
+#: basic_mapping.xml:1296(title)
+msgid "version (optional)"
+msgstr ""
+
+#: basic_mapping.xml:1298(para)
+msgid "The <literal><version></literal> element is optional and indicates that the table contains versioned data. This is particularly useful if you plan to use <emphasis>long transactions</emphasis> (see below)."
+msgstr ""
+
+#: basic_mapping.xml:1326(para)
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the column holding the version number."
+msgstr ""
+
+#: basic_mapping.xml:1332(para)
+msgid "<literal>name</literal>: The name of a property of the persistent class."
+msgstr ""
+
+#: basic_mapping.xml:1337(para)
+msgid "<literal>type</literal> (optional - defaults to <literal>integer</literal>): The type of the version number."
+msgstr ""
+
+#: basic_mapping.xml:1349(para)
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>undefined</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr ""
+
+#: basic_mapping.xml:1358(para)
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this version property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\">generated properties</xref>."
+msgstr ""
+
+#: basic_mapping.xml:1365(para)
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>): Specifies whether the version column should be included in SQL insert statements. May be set to <literal>false</literal> if and only if the database column is defined with a default value of <literal>0</literal>."
+msgstr ""
+
+#: basic_mapping.xml:1375(para)
+msgid "Version numbers may be of Hibernate type <literal>long</literal>, <literal>integer</literal>, <literal>short</literal>, <literal>timestamp</literal> or <literal>calendar</literal>."
+msgstr ""
+
+#: basic_mapping.xml:1380(para)
+msgid "A version or timestamp property should never be null for a detached instance, so Hibernate will detect any instance with a null version or timestamp as transient, no matter what other <literal>unsaved-value</literal> strategies are specified. <emphasis>Declaring a nullable version or timestamp property is an easy way to avoid any problems with transitive reattachment in Hibernate, especially useful for people using assigned identifiers or composite keys!</emphasis>"
+msgstr ""
+
+#: basic_mapping.xml:1391(title)
+msgid "timestamp (optional)"
+msgstr ""
+
+#: basic_mapping.xml:1393(para)
+msgid "The optional <literal><timestamp></literal> element indicates that the table contains timestamped data. This is intended as an alternative to versioning. Timestamps are by nature a less safe implementation of optimistic locking. However, sometimes the application might use the timestamps in other ways."
+msgstr ""
+
+#: basic_mapping.xml:1420(para)
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of a column holding the timestamp."
+msgstr ""
+
+#: basic_mapping.xml:1426(para)
+msgid "<literal>name</literal>: The name of a JavaBeans style property of Java type <literal>Date</literal> or <literal>Timestamp</literal> of the persistent class."
+msgstr ""
+
+#: basic_mapping.xml:1439(para)
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>null</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr ""
+
+#: basic_mapping.xml:1448(para)
+msgid "<literal>source</literal> (optional - defaults to <literal>vm</literal>): From where should Hibernate retrieve the timestamp value? From the database, or from the current JVM? Database-based timestamps incur an overhead because Hibernate must hit the database in order to determine the \"next value\", but will be safer for use in clustered environments. Note also, that not all <literal>Dialect</literal>s are known to support retrieving of the database's current timestamp, while others might be unsafe for usage in locking due to lack of precision (Oracle 8 for example)."
+msgstr ""
+
+#: basic_mapping.xml:1460(para)
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this timestamp property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\">generated properties</xref>."
+msgstr ""
+
+#: basic_mapping.xml:1469(para)
+msgid "Note that <literal><timestamp></literal> is equivalent to <literal><version type=\"timestamp\"></literal>. And <literal><timestamp source=\"db\"></literal> is equivalent to <literal><version type=\"dbtimestamp\"></literal>"
+msgstr ""
+
+#: basic_mapping.xml:1479(title)
+msgid "property"
+msgstr ""
+
+#: basic_mapping.xml:1481(para)
+msgid "The <literal><property></literal> element declares a persistent, JavaBean style property of the class."
+msgstr ""
+
+#: basic_mapping.xml:1525(para)
+msgid "<literal>name</literal>: the name of the property, with an initial lowercase letter."
+msgstr ""
+
+#: basic_mapping.xml:1531(para)
+msgid "<literal>column</literal> (optional - defaults to the property name): the name of the mapped database table column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr ""
+
+#: basic_mapping.xml:1538(para)
+msgid "<literal>type</literal> (optional): a name that indicates the Hibernate type."
+msgstr ""
+
+#: basic_mapping.xml:1543(para)
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) : specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" property whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr ""
+
+#: basic_mapping.xml:1552(para)
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> property. Computed properties do not have a column mapping of their own."
+msgstr ""
+
+#: basic_mapping.xml:1565(para)
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr ""
+
+#: basic_mapping.xml:1572(para)
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the columns. Also, allow this to be the target of a <literal>property-ref</literal>."
+msgstr ""
+
+#: basic_mapping.xml:1579(para)
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the columns."
+msgstr ""
+
+#: basic_mapping.xml:1585(para)
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr ""
+
+#: basic_mapping.xml:1593(para)
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\">generated properties</xref>."
+msgstr ""
+
+#: basic_mapping.xml:1602(para)
+msgid "<emphasis>typename</emphasis> could be:"
+msgstr ""
+
+#: basic_mapping.xml:1608(para)
+msgid "The name of a Hibernate basic type (eg. <literal>integer, string, character, date, timestamp, float, binary, serializable, object, blob</literal>)."
+msgstr ""
+
+#: basic_mapping.xml:1614(para)
+msgid "The name of a Java class with a default basic type (eg. <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal>)."
+msgstr ""
+
+#: basic_mapping.xml:1620(para)
+msgid "The name of a serializable Java class."
+msgstr ""
+
+#: basic_mapping.xml:1625(para)
+msgid "The class name of a custom type (eg. <literal>com.illflow.type.MyCustomType</literal>)."
+msgstr ""
+
+#: basic_mapping.xml:1631(para)
+msgid "If you do not specify a type, Hibernate will use reflection upon the named property to take a guess at the correct Hibernate type. Hibernate will try to interpret the name of the return class of the property getter using rules 2, 3, 4 in that order. However, this is not always enough. In certain cases you will still need the <literal>type</literal> attribute. (For example, to distinguish between <literal>Hibernate.DATE</literal> and <literal>Hibernate.TIMESTAMP</literal>, or to specify a custom type.)"
+msgstr ""
+
+#: basic_mapping.xml:1641(para)
+msgid "The <literal>access</literal> attribute lets you control how Hibernate will access the property at runtime. By default, Hibernate will call the property get/set pair. If you specify <literal>access=\"field\"</literal>, Hibernate will bypass the get/set pair and access the field directly, using reflection. You may specify your own strategy for property access by naming a class that implements the interface <literal>org.hibernate.property.PropertyAccessor</literal>."
+msgstr ""
+
+#: basic_mapping.xml:1650(para)
+msgid "An especially powerful feature are derived properties. These properties are by definition read-only, the property value is computed at load time. You declare the computation as a SQL expression, this translates to a <literal>SELECT</literal> clause subquery in the SQL query that loads an instance:"
+msgstr ""
+
+#: basic_mapping.xml:1664(para)
+msgid "Note that you can reference the entities own table by not declaring an alias on a particular column (<literal>customerId</literal> in the given example). Also note that you can use the nested <literal><formula></literal> mapping element if you don't like to use the attribute."
+msgstr ""
+
+#: basic_mapping.xml:1674(title)
+msgid "many-to-one"
+msgstr ""
+
+#: basic_mapping.xml:1676(para)
+msgid "An ordinary association to another persistent class is declared using a <literal>many-to-one</literal> element. The relational model is a many-to-one association: a foreign key in one table is referencing the primary key column(s) of the target table."
+msgstr ""
+
+#: basic_mapping.xml:1729(para) basic_mapping.xml:1924(para) basic_mapping.xml:2139(para)
+msgid "<literal>name</literal>: The name of the property."
+msgstr ""
+
+#: basic_mapping.xml:1734(para) basic_mapping.xml:2703(para)
+msgid "<literal>column</literal> (optional): The name of the foreign key column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr ""
+
+#: basic_mapping.xml:1741(para) basic_mapping.xml:1929(para)
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the associated class."
+msgstr ""
+
+#: basic_mapping.xml:1747(para)
+msgid "<literal>cascade</literal> (optional): Specifies which operations should be cascaded from the parent object to the associated object."
+msgstr ""
+
+#: basic_mapping.xml:1753(para) basic_mapping.xml:1950(para)
+msgid "<literal>fetch</literal> (optional - defaults to <literal>select</literal>): Chooses between outer-join fetching or sequential select fetching."
+msgstr ""
+
+#: basic_mapping.xml:1759(para)
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" association whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr ""
+
+#: basic_mapping.xml:1768(para)
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class is used."
+msgstr ""
+
+#: basic_mapping.xml:1781(para)
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. Also, allow this to be the target of a <literal>property-ref</literal>. This makes the association multiplicity effectively one to one."
+msgstr ""
+
+#: basic_mapping.xml:1789(para)
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the foreign key columns."
+msgstr ""
+
+#: basic_mapping.xml:1795(para)
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, dertermines if a version increment should occur when this property is dirty."
+msgstr ""
+
+#: basic_mapping.xml:1803(para)
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched."
+msgstr ""
+
+#: basic_mapping.xml:1813(para)
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr ""
+
+#: basic_mapping.xml:1820(para) basic_mapping.xml:1988(para)
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class."
+msgstr ""
+
+#: basic_mapping.xml:1826(para)
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> foreign key."
+msgstr ""
+
+#: basic_mapping.xml:1833(para)
+msgid "Setting a value of the <literal>cascade</literal> attribute to any meaningful value other than <literal>none</literal> will propagate certain operations to the associated object. The meaningful values are the names of Hibernate's basic operations, <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal>, as well as the special values <literal>delete-orphan</literal> and <literal>all</literal> and comma-separated combinations of operation names, for example, <literal>cascade=\"persist,merge,evict\"</literal> or <literal>cascade=\"all,delete-orphan\"</literal>. See <xref linkend=\"objectstate-transitive\"/> for a full explanation. Note that single valued associations (many-to-one and one-to-one associations) do not support orphan delete."
+msgstr ""
+
+#: basic_mapping.xml:1846(para)
+msgid "A typical <literal>many-to-one</literal> declaration looks as simple as this:"
+msgstr ""
+
+#: basic_mapping.xml:1852(para)
+msgid "The <literal>property-ref</literal> attribute should only be used for mapping legacy data where a foreign key refers to a unique key of the associated table other than the primary key. This is an ugly relational model. For example, suppose the <literal>Product</literal> class had a unique serial number, that is not the primary key. (The <literal>unique</literal> attribute controls Hibernate's DDL generation with the SchemaExport tool.)"
+msgstr ""
+
+#: basic_mapping.xml:1863(para)
+msgid "Then the mapping for <literal>OrderItem</literal> might use:"
+msgstr ""
+
+#: basic_mapping.xml:1869(para)
+msgid "This is certainly not encouraged, however."
+msgstr ""
+
+#: basic_mapping.xml:1873(para)
+msgid "If the referenced unique key comprises multiple properties of the associated entity, you should map the referenced properties inside a named <literal><properties></literal> element."
+msgstr ""
+
+#: basic_mapping.xml:1878(para)
+msgid "If the referenced unique key is the property of a component, you may specify a property path:"
+msgstr ""
+
+#: basic_mapping.xml:1887(title)
+msgid "one-to-one"
+msgstr ""
+
+#: basic_mapping.xml:1889(para)
+msgid "A one-to-one association to another persistent class is declared using a <literal>one-to-one</literal> element."
+msgstr ""
+
+#: basic_mapping.xml:1935(para)
+msgid "<literal>cascade</literal> (optional) specifies which operations should be cascaded from the parent object to the associated object."
+msgstr ""
+
+#: basic_mapping.xml:1941(para)
+msgid "<literal>constrained</literal> (optional) specifies that a foreign key constraint on the primary key of the mapped table references the table of the associated class. This option affects the order in which <literal>save()</literal> and <literal>delete()</literal> are cascaded, and determines whether the association may be proxied (it is also used by the schema export tool)."
+msgstr ""
+
+#: basic_mapping.xml:1956(para)
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to the primary key of this class. If not specified, the primary key of the associated class is used."
+msgstr ""
+
+#: basic_mapping.xml:1969(para)
+msgid "<literal>formula</literal> (optional): Almost all one to one associations map to the primary key of the owning entity. In the rare case that this is not the case, you may specify a some other column, columns or expression to join on using an SQL formula. (See <literal>org.hibernate.test.onetooneformula</literal> for an example.)"
+msgstr ""
+
+#: basic_mapping.xml:1977(para)
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched. <emphasis>Note that if <literal>constrained=\"false\"</literal>, proxying is impossible and Hibernate will eager fetch the association!</emphasis>"
+msgstr ""
+
+#: basic_mapping.xml:1995(para)
+msgid "There are two varieties of one-to-one association:"
+msgstr ""
+
+#: basic_mapping.xml:1999(para)
+msgid "primary key associations"
+msgstr ""
+
+#: basic_mapping.xml:2002(para)
+msgid "unique foreign key associations"
+msgstr ""
+
+#: basic_mapping.xml:2007(para)
+msgid "Primary key associations don't need an extra table column; if two rows are related by the association then the two table rows share the same primary key value. So if you want two objects to be related by a primary key association, you must make sure that they are assigned the same identifier value!"
+msgstr ""
+
+#: basic_mapping.xml:2014(para)
+msgid "For a primary key association, add the following mappings to <literal>Employee</literal> and <literal>Person</literal>, respectively."
+msgstr ""
+
+#: basic_mapping.xml:2022(para)
+msgid "Now we must ensure that the primary keys of related rows in the PERSON and EMPLOYEE tables are equal. We use a special Hibernate identifier generation strategy called <literal>foreign</literal>:"
+msgstr ""
+
+#: basic_mapping.xml:2040(para)
+msgid "A newly saved instance of <literal>Person</literal> is then assigned the same primary key value as the <literal>Employee</literal> instance refered with the <literal>employee</literal> property of that <literal>Person</literal>."
+msgstr ""
+
+#: basic_mapping.xml:2046(para)
+msgid "Alternatively, a foreign key with a unique constraint, from <literal>Employee</literal> to <literal>Person</literal>, may be expressed as:"
+msgstr ""
+
+#: basic_mapping.xml:2053(para)
+msgid "And this association may be made bidirectional by adding the following to the <literal>Person</literal> mapping:"
+msgstr ""
+
+#: basic_mapping.xml:2063(title)
+msgid "natural-id"
+msgstr ""
+
+#: basic_mapping.xml:2071(para)
+msgid "Even though we recommend the use of surrogate keys as primary keys, you should still try to identify natural keys for all entities. A natural key is a property or combination of properties that is unique and non-null. If it is also immutable, even better. Map the properties of the natural key inside the <literal><natural-id></literal> element. Hibernate will generate the necessary unique key and nullability constraints, and your mapping will be more self-documenting."
+msgstr ""
+
+#: basic_mapping.xml:2080(para)
+msgid "We strongly recommend that you implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the natural key properties of the entity."
+msgstr ""
+
+#: basic_mapping.xml:2085(para)
+msgid "This mapping is not intended for use with entities with natural primary keys."
+msgstr ""
+
+#: basic_mapping.xml:2091(para)
+msgid "<literal>mutable</literal> (optional, defaults to <literal>false</literal>): By default, natural identifier properties as assumed to be immutable (constant)."
+msgstr ""
+
+#: basic_mapping.xml:2101(title)
+msgid "component, dynamic-component"
+msgstr ""
+
+#: basic_mapping.xml:2103(para)
+msgid "The <literal><component></literal> element maps properties of a child object to columns of the table of a parent class. Components may, in turn, declare their own properties, components or collections. See \"Components\" below."
+msgstr ""
+
+#: basic_mapping.xml:2144(para)
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the component (child) class."
+msgstr ""
+
+#: basic_mapping.xml:2150(para) basic_mapping.xml:2250(para)
+msgid "<literal>insert</literal>: Do the mapped columns appear in SQL <literal>INSERT</literal>s?"
+msgstr ""
+
+#: basic_mapping.xml:2156(para) basic_mapping.xml:2256(para)
+msgid "<literal>update</literal>: Do the mapped columns appear in SQL <literal>UPDATE</literal>s?"
+msgstr ""
+
+#: basic_mapping.xml:2168(para)
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this component should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr ""
+
+#: basic_mapping.xml:2175(para)
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this component do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr ""
+
+#: basic_mapping.xml:2183(para) basic_mapping.xml:2270(para)
+msgid "<literal>unique</literal> (optional - defaults to <literal>false</literal>): Specifies that a unique constraint exists upon all mapped columns of the component."
+msgstr ""
+
+#: basic_mapping.xml:2192(para)
+msgid "The child <literal><property></literal> tags map properties of the child class to table columns."
+msgstr ""
+
+#: basic_mapping.xml:2197(para)
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr ""
+
+#: basic_mapping.xml:2203(para)
+msgid "The <literal><dynamic-component></literal> element allows a <literal>Map</literal> to be mapped as a component, where the property names refer to keys of the map, see <xref linkend=\"components-dynamic\"/>."
+msgstr ""
+
+#: basic_mapping.xml:2212(title)
+msgid "properties"
+msgstr ""
+
+#: basic_mapping.xml:2214(para)
+msgid "The <literal><properties></literal> element allows the definition of a named, logical grouping of properties of a class. The most important use of the construct is that it allows a combination of properties to be the target of a <literal>property-ref</literal>. It is also a convenient way to define a multi-column unique constraint."
+msgstr ""
+
+#: basic_mapping.xml:2244(para)
+msgid "<literal>name</literal>: The logical name of the grouping - <emphasis>not</emphasis> an actual property name."
+msgstr ""
+
+#: basic_mapping.xml:2262(para)
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to these properties do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when these properties are dirty."
+msgstr ""
+
+#: basic_mapping.xml:2279(para)
+msgid "For example, if we have the following <literal><properties></literal> mapping:"
+msgstr ""
+
+#: basic_mapping.xml:2294(para)
+msgid "Then we might have some legacy data association which refers to this unique key of the <literal>Person</literal> table, instead of to the primary key:"
+msgstr ""
+
+#: basic_mapping.xml:2306(para)
+msgid "We don't recommend the use of this kind of thing outside the context of mapping legacy data."
+msgstr ""
+
+#: basic_mapping.xml:2314(title)
+msgid "subclass"
+msgstr ""
+
+#: basic_mapping.xml:2316(para)
+msgid "Finally, polymorphic persistence requires the declaration of each subclass of the root persistent class. For the table-per-class-hierarchy mapping strategy, the <literal><subclass></literal> declaration is used."
+msgstr ""
+
+#: basic_mapping.xml:2345(para) basic_mapping.xml:2422(para) basic_mapping.xml:2533(para)
+msgid "<literal>name</literal>: The fully qualified class name of the subclass."
+msgstr ""
+
+#: basic_mapping.xml:2350(para)
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses."
+msgstr ""
+
+#: basic_mapping.xml:2356(para) basic_mapping.xml:2432(para) basic_mapping.xml:2543(para)
+msgid "<literal>proxy</literal> (optional): Specifies a class or interface to use for lazy initializing proxies."
+msgstr ""
+
+#: basic_mapping.xml:2362(para) basic_mapping.xml:2438(para) basic_mapping.xml:2549(para)
+msgid "<literal>lazy</literal> (optional, defaults to <literal>true</literal>): Setting <literal>lazy=\"false\"</literal> disables the use of lazy fetching."
+msgstr ""
+
+#: basic_mapping.xml:2370(para)
+msgid "Each subclass should declare its own persistent properties and subclasses. <literal><version></literal> and <literal><id></literal> properties are assumed to be inherited from the root class. Each subclass in a heirarchy must define a unique <literal>discriminator-value</literal>. If none is specified, the fully qualified Java class name is used."
+msgstr ""
+
+#: basic_mapping.xml:2378(para) basic_mapping.xml:2485(para) basic_mapping.xml:2561(para)
+msgid "For information about inheritance mappings, see <xref linkend=\"inheritance\"/>."
+msgstr ""
+
+#: basic_mapping.xml:2385(title)
+msgid "joined-subclass"
+msgstr ""
+
+#: basic_mapping.xml:2387(para)
+msgid "Alternatively, each subclass may be mapped to its own table (table-per-subclass mapping strategy). Inherited state is retrieved by joining with the table of the superclass. We use the <literal><joined-subclass></literal> element."
+msgstr ""
+
+#: basic_mapping.xml:2427(para) basic_mapping.xml:2538(para)
+msgid "<literal>table</literal>: The name of the subclass table."
+msgstr ""
+
+#: basic_mapping.xml:2446(para)
+msgid "No discriminator column is required for this mapping strategy. Each subclass must, however, declare a table column holding the object identifier using the <literal><key></literal> element. The mapping at the start of the chapter would be re-written as:"
+msgstr ""
+
+#: basic_mapping.xml:2492(title)
+msgid "union-subclass"
+msgstr ""
+
+#: basic_mapping.xml:2494(para)
+msgid "A third option is to map only the concrete classes of an inheritance hierarchy to tables, (the table-per-concrete-class strategy) where each table defines all persistent state of the class, including inherited state. In Hibernate, it is not absolutely necessary to explicitly map such inheritance hierarchies. You can simply map each class with a separate <literal><class></literal> declaration. However, if you wish use polymorphic associations (e.g. an association to the superclass of your hierarchy), you need to use the <literal><union-subclass></literal> mapping."
+msgstr ""
+
+#: basic_mapping.xml:2557(para)
+msgid "No discriminator column or key column is required for this mapping strategy."
+msgstr ""
+
+#: basic_mapping.xml:2568(title)
+msgid "join"
+msgstr ""
+
+#: basic_mapping.xml:2570(para)
+msgid "Using the <literal><join></literal> element, it is possible to map properties of one class to several tables, when there's a 1-to-1 relationship between the tables."
+msgstr ""
+
+#: basic_mapping.xml:2600(para)
+msgid "<literal>table</literal>: The name of the joined table."
+msgstr ""
+
+#: basic_mapping.xml:2617(para)
+msgid "<literal>fetch</literal> (optional - defaults to <literal>join</literal>): If set to <literal>join</literal>, the default, Hibernate will use an inner join to retrieve a <literal><join></literal> defined by a class or its superclasses and an outer join for a <literal><join></literal> defined by a subclass. If set to <literal>select</literal> then Hibernate will use a sequential select for a <literal><join></literal> defined on a subclass, which will be issued only if a row turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a <literal><join></literal> defined by the class and its superclasses."
+msgstr ""
+
+#: basic_mapping.xml:2630(para)
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will not try to insert or update the properties defined by this join."
+msgstr ""
+
+#: basic_mapping.xml:2637(para)
+msgid "<literal>optional</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will insert a row only if the properties defined by this join are non-null and will always use an outer join to retrieve the properties."
+msgstr ""
+
+#: basic_mapping.xml:2646(para)
+msgid "For example, the address information for a person can be mapped to a separate table (while preserving value type semantics for all properties):"
+msgstr ""
+
+#: basic_mapping.xml:2664(para)
+msgid "This feature is often only useful for legacy data models, we recommend fewer tables than classes and a fine-grained domain model. However, it is useful for switching between inheritance mapping strategies in a single hierarchy, as explained later."
+msgstr ""
+
+#: basic_mapping.xml:2674(title)
+msgid "key"
+msgstr ""
+
+#: basic_mapping.xml:2676(para)
+msgid "We've seen the <literal><key></literal> element crop up a few times now. It appears anywhere the parent mapping element defines a join to a new table, and defines the foreign key in the joined table, that references the primary key of the original table."
+msgstr ""
+
+#: basic_mapping.xml:2710(para)
+msgid "<literal>on-delete</literal> (optional, defaults to <literal>noaction</literal>): Specifies whether the foreign key constraint has database-level cascade delete enabled."
+msgstr ""
+
+#: basic_mapping.xml:2717(para)
+msgid "<literal>property-ref</literal> (optional): Specifies that the foreign key refers to columns that are not the primary key of the orginal table. (Provided for legacy data.)"
+msgstr ""
+
+#: basic_mapping.xml:2724(para)
+msgid "<literal>not-null</literal> (optional): Specifies that the foreign key columns are not nullable (this is implied whenever the foreign key is also part of the primary key)."
+msgstr ""
+
+#: basic_mapping.xml:2731(para)
+msgid "<literal>update</literal> (optional): Specifies that the foreign key should never be updated (this is implied whenever the foreign key is also part of the primary key)."
+msgstr ""
+
+#: basic_mapping.xml:2738(para)
+msgid "<literal>unique</literal> (optional): Specifies that the foreign key should have a unique constraint (this is implied whenever the foreign key is also the primary key)."
+msgstr ""
+
+#: basic_mapping.xml:2746(para)
+msgid "We recommend that for systems where delete performance is important, all keys should be defined <literal>on-delete=\"cascade\"</literal>, and Hibernate will use a database-level <literal>ON CASCADE DELETE</literal> constraint, instead of many individual <literal>DELETE</literal> statements. Be aware that this feature bypasses Hibernate's usual optimistic locking strategy for versioned data."
+msgstr ""
+
+#: basic_mapping.xml:2754(para)
+msgid "The <literal>not-null</literal> and <literal>update</literal> attributes are useful when mapping a unidirectional one to many association. If you map a unidirectional one to many to a non-nullable foreign key, you <emphasis>must</emphasis> declare the key column using <literal><key not-null=\"true\"></literal>."
+msgstr ""
+
+#: basic_mapping.xml:2764(title)
+msgid "column and formula elements"
+msgstr ""
+
+#: basic_mapping.xml:2765(para)
+msgid "Any mapping element which accepts a <literal>column</literal> attribute will alternatively accept a <literal><column></literal> subelement. Likewise, <literal><formula></literal> is an alternative to the <literal>formula</literal> attribute."
+msgstr ""
+
+#: basic_mapping.xml:2786(para)
+msgid "<literal>column</literal> and <literal>formula</literal> attributes may even be combined within the same property or association mapping to express, for example, exotic join conditions."
+msgstr ""
+
+#: basic_mapping.xml:2801(title)
+msgid "import"
+msgstr ""
+
+#: basic_mapping.xml:2803(para)
+msgid "Suppose your application has two persistent classes with the same name, and you don't want to specify the fully qualified (package) name in Hibernate queries. Classes may be \"imported\" explicitly, rather than relying upon <literal>auto-import=\"true\"</literal>. You may even import classes and interfaces that are not explicitly mapped."
+msgstr ""
+
+#: basic_mapping.xml:2823(para)
+msgid "<literal>class</literal>: The fully qualified class name of of any Java class."
+msgstr ""
+
+#: basic_mapping.xml:2828(para)
+msgid "<literal>rename</literal> (optional - defaults to the unqualified class name): A name that may be used in the query language."
+msgstr ""
+
+#: basic_mapping.xml:2839(title)
+msgid "any"
+msgstr ""
+
+#: basic_mapping.xml:2841(para)
+msgid "There is one further type of property mapping. The <literal><any></literal> mapping element defines a polymorphic association to classes from multiple tables. This type of mapping always requires more than one column. The first column holds the type of the associated entity. The remaining columns hold the identifier. It is impossible to specify a foreign key constraint for this kind of association, so this is most certainly not meant as the usual way of mapping (polymorphic) associations. You should use this only in very special cases (eg. audit logs, user session data, etc)."
+msgstr ""
+
+#: basic_mapping.xml:2851(para)
+msgid "The <literal>meta-type</literal> attribute lets the application specify a custom type that maps database column values to persistent classes which have identifier properties of the type specified by <literal>id-type</literal>. You must specify the mapping from values of the meta-type to class names."
+msgstr ""
+
+#: basic_mapping.xml:2892(para)
+msgid "<literal>name</literal>: the property name."
+msgstr ""
+
+#: basic_mapping.xml:2897(para)
+msgid "<literal>id-type</literal>: the identifier type."
+msgstr ""
+
+#: basic_mapping.xml:2902(para)
+msgid "<literal>meta-type</literal> (optional - defaults to <literal>string</literal>): Any type that is allowed for a discriminator mapping."
+msgstr ""
+
+#: basic_mapping.xml:2908(para)
+msgid "<literal>cascade</literal> (optional- defaults to <literal>none</literal>): the cascade style."
+msgstr ""
+
+#: basic_mapping.xml:2920(para)
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, define if a version increment should occur if this property is dirty."
+msgstr ""
+
+#: basic_mapping.xml:2935(title)
+msgid "Hibernate Types"
+msgstr ""
+
+#: basic_mapping.xml:2938(title)
+msgid "Entities and values"
+msgstr ""
+
+#: basic_mapping.xml:2940(para)
+msgid "To understand the behaviour of various Java language-level objects with respect to the persistence service, we need to classify them into two groups:"
+msgstr ""
+
+#: basic_mapping.xml:2945(para)
+msgid "An <emphasis>entity</emphasis> exists independently of any other objects holding references to the entity. Contrast this with the usual Java model where an unreferenced object is garbage collected. Entities must be explicitly saved and deleted (except that saves and deletions may be <emphasis>cascaded</emphasis> from a parent entity to its children). This is different from the ODMG model of object persistence by reachablity - and corresponds more closely to how application objects are usually used in large systems. Entities support circular and shared references. They may also be versioned."
+msgstr ""
+
+#: basic_mapping.xml:2956(para)
+msgid "An entity's persistent state consists of references to other entities and instances of <emphasis>value</emphasis> types. Values are primitives, collections (not what's inside a collection), components and certain immutable objects. Unlike entities, values (in particular collections and components) <emphasis>are</emphasis> persisted and deleted by reachability. Since value objects (and primitives) are persisted and deleted along with their containing entity they may not be independently versioned. Values have no independent identity, so they cannot be shared by two entities or collections."
+msgstr ""
+
+#: basic_mapping.xml:2967(para)
+msgid "Up until now, we've been using the term \"persistent class\" to refer to entities. We will continue to do that. Strictly speaking, however, not all user-defined classes with persistent state are entities. A <emphasis>component</emphasis> is a user defined class with value semantics. A Java property of type <literal>java.lang.String</literal> also has value semantics. Given this definition, we can say that all types (classes) provided by the JDK have value type semantics in Java, while user-defined types may be mapped with entity or value type semantics. This decision is up to the application developer. A good hint for an entity class in a domain model are shared references to a single instance of that class, while composition or aggregation usually translates to a value type."
+msgstr ""
+
+#: basic_mapping.xml:2981(para)
+msgid "We'll revisit both concepts throughout the documentation."
+msgstr ""
+
+#: basic_mapping.xml:2985(para)
+msgid "The challenge is to map the Java type system (and the developers' definition of entities and value types) to the SQL/database type system. The bridge between both systems is provided by Hibernate: for entities we use <literal><class></literal>, <literal><subclass></literal> and so on. For value types we use <literal><property></literal>, <literal><component></literal>, etc, usually with a <literal>type</literal> attribute. The value of this attribute is the name of a Hibernate <emphasis>mapping type</emphasis>. Hibernate provides many mappings (for standard JDK value types) out of the box. You can write your own mapping types and implement your custom conversion strategies as well, as you'll see later."
+msgstr ""
+
+#: basic_mapping.xml:2998(para)
+msgid "All built-in Hibernate types except collections support null semantics."
+msgstr ""
+
+#: basic_mapping.xml:3005(title)
+msgid "Basic value types"
+msgstr ""
+
+#: basic_mapping.xml:3012(literal)
+msgid "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+msgstr ""
+
+#: basic_mapping.xml:3015(para)
+msgid "Type mappings from Java primitives or wrapper classes to appropriate (vendor-specific) SQL column types. <literal>boolean, yes_no</literal> and <literal>true_false</literal> are all alternative encodings for a Java <literal>boolean</literal> or <literal>java.lang.Boolean</literal>."
+msgstr ""
+
+#: basic_mapping.xml:3024(literal)
+msgid "string"
+msgstr ""
+
+#: basic_mapping.xml:3026(para)
+msgid "A type mapping from <literal>java.lang.String</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>)."
+msgstr ""
+
+#: basic_mapping.xml:3033(literal)
+msgid "date, time, timestamp"
+msgstr ""
+
+#: basic_mapping.xml:3035(para)
+msgid "Type mappings from <literal>java.util.Date</literal> and its subclasses to SQL types <literal>DATE</literal>, <literal>TIME</literal> and <literal>TIMESTAMP</literal> (or equivalent)."
+msgstr ""
+
+#: basic_mapping.xml:3043(literal)
+msgid "calendar, calendar_date"
+msgstr ""
+
+#: basic_mapping.xml:3045(para)
+msgid "Type mappings from <literal>java.util.Calendar</literal> to SQL types <literal>TIMESTAMP</literal> and <literal>DATE</literal> (or equivalent)."
+msgstr ""
+
+#: basic_mapping.xml:3053(literal)
+msgid "big_decimal, big_integer"
+msgstr ""
+
+#: basic_mapping.xml:3055(para)
+msgid "Type mappings from <literal>java.math.BigDecimal</literal> and <literal>java.math.BigInteger</literal> to <literal>NUMERIC</literal> (or Oracle <literal>NUMBER</literal>)."
+msgstr ""
+
+#: basic_mapping.xml:3063(literal)
+msgid "locale, timezone, currency"
+msgstr ""
+
+#: basic_mapping.xml:3065(para)
+msgid "Type mappings from <literal>java.util.Locale</literal>, <literal>java.util.TimeZone</literal> and <literal>java.util.Currency</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). Instances of <literal>Locale</literal> and <literal>Currency</literal> are mapped to their ISO codes. Instances of <literal>TimeZone</literal> are mapped to their <literal>ID</literal>."
+msgstr ""
+
+#: basic_mapping.xml:3079(para)
+msgid "A type mapping from <literal>java.lang.Class</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). A <literal>Class</literal> is mapped to its fully qualified name."
+msgstr ""
+
+#: basic_mapping.xml:3087(literal)
+msgid "binary"
+msgstr ""
+
+#: basic_mapping.xml:3089(para)
+msgid "Maps byte arrays to an appropriate SQL binary type."
+msgstr ""
+
+#: basic_mapping.xml:3095(literal)
+msgid "text"
+msgstr ""
+
+#: basic_mapping.xml:3097(para)
+msgid "Maps long Java strings to a SQL <literal>CLOB</literal> or <literal>TEXT</literal> type."
+msgstr ""
+
+#: basic_mapping.xml:3104(literal)
+msgid "serializable"
+msgstr ""
+
+#: basic_mapping.xml:3106(para)
+msgid "Maps serializable Java types to an appropriate SQL binary type. You may also indicate the Hibernate type <literal>serializable</literal> with the name of a serializable Java class or interface that does not default to a basic type."
+msgstr ""
+
+#: basic_mapping.xml:3115(literal)
+msgid "clob, blob"
+msgstr ""
+
+#: basic_mapping.xml:3117(para)
+msgid "Type mappings for the JDBC classes <literal>java.sql.Clob</literal> and <literal>java.sql.Blob</literal>. These types may be inconvenient for some applications, since the blob or clob object may not be reused outside of a transaction. (Furthermore, driver support is patchy and inconsistent.)"
+msgstr ""
+
+#: basic_mapping.xml:3127(literal)
+msgid "imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary"
+msgstr ""
+
+#: basic_mapping.xml:3131(para)
+msgid "Type mappings for what are usually considered mutable Java types, where Hibernate makes certain optimizations appropriate only for immutable Java types, and the application treats the object as immutable. For example, you should not call <literal>Date.setTime()</literal> for an instance mapped as <literal>imm_timestamp</literal>. To change the value of the property, and have that change made persistent, the application must assign a new (nonidentical) object to the property."
+msgstr ""
+
+#: basic_mapping.xml:3007(para)
+msgid "The built-in <emphasis>basic mapping types</emphasis> may be roughly categorized into <placeholder-1/>"
+msgstr ""
+
+#: basic_mapping.xml:3146(para)
+msgid "Unique identifiers of entities and collections may be of any basic type except <literal>binary</literal>, <literal>blob</literal> and <literal>clob</literal>. (Composite identifiers are also allowed, see below.)"
+msgstr ""
+
+#: basic_mapping.xml:3152(para)
+msgid "The basic value types have corresponding <literal>Type</literal> constants defined on <literal>org.hibernate.Hibernate</literal>. For example, <literal>Hibernate.STRING</literal> represents the <literal>string</literal> type."
+msgstr ""
+
+#: basic_mapping.xml:3161(title)
+msgid "Custom value types"
+msgstr ""
+
+#: basic_mapping.xml:3163(para)
+msgid "It is relatively easy for developers to create their own value types. For example, you might want to persist properties of type <literal>java.lang.BigInteger</literal> to <literal>VARCHAR</literal> columns. Hibernate does not provide a built-in type for this. But custom types are not limited to mapping a property (or collection element) to a single table column. So, for example, you might have a Java property <literal>getName()</literal>/<literal>setName()</literal> of type <literal>java.lang.String</literal> that is persisted to the columns <literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal>."
+msgstr ""
+
+#: basic_mapping.xml:3174(para)
+msgid "To implement a custom type, implement either <literal>org.hibernate.UserType</literal> or <literal>org.hibernate.CompositeUserType</literal> and declare properties using the fully qualified classname of the type. Check out <literal>org.hibernate.test.DoubleStringType</literal> to see the kind of things that are possible."
+msgstr ""
+
+#: basic_mapping.xml:3187(para)
+msgid "Notice the use of <literal><column></literal> tags to map a property to multiple columns."
+msgstr ""
+
+#: basic_mapping.xml:3192(para)
+msgid "The <literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>, <literal>UserCollectionType</literal>, and <literal>UserVersionType</literal> interfaces provide support for more specialized uses."
+msgstr ""
+
+#: basic_mapping.xml:3198(para)
+msgid "You may even supply parameters to a <literal>UserType</literal> in the mapping file. To do this, your <literal>UserType</literal> must implement the <literal>org.hibernate.usertype.ParameterizedType</literal> interface. To supply parameters to your custom type, you can use the <literal><type></literal> element in your mapping files."
+msgstr ""
+
+#: basic_mapping.xml:3212(para)
+msgid "The <literal>UserType</literal> can now retrieve the value for the parameter named <literal>default</literal> from the <literal>Properties</literal> object passed to it."
+msgstr ""
+
+#: basic_mapping.xml:3217(para)
+msgid "If you use a certain <literal>UserType</literal> very often, it may be useful to define a shorter name for it. You can do this using the <literal><typedef></literal> element. Typedefs assign a name to a custom type, and may also contain a list of default parameter values if the type is parameterized."
+msgstr ""
+
+#: basic_mapping.xml:3230(para)
+msgid "It is also possible to override the parameters supplied in a typedef on a case-by-case basis by using type parameters on the property mapping."
+msgstr ""
+
+#: basic_mapping.xml:3235(para)
+msgid "Even though Hibernate's rich range of built-in types and support for components means you will very rarely <emphasis>need</emphasis> to use a custom type, it is nevertheless considered good form to use custom types for (non-entity) classes that occur frequently in your application. For example, a <literal>MonetaryAmount</literal> class is a good candidate for a <literal>CompositeUserType</literal>, even though it could easily be mapped as a component. One motivation for this is abstraction. With a custom type, your mapping documents would be future-proofed against possible changes in your way of representing monetary values."
+msgstr ""
+
+#: basic_mapping.xml:3251(title)
+msgid "Mapping a class more than once"
+msgstr ""
+
+#: basic_mapping.xml:3252(para)
+msgid "It is possible to provide more than one mapping for a particular persistent class. In this case you must specify an <emphasis>entity name</emphasis> do disambiguate between instances of the two mapped entities. (By default, the entity name is the same as the class name.) Hibernate lets you specify the entity name when working with persistent objects, when writing queries, or when mapping associations to the named entity."
+msgstr ""
+
+#: basic_mapping.xml:3278(para)
+msgid "Notice how associations are now specified using <literal>entity-name</literal> instead of <literal>class</literal>."
+msgstr ""
+
+#: basic_mapping.xml:3286(title)
+msgid "SQL quoted identifiers"
+msgstr ""
+
+#: basic_mapping.xml:3287(para)
+msgid "You may force Hibernate to quote an identifier in the generated SQL by enclosing the table or column name in backticks in the mapping document. Hibernate will use the correct quotation style for the SQL <literal>Dialect</literal> (usually double quotes, but brackets for SQL Server and backticks for MySQL)."
+msgstr ""
+
+#: basic_mapping.xml:3304(title)
+msgid "Metadata alternatives"
+msgstr ""
+
+#: basic_mapping.xml:3306(para)
+msgid "XML isn't for everyone, and so there are some alternative ways to define O/R mapping metadata in Hibernate."
+msgstr ""
+
+#: basic_mapping.xml:3311(title)
+msgid "Using XDoclet markup"
+msgstr ""
+
+#: basic_mapping.xml:3313(para)
+msgid "Many Hibernate users prefer to embed mapping information directly in sourcecode using XDoclet <literal>@hibernate.tags</literal>. We will not cover this approach in this document, since strictly it is considered part of XDoclet. However, we include the following example of the <literal>Cat</literal> class with XDoclet mappings."
+msgstr ""
+
+#: basic_mapping.xml:3425(para)
+msgid "See the Hibernate web site for more examples of XDoclet and Hibernate."
+msgstr ""
+
+#: basic_mapping.xml:3432(title)
+msgid "Using JDK 5.0 Annotations"
+msgstr ""
+
+#: basic_mapping.xml:3434(para)
+msgid "JDK 5.0 introduced XDoclet-style annotations at the language level, type-safe and checked at compile time. This mechnism is more powerful than XDoclet annotations and better supported by tools and IDEs. IntelliJ IDEA, for example, supports auto-completion and syntax highlighting of JDK 5.0 annotations. The new revision of the EJB specification (JSR-220) uses JDK 5.0 annotations as the primary metadata mechanism for entity beans. Hibernate3 implements the <literal>EntityManager</literal> of JSR-220 (the persistence API), support for mapping metadata is available via the <emphasis>Hibernate Annotations</emphasis> package, as a separate download. Both EJB3 (JSR-220) and Hibernate3 metadata is supported."
+msgstr ""
+
+#: basic_mapping.xml:3445(para)
+msgid "This is an example of a POJO class annotated as an EJB entity bean:"
+msgstr ""
+
+#: basic_mapping.xml:3472(para)
+msgid "Note that support for JDK 5.0 Annotations (and JSR-220) is still work in progress and not completed. Please refer to the Hibernate Annotations module for more details."
+msgstr ""
+
+#: basic_mapping.xml:3481(title)
+msgid "Generated Properties"
+msgstr ""
+
+#: basic_mapping.xml:3482(para)
+msgid "Generated properties are properties which have their values generated by the database. Typically, Hibernate applications needed to <literal>refresh</literal> objects which contain any properties for which the database was generating values. Marking properties as generated, however, lets the application delegate this responsibility to Hibernate. Essentially, whenever Hibernate issues an SQL INSERT or UPDATE for an entity which has defined generated properties, it immediately issues a select afterwards to retrieve the generated values."
+msgstr ""
+
+#: basic_mapping.xml:3491(para)
+msgid "Properties marked as generated must additionally be non-insertable and non-updateable. Only <xref linkend=\"mapping-declaration-version\">versions</xref>, <xref linkend=\"mapping-declaration-timestamp\">timestamps</xref>, and <xref linkend=\"mapping-declaration-property\">simple properties</xref> can be marked as generated."
+msgstr ""
+
+#: basic_mapping.xml:3498(para)
+msgid "<literal>never</literal> (the default) - means that the given property value is not generated within the database."
+msgstr ""
+
+#: basic_mapping.xml:3502(para)
+msgid "<literal>insert</literal> - states that the given property value is generated on insert, but is not regenerated on subsequent updates. Things like created-date would fall into this category. Note that even thought <xref linkend=\"mapping-declaration-version\">version</xref> and <xref linkend=\"mapping-declaration-timestamp\">timestamp</xref> properties can be marked as generated, this option is not available there..."
+msgstr ""
+
+#: basic_mapping.xml:3510(para)
+msgid "<literal>always</literal> - states that the property value is generated both on insert and on update."
+msgstr ""
+
+#: basic_mapping.xml:3517(title)
+msgid "Auxiliary Database Objects"
+msgstr ""
+
+#: basic_mapping.xml:3518(para)
+msgid "Allows CREATE and DROP of arbitrary database objects, in conjunction with Hibernate's schema evolution tools, to provide the ability to fully define a user schema within the Hibernate mapping files. Although designed specifically for creating and dropping things like triggers or stored procedures, really any SQL command that can be run via a <literal>java.sql.Statement.execute()</literal> method is valid here (ALTERs, INSERTS, etc). There are essentially two modes for defining auxiliary database objects..."
+msgstr ""
+
+#: basic_mapping.xml:3527(para)
+msgid "The first mode is to explicitly list the CREATE and DROP commands out in the mapping file:"
+msgstr ""
+
+#: basic_mapping.xml:3538(para)
+msgid "The second mode is to supply a custom class which knows how to construct the CREATE and DROP commands. This custom class must implement the <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> interface."
+msgstr ""
+
+#: basic_mapping.xml:3549(para)
+msgid "Additionally, these database objects can be optionally scoped such that they only apply when certain dialects are used."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: basic_mapping.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/batch.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/batch.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/batch.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,152 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:29-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: batch.xml:5(title)
+msgid "Batch processing"
+msgstr ""
+
+#: batch.xml:7(para)
+msgid "A naive approach to inserting 100 000 rows in the database using Hibernate might look like this:"
+msgstr ""
+
+#: batch.xml:21(para)
+msgid "This would fall over with an <literal>OutOfMemoryException</literal> somewhere around the 50 000th row. That's because Hibernate caches all the newly inserted <literal>Customer</literal> instances in the session-level cache."
+msgstr ""
+
+#: batch.xml:27(para)
+msgid "In this chapter we'll show you how to avoid this problem. First, however, if you are doing batch processing, it is absolutely critical that you enable the use of JDBC batching, if you intend to achieve reasonable performance. Set the JDBC batch size to a reasonable number (say, 10-50):"
+msgstr ""
+
+#: batch.xml:36(para)
+msgid "Note that Hibernate disables insert batching at the JDBC level transparently if you use an <literal>identiy</literal> identifier generator."
+msgstr ""
+
+#: batch.xml:41(para)
+msgid "You also might like to do this kind of work in a process where interaction with the second-level cache is completely disabled:"
+msgstr ""
+
+#: batch.xml:48(para)
+msgid "However, this is not absolutely necessary, since we can explicitly set the <literal>CacheMode</literal> to disable interaction with the second-level cache."
+msgstr ""
+
+#: batch.xml:54(title)
+msgid "Batch inserts"
+msgstr ""
+
+#: batch.xml:56(para)
+msgid "When making new objects persistent, you must <literal>flush()</literal> and then <literal>clear()</literal> the session regularly, to control the size of the first-level cache."
+msgstr ""
+
+#: batch.xml:81(title)
+msgid "Batch updates"
+msgstr ""
+
+#: batch.xml:83(para)
+msgid "For retrieving and updating data the same ideas apply. In addition, you need to use <literal>scroll()</literal> to take advantage of server-side cursors for queries that return many rows of data."
+msgstr ""
+
+#: batch.xml:112(title)
+msgid "The StatelessSession interface"
+msgstr ""
+
+#: batch.xml:113(para)
+msgid "Alternatively, Hibernate provides a command-oriented API that may be used for streaming data to and from the database in the form of detached objects. A <literal>StatelessSession</literal> has no persistence context associated with it and does not provide many of the higher-level life cycle semantics. In particular, a stateless session does not implement a first-level cache nor interact with any second-level or query cache. It does not implement transactional write-behind or automatic dirty checking. Operations performed using a stateless session do not ever cascade to associated instances. Collections are ignored by a stateless session. Operations performed via a stateless session bypass Hibernate's event model and interceptors. Stateless sessions are vulnerable to data aliasing effects, due to the lack of a first-level cache. A stateless session is a lower-level abstraction, much closer to the underlying JDBC."
+msgstr ""
+
+#: batch.xml:142(para)
+msgid "Note that in this code example, the <literal>Customer</literal> instances returned by the query are immediately detached. They are never associated with any persistence context."
+msgstr ""
+
+#: batch.xml:148(para)
+msgid "The <literal>insert(), update()</literal> and <literal>delete()</literal> operations defined by the <literal>StatelessSession</literal> interface are considered to be direct database row-level operations, which result in immediate execution of a SQL <literal>INSERT, UPDATE</literal> or <literal>DELETE</literal> respectively. Thus, they have very different semantics to the <literal>save(), saveOrUpdate()</literal> and <literal>delete()</literal> operations defined by the <literal>Session</literal> interface."
+msgstr ""
+
+#: batch.xml:161(title)
+msgid "DML-style operations"
+msgstr ""
+
+#: batch.xml:163(para)
+msgid "As already discussed, automatic and transparent object/relational mapping is concerned with the management of object state. This implies that the object state is available in memory, hence manipulating (using the SQL <literal>Data Manipulation Language</literal> (DML) statements: <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>) data directly in the database will not affect in-memory state. However, Hibernate provides methods for bulk SQL-style DML statement execution which are performed through the Hibernate Query Language (<xref linkend=\"queryhql\">HQL</xref>)."
+msgstr ""
+
+#: batch.xml:173(para)
+msgid "The pseudo-syntax for <literal>UPDATE</literal> and <literal>DELETE</literal> statements is: <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?</literal>. Some points to note:"
+msgstr ""
+
+#: batch.xml:181(para)
+msgid "In the from-clause, the FROM keyword is optional"
+msgstr ""
+
+#: batch.xml:186(para)
+msgid "There can only be a single entity named in the from-clause; it can optionally be aliased. If the entity name is aliased, then any property references must be qualified using that alias; if the entity name is not aliased, then it is illegal for any property references to be qualified."
+msgstr ""
+
+#: batch.xml:194(para)
+msgid "No <xref linkend=\"queryhql-joins-forms\">joins</xref> (either implicit or explicit) can be specified in a bulk HQL query. Sub-queries may be used in the where-clause; the subqueries, themselves, may contain joins."
+msgstr ""
+
+#: batch.xml:201(para)
+msgid "The where-clause is also optional."
+msgstr ""
+
+#: batch.xml:207(para)
+msgid "As an example, to execute an HQL <literal>UPDATE</literal>, use the <literal>Query.executeUpdate()</literal> method (the method is named for those familiar with JDBC's <literal>PreparedStatement.executeUpdate()</literal>):"
+msgstr ""
+
+#: batch.xml:225(para)
+msgid "HQL <literal>UPDATE</literal> statements, by default do not effect the <xref linkend=\"mapping-declaration-version\">version</xref> or the <xref linkend=\"mapping-declaration-timestamp\">timestamp</xref> property values for the affected entities; this is in keeping with the EJB3 specification. However, you can force Hibernate to properly reset the <literal>version</literal> or <literal>timestamp</literal> property values through the use of a <literal>versioned update</literal>. This is achieved by adding the <literal>VERSIONED</literal> keyword after the <literal>UPDATE</literal> keyword."
+msgstr ""
+
+#: batch.xml:245(para)
+msgid "Note that custom version types (<literal>org.hibernate.usertype.UserVersionType</literal>) are not allowed in conjunction with a <literal>update versioned</literal> statement."
+msgstr ""
+
+#: batch.xml:250(para)
+msgid "To execute an HQL <literal>DELETE</literal>, use the same <literal>Query.executeUpdate()</literal> method:"
+msgstr ""
+
+#: batch.xml:266(para)
+msgid "The <literal>int</literal> value returned by the <literal>Query.executeUpdate()</literal> method indicate the number of entities effected by the operation. Consider this may or may not correlate to the number of rows effected in the database. An HQL bulk operation might result in multiple actual SQL statements being executed, for joined-subclass, for example. The returned number indicates the number of actual entities affected by the statement. Going back to the example of joined-subclass, a delete against one of the subclasses may actually result in deletes against not just the table to which that subclass is mapped, but also the \"root\" table and potentially joined-subclass tables further down the inheritence hierarchy."
+msgstr ""
+
+#: batch.xml:277(para)
+msgid "The pseudo-syntax for <literal>INSERT</literal> statements is: <literal>INSERT INTO EntityName properties_list select_statement</literal>. Some points to note:"
+msgstr ""
+
+#: batch.xml:285(para)
+msgid "Only the INSERT INTO ... SELECT ... form is supported; not the INSERT INTO ... VALUES ... form."
+msgstr ""
+
+#: batch.xml:288(para)
+msgid "The properties_list is analogous to the <literal>column speficiation</literal> in the SQL <literal>INSERT</literal> statement. For entities involved in mapped inheritence, only properties directly defined on that given class-level can be used in the properties_list. Superclass properties are not allowed; and subclass properties do not make sense. In other words, <literal>INSERT</literal> statements are inherently non-polymorphic."
+msgstr ""
+
+#: batch.xml:298(para)
+msgid "select_statement can be any valid HQL select query, with the caveat that the return types must match the types expected by the insert. Currently, this is checked during query compilation rather than allowing the check to relegate to the database. Note however that this might cause problems between Hibernate <literal>Type</literal>s which are <emphasis>equivalent</emphasis> as opposed to <emphasis>equal</emphasis>. This might cause issues with mismatches between a property defined as a <literal>org.hibernate.type.DateType</literal> and a property defined as a <literal>org.hibernate.type.TimestampType</literal>, even though the database might not make a distinction or might be able to handle the conversion."
+msgstr ""
+
+#: batch.xml:310(para)
+msgid "For the id property, the insert statement gives you two options. You can either explicitly specify the id property in the properties_list (in which case its value is taken from the corresponding select expression) or omit it from the properties_list (in which case a generated value is used). This later option is only available when using id generators that operate in the database; attempting to use this option with any \"in memory\" type generators will cause an exception during parsing. Note that for the purposes of this discussion, in-database generators are considered to be <literal>org.hibernate.id.SequenceGenerator</literal> (and its subclasses) and any implementors of <literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>. The most notable exception here is <literal>org.hibernate.id.TableHiLoGenerator</literal>, which cannot be used because it does not expose a selectable way to get its values."
+msgstr ""
+
+#: batch.xml:325(para)
+msgid "For properties mapped as either <literal>version</literal> or <literal>timestamp</literal>, the insert statement gives you two options. You can either specify the property in the properties_list (in which case its value is taken from the corresponding select expressions) or omit it from the properties_list (in which case the <literal>seed value</literal> defined by the <literal>org.hibernate.type.VersionType</literal> is used)."
+msgstr ""
+
+#: batch.xml:335(para)
+msgid "An example HQL <literal>INSERT</literal> statement execution:"
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: batch.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/best_practices.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/best_practices.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/best_practices.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,172 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:29-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: best_practices.xml:5(title)
+msgid "Best Practices"
+msgstr ""
+
+#: best_practices.xml:9(term)
+msgid "Write fine-grained classes and map them using <literal><component></literal>."
+msgstr ""
+
+#: best_practices.xml:11(para)
+msgid "Use an <literal>Address</literal> class to encapsulate <literal>street</literal>, <literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>. This encourages code reuse and simplifies refactoring."
+msgstr ""
+
+#: best_practices.xml:19(term)
+msgid "Declare identifier properties on persistent classes."
+msgstr ""
+
+#: best_practices.xml:21(para)
+msgid "Hibernate makes identifier properties optional. There are all sorts of reasons why you should use them. We recommend that identifiers be 'synthetic' (generated, with no business meaning)."
+msgstr ""
+
+#: best_practices.xml:29(term)
+msgid "Identify natural keys."
+msgstr ""
+
+#: best_practices.xml:31(para)
+msgid "Identify natural keys for all entities, and map them using <literal><natural-id></literal>. Implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the properties that make up the natural key."
+msgstr ""
+
+#: best_practices.xml:39(term)
+msgid "Place each class mapping in its own file."
+msgstr ""
+
+#: best_practices.xml:41(para)
+msgid "Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</literal> in the file <literal>com/eg/Foo.hbm.xml</literal>. This makes particularly good sense in a team environment."
+msgstr ""
+
+#: best_practices.xml:49(term)
+msgid "Load mappings as resources."
+msgstr ""
+
+#: best_practices.xml:51(para)
+msgid "Deploy the mappings along with the classes they map."
+msgstr ""
+
+#: best_practices.xml:57(term)
+msgid "Consider externalising query strings."
+msgstr ""
+
+#: best_practices.xml:59(para)
+msgid "This is a good practice if your queries call non-ANSI-standard SQL functions. Externalising the query strings to mapping files will make the application more portable."
+msgstr ""
+
+#: best_practices.xml:67(term)
+msgid "Use bind variables."
+msgstr ""
+
+#: best_practices.xml:69(para)
+msgid "As in JDBC, always replace non-constant values by \"?\". Never use string manipulation to bind a non-constant value in a query! Even better, consider using named parameters in queries."
+msgstr ""
+
+#: best_practices.xml:77(term)
+msgid "Don't manage your own JDBC connections."
+msgstr ""
+
+#: best_practices.xml:79(para)
+msgid "Hibernate lets the application manage JDBC connections. This approach should be considered a last-resort. If you can't use the built-in connections providers, consider providing your own implementation of <literal>org.hibernate.connection.ConnectionProvider</literal>."
+msgstr ""
+
+#: best_practices.xml:87(term)
+msgid "Consider using a custom type."
+msgstr ""
+
+#: best_practices.xml:89(para)
+msgid "Suppose you have a Java type, say from some library, that needs to be persisted but doesn't provide the accessors needed to map it as a component. You should consider implementing <literal>org.hibernate.UserType</literal>. This approach frees the application code from implementing transformations to / from a Hibernate type."
+msgstr ""
+
+#: best_practices.xml:98(term)
+msgid "Use hand-coded JDBC in bottlenecks."
+msgstr ""
+
+#: best_practices.xml:100(para)
+msgid "In performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. But please, wait until you <emphasis>know</emphasis> something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If you need to use direct JDBC, it might be worth opening a Hibernate <literal>Session</literal> and using that JDBC connection. That way you can still use the same transaction strategy and underlying connection provider."
+msgstr ""
+
+#: best_practices.xml:110(term)
+msgid "Understand <literal>Session</literal> flushing."
+msgstr ""
+
+#: best_practices.xml:112(para)
+msgid "From time to time the Session synchronizes its persistent state with the database. Performance will be affected if this process occurs too often. You may sometimes minimize unnecessary flushing by disabling automatic flushing or even by changing the order of queries and other operations within a particular transaction."
+msgstr ""
+
+#: best_practices.xml:121(term)
+msgid "In a three tiered architecture, consider using detached objects."
+msgstr ""
+
+#: best_practices.xml:123(para)
+msgid "When using a servlet / session bean architecture, you could pass persistent objects loaded in the session bean to and from the servlet / JSP layer. Use a new session to service each request. Use <literal>Session.merge()</literal> or <literal>Session.saveOrUpdate()</literal> to synchronize objects with the database."
+msgstr ""
+
+#: best_practices.xml:132(term)
+msgid "In a two tiered architecture, consider using long persistence contexts."
+msgstr ""
+
+#: best_practices.xml:134(para)
+msgid "Database Transactions have to be as short as possible for best scalability. However, it is often neccessary to implement long running <emphasis>application transactions</emphasis>, a single unit-of-work from the point of view of a user. An application transaction might span several client request/response cycles. It is common to use detached objects to implement application transactions. An alternative, extremely appropriate in two tiered architecture, is to maintain a single open persistence contact (session) for the whole life cycle of the application transaction and simply disconnect from the JDBC connection at the end of each request and reconnect at the beginning of the subsequent request. Never share a single session across more than one application transaction, or you will be working with stale data."
+msgstr ""
+
+#: best_practices.xml:148(term)
+msgid "Don't treat exceptions as recoverable."
+msgstr ""
+
+#: best_practices.xml:150(para)
+msgid "This is more of a necessary practice than a \"best\" practice. When an exception occurs, roll back the <literal>Transaction</literal> and close the <literal>Session</literal>. If you don't, Hibernate can't guarantee that in-memory state accurately represents persistent state. As a special case of this, do not use <literal>Session.load()</literal> to determine if an instance with the given identifier exists on the database; use <literal>Session.get()</literal> or a query instead."
+msgstr ""
+
+#: best_practices.xml:160(term)
+msgid "Prefer lazy fetching for associations."
+msgstr ""
+
+#: best_practices.xml:162(para)
+msgid "Use eager fetching sparingly. Use proxies and lazy collections for most associations to classes that are not likely to be completely held in the second-level cache. For associations to cached classes, where there is an a extremely high probability of a cache hit, explicitly disable eager fetching using <literal>lazy=\"false\"</literal>. When an join fetching is appropriate to a particular use case, use a query with a <literal>left join fetch</literal>."
+msgstr ""
+
+#: best_practices.xml:172(term)
+msgid "Use the <emphasis>open session in view</emphasis> pattern, or a disciplined <emphasis>assembly phase</emphasis> to avoid problems with unfetched data."
+msgstr ""
+
+#: best_practices.xml:177(para)
+msgid "Hibernate frees the developer from writing tedious <emphasis>Data Transfer Objects</emphasis> (DTO). In a traditional EJB architecture, DTOs serve dual purposes: first, they work around the problem that entity beans are not serializable; second, they implicitly define an assembly phase where all data to be used by the view is fetched and marshalled into the DTOs before returning control to the presentation tier. Hibernate eliminates the first purpose. However, you will still need an assembly phase (think of your business methods as having a strict contract with the presentation tier about what data is available in the detached objects) unless you are prepared to hold the persistence context (the session) open across the view rendering process. This is not a limitation of Hibernate! It is a fundamental requirement of safe transactional data access."
+msgstr ""
+
+#: best_practices.xml:191(term)
+msgid "Consider abstracting your business logic from Hibernate."
+msgstr ""
+
+#: best_practices.xml:193(para)
+msgid "Hide (Hibernate) data-access code behind an interface. Combine the <emphasis>DAO</emphasis> and <emphasis>Thread Local Session</emphasis> patterns. You can even have some classes persisted by handcoded JDBC, associated to Hibernate via a <literal>UserType</literal>. (This advice is intended for \"sufficiently large\" applications; it is not appropriate for an application with five tables!)"
+msgstr ""
+
+#: best_practices.xml:203(term)
+msgid "Don't use exotic association mappings."
+msgstr ""
+
+#: best_practices.xml:205(para)
+msgid "Good usecases for a real many-to-many associations are rare. Most of the time you need additional information stored in the \"link table\". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, we think that most associations are one-to-many and many-to-one, you should be careful when using any other association style and ask yourself if it is really neccessary."
+msgstr ""
+
+#: best_practices.xml:215(term)
+msgid "Prefer bidirectional associations."
+msgstr ""
+
+#: best_practices.xml:217(para)
+msgid "Unidirectional associations are more difficult to query. In a large application, almost all associations must be navigable in both directions in queries."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: best_practices.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/collection_mapping.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/collection_mapping.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/collection_mapping.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,492 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:30-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: collection_mapping.xml:5(title)
+msgid "Collection Mapping"
+msgstr ""
+
+#: collection_mapping.xml:8(title)
+msgid "Persistent collections"
+msgstr ""
+
+#: collection_mapping.xml:10(para)
+msgid "Hibernate requires that persistent collection-valued fields be declared as an interface type, for example:"
+msgstr ""
+
+#: collection_mapping.xml:25(para)
+msgid "The actual interface might be <literal>java.util.Set</literal>, <literal>java.util.Collection</literal>, <literal>java.util.List</literal>, <literal>java.util.Map</literal>, <literal>java.util.SortedSet</literal>, <literal>java.util.SortedMap</literal> or ... anything you like! (Where \"anything you like\" means you will have to write an implementation of <literal>org.hibernate.usertype.UserCollectionType</literal>.)"
+msgstr ""
+
+#: collection_mapping.xml:34(para)
+msgid "Notice how we initialized the instance variable with an instance of <literal>HashSet</literal>. This is the best way to initialize collection valued properties of newly instantiated (non-persistent) instances. When you make the instance persistent - by calling <literal>persist()</literal>, for example - Hibernate will actually replace the <literal>HashSet</literal> with an instance of Hibernate's own implementation of <literal>Set</literal>. Watch out for errors like this:"
+msgstr ""
+
+#: collection_mapping.xml:54(para)
+msgid "The persistent collections injected by Hibernate behave like <literal>HashMap</literal>, <literal>HashSet</literal>, <literal>TreeMap</literal>, <literal>TreeSet</literal> or <literal>ArrayList</literal>, depending upon the interface type."
+msgstr ""
+
+#: collection_mapping.xml:61(para)
+msgid "Collections instances have the usual behavior of value types. They are automatically persisted when referenced by a persistent object and automatically deleted when unreferenced. If a collection is passed from one persistent object to another, its elements might be moved from one table to another. Two entities may not share a reference to the same collection instance. Due to the underlying relational model, collection-valued properties do not support null value semantics; Hibernate does not distinguish between a null collection reference and an empty collection."
+msgstr ""
+
+#: collection_mapping.xml:72(para)
+msgid "You shouldn't have to worry much about any of this. Use persistent collections the same way you use ordinary Java collections. Just make sure you understand the semantics of bidirectional associations (discussed later)."
+msgstr ""
+
+#: collection_mapping.xml:81(title)
+msgid "Collection mappings"
+msgstr ""
+
+#: collection_mapping.xml:83(para)
+msgid "The Hibernate mapping element used for mapping a collection depends upon the type of the interface. For example, a <literal><set></literal> element is used for mapping properties of type <literal>Set</literal>."
+msgstr ""
+
+#: collection_mapping.xml:97(para)
+msgid "Apart from <literal><set></literal>, there is also <literal><list></literal>, <literal><map></literal>, <literal><bag></literal>, <literal><array></literal> and <literal><primitive-array></literal> mapping elements. The <literal><map></literal> element is representative:"
+msgstr ""
+
+#: collection_mapping.xml:147(para)
+msgid "<literal>name</literal> the collection property name"
+msgstr ""
+
+#: collection_mapping.xml:152(para)
+msgid "<literal>table</literal> (optional - defaults to property name) the name of the collection table (not used for one-to-many associations)"
+msgstr ""
+
+#: collection_mapping.xml:158(para)
+msgid "<literal>schema</literal> (optional) the name of a table schema to override the schema declared on the root element"
+msgstr ""
+
+#: collection_mapping.xml:164(para)
+msgid "<literal>lazy</literal> (optional - defaults to <literal>true</literal>) may be used to disable lazy fetching and specify that the association is always eagerly fetched, or to enable \"extra-lazy\" fetching where most operations do not initialize the collection (suitable for very large collections)"
+msgstr ""
+
+#: collection_mapping.xml:173(para)
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>) mark this collection as the \"inverse\" end of a bidirectional association"
+msgstr ""
+
+#: collection_mapping.xml:179(para)
+msgid "<literal>cascade</literal> (optional - defaults to <literal>none</literal>) enable operations to cascade to child entities"
+msgstr ""
+
+#: collection_mapping.xml:185(para)
+msgid "<literal>sort</literal> (optional) specify a sorted collection with <literal>natural</literal> sort order, or a given comparator class"
+msgstr ""
+
+#: collection_mapping.xml:191(para)
+msgid "<literal>order-by</literal> (optional, JDK1.4 only) specify a table column (or columns) that define the iteration order of the <literal>Map</literal>, <literal>Set</literal> or bag, together with an optional <literal>asc</literal> or <literal>desc</literal>"
+msgstr ""
+
+#: collection_mapping.xml:198(para)
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving or removing the collection (useful if the collection should contain only a subset of the available data)"
+msgstr ""
+
+#: collection_mapping.xml:205(para)
+msgid "<literal>fetch</literal> (optional, defaults to <literal>select</literal>) Choose between outer-join fetching, fetching by sequential select, and fetching by sequential subselect."
+msgstr ""
+
+#: collection_mapping.xml:212(para)
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for lazily fetching instances of this collection."
+msgstr ""
+
+#: collection_mapping.xml:218(para)
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the collection property value."
+msgstr ""
+
+#: collection_mapping.xml:224(para)
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Species that changes to the state of the collection results in increment of the owning entity's version. (For one to many associations, it is often reasonable to disable this setting.)"
+msgstr ""
+
+#: collection_mapping.xml:232(para)
+msgid "<literal>mutable</literal> (optional - defaults to <literal>true</literal>): A value of <literal>false</literal> specifies that the elements of the collection never change (a minor performance optimization in some cases)."
+msgstr ""
+
+#: collection_mapping.xml:242(title)
+msgid "Collection foreign keys"
+msgstr ""
+
+#: collection_mapping.xml:244(para)
+msgid "Collection instances are distinguished in the database by the foreign key of the entity that owns the collection. This foreign key is referred to as the <emphasis>collection key column</emphasis> (or columns) of the collection table. The collection key column is mapped by the <literal><key></literal> element."
+msgstr ""
+
+#: collection_mapping.xml:252(para)
+msgid "There may be a nullability constraint on the foreign key column. For most collections, this is implied. For unidirectional one to many associations, the foreign key column is nullable by default, so you might need to specify <literal>not-null=\"true\"</literal>."
+msgstr ""
+
+#: collection_mapping.xml:261(para)
+msgid "The foreign key constraint may use <literal>ON DELETE CASCADE</literal>."
+msgstr ""
+
+#: collection_mapping.xml:267(para)
+msgid "See the previous chapter for a full definition of the <literal><key></literal> element."
+msgstr ""
+
+#: collection_mapping.xml:275(title)
+msgid "Collection elements"
+msgstr ""
+
+#: collection_mapping.xml:277(para)
+msgid "Collections may contain almost any other Hibernate type, including all basic types, custom types, components, and of course, references to other entities. This is an important distinction: an object in a collection might be handled with \"value\" semantics (its life cycle fully depends on the collection owner) or it might be a reference to another entity, with its own life cycle. In the latter case, only the \"link\" between the two objects is considered to be state held by the collection."
+msgstr ""
+
+#: collection_mapping.xml:286(para)
+msgid "The contained type is referred to as the <emphasis>collection element type</emphasis>. Collection elements are mapped by <literal><element></literal> or <literal><composite-element></literal>, or in the case of entity references, with <literal><one-to-many></literal> or <literal><many-to-many></literal>. The first two map elements with value semantics, the next two are used to map entity associations."
+msgstr ""
+
+#: collection_mapping.xml:298(title)
+msgid "Indexed collections"
+msgstr ""
+
+#: collection_mapping.xml:300(para)
+msgid "All collection mappings, except those with set and bag semantics, need an <emphasis>index column</emphasis> in the collection table - a column that maps to an array index, or <literal>List</literal> index, or <literal>Map</literal> key. The index of a <literal>Map</literal> may be of any basic type, mapped with <literal><map-key></literal>, it may be an entity reference mapped with <literal><map-key-many-to-many></literal>, or it may be a composite type, mapped with <literal><composite-map-key></literal>. The index of an array or list is always of type <literal>integer</literal> and is mapped using the <literal><list-index></literal> element. The mapped column contains sequential integers (numbered from zero, by default)."
+msgstr ""
+
+#: collection_mapping.xml:323(para)
+msgid "<literal>column_name</literal> (required): The name of the column holding the collection index values."
+msgstr ""
+
+#: collection_mapping.xml:329(para)
+msgid "<literal>base</literal> (optional, defaults to <literal>0</literal>): The value of the index column that corresponds to the first element of the list or array."
+msgstr ""
+
+#: collection_mapping.xml:351(para)
+msgid "<literal>column</literal> (optional): The name of the column holding the collection index values."
+msgstr ""
+
+#: collection_mapping.xml:357(para)
+msgid "<literal>formula</literal> (optional): A SQL formula used to evaluate the key of the map."
+msgstr ""
+
+#: collection_mapping.xml:363(para)
+msgid "<literal>type</literal> (reguired): The type of the map keys."
+msgstr ""
+
+#: collection_mapping.xml:383(para)
+msgid "<literal>column</literal> (optional): The name of the foreign key column for the collection index values."
+msgstr ""
+
+#: collection_mapping.xml:389(para)
+msgid "<literal>formula</literal> (optional): A SQL formula used to evaluate the foreign key of the map key."
+msgstr ""
+
+#: collection_mapping.xml:395(para)
+msgid "<literal>class</literal> (required): The entity class used as the map key."
+msgstr ""
+
+#: collection_mapping.xml:403(para)
+msgid "If your table doesn't have an index column, and you still wish to use <literal>List</literal> as the property type, you should map the property as a Hibernate <emphasis><bag></emphasis>. A bag does not retain its order when it is retrieved from the database, but it may be optionally sorted or ordered."
+msgstr ""
+
+#: collection_mapping.xml:412(para)
+msgid "There are quite a range of mappings that can be generated for collections, covering many common relational models. We suggest you experiment with the schema generation tool to get a feeling for how various mapping declarations translate to database tables."
+msgstr ""
+
+#: collection_mapping.xml:419(title)
+msgid "Collections of values and many-to-many associations"
+msgstr ""
+
+#: collection_mapping.xml:421(para)
+msgid "Any collection of values or many-to-many association requires a dedicated <emphasis>collection table</emphasis> with a foreign key column or columns, <emphasis>collection element column</emphasis> or columns and possibly an index column or columns."
+msgstr ""
+
+#: collection_mapping.xml:428(para)
+msgid "For a collection of values, we use the <literal><element></literal> tag."
+msgstr ""
+
+#: collection_mapping.xml:451(para)
+msgid "<literal>column</literal> (optional): The name of the column holding the collection element values."
+msgstr ""
+
+#: collection_mapping.xml:457(para)
+msgid "<literal>formula</literal> (optional): An SQL formula used to evaluate the element."
+msgstr ""
+
+#: collection_mapping.xml:463(para)
+msgid "<literal>type</literal> (required): The type of the collection element."
+msgstr ""
+
+#: collection_mapping.xml:470(para)
+msgid "A <emphasis>many-to-many association</emphasis> is specified using the <literal><many-to-many></literal> element."
+msgstr ""
+
+#: collection_mapping.xml:500(para)
+msgid "<literal>column</literal> (optional): The name of the element foreign key column."
+msgstr ""
+
+#: collection_mapping.xml:505(para)
+msgid "<literal>formula</literal> (optional): An SQL formula used to evaluate the element foreign key value."
+msgstr ""
+
+#: collection_mapping.xml:511(para) collection_mapping.xml:665(para)
+msgid "<literal>class</literal> (required): The name of the associated class."
+msgstr ""
+
+#: collection_mapping.xml:516(para)
+msgid "<literal>fetch</literal> (optional - defaults to <literal>join</literal>): enables outer-join or sequential select fetching for this association. This is a special case; for full eager fetching (in a single <literal>SELECT</literal>) of an entity and its many-to-many relationships to other entities, you would enable <literal>join</literal> fetching not only of the collection itself, but also with this attribute on the <literal><many-to-many></literal> nested element."
+msgstr ""
+
+#: collection_mapping.xml:527(para)
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. This makes the association multiplicity effectively one to many."
+msgstr ""
+
+#: collection_mapping.xml:534(para)
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr ""
+
+#: collection_mapping.xml:541(para) collection_mapping.xml:677(para)
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>."
+msgstr ""
+
+#: collection_mapping.xml:547(para)
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class is used."
+msgstr ""
+
+#: collection_mapping.xml:556(para)
+msgid "Some examples, first, a set of strings:"
+msgstr ""
+
+#: collection_mapping.xml:565(para)
+msgid "A bag containing integers (with an iteration order determined by the <literal>order-by</literal> attribute):"
+msgstr ""
+
+#: collection_mapping.xml:577(para)
+msgid "An array of entities - in this case, a many to many association:"
+msgstr ""
+
+#: collection_mapping.xml:589(para)
+msgid "A map from string indices to dates:"
+msgstr ""
+
+#: collection_mapping.xml:602(para)
+msgid "A list of components (discussed in the next chapter):"
+msgstr ""
+
+#: collection_mapping.xml:620(title)
+msgid "One-to-many associations"
+msgstr ""
+
+#: collection_mapping.xml:622(para)
+msgid "A <emphasis>one to many association</emphasis> links the tables of two classes via a foreign key, with no intervening collection table. This mapping loses certain semantics of normal Java collections:"
+msgstr ""
+
+#: collection_mapping.xml:630(para)
+msgid "An instance of the contained entity class may not belong to more than one instance of the collection"
+msgstr ""
+
+#: collection_mapping.xml:636(para)
+msgid "An instance of the contained entity class may not appear at more than one value of the collection index"
+msgstr ""
+
+#: collection_mapping.xml:643(para)
+msgid "An association from <literal>Product</literal> to <literal>Part</literal> requires existence of a foreign key column and possibly an index column to the <literal>Part</literal> table. A <literal><one-to-many></literal> tag indicates that this is a one to many association."
+msgstr ""
+
+#: collection_mapping.xml:670(para)
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how cached identifiers that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr ""
+
+#: collection_mapping.xml:685(para)
+msgid "Notice that the <literal><one-to-many></literal> element does not need to declare any columns. Nor is it necessary to specify the <literal>table</literal> name anywhere."
+msgstr ""
+
+#: collection_mapping.xml:691(para)
+msgid "<emphasis>Very important note:</emphasis> If the foreign key column of a <literal><one-to-many></literal> association is declared <literal>NOT NULL</literal>, you must declare the <literal><key></literal> mapping <literal>not-null=\"true\"</literal> or <emphasis>use a bidirectional association</emphasis> with the collection mapping marked <literal>inverse=\"true\"</literal>. See the discussion of bidirectional associations later in this chapter."
+msgstr ""
+
+#: collection_mapping.xml:700(para)
+msgid "This example shows a map of <literal>Part</literal> entities by name (where <literal>partName</literal> is a persistent property of <literal>Part</literal>). Notice the use of a formula-based index."
+msgstr ""
+
+#: collection_mapping.xml:717(title)
+msgid "Advanced collection mappings"
+msgstr ""
+
+#: collection_mapping.xml:720(title)
+msgid "Sorted collections"
+msgstr ""
+
+#: collection_mapping.xml:722(para)
+msgid "Hibernate supports collections implementing <literal>java.util.SortedMap</literal> and <literal>java.util.SortedSet</literal>. You must specify a comparator in the mapping file:"
+msgstr ""
+
+#: collection_mapping.xml:740(para)
+msgid "Allowed values of the <literal>sort</literal> attribute are <literal>unsorted</literal>, <literal>natural</literal> and the name of a class implementing <literal>java.util.Comparator</literal>."
+msgstr ""
+
+#: collection_mapping.xml:746(para)
+msgid "Sorted collections actually behave like <literal>java.util.TreeSet</literal> or <literal>java.util.TreeMap</literal>."
+msgstr ""
+
+#: collection_mapping.xml:751(para)
+msgid "If you want the database itself to order the collection elements use the <literal>order-by</literal> attribute of <literal>set</literal>, <literal>bag</literal> or <literal>map</literal> mappings. This solution is only available under JDK 1.4 or higher (it is implemented using <literal>LinkedHashSet</literal> or <literal>LinkedHashMap</literal>). This performs the ordering in the SQL query, not in memory."
+msgstr ""
+
+#: collection_mapping.xml:771(para)
+msgid "Note that the value of the <literal>order-by</literal> attribute is an SQL ordering, not a HQL ordering!"
+msgstr ""
+
+#: collection_mapping.xml:776(para)
+msgid "Associations may even be sorted by some arbitrary criteria at runtime using a collection <literal>filter()</literal>."
+msgstr ""
+
+#: collection_mapping.xml:786(title)
+msgid "Bidirectional associations"
+msgstr ""
+
+#: collection_mapping.xml:795(term)
+msgid "one-to-many"
+msgstr ""
+
+#: collection_mapping.xml:797(para)
+msgid "set or bag valued at one end, single-valued at the other"
+msgstr ""
+
+#: collection_mapping.xml:803(term)
+msgid "many-to-many"
+msgstr ""
+
+#: collection_mapping.xml:805(para)
+msgid "set or bag valued at both ends"
+msgstr ""
+
+#: collection_mapping.xml:788(para)
+msgid "A <emphasis>bidirectional association</emphasis> allows navigation from both \"ends\" of the association. Two kinds of bidirectional association are supported: <placeholder-1/>"
+msgstr ""
+
+#: collection_mapping.xml:814(para)
+msgid "You may specify a bidirectional many-to-many association simply by mapping two many-to-many associations to the same database table and declaring one end as <emphasis>inverse</emphasis> (which one is your choice, but it can not be an indexed collection)."
+msgstr ""
+
+#: collection_mapping.xml:821(para)
+msgid "Here's an example of a bidirectional many-to-many association; each category can have many items and each item can be in many categories:"
+msgstr ""
+
+#: collection_mapping.xml:846(para)
+msgid "Changes made only to the inverse end of the association are <emphasis>not</emphasis> persisted. This means that Hibernate has two representations in memory for every bidirectional association, one link from A to B and another link from B to A. This is easier to understand if you think about the Java object model and how we create a many-to-many relationship in Java:"
+msgstr ""
+
+#: collection_mapping.xml:861(para)
+msgid "The non-inverse side is used to save the in-memory representation to the database."
+msgstr ""
+
+#: collection_mapping.xml:865(para)
+msgid "You may define a bidirectional one-to-many association by mapping a one-to-many association to the same table column(s) as a many-to-one association and declaring the many-valued end <literal>inverse=\"true\"</literal>."
+msgstr ""
+
+#: collection_mapping.xml:889(para)
+msgid "Mapping one end of an association with <literal>inverse=\"true\"</literal> doesn't affect the operation of cascades, these are orthogonal concepts!"
+msgstr ""
+
+#: collection_mapping.xml:897(title)
+msgid "Bidirectional associations with indexed collections"
+msgstr ""
+
+#: collection_mapping.xml:898(para)
+msgid "A bidirectional association where one end is represented as a <literal><list></literal> or <literal><map></literal> requires special consideration. If there is a property of the child class which maps to the index column, no problem, we can continue using <literal>inverse=\"true\"</literal> on the collection mapping:"
+msgstr ""
+
+#: collection_mapping.xml:927(para)
+msgid "But, if there is no such property on the child class, we can't think of the association as truly bidirectional (there is information available at one end of the association that is not available at the other end). In this case, we can't map the collection <literal>inverse=\"true\"</literal>. Instead, we could use the following mapping:"
+msgstr ""
+
+#: collection_mapping.xml:957(para)
+msgid "Note that in this mapping, the collection-valued end of the association is responsible for updates to the foreign key. TODO: Does this really result in some unnecessary update statements?"
+msgstr ""
+
+#: collection_mapping.xml:965(title)
+msgid "Ternary associations"
+msgstr ""
+
+#: collection_mapping.xml:967(para)
+msgid "There are three possible approaches to mapping a ternary association. One is to use a <literal>Map</literal> with an association as its index:"
+msgstr ""
+
+#: collection_mapping.xml:984(para)
+msgid "A second approach is to simply remodel the association as an entity class. This is the approach we use most commonly."
+msgstr ""
+
+#: collection_mapping.xml:989(para)
+msgid "A final alternative is to use composite elements, which we will discuss later."
+msgstr ""
+
+#: collection_mapping.xml:996(literal)
+msgid "Using an <idbag>"
+msgstr ""
+
+#: collection_mapping.xml:998(para)
+msgid "If you've fully embraced our view that composite keys are a bad thing and that entities should have synthetic identifiers (surrogate keys), then you might find it a bit odd that the many to many associations and collections of values that we've shown so far all map to tables with composite keys! Now, this point is quite arguable; a pure association table doesn't seem to benefit much from a surrogate key (though a collection of composite values <emphasis>might</emphasis>). Nevertheless, Hibernate provides a feature that allows you to map many to many associations and collections of values to a table with a surrogate key."
+msgstr ""
+
+#: collection_mapping.xml:1009(para)
+msgid "The <literal><idbag></literal> element lets you map a <literal>List</literal> (or <literal>Collection</literal>) with bag semantics."
+msgstr ""
+
+#: collection_mapping.xml:1022(para)
+msgid "As you can see, an <literal><idbag></literal> has a synthetic id generator, just like an entity class! A different surrogate key is assigned to each collection row. Hibernate does not provide any mechanism to discover the surrogate key value of a particular row, however."
+msgstr ""
+
+#: collection_mapping.xml:1029(para)
+msgid "Note that the update performance of an <literal><idbag></literal> is <emphasis>much</emphasis> better than a regular <literal><bag></literal>! Hibernate can locate individual rows efficiently and update or delete them individually, just like a list, map or set."
+msgstr ""
+
+#: collection_mapping.xml:1036(para)
+msgid "In the current implementation, the <literal>native</literal> identifier generation strategy is not supported for <literal><idbag></literal> collection identifiers."
+msgstr ""
+
+#: collection_mapping.xml:1060(title)
+msgid "Collection examples"
+msgstr ""
+
+#: collection_mapping.xml:1062(para)
+msgid "The previous sections are pretty confusing. So lets look at an example. This class:"
+msgstr ""
+
+#: collection_mapping.xml:1084(para)
+msgid "has a collection of <literal>Child</literal> instances. If each child has at most one parent, the most natural mapping is a one-to-many association:"
+msgstr ""
+
+#: collection_mapping.xml:1111(para)
+msgid "This maps to the following table definitions:"
+msgstr ""
+
+#: collection_mapping.xml:1119(para)
+msgid "If the parent is <emphasis>required</emphasis>, use a bidirectional one-to-many association:"
+msgstr ""
+
+#: collection_mapping.xml:1146(para)
+msgid "Notice the <literal>NOT NULL</literal> constraint:"
+msgstr ""
+
+#: collection_mapping.xml:1157(para)
+msgid "Alternatively, if you absolutely insist that this association should be unidirectional, you can declare the <literal>NOT NULL</literal> constraint on the <literal><key></literal> mapping:"
+msgstr ""
+
+#: collection_mapping.xml:1184(para)
+msgid "On the other hand, if a child might have multiple parents, a many-to-many association is appropriate:"
+msgstr ""
+
+#: collection_mapping.xml:1210(para)
+msgid "Table definitions:"
+msgstr ""
+
+#: collection_mapping.xml:1222(para)
+msgid "For more examples and a complete walk-through a parent/child relationship mapping, see <xref linkend=\"example-parentchild\"/>."
+msgstr ""
+
+#: collection_mapping.xml:1227(para)
+msgid "Even more exotic association mappings are possible, we will catalog all possibilities in the next chapter."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: collection_mapping.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/component_mapping.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/component_mapping.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/component_mapping.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,164 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:30-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: component_mapping.xml:5(title)
+msgid "Component Mapping"
+msgstr ""
+
+#: component_mapping.xml:7(para)
+msgid "The notion of a <emphasis>component</emphasis> is re-used in several different contexts, for different purposes, throughout Hibernate."
+msgstr ""
+
+#: component_mapping.xml:13(title)
+msgid "Dependent objects"
+msgstr ""
+
+#: component_mapping.xml:15(para)
+msgid "A component is a contained object that is persisted as a value type, not an entity reference. The term \"component\" refers to the object-oriented notion of composition (not to architecture-level components). For example, you might model a person like this:"
+msgstr ""
+
+#: component_mapping.xml:71(para)
+msgid "Now <literal>Name</literal> may be persisted as a component of <literal>Person</literal>. Notice that <literal>Name</literal> defines getter and setter methods for its persistent properties, but doesn't need to declare any interfaces or identifier properties."
+msgstr ""
+
+#: component_mapping.xml:78(para)
+msgid "Our Hibernate mapping would look like:"
+msgstr ""
+
+#: component_mapping.xml:94(para)
+msgid "The person table would have the columns <literal>pid</literal>, <literal>birthday</literal>, <literal>initial</literal>, <literal>first</literal> and <literal>last</literal>."
+msgstr ""
+
+#: component_mapping.xml:102(para)
+msgid "Like all value types, components do not support shared references. In other words, two persons could have the same name, but the two person objects would contain two independent name ojects, only \"the same\" by value. The null value semantics of a component are <emphasis>ad hoc</emphasis>. When reloading the containing object, Hibernate will assume that if all component columns are null, then the entire component is null. This should be okay for most purposes."
+msgstr ""
+
+#: component_mapping.xml:111(para)
+msgid "The properties of a component may be of any Hibernate type (collections, many-to-one associations, other components, etc). Nested components should <emphasis>not</emphasis> be considered an exotic usage. Hibernate is intended to support a very fine-grained object model."
+msgstr ""
+
+#: component_mapping.xml:118(para)
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr ""
+
+#: component_mapping.xml:140(title)
+msgid "Collections of dependent objects"
+msgstr ""
+
+#: component_mapping.xml:142(para)
+msgid "Collections of components are supported (eg. an array of type <literal>Name</literal>). Declare your component collection by replacing the <literal><element></literal> tag with a <literal><composite-element></literal> tag."
+msgstr ""
+
+#: component_mapping.xml:158(para)
+msgid "Note: if you define a <literal>Set</literal> of composite elements, it is very important to implement <literal>equals()</literal> and <literal>hashCode()</literal> correctly."
+msgstr ""
+
+#: component_mapping.xml:164(para)
+msgid "Composite elements may contain components but not collections. If your composite element itself contains components, use the <literal><nested-composite-element></literal> tag. This is a pretty exotic case - a collection of components which themselves have components. By this stage you should be asking yourself if a one-to-many association is more appropriate. Try remodelling the composite element as an entity - but note that even though the Java model is the same, the relational model and persistence semantics are still slightly different."
+msgstr ""
+
+#: component_mapping.xml:176(para)
+msgid "Please note that a composite element mapping doesn't support null-able properties if you're using a <literal><set></literal>. Hibernate has to use each columns value to identify a record when deleting objects (there is no separate primary key column in the composite element table), which is not possible with null values. You have to either use only not-null properties in a composite-element or choose a <literal><list></literal>, <literal><map></literal>, <literal><bag></literal> or <literal><idbag></literal>."
+msgstr ""
+
+#: component_mapping.xml:187(para)
+msgid "A special case of a composite element is a composite element with a nested <literal><many-to-one></literal> element. A mapping like this allows you to map extra columns of a many-to-many association table to the composite element class. The following is a many-to-many association from <literal>Order</literal> to <literal>Item</literal> where <literal>purchaseDate</literal>, <literal>price</literal> and <literal>quantity</literal> are properties of the association:"
+msgstr ""
+
+#: component_mapping.xml:210(para)
+msgid "Of course, there can't be a reference to the purchae on the other side, for bidirectional association navigation. Remember that components are value types and don't allow shared references. A single <literal>Purchase</literal> can be in the set of an <literal>Order</literal>, but it can't be referenced by the <literal>Item</literal> at the same time."
+msgstr ""
+
+#: component_mapping.xml:218(para)
+msgid "Even ternary (or quaternary, etc) associations are possible:"
+msgstr ""
+
+#: component_mapping.xml:231(para)
+msgid "Composite elements may appear in queries using the same syntax as associations to other entities."
+msgstr ""
+
+#: component_mapping.xml:239(title)
+msgid "Components as Map indices"
+msgstr ""
+
+#: component_mapping.xml:241(para)
+msgid "The <literal><composite-map-key></literal> element lets you map a component class as the key of a <literal>Map</literal>. Make sure you override <literal>hashCode()</literal> and <literal>equals()</literal> correctly on the component class."
+msgstr ""
+
+#: component_mapping.xml:250(title)
+msgid "Components as composite identifiers"
+msgstr ""
+
+#: component_mapping.xml:252(para)
+msgid "You may use a component as an identifier of an entity class. Your component class must satisfy certain requirements:"
+msgstr ""
+
+#: component_mapping.xml:259(para)
+msgid "It must implement <literal>java.io.Serializable</literal>."
+msgstr ""
+
+#: component_mapping.xml:264(para)
+msgid "It must re-implement <literal>equals()</literal> and <literal>hashCode()</literal>, consistently with the database's notion of composite key equality."
+msgstr ""
+
+#: component_mapping.xml:273(emphasis)
+msgid "Note: in Hibernate3, the second requirement is not an absolutely hard requirement of Hibernate. But do it anyway."
+msgstr ""
+
+#: component_mapping.xml:277(para)
+msgid "You can't use an <literal>IdentifierGenerator</literal> to generate composite keys. Instead the application must assign its own identifiers."
+msgstr ""
+
+#: component_mapping.xml:282(para)
+msgid "Use the <literal><composite-id></literal> tag (with nested <literal><key-property></literal> elements) in place of the usual <literal><id></literal> declaration. For example, the <literal>OrderLine</literal> class has a primary key that depends upon the (composite) primary key of <literal>Order</literal>."
+msgstr ""
+
+#: component_mapping.xml:309(para)
+msgid "Now, any foreign keys referencing the <literal>OrderLine</literal> table are also composite. You must declare this in your mappings for other classes. An association to <literal>OrderLine</literal> would be mapped like this:"
+msgstr ""
+
+#: component_mapping.xml:322(para)
+msgid "(Note that the <literal><column></literal> tag is an alternative to the <literal>column</literal> attribute everywhere.)"
+msgstr ""
+
+#: component_mapping.xml:327(para)
+msgid "A <literal>many-to-many</literal> association to <literal>OrderLine</literal> also uses the composite foreign key:"
+msgstr ""
+
+#: component_mapping.xml:341(para)
+msgid "The collection of <literal>OrderLine</literal>s in <literal>Order</literal> would use:"
+msgstr ""
+
+#: component_mapping.xml:354(para)
+msgid "(The <literal><one-to-many></literal> element, as usual, declares no columns.)"
+msgstr ""
+
+#: component_mapping.xml:358(para)
+msgid "If <literal>OrderLine</literal> itself owns a collection, it also has a composite foreign key."
+msgstr ""
+
+#: component_mapping.xml:382(title)
+msgid "Dynamic components"
+msgstr ""
+
+#: component_mapping.xml:384(para)
+msgid "You may even map a property of type <literal>Map</literal>:"
+msgstr ""
+
+#: component_mapping.xml:394(para)
+msgid "The semantics of a <literal><dynamic-component></literal> mapping are identical to <literal><component></literal>. The advantage of this kind of mapping is the ability to determine the actual properties of the bean at deployment time, just by editing the mapping document. Runtime manipulation of the mapping document is also possible, using a DOM parser. Even better, you can access (and change) Hibernate's configuration-time metamodel via the <literal>Configuration</literal> object."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: component_mapping.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/configuration.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/configuration.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/configuration.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1470 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:31-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: configuration.xml:5(title)
+msgid "Configuration"
+msgstr ""
+
+#: configuration.xml:7(para)
+msgid "Because Hibernate is designed to operate in many different environments, there are a large number of configuration parameters. Fortunately, most have sensible default values and Hibernate is distributed with an example <literal>hibernate.properties</literal> file in <literal>etc/</literal> that shows the various options. Just put the example file in your classpath and customize it."
+msgstr ""
+
+#: configuration.xml:16(title)
+msgid "Programmatic configuration"
+msgstr ""
+
+#: configuration.xml:18(para)
+msgid "An instance of <literal>org.hibernate.cfg.Configuration</literal> represents an entire set of mappings of an application's Java types to an SQL database. The <literal>Configuration</literal> is used to build an (immutable) <literal>SessionFactory</literal>. The mappings are compiled from various XML mapping files."
+msgstr ""
+
+#: configuration.xml:26(para)
+msgid "You may obtain a <literal>Configuration</literal> instance by instantiating it directly and specifying XML mapping documents. If the mapping files are in the classpath, use <literal>addResource()</literal>:"
+msgstr ""
+
+#: configuration.xml:36(para)
+msgid "An alternative (sometimes better) way is to specify the mapped class, and let Hibernate find the mapping document for you:"
+msgstr ""
+
+#: configuration.xml:45(para)
+msgid "Then Hibernate will look for mapping files named <literal>/org/hibernate/auction/Item.hbm.xml</literal> and <literal>/org/hibernate/auction/Bid.hbm.xml</literal> in the classpath. This approach eliminates any hardcoded filenames."
+msgstr ""
+
+#: configuration.xml:52(para)
+msgid "A <literal>Configuration</literal> also allows you to specify configuration properties:"
+msgstr ""
+
+#: configuration.xml:64(para)
+msgid "This is not the only way to pass configuration properties to Hibernate. The various options include:"
+msgstr ""
+
+#: configuration.xml:71(para)
+msgid "Pass an instance of <literal>java.util.Properties</literal> to <literal>Configuration.setProperties()</literal>."
+msgstr ""
+
+#: configuration.xml:77(para)
+msgid "Place <literal>hibernate.properties</literal> in a root directory of the classpath."
+msgstr ""
+
+#: configuration.xml:83(para)
+msgid "Set <literal>System</literal> properties using <literal>java -Dproperty=value</literal>."
+msgstr ""
+
+#: configuration.xml:89(para)
+msgid "Include <literal><property></literal> elements in <literal>hibernate.cfg.xml</literal> (discussed later)."
+msgstr ""
+
+#: configuration.xml:96(para)
+msgid "<literal>hibernate.properties</literal> is the easiest approach if you want to get started quickly."
+msgstr ""
+
+#: configuration.xml:101(para)
+msgid "The <literal>Configuration</literal> is intended as a startup-time object, to be discarded once a <literal>SessionFactory</literal> is created."
+msgstr ""
+
+#: configuration.xml:109(title)
+msgid "Obtaining a SessionFactory"
+msgstr ""
+
+#: configuration.xml:111(para)
+msgid "When all mappings have been parsed by the <literal>Configuration</literal>, the application must obtain a factory for <literal>Session</literal> instances. This factory is intended to be shared by all application threads:"
+msgstr ""
+
+#: configuration.xml:119(para)
+msgid "Hibernate does allow your application to instantiate more than one <literal>SessionFactory</literal>. This is useful if you are using more than one database."
+msgstr ""
+
+#: configuration.xml:128(title)
+msgid "JDBC connections"
+msgstr ""
+
+#: configuration.xml:130(para)
+msgid "Usually, you want to have the <literal>SessionFactory</literal> create and pool JDBC connections for you. If you take this approach, opening a <literal>Session</literal> is as simple as:"
+msgstr ""
+
+#: configuration.xml:138(para)
+msgid "As soon as you do something that requires access to the database, a JDBC connection will be obtained from the pool."
+msgstr ""
+
+#: configuration.xml:143(para)
+msgid "For this to work, we need to pass some JDBC connection properties to Hibernate. All Hibernate property names and semantics are defined on the class <literal>org.hibernate.cfg.Environment</literal>. We will now describe the most important settings for JDBC connection configuration."
+msgstr ""
+
+#: configuration.xml:150(para)
+msgid "Hibernate will obtain (and pool) connections using <literal>java.sql.DriverManager</literal> if you set the following properties:"
+msgstr ""
+
+#: configuration.xml:156(title)
+msgid "Hibernate JDBC Properties"
+msgstr ""
+
+#: configuration.xml:162(entry) configuration.xml:258(entry) configuration.xml:360(entry) configuration.xml:551(entry) configuration.xml:747(entry) configuration.xml:854(entry) configuration.xml:942(entry)
+msgid "Property name"
+msgstr ""
+
+#: configuration.xml:163(entry) configuration.xml:259(entry) configuration.xml:361(entry) configuration.xml:552(entry) configuration.xml:748(entry) configuration.xml:855(entry) configuration.xml:943(entry)
+msgid "Purpose"
+msgstr ""
+
+#: configuration.xml:169(literal)
+msgid "hibernate.connection.driver_class"
+msgstr ""
+
+#: configuration.xml:172(emphasis)
+msgid "JDBC driver class"
+msgstr ""
+
+#: configuration.xml:177(literal)
+msgid "hibernate.connection.url"
+msgstr ""
+
+#: configuration.xml:180(emphasis)
+msgid "JDBC URL"
+msgstr ""
+
+#: configuration.xml:185(literal) configuration.xml:289(literal)
+msgid "hibernate.connection.username"
+msgstr ""
+
+#: configuration.xml:188(emphasis) configuration.xml:292(emphasis)
+msgid "database user"
+msgstr ""
+
+#: configuration.xml:193(literal) configuration.xml:297(literal)
+msgid "hibernate.connection.password"
+msgstr ""
+
+#: configuration.xml:196(emphasis) configuration.xml:300(emphasis)
+msgid "database user password"
+msgstr ""
+
+#: configuration.xml:201(literal)
+msgid "hibernate.connection.pool_size"
+msgstr ""
+
+#: configuration.xml:204(emphasis)
+msgid "maximum number of pooled connections"
+msgstr ""
+
+#: configuration.xml:211(para)
+msgid "Hibernate's own connection pooling algorithm is however quite rudimentary. It is intended to help you get started and is <emphasis>not intended for use in a production system</emphasis> or even for performance testing. You should use a third party pool for best performance and stability. Just replace the <literal>hibernate.connection.pool_size</literal> property with connection pool specific settings. This will turn off Hibernate's internal pool. For example, you might like to use C3P0."
+msgstr ""
+
+#: configuration.xml:221(para)
+msgid "C3P0 is an open source JDBC connection pool distributed along with Hibernate in the <literal>lib</literal> directory. Hibernate will use its <literal>C3P0ConnectionProvider</literal> for connection pooling if you set <literal>hibernate.c3p0.*</literal> properties. If you'd like to use Proxool refer to the packaged <literal>hibernate.properties</literal> and the Hibernate web site for more information."
+msgstr ""
+
+#: configuration.xml:230(para)
+msgid "Here is an example <literal>hibernate.properties</literal> file for C3P0:"
+msgstr ""
+
+#: configuration.xml:244(para)
+msgid "For use inside an application server, you should almost always configure Hibernate to obtain connections from an application server <literal>Datasource</literal> registered in JNDI. You'll need to set at least one of the following properties:"
+msgstr ""
+
+#: configuration.xml:252(title)
+msgid "Hibernate Datasource Properties"
+msgstr ""
+
+#: configuration.xml:265(literal)
+msgid "hibernate.connection.datasource"
+msgstr ""
+
+#: configuration.xml:268(emphasis)
+msgid "datasource JNDI name"
+msgstr ""
+
+#: configuration.xml:273(literal)
+msgid "hibernate.jndi.url"
+msgstr ""
+
+#: configuration.xml:276(emphasis)
+msgid "URL of the JNDI provider"
+msgstr ""
+
+#: configuration.xml:275(entry) configuration.xml:283(entry) configuration.xml:291(entry) configuration.xml:299(entry)
+msgid "<placeholder-1/> (optional)"
+msgstr ""
+
+#: configuration.xml:281(literal)
+msgid "hibernate.jndi.class"
+msgstr ""
+
+#: configuration.xml:284(literal) configuration.xml:733(literal)
+msgid "InitialContextFactory"
+msgstr ""
+
+#: configuration.xml:284(emphasis)
+msgid "class of the JNDI <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:307(para)
+msgid "Here's an example <literal>hibernate.properties</literal> file for an application server provided JNDI datasource:"
+msgstr ""
+
+#: configuration.xml:319(para)
+msgid "JDBC connections obtained from a JNDI datasource will automatically participate in the container-managed transactions of the application server."
+msgstr ""
+
+#: configuration.xml:324(para)
+msgid "Arbitrary connection properties may be given by prepending \"<literal>hibernate.connection</literal>\" to the property name. For example, you may specify a <literal>charSet</literal> using <literal>hibernate.connection.charSet</literal>."
+msgstr ""
+
+#: configuration.xml:330(para)
+msgid "You may define your own plugin strategy for obtaining JDBC connections by implementing the interface <literal>org.hibernate.connection.ConnectionProvider</literal>. You may select a custom implementation by setting <literal>hibernate.connection.provider_class</literal>."
+msgstr ""
+
+#: configuration.xml:339(title)
+msgid "Optional configuration properties"
+msgstr ""
+
+#: configuration.xml:341(para)
+msgid "There are a number of other properties that control the behaviour of Hibernate at runtime. All are optional and have reasonable default values."
+msgstr ""
+
+#: configuration.xml:346(para)
+msgid "<emphasis>Warning: some of these properties are \"system-level\" only.</emphasis> System-level properties can be set only via <literal>java -Dproperty=value</literal> or <literal>hibernate.properties</literal>. They may <emphasis>not</emphasis> be set by the other techniques described above."
+msgstr ""
+
+#: configuration.xml:354(title)
+msgid "Hibernate Configuration Properties"
+msgstr ""
+
+#: configuration.xml:367(literal)
+msgid "hibernate.dialect"
+msgstr ""
+
+#: configuration.xml:370(literal) configuration.xml:1045(entry)
+msgid "Dialect"
+msgstr ""
+
+#: configuration.xml:374(emphasis) configuration.xml:413(emphasis) configuration.xml:426(emphasis) configuration.xml:439(emphasis) configuration.xml:600(emphasis) configuration.xml:644(emphasis) configuration.xml:657(emphasis) configuration.xml:671(emphasis) configuration.xml:759(emphasis) configuration.xml:774(emphasis) configuration.xml:786(emphasis) configuration.xml:800(emphasis) configuration.xml:813(emphasis) configuration.xml:825(emphasis) configuration.xml:838(emphasis) configuration.xml:868(emphasis) configuration.xml:882(emphasis) configuration.xml:896(emphasis) configuration.xml:984(emphasis)
+msgid "eg."
+msgstr ""
+
+#: configuration.xml:375(literal)
+msgid "full.classname.of.Dialect"
+msgstr ""
+
+#: configuration.xml:369(entry)
+msgid "The classname of a Hibernate <placeholder-1/> which allows Hibernate to generate SQL optimized for a particular relational database. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:381(literal)
+msgid "hibernate.show_sql"
+msgstr ""
+
+#: configuration.xml:385(literal) configuration.xml:1247(literal)
+msgid "org.hibernate.SQL"
+msgstr ""
+
+#: configuration.xml:386(literal)
+msgid "debug"
+msgstr ""
+
+#: configuration.xml:387(para) configuration.xml:399(para) configuration.xml:493(para) configuration.xml:506(para) configuration.xml:519(para) configuration.xml:532(para) configuration.xml:586(para) configuration.xml:613(para) configuration.xml:627(para) configuration.xml:682(para) configuration.xml:910(para) configuration.xml:925(para) configuration.xml:1015(para)
+msgid "<emphasis role=\"strong\">eg.</emphasis><literal>true</literal> | <literal>false</literal>"
+msgstr ""
+
+#: configuration.xml:383(entry)
+msgid "Write all SQL statements to console. This is an alternative to setting the log category <placeholder-1/> to <placeholder-2/>. <placeholder-3/>"
+msgstr ""
+
+#: configuration.xml:395(literal)
+msgid "hibernate.format_sql"
+msgstr ""
+
+#: configuration.xml:397(entry)
+msgid "Pretty print the SQL in the log and console. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:407(literal)
+msgid "hibernate.default_schema"
+msgstr ""
+
+#: configuration.xml:414(literal)
+msgid "SCHEMA_NAME"
+msgstr ""
+
+#: configuration.xml:409(entry)
+msgid "Qualify unqualified table names with the given schema/tablespace in generated SQL. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:420(literal)
+msgid "hibernate.default_catalog"
+msgstr ""
+
+#: configuration.xml:427(literal)
+msgid "CATALOG_NAME"
+msgstr ""
+
+#: configuration.xml:422(entry)
+msgid "Qualify unqualified table names with the given catalog in generated SQL. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:433(literal)
+msgid "hibernate.session_factory_name"
+msgstr ""
+
+#: configuration.xml:436(literal) configuration.xml:478(literal) configuration.xml:995(literal) configuration.xml:997(literal)
+msgid "SessionFactory"
+msgstr ""
+
+#: configuration.xml:440(literal) configuration.xml:883(literal)
+msgid "jndi/composite/name"
+msgstr ""
+
+#: configuration.xml:435(entry)
+msgid "The <placeholder-1/> will be automatically bound to this name in JNDI after it has been created. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:446(literal)
+msgid "hibernate.max_fetch_depth"
+msgstr ""
+
+#: configuration.xml:451(literal)
+msgid "0"
+msgstr ""
+
+#: configuration.xml:452(para)
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>0</literal> and <literal>3</literal>"
+msgstr ""
+
+#: configuration.xml:448(entry)
+msgid "Set a maximum \"depth\" for the outer join fetch tree for single-ended associations (one-to-one, many-to-one). A <placeholder-1/> disables default outer join fetching. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:461(literal)
+msgid "hibernate.default_batch_fetch_size"
+msgstr ""
+
+#: configuration.xml:465(para)
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values <literal>4</literal>, <literal>8</literal>, <literal>16</literal>"
+msgstr ""
+
+#: configuration.xml:463(entry)
+msgid "Set a default size for Hibernate batch fetching of associations. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:474(literal)
+msgid "hibernate.default_entity_mode"
+msgstr ""
+
+#: configuration.xml:479(para)
+msgid "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+msgstr ""
+
+#: configuration.xml:476(entry)
+msgid "Set a default mode for entity representation for all sessions opened from this <placeholder-1/><placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:487(literal)
+msgid "hibernate.order_updates"
+msgstr ""
+
+#: configuration.xml:489(entry)
+msgid "Force Hibernate to order SQL updates by the primary key value of the items being updated. This will result in fewer transaction deadlocks in highly concurrent systems. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:501(literal)
+msgid "hibernate.generate_statistics"
+msgstr ""
+
+#: configuration.xml:503(entry)
+msgid "If enabled, Hibernate will collect statistics useful for performance tuning. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:514(literal)
+msgid "hibernate.use_identifier_rollback"
+msgstr ""
+
+#: configuration.xml:516(entry)
+msgid "If enabled, generated identifier properties will be reset to default values when objects are deleted. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:527(literal)
+msgid "hibernate.use_sql_comments"
+msgstr ""
+
+#: configuration.xml:531(literal) configuration.xml:585(literal)
+msgid "false"
+msgstr ""
+
+#: configuration.xml:529(entry)
+msgid "If turned on, Hibernate will generate comments inside the SQL, for easier debugging, defaults to <placeholder-1/>. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:543(title)
+msgid "Hibernate JDBC and Connection Properties"
+msgstr ""
+
+#: configuration.xml:558(literal)
+msgid "hibernate.jdbc.fetch_size"
+msgstr ""
+
+#: configuration.xml:562(literal)
+msgid "Statement.setFetchSize()"
+msgstr ""
+
+#: configuration.xml:560(entry)
+msgid "A non-zero value determines the JDBC fetch size (calls <placeholder-1/>)."
+msgstr ""
+
+#: configuration.xml:567(literal)
+msgid "hibernate.jdbc.batch_size"
+msgstr ""
+
+#: configuration.xml:571(para)
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>5</literal> and <literal>30</literal>"
+msgstr ""
+
+#: configuration.xml:569(entry)
+msgid "A non-zero value enables use of JDBC2 batch updates by Hibernate. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:579(literal)
+msgid "hibernate.jdbc.batch_versioned_data"
+msgstr ""
+
+#: configuration.xml:582(literal)
+msgid "true"
+msgstr ""
+
+#: configuration.xml:583(literal)
+msgid "executeBatch()"
+msgstr ""
+
+#: configuration.xml:581(entry)
+msgid "Set this property to <placeholder-1/> if your JDBC driver returns correct row counts from <placeholder-2/> (it is usually safe to turn this option on). Hibernate will then use batched DML for automatically versioned data. Defaults to <placeholder-3/>. <placeholder-4/>"
+msgstr ""
+
+#: configuration.xml:594(literal)
+msgid "hibernate.jdbc.factory_class"
+msgstr ""
+
+#: configuration.xml:597(literal)
+msgid "Batcher"
+msgstr ""
+
+#: configuration.xml:601(literal)
+msgid "classname.of.BatcherFactory"
+msgstr ""
+
+#: configuration.xml:596(entry)
+msgid "Select a custom <placeholder-1/>. Most applications will not need this configuration property. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:607(literal)
+msgid "hibernate.jdbc.use_scrollable_resultset"
+msgstr ""
+
+#: configuration.xml:609(entry)
+msgid "Enables use of JDBC2 scrollable resultsets by Hibernate. This property is only necessary when using user supplied JDBC connections, Hibernate uses connection metadata otherwise. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:621(literal)
+msgid "hibernate.jdbc.use_streams_for_binary"
+msgstr ""
+
+#: configuration.xml:624(literal)
+msgid "binary"
+msgstr ""
+
+#: configuration.xml:625(literal)
+msgid "serializable"
+msgstr ""
+
+#: configuration.xml:623(entry)
+msgid "Use streams when writing/reading <placeholder-1/> or <placeholder-2/> types to/from JDBC (system-level property). <placeholder-3/>"
+msgstr ""
+
+#: configuration.xml:635(literal)
+msgid "hibernate.jdbc.use_get_generated_keys"
+msgstr ""
+
+#: configuration.xml:638(literal)
+msgid "PreparedStatement.getGeneratedKeys()"
+msgstr ""
+
+#: configuration.xml:645(literal) configuration.xml:775(literal) configuration.xml:787(literal) configuration.xml:801(literal) configuration.xml:839(literal)
+msgid "true|false"
+msgstr ""
+
+#: configuration.xml:637(entry)
+msgid "Enable use of JDBC3 <placeholder-1/> to retrieve natively generated keys after insert. Requires JDBC3+ driver and JRE1.4+, set to false if your driver has problems with the Hibernate identifier generators. By default, tries to determine the driver capabilities using connection metadata. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:651(literal)
+msgid "hibernate.connection.provider_class"
+msgstr ""
+
+#: configuration.xml:654(literal)
+msgid "ConnectionProvider"
+msgstr ""
+
+#: configuration.xml:658(literal)
+msgid "classname.of.ConnectionProvider"
+msgstr ""
+
+#: configuration.xml:653(entry)
+msgid "The classname of a custom <placeholder-1/> which provides JDBC connections to Hibernate. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:664(literal)
+msgid "hibernate.connection.isolation"
+msgstr ""
+
+#: configuration.xml:668(literal)
+msgid "java.sql.Connection"
+msgstr ""
+
+#: configuration.xml:672(literal)
+msgid "1, 2, 4, 8"
+msgstr ""
+
+#: configuration.xml:666(entry)
+msgid "Set the JDBC transaction isolation level. Check <placeholder-1/> for meaningful values but note that most databases do not support all isolation levels. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:678(literal)
+msgid "hibernate.connection.autocommit"
+msgstr ""
+
+#: configuration.xml:680(entry)
+msgid "Enables autocommit for JDBC pooled connections (not recommended). <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:690(literal)
+msgid "hibernate.connection.release_mode"
+msgstr ""
+
+#: configuration.xml:696(literal) configuration.xml:700(literal)
+msgid "after_statement"
+msgstr ""
+
+#: configuration.xml:699(literal) configuration.xml:701(literal)
+msgid "after_transaction"
+msgstr ""
+
+#: configuration.xml:699(literal)
+msgid "auto"
+msgstr ""
+
+#: configuration.xml:703(para)
+msgid "<emphasis role=\"strong\">eg.</emphasis><literal>auto</literal> (default) | <literal>on_close</literal> | <literal>after_transaction</literal> | <literal>after_statement</literal>"
+msgstr ""
+
+#: configuration.xml:708(para)
+msgid "Note that this setting only affects <literal>Session</literal>s returned from <literal>SessionFactory.openSession</literal>. For <literal>Session</literal>s obtained through <literal>SessionFactory.getCurrentSession</literal>, the <literal>CurrentSessionContext</literal> implementation configured for use controls the connection release mode for those <literal>Session</literal>s. See <xref linkend=\"architecture-current-session\"/>"
+msgstr ""
+
+#: configuration.xml:692(entry)
+msgid "Specify when Hibernate should release JDBC connections. By default, a JDBC connection is held until the session is explicitly closed or disconnected. For an application server JTA datasource, you should use <placeholder-1/> to aggressively release connections after every JDBC call. For a non-JTA connection, it often makes sense to release the connection at the end of each transaction, by using <placeholder-2/>. <placeholder-3/> will choose <placeholder-4/> for the JTA and CMT transaction strategies and <placeholder-5/> for the JDBC transaction strategy. <placeholder-6/><placeholder-7/>"
+msgstr ""
+
+#: configuration.xml:720(emphasis) configuration.xml:729(emphasis)
+msgid "<propertyName>"
+msgstr ""
+
+#: configuration.xml:720(literal)
+msgid "hibernate.connection.<placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:723(literal) configuration.xml:732(literal)
+msgid "propertyName"
+msgstr ""
+
+#: configuration.xml:724(literal)
+msgid "DriverManager.getConnection()"
+msgstr ""
+
+#: configuration.xml:722(entry)
+msgid "Pass the JDBC property <placeholder-1/> to <placeholder-2/>."
+msgstr ""
+
+#: configuration.xml:729(literal)
+msgid "hibernate.jndi.<placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:731(entry)
+msgid "Pass the property <placeholder-1/> to the JNDI <placeholder-2/>."
+msgstr ""
+
+#: configuration.xml:741(title)
+msgid "Hibernate Cache Properties"
+msgstr ""
+
+#: configuration.xml:754(literal)
+msgid "hibernate.cache.provider_class"
+msgstr ""
+
+#: configuration.xml:757(literal)
+msgid "CacheProvider"
+msgstr ""
+
+#: configuration.xml:760(literal)
+msgid "classname.of.CacheProvider"
+msgstr ""
+
+#: configuration.xml:756(entry)
+msgid "The classname of a custom <placeholder-1/>. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:766(literal)
+msgid "hibernate.cache.use_minimal_puts"
+msgstr ""
+
+#: configuration.xml:768(entry)
+msgid "Optimize second-level cache operation to minimize writes, at the cost of more frequent reads. This setting is most useful for clustered caches and, in Hibernate3, is enabled by default for clustered cache implementations. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:781(literal)
+msgid "hibernate.cache.use_query_cache"
+msgstr ""
+
+#: configuration.xml:783(entry)
+msgid "Enable the query cache, individual queries still have to be set cachable. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:793(literal)
+msgid "hibernate.cache.use_second_level_cache"
+msgstr ""
+
+#: configuration.xml:797(literal)
+msgid "<cache>"
+msgstr ""
+
+#: configuration.xml:795(entry)
+msgid "May be used to completely disable the second level cache, which is enabled by default for classes which specify a <placeholder-1/> mapping. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:807(literal)
+msgid "hibernate.cache.query_cache_factory"
+msgstr ""
+
+#: configuration.xml:810(literal)
+msgid "QueryCache"
+msgstr ""
+
+#: configuration.xml:811(literal)
+msgid "StandardQueryCache"
+msgstr ""
+
+#: configuration.xml:814(literal)
+msgid "classname.of.QueryCache"
+msgstr ""
+
+#: configuration.xml:809(entry)
+msgid "The classname of a custom <placeholder-1/> interface, defaults to the built-in <placeholder-2/>. <placeholder-3/>"
+msgstr ""
+
+#: configuration.xml:820(literal)
+msgid "hibernate.cache.region_prefix"
+msgstr ""
+
+#: configuration.xml:826(literal)
+msgid "prefix"
+msgstr ""
+
+#: configuration.xml:822(entry)
+msgid "A prefix to use for second-level cache region names. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:832(literal)
+msgid "hibernate.cache.use_structured_entries"
+msgstr ""
+
+#: configuration.xml:834(entry)
+msgid "Forces Hibernate to store data in the second-level cache in a more human-friendly format. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:848(title)
+msgid "Hibernate Transaction Properties"
+msgstr ""
+
+#: configuration.xml:861(literal)
+msgid "hibernate.transaction.factory_class"
+msgstr ""
+
+#: configuration.xml:864(literal)
+msgid "TransactionFactory"
+msgstr ""
+
+#: configuration.xml:865(literal)
+msgid "Transaction"
+msgstr ""
+
+#: configuration.xml:866(literal)
+msgid "JDBCTransactionFactory"
+msgstr ""
+
+#: configuration.xml:869(literal)
+msgid "classname.of.TransactionFactory"
+msgstr ""
+
+#: configuration.xml:863(entry)
+msgid "The classname of a <placeholder-1/> to use with Hibernate <placeholder-2/> API (defaults to <placeholder-3/>). <placeholder-4/>"
+msgstr ""
+
+#: configuration.xml:875(literal)
+msgid "jta.UserTransaction"
+msgstr ""
+
+#: configuration.xml:878(literal)
+msgid "JTATransactionFactory"
+msgstr ""
+
+#: configuration.xml:879(literal)
+msgid "UserTransaction"
+msgstr ""
+
+#: configuration.xml:877(entry)
+msgid "A JNDI name used by <placeholder-1/> to obtain the JTA <placeholder-2/> from the application server. <placeholder-3/>"
+msgstr ""
+
+#: configuration.xml:889(literal)
+msgid "hibernate.transaction.manager_lookup_class"
+msgstr ""
+
+#: configuration.xml:892(literal)
+msgid "TransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:897(literal)
+msgid "classname.of.TransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:891(entry)
+msgid "The classname of a <placeholder-1/> - required when JVM-level caching is enabled or when using hilo generator in a JTA environment. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:903(literal)
+msgid "hibernate.transaction.flush_before_completion"
+msgstr ""
+
+#: configuration.xml:905(entry)
+msgid "If enabled, the session will be automatically flushed during the before completion phase of the transaction. Built-in and automatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:918(literal)
+msgid "hibernate.transaction.auto_close_session"
+msgstr ""
+
+#: configuration.xml:920(entry)
+msgid "If enabled, the session will be automatically closed during the after completion phase of the transaction. Built-in and utomatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:936(title)
+msgid "Miscellaneous Properties"
+msgstr ""
+
+#: configuration.xml:949(literal)
+msgid "hibernate.current_session_context_class"
+msgstr ""
+
+#: configuration.xml:953(literal)
+msgid "Session"
+msgstr ""
+
+#: configuration.xml:956(para)
+msgid "<emphasis role=\"strong\">eg.</emphasis><literal>jta</literal> | <literal>thread</literal> | <literal>managed</literal> | <literal>custom.Class</literal>"
+msgstr ""
+
+#: configuration.xml:951(entry)
+msgid "Supply a (custom) strategy for the scoping of the \"current\" <placeholder-1/>. See <xref linkend=\"architecture-current-session\"/> for more information about the built-in strategies. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:965(literal)
+msgid "hibernate.query.factory_class"
+msgstr ""
+
+#: configuration.xml:969(para)
+msgid "<emphasis role=\"strong\">eg.</emphasis><literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>"
+msgstr ""
+
+#: configuration.xml:967(entry)
+msgid "Chooses the HQL parser implementation. <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:978(literal)
+msgid "hibernate.query.substitutions"
+msgstr ""
+
+#: configuration.xml:985(literal)
+msgid "hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC"
+msgstr ""
+
+#: configuration.xml:980(entry)
+msgid "Mapping from tokens in Hibernate queries to SQL tokens (tokens might be function or literal names, for example). <placeholder-1/>"
+msgstr ""
+
+#: configuration.xml:991(literal)
+msgid "hibernate.hbm2ddl.auto"
+msgstr ""
+
+#: configuration.xml:996(literal)
+msgid "create-drop"
+msgstr ""
+
+#: configuration.xml:999(para)
+msgid "<emphasis role=\"strong\">eg.</emphasis><literal>validate</literal> | <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+msgstr ""
+
+#: configuration.xml:993(entry)
+msgid "Automatically validate or export schema DDL to the database when the <placeholder-1/> is created. With <placeholder-2/>, the database schema will be dropped when the <placeholder-3/> is closed explicitly. <placeholder-4/>"
+msgstr ""
+
+#: configuration.xml:1008(literal)
+msgid "hibernate.cglib.use_reflection_optimizer"
+msgstr ""
+
+#: configuration.xml:1014(literal)
+msgid "hibernate.cfg.xml"
+msgstr ""
+
+#: configuration.xml:1010(entry)
+msgid "Enables use of CGLIB instead of runtime reflection (System-level property). Reflection can sometimes be useful when troubleshooting, note that Hibernate always requires CGLIB even if you turn off the optimizer. You can not set this property in <placeholder-1/>. <placeholder-2/>"
+msgstr ""
+
+#: configuration.xml:1026(title)
+msgid "SQL Dialects"
+msgstr ""
+
+#: configuration.xml:1028(para)
+msgid "You should always set the <literal>hibernate.dialect</literal> property to the correct <literal>org.hibernate.dialect.Dialect</literal> subclass for your database. If you specify a dialect, Hibernate will use sensible defaults for some of the other properties listed above, saving you the effort of specifying them manually."
+msgstr ""
+
+#: configuration.xml:1036(title)
+msgid "Hibernate SQL Dialects (<literal>hibernate.dialect</literal>)"
+msgstr ""
+
+#: configuration.xml:1044(entry)
+msgid "RDBMS"
+msgstr ""
+
+#: configuration.xml:1050(entry)
+msgid "DB2"
+msgstr ""
+
+#: configuration.xml:1050(literal)
+msgid "org.hibernate.dialect.DB2Dialect"
+msgstr ""
+
+#: configuration.xml:1053(entry)
+msgid "DB2 AS/400"
+msgstr ""
+
+#: configuration.xml:1053(literal)
+msgid "org.hibernate.dialect.DB2400Dialect"
+msgstr ""
+
+#: configuration.xml:1056(entry)
+msgid "DB2 OS390"
+msgstr ""
+
+#: configuration.xml:1056(literal)
+msgid "org.hibernate.dialect.DB2390Dialect"
+msgstr ""
+
+#: configuration.xml:1059(entry)
+msgid "PostgreSQL"
+msgstr ""
+
+#: configuration.xml:1059(literal)
+msgid "org.hibernate.dialect.PostgreSQLDialect"
+msgstr ""
+
+#: configuration.xml:1062(entry)
+msgid "MySQL"
+msgstr ""
+
+#: configuration.xml:1062(literal)
+msgid "org.hibernate.dialect.MySQLDialect"
+msgstr ""
+
+#: configuration.xml:1065(entry)
+msgid "MySQL with InnoDB"
+msgstr ""
+
+#: configuration.xml:1065(literal)
+msgid "org.hibernate.dialect.MySQLInnoDBDialect"
+msgstr ""
+
+#: configuration.xml:1068(entry)
+msgid "MySQL with MyISAM"
+msgstr ""
+
+#: configuration.xml:1068(literal)
+msgid "org.hibernate.dialect.MySQLMyISAMDialect"
+msgstr ""
+
+#: configuration.xml:1071(entry)
+msgid "Oracle (any version)"
+msgstr ""
+
+#: configuration.xml:1071(literal)
+msgid "org.hibernate.dialect.OracleDialect"
+msgstr ""
+
+#: configuration.xml:1074(entry)
+msgid "Oracle 9i/10g"
+msgstr ""
+
+#: configuration.xml:1074(literal)
+msgid "org.hibernate.dialect.Oracle9Dialect"
+msgstr ""
+
+#: configuration.xml:1077(entry)
+msgid "Sybase"
+msgstr ""
+
+#: configuration.xml:1077(literal)
+msgid "org.hibernate.dialect.SybaseDialect"
+msgstr ""
+
+#: configuration.xml:1080(entry)
+msgid "Sybase Anywhere"
+msgstr ""
+
+#: configuration.xml:1080(literal)
+msgid "org.hibernate.dialect.SybaseAnywhereDialect"
+msgstr ""
+
+#: configuration.xml:1083(entry)
+msgid "Microsoft SQL Server"
+msgstr ""
+
+#: configuration.xml:1083(literal)
+msgid "org.hibernate.dialect.SQLServerDialect"
+msgstr ""
+
+#: configuration.xml:1086(entry)
+msgid "SAP DB"
+msgstr ""
+
+#: configuration.xml:1086(literal)
+msgid "org.hibernate.dialect.SAPDBDialect"
+msgstr ""
+
+#: configuration.xml:1089(entry)
+msgid "Informix"
+msgstr ""
+
+#: configuration.xml:1089(literal)
+msgid "org.hibernate.dialect.InformixDialect"
+msgstr ""
+
+#: configuration.xml:1092(entry)
+msgid "HypersonicSQL"
+msgstr ""
+
+#: configuration.xml:1092(literal)
+msgid "org.hibernate.dialect.HSQLDialect"
+msgstr ""
+
+#: configuration.xml:1095(entry)
+msgid "Ingres"
+msgstr ""
+
+#: configuration.xml:1095(literal)
+msgid "org.hibernate.dialect.IngresDialect"
+msgstr ""
+
+#: configuration.xml:1098(entry)
+msgid "Progress"
+msgstr ""
+
+#: configuration.xml:1098(literal)
+msgid "org.hibernate.dialect.ProgressDialect"
+msgstr ""
+
+#: configuration.xml:1101(entry)
+msgid "Mckoi SQL"
+msgstr ""
+
+#: configuration.xml:1101(literal)
+msgid "org.hibernate.dialect.MckoiDialect"
+msgstr ""
+
+#: configuration.xml:1104(entry)
+msgid "Interbase"
+msgstr ""
+
+#: configuration.xml:1104(literal)
+msgid "org.hibernate.dialect.InterbaseDialect"
+msgstr ""
+
+#: configuration.xml:1107(entry)
+msgid "Pointbase"
+msgstr ""
+
+#: configuration.xml:1107(literal)
+msgid "org.hibernate.dialect.PointbaseDialect"
+msgstr ""
+
+#: configuration.xml:1110(entry)
+msgid "FrontBase"
+msgstr ""
+
+#: configuration.xml:1110(literal)
+msgid "org.hibernate.dialect.FrontbaseDialect"
+msgstr ""
+
+#: configuration.xml:1113(entry)
+msgid "Firebird"
+msgstr ""
+
+#: configuration.xml:1113(literal)
+msgid "org.hibernate.dialect.FirebirdDialect"
+msgstr ""
+
+#: configuration.xml:1122(title)
+msgid "Outer Join Fetching"
+msgstr ""
+
+#: configuration.xml:1124(para)
+msgid "If your database supports ANSI, Oracle or Sybase style outer joins, <emphasis>outer join fetching</emphasis> will often increase performance by limiting the number of round trips to and from the database (at the cost of possibly more work performed by the database itself). Outer join fetching allows a whole graph of objects connected by many-to-one, one-to-many, many-to-many and one-to-one associations to be retrieved in a single SQL <literal>SELECT</literal>."
+msgstr ""
+
+#: configuration.xml:1133(para)
+msgid "Outer join fetching may be disabled <emphasis>globally</emphasis> by setting the property <literal>hibernate.max_fetch_depth</literal> to <literal>0</literal>. A setting of <literal>1</literal> or higher enables outer join fetching for one-to-one and many-to-one associations which have been mapped with <literal>fetch=\"join\"</literal>."
+msgstr ""
+
+#: configuration.xml:1141(para)
+msgid "See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr ""
+
+#: configuration.xml:1148(title)
+msgid "Binary Streams"
+msgstr ""
+
+#: configuration.xml:1150(para)
+msgid "Oracle limits the size of <literal>byte</literal> arrays that may be passed to/from its JDBC driver. If you wish to use large instances of <literal>binary</literal> or <literal>serializable</literal> type, you should enable <literal>hibernate.jdbc.use_streams_for_binary</literal>. <emphasis>This is a system-level setting only.</emphasis>"
+msgstr ""
+
+#: configuration.xml:1161(title)
+msgid "Second-level and query cache"
+msgstr ""
+
+#: configuration.xml:1163(para)
+msgid "The properties prefixed by <literal>hibernate.cache</literal> allow you to use a process or cluster scoped second-level cache system with Hibernate. See the <xref linkend=\"performance-cache\"/> for more details."
+msgstr ""
+
+#: configuration.xml:1173(title)
+msgid "Query Language Substitution"
+msgstr ""
+
+#: configuration.xml:1175(para)
+msgid "You may define new Hibernate query tokens using <literal>hibernate.query.substitutions</literal>. For example:"
+msgstr ""
+
+#: configuration.xml:1180(programlisting)
+#, no-wrap
+msgid "hibernate.query.substitutions true=1, false=0"
+msgstr ""
+
+#: configuration.xml:1182(para)
+msgid "would cause the tokens <literal>true</literal> and <literal>false</literal> to be translated to integer literals in the generated SQL."
+msgstr ""
+
+#: configuration.xml:1187(programlisting)
+#, no-wrap
+msgid "hibernate.query.substitutions toLowercase=LOWER"
+msgstr ""
+
+#: configuration.xml:1189(para)
+msgid "would allow you to rename the SQL <literal>LOWER</literal> function."
+msgstr ""
+
+#: configuration.xml:1196(title)
+msgid "Hibernate statistics"
+msgstr ""
+
+#: configuration.xml:1198(para)
+msgid "If you enable <literal>hibernate.generate_statistics</literal>, Hibernate will expose a number of metrics that are useful when tuning a running system via <literal>SessionFactory.getStatistics()</literal>. Hibernate can even be configured to expose these statistics via JMX. Read the Javadoc of the interfaces in <literal>org.hibernate.stats</literal> for more information."
+msgstr ""
+
+#: configuration.xml:1210(title)
+msgid "Logging"
+msgstr ""
+
+#: configuration.xml:1212(para)
+msgid "Hibernate logs various events using Apache commons-logging."
+msgstr ""
+
+#: configuration.xml:1216(para)
+msgid "The commons-logging service will direct output to either Apache Log4j (if you include <literal>log4j.jar</literal> in your classpath) or JDK1.4 logging (if running under JDK1.4 or above). You may download Log4j from <literal>http://jakarta.apache.org</literal>. To use Log4j you will need to place a <literal>log4j.properties</literal> file in your classpath, an example properties file is distributed with Hibernate in the <literal>src/</literal> directory."
+msgstr ""
+
+#: configuration.xml:1226(para)
+msgid "We strongly recommend that you familiarize yourself with Hibernate's log messages. A lot of work has been put into making the Hibernate log as detailed as possible, without making it unreadable. It is an essential troubleshooting device. The most interesting log categories are the following:"
+msgstr ""
+
+#: configuration.xml:1235(title)
+msgid "Hibernate Log Categories"
+msgstr ""
+
+#: configuration.xml:1241(entry)
+msgid "Category"
+msgstr ""
+
+#: configuration.xml:1242(entry)
+msgid "Function"
+msgstr ""
+
+#: configuration.xml:1248(entry)
+msgid "Log all SQL DML statements as they are executed"
+msgstr ""
+
+#: configuration.xml:1251(literal)
+msgid "org.hibernate.type"
+msgstr ""
+
+#: configuration.xml:1252(entry)
+msgid "Log all JDBC parameters"
+msgstr ""
+
+#: configuration.xml:1255(literal)
+msgid "org.hibernate.tool.hbm2ddl"
+msgstr ""
+
+#: configuration.xml:1256(entry)
+msgid "Log all SQL DDL statements as they are executed"
+msgstr ""
+
+#: configuration.xml:1259(literal)
+msgid "org.hibernate.pretty"
+msgstr ""
+
+#: configuration.xml:1260(entry)
+msgid "Log the state of all entities (max 20 entities) associated with the session at flush time"
+msgstr ""
+
+#: configuration.xml:1266(literal)
+msgid "org.hibernate.cache"
+msgstr ""
+
+#: configuration.xml:1267(entry)
+msgid "Log all second-level cache activity"
+msgstr ""
+
+#: configuration.xml:1270(literal)
+msgid "org.hibernate.transaction"
+msgstr ""
+
+#: configuration.xml:1271(entry)
+msgid "Log transaction related activity"
+msgstr ""
+
+#: configuration.xml:1274(literal)
+msgid "org.hibernate.jdbc"
+msgstr ""
+
+#: configuration.xml:1275(entry)
+msgid "Log all JDBC resource acquisition"
+msgstr ""
+
+#: configuration.xml:1278(literal)
+msgid "org.hibernate.hql.ast.AST"
+msgstr ""
+
+#: configuration.xml:1279(entry)
+msgid "Log HQL and SQL ASTs during query parsing"
+msgstr ""
+
+#: configuration.xml:1284(literal)
+msgid "org.hibernate.secure"
+msgstr ""
+
+#: configuration.xml:1285(entry)
+msgid "Log all JAAS authorization requests"
+msgstr ""
+
+#: configuration.xml:1288(literal)
+msgid "org.hibernate"
+msgstr ""
+
+#: configuration.xml:1289(entry)
+msgid "Log everything (a lot of information, but very useful for troubleshooting)"
+msgstr ""
+
+#: configuration.xml:1298(para)
+msgid "When developing applications with Hibernate, you should almost always work with <literal>debug</literal> enabled for the category <literal>org.hibernate.SQL</literal>, or, alternatively, the property <literal>hibernate.show_sql</literal> enabled."
+msgstr ""
+
+#: configuration.xml:1308(title)
+msgid "Implementing a <literal>NamingStrategy</literal>"
+msgstr ""
+
+#: configuration.xml:1310(para)
+msgid "The interface <literal>org.hibernate.cfg.NamingStrategy</literal> allows you to specify a \"naming standard\" for database objects and schema elements."
+msgstr ""
+
+#: configuration.xml:1315(para)
+msgid "You may provide rules for automatically generating database identifiers from Java identifiers or for processing \"logical\" column and table names given in the mapping file into \"physical\" table and column names. This feature helps reduce the verbosity of the mapping document, eliminating repetitive noise (<literal>TBL_</literal> prefixes, for example). The default strategy used by Hibernate is quite minimal."
+msgstr ""
+
+#: configuration.xml:1324(para)
+msgid "You may specify a different strategy by calling <literal>Configuration.setNamingStrategy()</literal> before adding mappings:"
+msgstr ""
+
+#: configuration.xml:1335(para)
+msgid "<literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> is a built-in strategy that might be a useful starting point for some applications."
+msgstr ""
+
+#: configuration.xml:1343(title)
+msgid "XML configuration file"
+msgstr ""
+
+#: configuration.xml:1345(para)
+msgid "An alternative approach to configuration is to specify a full configuration in a file named <literal>hibernate.cfg.xml</literal>. This file can be used as a replacement for the <literal>hibernate.properties</literal> file or, if both are present, to override properties."
+msgstr ""
+
+#: configuration.xml:1352(para)
+msgid "The XML configuration file is by default expected to be in the root o your <literal>CLASSPATH</literal>. Here is an example:"
+msgstr ""
+
+#: configuration.xml:1390(para)
+msgid "As you can see, the advantage of this approach is the externalization of the mapping file names to configuration. The <literal>hibernate.cfg.xml</literal> is also more convenient once you have to tune the Hibernate cache. Note that is your choice to use either <literal>hibernate.properties</literal> or <literal>hibernate.cfg.xml</literal>, both are equivalent, except for the above mentioned benefits of using the XML syntax."
+msgstr ""
+
+#: configuration.xml:1399(para)
+msgid "With the XML configuration, starting Hibernate is then as simple as"
+msgstr ""
+
+#: configuration.xml:1405(para)
+msgid "You can pick a different XML configuration file using"
+msgstr ""
+
+#: configuration.xml:1416(title)
+msgid "J2EE Application Server integration"
+msgstr ""
+
+#: configuration.xml:1418(para)
+msgid "Hibernate has the following integration points for J2EE infrastructure:"
+msgstr ""
+
+#: configuration.xml:1424(para)
+msgid "<emphasis>Container-managed datasources</emphasis>: Hibernate can use JDBC connections managed by the container and provided through JNDI. Usually, a JTA compatible <literal>TransactionManager</literal> and a <literal>ResourceManager</literal> take care of transaction management (CMT), esp. distributed transaction handling across several datasources. You may of course also demarcate transaction boundaries programmatically (BMT) or you might want to use the optional Hibernate <literal>Transaction</literal> API for this to keep your code portable."
+msgstr ""
+
+#: configuration.xml:1439(para)
+msgid "<emphasis>Automatic JNDI binding</emphasis>: Hibernate can bind its <literal>SessionFactory</literal> to JNDI after startup."
+msgstr ""
+
+#: configuration.xml:1448(para)
+msgid "<emphasis>JTA Session binding:</emphasis> The Hibernate <literal>Session</literal> may be automatically bound to the scope of JTA transactions. Simply lookup the <literal>SessionFactory</literal> from JNDI and get the current <literal>Session</literal>. Let Hibernate take care of flushing and closing the <literal>Session</literal> when your JTA transaction completes. Transaction demarcation is either declarative (CMT) or programmatic (BMT/UserTransaction)."
+msgstr ""
+
+#: configuration.xml:1461(para)
+msgid "<emphasis>JMX deployment:</emphasis> If you have a JMX capable application server (e.g. JBoss AS), you can chose to deploy Hibernate as a managed MBean. This saves you the one line startup code to build your <literal>SessionFactory</literal> from a <literal>Configuration</literal>. The container will startup your <literal>HibernateService</literal>, and ideally also take care of service dependencies (Datasource has to be available before Hibernate starts, etc)."
+msgstr ""
+
+#: configuration.xml:1472(para)
+msgid "Depending on your environment, you might have to set the configuration option <literal>hibernate.connection.aggressive_release</literal> to true if your application server shows \"connection containment\" exceptions."
+msgstr ""
+
+#: configuration.xml:1479(title)
+msgid "Transaction strategy configuration"
+msgstr ""
+
+#: configuration.xml:1481(para)
+msgid "The Hibernate <literal>Session</literal> API is independent of any transaction demarcation system in your architecture. If you let Hibernate use JDBC directly, through a connection pool, you may begin and end your transactions by calling the JDBC API. If you run in a J2EE application server, you might want to use bean-managed transactions and call the JTA API and <literal>UserTransaction</literal> when needed."
+msgstr ""
+
+#: configuration.xml:1489(para)
+msgid "To keep your code portable between these two (and other) environments we recommend the optional Hibernate <literal>Transaction</literal> API, which wraps and hides the underlying system. You have to specify a factory class for <literal>Transaction</literal> instances by setting the Hibernate configuration property <literal>hibernate.transaction.factory_class</literal>."
+msgstr ""
+
+#: configuration.xml:1496(para)
+msgid "There are three standard (built-in) choices:"
+msgstr ""
+
+#: configuration.xml:1502(literal)
+msgid "org.hibernate.transaction.JDBCTransactionFactory"
+msgstr ""
+
+#: configuration.xml:1504(para)
+msgid "delegates to database (JDBC) transactions (default)"
+msgstr ""
+
+#: configuration.xml:1508(literal)
+msgid "org.hibernate.transaction.JTATransactionFactory"
+msgstr ""
+
+#: configuration.xml:1510(para)
+msgid "delegates to container-managed transaction if an existing transaction is underway in this context (e.g. EJB session bean method), otherwise a new transaction is started and bean-managed transaction are used."
+msgstr ""
+
+#: configuration.xml:1518(literal)
+msgid "org.hibernate.transaction.CMTTransactionFactory"
+msgstr ""
+
+#: configuration.xml:1520(para)
+msgid "delegates to container-managed JTA transactions"
+msgstr ""
+
+#: configuration.xml:1525(para)
+msgid "You may also define your own transaction strategies (for a CORBA transaction service, for example)."
+msgstr ""
+
+#: configuration.xml:1530(para)
+msgid "Some features in Hibernate (i.e. the second level cache, Contextual Sessions with JTA, etc.) require access to the JTA <literal>TransactionManager</literal> in a managed environment. In an application server you have to specify how Hibernate should obtain a reference to the <literal>TransactionManager</literal>, since J2EE does not standardize a single mechanism:"
+msgstr ""
+
+#: configuration.xml:1538(title)
+msgid "JTA TransactionManagers"
+msgstr ""
+
+#: configuration.xml:1544(entry)
+msgid "Transaction Factory"
+msgstr ""
+
+#: configuration.xml:1545(entry)
+msgid "Application Server"
+msgstr ""
+
+#: configuration.xml:1550(literal)
+msgid "org.hibernate.transaction.JBossTransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:1551(entry)
+msgid "JBoss"
+msgstr ""
+
+#: configuration.xml:1554(literal)
+msgid "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:1555(entry)
+msgid "Weblogic"
+msgstr ""
+
+#: configuration.xml:1558(literal)
+msgid "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:1559(entry)
+msgid "WebSphere"
+msgstr ""
+
+#: configuration.xml:1562(literal)
+msgid "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+msgstr ""
+
+#: configuration.xml:1563(entry)
+msgid "WebSphere 6"
+msgstr ""
+
+#: configuration.xml:1566(literal)
+msgid "org.hibernate.transaction.OrionTransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:1567(entry)
+msgid "Orion"
+msgstr ""
+
+#: configuration.xml:1570(literal)
+msgid "org.hibernate.transaction.ResinTransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:1571(entry)
+msgid "Resin"
+msgstr ""
+
+#: configuration.xml:1574(literal)
+msgid "org.hibernate.transaction.JOTMTransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:1575(entry)
+msgid "JOTM"
+msgstr ""
+
+#: configuration.xml:1578(literal)
+msgid "org.hibernate.transaction.JOnASTransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:1579(entry)
+msgid "JOnAS"
+msgstr ""
+
+#: configuration.xml:1582(literal)
+msgid "org.hibernate.transaction.JRun4TransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:1583(entry)
+msgid "JRun4"
+msgstr ""
+
+#: configuration.xml:1586(literal)
+msgid "org.hibernate.transaction.BESTransactionManagerLookup"
+msgstr ""
+
+#: configuration.xml:1587(entry)
+msgid "Borland ES"
+msgstr ""
+
+#: configuration.xml:1596(title)
+msgid "JNDI-bound <literal>SessionFactory</literal>"
+msgstr ""
+
+#: configuration.xml:1598(para)
+msgid "A JNDI bound Hibernate <literal>SessionFactory</literal> can simplify the lookup of the factory and the creation of new <literal>Session</literal>s. Note that this is not related to a JNDI bound <literal>Datasource</literal>, both simply use the same registry!"
+msgstr ""
+
+#: configuration.xml:1605(para)
+msgid "If you wish to have the <literal>SessionFactory</literal> bound to a JNDI namespace, specify a name (eg. <literal>java:hibernate/SessionFactory</literal>) using the property <literal>hibernate.session_factory_name</literal>. If this property is omitted, the <literal>SessionFactory</literal> will not be bound to JNDI. (This is especially useful in environments with a read-only JNDI default implementation, e.g. Tomcat.)"
+msgstr ""
+
+#: configuration.xml:1613(para)
+msgid "When binding the <literal>SessionFactory</literal> to JNDI, Hibernate will use the values of <literal>hibernate.jndi.url</literal>, <literal>hibernate.jndi.class</literal> to instantiate an initial context. If they are not specified, the default <literal>InitialContext</literal> will be used."
+msgstr ""
+
+#: configuration.xml:1620(para)
+msgid "Hibernate will automatically place the <literal>SessionFactory</literal> in JNDI after you call <literal>cfg.buildSessionFactory()</literal>. This means you will at least have this call in some startup code (or utility class) in your application, unless you use JMX deployment with the <literal>HibernateService</literal> (discussed later)."
+msgstr ""
+
+#: configuration.xml:1627(para)
+msgid "If you use a JNDI <literal>SessionFactory</literal>, an EJB or any other class may obtain the <literal>SessionFactory</literal> using a JNDI lookup."
+msgstr ""
+
+#: configuration.xml:1632(para)
+msgid "We recommend that you bind the <literal>SessionFactory</literal> to JNDI in a managed environment and use a <literal>static</literal> singleton otherwise. To shield your application code from these details, we also recommend to hide the actual lookup code for a <literal>SessionFactory</literal> in a helper class, such as <literal>HibernateUtil.getSessionFactory()</literal>. Note that such a class is also a convenient way to startup Hibernate—see chapter 1."
+msgstr ""
+
+#: configuration.xml:1644(title)
+msgid "Current Session context management with JTA"
+msgstr ""
+
+#: configuration.xml:1646(para)
+msgid "The easiest way to handle <literal>Session</literal>s and transactions is Hibernates automatic \"current\" <literal>Session</literal> management. See the discussion of <xref linkend=\"architecture-current-session\">current sessions</xref>. Using the <literal>\"jta\"</literal> session context, if there is no Hibernate <literal>Session</literal> associated with the current JTA transaction, one will be started and associated with that JTA transaction the first time you call <literal>sessionFactory.getCurrentSession()</literal>. The <literal>Session</literal>s retrieved via <literal>getCurrentSession()</literal> in <literal>\"jta\"</literal> context will be set to automatically flush before the transaction completes, close after the transaction completes, and aggressively release JDBC connections after each statement. This allows the <literal>Session</literal>s to be managed by the life cycle of the JTA transaction to which it is associated, keeping user code clean of su!
ch management concerns. Your code can either use JTA programmatically through <literal>UserTransaction</literal>, or (recommended for portable code) use the Hibernate <literal>Transaction</literal> API to set transaction boundaries. If you run in an EJB container, declarative transaction demarcation with CMT is preferred."
+msgstr ""
+
+#: configuration.xml:1669(title)
+msgid "JMX deployment"
+msgstr ""
+
+#: configuration.xml:1671(para)
+msgid "The line <literal>cfg.buildSessionFactory()</literal> still has to be executed somewhere to get a <literal>SessionFactory</literal> into JNDI. You can do this either in a <literal>static</literal> initializer block (like the one in <literal>HibernateUtil</literal>) or you deploy Hibernate as a <emphasis>managed service</emphasis>."
+msgstr ""
+
+#: configuration.xml:1679(para)
+msgid "Hibernate is distributed with <literal>org.hibernate.jmx.HibernateService</literal> for deployment on an application server with JMX capabilities, such as JBoss AS. The actual deployment and configuration is vendor specific. Here is an example <literal>jboss-service.xml</literal> for JBoss 4.0.x:"
+msgstr ""
+
+#: configuration.xml:1729(para)
+msgid "This file is deployed in a directory called <literal>META-INF</literal> and packaged in a JAR file with the extension <literal>.sar</literal> (service archive). You also need to package Hibernate, its required third-party libraries, your compiled persistent classes, as well as your mapping files in the same archive. Your enterprise beans (usually session beans) may be kept in their own JAR file, but you may include this EJB JAR file in the main service archive to get a single (hot-)deployable unit. Consult the JBoss AS documentation for more information about JMX service and EJB deployment."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: configuration.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/events.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/events.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/events.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,108 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:31-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: events.xml:5(title)
+msgid "Interceptors and events"
+msgstr ""
+
+#: events.xml:7(para)
+msgid "It is often useful for the application to react to certain events that occur inside Hibernate. This allows implementation of certain kinds of generic functionality, and extension of Hibernate functionality."
+msgstr ""
+
+#: events.xml:14(title)
+msgid "Interceptors"
+msgstr ""
+
+#: events.xml:16(para)
+msgid "The <literal>Interceptor</literal> interface provides callbacks from the session to the application allowing the application to inspect and/or manipulate properties of a persistent object before it is saved, updated, deleted or loaded. One possible use for this is to track auditing information. For example, the following <literal>Interceptor</literal> automatically sets the <literal>createTimestamp</literal> when an <literal>Auditable</literal> is created and updates the <literal>lastUpdateTimestamp</literal> property when an <literal>Auditable</literal> is updated."
+msgstr ""
+
+#: events.xml:27(para)
+msgid "You may either implement <literal>Interceptor</literal> directly or (better) extend <literal>EmptyInterceptor</literal>."
+msgstr ""
+
+#: events.xml:115(para)
+msgid "Interceptors come in two flavors: <literal>Session</literal>-scoped and <literal>SessionFactory</literal>-scoped."
+msgstr ""
+
+#: events.xml:120(para)
+msgid "A <literal>Session</literal>-scoped interceptor is specified when a session is opened using one of the overloaded SessionFactory.openSession() methods accepting an <literal>Interceptor</literal>."
+msgstr ""
+
+#: events.xml:128(para)
+msgid "A <literal>SessionFactory</literal>-scoped interceptor is registered with the <literal>Configuration</literal> object prior to building the <literal>SessionFactory</literal>. In this case, the supplied interceptor will be applied to all sessions opened from that <literal>SessionFactory</literal>; this is true unless a session is opened explicitly specifying the interceptor to use. <literal>SessionFactory</literal>-scoped interceptors must be thread safe, taking care to not store session-specific state since multiple sessions will use this interceptor (potentially) concurrently."
+msgstr ""
+
+#: events.xml:142(title)
+msgid "Event system"
+msgstr ""
+
+#: events.xml:144(para)
+msgid "If you have to react to particular events in your persistence layer, you may also use the Hibernate3 <emphasis>event</emphasis> architecture. The event system can be used in addition or as a replacement for interceptors."
+msgstr ""
+
+#: events.xml:150(para)
+msgid "Essentially all of the methods of the <literal>Session</literal> interface correlate to an event. You have a <literal>LoadEvent</literal>, a <literal>FlushEvent</literal>, etc (consult the XML configuration-file DTD or the <literal>org.hibernate.event</literal> package for the full list of defined event types). When a request is made of one of these methods, the Hibernate <literal>Session</literal> generates an appropriate event and passes it to the configured event listeners for that type. Out-of-the-box, these listeners implement the same processing in which those methods always resulted. However, you are free to implement a customization of one of the listener interfaces (i.e., the <literal>LoadEvent</literal> is processed by the registered implemenation of the <literal>LoadEventListener</literal> interface), in which case their implementation would be responsible for processing any <literal>load()</literal> requests made of the <literal>Session</literal>."
+msgstr ""
+
+#: events.xml:165(para)
+msgid "The listeners should be considered effectively singletons; meaning, they are shared between requests, and thus should not save any state as instance variables."
+msgstr ""
+
+#: events.xml:170(para)
+msgid "A custom listener should implement the appropriate interface for the event it wants to process and/or extend one of the convenience base classes (or even the default event listeners used by Hibernate out-of-the-box as these are declared non-final for this purpose). Custom listeners can either be registered programmatically through the <literal>Configuration</literal> object, or specified in the Hibernate configuration XML (declarative configuration through the properties file is not supported). Here's an example of a custom load event listener:"
+msgstr ""
+
+#: events.xml:190(para)
+msgid "You also need a configuration entry telling Hibernate to use the listener in addition to the default listener:"
+msgstr ""
+
+#: events.xml:205(para)
+msgid "Instead, you may register it programmatically:"
+msgstr ""
+
+#: events.xml:213(para)
+msgid "Listeners registered declaratively cannot share instances. If the same class name is used in multiple <literal><listener/></literal> elements, each reference will result in a separate instance of that class. If you need the capability to share listener instances between listener types you must use the programmatic registration approach."
+msgstr ""
+
+#: events.xml:221(para)
+msgid "Why implement an interface and define the specific type during configuration? Well, a listener implementation could implement multiple event listener interfaces. Having the type additionally defined during registration makes it easier to turn custom listeners on or off during configuration."
+msgstr ""
+
+#: events.xml:231(title)
+msgid "Hibernate declarative security"
+msgstr ""
+
+#: events.xml:232(para)
+msgid "Usually, declarative security in Hibernate applications is managed in a session facade layer. Now, Hibernate3 allows certain actions to be permissioned via JACC, and authorized via JAAS. This is optional functionality built on top of the event architecture."
+msgstr ""
+
+#: events.xml:238(para)
+msgid "First, you must configure the appropriate event listeners, to enable the use of JAAS authorization."
+msgstr ""
+
+#: events.xml:248(para)
+msgid "Note that <literal><listener type=\"...\" class=\"...\"/></literal> is just a shorthand for <literal><event type=\"...\"><listener class=\"...\"/></event></literal> when there is exactly one listener for a particular event type."
+msgstr ""
+
+#: events.xml:254(para)
+msgid "Next, still in <literal>hibernate.cfg.xml</literal>, bind the permissions to roles:"
+msgstr ""
+
+#: events.xml:261(para)
+msgid "The role names are the roles understood by your JACC provider."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: events.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/example_mappings.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/example_mappings.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/example_mappings.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,122 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:31-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: example_mappings.xml:39(None) example_mappings.xml:42(None)
+msgid "@@image: '../images/EmployerEmployee.png'; md5=51e3da273e772b7defc753746eb5223f"
+msgstr ""
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: example_mappings.xml:153(None) example_mappings.xml:156(None)
+msgid "@@image: '../images/AuthorWork.png'; md5=fdbc5f105890c04d206674e7df6af6cf"
+msgstr ""
+
+#. When image changes, this message will be marked fuzzy or untranslated for you.
+#. It doesn't matter what you translate it to: it's not used at all.
+#: example_mappings.xml:277(None) example_mappings.xml:280(None)
+msgid "@@image: '../images/CustomerOrderProduct.png'; md5=39dcb639a197684dc020904a3f9a4b3d"
+msgstr ""
+
+#: example_mappings.xml:20(title)
+msgid "Example: Various Mappings"
+msgstr ""
+
+#: example_mappings.xml:22(para)
+msgid "This chapters shows off some more complex association mappings."
+msgstr ""
+
+#: example_mappings.xml:27(title)
+msgid "Employer/Employee"
+msgstr ""
+
+#: example_mappings.xml:29(para)
+msgid "The following model of the relationship between <literal>Employer</literal> and <literal>Employee</literal> uses an actual entity class (<literal>Employment</literal>) to represent the association. This is done because there might be more than one period of employment for the same two parties. Components are used to model monetary values and employee names."
+msgstr ""
+
+#: example_mappings.xml:46(para)
+msgid "Heres a possible mapping document:"
+msgstr ""
+
+#: example_mappings.xml:99(para)
+msgid "And heres the table schema generated by <literal>SchemaExport</literal>."
+msgstr ""
+
+#: example_mappings.xml:140(title)
+msgid "Author/Work"
+msgstr ""
+
+#: example_mappings.xml:142(para)
+msgid "Consider the following model of the relationships between <literal>Work</literal>, <literal>Author</literal> and <literal>Person</literal>. We represent the relationship between <literal>Work</literal> and <literal>Author</literal> as a many-to-many association. We choose to represent the relationship between <literal>Author</literal> and <literal>Person</literal> as one-to-one association. Another possibility would be to have <literal>Author</literal> extend <literal>Person</literal>."
+msgstr ""
+
+#: example_mappings.xml:160(para)
+msgid "The following mapping document correctly represents these relationships:"
+msgstr ""
+
+#: example_mappings.xml:216(para)
+msgid "There are four tables in this mapping. <literal>works</literal>, <literal>authors</literal> and <literal>persons</literal> hold work, author and person data respectively. <literal>author_work</literal> is an association table linking authors to works. Heres the table schema, as generated by <literal>SchemaExport</literal>."
+msgstr ""
+
+#: example_mappings.xml:262(title)
+msgid "Customer/Order/Product"
+msgstr ""
+
+#: example_mappings.xml:264(para)
+msgid "Now consider a model of the relationships between <literal>Customer</literal>, <literal>Order</literal> and <literal>LineItem</literal> and <literal>Product</literal>. There is a one-to-many association between <literal>Customer</literal> and <literal>Order</literal>, but how should we represent <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal>? I've chosen to map <literal>LineItem</literal> as an association class representing the many-to-many association between <literal>Order</literal> and <literal>Product</literal>. In Hibernate, this is called a composite element."
+msgstr ""
+
+#: example_mappings.xml:284(para)
+msgid "The mapping document:"
+msgstr ""
+
+#: example_mappings.xml:326(para)
+msgid "<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> and <literal>products</literal> hold customer, order, order line item and product data respectively. <literal>line_items</literal> also acts as an association table linking orders with products."
+msgstr ""
+
+#: example_mappings.xml:370(title)
+msgid "Miscellaneous example mappings"
+msgstr ""
+
+#: example_mappings.xml:372(para)
+msgid "These examples are all taken from the Hibernate test suite. You will find many other useful example mappings there. Look in the <literal>test</literal> folder of the Hibernate distribution."
+msgstr ""
+
+#: example_mappings.xml:378(para)
+msgid "TODO: put words around this stuff"
+msgstr ""
+
+#: example_mappings.xml:381(title)
+msgid "\"Typed\" one-to-one association"
+msgstr ""
+
+#: example_mappings.xml:411(title)
+msgid "Composite key example"
+msgstr ""
+
+#: example_mappings.xml:528(title)
+msgid "Many-to-many with shared composite key attribute"
+msgstr ""
+
+#: example_mappings.xml:567(title)
+msgid "Content based discrimination"
+msgstr ""
+
+#: example_mappings.xml:621(title)
+msgid "Associations on alternate keys"
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: example_mappings.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/example_parentchild.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/example_parentchild.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/example_parentchild.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,168 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:31-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: example_parentchild.xml:5(title)
+msgid "Example: Parent/Child"
+msgstr ""
+
+#: example_parentchild.xml:7(para)
+msgid "One of the very first things that new users try to do with Hibernate is to model a parent / child type relationship. There are two different approaches to this. For various reasons the most convenient approach, especially for new users, is to model both <literal>Parent</literal> and <literal>Child</literal> as entity classes with a <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a <literal><composite-element></literal>.) Now, it turns out that default semantics of a one to many association (in Hibernate) are much less close to the usual semantics of a parent / child relationship than those of a composite element mapping. We will explain how to use a <emphasis>bidirectional one to many association with cascades</emphasis> to model a parent / child relationship efficiently and elegantly. It's not at all difficult!"
+msgstr ""
+
+#: example_parentchild.xml:21(title)
+msgid "A note about collections"
+msgstr ""
+
+#: example_parentchild.xml:23(para)
+msgid "Hibernate collections are considered to be a logical part of their owning entity; never of the contained entities. This is a crucial distinction! It has the following consequences:"
+msgstr ""
+
+#: example_parentchild.xml:30(para)
+msgid "When we remove / add an object from / to a collection, the version number of the collection owner is incremented."
+msgstr ""
+
+#: example_parentchild.xml:36(para)
+msgid "If an object that was removed from a collection is an instance of a value type (eg, a composite element), that object will cease to be persistent and its state will be completely removed from the database. Likewise, adding a value type instance to the collection will cause its state to be immediately persistent."
+msgstr ""
+
+#: example_parentchild.xml:44(para)
+msgid "On the other hand, if an entity is removed from a collection (a one-to-many or many-to-many association), it will not be deleted, by default. This behaviour is completely consistent - a change to the internal state of another entity should not cause the associated entity to vanish! Likewise, adding an entity to a collection does not cause that entity to become persistent, by default."
+msgstr ""
+
+#: example_parentchild.xml:54(para)
+msgid "Instead, the default behaviour is that adding an entity to a collection merely creates a link between the two entities, while removing it removes the link. This is very appropriate for all sorts of cases. Where it is not appropriate at all is the case of a parent / child relationship, where the life of the child is bound to the life cycle of the parent."
+msgstr ""
+
+#: example_parentchild.xml:64(title)
+msgid "Bidirectional one-to-many"
+msgstr ""
+
+#: example_parentchild.xml:66(para)
+msgid "Suppose we start with a simple <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>."
+msgstr ""
+
+#: example_parentchild.xml:76(para)
+msgid "If we were to execute the following code"
+msgstr ""
+
+#: example_parentchild.xml:86(para)
+msgid "Hibernate would issue two SQL statements:"
+msgstr ""
+
+#: example_parentchild.xml:92(para)
+msgid "an <literal>INSERT</literal> to create the record for <literal>c</literal>"
+msgstr ""
+
+#: example_parentchild.xml:95(para)
+msgid "an <literal>UPDATE</literal> to create the link from <literal>p</literal> to <literal>c</literal>"
+msgstr ""
+
+#: example_parentchild.xml:102(para)
+msgid "This is not only inefficient, but also violates any <literal>NOT NULL</literal> constraint on the <literal>parent_id</literal> column. We can fix the nullability constraint violation by specifying <literal>not-null=\"true\"</literal> in the collection mapping:"
+msgstr ""
+
+#: example_parentchild.xml:113(para)
+msgid "However, this is not the recommended solution."
+msgstr ""
+
+#: example_parentchild.xml:116(para)
+msgid "The underlying cause of this behaviour is that the link (the foreign key <literal>parent_id</literal>) from <literal>p</literal> to <literal>c</literal> is not considered part of the state of the <literal>Child</literal> object and is therefore not created in the <literal>INSERT</literal>. So the solution is to make the link part of the <literal>Child</literal> mapping."
+msgstr ""
+
+#: example_parentchild.xml:125(para)
+msgid "(We also need to add the <literal>parent</literal> property to the <literal>Child</literal> class.)"
+msgstr ""
+
+#: example_parentchild.xml:129(para)
+msgid "Now that the <literal>Child</literal> entity is managing the state of the link, we tell the collection not to update the link. We use the <literal>inverse</literal> attribute."
+msgstr ""
+
+#: example_parentchild.xml:139(para)
+msgid "The following code would be used to add a new <literal>Child</literal>"
+msgstr ""
+
+#: example_parentchild.xml:150(para)
+msgid "And now, only one SQL <literal>INSERT</literal> would be issued!"
+msgstr ""
+
+#: example_parentchild.xml:154(para)
+msgid "To tighten things up a bit, we could create an <literal>addChild()</literal> method of <literal>Parent</literal>."
+msgstr ""
+
+#: example_parentchild.xml:164(para)
+msgid "Now, the code to add a <literal>Child</literal> looks like"
+msgstr ""
+
+#: example_parentchild.xml:177(title)
+msgid "Cascading life cycle"
+msgstr ""
+
+#: example_parentchild.xml:179(para)
+msgid "The explicit call to <literal>save()</literal> is still annoying. We will address this by using cascades."
+msgstr ""
+
+#: example_parentchild.xml:189(para)
+msgid "This simplifies the code above to"
+msgstr ""
+
+#: example_parentchild.xml:198(para)
+msgid "Similarly, we don't need to iterate over the children when saving or deleting a <literal>Parent</literal>. The following removes <literal>p</literal> and all its children from the database."
+msgstr ""
+
+#: example_parentchild.xml:207(para)
+msgid "However, this code"
+msgstr ""
+
+#: example_parentchild.xml:217(para)
+msgid "will not remove <literal>c</literal> from the database; it will ony remove the link to <literal>p</literal> (and cause a <literal>NOT NULL</literal> constraint violation, in this case). You need to explicitly <literal>delete()</literal> the <literal>Child</literal>."
+msgstr ""
+
+#: example_parentchild.xml:229(para)
+msgid "Now, in our case, a <literal>Child</literal> can't really exist without its parent. So if we remove a <literal>Child</literal> from the collection, we really do want it to be deleted. For this, we must use <literal>cascade=\"all-delete-orphan\"</literal>."
+msgstr ""
+
+#: example_parentchild.xml:240(para)
+msgid "Note: even though the collection mapping specifies <literal>inverse=\"true\"</literal>, cascades are still processed by iterating the collection elements. So if you require that an object be saved, deleted or updated by cascade, you must add it to the collection. It is not enough to simply call <literal>setParent()</literal>."
+msgstr ""
+
+#: example_parentchild.xml:250(title)
+msgid "Cascades and <literal>unsaved-value</literal>"
+msgstr ""
+
+#: example_parentchild.xml:252(para)
+msgid "Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</literal>, made some changes in a UI action and wish to persist these changes in a new session by calling <literal>update()</literal>. The <literal>Parent</literal> will contain a collection of childen and, since cascading update is enabled, Hibernate needs to know which children are newly instantiated and which represent existing rows in the database. Lets assume that both <literal>Parent</literal> and <literal>Child</literal> have genenerated identifier properties of type <literal>Long</literal>. Hibernate will use the identifier and version/timestamp property value to determine which of the children are new. (See <xref linkend=\"objectstate-saveorupdate\"/>.) <emphasis>In Hibernate3, it is no longer necessary to specify an <literal>unsaved-value</literal> explicitly.</emphasis>"
+msgstr ""
+
+#: example_parentchild.xml:264(para)
+msgid "The following code will update <literal>parent</literal> and <literal>child</literal> and insert <literal>newChild</literal>."
+msgstr ""
+
+#: example_parentchild.xml:276(para)
+msgid "Well, that's all very well for the case of a generated identifier, but what about assigned identifiers and composite identifiers? This is more difficult, since Hibernate can't use the identifier property to distinguish between a newly instantiated object (with an identifier assigned by the user) and an object loaded in a previous session. In this case, Hibernate will either use the timestamp or version property, or will actually query the second-level cache or, worst case, the database, to see if the row exists."
+msgstr ""
+
+#: example_parentchild.xml:348(title)
+msgid "Conclusion"
+msgstr ""
+
+#: example_parentchild.xml:350(para)
+msgid "There is quite a bit to digest here and it might look confusing first time around. However, in practice, it all works out very nicely. Most Hibernate applications use the parent / child pattern in many places."
+msgstr ""
+
+#: example_parentchild.xml:355(para)
+msgid "We mentioned an alternative in the first paragraph. None of the above issues exist in the case of <literal><composite-element></literal> mappings, which have exactly the semantics of a parent / child relationship. Unfortunately, there are two big limitations to composite element classes: composite elements may not own collections, and they should not be the child of any entity other than the unique parent."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: example_parentchild.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/example_weblog.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/example_weblog.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/example_weblog.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,44 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:32-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: example_weblog.xml:5(title)
+msgid "Example: Weblog Application"
+msgstr ""
+
+#: example_weblog.xml:8(title)
+msgid "Persistent Classes"
+msgstr ""
+
+#: example_weblog.xml:10(para)
+msgid "The persistent classes represent a weblog, and an item posted in a weblog. They are to be modelled as a standard parent/child relationship, but we will use an ordered bag, instead of a set."
+msgstr ""
+
+#: example_weblog.xml:92(title)
+msgid "Hibernate Mappings"
+msgstr ""
+
+#: example_weblog.xml:94(para)
+msgid "The XML mappings should now be quite straightforward."
+msgstr ""
+
+#: example_weblog.xml:185(title)
+msgid "Hibernate Code"
+msgstr ""
+
+#: example_weblog.xml:187(para)
+msgid "The following class demonstrates some of the kinds of things we can do with these classes, using Hibernate."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: example_weblog.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/filters.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/filters.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/filters.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,80 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:32-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: filters.xml:5(title)
+msgid "Filtering data"
+msgstr ""
+
+#: filters.xml:7(para)
+msgid "Hibernate3 provides an innovative new approach to handling data with \"visibility\" rules. A <emphasis>Hibernate filter</emphasis> is a global, named, parameterized filter that may be enabled or disabled for a particular Hibernate session."
+msgstr ""
+
+#: filters.xml:14(title)
+msgid "Hibernate filters"
+msgstr ""
+
+#: filters.xml:16(para)
+msgid "Hibernate3 adds the ability to pre-define filter criteria and attach those filters at both a class and a collection level. A filter criteria is the ability to define a restriction clause very similiar to the existing \"where\" attribute available on the class and various collection elements. Except these filter conditions can be parameterized. The application can then make the decision at runtime whether given filters should be enabled and what their parameter values should be. Filters can be used like database views, but parameterized inside the application."
+msgstr ""
+
+#: filters.xml:26(para)
+msgid "In order to use filters, they must first be defined and then attached to the appropriate mapping elements. To define a filter, use the <literal><filter-def/></literal> element within a <literal><hibernate-mapping/></literal> element:"
+msgstr ""
+
+#: filters.xml:36(para)
+msgid "Then, this filter can be attached to a class:"
+msgstr ""
+
+#: filters.xml:45(para)
+msgid "or, to a collection:"
+msgstr ""
+
+#: filters.xml:53(para)
+msgid "or, even to both (or multiples of each) at the same time."
+msgstr ""
+
+#: filters.xml:57(para)
+msgid "The methods on <literal>Session</literal> are: <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, and <literal>disableFilter(String filterName)</literal>. By default, filters are <emphasis>not</emphasis> enabled for a given session; they must be explcitly enabled through use of the <literal>Session.enabledFilter()</literal> method, which returns an instance of the <literal>Filter</literal> interface. Using the simple filter defined above, this would look like:"
+msgstr ""
+
+#: filters.xml:68(para)
+msgid "Note that methods on the org.hibernate.Filter interface do allow the method-chaining common to much of Hibernate."
+msgstr ""
+
+#: filters.xml:72(para)
+msgid "A full example, using temporal data with an effective record date pattern:"
+msgstr ""
+
+#: filters.xml:104(para)
+msgid "Then, in order to ensure that you always get back currently effective records, simply enable the filter on the session prior to retrieving employee data:"
+msgstr ""
+
+#: filters.xml:116(para)
+msgid "In the HQL above, even though we only explicitly mentioned a salary constraint on the results, because of the enabled filter the query will return only currently active employees who have a salary greater than a million dollars."
+msgstr ""
+
+#: filters.xml:122(para)
+msgid "Note: if you plan on using filters with outer joining (either through HQL or load fetching) be careful of the direction of the condition expression. Its safest to set this up for left outer joining; in general, place the parameter first followed by the column name(s) after the operator."
+msgstr ""
+
+#: filters.xml:129(para)
+msgid "After being defined a filter might be attached to multiple entities and/or collections each with its own condition. That can be tedious when the conditions are the same each time. Thus <literal><filter-def/></literal> allows defining a default condition, either as an attribute or CDATA:"
+msgstr ""
+
+#: filters.xml:139(para)
+msgid "This default condition will then be used whenever the filter is attached to something without specifying a condition. Note that this means you can give a specific condition as part of the attachment of the filter which overrides the default condition in that particular case."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: filters.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/inheritance_mapping.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/inheritance_mapping.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/inheritance_mapping.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,280 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:32-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: inheritance_mapping.xml:5(title)
+msgid "Inheritance Mapping"
+msgstr ""
+
+#: inheritance_mapping.xml:8(title)
+msgid "The Three Strategies"
+msgstr ""
+
+#: inheritance_mapping.xml:10(para)
+msgid "Hibernate supports the three basic inheritance mapping strategies:"
+msgstr ""
+
+#: inheritance_mapping.xml:16(para)
+msgid "table per class hierarchy"
+msgstr ""
+
+#: inheritance_mapping.xml:21(para) inheritance_mapping.xml:456(entry)
+msgid "table per subclass"
+msgstr ""
+
+#: inheritance_mapping.xml:26(para)
+msgid "table per concrete class"
+msgstr ""
+
+#: inheritance_mapping.xml:32(para)
+msgid "In addition, Hibernate supports a fourth, slightly different kind of polymorphism:"
+msgstr ""
+
+#: inheritance_mapping.xml:39(para)
+msgid "implicit polymorphism"
+msgstr ""
+
+#: inheritance_mapping.xml:45(para)
+msgid "It is possible to use different mapping strategies for different branches of the same inheritance hierarchy, and then make use of implicit polymorphism to achieve polymorphism across the whole hierarchy. However, Hibernate does not support mixing <literal><subclass></literal>, and <literal><joined-subclass></literal> and <literal><union-subclass></literal> mappings under the same root <literal><class></literal> element. It is possible to mix together the table per hierarchy and table per subclass strategies, under the the same <literal><class></literal> element, by combining the <literal><subclass></literal> and <literal><join></literal> elements (see below)."
+msgstr ""
+
+#: inheritance_mapping.xml:59(para)
+msgid "It is possible to define <literal>subclass</literal>, <literal>union-subclass</literal>, and <literal>joined-subclass</literal> mappings in separate mapping documents, directly beneath <literal>hibernate-mapping</literal>. This allows you to extend a class hierachy just by adding a new mapping file. You must specify an <literal>extends</literal> attribute in the subclass mapping, naming a previously mapped superclass. Note: Previously this feature made the ordering of the mapping documents important. Since Hibernate3, the ordering of mapping files does not matter when using the extends keyword. The ordering inside a single mapping file still needs to be defined as superclasses before subclasses."
+msgstr ""
+
+#: inheritance_mapping.xml:79(title)
+msgid "Table per class hierarchy"
+msgstr ""
+
+#: inheritance_mapping.xml:81(para)
+msgid "Suppose we have an interface <literal>Payment</literal>, with implementors <literal>CreditCardPayment</literal>, <literal>CashPayment</literal>, <literal>ChequePayment</literal>. The table per hierarchy mapping would look like:"
+msgstr ""
+
+#: inheritance_mapping.xml:107(para)
+msgid "Exactly one table is required. There is one big limitation of this mapping strategy: columns declared by the subclasses, such as <literal>CCTYPE</literal>, may not have <literal>NOT NULL</literal> constraints."
+msgstr ""
+
+#: inheritance_mapping.xml:116(title)
+msgid "Table per subclass"
+msgstr ""
+
+#: inheritance_mapping.xml:118(para)
+msgid "A table per subclass mapping would look like:"
+msgstr ""
+
+#: inheritance_mapping.xml:143(para)
+msgid "Four tables are required. The three subclass tables have primary key associations to the superclass table (so the relational model is actually a one-to-one association)."
+msgstr ""
+
+#: inheritance_mapping.xml:152(title)
+msgid "Table per subclass, using a discriminator"
+msgstr ""
+
+#: inheritance_mapping.xml:154(para)
+msgid "Note that Hibernate's implementation of table per subclass requires no discriminator column. Other object/relational mappers use a different implementation of table per subclass which requires a type discriminator column in the superclass table. The approach taken by Hibernate is much more difficult to implement but arguably more correct from a relational point of view. If you would like to use a discriminator column with the table per subclass strategy, you may combine the use of <literal><subclass></literal> and <literal><join></literal>, as follow:"
+msgstr ""
+
+#: inheritance_mapping.xml:194(para)
+msgid "The optional <literal>fetch=\"select\"</literal> declaration tells Hibernate not to fetch the <literal>ChequePayment</literal> subclass data using an outer join when querying the superclass."
+msgstr ""
+
+#: inheritance_mapping.xml:203(title)
+msgid "Mixing table per class hierarchy with table per subclass"
+msgstr ""
+
+#: inheritance_mapping.xml:205(para)
+msgid "You may even mix the table per hierarchy and table per subclass strategies using this approach:"
+msgstr ""
+
+#: inheritance_mapping.xml:231(para)
+msgid "For any of these mapping strategies, a polymorphic association to the root <literal>Payment</literal> class is mapped using <literal><many-to-one></literal>."
+msgstr ""
+
+#: inheritance_mapping.xml:242(title)
+msgid "Table per concrete class"
+msgstr ""
+
+#: inheritance_mapping.xml:244(para)
+msgid "There are two ways we could go about mapping the table per concrete class strategy. The first is to use <literal><union-subclass></literal>."
+msgstr ""
+
+#: inheritance_mapping.xml:267(para)
+msgid "Three tables are involved for the subclasses. Each table defines columns for all properties of the class, including inherited properties."
+msgstr ""
+
+#: inheritance_mapping.xml:272(para)
+msgid "The limitation of this approach is that if a property is mapped on the superclass, the column name must be the same on all subclass tables. (We might relax this in a future release of Hibernate.) The identity generator strategy is not allowed in union subclass inheritance, indeed the primary key seed has to be shared accross all unioned subclasses of a hierarchy."
+msgstr ""
+
+#: inheritance_mapping.xml:281(para)
+msgid "If your superclass is abstract, map it with <literal>abstract=\"true\"</literal>. Of course, if it is not abstract, an additional table (defaults to <literal>PAYMENT</literal> in the example above) is needed to hold instances of the superclass."
+msgstr ""
+
+#: inheritance_mapping.xml:291(title)
+msgid "Table per concrete class, using implicit polymorphism"
+msgstr ""
+
+#: inheritance_mapping.xml:293(para)
+msgid "An alternative approach is to make use of implicit polymorphism:"
+msgstr ""
+
+#: inheritance_mapping.xml:321(para)
+msgid "Notice that nowhere do we mention the <literal>Payment</literal> interface explicitly. Also notice that properties of <literal>Payment</literal> are mapped in each of the subclasses. If you want to avoid duplication, consider using XML entities (e.g. <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal> in the <literal>DOCTYPE</literal> declartion and <literal>&allproperties;</literal> in the mapping)."
+msgstr ""
+
+#: inheritance_mapping.xml:331(para)
+msgid "The disadvantage of this approach is that Hibernate does not generate SQL <literal>UNION</literal>s when performing polymorphic queries."
+msgstr ""
+
+#: inheritance_mapping.xml:336(para)
+msgid "For this mapping strategy, a polymorphic association to <literal>Payment</literal> is usually mapped using <literal><any></literal>."
+msgstr ""
+
+#: inheritance_mapping.xml:352(title)
+msgid "Mixing implicit polymorphism with other inheritance mappings"
+msgstr ""
+
+#: inheritance_mapping.xml:354(para)
+msgid "There is one further thing to notice about this mapping. Since the subclasses are each mapped in their own <literal><class></literal> element (and since <literal>Payment</literal> is just an interface), each of the subclasses could easily be part of another inheritance hierarchy! (And you can still use polymorphic queries against the <literal>Payment</literal> interface.)"
+msgstr ""
+
+#: inheritance_mapping.xml:390(para)
+msgid "Once again, we don't mention <literal>Payment</literal> explicitly. If we execute a query against the <literal>Payment</literal> interface - for example, <literal>from Payment</literal> - Hibernate automatically returns instances of <literal>CreditCardPayment</literal> (and its subclasses, since they also implement <literal>Payment</literal>), <literal>CashPayment</literal> and <literal>ChequePayment</literal> but not instances of <literal>NonelectronicTransaction</literal>."
+msgstr ""
+
+#: inheritance_mapping.xml:405(title)
+msgid "Limitations"
+msgstr ""
+
+#: inheritance_mapping.xml:407(para)
+msgid "There are certain limitations to the \"implicit polymorphism\" approach to the table per concrete-class mapping strategy. There are somewhat less restrictive limitations to <literal><union-subclass></literal> mappings."
+msgstr ""
+
+#: inheritance_mapping.xml:414(para)
+msgid "The following table shows the limitations of table per concrete-class mappings, and of implicit polymorphism, in Hibernate."
+msgstr ""
+
+#: inheritance_mapping.xml:420(title)
+msgid "Features of inheritance mappings"
+msgstr ""
+
+#: inheritance_mapping.xml:432(entry)
+msgid "Inheritance strategy"
+msgstr ""
+
+#: inheritance_mapping.xml:433(entry)
+msgid "Polymorphic many-to-one"
+msgstr ""
+
+#: inheritance_mapping.xml:434(entry)
+msgid "Polymorphic one-to-one"
+msgstr ""
+
+#: inheritance_mapping.xml:435(entry)
+msgid "Polymorphic one-to-many"
+msgstr ""
+
+#: inheritance_mapping.xml:436(entry)
+msgid "Polymorphic many-to-many"
+msgstr ""
+
+#: inheritance_mapping.xml:437(literal)
+msgid "load()/get()"
+msgstr ""
+
+#: inheritance_mapping.xml:437(entry)
+msgid "Polymorphic <placeholder-1/>"
+msgstr ""
+
+#: inheritance_mapping.xml:438(entry)
+msgid "Polymorphic queries"
+msgstr ""
+
+#: inheritance_mapping.xml:439(entry)
+msgid "Polymorphic joins"
+msgstr ""
+
+#: inheritance_mapping.xml:440(entry)
+msgid "Outer join fetching"
+msgstr ""
+
+#: inheritance_mapping.xml:445(entry)
+msgid "table per class-hierarchy"
+msgstr ""
+
+#: inheritance_mapping.xml:446(literal) inheritance_mapping.xml:457(literal) inheritance_mapping.xml:468(literal)
+msgid "<many-to-one>"
+msgstr ""
+
+#: inheritance_mapping.xml:447(literal) inheritance_mapping.xml:458(literal) inheritance_mapping.xml:469(literal)
+msgid "<one-to-one>"
+msgstr ""
+
+#: inheritance_mapping.xml:448(literal) inheritance_mapping.xml:459(literal) inheritance_mapping.xml:470(literal)
+msgid "<one-to-many>"
+msgstr ""
+
+#: inheritance_mapping.xml:449(literal) inheritance_mapping.xml:460(literal) inheritance_mapping.xml:471(literal)
+msgid "<many-to-many>"
+msgstr ""
+
+#: inheritance_mapping.xml:450(literal) inheritance_mapping.xml:461(literal) inheritance_mapping.xml:472(literal)
+msgid "s.get(Payment.class, id)"
+msgstr ""
+
+#: inheritance_mapping.xml:451(literal) inheritance_mapping.xml:462(literal) inheritance_mapping.xml:473(literal) inheritance_mapping.xml:484(literal)
+msgid "from Payment p"
+msgstr ""
+
+#: inheritance_mapping.xml:452(literal) inheritance_mapping.xml:463(literal) inheritance_mapping.xml:474(literal)
+msgid "from Order o join o.payment p"
+msgstr ""
+
+#: inheritance_mapping.xml:453(emphasis) inheritance_mapping.xml:464(emphasis) inheritance_mapping.xml:475(emphasis)
+msgid "supported"
+msgstr ""
+
+#: inheritance_mapping.xml:467(entry)
+msgid "table per concrete-class (union-subclass)"
+msgstr ""
+
+#: inheritance_mapping.xml:470(literal)
+msgid "inverse=\"true\""
+msgstr ""
+
+#: inheritance_mapping.xml:470(entry)
+msgid "<placeholder-1/> (for <placeholder-2/> only)"
+msgstr ""
+
+#: inheritance_mapping.xml:478(entry)
+msgid "table per concrete class (implicit polymorphism)"
+msgstr ""
+
+#: inheritance_mapping.xml:479(literal)
+msgid "<any>"
+msgstr ""
+
+#: inheritance_mapping.xml:480(emphasis) inheritance_mapping.xml:481(emphasis) inheritance_mapping.xml:485(emphasis) inheritance_mapping.xml:486(emphasis)
+msgid "not supported"
+msgstr ""
+
+#: inheritance_mapping.xml:482(literal)
+msgid "<many-to-any>"
+msgstr ""
+
+#: inheritance_mapping.xml:483(literal)
+msgid "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: inheritance_mapping.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/performance.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/performance.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/performance.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,808 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:32-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: performance.xml:5(title)
+msgid "Improving performance"
+msgstr ""
+
+#: performance.xml:8(title)
+msgid "Fetching strategies"
+msgstr ""
+
+#: performance.xml:10(para)
+msgid "A <emphasis>fetching strategy</emphasis> is the strategy Hibernate will use for retrieving associated objects if the application needs to navigate the association. Fetch strategies may be declared in the O/R mapping metadata, or over-ridden by a particular HQL or <literal>Criteria</literal> query."
+msgstr ""
+
+#: performance.xml:17(para)
+msgid "Hibernate3 defines the following fetching strategies:"
+msgstr ""
+
+#: performance.xml:23(para)
+msgid "<emphasis>Join fetching</emphasis> - Hibernate retrieves the associated instance or collection in the same <literal>SELECT</literal>, using an <literal>OUTER JOIN</literal>."
+msgstr ""
+
+#: performance.xml:30(para)
+msgid "<emphasis>Select fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated entity or collection. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr ""
+
+#: performance.xml:39(para)
+msgid "<emphasis>Subselect fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated collections for all entities retrieved in a previous query or fetch. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr ""
+
+#: performance.xml:48(para)
+msgid "<emphasis>Batch fetching</emphasis> - an optimization strategy for select fetching - Hibernate retrieves a batch of entity instances or collections in a single <literal>SELECT</literal>, by specifying a list of primary keys or foreign keys."
+msgstr ""
+
+#: performance.xml:57(para)
+msgid "Hibernate also distinguishes between:"
+msgstr ""
+
+#: performance.xml:63(para)
+msgid "<emphasis>Immediate fetching</emphasis> - an association, collection or attribute is fetched immediately, when the owner is loaded."
+msgstr ""
+
+#: performance.xml:69(para)
+msgid "<emphasis>Lazy collection fetching</emphasis> - a collection is fetched when the application invokes an operation upon that collection. (This is the default for collections.)"
+msgstr ""
+
+#: performance.xml:76(para)
+msgid "<emphasis>\"Extra-lazy\" collection fetching</emphasis> - individual elements of the collection are accessed from the database as needed. Hibernate tries not to fetch the whole collection into memory unless absolutely needed (suitable for very large collections)"
+msgstr ""
+
+#: performance.xml:84(para)
+msgid "<emphasis>Proxy fetching</emphasis> - a single-valued association is fetched when a method other than the identifier getter is invoked upon the associated object."
+msgstr ""
+
+#: performance.xml:91(para)
+msgid "<emphasis>\"No-proxy\" fetching</emphasis> - a single-valued association is fetched when the instance variable is accessed. Compared to proxy fetching, this approach is less lazy (the association is fetched even when only the identifier is accessed) but more transparent, since no proxy is visible to the application. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr ""
+
+#: performance.xml:101(para)
+msgid "<emphasis>Lazy attribute fetching</emphasis> - an attribute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr ""
+
+#: performance.xml:110(para)
+msgid "We have two orthogonal notions here: <emphasis>when</emphasis> is the association fetched, and <emphasis>how</emphasis> is it fetched (what SQL is used). Don't confuse them! We use <literal>fetch</literal> to tune performance. We may use <literal>lazy</literal> to define a contract for what data is always available in any detached instance of a particular class."
+msgstr ""
+
+#: performance.xml:119(title)
+msgid "Working with lazy associations"
+msgstr ""
+
+#: performance.xml:121(para)
+msgid "By default, Hibernate3 uses lazy select fetching for collections and lazy proxy fetching for single-valued associations. These defaults make sense for almost all associations in almost all applications."
+msgstr ""
+
+#: performance.xml:127(para)
+msgid "<emphasis>Note:</emphasis> if you set <literal>hibernate.default_batch_fetch_size</literal>, Hibernate will use the batch fetch optimization for lazy fetching (this optimization may also be enabled at a more granular level)."
+msgstr ""
+
+#: performance.xml:134(para)
+msgid "However, lazy fetching poses one problem that you must be aware of. Access to a lazy association outside of the context of an open Hibernate session will result in an exception. For example:"
+msgstr ""
+
+#: performance.xml:152(para)
+msgid "Since the permissions collection was not initialized when the <literal>Session</literal> was closed, the collection will not be able to load its state. <emphasis>Hibernate does not support lazy initialization for detached objects</emphasis>. The fix is to move the code that reads from the collection to just before the transaction is committed."
+msgstr ""
+
+#: performance.xml:160(para)
+msgid "Alternatively, we could use a non-lazy collection or association, by specifying <literal>lazy=\"false\"</literal> for the association mapping. However, it is intended that lazy initialization be used for almost all collections and associations. If you define too many non-lazy associations in your object model, Hibernate will end up needing to fetch the entire database into memory in every transaction!"
+msgstr ""
+
+#: performance.xml:169(para)
+msgid "On the other hand, we often want to choose join fetching (which is non-lazy by nature) instead of select fetching in a particular transaction. We'll now see how to customize the fetching strategy. In Hibernate3, the mechanisms for choosing a fetch strategy are identical for single-valued associations and collections."
+msgstr ""
+
+#: performance.xml:180(title)
+msgid "Tuning fetch strategies"
+msgstr ""
+
+#: performance.xml:182(para)
+msgid "Select fetching (the default) is extremely vulnerable to N+1 selects problems, so we might want to enable join fetching in the mapping document:"
+msgstr ""
+
+#: performance.xml:195(para)
+msgid "The <literal>fetch</literal> strategy defined in the mapping document affects:"
+msgstr ""
+
+#: performance.xml:201(para)
+msgid "retrieval via <literal>get()</literal> or <literal>load()</literal>"
+msgstr ""
+
+#: performance.xml:206(para)
+msgid "retrieval that happens implicitly when an association is navigated"
+msgstr ""
+
+#: performance.xml:211(para)
+msgid "<literal>Criteria</literal> queries"
+msgstr ""
+
+#: performance.xml:216(para)
+msgid "HQL queries if <literal>subselect</literal> fetching is used"
+msgstr ""
+
+#: performance.xml:222(para)
+msgid "No matter what fetching strategy you use, the defined non-lazy graph is guaranteed to be loaded into memory. Note that this might result in several immediate selects being used to execute a particular HQL query."
+msgstr ""
+
+#: performance.xml:228(para)
+msgid "Usually, we don't use the mapping document to customize fetching. Instead, we keep the default behavior, and override it for a particular transaction, using <literal>left join fetch</literal> in HQL. This tells Hibernate to fetch the association eagerly in the first select, using an outer join. In the <literal>Criteria</literal> query API, you would use <literal>setFetchMode(FetchMode.JOIN)</literal>."
+msgstr ""
+
+#: performance.xml:237(para)
+msgid "If you ever feel like you wish you could change the fetching strategy used by <literal>get()</literal> or <literal>load()</literal>, simply use a <literal>Criteria</literal> query, for example:"
+msgstr ""
+
+#: performance.xml:248(para)
+msgid "(This is Hibernate's equivalent of what some ORM solutions call a \"fetch plan\".)"
+msgstr ""
+
+#: performance.xml:252(para)
+msgid "A completely different way to avoid problems with N+1 selects is to use the second-level cache."
+msgstr ""
+
+#: performance.xml:260(title)
+msgid "Single-ended association proxies"
+msgstr ""
+
+#: performance.xml:262(para)
+msgid "Lazy fetching for collections is implemented using Hibernate's own implementation of persistent collections. However, a different mechanism is needed for lazy behavior in single-ended associations. The target entity of the association must be proxied. Hibernate implements lazy initializing proxies for persistent objects using runtime bytecode enhancement (via the excellent CGLIB library)."
+msgstr ""
+
+#: performance.xml:270(para)
+msgid "By default, Hibernate3 generates proxies (at startup) for all persistent classes and uses them to enable lazy fetching of <literal>many-to-one</literal> and <literal>one-to-one</literal> associations."
+msgstr ""
+
+#: performance.xml:276(para)
+msgid "The mapping file may declare an interface to use as the proxy interface for that class, with the <literal>proxy</literal> attribute. By default, Hibernate uses a subclass of the class. <emphasis>Note that the proxied class must implement a default constructor with at least package visibility. We recommend this constructor for all persistent classes!</emphasis>"
+msgstr ""
+
+#: performance.xml:283(para)
+msgid "There are some gotchas to be aware of when extending this approach to polymorphic classes, eg."
+msgstr ""
+
+#: performance.xml:295(para)
+msgid "Firstly, instances of <literal>Cat</literal> will never be castable to <literal>DomesticCat</literal>, even if the underlying instance is an instance of <literal>DomesticCat</literal>:"
+msgstr ""
+
+#: performance.xml:307(para)
+msgid "Secondly, it is possible to break proxy <literal>==</literal>."
+msgstr ""
+
+#: performance.xml:316(para)
+msgid "However, the situation is not quite as bad as it looks. Even though we now have two references to different proxy objects, the underlying instance will still be the same object:"
+msgstr ""
+
+#: performance.xml:324(para)
+msgid "Third, you may not use a CGLIB proxy for a <literal>final</literal> class or a class with any <literal>final</literal> methods."
+msgstr ""
+
+#: performance.xml:329(para)
+msgid "Finally, if your persistent object acquires any resources upon instantiation (eg. in initializers or default constructor), then those resources will also be acquired by the proxy. The proxy class is an actual subclass of the persistent class."
+msgstr ""
+
+#: performance.xml:335(para)
+msgid "These problems are all due to fundamental limitations in Java's single inheritance model. If you wish to avoid these problems your persistent classes must each implement an interface that declares its business methods. You should specify these interfaces in the mapping file. eg."
+msgstr ""
+
+#: performance.xml:348(para)
+msgid "where <literal>CatImpl</literal> implements the interface <literal>Cat</literal> and <literal>DomesticCatImpl</literal> implements the interface <literal>DomesticCat</literal>. Then proxies for instances of <literal>Cat</literal> and <literal>DomesticCat</literal> may be returned by <literal>load()</literal> or <literal>iterate()</literal>. (Note that <literal>list()</literal> does not usually return proxies.)"
+msgstr ""
+
+#: performance.xml:360(para)
+msgid "Relationships are also lazily initialized. This means you must declare any properties to be of type <literal>Cat</literal>, not <literal>CatImpl</literal>."
+msgstr ""
+
+#: performance.xml:365(para)
+msgid "Certain operations do <emphasis>not</emphasis> require proxy initialization"
+msgstr ""
+
+#: performance.xml:371(para)
+msgid "<literal>equals()</literal>, if the persistent class does not override <literal>equals()</literal>"
+msgstr ""
+
+#: performance.xml:377(para)
+msgid "<literal>hashCode()</literal>, if the persistent class does not override <literal>hashCode()</literal>"
+msgstr ""
+
+#: performance.xml:383(para)
+msgid "The identifier getter method"
+msgstr ""
+
+#: performance.xml:389(para)
+msgid "Hibernate will detect persistent classes that override <literal>equals()</literal> or <literal>hashCode()</literal>."
+msgstr ""
+
+#: performance.xml:394(para)
+msgid "By choosing <literal>lazy=\"no-proxy\"</literal> instead of the default <literal>lazy=\"proxy\"</literal>, we can avoid the problems associated with typecasting. However, we will require buildtime bytecode instrumentation, and all operations will result in immediate proxy initialization."
+msgstr ""
+
+#: performance.xml:404(title)
+msgid "Initializing collections and proxies"
+msgstr ""
+
+#: performance.xml:406(para)
+msgid "A <literal>LazyInitializationException</literal> will be thrown by Hibernate if an uninitialized collection or proxy is accessed outside of the scope of the <literal>Session</literal>, ie. when the entity owning the collection or having the reference to the proxy is in the detached state."
+msgstr ""
+
+#: performance.xml:412(para)
+msgid "Sometimes we need to ensure that a proxy or collection is initialized before closing the <literal>Session</literal>. Of course, we can alway force initialization by calling <literal>cat.getSex()</literal> or <literal>cat.getKittens().size()</literal>, for example. But that is confusing to readers of the code and is not convenient for generic code."
+msgstr ""
+
+#: performance.xml:419(para)
+msgid "The static methods <literal>Hibernate.initialize()</literal> and <literal>Hibernate.isInitialized()</literal> provide the application with a convenient way of working with lazily initialized collections or proxies. <literal>Hibernate.initialize(cat)</literal> will force the initialization of a proxy, <literal>cat</literal>, as long as its <literal>Session</literal> is still open. <literal>Hibernate.initialize( cat.getKittens() )</literal> has a similar effect for the collection of kittens."
+msgstr ""
+
+#: performance.xml:428(para)
+msgid "Another option is to keep the <literal>Session</literal> open until all needed collections and proxies have been loaded. In some application architectures, particularly where the code that accesses data using Hibernate, and the code that uses it are in different application layers or different physical processes, it can be a problem to ensure that the <literal>Session</literal> is open when a collection is initialized. There are two basic ways to deal with this issue:"
+msgstr ""
+
+#: performance.xml:439(para)
+msgid "In a web-based application, a servlet filter can be used to close the <literal>Session</literal> only at the very end of a user request, once the rendering of the view is complete (the <emphasis>Open Session in View</emphasis> pattern). Of course, this places heavy demands on the correctness of the exception handling of your application infrastructure. It is vitally important that the <literal>Session</literal> is closed and the transaction ended before returning to the user, even when an exception occurs during rendering of the view. See the Hibernate Wiki for examples of this \"Open Session in View\" pattern."
+msgstr ""
+
+#: performance.xml:452(para)
+msgid "In an application with a separate business tier, the business logic must \"prepare\" all collections that will be needed by the web tier before returning. This means that the business tier should load all the data and return all the data already initialized to the presentation/web tier that is required for a particular use case. Usually, the application calls <literal>Hibernate.initialize()</literal> for each collection that will be needed in the web tier (this call must occur before the session is closed) or retrieves the collection eagerly using a Hibernate query with a <literal>FETCH</literal> clause or a <literal>FetchMode.JOIN</literal> in <literal>Criteria</literal>. This is usually easier if you adopt the <emphasis>Command</emphasis> pattern instead of a <emphasis>Session Facade</emphasis>."
+msgstr ""
+
+#: performance.xml:467(para)
+msgid "You may also attach a previously loaded object to a new <literal>Session</literal> with <literal>merge()</literal> or <literal>lock()</literal> before accessing uninitialized collections (or other proxies). No, Hibernate does not, and certainly <emphasis>should</emphasis> not do this automatically, since it would introduce ad hoc transaction semantics!"
+msgstr ""
+
+#: performance.xml:477(para)
+msgid "Sometimes you don't want to initialize a large collection, but still need some information about it (like its size) or a subset of the data."
+msgstr ""
+
+#: performance.xml:482(para)
+msgid "You can use a collection filter to get the size of a collection without initializing it:"
+msgstr ""
+
+#: performance.xml:488(para)
+msgid "The <literal>createFilter()</literal> method is also used to efficiently retrieve subsets of a collection without needing to initialize the whole collection:"
+msgstr ""
+
+#: performance.xml:498(title)
+msgid "Using batch fetching"
+msgstr ""
+
+#: performance.xml:500(para)
+msgid "Hibernate can make efficient use of batch fetching, that is, Hibernate can load several uninitialized proxies if one proxy is accessed (or collections. Batch fetching is an optimization of the lazy select fetching strategy. There are two ways you can tune batch fetching: on the class and the collection level."
+msgstr ""
+
+#: performance.xml:506(para)
+msgid "Batch fetching for classes/entities is easier to understand. Imagine you have the following situation at runtime: You have 25 <literal>Cat</literal> instances loaded in a <literal>Session</literal>, each <literal>Cat</literal> has a reference to its <literal>owner</literal>, a <literal>Person</literal>. The <literal>Person</literal> class is mapped with a proxy, <literal>lazy=\"true\"</literal>. If you now iterate through all cats and call <literal>getOwner()</literal> on each, Hibernate will by default execute 25 <literal>SELECT</literal> statements, to retrieve the proxied owners. You can tune this behavior by specifying a <literal>batch-size</literal> in the mapping of <literal>Person</literal>:"
+msgstr ""
+
+#: performance.xml:518(para)
+msgid "Hibernate will now execute only three queries, the pattern is 10, 10, 5."
+msgstr ""
+
+#: performance.xml:522(para)
+msgid "You may also enable batch fetching of collections. For example, if each <literal>Person</literal> has a lazy collection of <literal>Cat</literal>s, and 10 persons are currently loaded in the <literal>Sesssion</literal>, iterating through all persons will generate 10 <literal>SELECT</literal>s, one for every call to <literal>getCats()</literal>. If you enable batch fetching for the <literal>cats</literal> collection in the mapping of <literal>Person</literal>, Hibernate can pre-fetch collections:"
+msgstr ""
+
+#: performance.xml:537(para)
+msgid "With a <literal>batch-size</literal> of 3, Hibernate will load 3, 3, 3, 1 collections in four <literal>SELECT</literal>s. Again, the value of the attribute depends on the expected number of uninitialized collections in a particular <literal>Session</literal>."
+msgstr ""
+
+#: performance.xml:543(para)
+msgid "Batch fetching of collections is particularly useful if you have a nested tree of items, ie. the typical bill-of-materials pattern. (Although a <emphasis>nested set</emphasis> or a <emphasis>materialized path</emphasis> might be a better option for read-mostly trees.)"
+msgstr ""
+
+#: performance.xml:552(title)
+msgid "Using subselect fetching"
+msgstr ""
+
+#: performance.xml:554(para)
+msgid "If one lazy collection or single-valued proxy has to be fetched, Hibernate loads all of them, re-running the original query in a subselect. This works in the same way as batch-fetching, without the piecemeal loading."
+msgstr ""
+
+#: performance.xml:565(title)
+msgid "Using lazy property fetching"
+msgstr ""
+
+#: performance.xml:567(para)
+msgid "Hibernate3 supports the lazy fetching of individual properties. This optimization technique is also known as <emphasis>fetch groups</emphasis>. Please note that this is mostly a marketing feature, as in practice, optimizing row reads is much more important than optimization of column reads. However, only loading some properties of a class might be useful in extreme cases, when legacy tables have hundreds of columns and the data model can not be improved."
+msgstr ""
+
+#: performance.xml:576(para)
+msgid "To enable lazy property loading, set the <literal>lazy</literal> attribute on your particular property mappings:"
+msgstr ""
+
+#: performance.xml:590(para)
+msgid "Lazy property loading requires buildtime bytecode instrumentation! If your persistent classes are not enhanced, Hibernate will silently ignore lazy property settings and fall back to immediate fetching."
+msgstr ""
+
+#: performance.xml:596(para)
+msgid "For bytecode instrumentation, use the following Ant task:"
+msgstr ""
+
+#: performance.xml:614(para)
+msgid "A different (better?) way to avoid unnecessary column reads, at least for read-only transactions is to use the projection features of HQL or Criteria queries. This avoids the need for buildtime bytecode processing and is certainly a prefered solution."
+msgstr ""
+
+#: performance.xml:621(para)
+msgid "You may force the usual eager fetching of properties using <literal>fetch all properties</literal> in HQL."
+msgstr ""
+
+#: performance.xml:631(title)
+msgid "The Second Level Cache"
+msgstr ""
+
+#: performance.xml:633(para)
+msgid "A Hibernate <literal>Session</literal> is a transaction-level cache of persistent data. It is possible to configure a cluster or JVM-level (<literal>SessionFactory</literal>-level) cache on a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be careful. Caches are never aware of changes made to the persistent store by another application (though they may be configured to regularly expire cached data)."
+msgstr ""
+
+#: performance.xml:641(para)
+msgid "You have the option to tell Hibernate which caching implementation to use by specifying the name of a class that implements <literal>org.hibernate.cache.CacheProvider</literal> using the property <literal>hibernate.cache.provider_class</literal>. 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."
+msgstr ""
+
+#: performance.xml:652(title)
+msgid "Cache Providers"
+msgstr ""
+
+#: performance.xml:661(entry) performance.xml:848(entry)
+msgid "Cache"
+msgstr ""
+
+#: performance.xml:662(entry)
+msgid "Provider class"
+msgstr ""
+
+#: performance.xml:663(entry)
+msgid "Type"
+msgstr ""
+
+#: performance.xml:664(entry)
+msgid "Cluster Safe"
+msgstr ""
+
+#: performance.xml:665(entry)
+msgid "Query Cache Supported"
+msgstr ""
+
+#: performance.xml:670(entry) performance.xml:857(entry)
+msgid "Hashtable (not intended for production use)"
+msgstr ""
+
+#: performance.xml:671(literal)
+msgid "org.hibernate.cache.HashtableCacheProvider"
+msgstr ""
+
+#: performance.xml:672(entry)
+msgid "memory"
+msgstr ""
+
+#: performance.xml:674(entry) performance.xml:681(entry) performance.xml:688(entry) performance.xml:858(entry) performance.xml:859(entry) performance.xml:860(entry) performance.xml:865(entry) performance.xml:866(entry) performance.xml:867(entry) performance.xml:872(entry) performance.xml:873(entry) performance.xml:874(entry) performance.xml:879(entry) performance.xml:880(entry) performance.xml:886(entry) performance.xml:889(entry)
+msgid "yes"
+msgstr ""
+
+#: performance.xml:677(entry) performance.xml:864(entry)
+msgid "EHCache"
+msgstr ""
+
+#: performance.xml:678(literal)
+msgid "org.hibernate.cache.EhCacheProvider"
+msgstr ""
+
+#: performance.xml:679(entry) performance.xml:686(entry)
+msgid "memory, disk"
+msgstr ""
+
+#: performance.xml:684(entry) performance.xml:871(entry)
+msgid "OSCache"
+msgstr ""
+
+#: performance.xml:685(literal)
+msgid "org.hibernate.cache.OSCacheProvider"
+msgstr ""
+
+#: performance.xml:691(entry) performance.xml:878(entry)
+msgid "SwarmCache"
+msgstr ""
+
+#: performance.xml:692(literal)
+msgid "org.hibernate.cache.SwarmCacheProvider"
+msgstr ""
+
+#: performance.xml:693(entry)
+msgid "clustered (ip multicast)"
+msgstr ""
+
+#: performance.xml:694(entry)
+msgid "yes (clustered invalidation)"
+msgstr ""
+
+#: performance.xml:698(entry) performance.xml:885(entry)
+msgid "JBoss TreeCache"
+msgstr ""
+
+#: performance.xml:699(literal)
+msgid "org.hibernate.cache.TreeCacheProvider"
+msgstr ""
+
+#: performance.xml:700(entry)
+msgid "clustered (ip multicast), transactional"
+msgstr ""
+
+#: performance.xml:701(entry)
+msgid "yes (replication)"
+msgstr ""
+
+#: performance.xml:702(entry)
+msgid "yes (clock sync req.)"
+msgstr ""
+
+#: performance.xml:709(title)
+msgid "Cache mappings"
+msgstr ""
+
+#: performance.xml:711(para)
+msgid "The <literal><cache></literal> element of a class or collection mapping has the following form:"
+msgstr ""
+
+#: performance.xml:729(para)
+msgid "<literal>usage</literal> (required) specifies the caching strategy: <literal>transactional</literal>, <literal>read-write</literal>, <literal>nonstrict-read-write</literal> or <literal>read-only</literal>"
+msgstr ""
+
+#: performance.xml:738(para)
+msgid "<literal>region</literal> (optional, defaults to the class or collection role name) specifies the name of the second level cache region"
+msgstr ""
+
+#: performance.xml:745(para)
+msgid "<literal>include</literal> (optional, defaults to <literal>all</literal>) <literal>non-lazy</literal> specifies that properties of the entity mapped with <literal>lazy=\"true\"</literal> may not be cached when attribute-level lazy fetching is enabled"
+msgstr ""
+
+#: performance.xml:755(para)
+msgid "Alternatively (preferrably?), you may specify <literal><class-cache></literal> and <literal><collection-cache></literal> elements in <literal>hibernate.cfg.xml</literal>."
+msgstr ""
+
+#: performance.xml:760(para)
+msgid "The <literal>usage</literal> attribute specifies a <emphasis>cache concurrency strategy</emphasis>."
+msgstr ""
+
+#: performance.xml:767(title)
+msgid "Strategy: read only"
+msgstr ""
+
+#: performance.xml:769(para)
+msgid "If your application needs to read but never modify instances of a persistent class, a <literal>read-only</literal> cache may be used. This is the simplest and best performing strategy. It's even perfectly safe for use in a cluster."
+msgstr ""
+
+#: performance.xml:784(title)
+msgid "Strategy: read/write"
+msgstr ""
+
+#: performance.xml:786(para)
+msgid "If the application needs to update data, a <literal>read-write</literal> cache might be appropriate. This cache strategy should never be used if serializable transaction isolation level is required. If the cache is used in a JTA environment, you must specify the property <literal>hibernate.transaction.manager_lookup_class</literal>, naming a strategy for obtaining the JTA <literal>TransactionManager</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called. If you wish to use this strategy in a cluster, you should ensure that the underlying cache implementation supports locking. The built-in cache providers do <emphasis>not</emphasis>."
+msgstr ""
+
+#: performance.xml:809(title)
+msgid "Strategy: nonstrict read/write"
+msgstr ""
+
+#: performance.xml:811(para)
+msgid "If the application only occasionally needs to update data (ie. if it is extremely unlikely that two transactions would try to update the same item simultaneously) and strict transaction isolation is not required, a <literal>nonstrict-read-write</literal> cache might be appropriate. If the cache is used in a JTA environment, you must specify <literal>hibernate.transaction.manager_lookup_class</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called."
+msgstr ""
+
+#: performance.xml:823(title)
+msgid "Strategy: transactional"
+msgstr ""
+
+#: performance.xml:825(para)
+msgid "The <literal>transactional</literal> cache strategy provides support for fully transactional cache providers such as JBoss TreeCache. Such a cache may only be used in a JTA environment and you must specify <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr ""
+
+#: performance.xml:833(para)
+msgid "None of the cache providers support all of the cache concurrency strategies. The following table shows which providers are compatible with which concurrency strategies."
+msgstr ""
+
+#: performance.xml:839(title)
+msgid "Cache Concurrency Strategy Support"
+msgstr ""
+
+#: performance.xml:849(entry)
+msgid "read-only"
+msgstr ""
+
+#: performance.xml:850(entry)
+msgid "nonstrict-read-write"
+msgstr ""
+
+#: performance.xml:851(entry)
+msgid "read-write"
+msgstr ""
+
+#: performance.xml:852(entry)
+msgid "transactional"
+msgstr ""
+
+#: performance.xml:898(title)
+msgid "Managing the caches"
+msgstr ""
+
+#: performance.xml:900(para)
+msgid "Whenever you pass an object to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal> and whenever you retrieve an object using <literal>load()</literal>, <literal>get()</literal>, <literal>list()</literal>, <literal>iterate()</literal> or <literal>scroll()</literal>, that object is added to the internal cache of the <literal>Session</literal>."
+msgstr ""
+
+#: performance.xml:907(para)
+msgid "When <literal>flush()</literal> is subsequently called, the state of that object will be synchronized with the database. If you do not want this synchronization to occur or if you are processing a huge number of objects and need to manage memory efficiently, the <literal>evict()</literal> method may be used to remove the object and its collections from the first-level cache."
+msgstr ""
+
+#: performance.xml:922(para)
+msgid "The <literal>Session</literal> also provides a <literal>contains()</literal> method to determine if an instance belongs to the session cache."
+msgstr ""
+
+#: performance.xml:927(para)
+msgid "To completely evict all objects from the session cache, call <literal>Session.clear()</literal>"
+msgstr ""
+
+#: performance.xml:931(para)
+msgid "For the second-level cache, there are methods defined on <literal>SessionFactory</literal> for evicting the cached state of an instance, entire class, collection instance or entire collection role."
+msgstr ""
+
+#: performance.xml:942(para)
+msgid "The <literal>CacheMode</literal> controls how a particular session interacts with the second-level cache."
+msgstr ""
+
+#: performance.xml:949(para)
+msgid "<literal>CacheMode.NORMAL</literal> - read items from and write items to the second-level cache"
+msgstr ""
+
+#: performance.xml:954(para)
+msgid "<literal>CacheMode.GET</literal> - read items from the second-level cache, but don't write to the second-level cache except when updating data"
+msgstr ""
+
+#: performance.xml:960(para)
+msgid "<literal>CacheMode.PUT</literal> - write items to the second-level cache, but don't read from the second-level cache"
+msgstr ""
+
+#: performance.xml:966(para)
+msgid "<literal>CacheMode.REFRESH</literal> - write items to the second-level cache, but don't read from the second-level cache, bypass the effect of <literal>hibernate.cache.use_minimal_puts</literal>, forcing a refresh of the second-level cache for all items read from the database"
+msgstr ""
+
+#: performance.xml:974(para)
+msgid "To browse the contents of a second-level or query cache region, use the <literal>Statistics</literal> API:"
+msgstr ""
+
+#: performance.xml:983(para)
+msgid "You'll need to enable statistics, and, optionally, force Hibernate to keep the cache entries in a more human-understandable format:"
+msgstr ""
+
+#: performance.xml:994(title)
+msgid "The Query Cache"
+msgstr ""
+
+#: performance.xml:996(para)
+msgid "Query result sets may also be cached. This is only useful for queries that are run frequently with the same parameters. To use the query cache you must first enable it:"
+msgstr ""
+
+#: performance.xml:1003(para)
+msgid "This setting causes the creation of two new cache regions - one holding cached query result sets (<literal>org.hibernate.cache.StandardQueryCache</literal>), the other holding timestamps of the most recent updates to queryable tables (<literal>org.hibernate.cache.UpdateTimestampsCache</literal>). Note that the query cache does not cache the state of the actual entities in the result set; it caches only identifier values and results of value type. So the query cache should always be used in conjunction with the second-level cache."
+msgstr ""
+
+#: performance.xml:1013(para)
+msgid "Most queries do not benefit from caching, so by default queries are not cached. To enable caching, call <literal>Query.setCacheable(true)</literal>. This call allows the query to look for existing cache results or add its results to the cache when it is executed."
+msgstr ""
+
+#: performance.xml:1020(para)
+msgid "If you require fine-grained control over query cache expiration policies, you may specify a named cache region for a particular query by calling <literal>Query.setCacheRegion()</literal>."
+msgstr ""
+
+#: performance.xml:1033(para)
+msgid "If the query should force a refresh of its query cache region, you should call <literal>Query.setCacheMode(CacheMode.REFRESH)</literal>. This is particularly useful in cases where underlying data may have been updated via a separate process (i.e., not modified through Hibernate) and allows the application to selectively refresh particular query result sets. This is a more efficient alternative to eviction of a query cache region via <literal>SessionFactory.evictQueries()</literal>."
+msgstr ""
+
+#: performance.xml:1045(title)
+msgid "Understanding Collection performance"
+msgstr ""
+
+#: performance.xml:1047(para)
+msgid "We've already spent quite some time talking about collections. In this section we will highlight a couple more issues about how collections behave at runtime."
+msgstr ""
+
+#: performance.xml:1054(title)
+msgid "Taxonomy"
+msgstr ""
+
+#: performance.xml:1056(para)
+msgid "Hibernate defines three basic kinds of collections:"
+msgstr ""
+
+#: performance.xml:1060(para)
+msgid "collections of values"
+msgstr ""
+
+#: performance.xml:1063(para)
+msgid "one to many associations"
+msgstr ""
+
+#: performance.xml:1066(para)
+msgid "many to many associations"
+msgstr ""
+
+#: performance.xml:1070(para)
+msgid "This classification distinguishes the various table and foreign key relationships but does not tell us quite everything we need to know about the relational model. To fully understand the relational structure and performance characteristics, we must also consider the structure of the primary key that is used by Hibernate to update or delete collection rows. This suggests the following classification:"
+msgstr ""
+
+#: performance.xml:1081(para)
+msgid "indexed collections"
+msgstr ""
+
+#: performance.xml:1084(para)
+msgid "sets"
+msgstr ""
+
+#: performance.xml:1087(para)
+msgid "bags"
+msgstr ""
+
+#: performance.xml:1091(para)
+msgid "All indexed collections (maps, lists, arrays) have a primary key consisting of the <literal><key></literal> and <literal><index></literal> columns. In this case collection updates are usually extremely efficient - the primary key may be efficiently indexed and a particular row may be efficiently located when Hibernate tries to update or delete it."
+msgstr ""
+
+#: performance.xml:1099(para)
+msgid "Sets have a primary key consisting of <literal><key></literal> and element columns. This may be less efficient for some types of collection element, particularly composite elements or large text or binary fields; the database may not be able to index a complex primary key as efficently. On the other hand, for one to many or many to many associations, particularly in the case of synthetic identifiers, it is likely to be just as efficient. (Side-note: if you want <literal>SchemaExport</literal> to actually create the primary key of a <literal><set></literal> for you, you must declare all columns as <literal>not-null=\"true\"</literal>.)"
+msgstr ""
+
+#: performance.xml:1110(para)
+msgid "<literal><idbag></literal> mappings define a surrogate key, so they are always very efficient to update. In fact, they are the best case."
+msgstr ""
+
+#: performance.xml:1115(para)
+msgid "Bags are the worst case. Since a bag permits duplicate element values and has no index column, no primary key may be defined. Hibernate has no way of distinguishing between duplicate rows. Hibernate resolves this problem by completely removing (in a single <literal>DELETE</literal>) and recreating the collection whenever it changes. This might be very inefficient."
+msgstr ""
+
+#: performance.xml:1123(para)
+msgid "Note that for a one-to-many association, the \"primary key\" may not be the physical primary key of the database table - but even in this case, the above classification is still useful. (It still reflects how Hibernate \"locates\" individual rows of the collection.)"
+msgstr ""
+
+#: performance.xml:1133(title)
+msgid "Lists, maps, idbags and sets are the most efficient collections to update"
+msgstr ""
+
+#: performance.xml:1135(para)
+msgid "From the discussion above, it should be clear that indexed collections and (usually) sets allow the most efficient operation in terms of adding, removing and updating elements."
+msgstr ""
+
+#: performance.xml:1141(para)
+msgid "There is, arguably, one more advantage that indexed collections have over sets for many to many associations or collections of values. Because of the structure of a <literal>Set</literal>, Hibernate doesn't ever <literal>UPDATE</literal> a row when an element is \"changed\". Changes to a <literal>Set</literal> always work via <literal>INSERT</literal> and <literal>DELETE</literal> (of individual rows). Once again, this consideration does not apply to one to many associations."
+msgstr ""
+
+#: performance.xml:1150(para)
+msgid "After observing that arrays cannot be lazy, we would conclude that lists, maps and idbags are the most performant (non-inverse) collection types, with sets not far behind. Sets are expected to be the most common kind of collection in Hibernate applications. This is because the \"set\" semantics are most natural in the relational model."
+msgstr ""
+
+#: performance.xml:1158(para)
+msgid "However, in well-designed Hibernate domain models, we usually see that most collections are in fact one-to-many associations with <literal>inverse=\"true\"</literal>. For these associations, the update is handled by the many-to-one end of the association, and so considerations of collection update performance simply do not apply."
+msgstr ""
+
+#: performance.xml:1168(title)
+msgid "Bags and lists are the most efficient inverse collections"
+msgstr ""
+
+#: performance.xml:1170(para)
+msgid "Just before you ditch bags forever, there is a particular case in which bags (and also lists) are much more performant than sets. For a collection with <literal>inverse=\"true\"</literal> (the standard bidirectional one-to-many relationship idiom, for example) we can add elements to a bag or list without needing to initialize (fetch) the bag elements! This is because <literal>Collection.add()</literal> or <literal>Collection.addAll()</literal> must always return true for a bag or <literal>List</literal> (unlike a <literal>Set</literal>). This can make the following common code much faster."
+msgstr ""
+
+#: performance.xml:1189(title)
+msgid "One shot delete"
+msgstr ""
+
+#: performance.xml:1191(para)
+msgid "Occasionally, deleting collection elements one by one can be extremely inefficient. Hibernate isn't completely stupid, so it knows not to do that in the case of an newly-empty collection (if you called <literal>list.clear()</literal>, for example). In this case, Hibernate will issue a single <literal>DELETE</literal> and we are done!"
+msgstr ""
+
+#: performance.xml:1198(para)
+msgid "Suppose we add a single element to a collection of size twenty and then remove two elements. Hibernate will issue one <literal>INSERT</literal> statement and two <literal>DELETE</literal> statements (unless the collection is a bag). This is certainly desirable."
+msgstr ""
+
+#: performance.xml:1204(para)
+msgid "However, suppose that we remove eighteen elements, leaving two and then add thee new elements. There are two possible ways to proceed"
+msgstr ""
+
+#: performance.xml:1211(para)
+msgid "delete eighteen rows one by one and then insert three rows"
+msgstr ""
+
+#: performance.xml:1214(para)
+msgid "remove the whole collection (in one SQL <literal>DELETE</literal>) and insert all five current elements (one by one)"
+msgstr ""
+
+#: performance.xml:1219(para)
+msgid "Hibernate isn't smart enough to know that the second option is probably quicker in this case. (And it would probably be undesirable for Hibernate to be that smart; such behaviour might confuse database triggers, etc.)"
+msgstr ""
+
+#: performance.xml:1225(para)
+msgid "Fortunately, you can force this behaviour (ie. the second strategy) at any time by discarding (ie. dereferencing) the original collection and returning a newly instantiated collection with all the current elements. This can be very useful and powerful from time to time."
+msgstr ""
+
+#: performance.xml:1231(para)
+msgid "Of course, one-shot-delete does not apply to collections mapped <literal>inverse=\"true\"</literal>."
+msgstr ""
+
+#: performance.xml:1240(title)
+msgid "Monitoring performance"
+msgstr ""
+
+#: performance.xml:1242(para)
+msgid "Optimization is not much use without monitoring and access to performance numbers. Hibernate provides a full range of figures about its internal operations. Statistics in Hibernate are available per <literal>SessionFactory</literal>."
+msgstr ""
+
+#: performance.xml:1249(title)
+msgid "Monitoring a SessionFactory"
+msgstr ""
+
+#: performance.xml:1251(para)
+msgid "You can access <literal>SessionFactory</literal> metrics in two ways. Your first option is to call <literal>sessionFactory.getStatistics()</literal> and read or display the <literal>Statistics</literal> yourself."
+msgstr ""
+
+#: performance.xml:1257(para)
+msgid "Hibernate can also use JMX to publish metrics if you enable the <literal>StatisticsService</literal> MBean. You may enable a single MBean for all your <literal>SessionFactory</literal> or one per factory. See the following code for minimalistic configuration examples:"
+msgstr ""
+
+#: performance.xml:1284(para)
+msgid "TODO: This doesn't make sense: In the first case, we retrieve and use the MBean directly. In the second one, we must give the JNDI name in which the session factory is held before using it. Use <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal>"
+msgstr ""
+
+#: performance.xml:1289(para)
+msgid "You can (de)activate the monitoring for a <literal>SessionFactory</literal>"
+msgstr ""
+
+#: performance.xml:1294(para)
+msgid "at configuration time, set <literal>hibernate.generate_statistics</literal> to <literal>false</literal>"
+msgstr ""
+
+#: performance.xml:1301(para)
+msgid "at runtime: <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> or <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>"
+msgstr ""
+
+#: performance.xml:1308(para)
+msgid "Statistics can be reset programatically using the <literal>clear()</literal> method. A summary can be sent to a logger (info level) using the <literal>logSummary()</literal> method."
+msgstr ""
+
+#: performance.xml:1317(title)
+msgid "Metrics"
+msgstr ""
+
+#: performance.xml:1319(para)
+msgid "Hibernate provides a number of metrics, from very basic to the specialized information only relevant in certain scenarios. All available counters are described in the <literal>Statistics</literal> interface API, in three categories:"
+msgstr ""
+
+#: performance.xml:1326(para)
+msgid "Metrics related to the general <literal>Session</literal> usage, such as number of open sessions, retrieved JDBC connections, etc."
+msgstr ""
+
+#: performance.xml:1332(para)
+msgid "Metrics related to he entities, collections, queries, and caches as a whole (aka global metrics),"
+msgstr ""
+
+#: performance.xml:1338(para)
+msgid "Detailed metrics related to a particular entity, collection, query or cache region."
+msgstr ""
+
+#: performance.xml:1345(para)
+msgid "For exampl,e you can check the cache hit, miss, and put ratio of entities, collections and queries, and the average time a query needs. Beware that the number of milliseconds is subject to approximation in Java. Hibernate is tied to the JVM precision, on some platforms this might even only be accurate to 10 seconds."
+msgstr ""
+
+#: performance.xml:1352(para)
+msgid "Simple getters are used to access the global metrics (i.e. not tied to a particular entity, collection, cache region, etc.). You can access the metrics of a particular entity, collection or cache region through its name, and through its HQL or SQL representation for queries. Please refer to the <literal>Statistics</literal>, <literal>EntityStatistics</literal>, <literal>CollectionStatistics</literal>, <literal>SecondLevelCacheStatistics</literal>, and <literal>QueryStatistics</literal> API Javadoc for more information. The following code shows a simple example:"
+msgstr ""
+
+#: performance.xml:1379(para)
+msgid "To work on all entities, collections, queries and region caches, you can retrieve the list of names of entities, collections, queries and region caches with the following methods: <literal>getQueries()</literal>, <literal>getEntityNames()</literal>, <literal>getCollectionRoleNames()</literal>, and <literal>getSecondLevelCacheRegionNames()</literal>."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: performance.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/persistent_classes.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/persistent_classes.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/persistent_classes.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,208 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:33-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: persistent_classes.xml:5(title)
+msgid "Persistent Classes"
+msgstr ""
+
+#: persistent_classes.xml:7(para)
+msgid "Persistent classes are classes in an application that implement the entities of the business problem (e.g. Customer and Order in an E-commerce application). Not all instances of a persistent class are considered to be in the persistent state - an instance may instead be transient or detached."
+msgstr ""
+
+#: persistent_classes.xml:14(para)
+msgid "Hibernate works best if these classes follow some simple rules, also known as the Plain Old Java Object (POJO) programming model. However, none of these rules are hard requirements. Indeed, Hibernate3 assumes very little about the nature of your persistent objects. You may express a domain model in other ways: using trees of <literal>Map</literal> instances, for example."
+msgstr ""
+
+#: persistent_classes.xml:23(title)
+msgid "A simple POJO example"
+msgstr ""
+
+#: persistent_classes.xml:25(para)
+msgid "Most Java applications require a persistent class representing felines."
+msgstr ""
+
+#: persistent_classes.xml:108(para)
+msgid "There are four main rules to follow here:"
+msgstr ""
+
+#: persistent_classes.xml:114(title)
+msgid "Implement a no-argument constructor"
+msgstr ""
+
+#: persistent_classes.xml:116(para)
+msgid "<literal>Cat</literal> has a no-argument constructor. All persistent classes must have a default constructor (which may be non-public) so that Hibernate can instantiate them using <literal>Constructor.newInstance()</literal>. We strongly recommend having a default constructor with at least <emphasis>package</emphasis> visibility for runtime proxy generation in Hibernate."
+msgstr ""
+
+#: persistent_classes.xml:126(title)
+msgid "Provide an identifier property (optional)"
+msgstr ""
+
+#: persistent_classes.xml:128(para)
+msgid "<literal>Cat</literal> has a property called <literal>id</literal>. This property maps to the primary key column of a database table. The property might have been called anything, and its type might have been any primitive type, any primitive \"wrapper\" type, <literal>java.lang.String</literal> or <literal>java.util.Date</literal>. (If your legacy database table has composite keys, you can even use a user-defined class with properties of these types - see the section on composite identifiers later.)"
+msgstr ""
+
+#: persistent_classes.xml:137(para)
+msgid "The identifier property is strictly optional. You can leave them off and let Hibernate keep track of object identifiers internally. We do not recommend this, however."
+msgstr ""
+
+#: persistent_classes.xml:142(para)
+msgid "In fact, some functionality is available only to classes which declare an identifier property:"
+msgstr ""
+
+#: persistent_classes.xml:149(para)
+msgid "Transitive reattachment for detached objects (cascade update or cascade merge) - see <xref linkend=\"objectstate-transitive\"/>"
+msgstr ""
+
+#: persistent_classes.xml:156(literal)
+msgid "Session.saveOrUpdate()"
+msgstr ""
+
+#: persistent_classes.xml:161(literal)
+msgid "Session.merge()"
+msgstr ""
+
+#: persistent_classes.xml:166(para)
+msgid "We recommend you declare consistently-named identifier properties on persistent classes. We further recommend that you use a nullable (ie. non-primitive) type."
+msgstr ""
+
+#: persistent_classes.xml:173(title)
+msgid "Prefer non-final classes (optional)"
+msgstr ""
+
+#: persistent_classes.xml:174(para)
+msgid "A central feature of Hibernate, <emphasis>proxies</emphasis>, depends upon the persistent class being either non-final, or the implementation of an interface that declares all public methods."
+msgstr ""
+
+#: persistent_classes.xml:179(para)
+msgid "You can persist <literal>final</literal> classes that do not implement an interface with Hibernate, but you won't be able to use proxies for lazy association fetching - which will limit your options for performance tuning."
+msgstr ""
+
+#: persistent_classes.xml:184(para)
+msgid "You should also avoid declaring <literal>public final</literal> methods on the non-final classes. If you want to use a class with a <literal>public final</literal> method, you must explicitly disable proxying by setting <literal>lazy=\"false\"</literal>."
+msgstr ""
+
+#: persistent_classes.xml:192(title)
+msgid "Declare accessors and mutators for persistent fields (optional)"
+msgstr ""
+
+#: persistent_classes.xml:194(para)
+msgid "<literal>Cat</literal> declares accessor methods for all its persistent fields. Many other ORM tools directly persist instance variables. We believe it is better to provide an indirection between the relational schema and internal data structures of the class. By default, Hibernate persists JavaBeans style properties, and recognizes method names of the form <literal>getFoo</literal>, <literal>isFoo</literal> and <literal>setFoo</literal>. You may switch to direct field access for particular properties, if needed."
+msgstr ""
+
+#: persistent_classes.xml:204(para)
+msgid "Properties need <emphasis>not</emphasis> be declared public - Hibernate can persist a property with a default, <literal>protected</literal> or <literal>private</literal> get / set pair."
+msgstr ""
+
+#: persistent_classes.xml:215(title)
+msgid "Implementing inheritance"
+msgstr ""
+
+#: persistent_classes.xml:217(para)
+msgid "A subclass must also observe the first and second rules. It inherits its identifier property from the superclass, <literal>Cat</literal>."
+msgstr ""
+
+#: persistent_classes.xml:237(title)
+msgid "Implementing <literal>equals()</literal> and <literal>hashCode()</literal>"
+msgstr ""
+
+#: persistent_classes.xml:239(para)
+msgid "You have to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods if you"
+msgstr ""
+
+#: persistent_classes.xml:245(para)
+msgid "intend to put instances of persistent classes in a <literal>Set</literal> (the recommended way to represent many-valued associations) <emphasis>and</emphasis>"
+msgstr ""
+
+#: persistent_classes.xml:252(para)
+msgid "intend to use reattachment of detached instances"
+msgstr ""
+
+#: persistent_classes.xml:258(para)
+msgid "Hibernate guarantees equivalence of persistent identity (database row) and Java identity only inside a particular session scope. So as soon as we mix instances retrieved in different sessions, we must implement <literal>equals()</literal> and <literal>hashCode()</literal> if we wish to have meaningful semantics for <literal>Set</literal>s."
+msgstr ""
+
+#: persistent_classes.xml:266(para)
+msgid "The most obvious way is to implement <literal>equals()</literal>/<literal>hashCode()</literal> by comparing the identifier value of both objects. If the value is the same, both must be the same database row, they are therefore equal (if both are added to a <literal>Set</literal>, we will only have one element in the <literal>Set</literal>). Unfortunately, we can't use that approach with generated identifiers! Hibernate will only assign identifier values to objects that are persistent, a newly created instance will not have any identifier value! Furthermore, if an instance is unsaved and currently in a <literal>Set</literal>, saving it will assign an identifier value to the object. If <literal>equals()</literal> and <literal>hashCode()</literal> are based on the identifier value, the hash code would change, breaking the contract of the <literal>Set</literal>. See the Hibernate website for a full discussion of this problem. Note that this is not a Hibernate issue, but !
normal Java semantics of object identity and equality."
+msgstr ""
+
+#: persistent_classes.xml:280(para)
+msgid "We recommend implementing <literal>equals()</literal> and <literal>hashCode()</literal> using <emphasis>Business key equality</emphasis>. Business key equality means that the <literal>equals()</literal> method compares only the properties that form the business key, a key that would identify our instance in the real world (a <emphasis>natural</emphasis> candidate key):"
+msgstr ""
+
+#: persistent_classes.xml:312(para)
+msgid "Note that a business key does not have to be as solid as a database primary key candidate (see <xref linkend=\"transactions-basics-identity\"/>). Immutable or unique properties are usually good candidates for a business key."
+msgstr ""
+
+#: persistent_classes.xml:322(title)
+msgid "Dynamic models"
+msgstr ""
+
+#: persistent_classes.xml:325(emphasis)
+msgid "Note that the following features are currently considered experimental and may change in the near future."
+msgstr ""
+
+#: persistent_classes.xml:329(para)
+msgid "Persistent entities don't necessarily have to be represented as POJO classes or as JavaBean objects at runtime. Hibernate also supports dynamic models (using <literal>Map</literal>s of <literal>Map</literal>s at runtime) and the representation of entities as DOM4J trees. With this approach, you don't write persistent classes, only mapping files."
+msgstr ""
+
+#: persistent_classes.xml:337(para)
+msgid "By default, Hibernate works in normal POJO mode. You may set a default entity representation mode for a particular <literal>SessionFactory</literal> using the <literal>default_entity_mode</literal> configuration option (see <xref linkend=\"configuration-optional-properties\"/>."
+msgstr ""
+
+#: persistent_classes.xml:344(para)
+msgid "The following examples demonstrates the representation using <literal>Map</literal>s. First, in the mapping file, an <literal>entity-name</literal> has to be declared instead of (or in addition to) a class name:"
+msgstr ""
+
+#: persistent_classes.xml:384(para)
+msgid "Note that even though associations are declared using target class names, the target type of an associations may also be a dynamic entity instead of a POJO."
+msgstr ""
+
+#: persistent_classes.xml:391(para)
+msgid "After setting the default entity mode to <literal>dynamic-map</literal> for the <literal>SessionFactory</literal>, we can at runtime work with <literal>Map</literal>s of <literal>Map</literal>s:"
+msgstr ""
+
+#: persistent_classes.xml:419(para)
+msgid "The advantages of a dynamic mapping are quick turnaround time for prototyping without the need for entity class implementation. However, you lose compile-time type checking and will very likely deal with many exceptions at runtime. Thanks to the Hibernate mapping, the database schema can easily be normalized and sound, allowing to add a proper domain model implementation on top later on."
+msgstr ""
+
+#: persistent_classes.xml:427(para)
+msgid "Entity representation modes can also be set on a per <literal>Session</literal> basis:"
+msgstr ""
+
+#: persistent_classes.xml:446(para)
+msgid "Please note that the call to <literal>getSession()</literal> using an <literal>EntityMode</literal> is on the <literal>Session</literal> API, not the <literal>SessionFactory</literal>. That way, the new <literal>Session</literal> shares the underlying JDBC connection, transaction, and other context information. This means you don't have tocall <literal>flush()</literal> and <literal>close()</literal> on the secondary <literal>Session</literal>, and also leave the transaction and connection handling to the primary unit of work."
+msgstr ""
+
+#: persistent_classes.xml:456(para)
+msgid "More information about the XML representation capabilities can be found in <xref linkend=\"xml\"/>."
+msgstr ""
+
+#: persistent_classes.xml:464(title)
+msgid "Tuplizers"
+msgstr ""
+
+#: persistent_classes.xml:466(para)
+msgid "<literal>org.hibernate.tuple.Tuplizer</literal>, and its sub-interfaces, are responsible for managing a particular representation of a piece of data, given that representation's <literal>org.hibernate.EntityMode</literal>. If a given piece of data is thought of as a data structure, then a tuplizer is the thing which knows how to create such a data structure and how to extract values from and inject values into such a data structure. For example, for the POJO entity mode, the correpsonding tuplizer knows how create the POJO through its constructor and how to access the POJO properties using the defined property accessors. There are two high-level types of Tuplizers, represented by the <literal>org.hibernate.tuple.entity.EntityTuplizer</literal> and <literal>org.hibernate.tuple.component.ComponentTuplizer</literal> interfaces. <literal>EntityTuplizer</literal>s are responsible for managing the above mentioned contracts in regards to entities, while <literal>ComponentTu!
plizer</literal>s do the same for components."
+msgstr ""
+
+#: persistent_classes.xml:481(para)
+msgid "Users may also plug in their own tuplizers. Perhaps you require that a <literal>java.util.Map</literal> implementation other than <literal>java.util.HashMap</literal> be used while in the dynamic-map entity-mode; or perhaps you need to define a different proxy generation strategy than the one used by default. Both would be achieved by defining a custom tuplizer implementation. Tuplizers definitions are attached to the entity or component mapping they are meant to manage. Going back to the example of our customer entity:"
+msgstr ""
+
+#: persistent_classes.xml:529(para)
+msgid "TODO: Document user-extension framework in the property and proxy packages"
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: persistent_classes.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/preface.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/preface.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/preface.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,72 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:33-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: preface.xml:21(title)
+msgid "Preface"
+msgstr ""
+
+#: preface.xml:23(para)
+msgid "Working with object-oriented software and a relational database can be cumbersome and time consuming in today's enterprise environments. Hibernate is an object/relational mapping tool for Java environments. The term object/relational mapping (ORM) refers to the technique of mapping a data representation from an object model to a relational data model with a SQL-based schema."
+msgstr ""
+
+#: preface.xml:31(para)
+msgid "Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities and can significantly reduce development time otherwise spent with manual data handling in SQL and JDBC."
+msgstr ""
+
+#: preface.xml:38(para)
+msgid "Hibernates goal is to relieve the developer from 95 percent of common data persistence related programming tasks. Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate vendor-specific SQL code and will help with the common task of result set translation from a tabular representation to a graph of objects."
+msgstr ""
+
+#: preface.xml:48(para)
+msgid "If you are new to Hibernate and Object/Relational Mapping or even Java, please follow these steps:"
+msgstr ""
+
+#: preface.xml:55(para)
+msgid "Read <xref linkend=\"tutorial\"/> for a tutorial with step-by-step instructions. The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr ""
+
+#: preface.xml:63(para)
+msgid "Read <xref linkend=\"architecture\"/> to understand the environments where Hibernate can be used."
+msgstr ""
+
+#: preface.xml:69(para)
+msgid "Have a look at the <literal>eg/</literal> directory in the Hibernate distribution, it contains a simple standalone application. Copy your JDBC driver to the <literal>lib/</literal> directory and edit <literal>etc/hibernate.properties</literal>, specifying correct values for your database. From a command prompt in the distribution directory, type <literal>ant eg</literal> (using Ant), or under Windows, type <literal>build eg</literal>."
+msgstr ""
+
+#: preface.xml:80(para)
+msgid "Use this reference documentation as your primary source of information. Consider reading <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2) if you need more help with application design or if you prefer a step-by-step tutorial. Also visit http://caveatemptor.hibernate.org and download the example application for Java Persistence with Hibernate."
+msgstr ""
+
+#: preface.xml:90(para)
+msgid "FAQs are answered on the Hibernate website."
+msgstr ""
+
+#: preface.xml:95(para)
+msgid "Third party demos, examples, and tutorials are linked on the Hibernate website."
+msgstr ""
+
+#: preface.xml:101(para)
+msgid "The Community Area on the Hibernate website is a good resource for design patterns and various integration solutions (Tomcat, JBoss AS, Struts, EJB, etc.)."
+msgstr ""
+
+#: preface.xml:109(para)
+msgid "If you have questions, use the user forum linked on the Hibernate website. We also provide a JIRA issue trackings system for bug reports and feature requests. If you are interested in the development of Hibernate, join the developer mailing list. If you are interested in translating this documentation into your language, contact us on the developer mailing list."
+msgstr ""
+
+#: preface.xml:117(para)
+msgid "Commercial development support, production support, and training for Hibernate is available through JBoss Inc. (see http://www.hibernate.org/SupportTraining/). Hibernate is a Professional Open Source project and a critical component of the JBoss Enterprise Middleware System (JEMS) suite of products."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: preface.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/query_criteria.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/query_criteria.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/query_criteria.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,184 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:33-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: query_criteria.xml:5(title)
+msgid "Criteria Queries"
+msgstr ""
+
+#: query_criteria.xml:7(para)
+msgid "Hibernate features an intuitive, extensible criteria query API."
+msgstr ""
+
+#: query_criteria.xml:12(title)
+msgid "Creating a <literal>Criteria</literal> instance"
+msgstr ""
+
+#: query_criteria.xml:14(para)
+msgid "The interface <literal>org.hibernate.Criteria</literal> represents a query against a particular persistent class. The <literal>Session</literal> is a factory for <literal>Criteria</literal> instances."
+msgstr ""
+
+#: query_criteria.xml:27(title)
+msgid "Narrowing the result set"
+msgstr ""
+
+#: query_criteria.xml:29(para)
+msgid "An individual query criterion is an instance of the interface <literal>org.hibernate.criterion.Criterion</literal>. The class <literal>org.hibernate.criterion.Restrictions</literal> defines factory methods for obtaining certain built-in <literal>Criterion</literal> types."
+msgstr ""
+
+#: query_criteria.xml:42(para)
+msgid "Restrictions may be grouped logically."
+msgstr ""
+
+#: query_criteria.xml:64(para)
+msgid "There are quite a range of built-in criterion types (<literal>Restrictions</literal> subclasses), but one that is especially useful lets you specify SQL directly."
+msgstr ""
+
+#: query_criteria.xml:73(para)
+msgid "The <literal>{alias}</literal> placeholder with be replaced by the row alias of the queried entity."
+msgstr ""
+
+#: query_criteria.xml:78(para)
+msgid "An alternative approach to obtaining a criterion is to get it from a <literal>Property</literal> instance. You can create a <literal>Property</literal> by calling <literal>Property.forName()</literal>."
+msgstr ""
+
+#: query_criteria.xml:99(title)
+msgid "Ordering the results"
+msgstr ""
+
+#: query_criteria.xml:101(para)
+msgid "You may order the results using <literal>org.hibernate.criterion.Order</literal>."
+msgstr ""
+
+#: query_criteria.xml:122(title)
+msgid "Associations"
+msgstr ""
+
+#: query_criteria.xml:124(para)
+msgid "You may easily specify constraints upon related entities by navigating associations using <literal>createCriteria()</literal>."
+msgstr ""
+
+#: query_criteria.xml:135(para)
+msgid "note that the second <literal>createCriteria()</literal> returns a new instance of <literal>Criteria</literal>, which refers to the elements of the <literal>kittens</literal> collection."
+msgstr ""
+
+#: query_criteria.xml:141(para)
+msgid "The following, alternate form is useful in certain circumstances."
+msgstr ""
+
+#: query_criteria.xml:151(para)
+msgid "(<literal>createAlias()</literal> does not create a new instance of <literal>Criteria</literal>.)"
+msgstr ""
+
+#: query_criteria.xml:156(para)
+msgid "Note that the kittens collections held by the <literal>Cat</literal> instances returned by the previous two queries are <emphasis>not</emphasis> pre-filtered by the criteria! If you wish to retrieve just the kittens that match the criteria, you must use a <literal>ResultTransformer</literal>."
+msgstr ""
+
+#: query_criteria.xml:178(title)
+msgid "Dynamic association fetching"
+msgstr ""
+
+#: query_criteria.xml:180(para)
+msgid "You may specify association fetching semantics at runtime using <literal>setFetchMode()</literal>."
+msgstr ""
+
+#: query_criteria.xml:191(para)
+msgid "This query will fetch both <literal>mate</literal> and <literal>kittens</literal> by outer join. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr ""
+
+#: query_criteria.xml:199(title)
+msgid "Example queries"
+msgstr ""
+
+#: query_criteria.xml:201(para)
+msgid "The class <literal>org.hibernate.criterion.Example</literal> allows you to construct a query criterion from a given instance."
+msgstr ""
+
+#: query_criteria.xml:213(para)
+msgid "Version properties, identifiers and associations are ignored. By default, null valued properties are excluded."
+msgstr ""
+
+#: query_criteria.xml:218(para)
+msgid "You can adjust how the <literal>Example</literal> is applied."
+msgstr ""
+
+#: query_criteria.xml:231(para)
+msgid "You can even use examples to place criteria upon associated objects."
+msgstr ""
+
+#: query_criteria.xml:244(title)
+msgid "Projections, aggregation and grouping"
+msgstr ""
+
+#: query_criteria.xml:245(para)
+msgid "The class <literal>org.hibernate.criterion.Projections</literal> is a factory for <literal>Projection</literal> instances. We apply a projection to a query by calling <literal>setProjection()</literal>."
+msgstr ""
+
+#: query_criteria.xml:265(para)
+msgid "There is no explicit \"group by\" necessary in a criteria query. Certain projection types are defined to be <emphasis>grouping projections</emphasis>, which also appear in the SQL <literal>group by</literal> clause."
+msgstr ""
+
+#: query_criteria.xml:271(para)
+msgid "An alias may optionally be assigned to a projection, so that the projected value may be referred to in restrictions or orderings. Here are two different ways to do this:"
+msgstr ""
+
+#: query_criteria.xml:287(para)
+msgid "The <literal>alias()</literal> and <literal>as()</literal> methods simply wrap a projection instance in another, aliased, instance of <literal>Projection</literal>. As a shortcut, you can assign an alias when you add the projection to a projection list:"
+msgstr ""
+
+#: query_criteria.xml:315(para)
+msgid "You can also use <literal>Property.forName()</literal> to express projections:"
+msgstr ""
+
+#: query_criteria.xml:338(title)
+msgid "Detached queries and subqueries"
+msgstr ""
+
+#: query_criteria.xml:339(para)
+msgid "The <literal>DetachedCriteria</literal> class lets you create a query outside the scope of a session, and then later execute it using some arbitrary <literal>Session</literal>."
+msgstr ""
+
+#: query_criteria.xml:353(para)
+msgid "A <literal>DetachedCriteria</literal> may also be used to express a subquery. Criterion instances involving subqueries may be obtained via <literal>Subqueries</literal> or <literal>Property</literal>."
+msgstr ""
+
+#: query_criteria.xml:371(para)
+msgid "Even correlated subqueries are possible:"
+msgstr ""
+
+#: query_criteria.xml:389(title)
+msgid "Queries by natural identifier"
+msgstr ""
+
+#: query_criteria.xml:391(para)
+msgid "For most queries, including criteria queries, the query cache is not very efficient, because query cache invalidation occurs too frequently. However, there is one special kind of query where we can optimize the cache invalidation algorithm: lookups by a constant natural key. In some applications, this kind of query occurs frequently. The criteria API provides special provision for this use case."
+msgstr ""
+
+#: query_criteria.xml:399(para)
+msgid "First, you should map the natural key of your entity using <literal><natural-id></literal>, and enable use of the second-level cache."
+msgstr ""
+
+#: query_criteria.xml:416(para)
+msgid "Note that this functionality is not intended for use with entities with <emphasis>mutable</emphasis> natural keys."
+msgstr ""
+
+#: query_criteria.xml:421(para)
+msgid "Next, enable the Hibernate query cache."
+msgstr ""
+
+#: query_criteria.xml:425(para)
+msgid "Now, <literal>Restrictions.naturalId()</literal> allows us to make use of the more efficient cache algorithm."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: query_criteria.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/query_hql.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/query_hql.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/query_hql.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,644 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:34-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: query_hql.xml:5(title)
+msgid "HQL: The Hibernate Query Language"
+msgstr ""
+
+#: query_hql.xml:7(para)
+msgid "Hibernate is equipped with an extremely powerful query language that (quite intentionally) looks very much like SQL. But don't be fooled by the syntax; HQL is fully object-oriented, understanding notions like inheritence, polymorphism and association."
+msgstr ""
+
+#: query_hql.xml:14(title)
+msgid "Case Sensitivity"
+msgstr ""
+
+#: query_hql.xml:16(para)
+msgid "Queries are case-insensitive, except for names of Java classes and properties. So <literal>SeLeCT</literal> is the same as <literal>sELEct</literal> is the same as <literal>SELECT</literal> but <literal>org.hibernate.eg.FOO</literal> is not <literal>org.hibernate.eg.Foo</literal> and <literal>foo.barSet</literal> is not <literal>foo.BARSET</literal>."
+msgstr ""
+
+#: query_hql.xml:27(para)
+msgid "This manual uses lowercase HQL keywords. Some users find queries with uppercase keywords more readable, but we find this convention ugly when embedded in Java code."
+msgstr ""
+
+#: query_hql.xml:35(title)
+msgid "The from clause"
+msgstr ""
+
+#: query_hql.xml:37(para)
+msgid "The simplest possible Hibernate query is of the form:"
+msgstr ""
+
+#: query_hql.xml:43(para)
+msgid "which simply returns all instances of the class <literal>eg.Cat</literal>. We don't usually need to qualify the class name, since <literal>auto-import</literal> is the default. So we almost always just write:"
+msgstr ""
+
+#: query_hql.xml:51(para)
+msgid "Most of the time, you will need to assign an <emphasis>alias</emphasis>, since you will want to refer to the <literal>Cat</literal> in other parts of the query."
+msgstr ""
+
+#: query_hql.xml:59(para)
+msgid "This query assigns the alias <literal>cat</literal> to <literal>Cat</literal> instances, so we could use that alias later in the query. The <literal>as</literal> keyword is optional; we could also write:"
+msgstr ""
+
+#: query_hql.xml:67(para)
+msgid "Multiple classes may appear, resulting in a cartesian product or \"cross\" join."
+msgstr ""
+
+#: query_hql.xml:74(para)
+msgid "It is considered good practice to name query aliases using an initial lowercase, consistent with Java naming standards for local variables (eg. <literal>domesticCat</literal>)."
+msgstr ""
+
+#: query_hql.xml:83(title)
+msgid "Associations and joins"
+msgstr ""
+
+#: query_hql.xml:85(para)
+msgid "We may also assign aliases to associated entities, or even to elements of a collection of values, using a <literal>join</literal>."
+msgstr ""
+
+#: query_hql.xml:98(para)
+msgid "The supported join types are borrowed from ANSI SQL"
+msgstr ""
+
+#: query_hql.xml:105(literal)
+msgid "inner join"
+msgstr ""
+
+#: query_hql.xml:110(literal)
+msgid "left outer join"
+msgstr ""
+
+#: query_hql.xml:115(literal)
+msgid "right outer join"
+msgstr ""
+
+#: query_hql.xml:119(para)
+msgid "<literal>full join</literal> (not usually useful)"
+msgstr ""
+
+#: query_hql.xml:125(para)
+msgid "The <literal>inner join</literal>, <literal>left outer join</literal> and <literal>right outer join</literal> constructs may be abbreviated."
+msgstr ""
+
+#: query_hql.xml:134(para)
+msgid "You may supply extra join conditions using the HQL <literal>with</literal> keyword."
+msgstr ""
+
+#: query_hql.xml:143(para)
+msgid "In addition, a \"fetch\" join allows associations or collections of values to be initialized along with their parent objects, using a single select. This is particularly useful in the case of a collection. It effectively overrides the outer join and lazy declarations of the mapping file for associations and collections. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr ""
+
+#: query_hql.xml:155(para)
+msgid "A fetch join does not usually need to assign an alias, because the associated objects should not be used in the <literal>where</literal> clause (or any other clause). Also, the associated objects are not returned directly in the query results. Instead, they may be accessed via the parent object. The only reason we might need an alias is if we are recursively join fetching a further collection:"
+msgstr ""
+
+#: query_hql.xml:168(para)
+msgid "Note that the <literal>fetch</literal> construct may not be used in queries called using <literal>iterate()</literal> (though <literal>scroll()</literal> can be used). Nor should <literal>fetch</literal> be used together with <literal>setMaxResults()</literal> or <literal>setFirstResult()</literal> as these operations are based on the result rows, which usually contain duplicates for eager collection fetching, hence, the number of rows is not what you'd expect. Nor may <literal>fetch</literal> be used together with an ad hoc <literal>with</literal> condition. It is possible to create a cartesian product by join fetching more than one collection in a query, so take care in this case. Join fetching multiple collection roles also sometimes gives unexpected results for bag mappings, so be careful about how you formulate your queries in this case. Finally, note that <literal>full join fetch</literal> and <literal>right join fetch</literal> are not meaningful."
+msgstr ""
+
+#: query_hql.xml:183(para)
+msgid "If you are using property-level lazy fetching (with bytecode instrumentation), it is possible to force Hibernate to fetch the lazy properties immediately (in the first query) using <literal>fetch all properties</literal>."
+msgstr ""
+
+#: query_hql.xml:195(title)
+msgid "Forms of join syntax"
+msgstr ""
+
+#: query_hql.xml:197(para)
+msgid "HQL supports two forms of association joining: <literal>implicit</literal> and <literal>explicit</literal>."
+msgstr ""
+
+#: query_hql.xml:201(para)
+msgid "The queries shown in the previous section all use the <literal>explicit</literal> form where the join keyword is explicitly used in the from clause. This is the recommended form."
+msgstr ""
+
+#: query_hql.xml:206(para)
+msgid "The <literal>implicit</literal> form does not use the join keyword. Instead, the associations are \"dereferenced\" using dot-notation. <literal>implicit</literal> joins can appear in any of the HQL clauses. <literal>implicit</literal> join result in inner joins in the resulting SQL statement."
+msgstr ""
+
+#: query_hql.xml:217(title)
+msgid "Refering to identifier property"
+msgstr ""
+
+#: query_hql.xml:219(para)
+msgid "There are, generally speaking, 2 ways to refer to an entity's identifier property:"
+msgstr ""
+
+#: query_hql.xml:224(para)
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the identifier property of an entity <emphasis>provided that entity does not define a non-identifier property named id</emphasis>."
+msgstr ""
+
+#: query_hql.xml:231(para)
+msgid "If the entity defines a named identifier property, you may use that property name."
+msgstr ""
+
+#: query_hql.xml:237(para)
+msgid "References to composite identifier properties follow the same naming rules. If the entity has a non-identifier property named id, the composite identifier property can only be referenced by its defined named; otherwise, the special <literal>id</literal> property can be used to rerference the identifier property."
+msgstr ""
+
+#: query_hql.xml:244(para)
+msgid "Note: this has changed significantly starting in version 3.2.2. In previous versions, <literal>id</literal><emphasis>always</emphasis> referred to the identifier property no matter what its actual name. A ramification of that decision was that non-identifier properties named <literal>id</literal> could never be referenced in Hibernate queries."
+msgstr ""
+
+#: query_hql.xml:253(title)
+msgid "The select clause"
+msgstr ""
+
+#: query_hql.xml:255(para)
+msgid "The <literal>select</literal> clause picks which objects and properties to return in the query result set. Consider:"
+msgstr ""
+
+#: query_hql.xml:264(para)
+msgid "The query will select <literal>mate</literal>s of other <literal>Cat</literal>s. Actually, you may express this query more compactly as:"
+msgstr ""
+
+#: query_hql.xml:271(para)
+msgid "Queries may return properties of any value type including properties of component type:"
+msgstr ""
+
+#: query_hql.xml:280(para)
+msgid "Queries may return multiple objects and/or properties as an array of type <literal>Object[]</literal>,"
+msgstr ""
+
+#: query_hql.xml:290(para)
+msgid "or as a <literal>List</literal>,"
+msgstr ""
+
+#: query_hql.xml:299(para)
+msgid "or as an actual typesafe Java object,"
+msgstr ""
+
+#: query_hql.xml:308(para)
+msgid "assuming that the class <literal>Family</literal> has an appropriate constructor."
+msgstr ""
+
+#: query_hql.xml:312(para)
+msgid "You may assign aliases to selected expressions using <literal>as</literal>:"
+msgstr ""
+
+#: query_hql.xml:319(para)
+msgid "This is most useful when used together with <literal>select new map</literal>:"
+msgstr ""
+
+#: query_hql.xml:326(para)
+msgid "This query returns a <literal>Map</literal> from aliases to selected values."
+msgstr ""
+
+#: query_hql.xml:333(title)
+msgid "Aggregate functions"
+msgstr ""
+
+#: query_hql.xml:335(para)
+msgid "HQL queries may even return the results of aggregate functions on properties:"
+msgstr ""
+
+#. NO LONGER SUPPORTED
+#. <para>
+#. Collections may also appear inside aggregate functions in the <literal>select</literal>
+#. clause.
+#. </para>
+#.
+#. <programlisting><![CDATA[select cat, count( elements(cat.kittens) )
+#. from Cat cat group by cat]]></programlisting>
+#: query_hql.xml:352(para)
+msgid "The supported aggregate functions are"
+msgstr ""
+
+#: query_hql.xml:359(literal)
+msgid "avg(...), sum(...), min(...), max(...)"
+msgstr ""
+
+#: query_hql.xml:364(literal)
+msgid "count(*)"
+msgstr ""
+
+#: query_hql.xml:369(literal)
+msgid "count(...), count(distinct ...), count(all...)"
+msgstr ""
+
+#: query_hql.xml:374(para)
+msgid "You may use arithmetic operators, concatenation, and recognized SQL functions in the select clause:"
+msgstr ""
+
+#: query_hql.xml:386(para)
+msgid "The <literal>distinct</literal> and <literal>all</literal> keywords may be used and have the same semantics as in SQL."
+msgstr ""
+
+#: query_hql.xml:398(title)
+msgid "Polymorphic queries"
+msgstr ""
+
+#: query_hql.xml:400(para)
+msgid "A query like:"
+msgstr ""
+
+#: query_hql.xml:406(para)
+msgid "returns instances not only of <literal>Cat</literal>, but also of subclasses like <literal>DomesticCat</literal>. Hibernate queries may name <emphasis>any</emphasis> Java class or interface in the <literal>from</literal> clause. The query will return instances of all persistent classes that extend that class or implement the interface. The following query would return all persistent objects:"
+msgstr ""
+
+#: query_hql.xml:416(para)
+msgid "The interface <literal>Named</literal> might be implemented by various persistent classes:"
+msgstr ""
+
+#: query_hql.xml:423(para)
+msgid "Note that these last two queries will require more than one SQL <literal>SELECT</literal>. This means that the <literal>order by</literal> clause does not correctly order the whole result set. (It also means you can't call these queries using <literal>Query.scroll()</literal>.)"
+msgstr ""
+
+#: query_hql.xml:432(title)
+msgid "The where clause"
+msgstr ""
+
+#: query_hql.xml:434(para)
+msgid "The <literal>where</literal> clause allows you to narrow the list of instances returned. If no alias exists, you may refer to properties by name:"
+msgstr ""
+
+#: query_hql.xml:441(para)
+msgid "If there is an alias, use a qualified property name:"
+msgstr ""
+
+#: query_hql.xml:447(para)
+msgid "returns instances of <literal>Cat</literal> named 'Fritz'."
+msgstr ""
+
+#: query_hql.xml:455(para)
+msgid "will return all instances of <literal>Foo</literal> for which there exists an instance of <literal>bar</literal> with a <literal>date</literal> property equal to the <literal>startDate</literal> property of the <literal>Foo</literal>. Compound path expressions make the <literal>where</literal> clause extremely powerful. Consider:"
+msgstr ""
+
+#: query_hql.xml:466(para)
+msgid "This query translates to an SQL query with a table (inner) join. If you were to write something like"
+msgstr ""
+
+#: query_hql.xml:474(para)
+msgid "you would end up with a query that would require four table joins in SQL."
+msgstr ""
+
+#: query_hql.xml:478(para)
+msgid "The <literal>=</literal> operator may be used to compare not only properties, but also instances:"
+msgstr ""
+
+#: query_hql.xml:489(para)
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the unique identifier of an object. See <xref linkend=\"queryhql-identifier-property\"/> for more information."
+msgstr ""
+
+#: query_hql.xml:499(para)
+msgid "The second query is efficient. No table join is required!"
+msgstr ""
+
+#: query_hql.xml:503(para)
+msgid "Properties of composite identifiers may also be used. Suppose <literal>Person</literal> has a composite identifier consisting of <literal>country</literal> and <literal>medicareNumber</literal>. Again, see <xref linkend=\"queryhql-identifier-property\"/> for more information regarding referencing identifier properties."
+msgstr ""
+
+#: query_hql.xml:518(para)
+msgid "Once again, the second query requires no table join."
+msgstr ""
+
+#: query_hql.xml:522(para)
+msgid "Likewise, the special property <literal>class</literal> accesses the discriminator value of an instance in the case of polymorphic persistence. A Java class name embedded in the where clause will be translated to its discriminator value."
+msgstr ""
+
+#: query_hql.xml:530(para)
+msgid "You may also use components or composite user types, or properties of said component types. See <xref linkend=\"queryhql-coomponents\"/> for more details."
+msgstr ""
+
+#: query_hql.xml:535(para)
+msgid "An \"any\" type has the special properties <literal>id</literal> and <literal>class</literal>, allowing us to express a join in the following way (where <literal>AuditLog.item</literal> is a property mapped with <literal><any></literal>)."
+msgstr ""
+
+#: query_hql.xml:544(para)
+msgid "Notice that <literal>log.item.class</literal> and <literal>payment.class</literal> would refer to the values of completely different database columns in the above query."
+msgstr ""
+
+#: query_hql.xml:552(title)
+msgid "Expressions"
+msgstr ""
+
+#: query_hql.xml:554(para)
+msgid "Expressions allowed in the <literal>where</literal> clause include most of the kind of things you could write in SQL:"
+msgstr ""
+
+#: query_hql.xml:561(para)
+msgid "mathematical operators <literal>+, -, *, /</literal>"
+msgstr ""
+
+#: query_hql.xml:566(para)
+msgid "binary comparison operators <literal>=, >=, <=, <>, !=, like</literal>"
+msgstr ""
+
+#: query_hql.xml:571(para)
+msgid "logical operations <literal>and, or, not</literal>"
+msgstr ""
+
+#: query_hql.xml:576(para)
+msgid "Parentheses <literal>( )</literal>, indicating grouping"
+msgstr ""
+
+#: query_hql.xml:581(para)
+msgid "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> and <literal>not member of</literal>"
+msgstr ""
+
+#: query_hql.xml:594(para)
+msgid "\"Simple\" case, <literal>case ... when ... then ... else ... end</literal>, and \"searched\" case, <literal>case when ... then ... else ... end</literal>"
+msgstr ""
+
+#: query_hql.xml:600(para)
+msgid "string concatenation <literal>...||...</literal> or <literal>concat(...,...)</literal>"
+msgstr ""
+
+#: query_hql.xml:605(para)
+msgid "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+msgstr ""
+
+#: query_hql.xml:611(para)
+msgid "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+msgstr ""
+
+#: query_hql.xml:618(para)
+msgid "Any function or operator defined by EJB-QL 3.0: <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()</literal>"
+msgstr ""
+
+#: query_hql.xml:624(para)
+msgid "<literal>coalesce()</literal> and <literal>nullif()</literal>"
+msgstr ""
+
+#: query_hql.xml:629(para)
+msgid "<literal>str()</literal> for converting numeric or temporal values to a readable string"
+msgstr ""
+
+#: query_hql.xml:635(para)
+msgid "<literal>cast(... as ...)</literal>, where the second argument is the name of a Hibernate type, and <literal>extract(... from ...)</literal> if ANSI <literal>cast()</literal> and <literal>extract()</literal> is supported by the underlying database"
+msgstr ""
+
+#: query_hql.xml:643(para)
+msgid "the HQL <literal>index()</literal> function, that applies to aliases of a joined indexed collection"
+msgstr ""
+
+#: query_hql.xml:649(para)
+msgid "HQL functions that take collection-valued path expressions: <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal>, along with the special <literal>elements()</literal> and <literal>indices</literal> functions which may be quantified using <literal>some, all, exists, any, in</literal>."
+msgstr ""
+
+#: query_hql.xml:657(para)
+msgid "Any database-supported SQL scalar function like <literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>"
+msgstr ""
+
+#: query_hql.xml:663(para)
+msgid "JDBC-style positional parameters <literal>?</literal>"
+msgstr ""
+
+#: query_hql.xml:668(para)
+msgid "named parameters <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+msgstr ""
+
+#: query_hql.xml:673(para)
+msgid "SQL literals <literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+msgstr ""
+
+#: query_hql.xml:679(para)
+msgid "Java <literal>public static final</literal> constants <literal>eg.Color.TABBY</literal>"
+msgstr ""
+
+#: query_hql.xml:685(para)
+msgid "<literal>in</literal> and <literal>between</literal> may be used as follows:"
+msgstr ""
+
+#: query_hql.xml:693(para)
+msgid "and the negated forms may be written"
+msgstr ""
+
+#: query_hql.xml:701(para)
+msgid "Likewise, <literal>is null</literal> and <literal>is not null</literal> may be used to test for null values."
+msgstr ""
+
+#: query_hql.xml:706(para)
+msgid "Booleans may be easily used in expressions by declaring HQL query substitutions in Hibernate configuration:"
+msgstr ""
+
+#: query_hql.xml:713(para)
+msgid "This will replace the keywords <literal>true</literal> and <literal>false</literal> with the literals <literal>1</literal> and <literal>0</literal> in the translated SQL from this HQL:"
+msgstr ""
+
+#: query_hql.xml:720(para)
+msgid "You may test the size of a collection with the special property <literal>size</literal>, or the special <literal>size()</literal> function."
+msgstr ""
+
+#: query_hql.xml:729(para)
+msgid "For indexed collections, you may refer to the minimum and maximum indices using <literal>minindex</literal> and <literal>maxindex</literal> functions. Similarly, you may refer to the minimum and maximum elements of a collection of basic type using the <literal>minelement</literal> and <literal>maxelement</literal> functions."
+msgstr ""
+
+#: query_hql.xml:743(para)
+msgid "The SQL functions <literal>any, some, all, exists, in</literal> are supported when passed the element or index set of a collection (<literal>elements</literal> and <literal>indices</literal> functions) or the result of a subquery (see below)."
+msgstr ""
+
+#: query_hql.xml:761(para)
+msgid "Note that these constructs - <literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal> - may only be used in the where clause in Hibernate3."
+msgstr ""
+
+#: query_hql.xml:768(para)
+msgid "Elements of indexed collections (arrays, lists, maps) may be referred to by index (in a where clause only):"
+msgstr ""
+
+#: query_hql.xml:785(para)
+msgid "The expression inside <literal>[]</literal> may even be an arithmetic expression."
+msgstr ""
+
+#: query_hql.xml:792(para)
+msgid "HQL also provides the built-in <literal>index()</literal> function, for elements of a one-to-many association or collection of values."
+msgstr ""
+
+#: query_hql.xml:801(para)
+msgid "Scalar SQL functions supported by the underlying database may be used"
+msgstr ""
+
+#: query_hql.xml:807(para)
+msgid "If you are not yet convinced by all this, think how much longer and less readable the following query would be in SQL:"
+msgstr ""
+
+#: query_hql.xml:820(para)
+msgid "<emphasis>Hint:</emphasis> something like"
+msgstr ""
+
+#: query_hql.xml:845(title)
+msgid "The order by clause"
+msgstr ""
+
+#: query_hql.xml:847(para)
+msgid "The list returned by a query may be ordered by any property of a returned class or components:"
+msgstr ""
+
+#: query_hql.xml:854(para)
+msgid "The optional <literal>asc</literal> or <literal>desc</literal> indicate ascending or descending order respectively."
+msgstr ""
+
+#: query_hql.xml:861(title)
+msgid "The group by clause"
+msgstr ""
+
+#: query_hql.xml:863(para)
+msgid "A query that returns aggregate values may be grouped by any property of a returned class or components:"
+msgstr ""
+
+#: query_hql.xml:875(para)
+msgid "A <literal>having</literal> clause is also allowed."
+msgstr ""
+
+#: query_hql.xml:884(para)
+msgid "SQL functions and aggregate functions are allowed in the <literal>having</literal> and <literal>order by</literal> clauses, if supported by the underlying database (eg. not in MySQL)."
+msgstr ""
+
+#: query_hql.xml:897(para)
+msgid "Note that neither the <literal>group by</literal> clause nor the <literal>order by</literal> clause may contain arithmetic expressions. Also note that Hibernate currently does not expand a grouped entity, so you can't write <literal>group by cat</literal> if all properties of <literal>cat</literal> are non-aggregated. You have to list all non-aggregated properties explicitly."
+msgstr ""
+
+#: query_hql.xml:909(title)
+msgid "Subqueries"
+msgstr ""
+
+#: query_hql.xml:911(para)
+msgid "For databases that support subselects, Hibernate supports subqueries within queries. A subquery must be surrounded by parentheses (often by an SQL aggregate function call). Even correlated subqueries (subqueries that refer to an alias in the outer query) are allowed."
+msgstr ""
+
+#: query_hql.xml:940(para)
+msgid "Note that HQL subqueries may occur only in the select or where clauses."
+msgstr ""
+
+#: query_hql.xml:944(para)
+msgid "Note that subqueries can also utilize <literal>row value constructor</literal> syntax. See <xref linkend=\"queryhql-tuple\"/> for more details."
+msgstr ""
+
+#: query_hql.xml:952(title)
+msgid "HQL examples"
+msgstr ""
+
+#: query_hql.xml:954(para)
+msgid "Hibernate queries can be quite powerful and complex. In fact, the power of the query language is one of Hibernate's main selling points. Here are some example queries very similar to queries that I used on a recent project. Note that most queries you will write are much simpler than these!"
+msgstr ""
+
+#: query_hql.xml:960(para)
+msgid "The following query returns the order id, number of items and total value of the order for all unpaid orders for a particular customer and given minimum total value, ordering the results by total value. In determining the prices, it uses the current catalog. The resulting SQL query, against the <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal> and <literal>PRICE</literal> tables has four inner joins and an (uncorrelated) subselect."
+msgstr ""
+
+#: query_hql.xml:988(para)
+msgid "What a monster! Actually, in real life, I'm not very keen on subqueries, so my query was really more like this:"
+msgstr ""
+
+#: query_hql.xml:1007(para)
+msgid "The next query counts the number of payments in each status, excluding all payments in the <literal>AWAITING_APPROVAL</literal> status where the most recent status change was made by the current user. It translates to an SQL query with two inner joins and a correlated subselect against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> and <literal>PAYMENT_STATUS_CHANGE</literal> tables."
+msgstr ""
+
+#: query_hql.xml:1031(para)
+msgid "If I would have mapped the <literal>statusChanges</literal> collection as a list, instead of a set, the query would have been much simpler to write."
+msgstr ""
+
+#: query_hql.xml:1044(para)
+msgid "The next query uses the MS SQL Server <literal>isNull()</literal> function to return all the accounts and unpaid payments for the organization to which the current user belongs. It translates to an SQL query with three inner joins, an outer join and a subselect against the <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> and <literal>ORG_USER</literal> tables."
+msgstr ""
+
+#: query_hql.xml:1060(para)
+msgid "For some databases, we would need to do away with the (correlated) subselect."
+msgstr ""
+
+#: query_hql.xml:1075(title)
+msgid "Bulk update and delete"
+msgstr ""
+
+#: query_hql.xml:1077(para)
+msgid "HQL now supports <literal>update</literal>, <literal>delete</literal> and <literal>insert ... select ...</literal> statements. See <xref linkend=\"batch-direct\"/> for details."
+msgstr ""
+
+#: query_hql.xml:1085(title)
+msgid "Tips & Tricks"
+msgstr ""
+
+#: query_hql.xml:1087(para)
+msgid "You can count the number of query results without actually returning them:"
+msgstr ""
+
+#: query_hql.xml:1093(para)
+msgid "To order a result by the size of a collection, use the following query:"
+msgstr ""
+
+#: query_hql.xml:1103(para)
+msgid "If your database supports subselects, you can place a condition upon selection size in the where clause of your query:"
+msgstr ""
+
+#: query_hql.xml:1110(para)
+msgid "If your database doesn't support subselects, use the following query:"
+msgstr ""
+
+#: query_hql.xml:1120(para)
+msgid "As this solution can't return a <literal>User</literal> with zero messages because of the inner join, the following form is also useful:"
+msgstr ""
+
+#: query_hql.xml:1131(para)
+msgid "Properties of a JavaBean can be bound to named query parameters:"
+msgstr ""
+
+#: query_hql.xml:1139(para)
+msgid "Collections are pageable by using the <literal>Query</literal> interface with a filter:"
+msgstr ""
+
+#: query_hql.xml:1148(para)
+msgid "Collection elements may be ordered or grouped using a query filter:"
+msgstr ""
+
+#: query_hql.xml:1155(para)
+msgid "You can find the size of a collection without initializing it:"
+msgstr ""
+
+#: query_hql.xml:1164(title)
+msgid "Components"
+msgstr ""
+
+#: query_hql.xml:1166(para)
+msgid "Components might be used in just about every way that simple value types can be used in HQL queries. They can appear in the <literal>select</literal> clause:"
+msgstr ""
+
+#: query_hql.xml:1174(para)
+msgid "where the Person's name property is a component. Components can also be used in the <literal>where</literal> clause:"
+msgstr ""
+
+#: query_hql.xml:1182(para)
+msgid "Components can also be used in the <literal>order by</literal> clause:"
+msgstr ""
+
+#: query_hql.xml:1189(para)
+msgid "Another common use of components is in <xref linkend=\"queryhql-tuple\">row value constructors</xref>."
+msgstr ""
+
+#: query_hql.xml:1195(title)
+msgid "Row value constructor syntax"
+msgstr ""
+
+#: query_hql.xml:1197(para)
+msgid "HQL supports the use of ANSI SQL <literal>row value constructor</literal> syntax (sometimes called <literal>tuple</literal> syntax), even though the underlying database may not support that notion. Here we are generally referring to multi-valued comparisons, typically associated with components. Consider an entity Person which defines a name component:"
+msgstr ""
+
+#: query_hql.xml:1206(para)
+msgid "That's valid syntax, although a little verbose. It be nice to make this a bit more concise and use <literal>row value constructor</literal> syntax:"
+msgstr ""
+
+#: query_hql.xml:1213(para)
+msgid "It can also be useful to specify this in the <literal>select</literal> clause:"
+msgstr ""
+
+#: query_hql.xml:1219(para)
+msgid "Another time using <literal>row value constructor</literal> syntax can be beneficial is when using subqueries needing to compare against multiple values:"
+msgstr ""
+
+#: query_hql.xml:1229(para)
+msgid "One thing to consider when deciding if you want to use this syntax is that the query will be dependent upon the ordering of the component sub-properties in the metadata."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: query_hql.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/query_sql.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/query_sql.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/query_sql.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,476 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:34-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: query_sql.xml:5(title)
+msgid "Native SQL"
+msgstr ""
+
+#: query_sql.xml:7(para)
+msgid "You may also express queries in the native SQL dialect of your database. This is useful if you want to utilize database specific features such as query hints or the <literal>CONNECT</literal> keyword in Oracle. It also provides a clean migration path from a direct SQL/JDBC based application to Hibernate."
+msgstr ""
+
+#: query_sql.xml:13(para)
+msgid "Hibernate3 allows you to specify handwritten SQL (including stored procedures) for all create, update, delete, and load operations."
+msgstr ""
+
+#: query_sql.xml:17(title)
+msgid "Using a <literal>SQLQuery</literal>"
+msgstr ""
+
+#: query_sql.xml:19(para)
+msgid "Execution of native SQL queries is controlled via the <literal>SQLQuery</literal> interface, which is obtained by calling <literal>Session.createSQLQuery()</literal>. The following describes how to use this API for querying."
+msgstr ""
+
+#: query_sql.xml:25(title)
+msgid "Scalar queries"
+msgstr ""
+
+#: query_sql.xml:27(para)
+msgid "The most basic SQL query is to get a list of scalars (values)."
+msgstr ""
+
+#: query_sql.xml:34(para)
+msgid "These will both return a List of Object arrays (Object[]) with scalar values for each column in the CATS table. Hibernate will use ResultSetMetadata to deduce the actual order and types of the returned scalar values."
+msgstr ""
+
+#: query_sql.xml:39(para)
+msgid "To avoid the overhead of using <literal>ResultSetMetadata</literal> or simply to be more explicit in what is returned one can use <literal>addScalar()</literal>."
+msgstr ""
+
+#: query_sql.xml:49(para) query_sql.xml:101(para) query_sql.xml:195(para) query_sql.xml:354(para)
+msgid "This query specified:"
+msgstr ""
+
+#: query_sql.xml:53(para) query_sql.xml:105(para) query_sql.xml:358(para)
+msgid "the SQL query string"
+msgstr ""
+
+#: query_sql.xml:57(para)
+msgid "the columns and types to return"
+msgstr ""
+
+#: query_sql.xml:61(para)
+msgid "This will still return Object arrays, but now it will not use <literal>ResultSetMetdata</literal> but will instead explicitly get the ID, NAME and BIRTHDATE column as respectively a Long, String and a Short from the underlying resultset. This also means that only these three columns will be returned, even though the query is using <literal>*</literal> and could return more than the three listed columns."
+msgstr ""
+
+#: query_sql.xml:69(para)
+msgid "It is possible to leave out the type information for all or some of the scalars."
+msgstr ""
+
+#: query_sql.xml:78(para)
+msgid "This is essentially the same query as before, but now <literal>ResultSetMetaData</literal> is used to decide the type of NAME and BIRTHDATE where as the type of ID is explicitly specified."
+msgstr ""
+
+#: query_sql.xml:82(para)
+msgid "How the java.sql.Types returned from ResultSetMetaData is mapped to Hibernate types is controlled by the Dialect. If a specific type is not mapped or does not result in the expected type it is possible to customize it via calls to <literal>registerHibernateType</literal> in the Dialect."
+msgstr ""
+
+#: query_sql.xml:90(title)
+msgid "Entity queries"
+msgstr ""
+
+#: query_sql.xml:92(para)
+msgid "The above queries were all about returning scalar values, basically returning the \"raw\" values from the resultset. The following shows how to get entity objects from a native sql query via <literal>addEntity()</literal>."
+msgstr ""
+
+#: query_sql.xml:109(para)
+msgid "the entity returned by the query"
+msgstr ""
+
+#: query_sql.xml:113(para)
+msgid "Assuming that Cat is mapped as a class with the columns ID, NAME and BIRTHDATE the above queries will both return a List where each element is a Cat entity."
+msgstr ""
+
+#: query_sql.xml:117(para)
+msgid "If the entity is mapped with a <literal>many-to-one</literal> to another entity it is required to also return this when performing the native query, otherwise a database specific \"column not found\" error will occur. The additional columns will automatically be returned when using the * notation, but we prefer to be explicit as in the following example for a <literal>many-to-one</literal> to a <literal>Dog</literal>:"
+msgstr ""
+
+#: query_sql.xml:128(para)
+msgid "This will allow cat.getDog() to function properly."
+msgstr ""
+
+#: query_sql.xml:132(title)
+msgid "Handling associations and collections"
+msgstr ""
+
+#: query_sql.xml:134(para)
+msgid "It is possible to eagerly join in the <literal>Dog</literal> to avoid the possible extra roundtrip for initializing the proxy. This is done via the <literal>addJoin()</literal> method, which allows you to join in an association or collection."
+msgstr ""
+
+#: query_sql.xml:144(para)
+msgid "In this example the returned <literal>Cat</literal>'s will have their <literal>dog</literal> property fully initialized without any extra roundtrip to the database. Notice that we added a alias name (\"cat\") to be able to specify the target property path of the join. It is possible to do the same eager joining for collections, e.g. if the <literal>Cat</literal> had a one-to-many to <literal>Dog</literal> instead."
+msgstr ""
+
+#: query_sql.xml:157(p)
+msgid "At this stage we are reaching the limits of what is possible with native queries without starting to enhance the sql queries to make them usable in Hibernate; the problems starts to arise when returning multiple entities of the same type or when the default alias/column names are not enough."
+msgstr ""
+
+#: query_sql.xml:165(title)
+msgid "Returning multiple entities"
+msgstr ""
+
+#: query_sql.xml:167(para)
+msgid "Until now the result set column names are assumed to be the same as the column names specified in the mapping document. This can be problematic for SQL queries which join multiple tables, since the same column names may appear in more than one table."
+msgstr ""
+
+#: query_sql.xml:172(para)
+msgid "Column alias injection is needed in the following query (which most likely will fail):"
+msgstr ""
+
+#: query_sql.xml:180(para)
+msgid "The intention for this query is to return two Cat instances per row, a cat and its mother. This will fail since there is a conflict of names since they are mapped to the same column names and on some databases the returned column aliases will most likely be on the form \"c.ID\", \"c.NAME\", etc. which are not equal to the columns specificed in the mappings (\"ID\" and \"NAME\")."
+msgstr ""
+
+#: query_sql.xml:187(para)
+msgid "The following form is not vulnerable to column name duplication:"
+msgstr ""
+
+#: query_sql.xml:199(para)
+msgid "the SQL query string, with placeholders for Hibernate to inject column aliases"
+msgstr ""
+
+#: query_sql.xml:204(para)
+msgid "the entities returned by the query"
+msgstr ""
+
+#: query_sql.xml:208(para)
+msgid "The {cat.*} and {mother.*} notation used above is a shorthand for \"all properties\". Alternatively, you may list the columns explicity, but even in this case we let Hibernate inject the SQL column aliases for each property. The placeholder for a column alias is just the property name qualified by the table alias. In the following example, we retrieve Cats and their mothers from a different table (cat_log) to the one declared in the mapping metadata. Notice that we may even use the property aliases in the where clause if we like."
+msgstr ""
+
+#: query_sql.xml:227(title)
+msgid "Alias and property references"
+msgstr ""
+
+#: query_sql.xml:229(para)
+msgid "For most cases the above alias injection is needed, but for queries relating to more complex mappings like composite properties, inheritance discriminators, collections etc. there are some specific aliases to use to allow Hibernate to inject the proper aliases."
+msgstr ""
+
+#: query_sql.xml:234(para)
+msgid "The following table shows the different possibilities of using the alias injection. Note: the alias names in the result are examples, each alias will have a unique and probably different name when used."
+msgstr ""
+
+#: query_sql.xml:240(title)
+msgid "Alias injection names"
+msgstr ""
+
+#: query_sql.xml:251(entry)
+msgid "Description"
+msgstr ""
+
+#: query_sql.xml:253(entry)
+msgid "Syntax"
+msgstr ""
+
+#: query_sql.xml:255(entry)
+msgid "Example"
+msgstr ""
+
+#: query_sql.xml:261(entry)
+msgid "A simple property"
+msgstr ""
+
+#: query_sql.xml:263(literal)
+msgid "{[aliasname].[propertyname]"
+msgstr ""
+
+#: query_sql.xml:265(literal)
+msgid "A_NAME as {item.name}"
+msgstr ""
+
+#: query_sql.xml:269(entry)
+msgid "A composite property"
+msgstr ""
+
+#: query_sql.xml:271(literal)
+msgid "{[aliasname].[componentname].[propertyname]}"
+msgstr ""
+
+#: query_sql.xml:273(literal)
+msgid "CURRENCY as {item.amount.currency}, VALUE as {item.amount.value}"
+msgstr ""
+
+#: query_sql.xml:278(entry)
+msgid "Discriminator of an entity"
+msgstr ""
+
+#: query_sql.xml:280(literal)
+msgid "{[aliasname].class}"
+msgstr ""
+
+#: query_sql.xml:282(literal)
+msgid "DISC as {item.class}"
+msgstr ""
+
+#: query_sql.xml:286(entry)
+msgid "All properties of an entity"
+msgstr ""
+
+#: query_sql.xml:288(literal) query_sql.xml:336(literal)
+msgid "{[aliasname].*}"
+msgstr ""
+
+#: query_sql.xml:290(literal)
+msgid "{item.*}"
+msgstr ""
+
+#: query_sql.xml:294(entry)
+msgid "A collection key"
+msgstr ""
+
+#: query_sql.xml:296(literal)
+msgid "{[aliasname].key}"
+msgstr ""
+
+#: query_sql.xml:298(literal)
+msgid "ORGID as {coll.key}"
+msgstr ""
+
+#: query_sql.xml:302(entry)
+msgid "The id of an collection"
+msgstr ""
+
+#: query_sql.xml:304(literal)
+msgid "{[aliasname].id}"
+msgstr ""
+
+#: query_sql.xml:306(literal)
+msgid "EMPID as {coll.id}"
+msgstr ""
+
+#: query_sql.xml:310(entry)
+msgid "The element of an collection"
+msgstr ""
+
+#: query_sql.xml:312(literal)
+msgid "{[aliasname].element}"
+msgstr ""
+
+#: query_sql.xml:314(literal)
+msgid "XID as {coll.element}"
+msgstr ""
+
+#: query_sql.xml:318(entry)
+msgid "roperty of the element in the collection"
+msgstr ""
+
+#: query_sql.xml:320(literal)
+msgid "{[aliasname].element.[propertyname]}"
+msgstr ""
+
+#: query_sql.xml:322(literal)
+msgid "NAME as {coll.element.name}"
+msgstr ""
+
+#: query_sql.xml:326(entry)
+msgid "All properties of the element in the collection"
+msgstr ""
+
+#: query_sql.xml:328(literal)
+msgid "{[aliasname].element.*}"
+msgstr ""
+
+#: query_sql.xml:330(literal)
+msgid "{coll.element.*}"
+msgstr ""
+
+#: query_sql.xml:334(entry)
+msgid "All properties of the the collection"
+msgstr ""
+
+#: query_sql.xml:338(literal)
+msgid "{coll.*}"
+msgstr ""
+
+#: query_sql.xml:347(title)
+msgid "Returning non-managed entities"
+msgstr ""
+
+#: query_sql.xml:349(para)
+msgid "It is possible to apply a ResultTransformer to native sql queries. Allowing it to e.g. return non-managed entities."
+msgstr ""
+
+#: query_sql.xml:362(para)
+msgid "a result transformer"
+msgstr ""
+
+#: query_sql.xml:366(para)
+msgid "The above query will return a list of <literal>CatDTO</literal> which has been instantiated and injected the values of NAME and BIRTHNAME into its corresponding properties or fields."
+msgstr ""
+
+#: query_sql.xml:373(title)
+msgid "Handling inheritance"
+msgstr ""
+
+#: query_sql.xml:375(para)
+msgid "Native sql queries which query for entities that is mapped as part of an inheritance must include all properties for the baseclass and all it subclasses."
+msgstr ""
+
+#: query_sql.xml:381(title)
+msgid "Parameters"
+msgstr ""
+
+#: query_sql.xml:383(para)
+msgid "Native sql queries support positional as well as named parameters:"
+msgstr ""
+
+#: query_sql.xml:398(title)
+msgid "Named SQL queries"
+msgstr ""
+
+#: query_sql.xml:400(para)
+msgid "Named SQL queries may be defined in the mapping document and called in exactly the same way as a named HQL query. In this case, we do <emphasis>not</emphasis> need to call <literal>addEntity()</literal>."
+msgstr ""
+
+#: query_sql.xml:419(para)
+msgid "The <literal><return-join></literal> and <literal><load-collection></literal> elements are used to join associations and define queries which initialize collections, respectively."
+msgstr ""
+
+#: query_sql.xml:440(para)
+msgid "A named SQL query may return a scalar value. You must declare the column alias and Hibernate type using the <literal><return-scalar></literal> element:"
+msgstr ""
+
+#: query_sql.xml:452(para)
+msgid "You can externalize the resultset mapping informations in a <literal><resultset></literal> element to either reuse them accross several named queries or through the <literal>setResultSetMapping()</literal> API."
+msgstr ""
+
+#: query_sql.xml:476(para)
+msgid "You can alternatively use the resultset mapping information in your hbm files directly in java code."
+msgstr ""
+
+#: query_sql.xml:486(title)
+msgid "Using return-property to explicitly specify column/alias names"
+msgstr ""
+
+#: query_sql.xml:489(para)
+msgid "With <literal><return-property></literal> you can explicitly tell Hibernate what column aliases to use, instead of using the <literal>{}</literal>-syntax to let Hibernate inject its own aliases."
+msgstr ""
+
+#: query_sql.xml:507(para)
+msgid "<literal><return-property></literal> also works with multiple columns. This solves a limitation with the <literal>{}</literal>-syntax which can not allow fine grained control of multi-column properties."
+msgstr ""
+
+#: query_sql.xml:528(para)
+msgid "Notice that in this example we used <literal><return-property></literal> in combination with the <literal>{}</literal>-syntax for injection. Allowing users to choose how they want to refer column and properties."
+msgstr ""
+
+#: query_sql.xml:533(para)
+msgid "If your mapping has a discriminator you must use <literal><return-discriminator></literal> to specify the discriminator column."
+msgstr ""
+
+#: query_sql.xml:539(title)
+msgid "Using stored procedures for querying"
+msgstr ""
+
+#: query_sql.xml:541(para)
+msgid "Hibernate 3 introduces support for queries via stored procedures and functions. Most of the following documentation is equivalent for both. The stored procedure/function must return a resultset as the first out-parameter to be able to work with Hibernate. An example of such a stored function in Oracle 9 and higher is as follows:"
+msgstr ""
+
+#: query_sql.xml:560(para)
+msgid "To use this query in Hibernate you need to map it via a named query."
+msgstr ""
+
+#: query_sql.xml:579(para)
+msgid "Notice stored procedures currently only return scalars and entities. <literal><return-join></literal> and <literal><load-collection></literal> are not supported."
+msgstr ""
+
+#: query_sql.xml:584(title)
+msgid "Rules/limitations for using stored procedures"
+msgstr ""
+
+#: query_sql.xml:586(para)
+msgid "To use stored procedures with Hibernate the procedures/functions have to follow some rules. If they do not follow those rules they are not usable with Hibernate. If you still want to use these procedures you have to execute them via <literal>session.connection()</literal>. The rules are different for each database, since database vendors have different stored procedure semantics/syntax."
+msgstr ""
+
+#: query_sql.xml:593(para)
+msgid "Stored procedure queries can't be paged with <literal>setFirstResult()/setMaxResults()</literal>."
+msgstr ""
+
+#: query_sql.xml:596(para)
+msgid "Recommended call form is standard SQL92: <literal>{ ? = call functionName(<parameters>) }</literal> or <literal>{ ? = call procedureName(<parameters>}</literal>. Native call syntax is not supported."
+msgstr ""
+
+#: query_sql.xml:601(para)
+msgid "For Oracle the following rules apply:"
+msgstr ""
+
+#: query_sql.xml:605(para)
+msgid "A function must return a result set. The first parameter of a procedure must be an <literal>OUT</literal> that returns a result set. This is done by using a <literal>SYS_REFCURSOR</literal> type in Oracle 9 or 10. In Oracle you need to define a <literal>REF CURSOR</literal> type, see Oracle literature."
+msgstr ""
+
+#: query_sql.xml:614(para)
+msgid "For Sybase or MS SQL server the following rules apply:"
+msgstr ""
+
+#: query_sql.xml:618(para)
+msgid "The procedure must return a result set. Note that since these servers can/will return multiple result sets and update counts, Hibernate will iterate the results and take the first result that is a result set as its return value. Everything else will be discarded."
+msgstr ""
+
+#: query_sql.xml:626(para)
+msgid "If you can enable <literal>SET NOCOUNT ON</literal> in your procedure it will probably be more efficient, but this is not a requirement."
+msgstr ""
+
+#: query_sql.xml:636(title)
+msgid "Custom SQL for create, update and delete"
+msgstr ""
+
+#: query_sql.xml:638(para)
+msgid "Hibernate3 can use custom SQL statements for create, update, and delete operations. The class and collection persisters in Hibernate already contain a set of configuration time generated strings (insertsql, deletesql, updatesql etc.). The mapping tags <literal><sql-insert></literal>, <literal><sql-delete></literal>, and <literal><sql-update></literal> override these strings:"
+msgstr ""
+
+#: query_sql.xml:656(para)
+msgid "The SQL is directly executed in your database, so you are free to use any dialect you like. This will of course reduce the portability of your mapping if you use database specific SQL."
+msgstr ""
+
+#: query_sql.xml:660(para)
+msgid "Stored procedures are supported if the <literal>callable</literal> attribute is set:"
+msgstr ""
+
+#: query_sql.xml:673(para)
+msgid "The order of the positional parameters are currently vital, as they must be in the same sequence as Hibernate expects them."
+msgstr ""
+
+#: query_sql.xml:676(para)
+msgid "You can see the expected order by enabling debug logging for the <literal>org.hibernate.persister.entity</literal> level. With this level enabled Hibernate will print out the static SQL that is used to create, update, delete etc. entities. (To see the expected sequence, remember to not include your custom SQL in the mapping files as that will override the Hibernate generated static sql.)"
+msgstr ""
+
+#: query_sql.xml:683(para)
+msgid "The stored procedures are in most cases (read: better do it than not) required to return the number of rows inserted/updated/deleted, as Hibernate has some runtime checks for the success of the statement. Hibernate always registers the first statement parameter as a numeric output parameter for the CUD operations:"
+msgstr ""
+
+#: query_sql.xml:705(title)
+msgid "Custom SQL for loading"
+msgstr ""
+
+#: query_sql.xml:707(para)
+msgid "You may also declare your own SQL (or HQL) queries for entity loading:"
+msgstr ""
+
+#: query_sql.xml:718(para)
+msgid "This is just a named query declaration, as discussed earlier. You may reference this named query in a class mapping:"
+msgstr ""
+
+#: query_sql.xml:729(para)
+msgid "This even works with stored procedures."
+msgstr ""
+
+#: query_sql.xml:731(para)
+msgid "You may even define a query for collection loading:"
+msgstr ""
+
+#: query_sql.xml:747(para)
+msgid "You could even define an entity loader that loads a collection by join fetching:"
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: query_sql.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/session_api.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/session_api.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/session_api.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,636 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:34-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: session_api.xml:5(title)
+msgid "Working with objects"
+msgstr ""
+
+#: session_api.xml:7(para)
+msgid "Hibernate is a full object/relational mapping solution that not only shields the developer from the details of the underlying database management system, but also offers <emphasis>state management</emphasis> of objects. This is, contrary to the management of SQL <literal>statements</literal> in common JDBC/SQL persistence layers, a very natural object-oriented view of persistence in Java applications."
+msgstr ""
+
+#: session_api.xml:16(para)
+msgid "In other words, Hibernate application developers should always think about the <emphasis>state</emphasis> of their objects, and not necessarily about the execution of SQL statements. This part is taken care of by Hibernate and is only relevant for the application developer when tuning the performance of the system."
+msgstr ""
+
+#: session_api.xml:24(title)
+msgid "Hibernate object states"
+msgstr ""
+
+#: session_api.xml:26(para)
+msgid "Hibernate defines and supports the following object states:"
+msgstr ""
+
+#: session_api.xml:32(para)
+msgid "<emphasis>Transient</emphasis> - an object is transient if it has just been instantiated using the <literal>new</literal> operator, and it is not associated with a Hibernate <literal>Session</literal>. It has no persistent representation in the database and no identifier value has been assigned. Transient instances will be destroyed by the garbage collector if the application doesn't hold a reference anymore. Use the Hibernate <literal>Session</literal> to make an object persistent (and let Hibernate take care of the SQL statements that need to be executed for this transition)."
+msgstr ""
+
+#: session_api.xml:44(para)
+msgid "<emphasis>Persistent</emphasis> - a persistent instance has a representation in the database and an identifier value. It might just have been saved or loaded, however, it is by definition in the scope of a <literal>Session</literal>. Hibernate will detect any changes made to an object in persistent state and synchronize the state with the database when the unit of work completes. Developers don't execute manual <literal>UPDATE</literal> statements, or <literal>DELETE</literal> statements when an object should be made transient."
+msgstr ""
+
+#: session_api.xml:55(para)
+msgid "<emphasis>Detached</emphasis> - a detached instance is an object that has been persistent, but its <literal>Session</literal> has been closed. The reference to the object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be reattached to a new <literal>Session</literal> at a later point in time, making it (and all the modifications) persistent again. This feature enables a programming model for long running units of work that require user think-time. We call them <emphasis>application transactions</emphasis>, i.e. a unit of work from the point of view of the user."
+msgstr ""
+
+#: session_api.xml:69(para)
+msgid "We'll now discuss the states and state transitions (and the Hibernate methods that trigger a transition) in more detail."
+msgstr ""
+
+#: session_api.xml:77(title)
+msgid "Making objects persistent"
+msgstr ""
+
+#: session_api.xml:79(para)
+msgid "Newly instantiated instances of a a persistent class are considered <emphasis>transient</emphasis> by Hibernate. We can make a transient instance <emphasis>persistent</emphasis> by associating it with a session:"
+msgstr ""
+
+#: session_api.xml:92(para)
+msgid "If <literal>Cat</literal> has a generated identifier, the identifier is generated and assigned to the <literal>cat</literal> when <literal>save()</literal> is called. If <literal>Cat</literal> has an <literal>assigned</literal> identifier, or a composite key, the identifier should be assigned to the <literal>cat</literal> instance before calling <literal>save()</literal>. You may also use <literal>persist()</literal> instead of <literal>save()</literal>, with the semantics defined in the EJB3 early draft."
+msgstr ""
+
+#: session_api.xml:104(para)
+msgid "<literal>persist()</literal> makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. <literal>persist()</literal> also guarantees that it will not execute an <literal>INSERT</literal> statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context."
+msgstr ""
+
+#: session_api.xml:115(para)
+msgid "<literal>save()</literal> does guarantee to return an identifier. If an INSERT has to be executed to get the identifier ( e.g. \"identity\" generator, not \"sequence\"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is problematic in a long-running conversation with an extended Session/persistence context."
+msgstr ""
+
+#: session_api.xml:125(para)
+msgid "Alternatively, you may assign the identifier using an overloaded version of <literal>save()</literal>."
+msgstr ""
+
+#: session_api.xml:138(para)
+msgid "If the object you make persistent has associated objects (e.g. the <literal>kittens</literal> collection in the previous example), these objects may be made persistent in any order you like unless you have a <literal>NOT NULL</literal> constraint upon a foreign key column. There is never a risk of violating foreign key constraints. However, you might violate a <literal>NOT NULL</literal> constraint if you <literal>save()</literal> the objects in the wrong order."
+msgstr ""
+
+#: session_api.xml:148(para)
+msgid "Usually you don't bother with this detail, as you'll very likely use Hibernate's <emphasis>transitive persistence</emphasis> feature to save the associated objects automatically. Then, even <literal>NOT NULL</literal> constraint violations don't occur - Hibernate will take care of everything. Transitive persistence is discussed later in this chapter."
+msgstr ""
+
+#: session_api.xml:159(title)
+msgid "Loading an object"
+msgstr ""
+
+#: session_api.xml:161(para)
+msgid "The <literal>load()</literal> methods of <literal>Session</literal> gives you a way to retrieve a persistent instance if you already know its identifier. <literal>load()</literal> takes a class object and will load the state into a newly instantiated instance of that class, in persistent state."
+msgstr ""
+
+#: session_api.xml:174(para)
+msgid "Alternatively, you can load state into a given instance:"
+msgstr ""
+
+#: session_api.xml:183(para)
+msgid "Note that <literal>load()</literal> will throw an unrecoverable exception if there is no matching database row. If the class is mapped with a proxy, <literal>load()</literal> just returns an uninitialized proxy and does not actually hit the database until you invoke a method of the proxy. This behaviour is very useful if you wish to create an association to an object without actually loading it from the database. It also allows multiple instances to be loaded as a batch if <literal>batch-size</literal> is defined for the class mapping."
+msgstr ""
+
+#: session_api.xml:194(para)
+msgid "If you are not certain that a matching row exists, you should use the <literal>get()</literal> method, which hits the database immediately and returns null if there is no matching row."
+msgstr ""
+
+#: session_api.xml:207(para)
+msgid "You may even load an object using an SQL <literal>SELECT ... FOR UPDATE</literal>, using a <literal>LockMode</literal>. See the API documentation for more information."
+msgstr ""
+
+#: session_api.xml:214(para)
+msgid "Note that any associated instances or contained collections are <emphasis>not</emphasis> selected <literal>FOR UPDATE</literal>, unless you decide to specify <literal>lock</literal> or <literal>all</literal> as a cascade style for the association."
+msgstr ""
+
+#: session_api.xml:221(para)
+msgid "It is possible to re-load an object and all its collections at any time, using the <literal>refresh()</literal> method. This is useful when database triggers are used to initialize some of the properties of the object."
+msgstr ""
+
+#: session_api.xml:231(para)
+msgid "An important question usually appears at this point: How much does Hibernate load from the database and how many SQL <literal>SELECT</literal>s will it use? This depends on the <emphasis>fetching strategy</emphasis> and is explained in <xref linkend=\"performance-fetching\"/>."
+msgstr ""
+
+#: session_api.xml:241(title)
+msgid "Querying"
+msgstr ""
+
+#: session_api.xml:243(para)
+msgid "If you don't know the identifiers of the objects you are looking for, you need a query. Hibernate supports an easy-to-use but powerful object oriented query language (HQL). For programmatic query creation, Hibernate supports a sophisticated Criteria and Example query feature (QBC and QBE). You may also express your query in the native SQL of your database, with optional support from Hibernate for result set conversion into objects."
+msgstr ""
+
+#: session_api.xml:253(title)
+msgid "Executing queries"
+msgstr ""
+
+#: session_api.xml:255(para)
+msgid "HQL and native SQL queries are represented with an instance of <literal>org.hibernate.Query</literal>. This interface offers methods for parameter binding, result set handling, and for the execution of the actual query. You always obtain a <literal>Query</literal> using the current <literal>Session</literal>:"
+msgstr ""
+
+#: session_api.xml:286(para)
+msgid "A query is usually executed by invoking <literal>list()</literal>, the result of the query will be loaded completely into a collection in memory. Entity instances retrieved by a query are in persistent state. The <literal>uniqueResult()</literal> method offers a shortcut if you know your query will only return a single object. Note that queries that make use of eager fetching of collections usually return duplicates of the root objects (but with their collections initialized). You can filter these duplicates simply through a <literal>Set</literal>."
+msgstr ""
+
+#: session_api.xml:298(title)
+msgid "Iterating results"
+msgstr ""
+
+#: session_api.xml:300(para)
+msgid "Occasionally, you might be able to achieve better performance by executing the query using the <literal>iterate()</literal> method. This will only usually be the case if you expect that the actual entity instances returned by the query will already be in the session or second-level cache. If they are not already cached, <literal>iterate()</literal> will be slower than <literal>list()</literal> and might require many database hits for a simple query, usually <emphasis>1</emphasis> for the initial select which only returns identifiers, and <emphasis>n</emphasis> additional selects to initialize the actual instances."
+msgstr ""
+
+#: session_api.xml:327(title)
+msgid "Queries that return tuples"
+msgstr ""
+
+#: session_api.xml:329(para)
+msgid "Hibernate queries sometimes return tuples of objects, in which case each tuple is returned as an array:"
+msgstr ""
+
+#: session_api.xml:349(title)
+msgid "Scalar results"
+msgstr ""
+
+#: session_api.xml:351(para)
+msgid "Queries may specify a property of a class in the <literal>select</literal> clause. They may even call SQL aggregate functions. Properties or aggregates are considered \"scalar\" results (and not entities in persistent state)."
+msgstr ""
+
+#: session_api.xml:374(title)
+msgid "Bind parameters"
+msgstr ""
+
+#: session_api.xml:376(para)
+msgid "Methods on <literal>Query</literal> are provided for binding values to named parameters or JDBC-style <literal>?</literal> parameters. <emphasis>Contrary to JDBC, Hibernate numbers parameters from zero.</emphasis> Named parameters are identifiers of the form <literal>:name</literal> in the query string. The advantages of named parameters are:"
+msgstr ""
+
+#: session_api.xml:386(para)
+msgid "named parameters are insensitive to the order they occur in the query string"
+msgstr ""
+
+#: session_api.xml:392(para)
+msgid "they may occur multiple times in the same query"
+msgstr ""
+
+#: session_api.xml:397(para)
+msgid "they are self-documenting"
+msgstr ""
+
+#: session_api.xml:424(title)
+msgid "Pagination"
+msgstr ""
+
+#: session_api.xml:426(para)
+msgid "If you need to specify bounds upon your result set (the maximum number of rows you want to retrieve and / or the first row you want to retrieve) you should use methods of the <literal>Query</literal> interface:"
+msgstr ""
+
+#: session_api.xml:437(para)
+msgid "Hibernate knows how to translate this limit query into the native SQL of your DBMS."
+msgstr ""
+
+#: session_api.xml:445(title)
+msgid "Scrollable iteration"
+msgstr ""
+
+#: session_api.xml:447(para)
+msgid "If your JDBC driver supports scrollable <literal>ResultSet</literal>s, the <literal>Query</literal> interface may be used to obtain a <literal>ScrollableResults</literal> object, which allows flexible navigation of the query results."
+msgstr ""
+
+#: session_api.xml:476(para)
+msgid "Note that an open database connection (and cursor) is required for this functionality, use <literal>setMaxResult()</literal>/<literal>setFirstResult()</literal> if you need offline pagination functionality."
+msgstr ""
+
+#: session_api.xml:485(title)
+msgid "Externalizing named queries"
+msgstr ""
+
+#: session_api.xml:487(para)
+msgid "You may also define named queries in the mapping document. (Remember to use a <literal>CDATA</literal> section if your query contains characters that could be interpreted as markup.)"
+msgstr ""
+
+#: session_api.xml:499(para)
+msgid "Parameter binding and executing is done programatically:"
+msgstr ""
+
+#: session_api.xml:508(para)
+msgid "Note that the actual program code is independent of the query language that is used, you may also define native SQL queries in metadata, or migrate existing queries to Hibernate by placing them in mapping files."
+msgstr ""
+
+#: session_api.xml:514(para)
+msgid "Also note that a query declaration inside a <literal><hibernate-mapping></literal> element requires a global unique name for the query, while a query declaration inside a <literal><class></literal> element is made unique automatically by prepending the fully qualified name of the class, for example <literal>eg.Cat.ByNameAndMaximumWeight</literal>."
+msgstr ""
+
+#: session_api.xml:527(title)
+msgid "Filtering collections"
+msgstr ""
+
+#: session_api.xml:528(para)
+msgid "A collection <emphasis>filter</emphasis> is a special type of query that may be applied to a persistent collection or array. The query string may refer to <literal>this</literal>, meaning the current collection element."
+msgstr ""
+
+#: session_api.xml:541(para)
+msgid "The returned collection is considered a bag, and it's a copy of the given collection. The original collection is not modified (this is contrary to the implication of the name \"filter\", but consistent with expected behavior)."
+msgstr ""
+
+#: session_api.xml:547(para)
+msgid "Observe that filters do not require a <literal>from</literal> clause (though they may have one if required). Filters are not limited to returning the collection elements themselves."
+msgstr ""
+
+#: session_api.xml:557(para)
+msgid "Even an empty filter query is useful, e.g. to load a subset of elements in a huge collection:"
+msgstr ""
+
+#: session_api.xml:570(title)
+msgid "Criteria queries"
+msgstr ""
+
+#: session_api.xml:572(para)
+msgid "HQL is extremely powerful but some developers prefer to build queries dynamically, using an object-oriented API, rather than building query strings. Hibernate provides an intuitive <literal>Criteria</literal> query API for these cases:"
+msgstr ""
+
+#: session_api.xml:583(para)
+msgid "The <literal>Criteria</literal> and the associated <literal>Example</literal> API are discussed in more detail in <xref linkend=\"querycriteria\"/>."
+msgstr ""
+
+#: session_api.xml:591(title)
+msgid "Queries in native SQL"
+msgstr ""
+
+#: session_api.xml:593(para)
+msgid "You may express a query in SQL, using <literal>createSQLQuery()</literal> and let Hibernate take care of the mapping from result sets to objects. Note that you may at any time call <literal>session.connection()</literal> and use the JDBC <literal>Connection</literal> directly. If you chose to use the Hibernate API, you must enclose SQL aliases in braces:"
+msgstr ""
+
+#: session_api.xml:612(para)
+msgid "SQL queries may contain named and positional parameters, just like Hibernate queries. More information about native SQL queries in Hibernate can be found in <xref linkend=\"querysql\"/>."
+msgstr ""
+
+#: session_api.xml:623(title)
+msgid "Modifying persistent objects"
+msgstr ""
+
+#: session_api.xml:625(para)
+msgid "<emphasis>Transactional persistent instances</emphasis> (ie. objects loaded, saved, created or queried by the <literal>Session</literal>) may be manipulated by the application and any changes to persistent state will be persisted when the <literal>Session</literal> is <emphasis>flushed</emphasis> (discussed later in this chapter). There is no need to call a particular method (like <literal>update()</literal>, which has a different purpose) to make your modifications persistent. So the most straightforward way to update the state of an object is to <literal>load()</literal> it, and then manipulate it directly, while the <literal>Session</literal> is open:"
+msgstr ""
+
+#: session_api.xml:640(para)
+msgid "Sometimes this programming model is inefficient since it would require both an SQL <literal>SELECT</literal> (to load an object) and an SQL <literal>UPDATE</literal> (to persist its updated state) in the same session. Therefore Hibernate offers an alternate approach, using detached instances."
+msgstr ""
+
+#: session_api.xml:649(literal)
+msgid "UPDATE"
+msgstr ""
+
+#: session_api.xml:649(literal)
+msgid "DELETE"
+msgstr ""
+
+#: session_api.xml:650(emphasis)
+msgid "state management"
+msgstr ""
+
+#: session_api.xml:651(emphasis)
+msgid "statements"
+msgstr ""
+
+#: session_api.xml:652(literal)
+msgid "Connection"
+msgstr ""
+
+#: session_api.xml:653(literal)
+msgid "session.connection()"
+msgstr ""
+
+#: session_api.xml:648(emphasis)
+msgid "Note that Hibernate does not offer its own API for direct execution of <placeholder-1/> or <placeholder-2/> statements. Hibernate is a <placeholder-3/> service, you don't have to think in <placeholder-4/> to use it. JDBC is a perfect API for executing SQL statements, you can get a JDBC <placeholder-5/> at any time by calling <placeholder-6/>. Furthermore, the notion of mass operations conflicts with object/relational mapping for online transaction processing-oriented applications. Future versions of Hibernate may however provide special mass operation functions. See <xref linkend=\"batch\"/> for some possible batch operation tricks."
+msgstr ""
+
+#: session_api.xml:663(title)
+msgid "Modifying detached objects"
+msgstr ""
+
+#: session_api.xml:665(para)
+msgid "Many applications need to retrieve an object in one transaction, send it to the UI layer for manipulation, then save the changes in a new transaction. Applications that use this kind of approach in a high-concurrency environment usually use versioned data to ensure isolation for the \"long\" unit of work."
+msgstr ""
+
+#: session_api.xml:672(para)
+msgid "Hibernate supports this model by providing for reattachment of detached instances using the <literal>Session.update()</literal> or <literal>Session.merge()</literal> methods:"
+msgstr ""
+
+#: session_api.xml:690(para)
+msgid "If the <literal>Cat</literal> with identifier <literal>catId</literal> had already been loaded by <literal>secondSession</literal> when the application tried to reattach it, an exception would have been thrown."
+msgstr ""
+
+#: session_api.xml:696(para)
+msgid "Use <literal>update()</literal> if you are sure that the session does not contain an already persistent instance with the same identifier, and <literal>merge()</literal> if you want to merge your modifications at any time without consideration of the state of the session. In other words, <literal>update()</literal> is usually the first method you would call in a fresh session, ensuring that reattachment of your detached instances is the first operation that is executed."
+msgstr ""
+
+#: session_api.xml:705(para)
+msgid "The application should individually <literal>update()</literal> detached instances reachable from the given detached instance if and <emphasis>only</emphasis> if it wants their state also updated. This can be automated of course, using <emphasis>transitive persistence</emphasis>, see <xref linkend=\"objectstate-transitive\"/>."
+msgstr ""
+
+#: session_api.xml:712(para)
+msgid "The <literal>lock()</literal> method also allows an application to reassociate an object with a new session. However, the detached instance has to be unmodified!"
+msgstr ""
+
+#: session_api.xml:724(para)
+msgid "Note that <literal>lock()</literal> can be used with various <literal>LockMode</literal>s, see the API documentation and the chapter on transaction handling for more information. Reattachment is not the only usecase for <literal>lock()</literal>."
+msgstr ""
+
+#: session_api.xml:731(para)
+msgid "Other models for long units of work are discussed in <xref linkend=\"transactions-optimistic\"/>."
+msgstr ""
+
+#: session_api.xml:738(title)
+msgid "Automatic state detection"
+msgstr ""
+
+#: session_api.xml:740(para)
+msgid "Hibernate users have requested a general purpose method that either saves a transient instance by generating a new identifier or updates/reattaches the detached instances associated with its current identifier. The <literal>saveOrUpdate()</literal> method implements this functionality."
+msgstr ""
+
+#: session_api.xml:758(para)
+msgid "The usage and semantics of <literal>saveOrUpdate()</literal> seems to be confusing for new users. Firstly, so long as you are not trying to use instances from one session in another new session, you should not need to use <literal>update()</literal>, <literal>saveOrUpdate()</literal>, or <literal>merge()</literal>. Some whole applications will never use either of these methods."
+msgstr ""
+
+#: session_api.xml:766(para)
+msgid "Usually <literal>update()</literal> or <literal>saveOrUpdate()</literal> are used in the following scenario:"
+msgstr ""
+
+#: session_api.xml:773(para)
+msgid "the application loads an object in the first session"
+msgstr ""
+
+#: session_api.xml:778(para)
+msgid "the object is passed up to the UI tier"
+msgstr ""
+
+#: session_api.xml:783(para)
+msgid "some modifications are made to the object"
+msgstr ""
+
+#: session_api.xml:788(para)
+msgid "the object is passed back down to the business logic tier"
+msgstr ""
+
+#: session_api.xml:793(para)
+msgid "the application persists these modifications by calling <literal>update()</literal> in a second session"
+msgstr ""
+
+#: session_api.xml:800(para)
+msgid "<literal>saveOrUpdate()</literal> does the following:"
+msgstr ""
+
+#: session_api.xml:806(para)
+msgid "if the object is already persistent in this session, do nothing"
+msgstr ""
+
+#: session_api.xml:811(para)
+msgid "if another object associated with the session has the same identifier, throw an exception"
+msgstr ""
+
+#: session_api.xml:817(para)
+msgid "if the object has no identifier property, <literal>save()</literal> it"
+msgstr ""
+
+#: session_api.xml:822(para)
+msgid "if the object's identifier has the value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr ""
+
+#: session_api.xml:828(para)
+msgid "if the object is versioned (by a <literal><version></literal> or <literal><timestamp></literal>), and the version property value is the same value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr ""
+
+#: session_api.xml:836(para)
+msgid "otherwise <literal>update()</literal> the object"
+msgstr ""
+
+#: session_api.xml:842(para)
+msgid "and <literal>merge()</literal> is very different:"
+msgstr ""
+
+#: session_api.xml:848(para)
+msgid "if there is a persistent instance with the same identifier currently associated with the session, copy the state of the given object onto the persistent instance"
+msgstr ""
+
+#: session_api.xml:855(para)
+msgid "if there is no persistent instance currently associated with the session, try to load it from the database, or create a new persistent instance"
+msgstr ""
+
+#: session_api.xml:861(para)
+msgid "the persistent instance is returned"
+msgstr ""
+
+#: session_api.xml:866(para)
+msgid "the given instance does not become associated with the session, it remains detached"
+msgstr ""
+
+#: session_api.xml:876(title)
+msgid "Deleting persistent objects"
+msgstr ""
+
+#: session_api.xml:878(para)
+msgid "<literal>Session.delete()</literal> will remove an object's state from the database. Of course, your application might still hold a reference to a deleted object. It's best to think of <literal>delete()</literal> as making a persistent instance transient."
+msgstr ""
+
+#: session_api.xml:887(para)
+msgid "You may delete objects in any order you like, without risk of foreign key constraint violations. It is still possible to violate a <literal>NOT NULL</literal> constraint on a foreign key column by deleting objects in the wrong order, e.g. if you delete the parent, but forget to delete the children."
+msgstr ""
+
+#: session_api.xml:898(title)
+msgid "Replicating object between two different datastores"
+msgstr ""
+
+#: session_api.xml:900(para)
+msgid "It is occasionally useful to be able to take a graph of persistent instances and make them persistent in a different datastore, without regenerating identifier values."
+msgstr ""
+
+#: session_api.xml:920(para)
+msgid "The <literal>ReplicationMode</literal> determines how <literal>replicate()</literal> will deal with conflicts with existing rows in the database."
+msgstr ""
+
+#: session_api.xml:927(para)
+msgid "<literal>ReplicationMode.IGNORE</literal> - ignore the object when there is an existing database row with the same identifier"
+msgstr ""
+
+#: session_api.xml:933(para)
+msgid "<literal>ReplicationMode.OVERWRITE</literal> - overwrite any existing database row with the same identifier"
+msgstr ""
+
+#: session_api.xml:939(para)
+msgid "<literal>ReplicationMode.EXCEPTION</literal> - throw an exception if there is an existing database row with the same identifier"
+msgstr ""
+
+#: session_api.xml:945(para)
+msgid "<literal>ReplicationMode.LATEST_VERSION</literal> - overwrite the row if its version number is earlier than the version number of the object, or ignore the object otherwise"
+msgstr ""
+
+#: session_api.xml:953(para)
+msgid "Usecases for this feature include reconciling data entered into different database instances, upgrading system configuration information during product upgrades, rolling back changes made during non-ACID transactions and more."
+msgstr ""
+
+#: session_api.xml:962(title)
+msgid "Flushing the Session"
+msgstr ""
+
+#: session_api.xml:964(para)
+msgid "From time to time the <literal>Session</literal> will execute the SQL statements needed to synchronize the JDBC connection's state with the state of objects held in memory. This process, <emphasis>flush</emphasis>, occurs by default at the following points"
+msgstr ""
+
+#: session_api.xml:973(para)
+msgid "before some query executions"
+msgstr ""
+
+#: session_api.xml:978(para)
+msgid "from <literal>org.hibernate.Transaction.commit()</literal>"
+msgstr ""
+
+#: session_api.xml:983(para)
+msgid "from <literal>Session.flush()</literal>"
+msgstr ""
+
+#: session_api.xml:989(para)
+msgid "The SQL statements are issued in the following order"
+msgstr ""
+
+#: session_api.xml:995(para)
+msgid "all entity insertions, in the same order the corresponding objects were saved using <literal>Session.save()</literal>"
+msgstr ""
+
+#: session_api.xml:1001(para)
+msgid "all entity updates"
+msgstr ""
+
+#: session_api.xml:1006(para)
+msgid "all collection deletions"
+msgstr ""
+
+#: session_api.xml:1011(para)
+msgid "all collection element deletions, updates and insertions"
+msgstr ""
+
+#: session_api.xml:1016(para)
+msgid "all collection insertions"
+msgstr ""
+
+#: session_api.xml:1021(para)
+msgid "all entity deletions, in the same order the corresponding objects were deleted using <literal>Session.delete()</literal>"
+msgstr ""
+
+#: session_api.xml:1028(para)
+msgid "(An exception is that objects using <literal>native</literal> ID generation are inserted when they are saved.)"
+msgstr ""
+
+#: session_api.xml:1033(para)
+msgid "Except when you explicity <literal>flush()</literal>, there are absolutely no guarantees about <emphasis>when</emphasis> the <literal>Session</literal> executes the JDBC calls, only the <emphasis>order</emphasis> in which they are executed. However, Hibernate does guarantee that the <literal>Query.list(..)</literal> will never return stale data; nor will they return the wrong data."
+msgstr ""
+
+#: session_api.xml:1041(para)
+msgid "It is possible to change the default behavior so that flush occurs less frequently. The <literal>FlushMode</literal> class defines three different modes: only flush at commit time (and only when the Hibernate <literal>Transaction</literal> API is used), flush automatically using the explained routine, or never flush unless <literal>flush()</literal> is called explicitly. The last mode is useful for long running units of work, where a <literal>Session</literal> is kept open and disconnected for a long time (see <xref linkend=\"transactions-optimistic-longsession\"/>)."
+msgstr ""
+
+#: session_api.xml:1066(para)
+msgid "During flush, an exception might occur (e.g. if a DML operation violates a constraint). Since handling exceptions involves some understanding of Hibernate's transactional behavior, we discuss it in <xref linkend=\"transactions\"/>."
+msgstr ""
+
+#: session_api.xml:1075(title)
+msgid "Transitive persistence"
+msgstr ""
+
+#: session_api.xml:1077(para)
+msgid "It is quite cumbersome to save, delete, or reattach individual objects, especially if you deal with a graph of associated objects. A common case is a parent/child relationship. Consider the following example:"
+msgstr ""
+
+#: session_api.xml:1083(para)
+msgid "If the children in a parent/child relationship would be value typed (e.g. a collection of addresses or strings), their life cycle would depend on the parent and no further action would be required for convenient \"cascading\" of state changes. When the parent is saved, the value-typed child objects are saved as well, when the parent is deleted, the children will be deleted, etc. This even works for operations such as the removal of a child from the collection; Hibernate will detect this and, since value-typed objects can't have shared references, delete the child from the database."
+msgstr ""
+
+#: session_api.xml:1094(para)
+msgid "Now consider the same scenario with parent and child objects being entities, not value-types (e.g. categories and items, or parent and child cats). Entities have their own life cycle, support shared references (so removing an entity from the collection does not mean it can be deleted), and there is by default no cascading of state from one entity to any other associated entities. Hibernate does not implement <emphasis>persistence by reachability</emphasis> by default."
+msgstr ""
+
+#: session_api.xml:1103(para)
+msgid "For each basic operation of the Hibernate session - including <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal> - there is a corresponding cascade style. Respectively, the cascade styles are named <literal>create, merge, save-update, delete, lock, refresh, evict, replicate</literal>. If you want an operation to be cascaded along an association, you must indicate that in the mapping document. For example:"
+msgstr ""
+
+#: session_api.xml:1114(para)
+msgid "Cascade styles my be combined:"
+msgstr ""
+
+#: session_api.xml:1120(para)
+msgid "You may even use <literal>cascade=\"all\"</literal> to specify that <emphasis>all</emphasis> operations should be cascaded along the association. The default <literal>cascade=\"none\"</literal> specifies that no operations are to be cascaded."
+msgstr ""
+
+#: session_api.xml:1126(para)
+msgid "A special cascade style, <literal>delete-orphan</literal>, applies only to one-to-many associations, and indicates that the <literal>delete()</literal> operation should be applied to any child object that is removed from the association."
+msgstr ""
+
+#: session_api.xml:1133(para)
+msgid "Recommendations:"
+msgstr ""
+
+#: session_api.xml:1139(para)
+msgid "It doesn't usually make sense to enable cascade on a <literal><many-to-one></literal> or <literal><many-to-many></literal> association. Cascade is often useful for <literal><one-to-one></literal> and <literal><one-to-many></literal> associations."
+msgstr ""
+
+#: session_api.xml:1147(para)
+msgid "If the child object's lifespan is bounded by the lifespan of the parent object, make it a <emphasis>life cycle object</emphasis> by specifying <literal>cascade=\"all,delete-orphan\"</literal>."
+msgstr ""
+
+#: session_api.xml:1154(para)
+msgid "Otherwise, you might not need cascade at all. But if you think that you will often be working with the parent and children together in the same transaction, and you want to save yourself some typing, consider using <literal>cascade=\"persist,merge,save-update\"</literal>."
+msgstr ""
+
+#: session_api.xml:1162(para)
+msgid "Mapping an association (either a single valued association, or a collection) with <literal>cascade=\"all\"</literal> marks the association as a <emphasis>parent/child</emphasis> style relationship where save/update/delete of the parent results in save/update/delete of the child or children."
+msgstr ""
+
+#: session_api.xml:1168(para)
+msgid "Futhermore, a mere reference to a child from a persistent parent will result in save/update of the child. This metaphor is incomplete, however. A child which becomes unreferenced by its parent is <emphasis>not</emphasis> automatically deleted, except in the case of a <literal><one-to-many></literal> association mapped with <literal>cascade=\"delete-orphan\"</literal>. The precise semantics of cascading operations for a parent/child relationship are as follows:"
+msgstr ""
+
+#: session_api.xml:1179(para)
+msgid "If a parent is passed to <literal>persist()</literal>, all children are passed to <literal>persist()</literal>"
+msgstr ""
+
+#: session_api.xml:1185(para)
+msgid "If a parent is passed to <literal>merge()</literal>, all children are passed to <literal>merge()</literal>"
+msgstr ""
+
+#: session_api.xml:1191(para)
+msgid "If a parent is passed to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal>, all children are passed to <literal>saveOrUpdate()</literal>"
+msgstr ""
+
+#: session_api.xml:1197(para)
+msgid "If a transient or detached child becomes referenced by a persistent parent, it is passed to <literal>saveOrUpdate()</literal>"
+msgstr ""
+
+#: session_api.xml:1203(para)
+msgid "If a parent is deleted, all children are passed to <literal>delete()</literal>"
+msgstr ""
+
+#: session_api.xml:1208(para)
+msgid "If a child is dereferenced by a persistent parent, <emphasis>nothing special happens</emphasis> - the application should explicitly delete the child if necessary - unless <literal>cascade=\"delete-orphan\"</literal>, in which case the \"orphaned\" child is deleted."
+msgstr ""
+
+#: session_api.xml:1217(para)
+msgid "Finally, note that cascading of operations can be applied to an object graph at <emphasis>call time</emphasis> or at <emphasis>flush time</emphasis>. All operations, if enabled, are cascaded to associated entities reachable when the operation is executed. However, <literal>save-upate</literal> and <literal>delete-orphan</literal> are transitive for all associated entities reachable during flush of the <literal>Session</literal>."
+msgstr ""
+
+#: session_api.xml:1229(title)
+msgid "Using metadata"
+msgstr ""
+
+#: session_api.xml:1231(para)
+msgid "Hibernate requires a very rich meta-level model of all entity and value types. From time to time, this model is very useful to the application itself. For example, the application might use Hibernate's metadata to implement a \"smart\" deep-copy algorithm that understands which objects should be copied (eg. mutable value types) and which should not (eg. immutable value types and, possibly, associated entities)."
+msgstr ""
+
+#: session_api.xml:1238(para)
+msgid "Hibernate exposes metadata via the <literal>ClassMetadata</literal> and <literal>CollectionMetadata</literal> interfaces and the <literal>Type</literal> hierarchy. Instances of the metadata interfaces may be obtained from the <literal>SessionFactory</literal>."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: session_api.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/toolset_guide.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/toolset_guide.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/toolset_guide.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,548 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:34-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: toolset_guide.xml:5(title)
+msgid "Toolset Guide"
+msgstr ""
+
+#: toolset_guide.xml:7(para)
+msgid "Roundtrip engineering with Hibernate is possible using a set of Eclipse plugins, commandline tools, as well as Ant tasks."
+msgstr ""
+
+#: toolset_guide.xml:12(para)
+msgid "The <emphasis>Hibernate Tools</emphasis> currently include plugins for the Eclipse IDE as well as Ant tasks for reverse engineering of existing databases:"
+msgstr ""
+
+#: toolset_guide.xml:18(para)
+msgid "<emphasis>Mapping Editor:</emphasis> An editor for Hibernate XML mapping files, supporting auto-completion and syntax highlighting. It also supports semantic auto-completion for class names and property/field names, making it much more versatile than a normal XML editor."
+msgstr ""
+
+#: toolset_guide.xml:23(para)
+msgid "<emphasis>Console:</emphasis> The console is a new view in Eclipse. In addition to a tree overview of your console configurations, you also get an interactive view of your persistent classes and their relationships. The console allows you to execute HQL queries against your database and browse the result directly in Eclipse."
+msgstr ""
+
+#: toolset_guide.xml:30(para)
+msgid "<emphasis>Development Wizards:</emphasis> Several wizards are provided with the Hibernate Eclipse tools; you can use a wizard to quickly generate Hibernate configuration (cfg.xml) files, or you may even completely reverse engineer an existing database schema into POJO source files and Hibernate mapping files. The reverse engineering wizard supports customizable templates."
+msgstr ""
+
+#: toolset_guide.xml:38(emphasis)
+msgid "Ant Tasks:"
+msgstr ""
+
+#: toolset_guide.xml:43(para)
+msgid "Please refer to the <emphasis>Hibernate Tools</emphasis> package and it's documentation for more information."
+msgstr ""
+
+#: toolset_guide.xml:48(para)
+msgid "However, the Hibernate main package comes bundled with an integrated tool (it can even be used from \"inside\" Hibernate on-the-fly): <emphasis>SchemaExport</emphasis> aka <literal>hbm2ddl</literal>."
+msgstr ""
+
+#: toolset_guide.xml:55(title)
+msgid "Automatic schema generation"
+msgstr ""
+
+#: toolset_guide.xml:57(para)
+msgid "DDL may be generated from your mapping files by a Hibernate utility. The generated schema includes referential integrity constraints (primary and foreign keys) for entity and collection tables. Tables and sequences are also created for mapped identifier generators."
+msgstr ""
+
+#: toolset_guide.xml:64(para)
+msgid "You <emphasis>must</emphasis> specify a SQL <literal>Dialect</literal> via the <literal>hibernate.dialect</literal> property when using this tool, as DDL is highly vendor specific."
+msgstr ""
+
+#: toolset_guide.xml:70(para)
+msgid "First, customize your mapping files to improve the generated schema."
+msgstr ""
+
+#: toolset_guide.xml:75(title)
+msgid "Customizing the schema"
+msgstr ""
+
+#: toolset_guide.xml:77(para)
+msgid "Many Hibernate mapping elements define optional attributes named <literal>length</literal>, <literal>precision</literal> and <literal>scale</literal>. You may set the length, precision and scale of a column with this attribute."
+msgstr ""
+
+#: toolset_guide.xml:87(para)
+msgid "Some tags also accept a <literal>not-null</literal> attribute (for generating a <literal>NOT NULL</literal> constraint on table columns) and a <literal>unique</literal> attribute (for generating <literal>UNIQUE</literal> constraint on table columns)."
+msgstr ""
+
+#: toolset_guide.xml:97(para)
+msgid "A <literal>unique-key</literal> attribute may be used to group columns in a single unique key constraint. Currently, the specified value of the <literal>unique-key</literal> attribute is <emphasis>not</emphasis> used to name the constraint in the generated DDL, only to group the columns in the mapping file."
+msgstr ""
+
+#: toolset_guide.xml:108(para)
+msgid "An <literal>index</literal> attribute specifies the name of an index that will be created using the mapped column or columns. Multiple columns may be grouped into the same index, simply by specifying the same index name."
+msgstr ""
+
+#: toolset_guide.xml:117(para)
+msgid "A <literal>foreign-key</literal> attribute may be used to override the name of any generated foreign key constraint."
+msgstr ""
+
+#: toolset_guide.xml:124(para)
+msgid "Many mapping elements also accept a child <literal><column></literal> element. This is particularly useful for mapping multi-column types:"
+msgstr ""
+
+#: toolset_guide.xml:135(para)
+msgid "The <literal>default</literal> attribute lets you specify a default value for a column (you should assign the same value to the mapped property before saving a new instance of the mapped class)."
+msgstr ""
+
+#: toolset_guide.xml:149(para)
+msgid "The <literal>sql-type</literal> attribute allows the user to override the default mapping of a Hibernate type to SQL datatype."
+msgstr ""
+
+#: toolset_guide.xml:158(para)
+msgid "The <literal>check</literal> attribute allows you to specify a check constraint."
+msgstr ""
+
+#: toolset_guide.xml:173(title)
+msgid "Summary"
+msgstr ""
+
+#: toolset_guide.xml:180(entry)
+msgid "Attribute"
+msgstr ""
+
+#: toolset_guide.xml:181(entry)
+msgid "Values"
+msgstr ""
+
+#: toolset_guide.xml:182(entry)
+msgid "Interpretation"
+msgstr ""
+
+#: toolset_guide.xml:187(literal)
+msgid "length"
+msgstr ""
+
+#: toolset_guide.xml:188(entry) toolset_guide.xml:193(entry) toolset_guide.xml:198(entry)
+msgid "number"
+msgstr ""
+
+#: toolset_guide.xml:189(entry)
+msgid "column length"
+msgstr ""
+
+#: toolset_guide.xml:192(literal)
+msgid "precision"
+msgstr ""
+
+#: toolset_guide.xml:194(entry)
+msgid "column decimal precision"
+msgstr ""
+
+#: toolset_guide.xml:197(literal)
+msgid "scale"
+msgstr ""
+
+#: toolset_guide.xml:199(entry)
+msgid "column decimal scale"
+msgstr ""
+
+#: toolset_guide.xml:202(literal)
+msgid "not-null"
+msgstr ""
+
+#: toolset_guide.xml:203(literal) toolset_guide.xml:208(literal)
+msgid "true|false"
+msgstr ""
+
+#: toolset_guide.xml:204(entry)
+msgid "specfies that the column should be non-nullable"
+msgstr ""
+
+#: toolset_guide.xml:207(literal)
+msgid "unique"
+msgstr ""
+
+#: toolset_guide.xml:209(entry)
+msgid "specifies that the column should have a unique constraint"
+msgstr ""
+
+#: toolset_guide.xml:212(literal)
+msgid "index"
+msgstr ""
+
+#: toolset_guide.xml:213(literal)
+msgid "index_name"
+msgstr ""
+
+#: toolset_guide.xml:214(entry)
+msgid "specifies the name of a (multi-column) index"
+msgstr ""
+
+#: toolset_guide.xml:217(literal)
+msgid "unique-key"
+msgstr ""
+
+#: toolset_guide.xml:218(literal)
+msgid "unique_key_name"
+msgstr ""
+
+#: toolset_guide.xml:219(entry)
+msgid "specifies the name of a multi-column unique constraint"
+msgstr ""
+
+#: toolset_guide.xml:222(literal)
+msgid "foreign-key"
+msgstr ""
+
+#: toolset_guide.xml:223(literal)
+msgid "foreign_key_name"
+msgstr ""
+
+#: toolset_guide.xml:226(literal)
+msgid "<one-to-one>"
+msgstr ""
+
+#: toolset_guide.xml:227(literal)
+msgid "<many-to-one>"
+msgstr ""
+
+#: toolset_guide.xml:227(literal)
+msgid "<key>"
+msgstr ""
+
+#: toolset_guide.xml:228(literal)
+msgid "<many-to-many>"
+msgstr ""
+
+#: toolset_guide.xml:229(literal)
+msgid "inverse=\"true\""
+msgstr ""
+
+#: toolset_guide.xml:230(literal)
+msgid "SchemaExport"
+msgstr ""
+
+#: toolset_guide.xml:224(entry)
+msgid "specifies the name of the foreign key constraint generated for an association, for a <placeholder-1/>, <placeholder-2/>, <placeholder-3/>, or <placeholder-4/> mapping element. Note that <placeholder-5/> sides will not be considered by <placeholder-6/>."
+msgstr ""
+
+#: toolset_guide.xml:234(literal)
+msgid "sql-type"
+msgstr ""
+
+#: toolset_guide.xml:235(literal)
+msgid "SQL column type"
+msgstr ""
+
+#: toolset_guide.xml:238(literal)
+msgid "<column>"
+msgstr ""
+
+#: toolset_guide.xml:236(entry)
+msgid "overrides the default column type (attribute of <placeholder-1/> element only)"
+msgstr ""
+
+#: toolset_guide.xml:242(literal)
+msgid "default"
+msgstr ""
+
+#: toolset_guide.xml:243(entry) toolset_guide.xml:250(entry)
+msgid "SQL expression"
+msgstr ""
+
+#: toolset_guide.xml:244(entry)
+msgid "specify a default value for the column"
+msgstr ""
+
+#: toolset_guide.xml:249(literal)
+msgid "check"
+msgstr ""
+
+#: toolset_guide.xml:251(entry)
+msgid "create an SQL check constraint on either column or table"
+msgstr ""
+
+#: toolset_guide.xml:259(para)
+msgid "The <literal><comment></literal> element allows you to specify comments for the generated schema."
+msgstr ""
+
+#: toolset_guide.xml:275(para)
+msgid "This results in a <literal>comment on table</literal> or <literal>comment on column</literal> statement in the generated DDL (where supported)."
+msgstr ""
+
+#: toolset_guide.xml:284(title)
+msgid "Running the tool"
+msgstr ""
+
+#: toolset_guide.xml:286(para)
+msgid "The <literal>SchemaExport</literal> tool writes a DDL script to standard out and/or executes the DDL statements."
+msgstr ""
+
+#: toolset_guide.xml:292(literal) toolset_guide.xml:459(literal) toolset_guide.xml:541(literal)
+msgid "java -cp"
+msgstr ""
+
+#: toolset_guide.xml:292(emphasis) toolset_guide.xml:459(emphasis) toolset_guide.xml:541(emphasis)
+msgid "hibernate_classpaths"
+msgstr ""
+
+#: toolset_guide.xml:293(literal)
+msgid "org.hibernate.tool.hbm2ddl.SchemaExport"
+msgstr ""
+
+#: toolset_guide.xml:293(emphasis) toolset_guide.xml:460(emphasis) toolset_guide.xml:542(emphasis)
+msgid "options mapping_files"
+msgstr ""
+
+#: toolset_guide.xml:297(title)
+msgid "<literal>SchemaExport</literal> Command Line Options"
+msgstr ""
+
+#: toolset_guide.xml:303(entry) toolset_guide.xml:470(entry) toolset_guide.xml:552(entry)
+msgid "Option"
+msgstr ""
+
+#: toolset_guide.xml:304(entry) toolset_guide.xml:392(entry) toolset_guide.xml:471(entry) toolset_guide.xml:553(entry)
+msgid "Description"
+msgstr ""
+
+#: toolset_guide.xml:309(literal) toolset_guide.xml:476(literal)
+msgid "--quiet"
+msgstr ""
+
+#: toolset_guide.xml:310(entry) toolset_guide.xml:477(entry)
+msgid "don't output the script to stdout"
+msgstr ""
+
+#: toolset_guide.xml:313(literal)
+msgid "--drop"
+msgstr ""
+
+#: toolset_guide.xml:314(entry)
+msgid "only drop the tables"
+msgstr ""
+
+#: toolset_guide.xml:317(literal)
+msgid "--create"
+msgstr ""
+
+#: toolset_guide.xml:318(entry)
+msgid "only create the tables"
+msgstr ""
+
+#: toolset_guide.xml:321(literal) toolset_guide.xml:480(literal)
+msgid "--text"
+msgstr ""
+
+#: toolset_guide.xml:322(entry)
+msgid "don't export to the database"
+msgstr ""
+
+#: toolset_guide.xml:325(literal)
+msgid "--output=my_schema.ddl"
+msgstr ""
+
+#: toolset_guide.xml:326(entry)
+msgid "output the ddl script to a file"
+msgstr ""
+
+#: toolset_guide.xml:329(literal) toolset_guide.xml:484(literal) toolset_guide.xml:558(literal)
+msgid "--naming=eg.MyNamingStrategy"
+msgstr ""
+
+#: toolset_guide.xml:330(literal) toolset_guide.xml:485(literal) toolset_guide.xml:559(literal)
+msgid "NamingStrategy"
+msgstr ""
+
+#: toolset_guide.xml:330(entry) toolset_guide.xml:485(entry) toolset_guide.xml:559(entry)
+msgid "select a <placeholder-1/>"
+msgstr ""
+
+#: toolset_guide.xml:333(literal) toolset_guide.xml:492(literal) toolset_guide.xml:566(literal)
+msgid "--config=hibernate.cfg.xml"
+msgstr ""
+
+#: toolset_guide.xml:334(entry)
+msgid "read Hibernate configuration from an XML file"
+msgstr ""
+
+#: toolset_guide.xml:337(literal) toolset_guide.xml:488(literal) toolset_guide.xml:562(literal)
+msgid "--properties=hibernate.properties"
+msgstr ""
+
+#: toolset_guide.xml:338(entry) toolset_guide.xml:489(entry) toolset_guide.xml:563(entry)
+msgid "read database properties from a file"
+msgstr ""
+
+#: toolset_guide.xml:341(literal)
+msgid "--format"
+msgstr ""
+
+#: toolset_guide.xml:342(entry)
+msgid "format the generated SQL nicely in the script"
+msgstr ""
+
+#: toolset_guide.xml:345(literal)
+msgid "--delimiter=;"
+msgstr ""
+
+#: toolset_guide.xml:346(entry)
+msgid "set an end of line delimiter for the script"
+msgstr ""
+
+#: toolset_guide.xml:352(para)
+msgid "You may even embed <literal>SchemaExport</literal> in your application:"
+msgstr ""
+
+#: toolset_guide.xml:362(title)
+msgid "Properties"
+msgstr ""
+
+#: toolset_guide.xml:364(para)
+msgid "Database properties may be specified"
+msgstr ""
+
+#: toolset_guide.xml:370(para)
+msgid "as system properties with <literal>-D</literal><emphasis><property></emphasis>"
+msgstr ""
+
+#: toolset_guide.xml:373(para)
+msgid "in <literal>hibernate.properties</literal>"
+msgstr ""
+
+#: toolset_guide.xml:376(para)
+msgid "in a named properties file with <literal>--properties</literal>"
+msgstr ""
+
+#: toolset_guide.xml:380(para)
+msgid "The needed properties are:"
+msgstr ""
+
+#: toolset_guide.xml:385(title)
+msgid "SchemaExport Connection Properties"
+msgstr ""
+
+#: toolset_guide.xml:391(entry)
+msgid "Property Name"
+msgstr ""
+
+#: toolset_guide.xml:397(literal)
+msgid "hibernate.connection.driver_class"
+msgstr ""
+
+#: toolset_guide.xml:398(entry)
+msgid "jdbc driver class"
+msgstr ""
+
+#: toolset_guide.xml:401(literal)
+msgid "hibernate.connection.url"
+msgstr ""
+
+#: toolset_guide.xml:402(entry)
+msgid "jdbc url"
+msgstr ""
+
+#: toolset_guide.xml:405(literal)
+msgid "hibernate.connection.username"
+msgstr ""
+
+#: toolset_guide.xml:406(entry)
+msgid "database user"
+msgstr ""
+
+#: toolset_guide.xml:409(literal)
+msgid "hibernate.connection.password"
+msgstr ""
+
+#: toolset_guide.xml:410(entry)
+msgid "user password"
+msgstr ""
+
+#: toolset_guide.xml:413(literal)
+msgid "hibernate.dialect"
+msgstr ""
+
+#: toolset_guide.xml:414(entry)
+msgid "dialect"
+msgstr ""
+
+#: toolset_guide.xml:423(title)
+msgid "Using Ant"
+msgstr ""
+
+#: toolset_guide.xml:425(para)
+msgid "You can call <literal>SchemaExport</literal> from your Ant build script:"
+msgstr ""
+
+#: toolset_guide.xml:450(title)
+msgid "Incremental schema updates"
+msgstr ""
+
+#: toolset_guide.xml:452(para)
+msgid "The <literal>SchemaUpdate</literal> tool will update an existing schema with \"incremental\" changes. Note that <literal>SchemaUpdate</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers."
+msgstr ""
+
+#: toolset_guide.xml:460(literal)
+msgid "org.hibernate.tool.hbm2ddl.SchemaUpdate"
+msgstr ""
+
+#: toolset_guide.xml:464(title)
+msgid "<literal>SchemaUpdate</literal> Command Line Options"
+msgstr ""
+
+#: toolset_guide.xml:481(entry)
+msgid "don't export the script to the database"
+msgstr ""
+
+#: toolset_guide.xml:493(literal) toolset_guide.xml:567(literal)
+msgid ".cfg.xml"
+msgstr ""
+
+#: toolset_guide.xml:493(entry) toolset_guide.xml:567(entry)
+msgid "specify a <placeholder-1/> file"
+msgstr ""
+
+#: toolset_guide.xml:499(para)
+msgid "You may embed <literal>SchemaUpdate</literal> in your application:"
+msgstr ""
+
+#: toolset_guide.xml:509(title)
+msgid "Using Ant for incremental schema updates"
+msgstr ""
+
+#: toolset_guide.xml:511(para)
+msgid "You can call <literal>SchemaUpdate</literal> from the Ant script:"
+msgstr ""
+
+#: toolset_guide.xml:532(title)
+msgid "Schema validation"
+msgstr ""
+
+#: toolset_guide.xml:534(para)
+msgid "The <literal>SchemaValidator</literal> tool will validate that the existing database schema \"matches\" your mapping documents. Note that <literal>SchemaValidator</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers. This tool is extremely useful for testing."
+msgstr ""
+
+#: toolset_guide.xml:542(literal)
+msgid "org.hibernate.tool.hbm2ddl.SchemaValidator"
+msgstr ""
+
+#: toolset_guide.xml:546(title)
+msgid "<literal>SchemaValidator</literal> Command Line Options"
+msgstr ""
+
+#: toolset_guide.xml:573(para)
+msgid "You may embed <literal>SchemaValidator</literal> in your application:"
+msgstr ""
+
+#: toolset_guide.xml:583(title)
+msgid "Using Ant for schema validation"
+msgstr ""
+
+#: toolset_guide.xml:585(para)
+msgid "You can call <literal>SchemaValidator</literal> from the Ant script:"
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: toolset_guide.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/transactions.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/transactions.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/transactions.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,524 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:35-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: transactions.xml:5(title)
+msgid "Transactions And Concurrency"
+msgstr ""
+
+#: transactions.xml:7(para)
+msgid "The most important point about Hibernate and concurrency control is that it is very easy to understand. Hibernate directly uses JDBC connections and JTA resources without adding any additional locking behavior. We highly recommend you spend some time with the JDBC, ANSI, and transaction isolation specification of your database management system."
+msgstr ""
+
+#: transactions.xml:14(para)
+msgid "Hibernate does not lock objects in memory. Your application can expect the behavior as defined by the isolation level of your database transactions. Note that thanks to the <literal>Session</literal>, which is also a transaction-scoped cache, Hibernate provides repeatable reads for lookup by identifier and entity queries (not reporting queries that return scalar values)."
+msgstr ""
+
+#: transactions.xml:22(para)
+msgid "In addition to versioning for automatic optimistic concurrency control, Hibernate also offers a (minor) API for pessimistic locking of rows, using the <literal>SELECT FOR UPDATE</literal> syntax. Optimistic concurrency control and this API are discussed later in this chapter."
+msgstr ""
+
+#: transactions.xml:29(para)
+msgid "We start the discussion of concurrency control in Hibernate with the granularity of <literal>Configuration</literal>, <literal>SessionFactory</literal>, and <literal>Session</literal>, as well as database transactions and long conversations."
+msgstr ""
+
+#: transactions.xml:36(title)
+msgid "Session and transaction scopes"
+msgstr ""
+
+#: transactions.xml:38(para)
+msgid "A <literal>SessionFactory</literal> 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</literal> instance."
+msgstr ""
+
+#: transactions.xml:44(para)
+msgid "A <literal>Session</literal> is an inexpensive, non-threadsafe object that should be used once, for a single request, a conversation, single unit of work, and then discarded. A <literal>Session</literal> will not obtain a JDBC <literal>Connection</literal> (or a <literal>Datasource</literal>) unless it is needed, hence consume no resources until used."
+msgstr ""
+
+#: transactions.xml:52(para)
+msgid "To complete this picture you also have to think about database transactions. A database transaction has to be as short as possible, to reduce lock contention in the database. Long database transactions will prevent your application from scaling to highly concurrent load. Hence, it is almost never good design to hold a database transaction open during user think time, until the unit of work is complete."
+msgstr ""
+
+#: transactions.xml:61(para)
+msgid "What is the scope of a unit of work? Can a single Hibernate <literal>Session</literal> span several database transactions or is this a one-to-one relationship of scopes? When should you open and close a <literal>Session</literal> and how do you demarcate the database transaction boundaries?"
+msgstr ""
+
+#: transactions.xml:69(title)
+msgid "Unit of work"
+msgstr ""
+
+#: transactions.xml:71(para)
+msgid "First, don't use the <emphasis>session-per-operation</emphasis> antipattern, that is, don't open and close a <literal>Session</literal> for every simple database call in a single thread! Of course, 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. (Note that this also means that auto-commit after every single SQL statement is useless in an application, this mode is intended for ad-hoc SQL console work. Hibernate disables, or expects the application server to do so, auto-commit mode immediately.) Database transactions are never optional, all communication with a database has to occur inside a transaction, no matter if you read or write data. As explained, 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 much more maintainable and extensible."
+msgstr ""
+
+#: transactions.xml:87(para)
+msgid "The most common pattern in a multi-user client/server application is <emphasis>session-per-request</emphasis>. In this model, a request from the client is send to the server (where the Hibernate persistence layer runs), a new Hibernate <literal>Session</literal> is opened, and all database operations are executed in this unit of work. Once the work has been completed (and the response for the client has been prepared), the session is flushed and closed. You would also use a single database transaction to serve the clients request, starting and committing it when you open and close the <literal>Session</literal>. The relationship between the two is one-to-one and this model is a perfect fit for many applications."
+msgstr ""
+
+#: transactions.xml:99(para)
+msgid "The challenge lies in the implementation. Hibernate provides built-in management of the \"current session\" to simplify this pattern. All you have to do is start a transaction when a server request has to be processed, and end the transaction before the response is send to the client. You can do this in any way you like, common solutions are <literal>ServletFilter</literal>, 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 decide to use programmatic transaction demarcation, prefer the Hibernate <literal>Transaction</literal> API shown later in this chapter, for ease of use and code portability."
+msgstr ""
+
+#: transactions.xml:112(para)
+msgid "Your application code can access a \"current session\" to process the request by simply calling <literal>sessionFactory.getCurrentSession()</literal> anywhere and as often as needed. You will always get a <literal>Session</literal> 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 ""
+
+#: transactions.xml:120(para)
+msgid "Sometimes it is convenient to extend the scope of a <literal>Session</literal> 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 complete is easy to do if you implement your own interceptor. However, it is not easily doable if you rely on EJBs with container-managed transactions, as 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 around this <emphasis>Open Session in View</emphasis> pattern."
+msgstr ""
+
+#: transactions.xml:135(title)
+msgid "Long conversations"
+msgstr ""
+
+#: transactions.xml:137(para)
+msgid "The session-per-request pattern is not the only useful concept you can use to design units of work. Many business processes require a whole series of interactions with the user interleaved with database accesses. In web and enterprise applications it is not acceptable for a database transaction to span a user interaction. Consider the following example:"
+msgstr ""
+
+#: transactions.xml:147(para)
+msgid "The first screen of a dialog opens, the data seen by the user has been loaded in a particular <literal>Session</literal> and database transaction. The user is free to modify the objects."
+msgstr ""
+
+#: transactions.xml:154(para)
+msgid "The user clicks \"Save\" after 5 minutes and expects his modifications to be made persistent; he also expects that he was the only person editing this information and that no conflicting modification can occur."
+msgstr ""
+
+#: transactions.xml:162(para)
+msgid "We call this unit of work, from the point of view of the user, a long running <emphasis>conversation</emphasis> (or <emphasis>application transaction</emphasis>). There are many ways how you can implement this in your application."
+msgstr ""
+
+#: transactions.xml:168(para)
+msgid "A first naive implementation might keep the <literal>Session</literal> 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 of course an anti-pattern, since lock contention would not allow the application to scale with the number of concurrent users."
+msgstr ""
+
+#: transactions.xml:176(para)
+msgid "Clearly, we have to use several database transactions to implement the converastion. 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 (e.g. in a wizard-style dialog spanning several request/response cycles). This is easier to implement than it might sound, especially if you use Hibernate's features:"
+msgstr ""
+
+#: transactions.xml:189(para)
+msgid "<emphasis>Automatic Versioning</emphasis> - Hibernate can do automatic optimistic concurrency control for you, it can automatically detect if a concurrent modification occured during user think time. Usually we only check at the end of the conversation."
+msgstr ""
+
+#: transactions.xml:197(para)
+msgid "<emphasis>Detached Objects</emphasis> - If you decide to use the already discussed <emphasis>session-per-request</emphasis> pattern, all loaded instances will be in 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</emphasis>. Automatic versioning is used to isolate concurrent modifications."
+msgstr ""
+
+#: transactions.xml:207(para)
+msgid "<emphasis>Extended (or Long) Session</emphasis> - The Hibernate <literal>Session</literal> may 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</literal> is usually not allowed to be flushed automatically, but explicitely."
+msgstr ""
+
+#: transactions.xml:220(para)
+msgid "Both <emphasis>session-per-request-with-detached-objects</emphasis> and <emphasis>session-per-conversation</emphasis> have advantages and disadvantages, we discuss them later in this chapter in the context of optimistic concurrency control."
+msgstr ""
+
+#: transactions.xml:229(title)
+msgid "Considering object identity"
+msgstr ""
+
+#: transactions.xml:231(para)
+msgid "An application may concurrently access the same persistent state in two different <literal>Session</literal>s. However, an instance of a persistent class is never shared between two <literal>Session</literal> instances. Hence there are two different notions of identity:"
+msgstr ""
+
+#: transactions.xml:240(term)
+msgid "Database Identity"
+msgstr ""
+
+#: transactions.xml:243(literal)
+msgid "foo.getId().equals( bar.getId() )"
+msgstr ""
+
+#: transactions.xml:248(term)
+msgid "JVM Identity"
+msgstr ""
+
+#: transactions.xml:251(literal)
+msgid "foo==bar"
+msgstr ""
+
+#: transactions.xml:257(para)
+msgid "Then for objects attached to a <emphasis>particular</emphasis><literal>Session</literal> (i.e. in the scope of a <literal>Session</literal>) the two notions are equivalent, and JVM identity for database identity is guaranteed by Hibernate. However, 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 (automatic versioning) at flush/commit time, using an optimistic approach."
+msgstr ""
+
+#: transactions.xml:266(para)
+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 only doesn't need expensive locking or other means of synchronization. The application never needs to synchronize on any business object, as long as it sticks to a single thread per <literal>Session</literal>. Within a <literal>Session</literal> the application may safely use <literal>==</literal> to compare objects."
+msgstr ""
+
+#: transactions.xml:275(para)
+msgid "However, an application that uses <literal>==</literal> outside of a <literal>Session</literal>, might see unexpected results. This might occur even in some unexpected places, for example, if you put two detached instances into the same <literal>Set</literal>. Both might have the same database identity (i.e. they represent the same row), but JVM identity is by definition not guaranteed for instances in detached state. The developer has to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods in persistent classes and implement his own notion of object equality. There is one caveat: Never use the database identifier to implement equality, use a business key, 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</literal>, changing the hashcode breaks the contract of t!
he <literal>Set</literal>. Attributes for business keys don't 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</literal>. See the Hibernate website for a more thorough discussion of this issue. Also note that this is not a Hibernate issue, but simply how Java object identity and equality has to be implemented."
+msgstr ""
+
+#: transactions.xml:296(title)
+msgid "Common issues"
+msgstr ""
+
+#: transactions.xml:298(para)
+msgid "Never use the anti-patterns <emphasis>session-per-user-session</emphasis> or <emphasis>session-per-application</emphasis> (of course, there are rare exceptions to this rule). Note that some of the following issues might also appear with the recommended patterns, make sure you understand the implications before making a design decision:"
+msgstr ""
+
+#: transactions.xml:307(para)
+msgid "A <literal>Session</literal> is not thread-safe. Things which are supposed to work concurrently, like HTTP requests, session beans, or Swing workers, will cause race conditions if a <literal>Session</literal> instance would be shared. If you keep your Hibernate <literal>Session</literal> in your <literal>HttpSession</literal> (discussed later), you should consider synchronizing access to your Http session. Otherwise, a user that clicks reload fast enough may use the same <literal>Session</literal> in two concurrently running threads."
+msgstr ""
+
+#: transactions.xml:318(para)
+msgid "An exception thrown by Hibernate means you have to rollback your database transaction and close the <literal>Session</literal> immediately (discussed later in more detail). If your <literal>Session</literal> is bound to the application, you have to stop the application. Rolling back the database transaction doesn't put your business objects back into the state they were at the start of the transaction. This means the database state and the business objects do get out of sync. Usually this is not a problem, because exceptions are not recoverable and you have to start over after rollback anyway."
+msgstr ""
+
+#: transactions.xml:330(para)
+msgid "The <literal>Session</literal> caches every object that is in persistent state (watched and checked for dirty state by Hibernate). This means it grows endlessly until you get an OutOfMemoryException, if you keep it open for a long time or simply load too much data. One solution for this is to call <literal>clear()</literal> and <literal>evict()</literal> to manage the <literal>Session</literal> cache, but you most likely should consider a Stored Procedure if you need mass data operations. Some solutions are shown in <xref linkend=\"batch\"/>. Keeping a <literal>Session</literal> open for the duration of a user session also means a high probability of stale data."
+msgstr ""
+
+#: transactions.xml:348(title)
+msgid "Database transaction demarcation"
+msgstr ""
+
+#: transactions.xml:350(para)
+msgid "Datatabase (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 ""
+
+#: transactions.xml:360(para)
+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, in other words, begin, commit, or rollback database transactions himself. 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 ""
+
+#: transactions.xml:370(para)
+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 you'd use programmatic transaction demaracation. Hibernate offers a wrapper API called <literal>Transaction</literal> 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 ""
+
+#: transactions.xml:379(para)
+msgid "Usually, ending a <literal>Session</literal> involves four distinct phases:"
+msgstr ""
+
+#: transactions.xml:385(para)
+msgid "flush the session"
+msgstr ""
+
+#: transactions.xml:390(para)
+msgid "commit the transaction"
+msgstr ""
+
+#: transactions.xml:395(para)
+msgid "close the session"
+msgstr ""
+
+#: transactions.xml:400(para)
+msgid "handle exceptions"
+msgstr ""
+
+#: transactions.xml:406(para)
+msgid "Flushing the session has been discussed earlier, we'll now have a closer look at transaction demarcation and exception handling in both managed- and non-managed environments."
+msgstr ""
+
+#: transactions.xml:413(title)
+msgid "Non-managed environment"
+msgstr ""
+
+#: transactions.xml:415(para)
+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 ""
+
+#: transactions.xml:441(para)
+msgid "You don't have to <literal>flush()</literal> the <literal>Session</literal> explicitly - the call to <literal>commit()</literal> automatically triggers the synchronization (depending upon the <xref linkend=\"objectstate-flushing\">FlushMode</xref> for the session. A call to <literal>close()</literal> marks the end of a session. The main implication of <literal>close()</literal> is that the JDBC connection will be relinquished by the session. This Java code is portable and runs in both non-managed and JTA environments."
+msgstr ""
+
+#: transactions.xml:450(para)
+msgid "A much more flexible solution is Hibernate's built-in \"current session\" context management, as described earlier:"
+msgstr ""
+
+#: transactions.xml:469(para)
+msgid "You will very likely never 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</literal> (and usually can only clean up and exit) are in different layers. The current context management by Hibernate can significantly simplify this design, as all you need is access to a <literal>SessionFactory</literal>. Exception handling is discussed later in this chapter."
+msgstr ""
+
+#: transactions.xml:479(para)
+msgid "Note that you should select <literal>org.hibernate.transaction.JDBCTransactionFactory</literal> (which is the default), and for the second example <literal>\"thread\"</literal> as your <literal>hibernate.current_session_context_class</literal>."
+msgstr ""
+
+#: transactions.xml:488(title)
+msgid "Using JTA"
+msgstr ""
+
+#: transactions.xml:490(para)
+msgid "If your persistence layer runs in an application server (e.g. 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 ""
+
+#: transactions.xml:497(para)
+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</literal> API. So, the transaction management code is identical to the non-managed environment."
+msgstr ""
+
+#: transactions.xml:522(para)
+msgid "If you want to use a transaction-bound <literal>Session</literal>, that is, the <literal>getCurrentSession()</literal> functionality for easy context propagation, you will have to use the JTA <literal>UserTransaction</literal> API directly:"
+msgstr ""
+
+#: transactions.xml:546(para)
+msgid "With CMT, transaction demarcation is done in session bean deployment descriptors, not programatically, hence, the code is reduced to:"
+msgstr ""
+
+#: transactions.xml:558(para)
+msgid "In a CMT/EJB even rollback happens automatically, since an unhandled <literal>RuntimeException</literal> thrown by a session bean method tells the container to set the global transaction to rollback. <emphasis>This means you do not need to use the Hibernate <literal>Transaction</literal> API at all with BMT or CMT, and you get automatic propagation of the \"current\" Session bound to the transaction.</emphasis>"
+msgstr ""
+
+#: transactions.xml:566(para)
+msgid "Note that you should 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, when you configure Hibernate's transaction factory. Remember to also set <literal>hibernate.transaction.manager_lookup_class</literal>. Furthermore, make sure that your <literal>hibernate.current_session_context_class</literal> is either unset (backwards compatiblity), or set to <literal>\"jta\"</literal>."
+msgstr ""
+
+#: transactions.xml:575(para)
+msgid "The <literal>getCurrentSession()</literal> operation has one downside in a JTA environment. There is one caveat to the use of <literal>after_statement</literal> connection release mode, which is then used by default. Due to a silly limitation of the JTA spec, it is not possible for Hibernate to automatically clean up any unclosed <literal>ScrollableResults</literal> or <literal>Iterator</literal> instances returned by <literal>scroll()</literal> or <literal>iterate()</literal>. You <emphasis>must</emphasis> release the underlying database cursor by calling <literal>ScrollableResults.close()</literal> or <literal>Hibernate.close(Iterator)</literal> explicity from a <literal>finally</literal> block. (Of course, most applications can easily avoid using <literal>scroll()</literal> or <literal>iterate()</literal> at all from the JTA or CMT code.)"
+msgstr ""
+
+#: transactions.xml:591(title)
+msgid "Exception handling"
+msgstr ""
+
+#: transactions.xml:593(para)
+msgid "If the <literal>Session</literal> throws an exception (including any <literal>SQLException</literal>), you should immediately rollback the database transaction, call <literal>Session.close()</literal> and discard the <literal>Session</literal> instance. Certain methods of <literal>Session</literal> will <emphasis>not</emphasis> leave the session in a consistent state. No exception thrown by Hibernate can be treated as recoverable. Ensure that the <literal>Session</literal> will be closed by calling <literal>close()</literal> in a <literal>finally</literal> block."
+msgstr ""
+
+#: transactions.xml:604(para)
+msgid "The <literal>HibernateException</literal>, which wraps most of the errors that can occur in a Hibernate persistence layer, is an unchecked exception (it wasn't in older versions of Hibernate). In our opinion, we shouldn't 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 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 which are not a <literal>HibernateException</literal>. These are, again, not recoverable and appropriate action should be taken."
+msgstr ""
+
+#: transactions.xml:616(para)
+msgid "Hibernate wraps <literal>SQLException</literal>s thrown while interacting with the database in a <literal>JDBCException</literal>. In fact, Hibernate will attempt to convert the eexception into a more meningful subclass of <literal>JDBCException</literal>. The underlying <literal>SQLException</literal> is always available via <literal>JDBCException.getCause()</literal>. Hibernate converts the <literal>SQLException</literal> into an appropriate <literal>JDBCException</literal> subclass using the <literal>SQLExceptionConverter</literal> attached to the <literal>SessionFactory</literal>. By default, the <literal>SQLExceptionConverter</literal> is defined by the configured dialect; however, it is also possible to plug in a custom implementation (see the javadocs for the <literal>SQLExceptionConverterFactory</literal> class for details). The standard <literal>JDBCException</literal> subtypes are:"
+msgstr ""
+
+#: transactions.xml:632(para)
+msgid "<literal>JDBCConnectionException</literal> - indicates an error with the underlying JDBC communication."
+msgstr ""
+
+#: transactions.xml:638(para)
+msgid "<literal>SQLGrammarException</literal> - indicates a grammar or syntax problem with the issued SQL."
+msgstr ""
+
+#: transactions.xml:644(para)
+msgid "<literal>ConstraintViolationException</literal> - indicates some form of integrity constraint violation."
+msgstr ""
+
+#: transactions.xml:650(para)
+msgid "<literal>LockAcquisitionException</literal> - indicates an error acquiring a lock level necessary to perform the requested operation."
+msgstr ""
+
+#: transactions.xml:656(para)
+msgid "<literal>GenericJDBCException</literal> - a generic exception which did not fall into any of the other categories."
+msgstr ""
+
+#: transactions.xml:666(title)
+msgid "Transaction timeout"
+msgstr ""
+
+#: transactions.xml:668(para)
+msgid "One extremely 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 functioanlity is abstracted by the Hibernate <literal>Transaction</literal> object."
+msgstr ""
+
+#: transactions.xml:701(para)
+msgid "Note that <literal>setTimeout()</literal> may not be called in a CMT bean, where transaction timeouts must be defined declaratively."
+msgstr ""
+
+#: transactions.xml:711(title)
+msgid "Optimistic concurrency control"
+msgstr ""
+
+#: transactions.xml:713(para)
+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 for three possible approaches to writing application code that uses optimistic concurrency. The use cases we show are in the context of long conversations, but version checking also has the benefit of preventing lost updates in single database transactions."
+msgstr ""
+
+#: transactions.xml:724(title)
+msgid "Application version checking"
+msgstr ""
+
+#: transactions.xml:726(para)
+msgid "In an implementation without much help from Hibernate, each interaction with the database occurs in a new <literal>Session</literal> and the developer is responsible for reloading all persistent instances from the database before manipulating them. This approach forces the application 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 ""
+
+#: transactions.xml:747(para)
+msgid "The <literal>version</literal> property is mapped using <literal><version></literal>, and Hibernate will automatically increment it during flush if the entity is dirty."
+msgstr ""
+
+#: transactions.xml:753(para)
+msgid "Of course, if you are operating in a low-data-concurrency environment and don't require version checking, you may use this approach and just skip the version check. In that case, <emphasis>last commit wins</emphasis> will be the default strategy for your long conversations. Keep in mind 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 ""
+
+#: transactions.xml:762(para)
+msgid "Clearly, manual version checking is only feasible in very trivial circumstances and not practical for most applications. Often not only single instances, but complete graphs of modified ojects have to be checked. Hibernate offers automatic version checking with either an extended <literal>Session</literal> or detached instances as the design paradigm."
+msgstr ""
+
+#: transactions.xml:773(title)
+msgid "Extended session and automatic versioning"
+msgstr ""
+
+#: transactions.xml:775(para)
+msgid "A single <literal>Session</literal> instance and its persistent instances are used for the whole conversation, known as <emphasis>session-per-conversation</emphasis>. Hibernate checks instance versions at flush time, throwing an exception if concurrent modification is detected. It's 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 ""
+
+#: transactions.xml:784(para)
+msgid "The <literal>Session</literal> 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 need not concern itself with version checking or with reattaching detached instances, nor does it have to reload instances in every database transaction."
+msgstr ""
+
+#: transactions.xml:800(para)
+msgid "The <literal>foo</literal> object still knows which <literal>Session</literal> 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 aren't updating, you may call <literal>Session.lock()</literal> with <literal>LockMode.READ</literal> on any objects that might have been updated by another transaction. You don't need to lock any data that you <emphasis>are</emphasis> updating. Usually you would set <literal>FlushMode.MANUAL</literal> on an extended <literal>Session</literal>, so that only the last database transaction cycle is allowed to actually persist all modifications made in this conversation. Hence, only this last database transaction would include the <literal>flush()</literal> operation, and then also <literal>close()!
</literal> the session to end the conversation."
+msgstr ""
+
+#: transactions.xml:815(para)
+msgid "This pattern is problematic if the <literal>Session</literal> is too big to be stored during user think time, e.g. an <literal>HttpSession</literal> should be kept as small as possible. As the <literal>Session</literal> is also the (mandatory) first-level cache and contains all loaded objects, we can probably use this strategy only for a few request/response cycles. You should use a <literal>Session</literal> only for a single conversation, as it will soon also have stale data."
+msgstr ""
+
+#: transactions.xml:825(para)
+msgid "(Note that earlier Hibernate versions required explicit disconnection and reconnection of a <literal>Session</literal>. These methods are deprecated, as beginning and ending a transaction has the same effect.)"
+msgstr ""
+
+#: transactions.xml:831(para)
+msgid "Also note that you should keep the disconnected <literal>Session</literal> close to the persistence layer. In other words, use an EJB stateful session bean to hold the <literal>Session</literal> in a three-tier environment, and don't transfer it to the web layer (or even serialize it to a separate tier) to store it in the <literal>HttpSession</literal>."
+msgstr ""
+
+#: transactions.xml:839(para)
+msgid "The extended session pattern, or <emphasis>session-per-conversation</emphasis>, is more difficult to implement with automatic current session context management. You need to supply your own implementation of the <literal>CurrentSessionContext</literal> for this, see the Hibernate Wiki for examples."
+msgstr ""
+
+#: transactions.xml:849(title)
+msgid "Detached objects and automatic versioning"
+msgstr ""
+
+#: transactions.xml:851(para)
+msgid "Each interaction with the persistent store occurs in a new <literal>Session</literal>. However, the same persistent instances are reused for each interaction with the database. The application manipulates the state of detached instances originally loaded in another <literal>Session</literal> and then reattaches them using <literal>Session.update()</literal>, <literal>Session.saveOrUpdate()</literal>, or <literal>Session.merge()</literal>."
+msgstr ""
+
+#: transactions.xml:867(para)
+msgid "Again, Hibernate will check instance versions during flush, throwing an exception if conflicting updates occured."
+msgstr ""
+
+#: transactions.xml:872(para)
+msgid "You may also call <literal>lock()</literal> instead of <literal>update()</literal> and use <literal>LockMode.READ</literal> (performing a version check, bypassing all caches) if you are sure that the object has not been modified."
+msgstr ""
+
+#: transactions.xml:881(title)
+msgid "Customizing automatic versioning"
+msgstr ""
+
+#: transactions.xml:883(para)
+msgid "You may disable Hibernate's automatic version increment for particular properties and collections by setting the <literal>optimistic-lock</literal> mapping attribute to <literal>false</literal>. Hibernate will then no longer increment versions if the property is dirty."
+msgstr ""
+
+#: transactions.xml:890(para)
+msgid "Legacy database schemas are often static and can't be modified. Or, other applications might also access the same database and don't know how to handle version numbers or even timestamps. In both cases, versioning can't rely on a particular column in a table. To force a version check without a version or timestamp property mapping, with a comparison of the state of all fields in a row, turn on <literal>optimistic-lock=\"all\"</literal> in the <literal><class></literal> mapping. Note that this concepetually only works if Hibernate can compare the old and new state, i.e. if you use a single long <literal>Session</literal> and not session-per-request-with-detached-objects."
+msgstr ""
+
+#: transactions.xml:901(para)
+msgid "Sometimes concurrent modification can be permitted as long as the changes that have been made don't overlap. If you set <literal>optimistic-lock=\"dirty\"</literal> when mapping the <literal><class></literal>, Hibernate will only compare dirty fields during flush."
+msgstr ""
+
+#: transactions.xml:907(para)
+msgid "In both cases, with dedicated version/timestamp columns or with full/dirty field comparison, Hibernate uses a single <literal>UPDATE</literal> statement (with an appropriate <literal>WHERE</literal> clause) per entity to execute the version check and update the information. If you use transitive persistence to cascade reattachment to associated entities, Hibernate might execute uneccessary updates. This is usually not a problem, but <emphasis>on update</emphasis> 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\"</literal> in the <literal><class></literal> mapping, forcing Hibernate to <literal>SELECT</literal> the instance to ensure that changes did actually occur, before updating the row."
+msgstr ""
+
+#: transactions.xml:925(title)
+msgid "Pessimistic Locking"
+msgstr ""
+
+#: transactions.xml:927(para)
+msgid "It is not intended that users spend much time worring about locking strategies. Its 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 sometimes wish to obtain exclusive pessimistic locks, or re-obtain locks at the start of a new transaction."
+msgstr ""
+
+#: transactions.xml:934(para)
+msgid "Hibernate will always use the locking mechanism of the database, never lock objects in memory!"
+msgstr ""
+
+#: transactions.xml:939(para)
+msgid "The <literal>LockMode</literal> class defines the different lock levels that may be acquired by Hibernate. A lock is obtained by the following mechanisms:"
+msgstr ""
+
+#: transactions.xml:946(para)
+msgid "<literal>LockMode.WRITE</literal> is acquired automatically when Hibernate updates or inserts a row."
+msgstr ""
+
+#: transactions.xml:952(para)
+msgid "<literal>LockMode.UPGRADE</literal> may be acquired upon explicit user request using <literal>SELECT ... FOR UPDATE</literal> on databases which support that syntax."
+msgstr ""
+
+#: transactions.xml:958(para)
+msgid "<literal>LockMode.UPGRADE_NOWAIT</literal> may be acquired upon explicit user request using a <literal>SELECT ... FOR UPDATE NOWAIT</literal> under Oracle."
+msgstr ""
+
+#: transactions.xml:964(para)
+msgid "<literal>LockMode.READ</literal> is acquired automatically when Hibernate reads data under Repeatable Read or Serializable isolation level. May be re-acquired by explicit user request."
+msgstr ""
+
+#: transactions.xml:971(para)
+msgid "<literal>LockMode.NONE</literal> represents the absence of a lock. All objects switch to this lock mode at the end of a <literal>Transaction</literal>. Objects associated with the session via a call to <literal>update()</literal> or <literal>saveOrUpdate()</literal> also start out in this lock mode."
+msgstr ""
+
+#: transactions.xml:980(para)
+msgid "The \"explicit user request\" is expressed in one of the following ways:"
+msgstr ""
+
+#: transactions.xml:986(para)
+msgid "A call to <literal>Session.load()</literal>, specifying a <literal>LockMode</literal>."
+msgstr ""
+
+#: transactions.xml:991(para)
+msgid "A call to <literal>Session.lock()</literal>."
+msgstr ""
+
+#: transactions.xml:996(para)
+msgid "A call to <literal>Query.setLockMode()</literal>."
+msgstr ""
+
+#: transactions.xml:1002(para)
+msgid "If <literal>Session.load()</literal> is called with <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, and the requested object was not yet loaded by the session, the object is loaded using <literal>SELECT ... FOR UPDATE</literal>. If <literal>load()</literal> is called for an object that is already loaded with a less restrictive lock than the one requested, Hibernate calls <literal>lock()</literal> for that object."
+msgstr ""
+
+#: transactions.xml:1011(para)
+msgid "<literal>Session.lock()</literal> performs a version number check if the specified lock mode is <literal>READ</literal>, <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>. (In the case of <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, <literal>SELECT ... FOR UPDATE</literal> is used.)"
+msgstr ""
+
+#: transactions.xml:1018(para)
+msgid "If the database does not support the requested lock mode, Hibernate will use an appropriate alternate mode (instead of throwing an exception). This ensures that applications will be portable."
+msgstr ""
+
+#: transactions.xml:1027(title)
+msgid "Connection Release Modes"
+msgstr ""
+
+#: transactions.xml:1029(para)
+msgid "The legacy (2.x) behavior of Hibernate in regards to JDBC connection management was that a <literal>Session</literal> would obtain a connection when it was first needed and then hold unto that connection until the session was closed. Hibernate 3.x introduced the notion of connection release modes to tell a session how to handle its JDBC connections. Note that the following discussion is pertinent only to connections provided through a configured <literal>ConnectionProvider</literal>; 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</literal>:"
+msgstr ""
+
+#: transactions.xml:1043(para)
+msgid "<literal>ON_CLOSE</literal> - is essentially the legacy behavior described above. The Hibernate session obatins a connection when it first needs to perform some JDBC access and holds unto that connection until the session is closed."
+msgstr ""
+
+#: transactions.xml:1050(para)
+msgid "<literal>AFTER_TRANSACTION</literal> - says to release connections after a <literal>org.hibernate.Transaction</literal> has completed."
+msgstr ""
+
+#: transactions.xml:1056(para)
+msgid "<literal>AFTER_STATEMENT</literal> (also referred to as aggressive release) - says to release connections after each and 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</literal>."
+msgstr ""
+
+#: transactions.xml:1066(para)
+msgid "The configuration parameter <literal>hibernate.connection.release_mode</literal> is used to specify which release mode to use. The possible values:"
+msgstr ""
+
+#: transactions.xml:1073(para)
+msgid "<literal>auto</literal> (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. It is rarely a good idea to 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 ""
+
+#: transactions.xml:1083(para)
+msgid "<literal>on_close</literal> - says to use ConnectionReleaseMode.ON_CLOSE. This setting is left for backwards compatibility, but its use is highly discouraged."
+msgstr ""
+
+#: transactions.xml:1089(para)
+msgid "<literal>after_transaction</literal> - says to use 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 ""
+
+#: transactions.xml:1097(para)
+msgid "<literal>after_statement</literal> - says to use ConnectionReleaseMode.AFTER_STATEMENT. Additionally, the configured <literal>ConnectionProvider</literal> is consulted to see if it supports this setting (<literal>supportsAggressiveRelease()</literal>). 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 we make a call into <literal>ConnectionProvider.getConnection()</literal> or in auto-commit environments where it does not matter whether we get back the same connection."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: transactions.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/tutorial.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/tutorial.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/tutorial.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,568 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:35-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: tutorial.xml:7(title)
+msgid "Introduction to Hibernate"
+msgstr ""
+
+#: tutorial.xml:10(title)
+msgid "Preface"
+msgstr ""
+
+#: tutorial.xml:12(para)
+msgid "This chapter is an introductory tutorial for new users of Hibernate. We start with a simple command line application using an in-memory database and develop it in easy to understand steps."
+msgstr ""
+
+#: tutorial.xml:18(para)
+msgid "This tutorial is intended for new users of Hibernate but requires Java and SQL knowledge. It is based on a tutorial by Michael Gloegl, the third-party libraries we name are for JDK 1.4 and 5.0. You might need others for JDK 1.3."
+msgstr ""
+
+#: tutorial.xml:24(para)
+msgid "The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr ""
+
+#: tutorial.xml:32(title)
+msgid "Part 1 - The first Hibernate Application"
+msgstr ""
+
+#: tutorial.xml:34(para)
+msgid "First, we'll create a simple console-based Hibernate application. We use an Java database (HSQL DB), so we do not have to install any database server."
+msgstr ""
+
+#: tutorial.xml:39(para)
+msgid "Let's assume we need a small database application that can store events we want to attend, and information about the hosts of these events."
+msgstr ""
+
+#: tutorial.xml:44(para)
+msgid "The first thing we do, is set up our development directory and put all the Java libraries we need into it. Download the Hibernate distribution from the Hibernate website. Extract the package and place all required libraries found in <literal>/lib</literal> into into the <literal>/lib</literal> directory of your new development working directory. It should look like this:"
+msgstr ""
+
+#: tutorial.xml:65(para)
+msgid "This is the minimum set of required libraries (note that we also copied hibernate3.jar, the main archive) for Hibernate <emphasis>at the time of writing</emphasis>. The Hibernate release you are using might require more or less libraries. See the <literal>README.txt</literal> file in the <literal>lib/</literal> directory of the Hibernate distribution for more information about required and optional third-party libraries. (Actually, Log4j is not required but preferred by many developers.)"
+msgstr ""
+
+#: tutorial.xml:74(para)
+msgid "Next we create a class that represents the event we want to store in database."
+msgstr ""
+
+#: tutorial.xml:79(title)
+msgid "The first class"
+msgstr ""
+
+#: tutorial.xml:81(para)
+msgid "Our first persistent class is a simple JavaBean class with some properties:"
+msgstr ""
+
+#: tutorial.xml:122(para)
+msgid "You can see that this class uses standard JavaBean naming conventions for property getter and setter methods, as well as private visibility for the fields. This is a recommended design - but not required. Hibernate can also access fields directly, the benefit of accessor methods is robustness for refactoring. The no-argument constructor is required to instantiate an object of this class through reflection."
+msgstr ""
+
+#: tutorial.xml:130(para)
+msgid "The <literal>id</literal> property holds a unique identifier value for a particular event. All persistent entity classes (there are less important dependent classes as well) will need such an identifier property if we want to use the full feature set of Hibernate. In fact, most applications (esp. web applications) need to distinguish objects by identifier, so you should consider this a feature rather than a limitation. However, we usually don't manipulate the identity of an object, hence the setter method should be private. Only Hibernate will assign identifiers when an object is saved. You can see that Hibernate can access public, private, and protected accessor methods, as well as (public, private, protected) fields directly. The choice is up to you and you can match it to fit your application design."
+msgstr ""
+
+#: tutorial.xml:142(para)
+msgid "The no-argument constructor is a requirement for all persistent classes; Hibernate has to create objects for you, using Java Reflection. The constructor can be private, however, package visibility is required for runtime proxy generation and efficient data retrieval without bytecode instrumentation."
+msgstr ""
+
+#: tutorial.xml:149(para)
+msgid "Place this Java source file in a directory called <literal>src</literal> in the development folder, and in its correct package. The directory should now look like this:"
+msgstr ""
+
+#: tutorial.xml:161(para)
+msgid "In the next step, we tell Hibernate about this persistent class."
+msgstr ""
+
+#: tutorial.xml:168(title)
+msgid "The mapping file"
+msgstr ""
+
+#: tutorial.xml:170(para)
+msgid "Hibernate needs to know how to load and store objects of the persistent class. This is where the Hibernate mapping file comes into play. The mapping file tells Hibernate what table in the database it has to access, and what columns in that table it should use."
+msgstr ""
+
+#: tutorial.xml:177(para)
+msgid "The basic structure of a mapping file looks like this:"
+msgstr ""
+
+#: tutorial.xml:190(para)
+msgid "Note that the Hibernate DTD is very sophisticated. You can use it for auto-completion of XML mapping elements and attributes in your editor or IDE. You also should open up the DTD file in your text editor - it's the easiest way to get an overview of all elements and attributes and to see the defaults, as well as some comments. Note that Hibernate will not load the DTD file from the web, but first look it up from the classpath of the application. The DTD file is included in <literal>hibernate3.jar</literal> as well as in the <literal>src/</literal> directory of the Hibernate distribution."
+msgstr ""
+
+#: tutorial.xml:201(para)
+msgid "We will omit the DTD declaration in future examples to shorten the code. It is of course not optional."
+msgstr ""
+
+#: tutorial.xml:206(para)
+msgid "Between the two <literal>hibernate-mapping</literal> tags, include a <literal>class</literal> element. All persistent entity classes (again, there might be dependent classes later on, which are not first-class entities) need such a mapping, to a table in the SQL database:"
+msgstr ""
+
+#: tutorial.xml:221(para)
+msgid "So far we told Hibernate how to persist and load object of class <literal>Event</literal> to the table <literal>EVENTS</literal>, each instance represented by a row in that table. Now we continue with a mapping of the unique identifier property to the tables primary key. In addition, as we don't want to care about handling this identifier, we configure Hibernate's identifier generation strategy for a surrogate primary key column:"
+msgstr ""
+
+#: tutorial.xml:239(para)
+msgid "The <literal>id</literal> element is the declaration of the identifer property, <literal>name=\"id\"</literal> declares the name of the Java property - Hibernate will use the getter and setter methods to access the property. The column attribute tells Hibernate which column of the <literal>EVENTS</literal> table we use for this primary key. The nested <literal>generator</literal> element specifies the identifier generation strategy, in this case we used <literal>native</literal>, which picks the best strategy depending on the configured database (dialect). Hibernate supports database generated, globally unique, as well as application assigned identifiers (or any strategy you have written an extension for)."
+msgstr ""
+
+#: tutorial.xml:252(para)
+msgid "Finally we include declarations for the persistent properties of the class in the mapping file. By default, no properties of the class are considered persistent:"
+msgstr ""
+
+#: tutorial.xml:271(para)
+msgid "Just as with the <literal>id</literal> element, the <literal>name</literal> attribute of the <literal>property</literal> element tells Hibernate which getter and setter methods to use. So, in this case, Hibernate will look for <literal>getDate()/setDate()</literal>, as well as <literal>getTitle()/setTitle()</literal>."
+msgstr ""
+
+#: tutorial.xml:278(para)
+msgid "Why does the <literal>date</literal> property mapping include the <literal>column</literal> attribute, but the <literal>title</literal> doesn't? Without the <literal>column</literal> attribute Hibernate by default uses the property name as the column name. This works fine for <literal>title</literal>. However, <literal>date</literal> is a reserved keyword in most database, so we better map it to a different name."
+msgstr ""
+
+#: tutorial.xml:287(para)
+msgid "The next interesting thing is that the <literal>title</literal> mapping also lacks a <literal>type</literal> attribute. The types we declare and use in the mapping files are not, as you might expect, Java data types. They are also not SQL database types. These types are so called <emphasis>Hibernate mapping types</emphasis>, converters which can translate from Java to SQL data types and vice versa. Again, Hibernate will try to determine the correct conversion and mapping type itself if the <literal>type</literal> attribute is not present in the mapping. In some cases this automatic detection (using Reflection on the Java class) might not have the default you expect or need. This is the case with the <literal>date</literal> property. Hibernate can't know if the property (which is of <literal>java.util.Date</literal>) should map to a SQL <literal>date</literal>, <literal>timestamp</literal>, or <literal>time</literal> column. We preserve full date and time information !
by mapping the property with a <literal>timestamp</literal> converter."
+msgstr ""
+
+#: tutorial.xml:303(para)
+msgid "This mapping file should be saved as <literal>Event.hbm.xml</literal>, right in the directory next to the <literal>Event</literal> Java class source file. The naming of mapping files can be arbitrary, however the <literal>hbm.xml</literal> suffix is a convention in the Hibernate developer community. The directory structure should now look like this:"
+msgstr ""
+
+#: tutorial.xml:319(para)
+msgid "We continue with the main configuration of Hibernate."
+msgstr ""
+
+#: tutorial.xml:326(title)
+msgid "Hibernate configuration"
+msgstr ""
+
+#: tutorial.xml:328(para)
+msgid "We now have a persistent class and its mapping file in place. It is time to configure Hibernate. Before we do this, we will need a database. HSQL DB, a java-based SQL DBMS, can be downloaded from the HSQL DB website(http://hsqldb.org/). Actually, you only need the <literal>hsqldb.jar</literal> from this download. Place this file in the <literal>lib/</literal> directory of the development folder."
+msgstr ""
+
+#: tutorial.xml:336(para)
+msgid "Create a directory called <literal>data</literal> in the root of the development directory - this is where HSQL DB will store its data files. Now start the database by running <literal>java -classpath ../lib/hsqldb.jar org.hsqldb.Server</literal> in this data directory. You can see it start up and bind to a TCP/IP socket, this is where our application will connect later. If you want to start with a fresh database during this tutorial, shutdown HSQL DB (press <literal>CTRL + C</literal> in the window), delete all files in the <literal>data/</literal> directory, and start HSQL DB again."
+msgstr ""
+
+#: tutorial.xml:346(para)
+msgid "Hibernate is the layer in your application which connects to this database, so it needs connection information. The connections are made through a JDBC connection pool, which we also have to configure. The Hibernate distribution contains several open source JDBC connection pooling tools, but will use the Hibernate built-in connection pool for this tutorial. Note that you have to copy the required library into your classpath and use different connection pooling settings if you want to use a production-quality third party JDBC pooling software."
+msgstr ""
+
+#: tutorial.xml:356(para)
+msgid "For Hibernate's configuration, we can use a simple <literal>hibernate.properties</literal> file, a slightly more sophisticated <literal>hibernate.cfg.xml</literal> file, or even complete programmatic setup. Most users prefer the XML configuration file:"
+msgstr ""
+
+#: tutorial.xml:401(para)
+msgid "Note that this XML configuration uses a different DTD. We configure Hibernate's <literal>SessionFactory</literal> - a global factory responsible for a particular database. If you have several databases, use several <literal><session-factory></literal> configurations, usually in several configuration files (for easier startup)."
+msgstr ""
+
+#: tutorial.xml:409(para)
+msgid "The first four <literal>property</literal> elements contain the necessary configuration for the JDBC connection. The dialect <literal>property</literal> element specifies the particular SQL variant Hibernate generates. Hibernate's automatic session management for persistence contexts will come in handy as you will soon see. The <literal>hbm2ddl.auto</literal> option turns on automatic generation of database schemas - directly into the database. This can of course also be turned off (by removing the config option) or redirected to a file with the help of the <literal>SchemaExport</literal> Ant task. Finally, we add the mapping file(s) for persistent classes to the configuration."
+msgstr ""
+
+#: tutorial.xml:422(para)
+msgid "Copy this file into the source directory, so it will end up in the root of the classpath. Hibernate automatically looks for a file called <literal>hibernate.cfg.xml</literal> in the root of the classpath, on startup."
+msgstr ""
+
+#: tutorial.xml:431(title)
+msgid "Building with Ant"
+msgstr ""
+
+#: tutorial.xml:433(para)
+msgid "We'll now build the tutorial with Ant. You will need to have Ant installed - get it from the <ulink url=\"http://ant.apache.org/bindownload.cgi\">Ant download page</ulink>. How to install Ant will not be covered here. Please refer to the <ulink url=\"http://ant.apache.org/manual/index.html\">Ant manual</ulink>. After you have installed Ant, we can start to create the buildfile. It will be called <literal>build.xml</literal> and placed directly in the development directory."
+msgstr ""
+
+#: tutorial.xml:442(para)
+msgid "A basic build file looks like this:"
+msgstr ""
+
+#: tutorial.xml:479(para)
+msgid "This will tell Ant to add all files in the lib directory ending with <literal>.jar</literal> to the classpath used for compilation. It will also copy all non-Java source files to the target directory, e.g. configuration and Hibernate mapping files. If you now run Ant, you should get this output:"
+msgstr ""
+
+#: tutorial.xml:501(title)
+msgid "Startup and helpers"
+msgstr ""
+
+#: tutorial.xml:503(para)
+msgid "It's time to load and store some <literal>Event</literal> objects, but first we have to complete the setup with some infrastructure code. We have to startup Hibernate. This startup includes building a global <literal>SessionFactory</literal> object and to store it somewhere for easy access in application code. A <literal>SessionFactory</literal> can open up new <literal>Session</literal>'s. A <literal>Session</literal> represents a single-threaded unit of work, the <literal>SessionFactory</literal> is a thread-safe global object, instantiated once."
+msgstr ""
+
+#: tutorial.xml:513(para)
+msgid "We'll create a <literal>HibernateUtil</literal> helper class which takes care of startup and makes accessing a <literal>SessionFactory</literal> convenient. Let's have a look at the implementation:"
+msgstr ""
+
+#: tutorial.xml:545(para)
+msgid "This class does not only produce the global <literal>SessionFactory</literal> in its static initializer (called once by the JVM when the class is loaded), but also hides the fact that it uses a static singleton. It might as well lookup the <literal>SessionFactory</literal> from JNDI in an application server."
+msgstr ""
+
+#: tutorial.xml:552(para)
+msgid "If you give the <literal>SessionFactory</literal> a name in your configuration file, Hibernate will in fact try to bind it to JNDI after it has been built. To avoid this code completely you could also use JMX deployment and let the JMX-capable container instantiate and bind a <literal>HibernateService</literal> to JNDI. These advanced options are discussed in the Hibernate reference documentation."
+msgstr ""
+
+#: tutorial.xml:561(para)
+msgid "Place <literal>HibernateUtil.java</literal> in the development source directory, in a package next to <literal>events</literal>:"
+msgstr ""
+
+#: tutorial.xml:579(para)
+msgid "This should again compile without problems. We finally need to configure a logging system - Hibernate uses commons logging and leaves you the choice between Log4j and JDK 1.4 logging. Most developers prefer Log4j: copy <literal>log4j.properties</literal> from the Hibernate distribution (it's in the <literal>etc/</literal> directory) to your <literal>src</literal> directory, next to <literal>hibernate.cfg.xml</literal>. Have a look at the example configuration and change the settings if you like to have more verbose output. By default, only Hibernate startup message are shown on stdout."
+msgstr ""
+
+#: tutorial.xml:589(para)
+msgid "The tutorial infrastructure is complete - and we are ready to do some real work with Hibernate."
+msgstr ""
+
+#: tutorial.xml:597(title)
+msgid "Loading and storing objects"
+msgstr ""
+
+#: tutorial.xml:599(para)
+msgid "Finally, we can use Hibernate to load and store objects. We write an <literal>EventManager</literal> class with a <literal>main()</literal> method:"
+msgstr ""
+
+#: tutorial.xml:640(para)
+msgid "We create a new <literal>Event</literal> object, and hand it over to Hibernate. Hibernate now takes care of the SQL and executes <literal>INSERT</literal>s on the database. Let's have a look at the <literal>Session</literal> and <literal>Transaction</literal>-handling code before we run this."
+msgstr ""
+
+#: tutorial.xml:647(para)
+msgid "A <literal>Session</literal> is a single unit of work. For now we'll keep things simple and assume a one-to-one granularity between a Hibernate <literal>Session</literal> and a database transaction. To shield our code from the actual underlying transaction system (in this case plain JDBC, but it could also run with JTA) we use the <literal>Transaction</literal> API that is available on the Hibernate <literal>Session</literal>."
+msgstr ""
+
+#: tutorial.xml:655(para)
+msgid "What does <literal>sessionFactory.getCurrentSession()</literal> do? First, you can call it as many times and anywhere you like, once you get hold of your <literal>SessionFactory</literal> (easy thanks to <literal>HibernateUtil</literal>). The <literal>getCurrentSession()</literal> method always returns the \"current\" unit of work. Remember that we switched the configuration option for this mechanism to \"thread\" in <literal>hibernate.cfg.xml</literal>? Hence, the current unit of work is bound to the current Java thread that executes our application. However, this is not the full picture, you also have to consider scope, when a unit of work begins and when it ends."
+msgstr ""
+
+#: tutorial.xml:666(para)
+msgid "A <literal>Session</literal> begins when it is first needed, when the first call to <literal>getCurrentSession()</literal> is made. It is then bound by Hibernate to the current thread. When the transaction ends, either through commit or rollback, Hibernate automatically unbinds the <literal>Session</literal> from the thread and closes it for you. If you call <literal>getCurrentSession()</literal> again, you get a new <literal>Session</literal> and can start a new unit of work. This <emphasis>thread-bound</emphasis> programming model is the most popular way of using Hibernate, as it allows flexible layering of your code (transaction demarcation code can be separated from data access code, we'll do this later in this tutorial)."
+msgstr ""
+
+#: tutorial.xml:677(para)
+msgid "Related to the unit of work scope, should the Hibernate <literal>Session</literal> be used to execute one or several database operations? The above example uses one <literal>Session</literal> for one operation. This is pure coincidence, the example is just not complex enough to show any other approach. The scope of a Hibernate <literal>Session</literal> is flexible but you should never design your application to use a new Hibernate <literal>Session</literal> for <emphasis>every</emphasis> database operation. So even if you see it a few more times in the following (very trivial) examples, consider <emphasis>session-per-operation</emphasis> an anti-pattern. A real (web) application is shown later in this tutorial."
+msgstr ""
+
+#: tutorial.xml:688(para)
+msgid "Have a look at <xref linkend=\"transactions\"/> for more information about transaction handling and demarcation. We also skipped any error handling and rollback in the previous example."
+msgstr ""
+
+#: tutorial.xml:694(para)
+msgid "To run this first routine we have to add a callable target to the Ant build file:"
+msgstr ""
+
+#: tutorial.xml:705(para)
+msgid "The value of the <literal>action</literal> argument is set on the command line when calling the target:"
+msgstr ""
+
+#: tutorial.xml:712(para)
+msgid "You should see, after compilation, Hibernate starting up and, depending on your configuration, lots of log output. At the end you will find the following line:"
+msgstr ""
+
+#: tutorial.xml:719(para)
+msgid "This is the <literal>INSERT</literal> executed by Hibernate, the question marks represent JDBC bind parameters. To see the values bound as arguments, or to reduce the verbosity of the log, check your <literal>log4j.properties</literal>."
+msgstr ""
+
+#: tutorial.xml:725(para)
+msgid "Now we'd like to list stored events as well, so we add an option to the main method:"
+msgstr ""
+
+#: tutorial.xml:741(para)
+msgid "We also add a new <literal>listEvents() method</literal>:"
+msgstr ""
+
+#: tutorial.xml:758(para)
+msgid "What we do here is use an HQL (Hibernate Query Language) query to load all existing <literal>Event</literal> objects from the database. Hibernate will generate the appropriate SQL, send it to the database and populate <literal>Event</literal> objects with the data. You can create more complex queries with HQL, of course."
+msgstr ""
+
+#: tutorial.xml:765(para)
+msgid "Now, to execute and test all of this, follow these steps:"
+msgstr ""
+
+#: tutorial.xml:771(para)
+msgid "Run <literal>ant run -Daction=store</literal> to store something into the database and, of course, to generate the database schema before through hbm2ddl."
+msgstr ""
+
+#: tutorial.xml:777(para)
+msgid "Now disable hbm2ddl by commenting out the property in your <literal>hibernate.cfg.xml</literal> file. Usually you only leave it turned on in continous unit testing, but another run of hbm2ddl would <emphasis>drop</emphasis> everything you have stored - the <literal>create</literal> configuration setting actually translates into \"drop all tables from the schema, then re-create all tables, when the SessionFactory is build\"."
+msgstr ""
+
+#: tutorial.xml:787(para)
+msgid "If you now call Ant with <literal>-Daction=list</literal>, you should see the events you have stored so far. You can of course also call the <literal>store</literal> action a few times more."
+msgstr ""
+
+#: tutorial.xml:793(para)
+msgid "Note: Most new Hibernate users fail at this point and we see questions about <emphasis>Table not found</emphasis> error messages regularly. However, if you follow the steps outlined above you will not have this problem, as hbm2ddl creates the database schema on the first run, and subsequent application restarts will use this schema. If you change the mapping and/or database schema, you have to re-enable hbm2ddl once again."
+msgstr ""
+
+#: tutorial.xml:806(title)
+msgid "Part 2 - Mapping associations"
+msgstr ""
+
+#: tutorial.xml:808(para)
+msgid "We mapped a persistent entity class to a table. Let's build on this and add some class associations. First we'll add people to our application, and store a list of events they participate in."
+msgstr ""
+
+#: tutorial.xml:814(title)
+msgid "Mapping the Person class"
+msgstr ""
+
+#: tutorial.xml:816(para)
+msgid "The first cut of the <literal>Person</literal> class is simple:"
+msgstr ""
+
+#: tutorial.xml:835(para)
+msgid "Create a new mapping file called <literal>Person.hbm.xml</literal> (don't forget the DTD reference at the top):"
+msgstr ""
+
+#: tutorial.xml:853(para)
+msgid "Finally, add the new mapping to Hibernate's configuration:"
+msgstr ""
+
+#: tutorial.xml:860(para)
+msgid "We'll now create an association between these two entities. Obviously, persons can participate in events, and events have participants. The design questions we have to deal with are: directionality, multiplicity, and collection behavior."
+msgstr ""
+
+#: tutorial.xml:870(title)
+msgid "A unidirectional Set-based association"
+msgstr ""
+
+#: tutorial.xml:872(para)
+msgid "We'll add a collection of events to the <literal>Person</literal> class. That way we can easily navigate to the events for a particular person, without executing an explicit query - by calling <literal>aPerson.getEvents()</literal>. We use a Java collection, a <literal>Set</literal>, because the collection will not contain duplicate elements and the ordering is not relevant for us."
+msgstr ""
+
+#: tutorial.xml:879(para)
+msgid "We need a unidirectional, many-valued associations, implemented with a <literal>Set</literal>. Let's write the code for this in the Java classes and then map it:"
+msgstr ""
+
+#: tutorial.xml:897(para)
+msgid "Before we map this association, think about the other side. Clearly, we could just keep this unidirectional. Or, we could create another collection on the <literal>Event</literal>, if we want to be able to navigate it bi-directional, i.e. <literal>anEvent.getParticipants()</literal>. This is not necessary, from a functional perspective. You could always execute an explicit query to retrieve the participants for a particular event. This is a design choice left to you, but what is clear from this discussion is the multiplicity of the association: \"many\" valued on both sides, we call this a <emphasis>many-to-many</emphasis> association. Hence, we use Hibernate's many-to-many mapping:"
+msgstr ""
+
+#: tutorial.xml:923(para)
+msgid "Hibernate supports all kinds of collection mappings, a <literal><set></literal> being most common. For a many-to-many association (or <emphasis>n:m</emphasis> entity relationship), an association table is needed. Each row in this table represents a link between a person and an event. The table name is configured with the <literal>table</literal> attribute of the <literal>set</literal> element. The identifier column name in the association, for the person's side, is defined with the <literal><key></literal> element, the column name for the event's side with the <literal>column</literal> attribute of the <literal><many-to-many></literal>. You also have to tell Hibernate the class of the objects in your collection (correct: the class on the other side of the collection of references)."
+msgstr ""
+
+#: tutorial.xml:935(para)
+msgid "The database schema for this mapping is therefore:"
+msgstr ""
+
+#: tutorial.xml:956(title)
+msgid "Working the association"
+msgstr ""
+
+#: tutorial.xml:958(para)
+msgid "Let's bring some people and events together in a new method in <literal>EventManager</literal>:"
+msgstr ""
+
+#: tutorial.xml:975(para)
+msgid "After loading a <literal>Person</literal> and an <literal>Event</literal>, simply modify the collection using the normal collection methods. As you can see, there is no explicit call to <literal>update()</literal> or <literal>save()</literal>, Hibernate automatically detects that the collection has been modified and needs to be updated. This is called <emphasis>automatic dirty checking</emphasis>, and you can also try it by modifying the name or the date property of any of your objects. As long as they are in <emphasis>persistent</emphasis> state, that is, bound to a particular Hibernate <literal>Session</literal> (i.e. they have been just loaded or saved in a unit of work), Hibernate monitors any changes and executes SQL in a write-behind fashion. The process of synchronizing the memory state with the database, usually only at the end of a unit of work, is called <emphasis>flushing</emphasis>. In our code, the unit of work ends with a commit (or rollback) of the dat!
abase transaction - as defined by the <literal>thread</literal> configuration option for the <literal>CurrentSessionContext</literal> class."
+msgstr ""
+
+#: tutorial.xml:990(para)
+msgid "You might of course load person and event in different units of work. Or you modify an object outside of a <literal>Session</literal>, when it is not in persistent state (if it was persistent before, we call this state <emphasis>detached</emphasis>). You can even modify a collection when it is detached:"
+msgstr ""
+
+#: tutorial.xml:1025(para)
+msgid "The call to <literal>update</literal> makes a detached object persistent again, you could say it binds it to a new unit of work, so any modifications you made to it while detached can be saved to the database. This includes any modifications (additions/deletions) you made to a collection of that entity object."
+msgstr ""
+
+#: tutorial.xml:1032(para)
+msgid "Well, this is not much use in our current situation, but it's an important concept you can design into your own application. For now, complete this exercise by adding a new action to the <literal>EventManager</literal>'s main method and call it from the command line. If you need the identifiers of a person and an event - the <literal>save()</literal> method returns it (you might have to modify some of the previous methods to return that identifier):"
+msgstr ""
+
+#: tutorial.xml:1047(para)
+msgid "This was an example of an association between two equally important classes, two entities. As mentioned earlier, there are other classes and types in a typical model, usually \"less important\". Some you have already seen, like an <literal>int</literal> or a <literal>String</literal>. We call these classes <emphasis>value types</emphasis>, and their instances <emphasis>depend</emphasis> on a particular entity. Instances of these types don't have their own identity, nor are they shared between entities (two persons don't reference the same <literal>firstname</literal> object, even if they have the same first name). Of course, value types can not only be found in the JDK (in fact, in a Hibernate application all JDK classes are considered value types), but you can also write dependent classes yourself, <literal>Address</literal> or <literal>MonetaryAmount</literal>, for example."
+msgstr ""
+
+#: tutorial.xml:1060(para)
+msgid "You can also design a collection of value types. This is conceptually very different from a collection of references to other entities, but looks almost the same in Java."
+msgstr ""
+
+#: tutorial.xml:1068(title)
+msgid "Collection of values"
+msgstr ""
+
+#: tutorial.xml:1070(para)
+msgid "We add a collection of value typed objects to the <literal>Person</literal> entity. We want to store email addresses, so the type we use is <literal>String</literal>, and the collection is again a <literal>Set</literal>:"
+msgstr ""
+
+#: tutorial.xml:1085(para)
+msgid "The mapping of this <literal>Set</literal>:"
+msgstr ""
+
+#: tutorial.xml:1094(para)
+msgid "The difference compared with the earlier mapping is the <literal>element</literal> part, which tells Hibernate that the collection does not contain references to another entity, but a collection of elements of type <literal>String</literal> (the lowercase name tells you it's a Hibernate mapping type/converter). Once again, the <literal>table</literal> attribute of the <literal>set</literal> element determines the table name for the collection. The <literal>key</literal> element defines the foreign-key column name in the collection table. The <literal>column</literal> attribute in the <literal>element</literal> element defines the column name where the <literal>String</literal> values will actually be stored."
+msgstr ""
+
+#: tutorial.xml:1104(para)
+msgid "Have a look at the updated schema:"
+msgstr ""
+
+#: tutorial.xml:1122(para)
+msgid "You can see that the primary key of the collection table is in fact a composite key, using both columns. This also implies that there can't be duplicate email addresses per person, which is exactly the semantics we need for a set in Java."
+msgstr ""
+
+#: tutorial.xml:1128(para)
+msgid "You can now try and add elements to this collection, just like we did before by linking persons and events. It's the same code in Java:"
+msgstr ""
+
+#: tutorial.xml:1146(para)
+msgid "This time we didnt' use a <emphasis>fetch</emphasis> query to initialize the collection. Hence, the call to its getter method will trigger an additional select to initialize it, so we can add an element to it. Monitor the SQL log and try to optimize this with an eager fetch."
+msgstr ""
+
+#: tutorial.xml:1156(title)
+msgid "Bi-directional associations"
+msgstr ""
+
+#: tutorial.xml:1158(para)
+msgid "Next we are going to map a bi-directional association - making the association between person and event work from both sides in Java. Of course, the database schema doesn't change, we still have many-to-many multiplicity. A relational database is more flexible than a network programming language, so it doesn't need anything like a navigation direction - data can be viewed and retrieved in any possible way."
+msgstr ""
+
+#: tutorial.xml:1166(para)
+msgid "First, add a collection of participants to the <literal>Event</literal> Event class:"
+msgstr ""
+
+#: tutorial.xml:1180(para)
+msgid "Now map this side of the association too, in <literal>Event.hbm.xml</literal>."
+msgstr ""
+
+#: tutorial.xml:1189(para)
+msgid "As you see, these are normal <literal>set</literal> mappings in both mapping documents. Notice that the column names in <literal>key</literal> and <literal>many-to-many</literal> are swapped in both mapping documents. The most important addition here is the <literal>inverse=\"true\"</literal> attribute in the <literal>set</literal> element of the <literal>Event</literal>'s collection mapping."
+msgstr ""
+
+#: tutorial.xml:1197(para)
+msgid "What this means is that Hibernate should take the other side - the <literal>Person</literal> class - when it needs to find out information about the link between the two. This will be a lot easier to understand once you see how the bi-directional link between our two entities is created ."
+msgstr ""
+
+#: tutorial.xml:1206(title)
+msgid "Working bi-directional links"
+msgstr ""
+
+#: tutorial.xml:1208(para)
+msgid "First, keep in mind that Hibernate does not affect normal Java semantics. How did we create a link between a <literal>Person</literal> and an <literal>Event</literal> in the unidirectional example? We added an instance of <literal>Event</literal> to the collection of event references, of an instance of <literal>Person</literal>. So, obviously, if we want to make this link working bi-directional, we have to do the same on the other side - adding a <literal>Person</literal> reference to the collection in an <literal>Event</literal>. This \"setting the link on both sides\" is absolutely necessary and you should never forget doing it."
+msgstr ""
+
+#: tutorial.xml:1218(para)
+msgid "Many developers program defensive and create link management methods to correctly set both sides, e.g. in <literal>Person</literal>:"
+msgstr ""
+
+#: tutorial.xml:1241(para)
+msgid "Notice that the get and set methods for the collection are now protected - this allows classes in the same package and subclasses to still access the methods, but prevents everybody else from messing with the collections directly (well, almost). You should probably do the same with the collection on the other side."
+msgstr ""
+
+#: tutorial.xml:1248(para)
+msgid "What about the <literal>inverse</literal> mapping attribute? For you, and for Java, a bi-directional link is simply a matter of setting the references on both sides correctly. Hibernate however doesn't have enough information to correctly arrange SQL <literal>INSERT</literal> and <literal>UPDATE</literal> statements (to avoid constraint violations), and needs some help to handle bi-directional associations properly. Making one side of the association <literal>inverse</literal> tells Hibernate to basically ignore it, to consider it a <emphasis>mirror</emphasis> of the other side. That's all that is necessary for Hibernate to work out all of the issues when transformation a directional navigation model to a SQL database schema. The rules you have to remember are straightforward: All bi-directional associations need one side as <literal>inverse</literal>. In a one-to-many association it has to be the many-side, in many-to-many association you can pick either side, there!
is no difference."
+msgstr ""
+
+#: tutorial.xml:1263(para)
+msgid "Let's turn this into a small web application."
+msgstr ""
+
+#: tutorial.xml:1270(title)
+msgid "Part 3 - The EventManager web application"
+msgstr ""
+
+#: tutorial.xml:1272(para)
+msgid "A Hibernate web application uses <literal>Session</literal> and <literal>Transaction</literal> almost like a standalone application. However, some common patterns are useful. We now write an <literal>EventManagerServlet</literal>. This servlet can list all events stored in the database, and it provides an HTML form to enter new events."
+msgstr ""
+
+#: tutorial.xml:1280(title)
+msgid "Writing the basic servlet"
+msgstr ""
+
+#: tutorial.xml:1282(para)
+msgid "Create a new class in your source directory, in the <literal>events</literal> package:"
+msgstr ""
+
+#: tutorial.xml:1296(para)
+msgid "The servlet handles HTTP <literal>GET</literal> requests only, hence, the method we implement is <literal>doGet()</literal>:"
+msgstr ""
+
+#: tutorial.xml:1326(para)
+msgid "The pattern we are applying here is called <emphasis>session-per-request</emphasis>. When a request hits the servlet, a new Hibernate <literal>Session</literal> is opened through the first call to <literal>getCurrentSession()</literal> on the <literal>SessionFactory</literal>. Then a database transaction is started-all data access as to occur inside a transaction, no matter if data is read or written (we don't use the auto-commit mode in applications)."
+msgstr ""
+
+#: tutorial.xml:1335(para)
+msgid "Do <emphasis>not</emphasis> use a new Hibernate <literal>Session</literal> for every database operation. Use one Hibernate <literal>Session</literal> that is scoped to the whole request. Use <literal>getCurrentSession()</literal>, so that it is automatically bound to the current Java thread."
+msgstr ""
+
+#: tutorial.xml:1342(para)
+msgid "Next, the possible actions of the request are processed and the response HTML is rendered. We'll get to that part soon."
+msgstr ""
+
+#: tutorial.xml:1347(para)
+msgid "Finally, the unit of work ends when processing and rendering is complete. If any problem occured during processing or rendering, an exception will be thrown and the database transaction rolled back. This completes the <literal>session-per-request</literal> pattern. Instead of the transaction demarcation code in every servlet you could also write a servlet filter. See the Hibernate website and Wiki for more information about this pattern, called <emphasis>Open Session in View</emphasis>-you'll need it as soon as you consider rendering your view in JSP, not in a servlet."
+msgstr ""
+
+#: tutorial.xml:1361(title)
+msgid "Processing and rendering"
+msgstr ""
+
+#: tutorial.xml:1363(para)
+msgid "Let's implement the processing of the request and rendering of the page."
+msgstr ""
+
+#: tutorial.xml:1394(para)
+msgid "Granted, this coding style with a mix of Java and HTML would not scale in a more complex application-keep in mind that we are only illustrating basic Hibernate concepts in this tutorial. The code prints an HTML header and a footer. Inside this page, an HTML form for event entry and a list of all events in the database are printed. The first method is trivial and only outputs HTML:"
+msgstr ""
+
+#: tutorial.xml:1412(para)
+msgid "The <literal>listEvents()</literal> method uses the Hibernate <literal>Session</literal> bound to the current thread to execute a query:"
+msgstr ""
+
+#: tutorial.xml:1440(para)
+msgid "Finally, the <literal>store</literal> action is dispatched to the <literal>createAndStoreEvent()</literal> method, which also uses the <literal>Session</literal> of the current thread:"
+msgstr ""
+
+#: tutorial.xml:1455(para)
+msgid "That's it, the servlet is complete. A request to the servlet will be processed in a single <literal>Session</literal> and <literal>Transaction</literal>. As earlier in the standalone application, Hibernate can automatically bind these ojects to the current thread of execution. This gives you the freedom to layer your code and access the <literal>SessionFactory</literal> in any way you like. Usually you'd use a more sophisticated design and move the data access code into data access objects (the DAO pattern). See the Hibernate Wiki for more examples."
+msgstr ""
+
+#: tutorial.xml:1469(title)
+msgid "Deploying and testing"
+msgstr ""
+
+#: tutorial.xml:1471(para)
+msgid "To deploy this application you have to create a web archive, a WAR. Add the following Ant target to your <literal>build.xml</literal>:"
+msgstr ""
+
+#: tutorial.xml:1486(para)
+msgid "This target creates a file called <literal>hibernate-tutorial.war</literal> in your project directory. It packages all libraries and the <literal>web.xml</literal> descriptor, which is expected in the base directory of your project:"
+msgstr ""
+
+#: tutorial.xml:1509(para)
+msgid "Before you compile and deploy the web application, note that an additional library is required: <literal>jsdk.jar</literal>. This is the Java servlet development kit, if you don't have this library already, get it from the Sun website and copy it to your library directory. However, it will be only used for compliation and excluded from the WAR package."
+msgstr ""
+
+#: tutorial.xml:1517(para)
+msgid "To build and deploy call <literal>ant war</literal> in your project directory and copy the <literal>hibernate-tutorial.war</literal> file into your Tomcat <literal>webapp</literal> directory. If you don't have Tomcat installed, download it and follow the installation instructions. You don't have to change any Tomcat configuration to deploy this application though."
+msgstr ""
+
+#: tutorial.xml:1525(para)
+msgid "Once deployed and Tomcat is running, access the application at <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal>. Make sure you watch the Tomcat log to see Hibernate initialize when the first request hits your servlet (the static initializer in <literal>HibernateUtil</literal> is called) and to get the detailed output if any exceptions occurs."
+msgstr ""
+
+#: tutorial.xml:1538(title)
+msgid "Summary"
+msgstr ""
+
+#: tutorial.xml:1540(para)
+msgid "This tutorial covered the basics of writing a simple standalone Hibernate application and a small web application."
+msgstr ""
+
+#: tutorial.xml:1545(para)
+msgid "If you already feel confident with Hibernate, continue browsing through the reference documentation table of contents for topics you find interesting - most asked are transactional processing (<xref linkend=\"transactions\"/>), fetch performance (<xref linkend=\"performance\"/>), or the usage of the API (<xref linkend=\"objectstate\"/>) and the query features (<xref linkend=\"objectstate-querying\"/>)."
+msgstr ""
+
+#: tutorial.xml:1553(para)
+msgid "Don't forget to check the Hibernate website for more (specialized) tutorials."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: tutorial.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/content/xml.pot
===================================================================
--- core/trunk/documentation/manual/pot/content/xml.pot (rev 0)
+++ core/trunk/documentation/manual/pot/content/xml.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,120 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:35-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: xml.xml:5(title)
+msgid "XML Mapping"
+msgstr ""
+
+#: xml.xml:7(emphasis)
+msgid "Note that this is an experimental feature in Hibernate 3.0 and is under extremely active development."
+msgstr ""
+
+#: xml.xml:13(title)
+msgid "Working with XML data"
+msgstr ""
+
+#: xml.xml:15(para)
+msgid "Hibernate lets you work with persistent XML data in much the same way you work with persistent POJOs. A parsed XML tree can be thought of as just another way to represent the relational data at the object level, instead of POJOs."
+msgstr ""
+
+#: xml.xml:22(para)
+msgid "Hibernate supports dom4j as API for manipulating XML trees. You can write queries that retrieve dom4j trees from the database and have any modification you make to the tree automatically synchronized to the database. You can even take an XML document, parse it using dom4j, and write it to the database with any of Hibernate's basic operations: <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> (merging is not yet supported)."
+msgstr ""
+
+#: xml.xml:32(para)
+msgid "This feature has many applications including data import/export, externalization of entity data via JMS or SOAP and XSLT-based reporting."
+msgstr ""
+
+#: xml.xml:37(para)
+msgid "A single mapping may be used to simultaneously map properties of a class and nodes of an XML document to the database, or, if there is no class to map, it may be used to map just the XML."
+msgstr ""
+
+#: xml.xml:44(title)
+msgid "Specifying XML and class mapping together"
+msgstr ""
+
+#: xml.xml:46(para)
+msgid "Here is an example of mapping a POJO and XML simultaneously:"
+msgstr ""
+
+#: xml.xml:73(title)
+msgid "Specifying only an XML mapping"
+msgstr ""
+
+#: xml.xml:75(para)
+msgid "Here is an example where there is no POJO class:"
+msgstr ""
+
+#: xml.xml:103(para)
+msgid "This mapping allows you to access the data as a dom4j tree, or as a graph of property name/value pairs (java <literal>Map</literal>s). The property names are purely logical constructs that may be referred to in HQL queries."
+msgstr ""
+
+#: xml.xml:114(title)
+msgid "XML mapping metadata"
+msgstr ""
+
+#: xml.xml:116(para)
+msgid "Many Hibernate mapping elements accept the <literal>node</literal> attribute. This let's you specify the name of an XML attribute or element that holds the property or entity data. The format of the <literal>node</literal> attribute must be one of the following:"
+msgstr ""
+
+#: xml.xml:125(para)
+msgid "<literal>\"element-name\"</literal> - map to the named XML element"
+msgstr ""
+
+#: xml.xml:128(para)
+msgid "<literal>\"@attribute-name\"</literal> - map to the named XML attribute"
+msgstr ""
+
+#: xml.xml:131(para)
+msgid "<literal>\".\"</literal> - map to the parent element"
+msgstr ""
+
+#: xml.xml:134(para)
+msgid "<literal>\"element-name/@attribute-name\"</literal> - map to the named attribute of the named element"
+msgstr ""
+
+#: xml.xml:141(para)
+msgid "For collections and single valued associations, there is an additional <literal>embed-xml</literal> attribute. If <literal>embed-xml=\"true\"</literal>, the default, the XML tree for the associated entity (or collection of value type) will be embedded directly in the XML tree for the entity that owns the association. Otherwise, if <literal>embed-xml=\"false\"</literal>, then only the referenced identifier value will appear in the XML for single point associations and collections will simply not appear at all."
+msgstr ""
+
+#: xml.xml:151(para)
+msgid "You should be careful not to leave <literal>embed-xml=\"true\"</literal> for too many associations, since XML does not deal well with circularity!"
+msgstr ""
+
+#: xml.xml:191(para)
+msgid "in this case, we have decided to embed the collection of account ids, but not the actual account data. The following HQL query:"
+msgstr ""
+
+#: xml.xml:198(para)
+msgid "Would return datasets such as this:"
+msgstr ""
+
+#: xml.xml:213(para)
+msgid "If you set <literal>embed-xml=\"true\"</literal> on the <literal><one-to-many></literal> mapping, the data might look more like this:"
+msgstr ""
+
+#: xml.xml:239(title)
+msgid "Manipulating XML data"
+msgstr ""
+
+#: xml.xml:241(para)
+msgid "Let's rearead and update XML documents in the application. We do this by obtaining a dom4j session:"
+msgstr ""
+
+#: xml.xml:281(para)
+msgid "It is extremely useful to combine this feature with Hibernate's <literal>replicate()</literal> operation to implement XML-based data import/export."
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: xml.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/pot/legal_notice.pot
===================================================================
--- core/trunk/documentation/manual/pot/legal_notice.pot (rev 0)
+++ core/trunk/documentation/manual/pot/legal_notice.pot 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,96 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"POT-Creation-Date: 2007-10-19 10:26-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ./legal_notice.xml:20(title)
+msgid "Legal Notice"
+msgstr ""
+
+#: ./legal_notice.xml:23(street)
+msgid "1801 Varsity Drive"
+msgstr ""
+
+#: ./legal_notice.xml:24(city)
+msgid "Raleigh"
+msgstr ""
+
+#: ./legal_notice.xml:24(state) ./legal_notice.xml:28(state)
+msgid "NC"
+msgstr ""
+
+#: ./legal_notice.xml:24(postcode)
+msgid "27606-2072"
+msgstr ""
+
+#: ./legal_notice.xml:24(country) ./legal_notice.xml:28(country)
+msgid "USA"
+msgstr ""
+
+#: ./legal_notice.xml:25(phone)
+msgid "Phone: +1 919 754 3700"
+msgstr ""
+
+#: ./legal_notice.xml:26(phone)
+msgid "Phone: 888 733 4281"
+msgstr ""
+
+#: ./legal_notice.xml:27(fax)
+msgid "Fax: +1 919 754 3701"
+msgstr ""
+
+#: ./legal_notice.xml:28(pob)
+msgid "PO Box 13588"
+msgstr ""
+
+#: ./legal_notice.xml:28(city)
+msgid "Research Triangle Park"
+msgstr ""
+
+#: ./legal_notice.xml:28(postcode)
+msgid "27709"
+msgstr ""
+
+#: ./legal_notice.xml:22(address)
+msgid "<placeholder-1/><placeholder-2/>, <placeholder-3/><placeholder-4/><placeholder-5/><placeholder-6/><placeholder-7/><placeholder-8/><placeholder-9/><placeholder-10/>, <placeholder-11/><placeholder-12/><placeholder-13/>"
+msgstr ""
+
+#: ./legal_notice.xml:31(para)
+msgid "Copyright <trademark class=\"copyright\"/> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+msgstr ""
+
+#: ./legal_notice.xml:34(para)
+msgid "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+msgstr ""
+
+#: ./legal_notice.xml:37(para)
+msgid "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+msgstr ""
+
+#: ./legal_notice.xml:40(para)
+msgid "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+msgstr ""
+
+#: ./legal_notice.xml:43(para)
+msgid "All other trademarks referenced herein are the property of their respective owners."
+msgstr ""
+
+#: ./legal_notice.xml:46(para)
+msgid "The GPG fingerprint of the security at redhat.com key is:"
+msgstr ""
+
+#: ./legal_notice.xml:49(para)
+msgid "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+msgstr ""
+
+#. Put one translator per line, in the form of NAME <EMAIL>, YEAR1, YEAR2.
+#: ./legal_notice.xml:0(None)
+msgid "translator-credits"
+msgstr ""
+
Added: core/trunk/documentation/manual/translations/es-ES/Hibernate_Reference.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/Hibernate_Reference.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/Hibernate_Reference.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,24 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:26
+msgid "HIBERNATE - Relational Persistence for Idiomatic Java"
+msgstr "HIBERNATE - Persistencia Relacional para Java Idiomático"
+
+#: index.docbook:27
+msgid "Hibernate Reference Documentation"
+msgstr "Documentación de Referencia de Hibernate"
+
+#: index.docbook:41
+msgid "©rightHolder;"
+msgstr "©rightHolder;"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/architecture.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/architecture.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/architecture.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,216 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Architecture"
+msgstr "Arquitectura"
+
+#: index.docbook:24
+msgid "Overview"
+msgstr "Visión General"
+
+#: index.docbook:26
+msgid "A (very) high-level view of the Hibernate architecture:"
+msgstr "Una visión a (muy) alto nivel de la arquitectura de Hibernate:"
+
+#: index.docbook:39
+msgid "This diagram shows Hibernate using the database and configuration data to provide persistence services (and persistent objects) to the application."
+msgstr "Este diagrama muestra a Hibernate usando la base de datos y los datos de configuración para proveer servicios de persistencia (y objetos persistentes) a la aplicación."
+
+#: index.docbook:44
+msgid "We would like to show a more detailed view of the runtime architecture. Unfortunately, Hibernate is flexible and supports several approaches. We will show the two extremes. The \"lite\" architecture has the application provide its own JDBC connections and manage its own transactions. This approach uses a minimal subset of Hibernate's APIs:"
+msgstr "Nos gustaría mostrar una vista más detallada de la arquitectura de tiempo de ejecución. Desafortunadamente, Hibernate es flexible y soporta diferentes enfoques. Mostraremos los dos extremos. En la arquitectura \"sencilla\", es la aplicación la que provee su propias conexiones JDBC y gestiona sus propias transacciones. Este enfoque usa un mínimo subconjunto de la API de Hibernate:"
+
+#: index.docbook:61
+msgid "The \"full cream\" architecture abstracts the application away from the underlying JDBC/JTA APIs and lets Hibernate take care of the details."
+msgstr "La arquitectura \"full cream\" abstrae a la aplicación de las APIs de JDBC/JTA y deja que Hibernate se encargue de los detalles."
+
+#: index.docbook:75
+msgid "Heres some definitions of the objects in the diagrams:"
+msgstr "He aquí algunas definiciones de los objetos en los diagramas:"
+
+#: index.docbook:80
+msgid "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+msgstr "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+
+#: index.docbook:82
+msgid "A threadsafe (immutable) cache of compiled mappings for a single database. A factory for <literal>Session</literal> and a client of <literal>ConnectionProvider</literal>. Might hold an optional (second-level) cache of data that is reusable between transactions, at a process- or cluster-level."
+msgstr "Caché threadsafe (inmutable) de mapeos compilados para una sola base de datos. Es una fábrica de <literal>Session</literal> y un cliente de <literal>ConnectionProvider</literal>. Opcionalmente, puede mantener una caché (de segundo nivel) de datos reusables entre transacciones, a un nivel de proceso o de cluster."
+
+#: index.docbook:92
+msgid "Session (<literal>org.hibernate.Session</literal>)"
+msgstr "Session (<literal>org.hibernate.Session</literal>)"
+
+#: index.docbook:94
+msgid "A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC connection. Factory for <literal>Transaction</literal>. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier."
+msgstr "Objeto mono-hebra, de corta vida que representa una conversación entre la aplicación y el almacenamiento persistente. Envuelve una conexión JDBC. Es una fábrica de <literal>Transaction</literal>. Mantiene una caché requerida (de primer nivel) de objetos persistentes, usada mientras se navega el grafo de objetos o se recuperen objetos por identificador."
+
+#: index.docbook:104
+msgid "Persistent objects and collections"
+msgstr "Objetos y colecciones persistentes"
+
+#: index.docbook:106
+msgid "Short-lived, single threaded objects containing persistent state and business function. These might be ordinary JavaBeans/POJOs, the only special thing about them is that they are currently associated with (exactly one) <literal>Session</literal>. As soon as the <literal>Session</literal> is closed, they will be detached and free to use in any application layer (e.g. directly as data transfer objects to and from presentation)."
+msgstr "Objetos de corta vida, mono-hebra conteniendo estado persistente y funciónalidad de negocio. Estos pueden ser JavaBeans/POJOs (Plain Old Java Objects, o sea, cualquier objeto Java), la única cosa especial en ellos es que estan asociados actualmente con una (y sólo una) <literal>Session</literal>. Tan pronto como la <literal>Session</literal> sea cerrada, serán separados y estarán libres para ser usados en cualquier capa de aplicación. (por ejemplo, directamente como objetos de transferencia de datos hacia y desde la capa de presentación)."
+
+#: index.docbook:117
+msgid "Transient and detached objects and collections"
+msgstr "Objetos y colecciones transitorios y separados"
+
+#: index.docbook:119
+msgid "Instances of persistent classes that are not currently associated with a <literal>Session</literal>. They may have been instantiated by the application and not (yet) persisted or they may have been instantiated by a closed <literal>Session</literal>."
+msgstr "Instancias de clases persistentes que no estan acutualmente asociadas con una <literal>Session</literal>. Pueden haber sido instanciadas por la aplicación y (aún) no haber sido hechas persistentes, o pueden haber sido instanciadas por una <literal>Session</literal> cerrada."
+
+#: index.docbook:128
+msgid "Transaction (<literal>org.hibernate.Transaction</literal>)"
+msgstr "Transaction (<literal>org.hibernate.Transaction</literal>)"
+
+#: index.docbook:130
+msgid "(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. Abstracts application from underlying JDBC, JTA or CORBA transaction. A <literal>Session</literal> might span several <literal>Transaction</literal>s in some cases. However, transaction demarcation, either using the underlying API or <literal>Transaction</literal>, is never optional!"
+msgstr "(Opcional) Un objeto de corta vida, mono-hebra, usado por la aplicación para especificar unidades atómicas de trabajo. Abstrae a la aplicación de las subyacentes transacciones JDBC, JTA o CORBA. En algunos casos, una <literal>Session</literal> puede extenderse sobre varias <literal>Transaction</literal>s. Sin embargo, la demarcación de la transacción, ya sea usando la API subyacente o <literal>Transaction</literal>, nunca es opcional!"
+
+#: index.docbook:141
+msgid "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+msgstr "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+
+#: index.docbook:143
+msgid "(Optional) A factory for (and pool of) JDBC connections. Abstracts application from underlying <literal>Datasource</literal> or <literal>DriverManager</literal>. Not exposed to application, but can be extended/implemented by the developer."
+msgstr "(Opcional) Una fábrica (y pool) de conexiones JDBC. Abstrae a la aplicación del <literal>Datasource</literal> o <literal>DriverManager</literal> subyacente. No se expone a la aplicación, pero puede ser extendido/implementado por el desarrollador."
+
+#: index.docbook:151
+msgid "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+msgstr "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+
+#: index.docbook:153
+msgid "(Optional) A factory for <literal>Transaction</literal> instances. Not exposed to the application, but can be extended/implemented by the developer."
+msgstr "(Opcional) Una fábrica de instancias de <literal>Transaction</literal>. No se expone a la aplicación, pero puede ser extendido/implementado por el desarrollador."
+
+#: index.docbook:160
+msgid "Extension Interfaces"
+msgstr "Interfaces de Extensión"
+
+#: index.docbook:162
+msgid "Hibernate offers many optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details."
+msgstr "Hibernate ofrece muchas interfaces de extensión opcional que puedes implementar para modificar a medida el comportamiento de tu capa de persistencia. Para más detalles, mira la documentación de la API."
+
+#: index.docbook:171
+msgid "Given a \"lite\" architecture, the application bypasses the <literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or <literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly."
+msgstr "Dada una arquitectura \"sencilla\", la aplicación pasa por alto las APIs de <literal>Transaction</literal>/<literal>TransactionFactory</literal> y/o <literal>ConnectionProvider</literal>, para hablar directamente a JTA o JDBC."
+
+#: index.docbook:179
+msgid "Instance states"
+msgstr "Estados de instancia"
+
+#: index.docbook:180
+msgid "An instance of a persistent classes may be in one of three different states, which are defined with respect to a <emphasis>persistence context</emphasis>. The Hibernate <literal>Session</literal> object is the persistence context:"
+msgstr "Una instancia de una clase persistente puede estar en uno de tres estados diferentes, definidos respecto de su <emphasis>contexto de persistencia</emphasis>. El objeto <literal>Session</literal> de Hibernate es el contexto de persistencia:"
+
+#: index.docbook:188
+msgid "transient"
+msgstr "transitorio"
+
+#: index.docbook:190
+msgid "The instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value)."
+msgstr "La instancia no está y nunca estuvo asociada con un contexto de persistencia. No tiene identidad persistente (valor de clave primaria)."
+
+#: index.docbook:198
+msgid "persistent"
+msgstr "persistente"
+
+#: index.docbook:200
+msgid "The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, Hibernate <emphasis>guarantees</emphasis> that persistent identity is equivalent to Java identity (in-memory location of the object)."
+msgstr "La instancia está actualmente asociada con un contexto de persistencia. Tiene una identidad persistente (valor de clave primaria) y, quizás, una fila correspondiente en la base de datos. Para un contexto de persistencia en particular, Hibernate <emphasis>garantiza</emphasis> que la identidad persistente es equivalente a la identidad Java (localización en memoria del objeto)."
+
+#: index.docbook:212
+msgid "detached"
+msgstr "separado"
+
+#: index.docbook:214
+msgid "The instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corrsponding row in the database. For detached instances, Hibernate makes no guarantees about the relationship between persistent identity and Java identity."
+msgstr "La instancia estuvo una vez asociada con un contexto de persistencia, pero ese contexto fue cerrado, o la instancia fue serializada a otro proceso. Tiene una identidad persistente y, quizás, una fila correspondiente en la base de datos. Para las instancias separadas, Hibernate no establece ninguna garantía sobre la relación entre identidad persistente e identidad Java."
+
+#: index.docbook:229
+msgid "JMX Integration"
+msgstr "Integración JMX"
+
+#: index.docbook:231
+msgid "JMX is the J2EE standard for management of Java components. Hibernate may be managed via a JMX standard service. We provide an MBean implementation in the distribution, <literal>org.hibernate.jmx.HibernateService</literal>."
+msgstr "JMX es el estándar J2EE para la gestión de componentes Java. Hibernate puede ser gestionado por medio de un servicio estándar JMX. Proveemos una implementación de MBean en la distribución, <literal>org.hibernate.jmx.HibernateService</literal>."
+
+#: index.docbook:237
+msgid "For an example how to deploy Hibernate as a JMX service on the JBoss Application Server, please see the JBoss User Guide. On JBoss AS, you also get these benefits if you deploy using JMX:"
+msgstr "Para ejemplo de cómo desplegar Hibernate como un servicio JMX en un Servidor de Aplicaciones JBoss, por favor, mira la Guía del Usuario de JBoss. En JBoss AS, tienes además estos beneficios si despliegas usando JMX:"
+
+#: index.docbook:245
+msgid "<emphasis>Session Management:</emphasis> The Hibernate <literal>Session</literal>'s life cycle can be automatically bound to the scope of a JTA transaction. This means you no longer have to manually open and close the <literal>Session</literal>, this becomes the job of a JBoss EJB interceptor. You also don't have to worry about transaction demarcation in your code anymore (unless you'd like to write a portable persistence layer of course, use the optional Hibernate <literal>Transaction</literal> API for this). You call the <literal>HibernateContext</literal> to access a <literal>Session</literal>."
+msgstr "<emphasis>Gestión de Sesión:</emphasis> El ciclo de vida de la <literal>Session</literal> de Hibernate puede estar automáticamente ligado al ámbito de una transacción JTA. Esto significa que ya no tienes que abrir ni cerrar la <literal>Session</literal> manualmente, esto pasa a ser trabajo de un interceptor EJB de JBoss. Además tampoco tienes que preocuparte más de la demarcación de la transacción (a menos que que quieras escribir una capa de persitencia portable, por supuesto, usa la API de <literal>Transaction</literal> de Hibernate para esto). Para acceder a una <literal>Session</literal> llama al <literal>HibernateContext</literal>."
+
+#: index.docbook:257
+msgid "<emphasis>HAR deployment:</emphasis> Usually you deploy the Hibernate JMX service using a JBoss service deployment descriptor (in an EAR and/or SAR file), it supports all the usual configuration options of a Hibernate <literal>SessionFactory</literal>. However, you still have to name all your mapping files in the deployment descriptor. If you decide to use the optional HAR deployment, JBoss will automatically detect all mapping files in your HAR file."
+msgstr "<emphasis>Despliegue de HAR:</emphasis> Usualmente despliegas el servicio JMX de Hibernate usando un descriptor de despliegue de servicio de JBoss (en un fichero EAR y/o SAR), que soporta todas las opciones de configuración usuales de una <literal>SessionFactory</literal> de Hibernate. Sin embargo, todavía tienes que nombrar todos tus ficheros de mapeo en el descriptor de despliegue. Si decides usar el depliegue de HAR opcional, JBoss detectará automáticamente todos los ficheros de mapeo en tu fichero HAR."
+
+#: index.docbook:268
+msgid "Consult the JBoss AS user guide for more information about these options."
+msgstr "Para más información sobre estas opciones, consulta la Guía de Usuario del JBoss AS."
+
+#: index.docbook:272
+msgid "Another feature available as a JMX service are runtime Hibernate statistics. See <xref linkend=\"configuration-optional-statistics\"/>."
+msgstr "Otra funcionalidad disponible como un servicio JMX son las estadísticas en tiempo de ejecución de Hibernate. Mira <xref linkend=\"configuration-optional-statistics\"/>."
+
+#: index.docbook:279
+msgid "JCA Support"
+msgstr "Soporte JCA:"
+
+#: index.docbook:280
+msgid "Hibernate may also be configured as a JCA connector. Please see the website for more details. Please note that Hibernate JCA support is still considered experimental."
+msgstr "Hiberate puede además ser configurado como un conector JCA. Por favor mira el sitio web para más detalles. Por favor ten en cuenta que el soporte de JCA de Hibernate está aún considerado experimental."
+
+#: index.docbook:287
+msgid "Contextual Sessions"
+msgstr ""
+
+#: index.docbook:288
+msgid "Most applications using Hibernate need some form of \"contextual\" sessions, where a given session is in effect throughout the scope of a given context. However, across applications the definition of what constitutes a context is typically different; and different contexts define different scopes to the notion of current. Applications using Hibernate prior to version 3.0 tended to utilize either home-grown <literal>ThreadLocal</literal>-based contextual sessions, helper classes such as <literal>HibernateUtil</literal>, or utilized third-party frameworks (such as Spring or Pico) which provided proxy/interception-based contextual sessions."
+msgstr ""
+
+#: index.docbook:297
+msgid "Starting with version 3.0.1, Hibernate added the <literal>SessionFactory.getCurrentSession()</literal> method. Initially, this assumed usage of <literal>JTA</literal> transactions, where the <literal>JTA</literal> transaction defined both the scope and context of a current session. The Hibernate team maintains that, given the maturity of the numerous stand-alone <literal>JTA TransactionManager</literal> implementations out there, most (if not all) applications should be using <literal>JTA</literal> transaction management whether or not they are deployed into a <literal>J2EE</literal> container. Based on that, the <literal>JTA</literal>-based contextual sessions is all you should ever need to use."
+msgstr ""
+
+#: index.docbook:307
+msgid "However, as of version 3.1, the processing behind <literal>SessionFactory.getCurrentSession()</literal> is now pluggable. To that end, a new extension interface (<literal>org.hibernate.context.CurrentSessionContext</literal>) and a new configuration parameter (<literal>hibernate.current_session_context_class</literal>) have been added to allow pluggability of the scope and context of defining current sessions."
+msgstr ""
+
+#: index.docbook:314
+msgid "See the Javadocs for the <literal>org.hibernate.context.CurrentSessionContext</literal> interface for a detailed discussion of its contract. It defines a single method, <literal>currentSession()</literal>, by which the implementation is responsible for tracking the current contextual session. Out-of-the-box, Hibernate comes with three implementations of this interface."
+msgstr ""
+
+#: index.docbook:324
+msgid "<literal>org.hibernate.context.JTASessionContext</literal> - current sessions are tracked and scoped by a <literal>JTA</literal> transaction. The processing here is exactly the same as in the older JTA-only approach. See the Javadocs for details."
+msgstr ""
+
+#: index.docbook:332
+msgid "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - current sessions are tracked by thread of execution. Again, see the Javadocs for details."
+msgstr ""
+
+#: index.docbook:338
+msgid "<literal>org.hibernate.context.ManagedSessionContext</literal> - current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a <literal>Session</literal> instance with static methods on this class, it does never open, flush, or close a <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:347
+msgid "The first two implementations provide a \"one session - one database transaction\" programming model, also known and used as <emphasis>session-per-request</emphasis>. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programatic transaction demarcation in plain JSE without JTA, you are adviced to use the Hibernate <literal>Transaction</literal> API to hide the underlying transaction system from your code. If you use JTA, use the JTA interfaces to demarcate transactions. If you execute in an EJB container that supports CMT, transaction boundaries are defined declaratively and you don't need any transaction or session demarcation operations in your code. Refer to <xref linkend=\"transactions\"/> for more information and code examples."
+msgstr ""
+
+#: index.docbook:359
+msgid "The <literal>hibernate.current_session_context_class</literal> configuration parameter defines which <literal>org.hibernate.context.CurrentSessionContext</literal> implementation should be used. Note that for backwards compatibility, if this config param is not set but a <literal>org.hibernate.transaction.TransactionManagerLookup</literal> is configured, Hibernate will use the <literal>org.hibernate.context.JTASessionContext</literal>. Typically, the value of this parameter would just name the implementation class to use; for the three out-of-the-box implementations, however, there are three corresponding short names, \"jta\", \"thread\", and \"managed\"."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/association_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/association_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/association_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,881 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:6
+msgid "Association Mappings"
+msgstr "Mapeos de Asociación"
+
+#: index.docbook:9
+msgid "Introduction"
+msgstr "Introducción"
+
+#: index.docbook:11
+msgid "Association mappings are the often most difficult thing to get right. In this section we'll go through the canonical cases one by one, starting with unidirectional mappings, and then considering the bidirectional cases. We'll use <literal>Person</literal> and <literal>Address</literal> in all the examples."
+msgstr "Los mapeos de asociación son frecuentemente las cosas mas difíciles de hacer correctamente. En esta sección iremos a través de los casos canónicos uno a uno, comenzando con los mapeos unidireccionales, y considerando luego los casos bidireccionales. Usaremos <literal>Person</literal> y <literal>Address</literal> en todos los ejemplos."
+
+#: index.docbook:19
+msgid "We'll classify associations by whether or not they map to an intervening join table, and by multiplicity."
+msgstr "Clasificaremos las asociaciones por cuanto mapeen o no a una tabla de unión interviniente, y por su multiplicidad."
+
+#: index.docbook:24
+msgid "Nullable foreign keys are not considered good practice in traditional data modelling, so all our examples use not null foreign keys. This is not a requirement of Hibernate, and the mappings will all work if you drop the nullability constraints."
+msgstr "Las claves foráneas que aceptan valores nulos (en adelante, nullables) no son consideradas una buena práctica en el modelado tradicional de datos, así que todos nuestros ejemplos usan claves foráneas no nullables. Esto no es un requerimiento de Hibernate, y todos los mapeos funcionarán si quitas las restricciones de nulabilidad."
+
+#: index.docbook:34
+msgid "Unidirectional associations"
+msgstr "Asociaciones Unidireccionales"
+
+#: index.docbook:37, index.docbook:108
+msgid "many to one"
+msgstr "muchos a uno"
+
+#: index.docbook:39
+msgid "A <emphasis>unidirectional many-to-one association</emphasis> is the most common kind of unidirectional association."
+msgstr "Una <emphasis>asociación unidireccional muchos-a-uno</emphasis> es el tipo más común de asociaciones unidireccionales."
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:45, index.docbook:161
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:50, index.docbook:121, index.docbook:185, index.docbook:225
+msgid "one to one"
+msgstr "uno a uno"
+
+#: index.docbook:52
+msgid "A <emphasis>unidirectional one-to-one association on a foreign key</emphasis> is almost identical. The only difference is the column unique constraint."
+msgstr "Una <emphasis>asociación unidireccional uno-a-uno en una clave primaria</emphasis> es casi idéntica. La única diferencia es la restricción de unicidad de la columna."
+
+#: index.docbook:57
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:58, index.docbook:193
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:60
+msgid "A <emphasis>unidirectional one-to-one association on a primary key</emphasis> usually uses a special id generator. (Notice that we've reversed the direction of the association in this example.)"
+msgstr "Usualmente, una <emphasis>asociación unidireccional uno-a-uno en una clave primaria</emphasis> usa un generador de id especial. (Observa que hemos invertido el sentido de la asociación en este ejemplo)."
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:67, index.docbook:201
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( personId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( personId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:72, index.docbook:94
+msgid "one to many"
+msgstr "uno a muchos"
+
+#: index.docbook:74
+msgid "A <emphasis>unidirectional one-to-many association on a foreign key</emphasis> is a very unusual case, and is not really recommended."
+msgstr "Una <emphasis>asociación unidireccional uno-a-muchos en una clave foránea</emphasis> es un caso muy inusual, y realmente no está recomendada."
+
+#: index.docbook:79
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\">\n"
+ " <key column=\"personId\" \n"
+ " not-null=\"true\"/>\n"
+ " <one-to-many class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\">\n"
+ " <key column=\"personId\" \n"
+ " not-null=\"true\"/>\n"
+ " <one-to-many class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:80
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key, personId bigint not null )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key, personId bigint not null )\n"
+ " ]]>"
+
+#: index.docbook:82
+msgid "We think it's better to use a join table for this kind of association."
+msgstr "Creemos que es mejor usar una tabla de unión para este tipo de asociación."
+
+#: index.docbook:91
+msgid "Unidirectional associations with join tables"
+msgstr "Asociaciones unidireccionales con tablas de unión"
+
+#: index.docbook:96
+msgid "A <emphasis>unidirectional one-to-many association on a join table</emphasis> is much preferred. Notice that by specifying <literal>unique=\"true\"</literal>, we have changed the multiplicity from many-to-many to one-to-many."
+msgstr "Una <emphasis>asociación unidireccional uno-a-muchos en una tabla de unión</emphasis> es más preferible. Observa que especificando <literal>unique=\"true\"</literal>, hemos cambiado la multiplicidad de muchos-a-muchos a uno-a-muchos."
+
+#: index.docbook:102
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:103
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:110
+msgid "A <emphasis>unidirectional many-to-one association on a join table</emphasis> is quite common when the association is optional."
+msgstr "Una <emphasis>asociación unidireccional muchos-a-uno en una tabla de unión</emphasis> es bastante común cuando la asociación es opcional."
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:116
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:123
+msgid "A <emphasis>unidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr "Una <emphasis>asociación unidireccional uno-a-uno en una tabla de unión</emphasis> es inusual en extremo, pero posible."
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:129, index.docbook:233
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:134, index.docbook:238
+msgid "many to many"
+msgstr "muchos a muchos"
+
+#: index.docbook:136
+msgid "Finally, we have a <emphasis>unidirectional many-to-many association</emphasis>."
+msgstr "Finalmente, tenemos una <emphasis>asociación unidireccional muchos-a-muchos</emphasis>"
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:141, index.docbook:246
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:148
+msgid "Bidirectional associations"
+msgstr "Asociaciones Bidireccionales"
+
+#: index.docbook:151, index.docbook:211
+msgid "one to many / many to one"
+msgstr "uno a muchos / muchos a uno"
+
+#: index.docbook:153
+msgid "A <emphasis>bidirectional many-to-one association</emphasis> is the most common kind of association. (This is the standard parent/child relationship.)"
+msgstr "Una <emphasis>asociación bidireccional muchos-a-uno</emphasis> es el tipo más común de asociación. (Esta es la relación estándar padre/hijo.)"
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:163
+msgid "If you use a <literal>List</literal> (or other indexed collection) you need to set the <literal>key</literal> column of the foreign key to <literal>not null</literal>, and let Hibernate manage the association from the collections side to maintain the index of each element (making the other side virtually inverse by setting <literal>update=\"false\"</literal> and <literal>insert=\"false\"</literal>):"
+msgstr "uno a uno"
+
+#: index.docbook:171
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <list name=\"people\">\n"
+ " <key column=\"addressId\" not-null=\"true\"/>\n"
+ " <list-index column=\"peopleIdx\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </list>\n"
+ "</class>]]>"
+msgstr "Una <emphasis>asociación bidireccional uno-a-uno en una clave foránea</emphasis> es bastante común."
+
+#: index.docbook:173
+msgid "It is important that you define <literal>not-null=\"true\"</literal> on the <literal><key></literal> element of the collection mapping if the underlying foreign key column is <literal>NOT NULL</literal>. Don't only declare <literal>not-null=\"true\"</literal> on a possible nested <literal><column></literal> element, but on the <literal><key></literal> element."
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " property-ref=\"address\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:187
+msgid "A <emphasis>bidirectional one-to-one association on a foreign key</emphasis> is quite common."
+msgstr "Una <emphasis>asociación bidireccional uno-a-uno en una clave primaria</emphasis> usa el generador de id especial."
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " property-ref=\"address\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"address\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:195
+msgid "A <emphasis>bidirectional one-to-one association on a primary key</emphasis> uses the special id generator."
+msgstr "Asociaciones bidireccionales con tablas de unión"
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"address\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr "uno a muchos / muchos a uno"
+
+#: index.docbook:208
+msgid "Bidirectional associations with join tables"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" \n"
+ " table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " inverse=\"true\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\"\n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+
+#: index.docbook:213
+msgid "A <emphasis>bidirectional one-to-many association on a join table</emphasis>. Note that the <literal>inverse=\"true\"</literal> can go on either end of the association, on the collection, or on the join."
+msgstr "uno a uno"
+
+#: index.docbook:219
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" \n"
+ " table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " inverse=\"true\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\"\n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr "Una <emphasis>asociación bidireccional uno-a-uno en una tabla de unión</emphasis> es inusual en extremo, pero posible."
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\"\n"
+ " inverse=\"true\">\n"
+ " <key column=\"addressId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"personId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+
+#: index.docbook:227
+msgid "A <emphasis>bidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr "muchos a muchos"
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\"\n"
+ " inverse=\"true\">\n"
+ " <key column=\"addressId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr "Finalmente, tenemos una <emphasis>asociación bidireccional muchos-a-muchos</emphasis>."
+
+#: index.docbook:240
+msgid "Finally, we have a <emphasis>bidirectional many-to-many association</emphasis>."
+msgstr ""
+
+#: index.docbook:244
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\" table=\"PersonAddress\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-many column=\"personId\"\n"
+ " class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:253
+msgid "More complex association mappings"
+msgstr ""
+
+#: index.docbook:255
+msgid "More complex association joins are <emphasis>extremely</emphasis> rare. Hibernate makes it possible to handle more complex situations using SQL fragments embedded in the mapping document. For example, if a table with historical account information data defines <literal>accountNumber</literal>, <literal>effectiveEndDate</literal> and <literal>effectiveStartDate</literal>columns, mapped as follows:"
+msgstr ""
+
+#: index.docbook:264
+msgid ""
+ "<![CDATA[<properties name=\"currentAccountKey\">\n"
+ " <property name=\"accountNumber\" type=\"string\" not-null=\"true\"/>\n"
+ " <property name=\"currentAccount\" type=\"boolean\">\n"
+ " <formula>case when effectiveEndDate is null then 1 else 0 end</formula>\n"
+ " </property>\n"
+ "</properties>\n"
+ "<property name=\"effectiveEndDate\" type=\"date\"/>\n"
+ "<property name=\"effectiveStateDate\" type=\"date\" not-null=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:266
+msgid "Then we can map an association to the <emphasis>current</emphasis> instance (the one with null <literal>effectiveEndDate</literal>) using:"
+msgstr ""
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<many-to-one name=\"currentAccountInfo\" \n"
+ " property-ref=\"currentAccountKey\"\n"
+ " class=\"AccountInfo\">\n"
+ " <column name=\"accountNumber\"/>\n"
+ " <formula>'1'</formula>\n"
+ "</many-to-one>]]>"
+msgstr ""
+
+#: index.docbook:273
+msgid "In a more complex example, imagine that the association between <literal>Employee</literal> and <literal>Organization</literal> is maintained in an <literal>Employment</literal> table full of historical employment data. Then an association to the employee's <emphasis>most recent</emphasis> employer (the one with the most recent <literal>startDate</literal>) might be mapped this way:"
+msgstr ""
+
+#: index.docbook:281
+msgid ""
+ "<![CDATA[<join>\n"
+ " <key column=\"employeeId\"/>\n"
+ " <subselect>\n"
+ " select employeeId, orgId \n"
+ " from Employments \n"
+ " group by orgId \n"
+ " having startDate = max(startDate)\n"
+ " </subselect>\n"
+ " <many-to-one name=\"mostRecentEmployer\" \n"
+ " class=\"Organization\" \n"
+ " column=\"orgId\"/>\n"
+ "</join>]]>"
+msgstr ""
+
+#: index.docbook:283
+msgid "You can get quite creative with this functionality, but it is usually more practical to handle these kinds of cases using HQL or a criteria query."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/basic_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/basic_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/basic_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,3067 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Basic O/R Mapping"
+msgstr "Mapeo O/R Básico"
+
+#: index.docbook:8
+msgid "Mapping declaration"
+msgstr "Declaración de mapeo"
+
+#: index.docbook:10
+msgid "Object/relational mappings are usually defined in an XML document. The mapping document is designed to be readable and hand-editable. The mapping language is Java-centric, meaning that mappings are constructed around persistent class declarations, not table declarations."
+msgstr "Los mapeos objeto/relacional se definen usualmente en un documento XML. El documento de mapeo está diseñado para ser leíble y editable a mano. El lenguaje de mapeo es Java-céntrico, o sea que los mapeos se construyen alrededor de declaraciones de clases persistentes, no declaraciones de tablas."
+
+#: index.docbook:17
+msgid "Note that, even though many Hibernate users choose to write the XML by hand, a number of tools exist to generate the mapping document, including XDoclet, Middlegen and AndroMDA."
+msgstr "Observa que, incluso aunque muchos usuarios de Hibernate eligen escribir el XML a mano, existe una cantidad de herramientas para generar el documento de mapeo, incluyendo XDoclet, Middlegen y AndroMDA."
+
+#: index.docbook:23
+msgid "Lets kick off with an example mapping:"
+msgstr "Comencemos por un mapeo de ejemplo:"
+
+#: index.docbook:27
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\"\n"
+ " table=\"cats\"\n"
+ " discriminator-value=\"C\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "\n"
+ " <discriminator column=\"subclass\"\n"
+ " type=\"character\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " <property name=\"birthdate\"\n"
+ " type=\"date\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"color\"\n"
+ " type=\"eg.types.ColorUserType\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"sex\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"litterId\"\n"
+ " column=\"litterId\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <many-to-one name=\"mother\"\n"
+ " column=\"mother_id\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <set name=\"kittens\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"litter_id\">\n"
+ " <key column=\"mother_id\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"DomesticCat\"\n"
+ " discriminator-value=\"D\">\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" \n"
+ " table=\"cats\"\n"
+ " discriminator-value=\"C\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "\n"
+ " <discriminator column=\"subclass\" \n"
+ " type=\"character\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " <property name=\"birthdate\"\n"
+ " type=\"date\" \n"
+ " not-null=\"true\" \n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"color\"\n"
+ " type=\"eg.types.ColorUserType\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"sex\"\n"
+ " not-null=\"true\" \n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"litterId\"\n"
+ " column=\"litterId\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <many-to-one name=\"mother\"\n"
+ " column=\"mother_id\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <set name=\"kittens\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"litter_id\">\n"
+ " <key column=\"mother_id\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"DomesticCat\"\n"
+ " discriminator-value=\"D\">\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " type=\"string\"/>\n"
+ "\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:29
+msgid "We will now discuss the content of the mapping document. We will only describe the document elements and attributes that are used by Hibernate at runtime. The mapping document also contains some extra optional attributes and elements that affect the database schemas exported by the schema export tool. (For example the <literal> not-null</literal> attribute.)"
+msgstr "Discutiremos ahora el contenido del documento de mapeo. Describiremos sólo los elementos y atributos que son usados por Hibernate en tiempo de ejecución. El documento de mapeo contiene además algunos atributos y elementos extra opcionales que afectan los esquemas de base de datos exportados por la herramienta de exportación de esquemas. (Por ejemplo, el atributo <literal>not-null</literal>.)"
+
+#: index.docbook:40
+msgid "Doctype"
+msgstr "Doctype"
+
+#: index.docbook:42
+msgid "All XML mappings should declare the doctype shown. The actual DTD may be found at the URL above, in the directory <literal>hibernate-x.x.x/src/org/hibernate </literal> or in <literal>hibernate3.jar</literal>. Hibernate will always look for the DTD in its classpath first. If you experience lookups of the DTD using an Internet connection, check your DTD declaration against the contents of your claspath."
+msgstr "Todos los mapeos XML deben declarar el doctype mostrado. El DTD actual puede ser encontrado en el URL mencionado arriba, en el directorio <literal>hibernate-x.x.x/src/org/hibernate</literal>, o en <literal>hibernate3.jar</literal>. Hibernate siempre buscará el DTD primero en el classpath. Si experimentas búsquedas del DTD usando una conexión de Internet, chequea tu declaración de DTD contra la contenida en el classpath."
+
+#: index.docbook:52
+msgid "EntityResolver"
+msgstr "hibernate-mapping"
+
+#: index.docbook:53
+msgid "As mentioned previously, Hibernate will first attempt to resolve DTDs in its classpath. The manner in which it does this is by registering a custom <literal>org.xml.sax.EntityResolver</literal> implementation with the SAXReader it uses to read in the xml files. This custom <literal>EntityResolver</literal> recognizes two different systemId namespaces."
+msgstr "Este elemento tiene muchos atributos opcionales. Los atributos <literal>schema</literal> y <literal>catalog</literal> especifican que las tablas a las que se refiere en el mapeo pertenecen al esquema y/o catálogo mencionado(s). De especificarse, los nombres de tablas serán cualificados por el nombre de esquema y catálogo dados. De omitirse, los nombres de tablas no serán cualificados. El atributo <literal>default-cascade</literal> especifica qué estilo de cascada debe asumirse para las propiedades y colecciones que no especifican un atributo <literal>cascade</literal>. El atributo <literal>auto-import</literal> nos permite usar nombres de clase sin cualificar en el lenguaje de consulta, por defecto."
+
+#: index.docbook:61
+msgid "a <literal>hibernate namespace</literal> is recognized whenever the resolver encounteres a systemId starting with <literal>http://hibernate.sourceforge.net/</literal>; the resolver attempts to resolve these entities via the classlaoder which loaded the Hibernate classes."
+msgstr ""
+ "<![CDATA[<hibernate-mapping\n"
+ " schema=\"schemaName\"\n"
+ " catalog=\"catalogName\"\n"
+ " default-cascade=\"cascade_style\"\n"
+ " default-access=\"field|property|ClassName\"\n"
+ " default-lazy=\"true|false\"\n"
+ " auto-import=\"true|false\"\n"
+ " package=\"package.name\"\n"
+ " />]]>"
+
+#: index.docbook:70
+msgid "a <literal>user namespace</literal> is recognized whenever the resolver encounteres a systemId using a <literal>classpath://</literal> URL protocol; the resolver will attempt to resolve these entities via (1) the current thread context classloader and (2) the classloader which loaded the Hibernate classes."
+msgstr "<literal>schema</literal> (opcional): El nombre de un esquema de la base de datos."
+
+#: index.docbook:79
+msgid "An example of utilizing user namespacing:"
+msgstr "<literal>catalog</literal> (opcional): El nombre de un catálogo de la base de datos."
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\" [\n"
+ " <!ENTITY types SYSTEM \"classpath://your/domain/types.xml\">\n"
+ "]>\n"
+ "\n"
+ "<hibernate-mapping package=\"your.domain\">\n"
+ " <class name=\"MyEntity\">\n"
+ " <id name=\"id\" type=\"my-custom-id-type\">\n"
+ " ...\n"
+ " </id>\n"
+ " <class>\n"
+ " &types;\n"
+ "</hibernate-mapping>]]>"
+msgstr "<literal>default-cascade</literal> (opcional - por defecto a <literal>none</literal>): Un estilo de cascada por defecto."
+
+#: index.docbook:83
+msgid "Where <literal>types.xml</literal> is a resource in the <literal>your.domain</literal> package and contains a custom <xref linkend=\"mapping-types-custom\"/>typedef."
+msgstr "<literal>default-access</literal> (opcional - por defecto a <literal>property</literal>): La estrategia que Hibernate debe usar para acceder a todas las propiedades. Puede ser una implementación personalizada de <literal>PropertyAccessor</literal>."
+
+#: index.docbook:91
+msgid "hibernate-mapping"
+msgstr "<literal>default-lazy</literal> (opcional - por defecto a <literal>true</literal>): El valor por defecto para los atributos <literal>lazy</literal> de mapeos de clase y colleción no especificados."
+
+#: index.docbook:93
+msgid "This element has several optional attributes. The <literal>schema</literal> and <literal>catalog</literal> attributes specify that tables referred to in this mapping belong to the named schema and/or catalog. If specified, tablenames will be qualified by the given schema and catalog names. If missing, tablenames will be unqualified. The <literal>default-cascade</literal> attribute specifies what cascade style should be assumed for properties and collections which do not specify a <literal>cascade</literal> attribute. The <literal>auto-import</literal> attribute lets us use unqualified class names in the query language, by default."
+msgstr "<literal>auto-import</literal> (opcional - por defecto a <literal>true</literal>): Especifica si podemos usar nombres de clases no cualificados (de clases en este mapeo) en el lenguaje de consulta."
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[<hibernate-mapping\n"
+ " schema=\"schemaName\"\n"
+ " catalog=\"catalogName\"\n"
+ " default-cascade=\"cascade_style\"\n"
+ " default-access=\"field|property|ClassName\"\n"
+ " default-lazy=\"true|false\"\n"
+ " auto-import=\"true|false\"\n"
+ " package=\"package.name\"\n"
+ " />]]>"
+msgstr "<literal>package</literal> (opcional): Especifica un prefijo de paquete a asumir para los nombres no cualificados de clase en el documento de mapeo."
+
+#: index.docbook:117
+msgid "<literal>schema</literal> (optional): The name of a database schema."
+msgstr "Si tienes dos clases persistentes con el mismo nombre (sin cualificar), debes establecer <literal>auto-import=\"false\"</literal>. Hibernate lanzará una excepción si intentas asignar dos clases al mismo nombre \"importado\"."
+
+#: index.docbook:122
+msgid "<literal>catalog</literal> (optional): The name of a database catalog."
+msgstr "Observa que el elemento <literal>hibernate-mapping</literal> te permite anidar muchos mapeos <literal><class></literal> persistentes, como se muestra arriba. Sin embargo, es una buena práctica (y se espera de algunas herramientas) mapear sólo a una sola clase persistente (o a una sola jerarquía de clases) en un fichero de mapeo y nombrarlo después de la superclase persistente; por ejemplo, <literal>Cat.hbm.xml</literal>, <literal>Dog.hbm.xml</literal>, o, si se usa herencia, <literal>Animal.hbm.xml</literal>."
+
+#: index.docbook:127
+msgid "<literal>default-cascade</literal> (optional - defaults to <literal>none</literal>): A default cascade style."
+msgstr "<title>class</title>"
+
+#: index.docbook:133
+msgid "<literal>default-access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing all properties. Can be a custom implementation of <literal>PropertyAccessor</literal>."
+msgstr "Puedes declarar una clase persistente usando el elemento <literal>class</literal>:"
+
+#: index.docbook:140
+msgid "<literal>default-lazy</literal> (optional - defaults to <literal>true</literal>): The default value for unspecifed <literal>lazy</literal> attributes of class and collection mappings."
+msgstr ""
+ "<![CDATA[<class\n"
+ " name=\"ClassName\"\n"
+ " table=\"tableName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " mutable=\"true|false\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " select-before-update=\"true|false\"\n"
+ " polymorphism=\"implicit|explicit\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " persister=\"PersisterClass\"\n"
+ " batch-size=\"N\"\n"
+ " optimistic-lock=\"none|version|dirty|all\"\n"
+ " lazy=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " check=\"arbitrary sql check condition\"\n"
+ " rowid=\"rowid\"\n"
+ " subselect=\"SQL expression\"\n"
+ " abstract=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]>"
+
+#: index.docbook:147
+msgid "<literal>auto-import</literal> (optional - defaults to <literal>true</literal>): Specifies whether we can use unqualified class names (of classes in this mapping) in the query language."
+msgstr "<literal>name</literal> (opcional): El nombre completamente cualificado de la clase Java persistente (o interface). Si este atributo es omitido, se asume que el mapeo es para una entidad non-POJO."
+
+#: index.docbook:154
+msgid "<literal>package</literal> (optional): Specifies a package prefix to assume for unqualified class names in the mapping document."
+msgstr "<literal>table</literal> (opcional - por defecto al nombre no cualificado de la clase): El nombre de su tabla en base de datos."
+
+#: index.docbook:162
+msgid "If you have two persistent classes with the same (unqualified) name, you should set <literal>auto-import=\"false\"</literal>. Hibernate will throw an exception if you attempt to assign two classes to the same \"imported\" name."
+msgstr "<literal>discriminator-value</literal> (opcional - por defecto al nombre de la clase): Un valor que distingue subclases individuales, usado para el comportamiento polimórfico. Los valores aceptables incluyen <literal>null</literal> y <literal>not null</literal>."
+
+#: index.docbook:168
+msgid "Note that the <literal>hibernate-mapping</literal> element allows you to nest several persistent <literal><class></literal> mappings, as shown above. It is however good practice (and expected by some tools) to map only a single persistent class (or a single class hierarchy) in one mapping file and name it after the persistent superclass, e.g. <literal>Cat.hbm.xml</literal>, <literal>Dog.hbm.xml</literal>, or if using inheritance, <literal>Animal.hbm.xml</literal>."
+msgstr "<literal>mutable</literal> (opcional, por defecto a <literal>true</literal>): Especifica que las instancias de la clase (no) son mutables."
+
+#: index.docbook:181
+msgid "<title>class</title>"
+msgstr "<literal>schema</literal> (opcional): Sobreescribe el nombre de esquema especificado por el elemento raíz <literal><hibernate-mapping></literal>."
+
+#: index.docbook:183
+msgid "You may declare a persistent class using the <literal>class</literal> element:"
+msgstr "<literal>catalog</literal> (opcional): Sobreescribe el nombre de catálogo especificado por el elemento raíz <literal><hibernate-mapping></literal>."
+
+#: index.docbook:211
+msgid ""
+ "<![CDATA[<class\n"
+ " name=\"ClassName\"\n"
+ " table=\"tableName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " mutable=\"true|false\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " select-before-update=\"true|false\"\n"
+ " polymorphism=\"implicit|explicit\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " persister=\"PersisterClass\"\n"
+ " batch-size=\"N\"\n"
+ " optimistic-lock=\"none|version|dirty|all\"\n"
+ " lazy=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " check=\"arbitrary sql check condition\"\n"
+ " rowid=\"rowid\"\n"
+ " subselect=\"SQL expression\"\n"
+ " abstract=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]>"
+msgstr "<literal>proxy</literal> (opcional): Especifica una interface a usar para proxies de inicialización perezosa. Puedes especificar el nombre mismo de la clase."
+
+#: index.docbook:214
+msgid "<literal>name</literal> (optional): The fully qualified Java class name of the persistent class (or interface). If this attribute is missing, it is assumed that the mapping is for a non-POJO entity."
+msgstr "<literal>dynamic-update</literal> (opcional, por defecto a <literal>false</literal>): Especifica que el SQL <literal>UPDATE</literal> debe ser generado en tiempo de ejecución y contener solamente aquellas columnas cuyo valor haya cambiado."
+
+#: index.docbook:221
+msgid "<literal>table</literal> (optional - defaults to the unqualified class name): The name of its database table."
+msgstr "<literal>dynamic-insert</literal> (opcional, por defecto a <literal>false</literal>): Especifica que el SQL <literal>INSERT</literal> debe ser generado en tiempo de ejecución y contener solamente aquellas columnas cuyo valores no son nulos."
+
+#: index.docbook:227
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses, used for polymorphic behaviour. Acceptable values include <literal>null</literal> and <literal>not null</literal>."
+msgstr "<literal>select-before-update</literal> (opcional, por defecto a <literal>false</literal>): Especifica que Hibernate <emphasis>nunca</emphasis> debe realizar un SQL <literal>UPDATE</literal> a menos que se tenga certeza que un objeto haya sido modificado realmente. En ciertos casos, (realmente, sólo cuando un objeto transitorio ha sido asociado con una sesión nueva usando <literal>update()</literal>), esto significa que Hibernate realizará una SQL <literal>SELECT</literal> extra para determinar si un <literal>UPDATE</literal> es realmente requerido."
+
+#: index.docbook:234
+msgid "<literal>mutable</literal> (optional, defaults to <literal>true</literal>): Specifies that instances of the class are (not) mutable."
+msgstr "<literal>polymorphism</literal> (opcional, por defecto a <literal>implicit</literal>): Determina si se usa polimorfismo de consulta implícito o explícito."
+
+#: index.docbook:240, index.docbook:2204
+msgid "<literal>schema</literal> (optional): Override the schema name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr "<literal>where</literal> (opcional) especifica una condición SQL <literal>WHERE</literal> arbitraria paraa ser usada al recuperar objetos de esta clase."
+
+#: index.docbook:246, index.docbook:2210
+msgid "<literal>catalog</literal> (optional): Override the catalog name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr "<literal>persister</literal> (opcional): Especifica un <literal>ClassPersister</literal> personalizado."
+
+#: index.docbook:252
+msgid "<literal>proxy</literal> (optional): Specifies an interface to use for lazy initializing proxies. You may specify the name of the class itself."
+msgstr "<literal>batch-size</literal> (opcional, por defecto a <literal>1</literal>) especifica un \"tamaño de lote\" para traer instancias de esta clase por identificador."
+
+#: index.docbook:258
+msgid "<literal>dynamic-update</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>UPDATE</literal> SQL should be generated at runtime and contain only those columns whose values have changed."
+msgstr "<literal>optimistic-lock</literal> (opcional, por defecto a <literal>version</literal>): Determina la estrategia optimista de bloqueo."
+
+#: index.docbook:265
+msgid "<literal>dynamic-insert</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>INSERT</literal> SQL should be generated at runtime and contain only the columns whose values are not null."
+msgstr "<literal>lazy</literal> (opcional): La recuperación perezosa puede ser deshabilitada por completo estableciendo <literal>lazy=\"false\"</literal>."
+
+#: index.docbook:272
+msgid "<literal>select-before-update</literal> (optional, defaults to <literal>false</literal>): Specifies that Hibernate should <emphasis>never</emphasis> perform an SQL <literal>UPDATE</literal> unless it is certain that an object is actually modified. In certain cases (actually, only when a transient object has been associated with a new session using <literal>update()</literal>), this means that Hibernate will perform an extra SQL <literal>SELECT</literal> to determine if an <literal>UPDATE</literal> is actually required."
+msgstr "<literal>entity-name</literal> (opcional): Hibernate3 permite que una clase sea mapeada varias veces (potencialmente a tablas diferentes), y permite que los mapeos de entidad sean representados por Maps o XML al nivel de Java. En estos casos, debes proveer un nombre explícito arbitrario para la entidad. Para más información, mira <xref linkend=\"persistent-classes-dynamicmodels\"/> y <xref linkend=\"xml\"/>."
+
+#: index.docbook:282
+msgid "<literal>polymorphism</literal> (optional, defaults to <literal>implicit</literal>): Determines whether implicit or explicit query polymorphism is used."
+msgstr "<literal>check</literal> (opcional): Una expresión SQL usada para generar una restricción <emphasis>check</emphasis> multi-fila para la generación automática de esquema."
+
+#: index.docbook:288
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving objects of this class"
+msgstr "<literal>rowid</literal> (opcional): Hibernate puede usar los llamados ROWIDs en las bases de datos que los soporten. Por ejemplo, en Oracle, Hibernate puede usar la columna extra <literal>rowid</literal> para actualizaciones rápidas si estableces esta opción a <literal>rowid</literal>. Un ROWID es un detalle de implementación y representa la posición física de la tupla almacenada."
+
+#: index.docbook:294
+msgid "<literal>persister</literal> (optional): Specifies a custom <literal>ClassPersister</literal>."
+msgstr "<literal>subselect</literal> (opcional): Mapea una entidad inmutable y de sólo lectura a una subselect de base de datos. Es útil si quieres tener una vista en vez de una tabla base, pero no tienes vistas. Mira debajo para más información."
+
+#: index.docbook:299
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for fetching instances of this class by identifier."
+msgstr "<literal>abstract</literal> (opcional): Usado para marcar superclases abstractas en jerarquías <literal><union-subclass></literal>."
+
+#: index.docbook:305
+msgid "<literal>optimistic-lock</literal> (optional, defaults to <literal>version</literal>): Determines the optimistic locking strategy."
+msgstr "Es perfectamente aceptable que la clase persistente mencionada sea una interface. Entonces declararías clases que implementan esa interface usando el elemento <literal><subclass></literal>. Puedes persistir cualquier clase interna <emphasis>estática</emphasis>. Debes especificar el nombre de la clase usando la forma estándar. Por ejemplo, <literal>eg.Foo$Bar</literal>."
+
+#: index.docbook:311
+msgid "<literal>lazy</literal> (optional): Lazy fetching may be completely disabled by setting <literal>lazy=\"false\"</literal>."
+msgstr "Las clases inmutables, <literal>mutable=\"false\"</literal>, no pueden ser actualizadas o borradas por la aplicación. Esto permite a Hibernate hacer ciertas optimizaciones menores de rendimiento."
+
+#: index.docbook:317
+msgid "<literal>entity-name</literal> (optional, defaults to the class name): Hibernate3 allows a class to be mapped multiple times (to different tables, potentially), and allows entity mappings that are represented by Maps or XML at the Java level. In these cases, you should provide an explicit arbitrary name for the entity. See <xref linkend=\"persistent-classes-dynamicmodels\"/> and <xref linkend=\"xml\"/> for more information."
+msgstr "El atributo opcional <literal>proxy</literal> habilita la inicialización postergada de instancias persistentes de la clase. Hibernate inicialmente retornará proxies CGLIB que implementan la interface mencionada. El objeto persistente real será cargado cuando se invoque un método del proxy. Mira \"Proxies para Inicialización Postergada\" debajo."
+
+#: index.docbook:327
+msgid "<literal>check</literal> (optional): A SQL expression used to generate a multi-row <emphasis>check</emphasis> constraint for automatic schema generation."
+msgstr "Por polimorfismo <emphasis>implícito</emphasis> se entiende que las instancias de la clase serán devueltas por una consulta que mencione cualquier superclase, o interface implementada, o la clase misma; y que las instancias de cualquier subclase de la clase serán devueltas por una clase que mencione a la clase en sí. Por polimorfismo <emphasis>explícito</emphasis> se entiende que instancias de la clase serán devueltas sólo por consultas que mencionen explícitamente la clase; y que las consultas que mencionen la clase devolverán sólo instancias de subclases mapeadas dentro de esta declaración <literal><class></literal> como una <literal><subclass></literal> o <literal><joined-subclass></literal>. Para la mayoría de los propósitos el defecto, <literal>polymorphism=\"implicit\"</literal>, resulta apropiado. El polimorfismo explícito es útil cuando !
dos clases diferentes están mapeadas a la misma tabla (esto permite tener una clase \"liviana\" que contenga un subconjunto de columnas de la tabla)."
+
+#: index.docbook:333
+msgid "<literal>rowid</literal> (optional): Hibernate can use so called ROWIDs on databases which support. E.g. on Oracle, Hibernate can use the <literal>rowid</literal> extra column for fast updates if you set this option to <literal>rowid</literal>. A ROWID is an implementation detail and represents the physical location of a stored tuple."
+msgstr "El atributo <literal>persister</literal> te permite personalizar la estrategia de persistencia para la clase. Puedes, por ejemplo, especificar tu propia subclase de <literal>org.hibernate.persister.EntityPersister</literal> o incluso puedes proveer una implementación completamente nueva de la interface <literal>org.hibernate.persister.ClassPersister</literal> que implemente la persistencia por medio, por ejemplo, de llamadas a procedimientos almacenados, serialización a ficheros planos o LDAP. Para un ejemplo simple (de persistencia a una <literal>Hashtable</literal>) mira <literal>org.hibernate.test.CustomPersister</literal>."
+
+#: index.docbook:341
+msgid "<literal>subselect</literal> (optional): Maps an immutable and read-only entity to a database subselect. Useful if you want to have a view instead of a base table, but don't. See below for more information."
+msgstr "Observa que los valores de <literal>dynamic-update</literal> y <literal>dynamic-insert</literal> no son heredados por las subclases y por lo tanto deben especificarse en los elementos <literal><subclass></literal> o <literal><joined-subclass></literal>. Estos ajustes pueden incrementar el rendimiento en algunos casos, pero podrían mermarlo en otros. Ten juicio en su uso."
+
+#: index.docbook:348
+msgid "<literal>abstract</literal> (optional): Used to mark abstract superclasses in <literal><union-subclass></literal> hierarchies."
+msgstr "Generalmente el uso de <literal>select-before-update</literal> disminuirá el rendimiento. Es muy útil prevenir que se llame innecesariamente a un disparador de actualización de base de datos al volver a unir un grafo de instancias separadas a una <literal>Session</literal>."
+
+#: index.docbook:356
+msgid "It is perfectly acceptable for the named persistent class to be an interface. You would then declare implementing classes of that interface using the <literal><subclass></literal> element. You may persist any <emphasis>static</emphasis> inner class. You should specify the class name using the standard form ie. <literal>eg.Foo$Bar</literal>."
+msgstr "Si habilitas <literal>dynamic-update</literal>, tendrás opción de estrategias de bloqueo optimistas:"
+
+#: index.docbook:363
+msgid "Immutable classes, <literal>mutable=\"false\"</literal>, may not be updated or deleted by the application. This allows Hibernate to make some minor performance optimizations."
+msgstr "<literal>version</literal> chequea las columnas de versión/timestamp"
+
+#: index.docbook:368
+msgid "The optional <literal>proxy</literal> attribute enables lazy initialization of persistent instances of the class. Hibernate will initially return CGLIB proxies which implement the named interface. The actual persistent object will be loaded when a method of the proxy is invoked. See \"Initializing collections and proxies\" below."
+msgstr "<literal>all</literal> chequea todas las columnas"
+
+#: index.docbook:375
+msgid "<emphasis>Implicit</emphasis> polymorphism means that instances of the class will be returned by a query that names any superclass or implemented interface or the class and that instances of any subclass of the class will be returned by a query that names the class itself. <emphasis>Explicit</emphasis> polymorphism means that class instances will be returned only by queries that explicitly name that class and that queries that name the class will return only instances of subclasses mapped inside this <literal><class></literal> declaration as a <literal><subclass></literal> or <literal><joined-subclass></literal>. For most purposes the default, <literal>polymorphism=\"implicit\"</literal>, is appropriate. Explicit polymorphism is useful when two different classes are mapped to the same table (this allows a \"lightweight\" class that contains a subset of the table columns)."
+msgstr "<literal>dirty</literal> chequea las columnas modificadas, permitiendo algunas actualizaciones concurrentes"
+
+#: index.docbook:387
+msgid "The <literal>persister</literal> attribute lets you customize the persistence strategy used for the class. You may, for example, specify your own subclass of <literal>org.hibernate.persister.EntityPersister</literal> or you might even provide a completely new implementation of the interface <literal>org.hibernate.persister.ClassPersister</literal> that implements persistence via, for example, stored procedure calls, serialization to flat files or LDAP. See <literal>org.hibernate.test.CustomPersister</literal> for a simple example (of \"persistence\" to a <literal>Hashtable</literal>)."
+msgstr "<literal>none</literal> no usa bloqueo optimista"
+
+#: index.docbook:398
+msgid "Note that the <literal>dynamic-update</literal> and <literal>dynamic-insert</literal> settings are not inherited by subclasses and so may also be specified on the <literal><subclass></literal> or <literal><joined-subclass></literal> elements. These settings may increase performance in some cases, but might actually decrease performance in others. Use judiciously."
+msgstr "Recomendamos <emphasis>muy</emphasis> fuertemente que uses columnas de versión/timestamp para bloqueo optimista con Hibernate. Esta es la estrategia óptima con respecto al rendimiento y es la única estrategia que maneja correctamente las modificaciones hechas a las instancias separadas. (por ejemplo, cuando se usa <literal>Session.merge()</literal>)."
+
+#: index.docbook:406
+msgid "Use of <literal>select-before-update</literal> will usually decrease performance. It is very useful to prevent a database update trigger being called unnecessarily if you reattach a graph of detached instances to a <literal>Session</literal>."
+msgstr "Para un mapeo de Hibernate, no hay diferencia entre una vista y una tabla base. Como se supone esto es transparente a nivel de base de datos (observa que algunos DBMS no soportan correctamente las vistas, especialmente con las actualizaciones). A veces quieres usar una vista, pero no puedes crear una en la base de datos (por ejemplo, con un esquema heredado). En este caso, puedes mapear una entidad inmutable de sólo lectura a una expresión de subconsulta SQL dada."
+
+#: index.docbook:412
+msgid "If you enable <literal>dynamic-update</literal>, you will have a choice of optimistic locking strategies:"
+msgstr ""
+ "<![CDATA[<class name=\"Summary\">\n"
+ " <subselect>\n"
+ " select item.name, max(bid.amount), count(*)\n"
+ " from item\n"
+ " join bid on bid.item_id = item.id\n"
+ " group by item.name\n"
+ " </subselect>\n"
+ " <synchronize table=\"item\"/>\n"
+ " <synchronize table=\"bid\"/>\n"
+ " <id name=\"name\"/>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:418
+msgid "<literal>version</literal> check the version/timestamp columns"
+msgstr "Declara las tablas con las que sincronizar esta entidad, asegurando que el auto-flush ocurre correctamente, y que las consultas contra la entidad derivada no devuelven datos desactualizados. El <literal><subselect></literal> está disponible tanto como un atributo o como un elemento anidado de mapeo."
+
+#: index.docbook:423
+msgid "<literal>all</literal> check all columns"
+msgstr "<title>id</title>"
+
+#: index.docbook:428
+msgid "<literal>dirty</literal> check the changed columns, allowing some concurrent updates"
+msgstr "Las clases mapeadas <emphasis>deben</emphasis> declarar la columna de clave primaria de la tabla de la base de datos. En la mayoría de los casos tendrá también una propiedad estilo Javabeans que tenga el identificador único de una instancia. El elemento <literal><id></literal> define el mapeo de esa propiedad a la columna de clave primaria."
+
+#: index.docbook:433
+msgid "<literal>none</literal> do not use optimistic locking"
+msgstr ""
+ "<![CDATA[<id\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " column=\"column_name\"\n"
+ " unsaved-value=\"null|any|none|undefined|id_value\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\">\n"
+ "\n"
+ " <generator class=\"generatorClass\"/>\n"
+ "</id>]]>"
+
+#: index.docbook:438
+msgid "We <emphasis>very</emphasis> strongly recommend that you use version/timestamp columns for optimistic locking with Hibernate. This is the optimal strategy with respect to performance and is the only strategy that correctly handles modifications made to detached instances (ie. when <literal>Session.merge()</literal> is used)."
+msgstr "<literal>name</literal> (opcional): El nombre de la propiedad del indentificador."
+
+#: index.docbook:445
+msgid "There is no difference between a view and a base table for a Hibernate mapping, as expected this is transparent at the database level (note that some DBMS don't support views properly, especially with updates). Sometimes you want to use a view, but can't create one in the database (ie. with a legacy schema). In this case, you can map an immutable and read-only entity to a given SQL subselect expression:"
+msgstr "<literal>type</literal> (opcional): Un nombre que indica el tipo Hibernate."
+
+#: index.docbook:453
+msgid ""
+ "<![CDATA[<class name=\"Summary\">\n"
+ " <subselect>\n"
+ " select item.name, max(bid.amount), count(*)\n"
+ " from item\n"
+ " join bid on bid.item_id = item.id\n"
+ " group by item.name\n"
+ " </subselect>\n"
+ " <synchronize table=\"item\"/>\n"
+ " <synchronize table=\"bid\"/>\n"
+ " <id name=\"name\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr "<literal>column</literal> (opcional - por defecto al nombre de la propiedad): El nombre de la columna de clave primaria."
+
+#: index.docbook:455
+msgid "Declare the tables to synchronize this entity with, ensuring that auto-flush happens correctly, and that queries against the derived entity do not return stale data. The <literal><subselect></literal> is available as both as an attribute and a nested mapping element."
+msgstr "<literal>unsaved-value</literal> (opcional - por defecto al valor \"sensible\"): Una valor de la propiedad identificadora que indica que una instancia está recién instanciada (sin salvar), distinguiéndola de instancias separadas que fueran salvadas o cargadas en una sesión previa."
+
+#: index.docbook:465
+msgid "<title>id</title>"
+msgstr "<literal>access</literal> (opcional - por defecto a <literal>property</literal>): La estrategia que Hibernate debe usar para acceder al valor de la propiedad."
+
+#: index.docbook:467
+msgid "Mapped classes <emphasis>must</emphasis> declare the primary key column of the database table. Most classes will also have a JavaBeans-style property holding the unique identifier of an instance. The <literal><id></literal> element defines the mapping from that property to the primary key column."
+msgstr "Si se omite el atributo <literal>name</literal>, se asume que la clase no tiene propiedad identificadora."
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[<id\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " column=\"column_name\"\n"
+ " unsaved-value=\"null|any|none|undefined|id_value\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "\n"
+ " <generator class=\"generatorClass\"/>\n"
+ "</id>]]>"
+msgstr "El atributo <literal>unsaved-value</literal> es importante! Si la propiedad identificadora de tu clase no tiene por defecto el valor por defecto normal de Java (null o cero), entonces debes especificar el valor por defecto real."
+
+#: index.docbook:485
+msgid "<literal>name</literal> (optional): The name of the identifier property."
+msgstr "Hay una declaración <literal><composite-id></literal> alternativa para permitir acceso a datos heredados con claves compuestas. Desalentamos fuertemente su uso para cualquier otra cosa."
+
+#: index.docbook:490
+msgid "<literal>type</literal> (optional): A name that indicates the Hibernate type."
+msgstr "Generator"
+
+#: index.docbook:495
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the primary key column."
+msgstr "El elemento hijo opcional <literal><generator></literal> nombra una clase Java usada en generar identificadores únicos para instancias de la clase persistente. De requerirse algún parámetro para configurar o inicializar la instancia del generador, se pasa usando el elemento <literal><param></literal>."
+
+#: index.docbook:501
+msgid "<literal>unsaved-value</literal> (optional - defaults to a \"sensible\" value): An identifier property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session."
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"org.hibernate.id.TableHiLoGenerator\">\n"
+ " <param name=\"table\">uid_table</param>\n"
+ " <param name=\"column\">next_hi_value_column</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:509, index.docbook:1017, index.docbook:1156, index.docbook:1238, index.docbook:1345, index.docbook:1534, index.docbook:1708, index.docbook:1878, index.docbook:2457
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the property value."
+msgstr "Todos los generadores implementan la interface <literal>org.hibernate.id.IdentifierGenerator</literal>. Esta es una interface muy simple; algunas aplicaciones pueden escoger proveer sus propias implementaciones especializadas. Sin embargo, Hibernate provee un rango de implementaciones prefabricadas. Hay nombres alias de atajo para los generadores prefabricados:"
+
+#: index.docbook:517
+msgid "If the <literal>name</literal> attribute is missing, it is assumed that the class has no identifier property."
+msgstr "increment"
+
+#: index.docbook:522
+msgid "The <literal>unsaved-value</literal> attribute is almost never needed in Hibernate3."
+msgstr "genera indentificadores de tipo <literal>long</literal>, <literal>short</literal> o <literal>int</literal> que sólo son únicos cuando ningún otro proceso está insertando datos en la misma tabla. <emphasis>No usar en un cluster.</emphasis>"
+
+#: index.docbook:526
+msgid "There is an alternative <literal><composite-id></literal> declaration to allow access to legacy data with composite keys. We strongly discourage its use for anything else."
+msgstr "identity"
+
+#: index.docbook:532
+msgid "Generator"
+msgstr "soporta columnas de identidad en DB2, MySQL, MS SQL Server, Sybase y HypersonicSQL. El identificador devuelto es de tipo <literal>long</literal>, <literal>short</literal> o <literal>int</literal>."
+
+#: index.docbook:534
+msgid "The optional <literal><generator></literal> child element names a Java class used to generate unique identifiers for instances of the persistent class. If any parameters are required to configure or initialize the generator instance, they are passed using the <literal><param></literal> element."
+msgstr "sequence"
+
+#: index.docbook:541
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"org.hibernate.id.TableHiLoGenerator\">\n"
+ " <param name=\"table\">uid_table</param>\n"
+ " <param name=\"column\">next_hi_value_column</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "usa una secuencia en DB2, PostgreSQL, Oracle, SAP DB, McKoi o un generador en Interbase. El identificador devuelto es de tipo <literal>long</literal>, <literal>short</literal> o <literal>int</literal>."
+
+#: index.docbook:543
+msgid "All generators implement the interface <literal>org.hibernate.id.IdentifierGenerator</literal>. This is a very simple interface; some applications may choose to provide their own specialized implementations. However, Hibernate provides a range of built-in implementations. There are shortcut names for the built-in generators:"
+msgstr "hilo"
+
+#: index.docbook:551
+msgid "increment"
+msgstr "usa un algoritmo alto/bajo para generar eficientemente identificadores de tipo <literal>long</literal>, <literal>short</literal> o <literal>int</literal>, dada una tabla y columna como fuente de valores altos (por defecto <literal>hibernate_unique_key</literal> y <literal>next_hi</literal> respectivamente). El algoritmo alto/bajo genera identificadores que son únicos sólo para una base de datos particular."
+
+#: index.docbook:553
+msgid "generates identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal> that are unique only when no other process is inserting data into the same table. <emphasis>Do not use in a cluster.</emphasis>"
+msgstr "seqhilo"
+
+#: index.docbook:562
+msgid "identity"
+msgstr "usa un algoritmo alto/bajo para generar eficientemente identificadores de tipo <literal>long</literal>, <literal>short</literal> o <literal>int</literal>, dada una secuencia de base de datos."
+
+#: index.docbook:564
+msgid "supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>."
+msgstr "uuid"
+
+#: index.docbook:572
+msgid "sequence"
+msgstr "usa un algoritmo UUID de 128 bits para generar identificadore de tipo cadena, únicos en una ref (se usa la direccón IP). El UUID se codifica como una cadena hexadecimal de 32 dígitos de largo."
+
+#: index.docbook:574
+msgid "uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>"
+msgstr "guid"
+
+#: index.docbook:582
+msgid "hilo"
+msgstr "usa una cadena GUID generada por base de datos en MS SQL Server y MySQL."
+
+#: index.docbook:584
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a table and column (by default <literal>hibernate_unique_key</literal> and <literal>next_hi</literal> respectively) as a source of hi values. The hi/lo algorithm generates identifiers that are unique only for a particular database."
+msgstr "native"
+
+#: index.docbook:594
+msgid "seqhilo"
+msgstr "selecciona <literal>identity</literal>, <literal>sequence</literal> o <literal>hilo</literal> dependiendo de las capacidades de la base de datos subyacente."
+
+#: index.docbook:596
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a named database sequence."
+msgstr "assigned"
+
+#: index.docbook:604
+msgid "uuid"
+msgstr "deja a la aplicación asignar un identificador al objeto antes de que se llame a <literal>save()</literal>. Esta es la estrategia por defecto si no se especifica un elemento <literal><generator></literal>."
+
+#: index.docbook:606
+msgid "uses a 128-bit UUID algorithm to generate identifiers of type string, unique within a network (the IP address is used). The UUID is encoded as a string of hexadecimal digits of length 32."
+msgstr "select"
+
+#: index.docbook:614
+msgid "guid"
+msgstr "recupera una clave primaria asignada por un disparador de base de datos seleccionando la fila por alguna clave única y recuperando el valor de la clave primaria."
+
+#: index.docbook:616
+msgid "uses a database-generated GUID string on MS SQL Server and MySQL."
+msgstr "foreign"
+
+#: index.docbook:622
+msgid "native"
+msgstr "usa el identificador de otro objeto asociado. Generalmente usado en conjuncón a una asociacón de clave primaria <literal><uno-a-uno></literal>"
+
+#: index.docbook:624
+msgid "picks <literal>identity</literal>, <literal>sequence</literal> or <literal>hilo</literal> depending upon the capabilities of the underlying database."
+msgstr "Algoritmo alto/bajo"
+
+#: index.docbook:632
+msgid "assigned"
+msgstr "Los generadores <literal>hilo</literal> y <literal>seqhilo</literal> proveen dos implementaciones alternativas del algoritmo alto/bajo, un enfoque favorito en generación de identificadores. La primera implementación requiere de una tabla \"especial\" de base de datos para tener el siguiente valor \"alto\" disponible. La segunda usa una secuencia del estilo de Oracle (donde se soporte)."
+
+#: index.docbook:634
+msgid "lets the application to assign an identifier to the object before <literal>save()</literal> is called. This is the default strategy if no <literal><generator></literal> element is specified."
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"hilo\">\n"
+ " <param name=\"table\">hi_value</param>\n"
+ " <param name=\"column\">next_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:642
+msgid "select"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"seqhilo\">\n"
+ " <param name=\"sequence\">hi_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:644
+msgid "retrieves a primary key assigned by a database trigger by selecting the row by some unique key and retrieving the primary key value."
+msgstr "Desafortunadamente, no puedes usar <literal>hilo</literal> cuando le proveas tu propia <literal>Connection</literal> a Hibernate. Cuando Hibernate está usando un datasource del servidor de aplicaciones para obtener conexiones alistadas con JTA, debes configurar correctamente el <literal>hibernate.transaction.manager_lookup_class</literal>."
+
+#: index.docbook:651
+msgid "foreign"
+msgstr "Algoritmo UUID"
+
+#: index.docbook:653
+msgid "uses the identifier of another associated object. Usually used in conjunction with a <literal><one-to-one></literal> primary key association."
+msgstr "El UUID contiene: la dirección IP, el instante de arranque de la JVM (con una precisión de un cuarto de segundo), el tiempo de sistema y un valor de contador (único en la JVM). No es posible obtener una dirección MAC o una dirección de memoria desde código Java, así que esto es lo mejor que podemos hacer sin usar JNI."
+
+#: index.docbook:660
+msgid "sequence-identity"
+msgstr "Columnas de identidad y secuencias"
+
+#: index.docbook:662
+msgid "a specialized sequence generation strategy which utilizes a database sequence for the actual value generation, but combines this with JDBC3 getGeneratedKeys to actually return the generated identifier value as part of the insert statement execution. This strategy is only known to be supported on Oracle 10g drivers targetted for JDK 1.4. Note comments on these insert statements are disabled due to a bug in the Oracle drivers."
+msgstr "Para las bases de datos que soportan columnas de identidad (DB2, MySQL, Sybase, MS SQL), puedes usar generación de claves <literal>identity</literal>. Para las bases de datos que soportan secuencias (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) puedes usar la generación de claves del estilo <literal>sequence</literal>. Ambas estrategias requieren dos consultas SQL para insertar un nuevo objeto."
+
+#: index.docbook:679
+msgid "Hi/lo algorithm"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">person_id_sequence</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:680
+msgid "The <literal>hilo</literal> and <literal>seqhilo</literal> generators provide two alternate implementations of the hi/lo algorithm, a favorite approach to identifier generation. The first implementation requires a \"special\" database table to hold the next available \"hi\" value. The second uses an Oracle-style sequence (where supported)."
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0\">\n"
+ " <generator class=\"identity\"/>\n"
+ "</id>]]>"
+
+#: index.docbook:687
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"hilo\">\n"
+ " <param name=\"table\">hi_value</param>\n"
+ " <param name=\"column\">next_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "Para desarrollos multiplataforma, la estrategia <literal>native</literal> eiligirá de entre las estrategias <literal>identity</literal>, <literal>sequence</literal> y <literal>hilo</literal>, dependiendo de las capacidades de la base de datos subyacentes."
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"seqhilo\">\n"
+ " <param name=\"sequence\">hi_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "Identificadores asignados"
+
+#: index.docbook:691
+msgid "Unfortunately, you can't use <literal>hilo</literal> when supplying your own <literal>Connection</literal> to Hibernate. When Hibernate is using an application server datasource to obtain connections enlisted with JTA, you must properly configure the <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr "Si quieres que la aplicación asigne los identificadores (en contraposición a que los genere Hibernate), puedes usar el generador <literal>assigned</literal>. Este generador especial usará el valor identificador ya asignado a la propiedad identificadora del objeto. Este generador se usa cuandola clave primaria es una clave natural en vez de una clave sustituta. Este es el comportamiento por defecto si no especificas un elemento <literal><generator></literal>."
+
+#: index.docbook:700
+msgid "UUID algorithm"
+msgstr "Elegir el generador <literal>assigned</literal> hace que Hibernate use <literal>unsaved-value=\"undefined\"</literal>, forzando a Hibernate a ir a la base de datos para determinar si una instancia es transitoria o separada, a menos que haya una propiedad de versión o timestamp, o que tu definas <literal>Interceptor.isUnsaved()</literal>."
+
+#: index.docbook:701
+msgid "The UUID contains: IP address, startup time of the JVM (accurate to a quarter second), system time and a counter value (unique within the JVM). It's not possible to obtain a MAC address or memory address from Java code, so this is the best we can do without using JNI."
+msgstr "Claves primarias asignadas por disparadores"
+
+#: index.docbook:710
+msgid "Identity columns and sequences"
+msgstr "Para esquemas heredados solamente (Hibernate no genera DDL con disparadores)."
+
+#: index.docbook:711
+msgid "For databases which support identity columns (DB2, MySQL, Sybase, MS SQL), you may use <literal>identity</literal> key generation. For databases that support sequences (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) you may use <literal>sequence</literal> style key generation. Both these strategies require two SQL queries to insert a new object."
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"select\">\n"
+ " <param name=\"key\">socialSecurityNumber</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:719
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">person_id_sequence</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "En el ejemplo de arriba, hay una propiedad ánica llamada <literal>socialSecurityNumber</literal> definida por la clase, como una clave natural, y una clave sustituta llamada <literal>person_id</literal> cuyo valor es generado por un disparador."
+
+#: index.docbook:721
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0\">\n"
+ " <generator class=\"identity\"/>\n"
+ "</id>]]>"
+msgstr "composite-id"
+
+#: index.docbook:723
+msgid "For cross-platform development, the <literal>native</literal> strategy will choose from the <literal>identity</literal>, <literal>sequence</literal> and <literal>hilo</literal> strategies, dependant upon the capabilities of the underlying database."
+msgstr ""
+ "<![CDATA[<composite-id\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " unsaved-value=\"undefined|any|none\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " node=\"element-name|.\">\n"
+ "\n"
+ " <key-property name=\"propertyName\" type=\"typename\" column=\"column_name\"/>\n"
+ " <key-many-to-one name=\"propertyName class=\"ClassName\" column=\"column_name\"/>\n"
+ " ......\n"
+ "</composite-id>]]>"
+
+#: index.docbook:732
+msgid "Assigned identifiers"
+msgstr "Para una tabla con clave compuesta, puedes mapear múltiples propiedades de la clase como propiedades identificadoras. El elemento <literal><composite-id></literal> acepta los mapeos de propiedad <literal><key-property></literal> y los mapeos <literal><key-many-to-one></literal> como elementos hijo."
+
+#: index.docbook:733
+msgid "If you want the application to assign identifiers (as opposed to having Hibernate generate them), you may use the <literal>assigned</literal> generator. This special generator will use the identifier value already assigned to the object's identifier property. This generator is used when the primary key is a natural key instead of a surrogate key. This is the default behavior if you do no specify a <literal><generator></literal> element."
+msgstr ""
+ "<![CDATA[<composite-id>\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+
+#: index.docbook:742
+msgid "Choosing the <literal>assigned</literal> generator makes Hibernate use <literal>unsaved-value=\"undefined\"</literal>, forcing Hibernate to go to the database to determine if an instance is transient or detached, unless there is a version or timestamp property, or you define <literal>Interceptor.isUnsaved()</literal>."
+msgstr "Tu clase persistente <emphasis>debe</emphasis> sobreescribir <literal>equals()</literal> y <literal>hashCode()</literal> para implementar igualdad de identificador compuesto. Debe también implementar <literal>Serializable</literal>."
+
+#: index.docbook:752
+msgid "Primary keys assigned by triggers"
+msgstr "Desafortunadamente, este enfoque de identificadores compuestos significa que un objeto persistente es su propio identificador. No existe otra \"asa\" conveniente más que el objeto mismo. Debes instanciar una instancia de la clase misma y poblar sus propiedades identificadoras antes que puedas <literal>load()</literal> el estado persistente asociado a una clave compuesta. Describiremos un enfoque mucho más conveniente donde el identificador compuesto está implementado como una clase separada en <xref linkend=\"components-compositeid\"/>. Los atributos descriptos debajo solamente se aplican a este enfoque alternativo:"
+
+#: index.docbook:753
+msgid "For legacy schemas only (Hibernate does not generate DDL with triggers)."
+msgstr "<literal>name</literal> (opcional): Una propiedad de tipo componente que tiene el identificador compuesto (ver siguiente sección)."
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"select\">\n"
+ " <param name=\"key\">socialSecurityNumber</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "<literal>class</literal> (opcional - por defecto al tipo de la propiedad determinado por reflección): La clase del componente usado como identificador compuesto (ver siguiente sección)."
+
+#: index.docbook:759
+msgid "In the above example, there is a unique valued property named <literal>socialSecurityNumber</literal> defined by the class, as a natural key, and a surrogate key named <literal>person_id</literal> whose value is generated by a trigger."
+msgstr "<literal>unsaved-value</literal> (opcional - por defecto a <literal>undefined</literal>): Indica que las instancias transitorias deben ser consideradas como recién instanciadas, si se establece a <literal>any</literal>, o separadas, si se establece a <literal>none</literal>. Lo mejor Indicates that transient instances should be considered newly instantiated, if set to <literal>any</literal>, or detached, if set to <literal>none</literal>. Lo mejor en todos los casos es dejar el valor por defecto."
+
+#: index.docbook:771
+msgid "Enhanced identifier generators"
+msgstr "discriminator"
+
+#: index.docbook:773
+msgid "Starting with release 3.2.3, there are 2 new generators which represent a re-thinking of 2 different aspects of identifier generation. The first aspect is database portability; the second is optimization (not having to query the database for every request for a new identifier value). These two new generators are intended to take the place of some of the named generators described above (starting in 3.3.x); however, they are included in the current releases and can be referenced by FQN."
+msgstr "El elemento <literal><discriminator></literal> es requerido para la persistencia polimórfica usando la estrategia de mapeo de tabla-por-jerarquía-de-clases y declara una columna discriminadora de la tabla. La columna discriminidora contiene valores de marca que le dicen a la capa de persistencia qué subclase instanciar para una fila en particular. Un conjunto restringido de tipos puede ser usado: <literal>string</literal>, <literal>character</literal>, <literal>integer</literal>, <literal>byte</literal>, <literal>short</literal>, <literal>boolean</literal>, <literal>yes_no</literal>, <literal>true_false</literal>."
+
+#: index.docbook:781
+msgid "The first of these new generators is <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> which is intended firstly as a replacement for the <literal>sequence</literal> generator and secondly as a better portability generator than <literal>native</literal> (because <literal>native</literal> (generally) chooses between <literal>identity</literal> and <literal>sequence</literal> which have largely different semantics which can cause subtle isssues in applications eyeing portability). <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> however achieves portability in a different manner. It chooses between using a table or a sequence in the database to store its incrementing values depending on the capabilities of the dialect being used. The difference between this and <literal>native</literal> is that table-based and sequence-based storage have the same exact semantic (in fact sequences are exactly what Hibernate tries to emmulate with its!
table-based generators). This generator has a number of configuration parameters:"
+msgstr ""
+ "<![CDATA[<discriminator\n"
+ " column=\"discriminator_column\"\n"
+ " type=\"discriminator_type\"\n"
+ " force=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary sql expression\"\n"
+ "/>]]>"
+
+#: index.docbook:795
+msgid "<literal>sequence_name</literal> (optional, defaults to <literal>hibernate_sequence</literal>): The name of the sequence (or table) to be used."
+msgstr "<literal>column</literal> (opcional - por defecto a <literal>class</literal>) el nombre de la columna discriminadora."
+
+#: index.docbook:801
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the sequence/table. In sequence creation terms, this is analogous to the clause typical named \"STARTS WITH\"."
+msgstr "<literal>type</literal> (opcional - por defecto a <literal>string</literal>) un nombre que indique el tipo Hibernate"
+
+#: index.docbook:808
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the sequence/table should differ. In sequence creation terms, this is analogous to the clause typical named \"INCREMENT BY\"."
+msgstr "<literal>force</literal> (optconal - por defecto a <literal>false</literal>) \"fuerza\" a Hibernate a especificar valores discriminadores permitidos incluso cuando se recuperan todas las instancias de la clase raíz."
+
+#: index.docbook:815
+msgid "<literal>force_table_use</literal> (optional, defaults to <literal>false</literal>): Should we force the use of a table as the backing structure even though the dialect might support sequence?"
+msgstr "<literal>insert</literal> (opcional - por defecto a <literal>true</literal>) establezca este a <literal>false</literal> si tu columna discriminadora es también parte de un identificador mapeado compuesto. (Le dice a Hibernate que no incluya la columna en los SQL <literal>INSERT</literal>s.)"
+
+#: index.docbook:822
+msgid "<literal>value_column</literal> (optional, defaults to <literal>next_val</literal>): Only relevant for table structures! The name of the column on the table which is used to hold the value."
+msgstr "<literal>formula</literal> (opcional) una expresión SQL arbitraria que es ejecutada cuando un tipo tenga que ser evaluado. Permite dicriminación basada en el contenido."
+
+#: index.docbook:829
+msgid "<literal>optimizer</literal> (optional, defaults to <literal>none</literal>): See"
+msgstr "Los valores reales de la columna discriminadora están especificados por el atributo <literal>discriminator-value</literal> de los elementos <literal><class></literal> y <literal><subclass></literal>."
+
+#: index.docbook:836
+msgid "The second of these new generators is <literal>org.hibernate.id.enhanced.TableGenerator</literal> which is intended firstly as a replacement for the <literal>table</literal> generator (although it actually functions much more like <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal>) and secondly as a re-implementation of <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal> utilizing the notion of pluggable optimiziers. Essentially this generator defines a table capable of holding a number of different increment values simultaneously by using multiple distinctly keyed rows. This generator has a number of configuration parameters:"
+msgstr "El atributo <literal>force</literal> es (sólo) útil si la tabla contiene filas con valores discriminadores \"extra\" que no están mapeados a la clase persistente. Generalmente este no es el caso."
+
+#: index.docbook:846
+msgid "<literal>table_name</literal> (optional, defaults to <literal>hibernate_sequences</literal>): The name of the table to be used."
+msgstr "Usando el atributo <literal>formula</literal> puedes declarar una expresión SQL arbitraria que será usada para evaluar el tipo de una fila:"
+
+#: index.docbook:852
+msgid "<literal>value_column_name</literal> (optional, defaults to <literal>next_val</literal>): The name of the column on the table which is used to hold the value."
+msgstr ""
+ "<![CDATA[<discriminator\n"
+ " formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"\n"
+ " type=\"integer\"/>]]>"
+
+#: index.docbook:858
+msgid "<literal>segment_column_name</literal> (optional, defaults to <literal>sequence_name</literal>): The name of the column on the table which is used to hold the \"segement key\". This is the value which distinctly identifies which increment value to use."
+msgstr "version (opcional)"
+
+#: index.docbook:865
+msgid "<literal>segment_value</literal> (optional, defaults to <literal>default</literal>): The \"segment key\" value for the segment from which we want to pull increment values for this generator."
+msgstr "El elemento <literal><version></literal> es opcional e indica que la tabla contiene datos versionados. Esto es particularmente útil si planeas usar <emphasis>transacciones largas</emphasis> (ver debajo)."
+
+#: index.docbook:872
+msgid "<literal>segment_value_length</literal> (optional, defaults to <literal>255</literal>): Used for schema generation; the column size to create this segment key column."
+msgstr ""
+ "<![CDATA[<version\n"
+ " column=\"version_column\"\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|negative|undefined\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+
+#: index.docbook:878
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the table."
+msgstr "<literal>column</literal> (opcional - por defecto al nombre de la propiedad): El nombre de la columna que tiene el número de versión."
+
+#: index.docbook:884
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the table should differ."
+msgstr "<literal>name</literal>: El nombre de una propiedad de la clase persistente."
+
+#: index.docbook:890
+msgid "<literal>optimizer</literal> (optional, defaults to <literal></literal>): See"
+msgstr "<literal>type</literal> (opcional - por defecto a <literal>integer</literal>): El tipo del nú.mero de vesión."
+
+#: index.docbook:900
+msgid "Identifier generator optimization"
+msgstr "<literal>access</literal> (opcional - por defecto a <literal>property</literal>): La estrategia que Hibernate debe usar para acceder al valor de la propiedad."
+
+#: index.docbook:901
+msgid "For identifier generators which store values in the database, it is inefficient for them to hit the database on each and every call to generate a new identifier value. Instead, you'd ideally want to group a bunch of them in memory and only hit the database when you have exhausted your in-memory value group. This is the role of the pluggable optimizers. Currently only the two enhanced generators (<xref linkend=\"mapping-declaration-id-enhanced\"/> support this notion."
+msgstr "<literal>unsaved-value</literal> (opcional - por defecto a <literal>undefined</literal>): Un valor de la propiedad de versión que indica que una instancia está recién instanciada (sin guardar), distinguiéndola de instancias separadas que fueran guardadas o cargadas en una sesión previa. (<literal>undefined</literal> especifica que debe usarse el valor de la propiedad identificadora.)"
+
+#: index.docbook:909
+msgid "<literal>none</literal> (generally this is the default if no optimizer was specified): This says to not perform any optimizations, and hit the database each and every request."
+msgstr "Los números de versión deben ser de tipo <literal>long</literal>, <literal>integer</literal>, <literal>short</literal>, <literal>timestamp</literal> o <literal>calendar</literal> de Hibernate."
+
+#: index.docbook:915
+msgid "<literal>hilo</literal>: applies a hi/lo algorithm around the database retrieved values. The values from the database for this optimizer are expected to be sequential. The values retrieved from the database structure for this optimizer indicates the \"group number\"; the <literal>increment_size</literal> is multiplied by that value in memory to define a group \"hi value\"."
+msgstr "Una propiedad de versión o timestamp nunca debe ser nula para una instancia separada, de modo que Hibernate detectará cualquier instancia con una versión o timestamp nulo como transitoria, sin importar qué otras estrategias <literal>unsaved-value</literal> se hayan especificado. <emphasis>Declarar una propiedad de versón o timestamp nulable es una forma fácil de evitar cualquier problema con la re-unión transitiva en Hibernate, especialmente útil para que usa identificadores asignados o claves compuestas!</emphasis>"
+
+#: index.docbook:924
+msgid "<literal>pooled</literal>: like was discussed for <literal>hilo</literal>, this optimizers attempts to minimize the number of hits to the database. Here, however, we simply store the starting value for the \"next group\" into the database structure rather than a sequential value in combination with an in-memory grouping algorithm. <literal>increment_size</literal> here refers to the values coming from the database."
+msgstr "timestamp (opcional)"
+
+#: index.docbook:937
+msgid "composite-id"
+msgstr "El elemento opcional <literal><timestamp></literal> indica que la tabla contiene datos con sellos de tiempo. Esto esta concebido como una alternativa al versionado. Los timestamps (sellos de tiempo) son por su naturaleza una implementación menos segura de bloqueo optimista. Sin embrago, a veces la aplicación puede usar los timestamps en otras formas."
+
+#: index.docbook:939
+msgid ""
+ "<![CDATA[<composite-id\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " mapped=\"true|false\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|.\"\n"
+ "\n"
+ " <key-property name=\"propertyName\" type=\"typename\" column=\"column_name\"/>\n"
+ " <key-many-to-one name=\"propertyName class=\"ClassName\" column=\"column_name\"/>\n"
+ " ......\n"
+ "</composite-id>]]>"
+msgstr ""
+ "<![CDATA[<timestamp\n"
+ " column=\"timestamp_column\"\n"
+ " name=\"propertyName\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|undefined\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+
+#: index.docbook:941
+msgid "For a table with a composite key, you may map multiple properties of the class as identifier properties. The <literal><composite-id></literal> element accepts <literal><key-property></literal> property mappings and <literal><key-many-to-one></literal> mappings as child elements."
+msgstr "<literal>column</literal> (opcional - por defecto al nombre de la propiedad): El nombre de una columna que tiene el timestamp."
+
+#: index.docbook:948
+msgid ""
+ "<![CDATA[<composite-id>\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr "<literal>name</literal>: El nombre de una propiedad del estilo JavaBeans de tipo Java <literal>Date</literal> o <literal>Timestamp</literal> de la clase persistente."
+
+#: index.docbook:950
+msgid "Your persistent class <emphasis>must</emphasis> override <literal>equals()</literal> and <literal>hashCode()</literal> to implement composite identifier equality. It must also implements <literal>Serializable</literal>."
+msgstr "<literal>access</literal> (opcional - por defecto a <literal>property</literal>): La estrategia que Hibernate debe usar para acceder al valor de la propiedad."
+
+#: index.docbook:956
+msgid "Unfortunately, this approach to composite identifiers means that a persistent object is its own identifier. There is no convenient \"handle\" other than the object itself. You must instantiate an instance of the persistent class itself and populate its identifier properties before you can <literal>load()</literal> the persistent state associated with a composite key. We call this approach an <emphasis>embedded</emphasis> composite identifier, and discourage it for serious applications."
+msgstr "<literal>unsaved-value</literal> (opcional - por defecto a <literal>null</literal>): Un valor de propiedad de versión que indica que una instancia está recién instanciada (sin guardar), distinguiéndola de instancias separadas que hayan sido guardadas o cargadas en una sesión previa. (<literal>undefined</literal> especifica que debe usarse el valor de la propiedad identificadora.)"
+
+#: index.docbook:965
+msgid "A second approach is what we call a <emphasis>mapped</emphasis> composite identifier, where the identifier properties named inside the <literal><composite-id></literal> element are duplicated on both the persistent class and a separate identifier class."
+msgstr "Note that <literal><timestamp></literal> is equivalent to <literal><version type=\"timestamp\"></literal>."
+
+#: index.docbook:971
+msgid ""
+ "<![CDATA[<composite-id class=\"MedicareId\" mapped=\"true\">\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr "property"
+
+#: index.docbook:973
+msgid "In this example, both the composite identifier class, <literal>MedicareId</literal>, and the entity class itself have properties named <literal>medicareNumber</literal> and <literal>dependent</literal>. The identifier class must override <literal>equals()</literal> and <literal>hashCode()</literal> and implement. <literal>Serializable</literal>. The disadvantage of this approach is quite obvious—code duplication."
+msgstr "El elemento <literal><property></literal> declara una propiedad persistente estilo JavaBean de la clase."
+
+#: index.docbook:982
+msgid "The following attributes are used to specify a mapped composite identifier:"
+msgstr ""
+ "<![CDATA[<property\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " type=\"typename\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ "/>]]>"
+
+#: index.docbook:988
+msgid "<literal>mapped</literal> (optional, defaults to <literal>false</literal>): indicates that a mapped composite identifier is used, and that the contained property mappings refer to both the entity class and the composite identifier class."
+msgstr "<literal>name</literal>: el nombre de la propiedad, con la letra inicial en minúsculas."
+
+#: index.docbook:996
+msgid "<literal>class</literal> (optional, but required for a mapped composite identifier): The class used as a composite identifier."
+msgstr "<literal>column</literal> (opcional - por defecto al nombre de la propiedad): el nombre de la columna de tabla de base de datos mapeada. Esto puede también ser especificado con elemento(s) <literal><column></literal> anidado(s)."
+
+#: index.docbook:1003
+msgid "We will describe a third, even more convenient approach where the composite identifier is implemented as a component class in <xref linkend=\"components-compositeid\"/>. The attributes described below apply only to this alternative approach:"
+msgstr "<literal>type</literal> (opcional): un nombre que indica el nobre Hibernate."
+
+#: index.docbook:1011
+msgid "<literal>name</literal> (optional, required for this approach): A property of component type that holds the composite identifier (see chapter 9)."
+msgstr "<literal>update, insert</literal> (opcional - por defecto a <literal>true</literal>) : especifica que las columnas mapeadas deben ser incluídas en las sentencias SQL <literal>UPDATE</literal> y/o <literal>INSERT</literal> . Especificando ambas a <literal>false</literal> permite una propiedad \"derivada\" cuyo valor es inicializado desde alguna otra propiedad que mapee a la misma columna (o columnas) o por un disparador u otra aplicación."
+
+#: index.docbook:1023
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The component class used as a composite identifier (see next section)."
+msgstr "<literal>access</literal> (opcional - por defecto a <literal>property</literal>): La estrategia que Hibernate debe usar para acceder al valor de la propiedad."
+
+#: index.docbook:1030
+msgid "This third approach, an <emphasis>identifier component</emphasis> is the one we recommend for almost all applications."
+msgstr "<literal>lazy</literal> (opcional - por defecto a <literal>false</literal>): Especifica que esta propiedad debe ser traída perezosamente cuando la variable de instancia sea accedida por primera vez (requiere instrumentación en tiempo de compilación)."
+
+#: index.docbook:1038
+msgid "discriminator"
+msgstr "<literal>unique</literal> (opcional): Habilita la generació DDL de una restricción de unicidad para las columnas. Además, permite que ésta sea un blanco objetivo de una <literal>property-ref</literal>."
+
+#: index.docbook:1040
+msgid "The <literal><discriminator></literal> element is required for polymorphic persistence using the table-per-class-hierarchy mapping strategy and declares a discriminator column of the table. The discriminator column contains marker values that tell the persistence layer what subclass to instantiate for a particular row. A restricted set of types may be used: <literal>string</literal>, <literal>character</literal>, <literal>integer</literal>, <literal>byte</literal>, <literal>short</literal>, <literal>boolean</literal>, <literal>yes_no</literal>, <literal>true_false</literal>."
+msgstr "<literal>not-null</literal> (opcional): Habilita la generació DDL de una restricción de nulabilidad para las columnas."
+
+#: index.docbook:1058
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " column=\"discriminator_column\"\n"
+ " type=\"discriminator_type\"\n"
+ " force=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary sql expression\"\n"
+ "/>]]>"
+msgstr "<literal>optimistic-lock</literal> (opcional - por defecto a <literal>true</literal>): Especifica que las actualizaciones a esta propiedad requieran o no de la obtención de un bloqueo optimista. En otras palabras, determina si debe ocurrir un incremento de versión cuando la propiedad este sucia (desactualizada)."
+
+#: index.docbook:1061
+msgid "<literal>column</literal> (optional - defaults to <literal>class</literal>) the name of the discriminator column."
+msgstr "<emphasis>typename</emphasis> puede ser:"
+
+#: index.docbook:1067
+msgid "<literal>type</literal> (optional - defaults to <literal>string</literal>) a name that indicates the Hibernate type"
+msgstr "El nombre de un tipo básico Hibernate (por ejemplo, <literal>integer, string, character, date, timestamp, float, binary, serializable, object, blob</literal>)."
+
+#: index.docbook:1073
+msgid "<literal>force</literal> (optional - defaults to <literal>false</literal>) \"force\" Hibernate to specify allowed discriminator values even when retrieving all instances of the root class."
+msgstr "El nombre de una clase Java de tipo básico (por ejemplo, <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal>)."
+
+#: index.docbook:1080
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>) set this to <literal>false</literal> if your discriminator column is also part of a mapped composite identifier. (Tells Hibernate to not include the column in SQL <literal>INSERT</literal>s.)"
+msgstr "El nombre de una clase Java serializable."
+
+#: index.docbook:1088
+msgid "<literal>formula</literal> (optional) an arbitrary SQL expression that is executed when a type has to be evaluated. Allows content-based discrimination."
+msgstr "El nombre de un tipo personalizado (por ejemplo, <literal>com.illflow.type.MyCustomType</literal>)."
+
+#: index.docbook:1096
+msgid "Actual values of the discriminator column are specified by the <literal>discriminator-value</literal> attribute of the <literal><class></literal> and <literal><subclass></literal> elements."
+msgstr "Si no especificas un tipo, Hibernate usará reflección sobre la propiedad mencionada para deducir el tipo Hibernate correcto. Hibernate intentará interpretar el nombre de la clase de retorno del getter de la propiedad usando las reglas 2, 3 y 4 en ese orden. Sin embargo, esto no siempre suficiente. En ciertos casos, necesitarás aún el atributo <literal>type</literal>. (Por ejemplo, para distinguir entre <literal>Hibernate.DATE</literal> y <literal>Hibernate.TIMESTAMP</literal>, o especificar un tipo personalizado.)"
+
+#: index.docbook:1102
+msgid "The <literal>force</literal> attribute is (only) useful if the table contains rows with \"extra\" discriminator values that are not mapped to a persistent class. This will not usually be the case."
+msgstr "El atributo <literal>access</literal> te deja controlar cómo Hibernate accederá a la propiedad en tiempo de ejecución. Por defecto, Hibernate llamará al par de getter/setter de la propiedad. Si especificas <literal>access=\"field\"</literal>, Hibernate se saltará el par get/set y accederá al campo directamente usando reflección. Puedes especificar tu propia estrategia de acceso a la propiedad mencionando una clase que implemente la interface <literal>org.hibernate.property.PropertyAccessor</literal>."
+
+#: index.docbook:1108
+msgid "Using the <literal>formula</literal> attribute you can declare an arbitrary SQL expression that will be used to evaluate the type of a row:"
+msgstr "Una aspecto especialmente poderoso son las propiedades derivadas. Estas propiedades son por definición de sólo lectura, el valor de la propiedad es computado en tiempo de carga. Tu declaras la computación como una expresión SQL, y ésta se traduce a cláusula de subconsulta <literal>SELECT</literal> en la consulta SQL que cargue una instancia:"
+
+#: index.docbook:1113
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"\n"
+ " type=\"integer\"/>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "<property name=\"totalPrice\"\n"
+ " formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p\n"
+ " WHERE li.productId = p.productId\n"
+ " AND li.customerId = customerId\n"
+ " AND li.orderNumber = orderNumber )\"/>]]>"
+
+#: index.docbook:1118
+msgid "version (optional)"
+msgstr "Observa que puedes referenciar la propia tabla de las entidades sin declarar un alias o una columna particular (<literal>customerId</literal> en el ejemplo dado). Observa además que puedes usar el elemento anidado de mapeo <literal><formula></literal> si no te gusta usar el atributo."
+
+#: index.docbook:1120
+msgid "The <literal><version></literal> element is optional and indicates that the table contains versioned data. This is particularly useful if you plan to use <emphasis>long transactions</emphasis> (see below)."
+msgstr "many-to-one"
+
+#: index.docbook:1136
+msgid ""
+ "<![CDATA[<version\n"
+ " column=\"version_column\"\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|negative|undefined\"\n"
+ " generated=\"never|always\"\n"
+ " insert=\"true|false\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr "Una asociación ordinaria a otra clase persistente se declara usando el elemento <literal>many-to-one</literal>. El modelo relacional es una asociación muchos-a-uno: una clave foránea en una tabla está referenciando la columna (o columnas) de la clave primaria de la tabla objetivo."
+
+#: index.docbook:1139
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the column holding the version number."
+msgstr ""
+ "<![CDATA[<many-to-one\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " fetch=\"join|select\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " lazy=\"true|proxy|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " formula=\"cualquier expresión SQL\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+
+#: index.docbook:1145
+msgid "<literal>name</literal>: The name of a property of the persistent class."
+msgstr "<literal>name</literal>: El nombre de la propiedad."
+
+#: index.docbook:1150
+msgid "<literal>type</literal> (optional - defaults to <literal>integer</literal>): The type of the version number."
+msgstr "<literal>column</literal> (opcional): El nombre de la columna clave foránea. También puede ser especificado por uno o varios elementos anidados <literal><column></literal>."
+
+#: index.docbook:1162
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>undefined</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr "<literal>cascade</literal> (opcional): Especifica qué operaciones deben ir en cascada desde el objeto padre al objeto asociado"
+
+#: index.docbook:1171
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this version property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "<literal>fetch</literal> (opcional - por defecto a 1<literal>select</literal>): Escoge entre recuperación outer-join o por selección secuencial."
+
+#: index.docbook:1178
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>): Specifies whether the version column should be included in SQL insert statements. May be set to <literal>false</literal> if and only if the database column is defined with a default value of <literal>0</literal>."
+msgstr "<literal>update, insert</literal> (opcional - por defecto a <literal>true</literal>) especifica que las columnas mapeadas deben ser incluídas en las sentencias SQL <literal>UPDATE</literal> y/o <literal>INSERT</literal>. Establecer ambas a <literal>false</literal> permite una asociación puramente \"derivada\" cuyo valor es inicializado desde alguna otra propiedad que mapea a las misma columna (o columnas), o por un disparador, o por otra aplicación."
+
+#: index.docbook:1188
+msgid "Version numbers may be of Hibernate type <literal>long</literal>, <literal>integer</literal>, <literal>short</literal>, <literal>timestamp</literal> or <literal>calendar</literal>."
+msgstr "<literal>property-ref</literal>: (opcional) El nombre de la propiedad de la clase asociada que está unida a la clave foránea. Si no se especifica, se usa la clave primaria de la clase asociada."
+
+#: index.docbook:1193
+msgid "A version or timestamp property should never be null for a detached instance, so Hibernate will detect any instance with a null version or timestamp as transient, no matter what other <literal>unsaved-value</literal> strategies are specified. <emphasis>Declaring a nullable version or timestamp property is an easy way to avoid any problems with transitive reattachment in Hibernate, especially useful for people using assigned identifiers or composite keys!</emphasis>"
+msgstr "<literal>access</literal> (opcional - por defecto a <literal>property</literal>): La estrategia que Hibernate debe usar para acceder al valor de la propiedad."
+
+#: index.docbook:1204
+msgid "timestamp (optional)"
+msgstr "<literal>unique</literal> (opcional): Habilita la generación DDL de una restricción de unicidad para la columna de clave foránea. Además, permite que ésta sea el objetivo de una <literal>property-ref</literal>. Esto hace efectivamente la multiplicidad de la asociación uno a uno."
+
+#: index.docbook:1206
+msgid "The optional <literal><timestamp></literal> element indicates that the table contains timestamped data. This is intended as an alternative to versioning. Timestamps are by nature a less safe implementation of optimistic locking. However, sometimes the application might use the timestamps in other ways."
+msgstr "<literal>not-null</literal> (opcional): Habilita la generación DDL de una restricción de nulabilidad para las columnas de clave foránea."
+
+#: index.docbook:1222
+msgid ""
+ "<![CDATA[<timestamp\n"
+ " column=\"timestamp_column\"\n"
+ " name=\"propertyName\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|undefined\"\n"
+ " source=\"vm|db\"\n"
+ " generated=\"never|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr "<literal>optimistic-lock</literal> (opcional - por defecto a <literal>true</literal>): Especifica que las actualizaciones a esta propiedad requieran o no la obtención del bloqueo optimista. En otras palabras, determina si debe darse un incremento de versión cuando esta propiedad esté desactualizada."
+
+#: index.docbook:1225
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of a column holding the timestamp."
+msgstr "<literal>lazy</literal> (opcional - por defecto a <literal>proxy</literal>): Por defecto, las asociaciones de punto único van con proxies. <literal>lazy=\"true\"</literal> especifica que esta propiedad debe ser traída perezosamente cuando la variable de instancia sea accedida por primera vez (requiere instrumentación del bytecode en tiempo de compilación). <literal>lazy=\"false\"</literal> especifica que la asociación siempre será recuperada tempranamente."
+
+#: index.docbook:1231
+msgid "<literal>name</literal>: The name of a JavaBeans style property of Java type <literal>Date</literal> or <literal>Timestamp</literal> of the persistent class."
+msgstr "<literal>not-found</literal> (opcional - por defecto a <literal>exception</literal>): Especifica cómo deben manejarse las claves foráneas que referencien filas inexistentes: <literal>ignore</literal> tratará una fila perdida como una asociación nula."
+
+#: index.docbook:1244
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>null</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr "<literal>formula</literal> (opcional): una expresión SQL que define el valor para una clave foránea <emphasis>computada</emphasis>."
+
+#: index.docbook:1253
+msgid "<literal>source</literal> (optional - defaults to <literal>vm</literal>): From where should Hibernate retrieve the timestamp value? From the database, or from the current JVM? Database-based timestamps incur an overhead because Hibernate must hit the database in order to determine the \"next value\", but will be safer for use in clustered environments. Note also, that not all <literal>Dialect</literal>s are known to support retrieving of the database's current timestamp, while others might be unsafe for usage in locking due to lack of precision (Oracle 8 for example)."
+msgstr "Establecer el valor del atributo <literal>cascade</literal> a cualquier valor significativo distinto de <literal>none</literal> propagará ciertas operaciones al objeto asociado. Los valores significativos son los nombres de las operaciones básicas de Hibernate, <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal>, así como los valores especiales <literal>delete-orphan</literal> y <literal>all</literal> y combinaciones de operaciones separadas por coma, por ejemplo, <literal>cascade=\"persist,merge,evict\"</literal> o <literal>cascade=\"all,delete-orphan\"</literal>. Para una explicación completa, ver <xref linkend=\"objectstate-transitive\"/>."
+
+#: index.docbook:1265
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this timestamp property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "Una declaración típica <literal>muchos-a-uno</literal> se parece a esto:"
+
+#: index.docbook:1274
+msgid "Note that <literal><timestamp></literal> is equivalent to <literal><version type=\"timestamp\"></literal>. And <literal><timestamp source=\"db\"></literal> is equivalent to <literal><version type=\"dbtimestamp\"></literal>"
+msgstr "<![CDATA[<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>]]>"
+
+#: index.docbook:1284
+msgid "property"
+msgstr "El atributo <literal>property-ref</literal> debe ser usado solamente para el mapeo de datos heredados donde una clave foránea referencia una clave única de la tabla asociada, distinta de la clave primaria. Este es un modelo relacional feo. Por ejemplo, supón que la clase <literal>Product</literal> tuviera un número único serial que no es la clave primaria. (El atributo <literal>unique</literal> controla la generación de DDL con la herramienta SchemaExport.)"
+
+#: index.docbook:1286
+msgid "The <literal><property></literal> element declares a persistent, JavaBean style property of the class."
+msgstr "<![CDATA[<property name=\"serialNumber\" unique=\"true\" type=\"string\" column=\"SERIAL_NUMBER\"/>]]>"
+
+#: index.docbook:1308
+msgid ""
+ "<![CDATA[<property\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " type=\"typename\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " generated=\"never|insert|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ "/>]]>"
+msgstr "Entonces el mapeo para <literal>OrderItem</literal> debería usar:"
+
+#: index.docbook:1311
+msgid "<literal>name</literal>: the name of the property, with an initial lowercase letter."
+msgstr "<![CDATA[<many-to-one name=\"product\" property-ref=\"serialNumber\" column=\"PRODUCT_SERIAL_NUMBER\"/>]]>"
+
+#: index.docbook:1317
+msgid "<literal>column</literal> (optional - defaults to the property name): the name of the mapped database table column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr "Sin embargo, esto no esta ciertamente alentado."
+
+#: index.docbook:1324
+msgid "<literal>type</literal> (optional): a name that indicates the Hibernate type."
+msgstr "Si la clave única referenciada abarca múltiples propiedades de la entidad asociada, debes mapear las propiedades dentro de un elemento <literal><properties></literal>."
+
+#: index.docbook:1329
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) : specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" property whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr "one-to-one"
+
+#: index.docbook:1338
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> property. Computed properties do not have a column mapping of their own."
+msgstr "Una asociación uno-a-uno a otra clase persistente se declara usando un elemento <literal>one-to-one</literal>."
+
+#: index.docbook:1351
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr "<literal>name</literal>: El nombre de la propiedad."
+
+#: index.docbook:1358
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the columns. Also, allow this to be the target of a <literal>property-ref</literal>."
+msgstr "<literal>class</literal> (opcional - por defecto al tipo de la propiedad determinado por reflección): El nombre de la clase asociada."
+
+#: index.docbook:1365
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the columns."
+msgstr "<literal>cascade</literal> (opcional) especifica qué operaciones deben ir en cascada desde el objeto padre al objeto asociado."
+
+#: index.docbook:1371
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr "<literal>constrained</literal> (opcional) especifica que una restricción de clave foránea de la tabla mapeada referencia a la tabla de la clase asociada. Esta opción afecta el orden en que van en cascada <literal>save()</literal> y <literal>delete()</literal>, y determina cuándo la asociación pueden ser virtualizados por proxies (es también usado por la herramienta de exportación de esquemas)."
+
+#: index.docbook:1379
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "<literal>fetch</literal> (opcional - por defecto <literal>select</literal>): Elige entre recuperación outer-join o recuperación por consulta secuencial."
+
+#: index.docbook:1388
+msgid "<emphasis>typename</emphasis> could be:"
+msgstr "<literal>property-ref</literal>: (opcional) El nombre de una propiedad de la clase asociada que esté unida a la clave primaria de esta clase. Si no se especifica, se usa la clave primaria de la clase asociada."
+
+#: index.docbook:1394
+msgid "The name of a Hibernate basic type (eg. <literal>integer, string, character, date, timestamp, float, binary, serializable, object, blob</literal>)."
+msgstr "<literal>access</literal> (opcional - por defecto a <literal>property</literal>): La estrategia que Hibernate debe usar para acceder al valor de la propiedad."
+
+#: index.docbook:1400
+msgid "The name of a Java class with a default basic type (eg. <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal>)."
+msgstr "<literal>formula</literal> (opcional): Casi todas las asociaciones uno-a-uno mapean a la clave primaria de la entidad propietaria. En el raro caso en que este no sea el caso, puedes especificar alguna otra columna, o columnas, o expresión para unir usando una fórmula SQL. (Para un ejemplo ver <literal>org.hibernate.test.onetooneformula</literal>)."
+
+#: index.docbook:1406
+msgid "The name of a serializable Java class."
+msgstr "<literal>lazy</literal> (opcional - por defecto a <literal>proxy</literal>): Por defecto, las asociaciones de punto único van con proxies. <literal>lazy=\"true\"</literal> especifica que esta propiedad debe ser traída perezosamente cuando la variable de instancia sea accedida por primera vez (requiere instrumentación del bytecode en tiempo de compilación). <literal>lazy=\"false\"</literal> especifica que la asociación siempre será recuperada tempranamente. <emphasis>Observa que si <literal>constrained=\"false\"</literal>, la aplicación de proxies es imposible e Hibernate traerá temprano la asociación!</emphasis>"
+
+#: index.docbook:1411
+msgid "The class name of a custom type (eg. <literal>com.illflow.type.MyCustomType</literal>)."
+msgstr "Hay dos variedades de asociaciones uno-a-uno:"
+
+#: index.docbook:1417
+msgid "If you do not specify a type, Hibernate will use reflection upon the named property to take a guess at the correct Hibernate type. Hibernate will try to interpret the name of the return class of the property getter using rules 2, 3, 4 in that order. However, this is not always enough. In certain cases you will still need the <literal>type</literal> attribute. (For example, to distinguish between <literal>Hibernate.DATE</literal> and <literal>Hibernate.TIMESTAMP</literal>, or to specify a custom type.)"
+msgstr "asociaciones de clave primaria"
+
+#: index.docbook:1427
+msgid "The <literal>access</literal> attribute lets you control how Hibernate will access the property at runtime. By default, Hibernate will call the property get/set pair. If you specify <literal>access=\"field\"</literal>, Hibernate will bypass the get/set pair and access the field directly, using reflection. You may specify your own strategy for property access by naming a class that implements the interface <literal>org.hibernate.property.PropertyAccessor</literal>."
+msgstr "asociaciones de clave foráneas única"
+
+#: index.docbook:1436
+msgid "An especially powerful feature are derived properties. These properties are by definition read-only, the property value is computed at load time. You declare the computation as a SQL expression, this translates to a <literal>SELECT</literal> clause subquery in the SQL query that loads an instance:"
+msgstr "Las asociaciones de clave primaria no necesitan una columna de tabla extra; si dos filas están relacionadas por la asociación entonces las dos filas de tablas comparten el mismo valor de clave primaria. Por lo tanto, si quieres que dos objetos estén relacionados por una asociación de clave primaria, debes asegurarte que se les asigne el mismo valor de identificador!"
+
+#: index.docbook:1443
+msgid ""
+ "<![CDATA[\n"
+ "<property name=\"totalPrice\"\n"
+ " formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p\n"
+ " WHERE li.productId = p.productId\n"
+ " AND li.customerId = customerId\n"
+ " AND li.orderNumber = orderNumber )\"/>]]>"
+msgstr "Para una asociación de clave primaria, añade los siguientes mapeos a <literal>Employee</literal> y <literal>Person</literal>, respectivamente."
+
+#: index.docbook:1445
+msgid "Note that you can reference the entities own table by not declaring an alias on a particular column (<literal>customerId</literal> in the given example). Also note that you can use the nested <literal><formula></literal> mapping element if you don't like to use the attribute."
+msgstr "<![CDATA[<one-to-one name=\"person\" class=\"Person\"/>]]>"
+
+#: index.docbook:1455
+msgid "many-to-one"
+msgstr "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>]]>"
+
+#: index.docbook:1457
+msgid "An ordinary association to another persistent class is declared using a <literal>many-to-one</literal> element. The relational model is a many-to-one association: a foreign key in one table is referencing the primary key column(s) of the target table."
+msgstr "Ahora debemos asegurarnos que las claves primarias de las filas relacionadas en las tablas PERSON y EMPLOYEE sean iguales. Usamos una estrategia especial de generación de identificador de Hibernate llamada <literal>foreign</literal>:"
+
+#: index.docbook:1485
+msgid ""
+ "<![CDATA[<many-to-one\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " fetch=\"join|select\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">employee</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " ...\n"
+ " <one-to-one name=\"employee\"\n"
+ " class=\"Employee\"\n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:1488, index.docbook:1669, index.docbook:1855
+msgid "<literal>name</literal>: The name of the property."
+msgstr "A una instancia recién salvada de <literal>Person</literal> se le asigna entonces el mismo valor de clave primaria con que la instancia <literal>Employee</literal> referida por la propiedad <literal>employee</literal> de esta <literal>Person</literal>."
+
+#: index.docbook:1493, index.docbook:2284
+msgid "<literal>column</literal> (optional): The name of the foreign key column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr "Alternativamente, una clave foránea con una restricción de unicidad, desde <literal>Employee</literal> a <literal>Person</literal>, puede ser expresada como:"
+
+#: index.docbook:1500, index.docbook:1674
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the associated class."
+msgstr "<![CDATA[<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" unique=\"true\"/>]]>"
+
+#: index.docbook:1506
+msgid "<literal>cascade</literal> (optional): Specifies which operations should be cascaded from the parent object to the associated object."
+msgstr "Y esta asociación puede hacerse bidireccional agregando lo siguiente al mapeo de <literal>Person</literal> :"
+
+#: index.docbook:1512, index.docbook:1695
+msgid "<literal>fetch</literal> (optional - defaults to <literal>select</literal>): Chooses between outer-join fetching or sequential select fetching."
+msgstr "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" property-ref=\"person\"/>]]>"
+
+#: index.docbook:1518
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" association whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr "natural-id"
+
+#: index.docbook:1527
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class is used."
+msgstr ""
+ "<![CDATA[<natural-id mutable=\"true|false\"/>\n"
+ " <property ... />\n"
+ " <many-to-one ... />\n"
+ " ......\n"
+ "</natural-id>]]>"
+
+#: index.docbook:1540
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. Also, allow this to be the target of a <literal>property-ref</literal>. This makes the association multiplicity effectively one to one."
+msgstr "Recomendamos fuertemente que implementes <literal>equals()</literal> y <literal>hashCode()</literal> para comparar las propiedades de clave natural de la entidad."
+
+#: index.docbook:1548
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the foreign key columns."
+msgstr "Este mapeo no está concebido para usar con entidades con claves primarias naturales."
+
+#: index.docbook:1554
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, dertermines if a version increment should occur when this property is dirty."
+msgstr "<literal>mutable</literal> (opcional, por defecto a <literal>false</literal>): Por defecto, se asume que las propiedades de identificadores naturales son inmutables (constantes)."
+
+#: index.docbook:1562
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched."
+msgstr "component, dynamic-component"
+
+#: index.docbook:1572
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr "El elemento <literal><component></literal> mapea propiedades de un objeto hijo a columnas de la tabla de la clase padre. Los componentes pueden a su vez declarar sus propias propiedades, componentes o colecciones. Ver debajo \"Componentes\"."
+
+#: index.docbook:1579, index.docbook:1733
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class."
+msgstr ""
+ "<![CDATA[<component \n"
+ " name=\"propertyName\" \n"
+ " class=\"className\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ ">\n"
+ " \n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</component>]]>"
+
+#: index.docbook:1585
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> foreign key."
+msgstr "<literal>name</literal>: El nombre de la propiedad."
+
+#: index.docbook:1592
+msgid "Setting a value of the <literal>cascade</literal> attribute to any meaningful value other than <literal>none</literal> will propagate certain operations to the associated object. The meaningful values are the names of Hibernate's basic operations, <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal>, as well as the special values <literal>delete-orphan</literal> and <literal>all</literal> and comma-separated combinations of operation names, for example, <literal>cascade=\"persist,merge,evict\"</literal> or <literal>cascade=\"all,delete-orphan\"</literal>. See <xref linkend=\"objectstate-transitive\"/> for a full explanation. Note that single valued associations (many-to-one and one-to-one associations) do not support orphan delete."
+msgstr "<literal>class</literal> (opcional - por defecto al tipo de la propiedad determinado por reflección): El nombre de la clase del componente (hijo)."
+
+#: index.docbook:1605
+msgid "A typical <literal>many-to-one</literal> declaration looks as simple as this:"
+msgstr "<literal>insert</literal>: Aparecen las columnas mapeadas en <literal>INSERT</literal>s SQL?"
+
+#: index.docbook:1609
+msgid "<![CDATA[<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>]]>"
+msgstr "<literal>update</literal>: Aparecen las columnas mapeadas en <literal>UPDATE</literal>s SQL?"
+
+#: index.docbook:1611
+msgid "The <literal>property-ref</literal> attribute should only be used for mapping legacy data where a foreign key refers to a unique key of the associated table other than the primary key. This is an ugly relational model. For example, suppose the <literal>Product</literal> class had a unique serial number, that is not the primary key. (The <literal>unique</literal> attribute controls Hibernate's DDL generation with the SchemaExport tool.)"
+msgstr "<literal>access</literal> (opcional - por defecto a <literal>property</literal>): La estrategia que Hibernate debe usar para acceder al valor de la propiedad."
+
+#: index.docbook:1620
+msgid "<![CDATA[<property name=\"serialNumber\" unique=\"true\" type=\"string\" column=\"SERIAL_NUMBER\"/>]]>"
+msgstr "<literal>lazy</literal> (opcional - por defecto a <literal>false</literal>): Especifica que este componente debe ser recuperado perezosamente cuando la variable de instancia sea accedida por primera vez (requiere instrumentación de bytecode en tiempo de compilación)."
+
+#: index.docbook:1622
+msgid "Then the mapping for <literal>OrderItem</literal> might use:"
+msgstr "<literal>optimistic-lock</literal> (opcional - por defecto a <literal>true</literal>): Especifica si las actualizaciones de este componente requieren o no la adquisición de un bloqueo optimista. En otras palabras, determina si debe ocurrir un incremento de versión cuando esta propiedad está desactualizada."
+
+#: index.docbook:1626
+msgid "<![CDATA[<many-to-one name=\"product\" property-ref=\"serialNumber\" column=\"PRODUCT_SERIAL_NUMBER\"/>]]>"
+msgstr "<literal>unique</literal> (opcional - por defecto a <literal>false</literal>): Especifica que existe una restricción de unicidad sobre todas las columnas mapeadas del componente."
+
+#: index.docbook:1628
+msgid "This is certainly not encouraged, however."
+msgstr "Las etiquetas hijas <literal><property></literal> mapean propiedades de la clase hija columnas de la tabla."
+
+#: index.docbook:1632
+msgid "If the referenced unique key comprises multiple properties of the associated entity, you should map the referenced properties inside a named <literal><properties></literal> element."
+msgstr "El elemento <literal><component></literal> permite un subelemento <literal><parent></literal> que mapea una propiedad de la clase del componente como una referencia de regreso a la entidad contenedora."
+
+#: index.docbook:1637
+msgid "If the referenced unique key is the property of a component, you may specify a property path:"
+msgstr "El elemento <literal><dynamic-component></literal> permite que un <literal>Map</literal> sea mapeado como un componente, donde los nombres de las propiedades se corresponden a las claves del mapa, ver <xref linkend=\"components-dynamic\"/>."
+
+#: index.docbook:1641
+msgid "<![CDATA[<many-to-one name=\"owner\" property-ref=\"identity.ssn\" column=\"OWNER_SSN\"/>]]>"
+msgstr "properties"
+
+#: index.docbook:1646
+msgid "one-to-one"
+msgstr "El elemento <literal><properties></literal> permite la definición de un grupo de propiedades lógico con nombre de una clase. El uso más importante de la contrucción es que permite que una combinación de propiedades sea objetivo de una <literal>property-ref</literal>. Es también una forma conveniente de definir una restricción de unicidad multicolumna."
+
+#: index.docbook:1648
+msgid "A one-to-one association to another persistent class is declared using a <literal>one-to-one</literal> element."
+msgstr ""
+ "<![CDATA[<properties \n"
+ " name=\"logicalName\" \n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ ">\n"
+ " \n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</properties>]]>"
+
+#: index.docbook:1666
+msgid ""
+ "<![CDATA[<one-to-one\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " constrained=\"true|false\"\n"
+ " fetch=\"join|select\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " formula=\"any SQL expression\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr "<literal>name</literal>: El nombre lógico del agrupamiento - <emphasis>no</emphasis> un nombre de propiedad real."
+
+#: index.docbook:1680
+msgid "<literal>cascade</literal> (optional) specifies which operations should be cascaded from the parent object to the associated object."
+msgstr "<literal>optimistic-lock</literal> (opcional - por defecto a <literal>true</literal>): Especifica si las actualizaciones de estas propiedades requieren o no de la adquisición de un bloqueo optimista. En otras palabras, determina si debe ocurrir un incremento de versión cuando estas propiedades están desactualizadas."
+
+#: index.docbook:1686
+msgid "<literal>constrained</literal> (optional) specifies that a foreign key constraint on the primary key of the mapped table references the table of the associated class. This option affects the order in which <literal>save()</literal> and <literal>delete()</literal> are cascaded, and determines whether the association may be proxied (it is also used by the schema export tool)."
+msgstr "<literal>unique</literal> (opcional - por defecto a <literal>false</literal>): Especifica que existe una restricción de unicidad sobre todas las columnas mapeadas del componente."
+
+#: index.docbook:1701
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to the primary key of this class. If not specified, the primary key of the associated class is used."
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"personNumber\"/>\n"
+ " ...\n"
+ " <properties name=\"name\" \n"
+ " unique=\"true\" update=\"false\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </properties>\n"
+ "</class>]]>"
+
+#: index.docbook:1714
+msgid "<literal>formula</literal> (optional): Almost all one to one associations map to the primary key of the owning entity. In the rare case that this is not the case, you may specify a some other column, columns or expression to join on using an SQL formula. (See <literal>org.hibernate.test.onetooneformula</literal> for an example.)"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"person\" \n"
+ " class=\"Person\" property-ref=\"name\">\n"
+ " <column name=\"firstName\"/>\n"
+ " <column name=\"initial\"/>\n"
+ " <column name=\"lastName\"/>\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:1722
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched. <emphasis>Note that if <literal>constrained=\"false\"</literal>, proxying is impossible and Hibernate will eager fetch the association!</emphasis>"
+msgstr "No recomendamos el uso de este tipo de cosas fuera del contexto del mapeo de datos heredados."
+
+#: index.docbook:1740
+msgid "There are two varieties of one-to-one association:"
+msgstr "Finalmente, la persistencia polimórfica requiere la declaración de la clase persistente raíz. Para la estrategia de mapeo tabla-por-jerarquía-de-clases, se usa la declaración de <literal><subclass></literal>."
+
+#: index.docbook:1744
+msgid "primary key associations"
+msgstr ""
+ "<![CDATA[<subclass\n"
+ " name=\"ClassName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</subclass>]]>"
+
+#: index.docbook:1747
+msgid "unique foreign key associations"
+msgstr "<literal>name</literal>: El nombre de clase cualificado completamente de la subclase."
+
+#: index.docbook:1752
+msgid "Primary key associations don't need an extra table column; if two rows are related by the association then the two table rows share the same primary key value. So if you want two objects to be related by a primary key association, you must make sure that they are assigned the same identifier value!"
+msgstr "<literal>discriminator-value</literal> (opcional - por defecto al nombre de la clase): Un valor que distingue a subclases individuales."
+
+#: index.docbook:1759
+msgid "For a primary key association, add the following mappings to <literal>Employee</literal> and <literal>Person</literal>, respectively."
+msgstr "<literal>proxy</literal> (opcional): Especifica una clase o interface a usar para proxies de inicialización perezosa."
+
+#: index.docbook:1764
+msgid "<![CDATA[<one-to-one name=\"person\" class=\"Person\"/>]]>"
+msgstr "<literal>lazy</literal> (opcional, por defecto a <literal>true</literal>): Establecer <literal>lazy=\"false\"</literal> deshabilita el uso de recuperación perezosa."
+
+#: index.docbook:1765
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>]]>"
+msgstr "Cada subclase debe declarar sus propias propiedades persistentes y subclases. Se asume que las propiedades <literal><version></literal> y <literal><id></literal> son heredadas de la clase raíz. Cada subclase en una jerarquía debe definir un <literal>discriminator-value</literal> único. Si no se especifica ninguno, se usa el nombre completamente cualificado de clase Java."
+
+#: index.docbook:1767
+msgid "Now we must ensure that the primary keys of related rows in the PERSON and EMPLOYEE tables are equal. We use a special Hibernate identifier generation strategy called <literal>foreign</literal>:"
+msgstr "Es posible definir mapeos <literal>subclass</literal>, <literal>union-subclass</literal>, y <literal>joined-subclass</literal> en documentos de mapeo separados, directamente debajo de <literal>hibernate-mapping</literal>. Esto te permite extender una jerarquía de clases con sólo agregar un nuevo fichero de mapeo. Debes especificar un atributo <literal>extends</literal> en el mapeo de la subclase, mencionando una superclase previamente mapeada. Nota: Previamente esta funcionalidad hacía importante el orden de los documentos de mapeo. Desde Hibernate3, el orden de los ficheros de mapeo no importa cuando se usa la palabra reservada extends. El orden dentro de un mismo fichero de mapeo todavía necesita ser definido como superclases antes de subclases."
+
+#: index.docbook:1773
+msgid ""
+ "<![CDATA[<class name=\"person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">employee</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " ...\n"
+ " <one-to-one name=\"employee\"\n"
+ " class=\"Employee\"\n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "<hibernate-mapping>\n"
+ " <subclass name=\"DomesticCat\" extends=\"Cat\" discriminator-value=\"D\">\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </subclass>\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:1775
+msgid "A newly saved instance of <literal>Person</literal> is then assigned the same primary key value as the <literal>Employee</literal> instance refered with the <literal>employee</literal> property of that <literal>Person</literal>."
+msgstr "Para información acerca de mapeos de herencia, ver <xref linkend=\"inheritance\"/>."
+
+#: index.docbook:1781
+msgid "Alternatively, a foreign key with a unique constraint, from <literal>Employee</literal> to <literal>Person</literal>, may be expressed as:"
+msgstr "joined-subclass"
+
+#: index.docbook:1786
+msgid "<![CDATA[<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" unique=\"true\"/>]]>"
+msgstr "Alternativamente, cada subclase puede ser mapeada a su propia tabla (estrategia de mapeo tabla-por-subclase). El estado heredado se recupera uniendo con la tabla de la superclase. Usamos el elemento <literal><joined-subclass></literal>."
+
+#: index.docbook:1788
+msgid "And this association may be made bidirectional by adding the following to the <literal>Person</literal> mapping:"
+msgstr ""
+ "<![CDATA[<joined-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <key .... >\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</joined-subclass>]]>"
+
+#: index.docbook:1793
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" property-ref=\"person\"/>]]>"
+msgstr "<literal>name</literal>: El nombre de clase completamente cualificado de la subclase."
+
+#: index.docbook:1798
+msgid "natural-id"
+msgstr "<literal>table</literal>: El nombre de tabla de la subclase."
+
+#: index.docbook:1800
+msgid ""
+ "<![CDATA[<natural-id mutable=\"true|false\"/>\n"
+ " <property ... />\n"
+ " <many-to-one ... />\n"
+ " ......\n"
+ "</natural-id>]]>"
+msgstr "<literal>proxy</literal> (opcional): Especifica una clase o interface a usar para proxies de inicializacón perezosa."
+
+#: index.docbook:1802
+msgid "Even though we recommend the use of surrogate keys as primary keys, you should still try to identify natural keys for all entities. A natural key is a property or combination of properties that is unique and non-null. If it is also immutable, even better. Map the properties of the natural key inside the <literal><natural-id></literal> element. Hibernate will generate the necessary unique key and nullability constraints, and your mapping will be more self-documenting."
+msgstr "<literal>lazy</literal> (opcional, por defecto a <literal>true</literal>): Establecer <literal>lazy=\"false\"</literal> deshabilita el uso de recuperación perezosa."
+
+#: index.docbook:1811
+msgid "We strongly recommend that you implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the natural key properties of the entity."
+msgstr "No se requiere de una columna discriminadora para esta estrategia de mapeo. Cada subclase debe, sin embargo, declarar una columna de tabla que tenga el identificador del objeto usando el elemento <literal><key></literal>. El mapeo del comienzo del capítulo debería ser reescrito como:"
+
+#: index.docbook:1816
+msgid "This mapping is not intended for use with entities with natural primary keys."
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" table=\"CATS\">\n"
+ " <id name=\"id\" column=\"uid\" type=\"long\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " <property name=\"birthdate\" type=\"date\"/>\n"
+ " <property name=\"color\" not-null=\"true\"/>\n"
+ " <property name=\"sex\" not-null=\"true\"/>\n"
+ " <property name=\"weight\"/>\n"
+ " <many-to-one name=\"mate\"/>\n"
+ " <set name=\"kittens\">\n"
+ " <key column=\"MOTHER\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ " <joined-subclass name=\"DomesticCat\" table=\"DOMESTIC_CATS\">\n"
+ " <key column=\"CAT\"/>\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </joined-subclass>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"eg.Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:1822
+msgid "<literal>mutable</literal> (optional, defaults to <literal>false</literal>): By default, natural identifier properties as assumed to be immutable (constant)."
+msgstr "Para información acerca de mapeos de herencia, ver <xref linkend=\"inheritance\"/>."
+
+#: index.docbook:1832
+msgid "component, dynamic-component"
+msgstr "union-subclass"
+
+#: index.docbook:1834
+msgid "The <literal><component></literal> element maps properties of a child object to columns of the table of a parent class. Components may, in turn, declare their own properties, components or collections. See \"Components\" below."
+msgstr "Una tercera opción es mapear sólo las clases concretas de una jerarquía de clases a tablas, (la estrategia tabla-por-clase-concreta) donde cada tabla define todo el estado persistente de la clase, incluyendo el estado heredado. En Hibernate, no es absolutamente necesario mapear dichas jerarquías de herencia. Puedes simplemente mapear cada clase con una declaración <literal><class></literal> separada. Sin embargo, si deseas usar asociaciones polimórficas (por ejemplo, una asociación a la superclase de tu jerarquía), debes usar el mapeo <literal><union-subclass></literal>."
+
+#: index.docbook:1852
+msgid ""
+ "<![CDATA[<component\n"
+ " name=\"propertyName\"\n"
+ " class=\"className\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</component>]]>"
+msgstr ""
+ "<![CDATA[<union-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " abstract=\"true|false\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</union-subclass>]]>"
+
+#: index.docbook:1860
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the component (child) class."
+msgstr "<literal>table</literal>: El nombre de tabla de la subclase."
+
+#: index.docbook:1866, index.docbook:1955
+msgid "<literal>insert</literal>: Do the mapped columns appear in SQL <literal>INSERT</literal>s?"
+msgstr "<literal>proxy</literal> (optional): Especifica una clase o interface a usar para proxies de inicializacón perezosa."
+
+#: index.docbook:1872, index.docbook:1961
+msgid "<literal>update</literal>: Do the mapped columns appear in SQL <literal>UPDATE</literal>s?"
+msgstr "<literal>lazy</literal> (opcional, por defecto a <literal>true</literal>): Establecer <literal>lazy=\"false\"</literal> deshabilita el uso de recuperación perezosa."
+
+#: index.docbook:1884
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this component should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr "Para información acerca de mapeos de herencia, ver <xref linkend=\"inheritance\"/>."
+
+#: index.docbook:1891
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this component do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr "join"
+
+#: index.docbook:1899, index.docbook:1975
+msgid "<literal>unique</literal> (optional - defaults to <literal>false</literal>): Specifies that a unique constraint exists upon all mapped columns of the component."
+msgstr "Usando el elemento <literal><join></literal>, es posible mapear propiedades de una clase a varias tablas."
+
+#: index.docbook:1908
+msgid "The child <literal><property></literal> tags map properties of the child class to table columns."
+msgstr ""
+ "<![CDATA[<join\n"
+ " table=\"tablename\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " fetch=\"join|select\"\n"
+ " inverse=\"true|false\"\n"
+ " optional=\"true|false\">\n"
+ " \n"
+ " <key ... />\n"
+ " \n"
+ " <property ... />\n"
+ " ...\n"
+ "</join>]]>"
+
+#: index.docbook:1913
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr "<literal>table</literal>: El nombre de la clase unida."
+
+#: index.docbook:1919
+msgid "The <literal><dynamic-component></literal> element allows a <literal>Map</literal> to be mapped as a component, where the property names refer to keys of the map, see <xref linkend=\"components-dynamic\"/>."
+msgstr "<literal>schema</literal> (opcional): Sobrescribe el nombre de esquema especificado por el elemento raíz <literal><hibernate-mapping></literal>."
+
+#: index.docbook:1928
+msgid "properties"
+msgstr "<literal>catalog</literal> (opcional): Sobrescribe el nombre de catálogo especificado por el elemento raíz <literal><hibernate-mapping></literal>."
+
+#: index.docbook:1930
+msgid "The <literal><properties></literal> element allows the definition of a named, logical grouping of properties of a class. The most important use of the construct is that it allows a combination of properties to be the target of a <literal>property-ref</literal>. It is also a convenient way to define a multi-column unique constraint."
+msgstr "<literal>fetch</literal> (opcional - por defecto a <literal>join</literal>): Si se establece a <literal>join</literal>, por defecto, Hibernate usará una unión interior (inner join) para recuperar un <literal><join></literal> definido por una clase o sus superclases y una unión externa (outer join) para un <literal><join></literal> definido por una subclase. Si se establece a <literal>select</literal>, entonces Hibernate usará una select secuencial para un <literal><join></literal> definido en una subclase, que será publicada sólo si una fila resulta representar una instancia de la subclase. Las uniones interiores todavía serán usados para recuperar un <literal><join></literal> definido por la clase y sus superclases."
+
+#: index.docbook:1946
+msgid ""
+ "<![CDATA[<properties\n"
+ " name=\"logicalName\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</properties>]]>"
+msgstr "<literal>inverse</literal> (opcional - por defecto a <literal>false</literal>): De habilitarse, Hibernate no intentará insertar o actualizar las propiedades definidas por esta unión."
+
+#: index.docbook:1949
+msgid "<literal>name</literal>: The logical name of the grouping - <emphasis>not</emphasis> an actual property name."
+msgstr "<literal>optional</literal> (opcional - por defecto a <literal>false</literal>): De habilitarse, Hibernate insertará una fila sólo si las propiedades definidas por esta unión son no nulas y siempre usará una unión externa para recuperar las propiedades."
+
+#: index.docbook:1967
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to these properties do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when these properties are dirty."
+msgstr "Esta funcionalidad es a menudo solamente útil para modelos de datos heredados; recomendamos menos tablas que clases un modelo de dominio más granularizado. Sin embargo, es útil para cambiar entre estrategias de mapeo de herencias en una misma jerarquía, como se explica luego."
+
+#: index.docbook:1984
+msgid "For example, if we have the following <literal><properties></literal> mapping:"
+msgstr "Hasta ahora hemos visto el elemento <literal><key></literal> pocas veces. Aparece en cualquier sitio en que el elemento padre de mapeo defina una unión a una nueva tabla, y define la clave foránea en la tabla unida, que referencia la clave primaria de la tabla original."
+
+#: index.docbook:1988
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"personNumber\"/>\n"
+ " ...\n"
+ " <properties name=\"name\"\n"
+ " unique=\"true\" update=\"false\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </properties>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<key\n"
+ " column=\"columnname\"\n"
+ " on-delete=\"noaction|cascade\"\n"
+ " property-ref=\"propertyName\"\n"
+ " not-null=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ "/>]]>"
+
+#: index.docbook:1990
+msgid "Then we might have some legacy data association which refers to this unique key of the <literal>Person</literal> table, instead of to the primary key:"
+msgstr "<literal>column</literal> (opcional): El nombre de columna de la clave foránea. Puede ser también especificado por elemento(s) anidado(s) <literal><column></literal>."
+
+#: index.docbook:1995
+msgid ""
+ "<![CDATA[<many-to-one name=\"person\"\n"
+ " class=\"Person\" property-ref=\"name\">\n"
+ " <column name=\"firstName\"/>\n"
+ " <column name=\"initial\"/>\n"
+ " <column name=\"lastName\"/>\n"
+ "</many-to-one>]]>"
+msgstr "<literal>on-delete</literal> (opcional, por defecto a <literal>noaction</literal>): Especifica si la restricción de clave foránea tiene el borrado en cascada habilitado a nivel de base de datos."
+
+#: index.docbook:1997
+msgid "We don't recommend the use of this kind of thing outside the context of mapping legacy data."
+msgstr "<literal>property-ref</literal> (opcional): Especifica que la clave foránea referencia columnas que no son del la clave primaria de la tabla original. (Provisto para datos heredados.)"
+
+#: index.docbook:2005
+msgid "subclass"
+msgstr "<literal>not-null</literal> (opcional): Especifica que las columnas de la clave foránea son no nulables (esto está implicado si la clave foránea es también parte de la clave primaria)."
+
+#: index.docbook:2007
+msgid "Finally, polymorphic persistence requires the declaration of each subclass of the root persistent class. For the table-per-class-hierarchy mapping strategy, the <literal><subclass></literal> declaration is used."
+msgstr "<literal>update</literal> (opcional): Especifica que la clave foránea nunca debe ser actualizada (esto está implicado si la clave foránea es también parte de la clave primaria)."
+
+#: index.docbook:2020
+msgid ""
+ "<![CDATA[<subclass\n"
+ " name=\"ClassName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " extends=\"SuperclassName\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</subclass>]]>"
+msgstr "<literal>unique</literal> (opcional): Especifica que la clave foránea debe tener una restricción de unicidad (esto está implicado si la clave foránea es también la clave primaria)."
+
+#: index.docbook:2023, index.docbook:2081, index.docbook:2144
+msgid "<literal>name</literal>: The fully qualified class name of the subclass."
+msgstr "Recomendamos que, para los sistemas en donde el rendimiento sea importante, todas las claves deben ser definidas <literal>on-delete=\"cascade\"</literal>, e Hibernate usará una restricción <literal>ON CASCADE DELETE</literal> a nivel de base de datos, en vez de muchas sentencias <literal>DELETE</literal> individuales. Ten en cuenta que esta funcionalidad se salta la habitual estrategia de bloqueo optimista de Hibernate para datos versionados."
+
+#: index.docbook:2028
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses."
+msgstr "Los atributos <literal>not-null</literal> y <literal>update</literal> son útiles al mapear una asociación uno a muchos unidireccional. Si mapeas una uno a muchos unidireccional a una clave foránea no nulable, <emphasis>debes</emphasis> declarar la columna clave usando <literal><key not-null=\"true\"></literal>."
+
+#: index.docbook:2034, index.docbook:2091, index.docbook:2154
+msgid "<literal>proxy</literal> (optional): Specifies a class or interface to use for lazy initializing proxies."
+msgstr "los elementos column y formula"
+
+#: index.docbook:2040, index.docbook:2097, index.docbook:2160
+msgid "<literal>lazy</literal> (optional, defaults to <literal>true</literal>): Setting <literal>lazy=\"false\"</literal> disables the use of lazy fetching."
+msgstr "Cualquier elemento de mapeo que acepte un atributo <literal>column</literal> aceptará alternativamente un subelemento <literal><column></literal>. De forma similar, <literal><formula></literal> es una alternativa al atributo <literal>formula</literal>."
+
+#: index.docbook:2048
+msgid "Each subclass should declare its own persistent properties and subclasses. <literal><version></literal> and <literal><id></literal> properties are assumed to be inherited from the root class. Each subclass in a heirarchy must define a unique <literal>discriminator-value</literal>. If none is specified, the fully qualified Java class name is used."
+msgstr ""
+ "<![CDATA[<column\n"
+ " name=\"column_name\"\n"
+ " length=\"N\"\n"
+ " precision=\"N\"\n"
+ " scale=\"N\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " unique-key=\"multicolumn_unique_key_name\"\n"
+ " index=\"index_name\"\n"
+ " sql-type=\"sql_type_name\"\n"
+ " check=\"SQL expression\"/>]]>"
+
+#: index.docbook:2056, index.docbook:2114, index.docbook:2172
+msgid "For information about inheritance mappings, see <xref linkend=\"inheritance\"/>."
+msgstr "<![CDATA[<formula>expresión SQL</formula>]]>"
+
+#: index.docbook:2063
+msgid "joined-subclass"
+msgstr "Los atributos <literal>column</literal> y <literal>formula</literal> pueden incluso ser combinados dentro del mismo mapeo de propiedad o asociación para expresar, por ejemplo, condiciones de unión exóticas."
+
+#: index.docbook:2065
+msgid "Alternatively, each subclass may be mapped to its own table (table-per-subclass mapping strategy). Inherited state is retrieved by joining with the table of the superclass. We use the <literal><joined-subclass></literal> element."
+msgstr ""
+ "<![CDATA[<many-to-one name=\"homeAddress\" class=\"Address\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"person_id\" not-null=\"true\" length=\"10\"/>\n"
+ " <formula>'MAILING'</formula>\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:2078
+msgid ""
+ "<![CDATA[<joined-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <key .... >\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</joined-subclass>]]>"
+msgstr "import"
+
+#: index.docbook:2086, index.docbook:2149
+msgid "<literal>table</literal>: The name of the subclass table."
+msgstr "<![CDATA[<import class=\"java.lang.Object\" rename=\"Universe\"/>]]>"
+
+#: index.docbook:2105
+msgid "No discriminator column is required for this mapping strategy. Each subclass must, however, declare a table column holding the object identifier using the <literal><key></literal> element. The mapping at the start of the chapter would be re-written as:"
+msgstr "<literal>rename</literal> (opcional - por defecto al nombre de clase sin cualificar): Un nombre que será usado en el leguaje de consulta."
+
+#: index.docbook:2112
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" table=\"CATS\">\n"
+ " <id name=\"id\" column=\"uid\" type=\"long\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " <property name=\"birthdate\" type=\"date\"/>\n"
+ " <property name=\"color\" not-null=\"true\"/>\n"
+ " <property name=\"sex\" not-null=\"true\"/>\n"
+ " <property name=\"weight\"/>\n"
+ " <many-to-one name=\"mate\"/>\n"
+ " <set name=\"kittens\">\n"
+ " <key column=\"MOTHER\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ " <joined-subclass name=\"DomesticCat\" table=\"DOMESTIC_CATS\">\n"
+ " <key column=\"CAT\"/>\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </joined-subclass>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"eg.Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "<title>any</title>"
+
+#: index.docbook:2121
+msgid "union-subclass"
+msgstr "El atributo <literal>meta-type</literal> permite a la aplicación especificar un tipo personalizado que mapee columnas de base de datos a clases persistentes que tengan propiedades identificadoras del tipo especificado por <literal>id-type</literal>. Debes especificar el mapeo de valores del meta-type a nombres de clase."
+
+#: index.docbook:2123
+msgid "A third option is to map only the concrete classes of an inheritance hierarchy to tables, (the table-per-concrete-class strategy) where each table defines all persistent state of the class, including inherited state. In Hibernate, it is not absolutely necessary to explicitly map such inheritance hierarchies. You can simply map each class with a separate <literal><class></literal> declaration. However, if you wish use polymorphic associations (e.g. an association to the superclass of your hierarchy), you need to use the <literal><union-subclass></literal> mapping."
+msgstr ""
+ "<![CDATA[<any name=\"being\" id-type=\"long\" meta-type=\"string\">\n"
+ " <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>\n"
+ " <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>\n"
+ " <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>\n"
+ " <column name=\"table_name\"/>\n"
+ " <column name=\"id\"/>\n"
+ "</any>]]>"
+
+#: index.docbook:2141
+msgid ""
+ "<![CDATA[<union-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " abstract=\"true|false\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</union-subclass>]]>"
+msgstr ""
+ "<![CDATA[<any\n"
+ " name=\"propertyName\"\n"
+ " id-type=\"idtypename\"\n"
+ " meta-type=\"metatypename\"\n"
+ " cascade=\"cascade_style\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ ">\n"
+ " <meta-value ... />\n"
+ " <meta-value ... />\n"
+ " .....\n"
+ " <column .... />\n"
+ " <column .... />\n"
+ " .....\n"
+ "</any>]]>"
+
+#: index.docbook:2168
+msgid "No discriminator column or key column is required for this mapping strategy."
+msgstr "<literal>access</literal> (opcional - por defecto a <literal>property</literal>): La estrategia que Hibernate debe usar para acceder al valor de la propiedad."
+
+#: index.docbook:2179
+msgid "join"
+msgstr "Tipos de Hibernate"
+
+#: index.docbook:2181
+msgid "Using the <literal><join></literal> element, it is possible to map properties of one class to several tables, when there's a 1-to-1 relationship between the tables."
+msgstr "Entidades y Valores"
+
+#: index.docbook:2195
+msgid ""
+ "<![CDATA[<join\n"
+ " table=\"tablename\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " fetch=\"join|select\"\n"
+ " inverse=\"true|false\"\n"
+ " optional=\"true|false\">\n"
+ "\n"
+ " <key ... />\n"
+ "\n"
+ " <property ... />\n"
+ " ...\n"
+ "</join>]]>"
+msgstr "Para entender el comportamiento de varios objetos a nivel de lenguaje Java con respecto al servicio de persistencia, necesitamos clasificarlos en dos grupos:"
+
+#: index.docbook:2199
+msgid "<literal>table</literal>: The name of the joined table."
+msgstr "Una <emphasis>entidad</emphasis> existe independientemente de cualquier otros objetos que referencien a la entidad. Contrasta esto con el model habitual de Java donde un objeto desreferenciado es recolectado como basura. Las entidades deben ser salvadas y borradas explícitamente (excepto que las grabaciones y borrados puedan ser <emphasis>tratados en cascada</emphasis> desde una entidad padre a sus hijos). Esto es diferente al modelo de persistencia de objetos por alcance - y se corresponde más de cerca a cómo los objetos de aplicación son usados habitualmente en grandes sistemas. Las entidades soportan referencias circulares y compartidas, que tambié pueden ser versionadas."
+
+#: index.docbook:2216
+msgid "<literal>fetch</literal> (optional - defaults to <literal>join</literal>): If set to <literal>join</literal>, the default, Hibernate will use an inner join to retrieve a <literal><join></literal> defined by a class or its superclasses and an outer join for a <literal><join></literal> defined by a subclass. If set to <literal>select</literal> then Hibernate will use a sequential select for a <literal><join></literal> defined on a subclass, which will be issued only if a row turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a <literal><join></literal> defined by the class and its superclasses."
+msgstr "Volveremos a visitar ambos conceptos a lo largo de la documentación."
+
+#: index.docbook:2229
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will not try to insert or update the properties defined by this join."
+msgstr "EL desafío es mapear el sistema de tipos de Java (y la definición de entidades y tipos de valor de los desarrolladores) al sistema de tipos de SQL/base de datos. EL puente entre ambos sistemas es provisto por Hibernate: para las entidades usamos <literal><class></literal>, <literal><subclass></literal>, etc. Para los tipos de valor usamos <literal><property></literal>, <literal><component></literal>, etc, usualmente con un atributo <literal>type</literal>. El valor de este atributo es el nombre de un <emphasis>tipo de mapeo</emphasis> de Hibernate. Hibernate provee de fábrica muchos mapeos (para tipos de valores del JDK estándar). Puedes escribir tus propios mapeos de tipo, así como implementar tus estrategias de conversión personalizadas, como veremos luego."
+
+#: index.docbook:2236
+msgid "<literal>optional</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will insert a row only if the properties defined by this join are non-null and will always use an outer join to retrieve the properties."
+msgstr "Todos los tipos prefabricados de Hibernate soportan semántica de nulos excepto las colecciones."
+
+#: index.docbook:2245
+msgid "For example, the address information for a person can be mapped to a separate table (while preserving value type semantics for all properties):"
+msgstr "Tipos de valores básicos"
+
+#: index.docbook:2250
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " table=\"PERSON\">\n"
+ "\n"
+ " <id name=\"id\" column=\"PERSON_ID\">...</id>\n"
+ "\n"
+ " <join table=\"ADDRESS\">\n"
+ " <key column=\"ADDRESS_ID\"/>\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </join>\n"
+ " ...]]>"
+msgstr "Los <emphasis>tipos de mapeo básicos</emphasis> prefabricados pueden ser categorizado a grandes rasgos en:"
+
+#: index.docbook:2252
+msgid "This feature is often only useful for legacy data models, we recommend fewer tables than classes and a fine-grained domain model. However, it is useful for switching between inheritance mapping strategies in a single hierarchy, as explained later."
+msgstr "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+
+#: index.docbook:2262
+msgid "<title>key</title>"
+msgstr "Mapeos de tipos primitivos de Java o clases de envoltura a la tipos de columna SQL (especícifica del vendedor). <literal>boolean, yes_no</literal> y <literal>true_false</literal> son codificaciones alternativas a <literal>boolean</literal> de Java o <literal>java.lang.Boolean</literal>."
+
+#: index.docbook:2264
+msgid "We've seen the <literal><key></literal> element crop up a few times now. It appears anywhere the parent mapping element defines a join to a new table, and defines the foreign key in the joined table, that references the primary key of the original table."
+msgstr "string"
+
+#: index.docbook:2280
+msgid ""
+ "<![CDATA[<key\n"
+ " column=\"columnname\"\n"
+ " on-delete=\"noaction|cascade\"\n"
+ " property-ref=\"propertyName\"\n"
+ " not-null=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ "/>]]>"
+msgstr "Un mapeo del tipo <literal>java.lang.String</literal> a <literal>VARCHAR</literal> (u Oracle <literal>VAARCHAR2</literal>)."
+
+#: index.docbook:2291
+msgid "<literal>on-delete</literal> (optional, defaults to <literal>noaction</literal>): Specifies whether the foreign key constraint has database-level cascade delete enabled."
+msgstr "Mapeos de tipo desde <literal>java.util.Date</literal> y sus subclases a tipos SQL <literal>DATE</literal>, <literal>TIME</literal> y <literal>TIMESTAMP</literal> (o equivalente)."
+
+#: index.docbook:2298
+msgid "<literal>property-ref</literal> (optional): Specifies that the foreign key refers to columns that are not the primary key of the orginal table. (Provided for legacy data.)"
+msgstr "calendar, calendar_date"
+
+#: index.docbook:2305
+msgid "<literal>not-null</literal> (optional): Specifies that the foreign key columns are not nullable (this is implied whenever the foreign key is also part of the primary key)."
+msgstr "Mapeos de tipo desde <literal>java.util.Date</literal> y sus subclases a tipos SQL <literal>TIMESTAMP</literal> y <literal>DATE</literal> (o equivalente)."
+
+#: index.docbook:2312
+msgid "<literal>update</literal> (optional): Specifies that the foreign key should never be updated (this is implied whenever the foreign key is also part of the primary key)."
+msgstr "big_decimal, big_integer"
+
+#: index.docbook:2319
+msgid "<literal>unique</literal> (optional): Specifies that the foreign key should have a unique constraint (this is implied whenever the foreign key is also the primary key)."
+msgstr "Mapeos de tipo desde <literal>java.math.BigDecimal</literal> y <literal>java.math.BigInteger</literal> a <literal>NUMERIC</literal> (o <literal>NUMBER</literal> de Oracle)."
+
+#: index.docbook:2327
+msgid "We recommend that for systems where delete performance is important, all keys should be defined <literal>on-delete=\"cascade\"</literal>, and Hibernate will use a database-level <literal>ON CASCADE DELETE</literal> constraint, instead of many individual <literal>DELETE</literal> statements. Be aware that this feature bypasses Hibernate's usual optimistic locking strategy for versioned data."
+msgstr "locale, timezone, currency"
+
+#: index.docbook:2335
+msgid "The <literal>not-null</literal> and <literal>update</literal> attributes are useful when mapping a unidirectional one to many association. If you map a unidirectional one to many to a non-nullable foreign key, you <emphasis>must</emphasis> declare the key column using <literal><key not-null=\"true\"></literal>."
+msgstr "Mapeos de tipo desde <literal>java.util.Locale</literal>, <literal>java.util.TimeZone</literal> y <literal>java.util.Currency</literal> a <literal>VARCHAR</literal> (o <literal>VARCHAR2</literal> de Oracle). Las instancias de <literal>Locale</literal> y <literal>Currency</literal> son mapeadas a sus códigos ISO. Las instancias de <literal>TimeZone</literal> son mapeadas a sus <literal>ID</literal>."
+
+#: index.docbook:2345
+msgid "column and formula elements"
+msgstr "<literal>class</literal>"
+
+#: index.docbook:2346
+msgid "Any mapping element which accepts a <literal>column</literal> attribute will alternatively accept a <literal><column></literal> subelement. Likewise, <literal><formula></literal> is an alternative to the <literal>formula</literal> attribute."
+msgstr "Un mapeo de tipo <literal>java.lang.Class</literal> a <literal>VARCHAR</literal> (o <literal>VARCHAR2</literal> de Oracle). Una <literal>Class</literal> es mapeara a su nombre completamente cualificado."
+
+#: index.docbook:2352
+msgid ""
+ "<![CDATA[<column\n"
+ " name=\"column_name\"\n"
+ " length=\"N\"\n"
+ " precision=\"N\"\n"
+ " scale=\"N\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " unique-key=\"multicolumn_unique_key_name\"\n"
+ " index=\"index_name\"\n"
+ " sql-type=\"sql_type_name\"\n"
+ " check=\"SQL expression\"\n"
+ " default=\"SQL expression\"/>]]>"
+msgstr "binary"
+
+#: index.docbook:2354
+msgid "<![CDATA[<formula>SQL expression</formula>]]>"
+msgstr "Mapea arreglos de bytes a un tipo binario SQL apropiado."
+
+#: index.docbook:2356
+msgid "<literal>column</literal> and <literal>formula</literal> attributes may even be combined within the same property or association mapping to express, for example, exotic join conditions."
+msgstr "text"
+
+#: index.docbook:2362
+msgid ""
+ "<![CDATA[<many-to-one name=\"homeAddress\" class=\"Address\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"person_id\" not-null=\"true\" length=\"10\"/>\n"
+ " <formula>'MAILING'</formula>\n"
+ "</many-to-one>]]>"
+msgstr "Mapea cadenas largas Java al tipo SQL <literal>CLOB</literal> o <literal>TEXT</literal>."
+
+#: index.docbook:2367
+msgid "import"
+msgstr "serializable"
+
+#: index.docbook:2369
+msgid "Suppose your application has two persistent classes with the same name, and you don't want to specify the fully qualified (package) name in Hibernate queries. Classes may be \"imported\" explicitly, rather than relying upon <literal>auto-import=\"true\"</literal>. You may even import classes and interfaces that are not explicitly mapped."
+msgstr "Mapea tipos serializables Java a un tipo binario SQL apropiado. Puedes además indicar el tipo <literal>serializable</literal> de Hibernate con el nombre de una clase o interface serializable Java que no sea por defecto un tipo básico."
+
+#: index.docbook:2376
+msgid "<![CDATA[<import class=\"java.lang.Object\" rename=\"Universe\"/>]]>"
+msgstr "clob, blob"
+
+#: index.docbook:2383
+msgid ""
+ "<![CDATA[<import\n"
+ " class=\"ClassName\"\n"
+ " rename=\"ShortName\"\n"
+ "/>]]>"
+msgstr "Mapeos de tipo para las clases JDBC <literal>java.sql.Clob</literal> y <literal>java.sql.Blob</literal>. Estos tipos pueden ser inconvenientes para algunas aplicaciones, pues el objeto blob o clob no puede ser reusado fuera de una transacción (Además, el soporte del driver suele ser malo e inconsistente)."
+
+#: index.docbook:2386
+msgid "<literal>class</literal>: The fully qualified class name of of any Java class."
+msgstr "Los identificadores únicos de entidades y collecciones pueden ser de cualquier tipo básico excepto <literal>binary</literal>, <literal>blob</literal> y <literal>clob</literal>. (Los identificadores compuestos están también permitidos, ver debajo.)"
+
+#: index.docbook:2391
+msgid "<literal>rename</literal> (optional - defaults to the unqualified class name): A name that may be used in the query language."
+msgstr "Los tipos de valor básicos tienen sus constantes <literal>Type</literal> correspondientes definidas en <literal>org.hibernate.Hibernate</literal>. Por ejemplo, <literal>Hibernate.STRING</literal> representa el tipo <literal>string</literal>."
+
+#: index.docbook:2402
+msgid "<title>any</title>"
+msgstr "Tipos de valor personalizados"
+
+#: index.docbook:2404
+msgid "There is one further type of property mapping. The <literal><any></literal> mapping element defines a polymorphic association to classes from multiple tables. This type of mapping always requires more than one column. The first column holds the type of the associated entity. The remaining columns hold the identifier. It is impossible to specify a foreign key constraint for this kind of association, so this is most certainly not meant as the usual way of mapping (polymorphic) associations. You should use this only in very special cases (eg. audit logs, user session data, etc)."
+msgstr "Es relativamente fácil para los desarrolladores crear sus propios tipos de valor. Por ejemplo, podrías querer persistir propiedades del tipo <literal>java.lang.BigInteger</literal> a columnas <literal>VARCHAR</literal>. Hibernate no provee un tipo de fábrica para esto. Pero los tipos personalizados no están limitados a mapear una propiedad (o elemento de colección) a una sola columna de tabla. Así, por ejemplo, podrías tener una propiedad Java <literal>getName()</literal>/<literal>setName()</literal> de tipo <literal>java.lang.String</literal> que fuera persistida a las columnas <literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal>."
+
+#: index.docbook:2414
+msgid "The <literal>meta-type</literal> attribute lets the application specify a custom type that maps database column values to persistent classes which have identifier properties of the type specified by <literal>id-type</literal>. You must specify the mapping from values of the meta-type to class names."
+msgstr "Para implementar un tipo personalizado, implementa bien <literal>org.hibernate.UserType</literal> o <literal>org.hibernate.CompositeUserType</literal> y declara las propiedades usando el nombre de clase completamente cualificado del tipo. Revisa <literal>org.hibernate.test.DoubleStringType</literal> para ver qué tipo de cosas son posibles."
+
+#: index.docbook:2421
+msgid ""
+ "<![CDATA[<any name=\"being\" id-type=\"long\" meta-type=\"string\">\n"
+ " <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>\n"
+ " <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>\n"
+ " <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>\n"
+ " <column name=\"table_name\"/>\n"
+ " <column name=\"id\"/>\n"
+ "</any>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType\">\n"
+ " <column name=\"first_string\"/>\n"
+ " <column name=\"second_string\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:2432
+msgid ""
+ "<![CDATA[<any\n"
+ " name=\"propertyName\"\n"
+ " id-type=\"idtypename\"\n"
+ " meta-type=\"metatypename\"\n"
+ " cascade=\"cascade_style\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ ">\n"
+ " <meta-value ... />\n"
+ " <meta-value ... />\n"
+ " .....\n"
+ " <column .... />\n"
+ " <column .... />\n"
+ " .....\n"
+ "</any>]]>"
+msgstr "Observa el uso de etiquetas <literal><column></literal> para mapear una propiedad a múltiples columnas."
+
+#: index.docbook:2435
+msgid "<literal>name</literal>: the property name."
+msgstr "Las interfaces <literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>, <literal>UserCollectionType</literal>, y <literal>UserVersionType</literal> proveen soporte a usos más especializados."
+
+#: index.docbook:2440
+msgid "<literal>id-type</literal>: the identifier type."
+msgstr "Puedes incluso proveer de parámetros a un <literal>UserType</literal> en el fichero de mapeo. Para hacer esto, tu <literal>UserType</literal> debe implementar la interface <literal>org.hibernate.usertype.ParameterizedType</literal>. Para proveer de parámetros a tu tipo personalizado, puedes usar el elemento <literal><type></literal> en tus ficheros de mapeo."
+
+#: index.docbook:2445
+msgid "<literal>meta-type</literal> (optional - defaults to <literal>string</literal>): Any type that is allowed for a discriminator mapping."
+msgstr ""
+ "<![CDATA[<property name=\"priority\">\n"
+ " <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
+ " <param name=\"default\">0</param>\n"
+ " </type>\n"
+ "</property>]]>"
+
+#: index.docbook:2451
+msgid "<literal>cascade</literal> (optional- defaults to <literal>none</literal>): the cascade style."
+msgstr "Ahora el <literal>UserType</literal> puede recuperar el valor del parámetro llamado <literal>default</literal> del objeto <literal>Properties</literal> que se le pasa."
+
+#: index.docbook:2463
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, define if a version increment should occur if this property is dirty."
+msgstr ""
+ "<![CDATA[<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name=\"default_zero\">\n"
+ " <param name=\"default\">0</param>\n"
+ "</typedef>]]>"
+
+#: index.docbook:2478
+msgid "Hibernate Types"
+msgstr "<![CDATA[<property name=\"priority\" type=\"default_zero\"/>]]>"
+
+#: index.docbook:2481
+msgid "Entities and values"
+msgstr "también es posible sobrescribir los parámetros provistos en un typedef sobre una base caso por caso usando parámetros de tipo en el mapeo de la propiedad."
+
+#: index.docbook:2483
+msgid "To understand the behaviour of various Java language-level objects with respect to the persistence service, we need to classify them into two groups:"
+msgstr "Aunque el rico espectro de tipos prefabricados y soporte de componentes de Hibernate significa que raramente <emphasis>necesites</emphasis> usar un tipo personalizado; sin embargo se considera una buena forma usar tipos personalizados para clases (no-entidades) que aparezcan frecuentemente en tu aplicación. Por ejemplo, una clase <literal>MonetaryAmount</literal> es una buena candidata para un <literal>CompositeUserType</literal>, incluso cuando puede ser facilmente mapeada como un componente. Un motivo para esto es la abstracción. Con un tipo personalizado, tus documentos de mapeo estará impermeabilizados contra posibles cambios futuros en la forma de representar valores monetarios."
+
+#: index.docbook:2488
+msgid "An <emphasis>entity</emphasis> exists independently of any other objects holding references to the entity. Contrast this with the usual Java model where an unreferenced object is garbage collected. Entities must be explicitly saved and deleted (except that saves and deletions may be <emphasis>cascaded</emphasis> from a parent entity to its children). This is different from the ODMG model of object persistence by reachablity - and corresponds more closely to how application objects are usually used in large systems. Entities support circular and shared references. They may also be versioned."
+msgstr "Mapeando una clase más de una vez"
+
+#: index.docbook:2499
+msgid "An entity's persistent state consists of references to other entities and instances of <emphasis>value</emphasis> types. Values are primitives, collections (not what's inside a collection), components and certain immutable objects. Unlike entities, values (in particular collections and components) <emphasis>are</emphasis> persisted and deleted by reachability. Since value objects (and primitives) are persisted and deleted along with their containing entity they may not be independently versioned. Values have no independent identity, so they cannot be shared by two entities or collections."
+msgstr "Es posible proveer más de un mapeo para una clase persistente en particular. En este caso debes especificar un <emphasis>nombre de entidad</emphasis> para desambiguar entr las instancias de las dos entidades mapeadas. (Por defectom, el nombre de la entidad es el mismo que el nombre de la clase.) Hibernate te deja especificar el nombre de entidad al trabajar con objetos persistentes, al escribir consultas, o al mapear asociaciones a la entidad mencionada."
+
+#: index.docbook:2510
+msgid "Up until now, we've been using the term \"persistent class\" to refer to entities. We will continue to do that. Strictly speaking, however, not all user-defined classes with persistent state are entities. A <emphasis>component</emphasis> is a user defined class with value semantics. A Java property of type <literal>java.lang.String</literal> also has value semantics. Given this definition, we can say that all types (classes) provided by the JDK have value type semantics in Java, while user-defined types may be mapped with entity or value type semantics. This decision is up to the application developer. A good hint for an entity class in a domain model are shared references to a single instance of that class, while composition or aggregation usually translates to a value type."
+msgstr ""
+ "<![CDATA[<class name=\"Contract\" table=\"Contracts\" \n"
+ " entity-name=\"CurrentContract\">\n"
+ " ...\n"
+ " <set name=\"history\" inverse=\"true\" \n"
+ " order-by=\"effectiveEndDate desc\">\n"
+ " <key column=\"currentContractId\"/>\n"
+ " <one-to-many entity-name=\"HistoricalContract\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Contract\" table=\"ContractHistory\" \n"
+ " entity-name=\"HistoricalContract\">\n"
+ " ...\n"
+ " <many-to-one name=\"currentContract\" \n"
+ " column=\"currentContractId\" \n"
+ " entity-name=\"CurrentContract\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:2524
+msgid "We'll revisit both concepts throughout the documentation."
+msgstr "Observa cómo las asociaciones ahora se especifican usando <literal>entity-name</literal> en vez de <literal>class</literal>."
+
+#: index.docbook:2528
+msgid "The challenge is to map the Java type system (and the developers' definition of entities and value types) to the SQL/database type system. The bridge between both systems is provided by Hibernate: for entities we use <literal><class></literal>, <literal><subclass></literal> and so on. For value types we use <literal><property></literal>, <literal><component></literal>, etc, usually with a <literal>type</literal> attribute. The value of this attribute is the name of a Hibernate <emphasis>mapping type</emphasis>. Hibernate provides many mappings (for standard JDK value types) out of the box. You can write your own mapping types and implement your custom conversion strategies as well, as you'll see later."
+msgstr "identificadores SQL encomillados"
+
+#: index.docbook:2541
+msgid "All built-in Hibernate types except collections support null semantics."
+msgstr "Puedes forzar a Hibernate a encomillar un identificador en el SQL generado encerrando el nombre de tabla o columna entre backticks en el documento de mapeo. Hibernate usará el estilo de encomillado para el <literal>Dialect</literal> SQL (usualmente comillas dobles, excepto corchetes para SQL Server y backsticks para MySQL)."
+
+#: index.docbook:2548
+msgid "Basic value types"
+msgstr ""
+ "<![CDATA[<class name=\"LineItem\" table=\"`Line Item`\">\n"
+ " <id name=\"id\" column=\"`Item Id`\"/><generator class=\"assigned\"/></id>\n"
+ " <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:2550
+msgid "The built-in <emphasis>basic mapping types</emphasis> may be roughly categorized into"
+msgstr "Alternativas de metadatos"
+
+#: index.docbook:2555
+msgid "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+msgstr "XML no es para todos, asá que hay algunas formas alternativas de definir metadatos de mapeo O/R en Hibernate."
+
+#: index.docbook:2558
+msgid "Type mappings from Java primitives or wrapper classes to appropriate (vendor-specific) SQL column types. <literal>boolean, yes_no</literal> and <literal>true_false</literal> are all alternative encodings for a Java <literal>boolean</literal> or <literal>java.lang.Boolean</literal>."
+msgstr "Usando marcado de XDoclet"
+
+#: index.docbook:2567
+msgid "string"
+msgstr "Muchos usuarios de Hibernate prefieren embeber la información de mapeo directamente en el código fuente usando las <literal>@hibernate.etiquetas</literal> XDoclet. No cubriremos este enfoque en este documento, pues estrictamente es considerado parte de XDoclet. Sin embargo, incluímos el siguiente ejemplo de la clase <literal>Cat</literal> con mapeos XDoclet."
+
+#: index.docbook:2569
+msgid "A type mapping from <literal>java.lang.String</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>)."
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "/**\n"
+ " * @hibernate.class\n"
+ " * table=\"CATS\"\n"
+ " */\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ " private Date birthdate;\n"
+ " private Cat mother;\n"
+ " private Set kittens\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " /*\n"
+ " * @hibernate.id\n"
+ " * generator-class=\"native\"\n"
+ " * column=\"CAT_ID\"\n"
+ " */\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.many-to-one\n"
+ " * column=\"PARENT_ID\"\n"
+ " */\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"BIRTH_DATE\"\n"
+ " */\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"WEIGHT\"\n"
+ " */\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"COLOR\"\n"
+ " * not-null=\"true\"\n"
+ " */\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.set\n"
+ " * inverse=\"true\"\n"
+ " * order-by=\"BIRTH_DATE\"\n"
+ " * @hibernate.collection-key\n"
+ " * column=\"PARENT_ID\"\n"
+ " * @hibernate.collection-one-to-many\n"
+ " */\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"SEX\"\n"
+ " * not-null=\"true\"\n"
+ " * update=\"false\"\n"
+ " */\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:2576
+msgid "date, time, timestamp"
+msgstr "Para más ejemplos de XDoclet e Hibernate ver en el sitio web de Hibernate."
+
+#: index.docbook:2578
+msgid "Type mappings from <literal>java.util.Date</literal> and its subclasses to SQL types <literal>DATE</literal>, <literal>TIME</literal> and <literal>TIMESTAMP</literal> (or equivalent)."
+msgstr "Usando anotaciones JDK 5.0"
+
+#: index.docbook:2586
+msgid "calendar, calendar_date"
+msgstr "El JDK 5.0 introdujo anotaciones del estilo XDoclet a nivel del lenguaje, con chequeo seguro de tipos en tiempo de compilación. Este mecanismo es más potente y que las anotaciones XDoclet, y mejor soportado por herramientas e IDEs. IntelliJ IDEA, por ejemplo, soporta auto-compleción y resaltado de sintaxis de anotaciones JDK 5.0. La nueva revisión de la especificación de EJB (JSR-220) usa anotaciones JDK 5.0 como el mecanismo primario de metadatos para beans de entidad. Hibernate3 implementa el <literal>EntityManager</literal> del JSR-220 (la API de persistencia), y el soporte para metadatos de mapeo está disponible vía el paquete <emphasis>Hibernate Annotations</emphasis>, como una descarga por separado. Tanto metadatos de EJB3 (JSR-220) como de Hibernate3 están soportados."
+
+#: index.docbook:2588
+msgid "Type mappings from <literal>java.util.Calendar</literal> to SQL types <literal>TIMESTAMP</literal> and <literal>DATE</literal> (or equivalent)."
+msgstr "Este es un ejemplo de una clase POJO anotada como un bean de entidad EJB:"
+
+#: index.docbook:2596
+msgid "big_decimal, big_integer"
+msgstr ""
+ "<![CDATA[@Entity(access = AccessType.FIELD)\n"
+ "public class Customer implements Serializable {\n"
+ "\n"
+ " @Id;\n"
+ " Long id;\n"
+ "\n"
+ " String firstName;\n"
+ " String lastName;\n"
+ " Date birthday;\n"
+ "\n"
+ " @Transient\n"
+ " Integer age;\n"
+ "\n"
+ " @Embedded\n"
+ " private Address homeAddress;\n"
+ "\n"
+ " @OneToMany(cascade=CascadeType.ALL)\n"
+ "\n"
+ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
+ " Set<Order> orders;\n"
+ "\n"
+ " // Getter/setter and business methods\n"
+ "}]]>"
+
+#: index.docbook:2598
+msgid "Type mappings from <literal>java.math.BigDecimal</literal> and <literal>java.math.BigInteger</literal> to <literal>NUMERIC</literal> (or Oracle <literal>NUMBER</literal>)."
+msgstr "Ten en cuenta que el soporte a anotaciones JDK 5.0 (y JSR-220) es todavía un trabajo en progreso y no completado. Por favor, para más detalles refiérete al modulo de Anotaciones de Hibernate."
+
+#: index.docbook:2606
+msgid "locale, timezone, currency"
+msgstr ""
+
+#: index.docbook:2608
+msgid "Type mappings from <literal>java.util.Locale</literal>, <literal>java.util.TimeZone</literal> and <literal>java.util.Currency</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). Instances of <literal>Locale</literal> and <literal>Currency</literal> are mapped to their ISO codes. Instances of <literal>TimeZone</literal> are mapped to their <literal>ID</literal>."
+msgstr ""
+
+#: index.docbook:2620
+msgid "<literal>class</literal>"
+msgstr ""
+
+#: index.docbook:2622
+msgid "A type mapping from <literal>java.lang.Class</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). A <literal>Class</literal> is mapped to its fully qualified name."
+msgstr ""
+
+#: index.docbook:2630
+msgid "binary"
+msgstr ""
+
+#: index.docbook:2632
+msgid "Maps byte arrays to an appropriate SQL binary type."
+msgstr ""
+
+#: index.docbook:2638
+msgid "text"
+msgstr ""
+
+#: index.docbook:2640
+msgid "Maps long Java strings to a SQL <literal>CLOB</literal> or <literal>TEXT</literal> type."
+msgstr ""
+
+#: index.docbook:2647
+msgid "serializable"
+msgstr ""
+
+#: index.docbook:2649
+msgid "Maps serializable Java types to an appropriate SQL binary type. You may also indicate the Hibernate type <literal>serializable</literal> with the name of a serializable Java class or interface that does not default to a basic type."
+msgstr ""
+
+#: index.docbook:2658
+msgid "clob, blob"
+msgstr ""
+
+#: index.docbook:2660
+msgid "Type mappings for the JDBC classes <literal>java.sql.Clob</literal> and <literal>java.sql.Blob</literal>. These types may be inconvenient for some applications, since the blob or clob object may not be reused outside of a transaction. (Furthermore, driver support is patchy and inconsistent.)"
+msgstr ""
+
+#: index.docbook:2670
+msgid "imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary"
+msgstr ""
+
+#: index.docbook:2674
+msgid "Type mappings for what are usually considered mutable Java types, where Hibernate makes certain optimizations appropriate only for immutable Java types, and the application treats the object as immutable. For example, you should not call <literal>Date.setTime()</literal> for an instance mapped as <literal>imm_timestamp</literal>. To change the value of the property, and have that change made persistent, the application must assign a new (nonidentical) object to the property."
+msgstr ""
+
+#: index.docbook:2689
+msgid "Unique identifiers of entities and collections may be of any basic type except <literal>binary</literal>, <literal>blob</literal> and <literal>clob</literal>. (Composite identifiers are also allowed, see below.)"
+msgstr ""
+
+#: index.docbook:2695
+msgid "The basic value types have corresponding <literal>Type</literal> constants defined on <literal>org.hibernate.Hibernate</literal>. For example, <literal>Hibernate.STRING</literal> represents the <literal>string</literal> type."
+msgstr ""
+
+#: index.docbook:2704
+msgid "Custom value types"
+msgstr ""
+
+#: index.docbook:2706
+msgid "It is relatively easy for developers to create their own value types. For example, you might want to persist properties of type <literal>java.lang.BigInteger</literal> to <literal>VARCHAR</literal> columns. Hibernate does not provide a built-in type for this. But custom types are not limited to mapping a property (or collection element) to a single table column. So, for example, you might have a Java property <literal>getName()</literal>/<literal>setName()</literal> of type <literal>java.lang.String</literal> that is persisted to the columns <literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal>."
+msgstr ""
+
+#: index.docbook:2717
+msgid "To implement a custom type, implement either <literal>org.hibernate.UserType</literal> or <literal>org.hibernate.CompositeUserType</literal> and declare properties using the fully qualified classname of the type. Check out <literal>org.hibernate.test.DoubleStringType</literal> to see the kind of things that are possible."
+msgstr ""
+
+#: index.docbook:2725
+msgid ""
+ "<![CDATA[<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType\">\n"
+ " <column name=\"first_string\"/>\n"
+ " <column name=\"second_string\"/>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:2727
+msgid "Notice the use of <literal><column></literal> tags to map a property to multiple columns."
+msgstr ""
+
+#: index.docbook:2732
+msgid "The <literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>, <literal>UserCollectionType</literal>, and <literal>UserVersionType</literal> interfaces provide support for more specialized uses."
+msgstr ""
+
+#: index.docbook:2738
+msgid "You may even supply parameters to a <literal>UserType</literal> in the mapping file. To do this, your <literal>UserType</literal> must implement the <literal>org.hibernate.usertype.ParameterizedType</literal> interface. To supply parameters to your custom type, you can use the <literal><type></literal> element in your mapping files."
+msgstr ""
+
+#: index.docbook:2746
+msgid ""
+ "<![CDATA[<property name=\"priority\">\n"
+ " <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
+ " <param name=\"default\">0</param>\n"
+ " </type>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:2748
+msgid "The <literal>UserType</literal> can now retrieve the value for the parameter named <literal>default</literal> from the <literal>Properties</literal> object passed to it."
+msgstr ""
+
+#: index.docbook:2753
+msgid "If you use a certain <literal>UserType</literal> very often, it may be useful to define a shorter name for it. You can do this using the <literal><typedef></literal> element. Typedefs assign a name to a custom type, and may also contain a list of default parameter values if the type is parameterized."
+msgstr ""
+
+#: index.docbook:2760
+msgid ""
+ "<![CDATA[<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name=\"default_zero\">\n"
+ " <param name=\"default\">0</param>\n"
+ "</typedef>]]>"
+msgstr ""
+
+#: index.docbook:2762
+msgid "<![CDATA[<property name=\"priority\" type=\"default_zero\"/>]]>"
+msgstr ""
+
+#: index.docbook:2764
+msgid "It is also possible to override the parameters supplied in a typedef on a case-by-case basis by using type parameters on the property mapping."
+msgstr ""
+
+#: index.docbook:2769
+msgid "Even though Hibernate's rich range of built-in types and support for components means you will very rarely <emphasis>need</emphasis> to use a custom type, it is nevertheless considered good form to use custom types for (non-entity) classes that occur frequently in your application. For example, a <literal>MonetaryAmount</literal> class is a good candidate for a <literal>CompositeUserType</literal>, even though it could easily be mapped as a component. One motivation for this is abstraction. With a custom type, your mapping documents would be future-proofed against possible changes in your way of representing monetary values."
+msgstr ""
+
+#: index.docbook:2785
+msgid "Mapping a class more than once"
+msgstr ""
+
+#: index.docbook:2786
+msgid "It is possible to provide more than one mapping for a particular persistent class. In this case you must specify an <emphasis>entity name</emphasis> do disambiguate between instances of the two mapped entities. (By default, the entity name is the same as the class name.) Hibernate lets you specify the entity name when working with persistent objects, when writing queries, or when mapping associations to the named entity."
+msgstr ""
+
+#: index.docbook:2794
+msgid ""
+ "<![CDATA[<class name=\"Contract\" table=\"Contracts\"\n"
+ " entity-name=\"CurrentContract\">\n"
+ " ...\n"
+ " <set name=\"history\" inverse=\"true\"\n"
+ " order-by=\"effectiveEndDate desc\">\n"
+ " <key column=\"currentContractId\"/>\n"
+ " <one-to-many entity-name=\"HistoricalContract\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Contract\" table=\"ContractHistory\"\n"
+ " entity-name=\"HistoricalContract\">\n"
+ " ...\n"
+ " <many-to-one name=\"currentContract\"\n"
+ " column=\"currentContractId\"\n"
+ " entity-name=\"CurrentContract\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:2796
+msgid "Notice how associations are now specified using <literal>entity-name</literal> instead of <literal>class</literal>."
+msgstr ""
+
+#: index.docbook:2804
+msgid "SQL quoted identifiers"
+msgstr ""
+
+#: index.docbook:2805
+msgid "You may force Hibernate to quote an identifier in the generated SQL by enclosing the table or column name in backticks in the mapping document. Hibernate will use the correct quotation style for the SQL <literal>Dialect</literal> (usually double quotes, but brackets for SQL Server and backticks for MySQL)."
+msgstr ""
+
+#: index.docbook:2812
+msgid ""
+ "<![CDATA[<class name=\"LineItem\" table=\"`Line Item`\">\n"
+ " <id name=\"id\" column=\"`Item Id`\"/><generator class=\"assigned\"/></id>\n"
+ " <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:2818
+msgid "Metadata alternatives"
+msgstr ""
+
+#: index.docbook:2820
+msgid "XML isn't for everyone, and so there are some alternative ways to define O/R mapping metadata in Hibernate."
+msgstr ""
+
+#: index.docbook:2825
+msgid "Using XDoclet markup"
+msgstr ""
+
+#: index.docbook:2827
+msgid "Many Hibernate users prefer to embed mapping information directly in sourcecode using XDoclet <literal>@hibernate.tags</literal>. We will not cover this approach in this document, since strictly it is considered part of XDoclet. However, we include the following example of the <literal>Cat</literal> class with XDoclet mappings."
+msgstr ""
+
+#: index.docbook:2834
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "/**\n"
+ " * @hibernate.class\n"
+ " * table=\"CATS\"\n"
+ " */\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ " private Date birthdate;\n"
+ " private Cat mother;\n"
+ " private Set kittens\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " /*\n"
+ " * @hibernate.id\n"
+ " * generator-class=\"native\"\n"
+ " * column=\"CAT_ID\"\n"
+ " */\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.many-to-one\n"
+ " * column=\"PARENT_ID\"\n"
+ " */\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"BIRTH_DATE\"\n"
+ " */\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"WEIGHT\"\n"
+ " */\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"COLOR\"\n"
+ " * not-null=\"true\"\n"
+ " */\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.set\n"
+ " * inverse=\"true\"\n"
+ " * order-by=\"BIRTH_DATE\"\n"
+ " * @hibernate.collection-key\n"
+ " * column=\"PARENT_ID\"\n"
+ " * @hibernate.collection-one-to-many\n"
+ " */\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"SEX\"\n"
+ " * not-null=\"true\"\n"
+ " * update=\"false\"\n"
+ " */\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2836
+msgid "See the Hibernate web site for more examples of XDoclet and Hibernate."
+msgstr ""
+
+#: index.docbook:2843
+msgid "Using JDK 5.0 Annotations"
+msgstr ""
+
+#: index.docbook:2845
+msgid "JDK 5.0 introduced XDoclet-style annotations at the language level, type-safe and checked at compile time. This mechnism is more powerful than XDoclet annotations and better supported by tools and IDEs. IntelliJ IDEA, for example, supports auto-completion and syntax highlighting of JDK 5.0 annotations. The new revision of the EJB specification (JSR-220) uses JDK 5.0 annotations as the primary metadata mechanism for entity beans. Hibernate3 implements the <literal>EntityManager</literal> of JSR-220 (the persistence API), support for mapping metadata is available via the <emphasis>Hibernate Annotations</emphasis> package, as a separate download. Both EJB3 (JSR-220) and Hibernate3 metadata is supported."
+msgstr ""
+
+#: index.docbook:2856
+msgid "This is an example of a POJO class annotated as an EJB entity bean:"
+msgstr ""
+
+#: index.docbook:2860
+msgid ""
+ "<![CDATA[@Entity(access = AccessType.FIELD)\n"
+ "public class Customer implements Serializable {\n"
+ "\n"
+ " @Id;\n"
+ " Long id;\n"
+ "\n"
+ " String firstName;\n"
+ " String lastName;\n"
+ " Date birthday;\n"
+ "\n"
+ " @Transient\n"
+ " Integer age;\n"
+ "\n"
+ " @Embedded\n"
+ " private Address homeAddress;\n"
+ "\n"
+ " @OneToMany(cascade=CascadeType.ALL)\n"
+ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
+ " Set<Order> orders;\n"
+ "\n"
+ " // Getter/setter and business methods\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2862
+msgid "Note that support for JDK 5.0 Annotations (and JSR-220) is still work in progress and not completed. Please refer to the Hibernate Annotations module for more details."
+msgstr ""
+
+#: index.docbook:2871
+msgid "Generated Properties"
+msgstr ""
+
+#: index.docbook:2872
+msgid "Generated properties are properties which have their values generated by the database. Typically, Hibernate applications needed to <literal>refresh</literal> objects which contain any properties for which the database was generating values. Marking properties as generated, however, lets the application delegate this responsibility to Hibernate. Essentially, whenever Hibernate issues an SQL INSERT or UPDATE for an entity which has defined generated properties, it immediately issues a select afterwards to retrieve the generated values."
+msgstr ""
+
+#: index.docbook:2881
+msgid "Properties marked as generated must additionally be non-insertable and non-updateable. Only <xref linkend=\"mapping-declaration-version\"/>versions, <xref linkend=\"mapping-declaration-timestamp\"/>timestamps, and <xref linkend=\"mapping-declaration-property\"/>simple properties can be marked as generated."
+msgstr ""
+
+#: index.docbook:2888
+msgid "<literal>never</literal> (the default) - means that the given property value is not generated within the database."
+msgstr ""
+
+#: index.docbook:2892
+msgid "<literal>insert</literal> - states that the given property value is generated on insert, but is not regenerated on subsequent updates. Things like created-date would fall into this category. Note that even thought <xref linkend=\"mapping-declaration-version\"/>version and <xref linkend=\"mapping-declaration-timestamp\"/>timestamp properties can be marked as generated, this option is not available there..."
+msgstr ""
+
+#: index.docbook:2900
+msgid "<literal>always</literal> - states that the property value is generated both on insert and on update."
+msgstr ""
+
+#: index.docbook:2907
+msgid "Auxiliary Database Objects"
+msgstr ""
+
+#: index.docbook:2908
+msgid "Allows CREATE and DROP of arbitrary database objects, in conjunction with Hibernate's schema evolution tools, to provide the ability to fully define a user schema within the Hibernate mapping files. Although designed specifically for creating and dropping things like triggers or stored procedures, really any SQL command that can be run via a <literal>java.sql.Statement.execute()</literal> method is valid here (ALTERs, INSERTS, etc). There are essentially two modes for defining auxiliary database objects..."
+msgstr ""
+
+#: index.docbook:2917
+msgid "The first mode is to explicitly list the CREATE and DROP commands out in the mapping file:"
+msgstr ""
+
+#: index.docbook:2921
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <create>CREATE TRIGGER my_trigger ...</create>\n"
+ " <drop>DROP TRIGGER my_trigger</drop>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2922
+msgid "The second mode is to supply a custom class which knows how to construct the CREATE and DROP commands. This custom class must implement the <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> interface."
+msgstr ""
+
+#: index.docbook:2927
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2928
+msgid "Additionally, these database objects can be optionally scoped such that they only apply when certain dialects are used."
+msgstr ""
+
+#: index.docbook:2932
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.Oracle9Dialect\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.OracleDialect\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/batch.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/batch.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/batch.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,342 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Batch processing"
+msgstr "Procesamiento por lotes"
+
+#: index.docbook:7
+msgid "A naive approach to inserting 100 000 rows in the database using Hibernate might look like this:"
+msgstr "Un enfoque ingenuo para insertar 100.000 filas en la base de datos usando Hibernate podrÃa verse asÃ:"
+
+#: index.docbook:12
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ "}\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ "}\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:14
+msgid "This would fall over with an <literal>OutOfMemoryException</literal> somewhere around the 50 000th row. That's because Hibernate caches all the newly inserted <literal>Customer</literal> instances in the session-level cache."
+msgstr "Esto podrÃa caer sobre una <literal>OutOfMemoryException</literal> en algún sitio cerca de la fila 50.000. Esto es porque Hibernate tiene en caché todas las instancias de <literal>Customer</literal> recién instanciadas en el caché de nivel de sesión."
+
+#: index.docbook:20
+msgid "In this chapter we'll show you how to avoid this problem. First, however, if you are doing batch processing, it is absolutely critical that you enable the use of JDBC batching, if you intend to achieve reasonable performance. Set the JDBC batch size to a reasonable number (say, 10-50):"
+msgstr "En este capÃtulo te mostraremos cómo evitar este problema. Primero, sin embargo, si estás haciendo procesamiento por lotes (batch processing), es absolutamente crÃtico que habilites el uso de loteo JDBC, si pretendes lograr un rendimiento razonable. Establece el tamaño de lote JDBC a un número razonable (digamos 10-50):"
+
+#: index.docbook:27
+msgid "<![CDATA[hibernate.jdbc.batch_size 20]]>"
+msgstr "<![CDATA[hibernate.jdbc.batch_size 20]]>"
+
+#: index.docbook:29
+msgid "Note that Hibernate disables insert batching at the JDBC level transparently if you use an <literal>identiy</literal> identifier generator."
+msgstr "PodrÃas además querer hacer este tipo de trabajo en un proceso donde la interacción con el caché de segundo nivel esté completamente deshabilitado:"
+
+#: index.docbook:34
+msgid "You also might like to do this kind of work in a process where interaction with the second-level cache is completely disabled:"
+msgstr "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
+
+#: index.docbook:39
+msgid "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
+msgstr "Inserciones en lote"
+
+#: index.docbook:41
+msgid "However, this is not absolutely necessary, since we can explicitly set the <literal>CacheMode</literal> to disable interaction with the second-level cache."
+msgstr "Al hacer persistentes objetos nuevos, debes limpiar con <literal>flush()</literal> y llamar a <literal>clear()</literal> en la sesión regularmente, para controlar el tamaño del caché de primer nivel."
+
+#: index.docbook:47
+msgid "Batch inserts"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ " if ( i % 20 == 0 ) { //20, same as the JDBC batch size\n"
+ " //flush a batch of inserts and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:49
+msgid "When making new objects persistent, you must <literal>flush()</literal> and then <literal>clear()</literal> the session regularly, to control the size of the first-level cache."
+msgstr "Actualizaciones en lote"
+
+#: index.docbook:55
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ " if ( i % 20 == 0 ) { //20, same as the JDBC batch size\n"
+ " //flush a batch of inserts and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "Para recuperar y actualizar datos se aplican las mismas ideas. Adicionalmente, necesitas usar <literal>scroll()</literal> para sacar ventaja de los cursores del lado del servidor en consultas que devuelvan muchas filas de datos."
+
+#: index.docbook:60
+msgid "Batch updates"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .setCacheMode(CacheMode.IGNORE)\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "int count=0;\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " if ( ++count % 20 == 0 ) {\n"
+ " //flush a batch of updates and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:62
+msgid "For retrieving and updating data the same ideas apply. In addition, you need to use <literal>scroll()</literal> to take advantage of server-side cursors for queries that return many rows of data."
+msgstr "update/delete en masa"
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .setCacheMode(CacheMode.IGNORE)\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "int count=0;\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " if ( ++count % 20 == 0 ) {\n"
+ " //flush a batch of updates and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "Como ya se ha discutido, el mapeo objeto/relacional automático y transparente se refiere al manejo de estado de objetos. Esto implica que el estado del objeto está disponible en memoria, por lo tanto actualizar o borrar (usando <literal>UPDATE</literal> y <literal>DELETE</literal> de SQL) datos directamente en la base de datos no afectará el estado en memoria. Sin embargo, Hibernate provee métodos para la ejecución de sentencias del estilo de <literal>UPDATE</literal> y <literal>DELETE</literal> de SQL que se realizan a través del Lenguaje de Consulta de Hibernate (Hibernate Query Language o <xref linkend=\"queryhql\"/>HQL)."
+
+#: index.docbook:73
+msgid "The StatelessSession interface"
+msgstr "La pseudo-sintáxis para sentencias <literal>UPDATE</literal> y <literal>DELETE</literal> es: <literal>( UPDATE | DELETE ) FROM? ClassName (WHERE WHERE_CONDITIONS)?</literal>. Algunos puntos a tener en cuenta:"
+
+#: index.docbook:74
+msgid "Alternatively, Hibernate provides a command-oriented API that may be used for streaming data to and from the database in the form of detached objects. A <literal>StatelessSession</literal> has no persistence context associated with it and does not provide many of the higher-level life cycle semantics. In particular, a stateless session does not implement a first-level cache nor interact with any second-level or query cache. It does not implement transactional write-behind or automatic dirty checking. Operations performed using a stateless session do not ever cascade to associated instances. Collections are ignored by a stateless session. Operations performed via a stateless session bypass Hibernate's event model and interceptors. Stateless sessions are vulnerable to data aliasing effects, due to the lack of a first-level cache. A stateless session is a lower-level abstraction, much closer to the underlying JDBC."
+msgstr "En la cláusula-from, la palabra clave FROM es opcional"
+
+#: index.docbook:89
+msgid ""
+ "<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " session.update(customer);\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "Puede haber sólo una clase mencionada en la cláusula-from, y <emphasis>no puede</emphasis> tener un alias."
+
+#: index.docbook:91
+msgid "Note that in this code example, the <literal>Customer</literal> instances returned by the query are immediately detached. They are never associated with any persistence context."
+msgstr "No puede especificarse ningún join (bien implÃcito o explÃcito) en una consulta masiva de HQL. Pueden usarse subconsultas en la cláusula-where."
+
+#: index.docbook:97
+msgid "The <literal>insert(), update()</literal> and <literal>delete()</literal> operations defined by the <literal>StatelessSession</literal> interface are considered to be direct database row-level operations, which result in immediate execution of a SQL <literal>INSERT, UPDATE</literal> or <literal>DELETE</literal> respectively. Thus, they have very different semantics to the <literal>save(), saveOrUpdate()</literal> and <literal>delete()</literal> operations defined by the <literal>Session</literal> interface."
+msgstr "La cláusula-where es también opcional."
+
+#: index.docbook:110
+msgid "DML-style operations"
+msgstr "Como un ejemplo, para ejecutar un <literal>UPDATE</literal> HQL, usa el método <literal>Query.executeUpdate()</literal>:"
+
+#: index.docbook:112
+msgid "As already discussed, automatic and transparent object/relational mapping is concerned with the management of object state. This implies that the object state is available in memory, hence manipulating (using the SQL <literal>Data Manipulation Language</literal> (DML) statements: <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>) data directly in the database will not affect in-memory state. However, Hibernate provides methods for bulk SQL-style DML statement execution which are performed through the Hibernate Query Language (<xref linkend=\"queryhql\"/>HQL)."
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ " Transaction tx = session.beginTransaction();\n"
+ "\n"
+ " String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";\n"
+ " int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ " tx.commit();\n"
+ " session.close();]]>"
+
+#: index.docbook:122
+msgid "The pseudo-syntax for <literal>UPDATE</literal> and <literal>DELETE</literal> statements is: <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?</literal>. Some points to note:"
+msgstr "Para ejecutar un <literal>DELETE</literal> HQL, usa el mismo método <literal>Query.executeUpdate()</literal> (el método está nombrado para aquellos familiarizados con <literal>PreparedStatement.executeUpdate()</literal> de JDBC):"
+
+#: index.docbook:130
+msgid "In the from-clause, the FROM keyword is optional"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ " Transaction tx = session.beginTransaction();\n"
+ "\n"
+ " String hqlDelete = \"delete Customer where name = :oldName\";\n"
+ " int deletedEntities = s.createQuery( hqlDelete )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ " tx.commit();\n"
+ " session.close();]]>"
+
+#: index.docbook:135
+msgid "There can only be a single entity named in the from-clause; it can optionally be aliased. If the entity name is aliased, then any property references must be qualified using that alias; if the entity name is not aliased, then it is illegal for any property references to be qualified."
+msgstr "El valor <literal>int</literal> devuelto por el método <literal>Query.executeUpdate()</literal> indica el número de entidades afectadas por la operación. Considera que esto puede o no correlacionarse al número de filas afectadas en la base de datos. Una operación masiva HQL podrÃa resultar en que se ejecuten múltiples sentencias de SQL reales, para joined-subclass, por ejemplo. El número devuelto indica el número de entidades reales afectadas por la sentencia. Volviendo al ejemplo de joined-subclass, un borrado contra una de las subclases puede resultar realmente en borrados contra no sólo la tabla a la que está mapeada esa subclase, sino también la tabla \"raÃz\" y potencialmente tablas de joined-subclass más debajo en la jerarquÃa de herencia."
+
+#: index.docbook:143
+msgid "No <xref linkend=\"queryhql-joins-forms\"/>joins (either implicit or explicit) can be specified in a bulk HQL query. Sub-queries may be used in the where-clause; the subqueries, themselves, may contain joins."
+msgstr "Ten en cuenta que existen actualmente unas pocas limitaciones con las operaciones HQL masivas, que serán atendidas en lanzamientos futuros; consulta la hoja de ruta de JIRA para más detalles."
+
+#: index.docbook:150
+msgid "The where-clause is also optional."
+msgstr ""
+
+#: index.docbook:156
+msgid "As an example, to execute an HQL <literal>UPDATE</literal>, use the <literal>Query.executeUpdate()</literal> method (the method is named for those familiar with JDBC's <literal>PreparedStatement.executeUpdate()</literal>):"
+msgstr ""
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";\n"
+ "// or String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:164
+msgid "HQL <literal>UPDATE</literal> statements, by default do not effect the <xref linkend=\"mapping-declaration-version\"/>version or the <xref linkend=\"mapping-declaration-timestamp\"/>timestamp property values for the affected entities; this is in keeping with the EJB3 specification. However, you can force Hibernate to properly reset the <literal>version</literal> or <literal>timestamp</literal> property values through the use of a <literal>versioned update</literal>. This is achieved by adding the <literal>VERSIONED</literal> keyword after the <literal>UPDATE</literal> keyword."
+msgstr ""
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "String hqlVersionedUpdate = \"update versioned Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:176
+msgid "Note that custom version types (<literal>org.hibernate.usertype.UserVersionType</literal>) are not allowed in conjunction with a <literal>update versioned</literal> statement."
+msgstr ""
+
+#: index.docbook:181
+msgid "To execute an HQL <literal>DELETE</literal>, use the same <literal>Query.executeUpdate()</literal> method:"
+msgstr ""
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlDelete = \"delete Customer c where c.name = :oldName\";\n"
+ "// or String hqlDelete = \"delete Customer where name = :oldName\";\n"
+ "int deletedEntities = s.createQuery( hqlDelete )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:188
+msgid "The <literal>int</literal> value returned by the <literal>Query.executeUpdate()</literal> method indicate the number of entities effected by the operation. Consider this may or may not correlate to the number of rows effected in the database. An HQL bulk operation might result in multiple actual SQL statements being executed, for joined-subclass, for example. The returned number indicates the number of actual entities affected by the statement. Going back to the example of joined-subclass, a delete against one of the subclasses may actually result in deletes against not just the table to which that subclass is mapped, but also the \"root\" table and potentially joined-subclass tables further down the inheritence hierarchy."
+msgstr ""
+
+#: index.docbook:199
+msgid "The pseudo-syntax for <literal>INSERT</literal> statements is: <literal>INSERT INTO EntityName properties_list select_statement</literal>. Some points to note:"
+msgstr ""
+
+#: index.docbook:207
+msgid "Only the INSERT INTO ... SELECT ... form is supported; not the INSERT INTO ... VALUES ... form."
+msgstr ""
+
+#: index.docbook:210
+msgid "The properties_list is analogous to the <literal>column speficiation</literal> in the SQL <literal>INSERT</literal> statement. For entities involved in mapped inheritence, only properties directly defined on that given class-level can be used in the properties_list. Superclass properties are not allowed; and subclass properties do not make sense. In other words, <literal>INSERT</literal> statements are inherently non-polymorphic."
+msgstr ""
+
+#: index.docbook:220
+msgid "select_statement can be any valid HQL select query, with the caveat that the return types must match the types expected by the insert. Currently, this is checked during query compilation rather than allowing the check to relegate to the database. Note however that this might cause problems between Hibernate <literal>Type</literal>s which are <emphasis>equivalent</emphasis> as opposed to <emphasis>equal</emphasis>. This might cause issues with mismatches between a property defined as a <literal>org.hibernate.type.DateType</literal> and a property defined as a <literal>org.hibernate.type.TimestampType</literal>, even though the database might not make a distinction or might be able to handle the conversion."
+msgstr ""
+
+#: index.docbook:232
+msgid "For the id property, the insert statement gives you two options. You can either explicitly specify the id property in the properties_list (in which case its value is taken from the corresponding select expression) or omit it from the properties_list (in which case a generated value is used). This later option is only available when using id generators that operate in the database; attempting to use this option with any \"in memory\" type generators will cause an exception during parsing. Note that for the purposes of this discussion, in-database generators are considered to be <literal>org.hibernate.id.SequenceGenerator</literal> (and its subclasses) and any implementors of <literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>. The most notable exception here is <literal>org.hibernate.id.TableHiLoGenerator</literal>, which cannot be used because it does not expose a selectable way to get its values."
+msgstr ""
+
+#: index.docbook:247
+msgid "For properties mapped as either <literal>version</literal> or <literal>timestamp</literal>, the insert statement gives you two options. You can either specify the property in the properties_list (in which case its value is taken from the corresponding select expressions) or omit it from the properties_list (in which case the <literal>seed value</literal> defined by the <literal>org.hibernate.type.VersionType</literal> is used)."
+msgstr ""
+
+#: index.docbook:257
+msgid "An example HQL <literal>INSERT</literal> statement execution:"
+msgstr ""
+
+#: index.docbook:261
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";\n"
+ "int createdEntities = s.createQuery( hqlInsert )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/best_practices.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/best_practices.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/best_practices.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,168 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Best Practices"
+msgstr "Mejores Prácticas"
+
+#: index.docbook:9
+msgid "Write fine-grained classes and map them using <literal><component></literal>."
+msgstr "Escribe clase finamente granularizadas y mapealas usando <literal><component></literal>."
+
+#: index.docbook:11
+msgid "Use an <literal>Address</literal> class to encapsulate <literal>street</literal>, <literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>. This encourages code reuse and simplifies refactoring."
+msgstr "Usa una clase <literal>Dirección</literal> para encapsular <literal>calle</literal>, <literal>distrito</literal>, <literal>estado</literal>, <literal>código postal</literal>. Esto alienta la reutilización de código y simplifica el refactoring."
+
+#: index.docbook:19
+msgid "Declare identifier properties on persistent classes."
+msgstr "Declara las propiedades identificadoras en clases persistentes."
+
+#: index.docbook:21
+msgid "Hibernate makes identifier properties optional. There are all sorts of reasons why you should use them. We recommend that identifiers be 'synthetic' (generated, with no business meaning)."
+msgstr "Hibernate hace opcionales las propiedades identificadoras. Existen todo tipo de razones por las que debes usarlas. Recomendamos que los identificadores sean 'sintéticos' (generados, sin ningún significado de negocio)."
+
+#: index.docbook:29
+msgid "Identify natural keys."
+msgstr "Identifica las claves naturales."
+
+#: index.docbook:31
+msgid "Identify natural keys for all entities, and map them using <literal><natural-id></literal>. Implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the properties that make up the natural key."
+msgstr "Identifica las claves naturales de todas las entidades, y mapealas usando <literal><natural-id></literal>. Implementa <literal>equals()</literal> y <literal>hashCode()</literal> para comparar las propiedades que componen la clave natural."
+
+#: index.docbook:39
+msgid "Place each class mapping in its own file."
+msgstr "Coloca cada mapeo de clase en su propio fichero."
+
+#: index.docbook:41
+msgid "Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</literal> in the file <literal>com/eg/Foo.hbm.xml</literal>. This makes particularly good sense in a team environment."
+msgstr "No uses un solo documento monolítico de mapeo. Mapea <literal>com.eg.Foo</literal> en el fichero <literal>com/eg/Foo.hbm.xml</literal>. Esto tiene sentido particularmente en un ambiente de equipo."
+
+#: index.docbook:49
+msgid "Load mappings as resources."
+msgstr "Carga los mapeos como recursos."
+
+#: index.docbook:51
+msgid "Deploy the mappings along with the classes they map."
+msgstr "Despliega los mapeos junto a las clases que mapean."
+
+#: index.docbook:57
+msgid "Consider externalising query strings."
+msgstr "Considera externalizar las cadenas de consulta."
+
+#: index.docbook:59
+msgid "This is a good practice if your queries call non-ANSI-standard SQL functions. Externalising the query strings to mapping files will make the application more portable."
+msgstr "Esta es una buena práctica si tus consultas llaman a funciones SQL que no son del estándar ANSI. Externalizar las cadenas de consulta a ficheros de mapeo hará la aplicación más portable."
+
+#: index.docbook:67
+msgid "Use bind variables."
+msgstr "Usa variables de ligado."
+
+#: index.docbook:69
+msgid "As in JDBC, always replace non-constant values by \"?\". Never use string manipulation to bind a non-constant value in a query! Even better, consider using named parameters in queries."
+msgstr "Igual que en JDBC, siempre remplaza valores no constantes con \"?\". ¡Nunca uses manipulación de cadenas para ligar un valor no constante en una consulta! Incluso mejor, considera usar parámetros con nombre en las consultas."
+
+#: index.docbook:77
+msgid "Don't manage your own JDBC connections."
+msgstr "No manejes tus propias conexiones JDBC."
+
+#: index.docbook:79
+msgid "Hibernate lets the application manage JDBC connections. This approach should be considered a last-resort. If you can't use the built-in connections providers, consider providing your own implementation of <literal>org.hibernate.connection.ConnectionProvider</literal>."
+msgstr "Hibernate deja a la aplicación administre las conexiones JDBC. Este enfoque debe considerarse como último recurso. Si no puedes usar los provedores de conexión prefabricados, considera prover tu propia implementación de <literal>org.hibernate.connection.ConnectionProvider</literal>."
+
+#: index.docbook:87
+msgid "Consider using a custom type."
+msgstr "Considera usar un tipo personalizado."
+
+#: index.docbook:89
+msgid "Suppose you have a Java type, say from some library, that needs to be persisted but doesn't provide the accessors needed to map it as a component. You should consider implementing <literal>org.hibernate.UserType</literal>. This approach frees the application code from implementing transformations to / from a Hibernate type."
+msgstr "Supón que tienes un tipo Java, digamos de alguna biblioteca, que necesita hacerse persistente pero no provee los métodos de acceso necesarios para mapearlo como un componente. Debes considerar implementar <literal>org.hibernate.UserType</literal>. Este enfoque libera al código de aplicación de implementar transformaciones a / desde un tipo Hibernate."
+
+#: index.docbook:98
+msgid "Use hand-coded JDBC in bottlenecks."
+msgstr "Usa JDBC codificado a mano en cuellos de botella."
+
+#: index.docbook:100
+msgid "In performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. But please, wait until you <emphasis>know</emphasis> something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If you need to use direct JDBC, it might be worth opening a Hibernate <literal>Session</literal> and using that JDBC connection. That way you can still use the same transaction strategy and underlying connection provider."
+msgstr "En áreas del sistema de rendimiento crítico, algunos tipos de operaciones podrían beneficiarse del JDBC directo. Pero por favor, espero hasta que <emphasis>sepas</emphasis> que algo es un cuello de botella. Y no asumas que el JDBC directo es necesariamente más rápido. Si necesitas usar JDBC directo, podría ser valioso abrir una <literal>Session</literal> de Hibernate y usar esa conexión JDBC. De esta forma puedes usar aún la misma estrategia de transacción y el mismo proveedor de conexiones subyacente."
+
+#: index.docbook:110
+msgid "Understand <literal>Session</literal> flushing."
+msgstr "Comprende la limpieza (flushing) de <literal>Session</literal>."
+
+#: index.docbook:112
+msgid "From time to time the Session synchronizes its persistent state with the database. Performance will be affected if this process occurs too often. You may sometimes minimize unnecessary flushing by disabling automatic flushing or even by changing the order of queries and other operations within a particular transaction."
+msgstr "De vez en cuando la sesión sincroniza su estado persistente con la base de datos. El rendimiento se verá afectado si este proceso ocurre demasiado frecuentemente. A veces puedes minimizar limpieza innecesaria deshabilitando la limpieza automática o incluso cambiando el orden de las consultas u otras operaciones en una transacción en particular."
+
+#: index.docbook:121
+msgid "In a three tiered architecture, consider using detached objects."
+msgstr "En una aplicación en tres gradas, considera usar objetos separados."
+
+#: index.docbook:123
+msgid "When using a servlet / session bean architecture, you could pass persistent objects loaded in the session bean to and from the servlet / JSP layer. Use a new session to service each request. Use <literal>Session.merge()</literal> or <literal>Session.saveOrUpdate()</literal> to synchronize objects with the database."
+msgstr "Al usar una arquitectura de servlet / sesión, puedes pasar objetos persistentes en el bean de sesión hacia y desde la capa de servlet / JSP. Usa una sesión nueva para atender el servicio de cada petición. Usa <literal>Session.merge()</literal> o <literal>Session.saveOrUpdate()</literal> para sincronizar los objetos con la base de datos."
+
+#: index.docbook:132
+msgid "In a two tiered architecture, consider using long persistence contexts."
+msgstr "En una arquitectura en dos gradas, considera usar contexto de persistencia largos."
+
+#: index.docbook:134
+msgid "Database Transactions have to be as short as possible for best scalability. However, it is often neccessary to implement long running <emphasis>application transactions</emphasis>, a single unit-of-work from the point of view of a user. An application transaction might span several client request/response cycles. It is common to use detached objects to implement application transactions. An alternative, extremely appropriate in two tiered architecture, is to maintain a single open persistence contact (session) for the whole life cycle of the application transaction and simply disconnect from the JDBC connection at the end of each request and reconnect at the beginning of the subsequent request. Never share a single session across more than one application transaction, or you will be working with stale data."
+msgstr "Las transacciones de base de datos tienen que ser tan cortas como sea posible. Sin embargo, frecuentemente es necesario implementar <emphasis>transacciones de aplicación</emphasis> ejecutándose en largo, una sola unidad de trabajo desde el punto de vista de un usuario. Una transacción de aplicación puede abarcar muchos ciclos petición/respuesta del cliente. Es común usar objetos separados para implementar transacciones de aplicación. Una alternativa, extremadamente apropiada en arquitecturas en dos gradas, es mantener un solo contacto de persistencia abierto (sesión) para todo el ciclo de vida de la transacción de aplicación y simplemente desconectar de la conexión JDBC al final de cada petición, y reconectar al comienzo de la petición subsecuente. Nunca compartas una única sesión a través de más de una transacción de aplicación, o est!
arás trabajando con datos añejos."
+
+#: index.docbook:148
+msgid "Don't treat exceptions as recoverable."
+msgstr "No trates la excepciones como recuperables."
+
+#: index.docbook:150
+msgid "This is more of a necessary practice than a \"best\" practice. When an exception occurs, roll back the <literal>Transaction</literal> and close the <literal>Session</literal>. If you don't, Hibernate can't guarantee that in-memory state accurately represents persistent state. As a special case of this, do not use <literal>Session.load()</literal> to determine if an instance with the given identifier exists on the database; use <literal>Session.get()</literal> or a query instead."
+msgstr "Esto es más una práctica necesaria que una \"mejor\" práctica. Cuando ocurra una excepción, deshaz (rollback) la <literal>Transaction</literal> y cierra la <literal>Session</literal>. Si no lo haces, Hibernate no puede garantizar que el estado en memoria representa con exactitud el estado persistente. Como un caso especial de esto, no uses <literal>Session.load()</literal> para determinar si una instancia con el identificador dado existe en la base de datos. En cambio, usa <literal>Session.get()</literal> o una consulta."
+
+#: index.docbook:160
+msgid "Prefer lazy fetching for associations."
+msgstr "Prefiere la recuperación perezosa para las asociaciones."
+
+#: index.docbook:162
+msgid "Use eager fetching sparingly. Use proxies and lazy collections for most associations to classes that are not likely to be completely held in the second-level cache. For associations to cached classes, where there is an a extremely high probability of a cache hit, explicitly disable eager fetching using <literal>lazy=\"false\"</literal>. When an join fetching is appropriate to a particular use case, use a query with a <literal>left join fetch</literal>."
+msgstr "Usa escasamente la recuperación temprana. Usa proxies y colecciones perezosas para la mayoría de asociaciones a clases probablemente no estén mantenidas en el caché de segundo nivel. Para las asociaciones a clases en caché, donde hay una probabilidad de acceso a caché extremadamente alta, deshabilita explícitamente la recuperación temprana usando <literal>lazy=\"false\"</literal>. Cuando sea apropiada la recuperación por unión (join fetching) para un caso de uso en particular, usa una consulta con un <literal>left join fetch</literal>."
+
+#: index.docbook:172
+msgid "Use the <emphasis>open session in view</emphasis> pattern, or a disciplined <emphasis>assembly phase</emphasis> to avoid problems with unfetched data."
+msgstr "Usa el patrón <emphasis>sesión abierta en vista</emphasis>, o una <emphasis>fase de ensamblado</emphasis> disciplinada para evitar problemas con datos no recuperados."
+
+#: index.docbook:177
+msgid "Hibernate frees the developer from writing tedious <emphasis>Data Transfer Objects</emphasis> (DTO). In a traditional EJB architecture, DTOs serve dual purposes: first, they work around the problem that entity beans are not serializable; second, they implicitly define an assembly phase where all data to be used by the view is fetched and marshalled into the DTOs before returning control to the presentation tier. Hibernate eliminates the first purpose. However, you will still need an assembly phase (think of your business methods as having a strict contract with the presentation tier about what data is available in the detached objects) unless you are prepared to hold the persistence context (the session) open across the view rendering process. This is not a limitation of Hibernate! It is a fundamental requirement of safe transactional data access."
+msgstr "Hibernate liberal al desarrollador de escribir <emphasis>Objetos de Transferencia de Datos (Data Transfer Objects)</emphasis> (DTO). En una arquitectura tradicional de EJB, los DTOs tienen un propósito doble: primero, atacan el problema que los beans de entidad no son serializables. Segundo, definen implícitamente una fase de ensamblado cuando se recuperan y se forman (marshalling) todos los datos a usar por la vista en los DTOs antes de devolver el control a la grada de presentación. Hibernate elimina el primer propósito. Sin embargo, aún necesitas una fase de ensamblado (piensa en tus métodos de negocio como si tuviesen un contrato estricto con la grada de presentación sobre qué datos están disponibles en los objetos separados) a menos que estés preparado para tener el contexto de persistencia (la sesión) abierto a través del proceso de renderización de la vista. ¡Est!
a no es una limitación de Hibernate! Es un requerimiento fundamental de acceso seguro a datos transaccionales."
+
+#: index.docbook:191
+msgid "Consider abstracting your business logic from Hibernate."
+msgstr "Considera abstraer tu lógica de negocio de Hibernate"
+
+#: index.docbook:193
+msgid "Hide (Hibernate) data-access code behind an interface. Combine the <emphasis>DAO</emphasis> and <emphasis>Thread Local Session</emphasis> patterns. You can even have some classes persisted by handcoded JDBC, associated to Hibernate via a <literal>UserType</literal>. (This advice is intended for \"sufficiently large\" applications; it is not appropriate for an application with five tables!)"
+msgstr "Oculta el código de acceso a datos (Hibernate) detrás de una interface. Combina los patrones <emphasis>DAO</emphasis> y <emphasis>Sesión de Hebra Local</emphasis>. Incluso puedes tener algunas clases hechas persistentes por JDBC escrito a mano, asociadas a Hibernate por medio de un <literal>UserType</literal>. (Este consejo está pensado para aplicaciones \"suficientemente grandes\"; ¡no es apropiado para una aplicación con cinco tablas!)"
+
+#: index.docbook:203
+msgid "Don't use exotic association mappings."
+msgstr "No uses mapeos de asociación exóticos."
+
+#: index.docbook:205
+msgid "Good usecases for a real many-to-many associations are rare. Most of the time you need additional information stored in the \"link table\". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, we think that most associations are one-to-many and many-to-one, you should be careful when using any other association style and ask yourself if it is really neccessary."
+msgstr "Son raros los casos de uso de asociaciones reales muchos-a-muchos. La mayor parte del tiempo necesitas información adicional almacenada en una \"tabla de enlace\". En este caso, es mucho mejor usar dos asociaciones uno-a-muchos a una clase de enlace intermedia. De hecho, pensamos que la mayoría de asociaciones son uno-a-muchos y muchos-a-uno, debes ser cuidadoso al usr cualquier otro estilo de asociación y preguntarte si es realmente necesario."
+
+#: index.docbook:215
+msgid "Prefer bidirectional associations."
+msgstr "Prefiere las asociaciones bidireccionales."
+
+#: index.docbook:217
+msgid "Unidirectional associations are more difficult to query. In a large application, almost all associations must be navigable in both directions in queries."
+msgstr "Las asociaciones unidireccionales son más difíciles de consultar. En una aplicación grande, casi todas las asociaciones deben ser navegables en ambas direcciones en consultas."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/collection_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/collection_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/collection_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1285 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Collection Mapping"
+msgstr "Mapeo de Colecciones"
+
+#: index.docbook:8
+msgid "Persistent collections"
+msgstr "Colecciones persistentes"
+
+#: index.docbook:10
+msgid "Hibernate requires that persistent collection-valued fields be declared as an interface type, for example:"
+msgstr "Hibernate requiere que los campos valuados en colección persistentes sean declarados como un tipo de interface, por ejemplo:"
+
+#: index.docbook:15
+msgid ""
+ "<![CDATA[public class Product {\n"
+ " private String serialNumber;\n"
+ " private Set parts = new HashSet();\n"
+ " \n"
+ " public Set getParts() { return parts; }\n"
+ " void setParts(Set parts) { this.parts = parts; }\n"
+ " public String getSerialNumber() { return serialNumber; }\n"
+ " void setSerialNumber(String sn) { serialNumber = sn; }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Product {\n"
+ " private String serialNumber;\n"
+ " private Set parts = new HashSet();\n"
+ " \n"
+ " public Set getParts() { return parts; }\n"
+ " void setParts(Set parts) { this.parts = parts; }\n"
+ " public String getSerialNumber() { return serialNumber; }\n"
+ " void setSerialNumber(String sn) { serialNumber = sn; }\n"
+ "}]]>"
+
+#: index.docbook:17
+msgid "The actual interface might be <literal>java.util.Set</literal>, <literal>java.util.Collection</literal>, <literal>java.util.List</literal>, <literal>java.util.Map</literal>, <literal>java.util.SortedSet</literal>, <literal>java.util.SortedMap</literal> or ... anything you like! (Where \"anything you like\" means you will have to write an implementation of <literal>org.hibernate.usertype.UserCollectionType</literal>.)"
+msgstr "La interface real podría ser <literal>java.util.Set</literal>, <literal>java.util.Collection</literal>, <literal>java.util.List</literal>, <literal>java.util.Map</literal>, <literal>java.util.SortedSet</literal>, <literal>java.util.SortedMap</literal> o ... lo que te guste! (Donde \"lo que te guste\" significa que tendrás que escribir una implementación de <literal>org.hibernate.usertype.UserCollectionType</literal>.)"
+
+#: index.docbook:26
+msgid "Notice how we initialized the instance variable with an instance of <literal>HashSet</literal>. This is the best way to initialize collection valued properties of newly instantiated (non-persistent) instances. When you make the instance persistent - by calling <literal>persist()</literal>, for example - Hibernate will actually replace the <literal>HashSet</literal> with an instance of Hibernate's own implementation of <literal>Set</literal>. Watch out for errors like this:"
+msgstr "Nota cómo hemos inicializado la variable de instancia de <literal>HashSet</literal>. Esta es la mejor forma de inicializar propiedades valuadas en colección de instancias recién instanciadas (no persistentes). Cuando haces persistente la instancia - llamando a <literal>persist()</literal>, por ejemplo - Hibernate realmente remplazará el <literal>HashSet</literal> con una instancia de una implementación de <literal>Set</literal> propia de Hibernate. Observa errores como este:"
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "Cat kitten = new DomesticCat();\n"
+ "....\n"
+ "Set kittens = new HashSet();\n"
+ "kittens.add(kitten);\n"
+ "cat.setKittens(kittens);\n"
+ "session.persist(cat);\n"
+ "kittens = cat.getKittens(); // Okay, kittens collection is a Set\n"
+ "(HashSet) cat.getKittens(); // Error!]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "Cat kitten = new DomesticCat();\n"
+ "....\n"
+ "Set kittens = new HashSet();\n"
+ "kittens.add(kitten);\n"
+ "cat.setKittens(kittens);\n"
+ "session.persist(cat);\n"
+ "kittens = cat.getKittens(); // Okay, kittens collection is a Set\n"
+ "(HashSet) cat.getKittens(); // Error!]]>"
+
+#: index.docbook:38
+msgid "The persistent collections injected by Hibernate behave like <literal>HashMap</literal>, <literal>HashSet</literal>, <literal>TreeMap</literal>, <literal>TreeSet</literal> or <literal>ArrayList</literal>, depending upon the interface type."
+msgstr "Las colecciones persistentes inyectadas por Hibernate se comportan como <literal>HashMap</literal>, <literal>HashSet</literal>, <literal>TreeMap</literal>, <literal>TreeSet</literal> o <literal>ArrayList</literal>, dependiendo del tipo de interface."
+
+#: index.docbook:45
+msgid "Collections instances have the usual behavior of value types. They are automatically persisted when referenced by a persistent object and automatically deleted when unreferenced. If a collection is passed from one persistent object to another, its elements might be moved from one table to another. Two entities may not share a reference to the same collection instance. Due to the underlying relational model, collection-valued properties do not support null value semantics; Hibernate does not distinguish between a null collection reference and an empty collection."
+msgstr "Las instancias de colecciones tienen el comportamiento usual de tipos de valor. Son automáticamente persistidas al ser referenciadas por un objeto persistente y automáticamente borradas al desreferenciarse. Si una colección es pasada de un objeto persistente a otro, sus elementos serían movidos de una tabla a otra. Dos entidades pueden no compartir una referencia a la misma instancia de colección. Debido al modelo relacional subyacente, las propiedades valuadas en colección no soportan la semántica de valor nulo. Hibernate no distingue entre una referencia de colección nula y una colección vacía."
+
+#: index.docbook:56
+msgid "You shouldn't have to worry much about any of this. Use persistent collections the same way you use ordinary Java collections. Just make sure you understand the semantics of bidirectional associations (discussed later)."
+msgstr "No debes tener que preocuparte demasiado por esto. Usa las colecciones persistentes de la misma forma en que usas colecciones de Java ordinarias. Sólo asegúrate que entiendes la semántica de las asociaciones bidireccionales (discutida luego)."
+
+#: index.docbook:65
+msgid "Collection mappings"
+msgstr "Mapeos de colección"
+
+#: index.docbook:67
+msgid "The Hibernate mapping element used for mapping a collection depends upon the type of the interface. For example, a <literal><set></literal> element is used for mapping properties of type <literal>Set</literal>."
+msgstr "El elemento de mapeo de Hibernate usado para mapear una colección depende del tipo de la interface. Por ejemplom un elemento <literal><set></literal> se usa para mapear propiedades de tipo <literal>Set</literal>."
+
+#: index.docbook:73
+msgid ""
+ "<![CDATA[<class name=\"Product\">\n"
+ " <id name=\"serialNumber\" column=\"productSerialNumber\"/>\n"
+ " <set name=\"parts\">\n"
+ " <key column=\"productSerialNumber\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Product\">\n"
+ " <id name=\"serialNumber\" column=\"productSerialNumber\"/>\n"
+ " <set name=\"parts\">\n"
+ " <key column=\"productSerialNumber\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:75
+msgid "Apart from <literal><set></literal>, there is also <literal><list></literal>, <literal><map></literal>, <literal><bag></literal>, <literal><array></literal> and <literal><primitive-array></literal> mapping elements. The <literal><map></literal> element is representative:"
+msgstr "Aparte de <literal><set></literal>, existen además los elementos de mapeo <literal><list></literal>, <literal><map></literal>, <literal><bag></literal>, <literal><array></literal> y <literal><primitive-array></literal>. El elemento <literal><map></literal> es representativo:"
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<map\n"
+ " name=\"propertyName\"\n"
+ " table=\"table_name\"\n"
+ " schema=\"schema_name\"\n"
+ " lazy=\"true|extra|false\"\n"
+ " inverse=\"true|false\"\n"
+ " cascade=\"all|none|save-update|delete|all-delete-orphan|delete-orphan\"\n"
+ " sort=\"unsorted|natural|comparatorClass\"\n"
+ " order-by=\"column_name asc|desc\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " fetch=\"join|select|subselect\"\n"
+ " batch-size=\"N\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " mutable=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <key .... />\n"
+ " <map-key .... />\n"
+ " <element .... />\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map\n"
+ " name=\"propertyName\"\n"
+ " table=\"table_name\"\n"
+ " schema=\"schema_name\"\n"
+ " lazy=\"true|false\"\n"
+ " inverse=\"true|false\"\n"
+ " cascade=\"all|none|save-update|delete|all-delete-orphan\"\n"
+ " sort=\"unsorted|natural|comparatorClass\"\n"
+ " order-by=\"column_name asc|desc\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " fetch=\"join|select|subselect\"\n"
+ " batch-size=\"N\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <key .... />\n"
+ " <map-key .... />\n"
+ " <element .... />\n"
+ "</map>]]>"
+
+#: index.docbook:103
+msgid "<literal>name</literal> the collection property name"
+msgstr "<literal>name</literal> el nombre de la propiedad de colección"
+
+#: index.docbook:108
+msgid "<literal>table</literal> (optional - defaults to property name) the name of the collection table (not used for one-to-many associations)"
+msgstr "<literal>table</literal> (opcional - por defecto al nombre de la propiedad) el nombre de la tabla de coleciión (no usado para asociaciones uno-a-muchos)"
+
+#: index.docbook:114
+msgid "<literal>schema</literal> (optional) the name of a table schema to override the schema declared on the root element"
+msgstr "<literal>schema</literal> (opcional) el nombre de un esquema de tablas para sobrescribir el esquema declarado en el elemento raíz"
+
+#: index.docbook:120
+msgid "<literal>lazy</literal> (optional - defaults to <literal>true</literal>) may be used to disable lazy fetching and specify that the association is always eagerly fetched, or to enable \"extra-lazy\" fetching where most operations do not initialize the collection (suitable for very large collections)"
+msgstr "<literal>lazy</literal> (opcional - por defecto a <literal>true</literal>) puede ser usado para deshabilitar la recuperación perezosa y especificar que la asociación es siempre recuperada tempranamente (no disponible para arrays)"
+
+#: index.docbook:129
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>) mark this collection as the \"inverse\" end of a bidirectional association"
+msgstr "<literal>inverse</literal> (opcional - por defecto a <literal>false</literal>) marca esta colección como el extremo \"inverso\" de una asociación bidireccional."
+
+#: index.docbook:135
+msgid "<literal>cascade</literal> (optional - defaults to <literal>none</literal>) enable operations to cascade to child entities"
+msgstr "<literal>cascade</literal> (opcional - por defecto a <literal>none</literal>) habilita operaciones en cascada a entidades hijas"
+
+#: index.docbook:141
+msgid "<literal>sort</literal> (optional) specify a sorted collection with <literal>natural</literal> sort order, or a given comparator class"
+msgstr "<literal>sort</literal> (opcional) especifica una colección con ordenamiento <literal>natural</literal>, o una clase comparadora dada"
+
+#: index.docbook:147
+msgid "<literal>order-by</literal> (optional, JDK1.4 only) specify a table column (or columns) that define the iteration order of the <literal>Map</literal>, <literal>Set</literal> or bag, together with an optional <literal>asc</literal> or <literal>desc</literal>"
+msgstr "<literal>order-by</literal> (opcional, sólo JDK1.4) especifica una columna de tabla (o columnas) que definen el orden de iteración del <literal>Map</literal>, <literal>Set</literal> o bag, junto a un <literal>asc</literal> o <literal>desc</literal> opcional."
+
+#: index.docbook:154
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving or removing the collection (useful if the collection should contain only a subset of the available data)"
+msgstr "<literal>where</literal> (opcional) especifica una condición <literal>WHERE</literal> de SQL arbitrario para ser usada al recuperar o quitar la colección (útil si la colección debe contener sólo un subconjunto de los datos disponibles)"
+
+#: index.docbook:161
+msgid "<literal>fetch</literal> (optional, defaults to <literal>select</literal>) Choose between outer-join fetching, fetching by sequential select, and fetching by sequential subselect."
+msgstr "<literal>fetch</literal> (opcional, por defecto a <literal>select</literal>) Elige entre recuperación por unión externa (outer-join), recuperar por selección secuencial, y recuperación por subselección secuencial."
+
+#: index.docbook:168
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for lazily fetching instances of this collection."
+msgstr "<literal>batch-size</literal> (opcional, por defecto a <literal>1</literal>) especifica un \"tamaño de lote\" para la recuperar perezosamente instancias de esta colección."
+
+#: index.docbook:174
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the collection property value."
+msgstr "<literal>access</literal> (opcional - por defecto a <literal>property</literal>): La estrategia que debe usar Hibernate para acceder al valor de la propiedad."
+
+#: index.docbook:180
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Species that changes to the state of the collection results in increment of the owning entity's version. (For one to many associations, it is often reasonable to disable this setting.)"
+msgstr "<literal>optimistic-lock</literal> (opcional - por defecto a <literal>true</literal>): Especifica que los cambios de estado de la colección resultan en incrementos de versión de la entidad dueña. (Para asociaciones uno a muchos, frecuentemente es razonable deshabilitar esta opción.)"
+
+#: index.docbook:188
+msgid "<literal>mutable</literal> (optional - defaults to <literal>true</literal>): A value of <literal>false</literal> specifies that the elements of the collection never change (a minor performance optimization in some cases)."
+msgstr "Claves foráneas de collección"
+
+#: index.docbook:198
+msgid "Collection foreign keys"
+msgstr "Las instancias de colección se distinguen en la base de datos por la clave foránea de la entidad que posee la colección. Se hace referencia a esta clave foránea como la <emphasis>columna clave de colección</emphasis> (o columnas) de la tabla de colección. La columna clave de la colección es mapeada por el elemento <literal><key></literal>."
+
+#: index.docbook:200
+msgid "Collection instances are distinguished in the database by the foreign key of the entity that owns the collection. This foreign key is referred to as the <emphasis>collection key column</emphasis> (or columns) of the collection table. The collection key column is mapped by the <literal><key></literal> element."
+msgstr "Puede haber una restricción de nulabilidad sobre la columna de clave foránea. Para la mayoría de colecciones, esto está implicado. Para asociaciones unidireccionales uno a muchos, la columna de clave foránea es nulable por defecto, de modo que podrías necesitar especificar <literal>not-null=\"true\"</literal>."
+
+#: index.docbook:208
+msgid "There may be a nullability constraint on the foreign key column. For most collections, this is implied. For unidirectional one to many associations, the foreign key column is nullable by default, so you might need to specify <literal>not-null=\"true\"</literal>."
+msgstr "<![CDATA[<key column=\"productSerialNumber\" not-null=\"true\"/>]]>"
+
+#: index.docbook:215
+msgid "<![CDATA[<key column=\"productSerialNumber\" not-null=\"true\"/>]]>"
+msgstr "La restricción de clave foránea puede usar <literal>ON DELETE CASCADE</literal>."
+
+#: index.docbook:217
+msgid "The foreign key constraint may use <literal>ON DELETE CASCADE</literal>."
+msgstr "<![CDATA[<key column=\"productSerialNumber\" on-delete=\"cascade\"/>]]>"
+
+#: index.docbook:221
+msgid "<![CDATA[<key column=\"productSerialNumber\" on-delete=\"cascade\"/>]]>"
+msgstr "Mira el capítulo anterior por una definición completa del elemento <literal><key></literal>."
+
+#: index.docbook:223
+msgid "See the previous chapter for a full definition of the <literal><key></literal> element."
+msgstr "Elementos de collección"
+
+#: index.docbook:231
+msgid "Collection elements"
+msgstr "Las colecciones pueden contener casi cualquier tipo de Hibernate, incluyendo todos los tipos básicos, componentes, y por supuesto, referencias a otras entidades. Esta es una distinción importante: un objeto en una colección puede ser manejado con una semántica de \"valor\" (su ciclo de vida depende completamente del propietario de la colección) o podría ser una referencia a otra entidad, con su propio ciclo de vida. En el último caso, sólo el estado del \"enlace\" entre los dos objetos se considera mantenido por la colección."
+
+#: index.docbook:233
+msgid "Collections may contain almost any other Hibernate type, including all basic types, custom types, components, and of course, references to other entities. This is an important distinction: an object in a collection might be handled with \"value\" semantics (its life cycle fully depends on the collection owner) or it might be a reference to another entity, with its own life cycle. In the latter case, only the \"link\" between the two objects is considered to be state held by the collection."
+msgstr "Se hace referencia al tipo contenido como el <emphasis>tipo de elemento de la colección</emphasis>. Los elementos de colección son mapeados por <literal><element></literal> o <literal><composite-element></literal>, o en el caso de referencias de entidades, con <literal><one-to-many></literal> o <literal><many-to-many></literal>. Las dos primeras mapean elementos con semántica de valor, los dos siguientes son usados para mapear asociaciones de entidades."
+
+#: index.docbook:242
+msgid "The contained type is referred to as the <emphasis>collection element type</emphasis>. Collection elements are mapped by <literal><element></literal> or <literal><composite-element></literal>, or in the case of entity references, with <literal><one-to-many></literal> or <literal><many-to-many></literal>. The first two map elements with value semantics, the next two are used to map entity associations."
+msgstr "Colecciones indexadas"
+
+#: index.docbook:254
+msgid "Indexed collections"
+msgstr "Todos los mapeos de colección, excepto aquellos con semántica de set o bag, necesitan una <emphasis>columna índice</emphasis> en la tabla de colección, una columna que mapea a un índice de array, o índice de <literal>List</literal>, o clave de <literal>Map</literal>. El índice de un <literal>Map</literal> puede ser de cualquier tipo básico, mapeado con <literal><map-key></literal>, o puede ser una referencia de entidad, mapeada con <literal><map-key-many-to-many></literal>, o puede ser un tipo compuesto, mapeado con <literal><composite-map-key></literal>. El índice de un array o lista es siempre de tipo <literal>integer</literal> y se mapea usando el elemento <literal><list-index></literal>. La columna mapeada contiene enteros secuenciales (numerados desde cero, por defecto)."
+
+#: index.docbook:256
+msgid "All collection mappings, except those with set and bag semantics, need an <emphasis>index column</emphasis> in the collection table - a column that maps to an array index, or <literal>List</literal> index, or <literal>Map</literal> key. The index of a <literal>Map</literal> may be of any basic type, mapped with <literal><map-key></literal>, it may be an entity reference mapped with <literal><map-key-many-to-many></literal>, or it may be a composite type, mapped with <literal><composite-map-key></literal>. The index of an array or list is always of type <literal>integer</literal> and is mapped using the <literal><list-index></literal> element. The mapped column contains sequential integers (numbered from zero, by default)."
+msgstr ""
+ "<programlistingco> <areaspec> <area id=\"index1\" coords=\"2 45\"/> <area id=\"index2\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<list-index \n"
+ " column=\"column_name\"\n"
+ " base=\"0|1|...\"/>]]></programlisting> <calloutlist> <callout arearefs=\"index1\"> <para> <literal>column_name</literal> (requerido): El nombre de la columna que tiene los valores índice de la colección. </para> </callout> <callout arearefs=\"index1\"> <para> <literal>base</literal> (opcional, por defecto a <literal>0</literal>): El valor de la columna índice que corresponde al primer elemento de la lista o array. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"mapkey1\" coords=\"2 45\"/> <area id=\"mapkey2\" coords=\"3 45\"/> <area id=\"mapkey3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key \n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"type_name\"\n"
+ " node=\"@attribute-name\"\n"
+ " length=\"N\"/>]]></programlisting> <calloutlist> <callout arearefs=\"mapkey1\"> <para> <literal>column</literal> (opcional): El nombre de la columna que tiene los valores índice de la colección. </para> </callout> <callout arearefs=\"mapkey2\"> <para> <literal>formula</literal> (opcional): Una fórmula SQL usada para evaluar la clave del mapa. </para> </callout> <callout arearefs=\"mapkey3\"> <para> <literal>type</literal> (requerido): el tipo de las claves del mapa. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"indexmanytomany1\" coords=\"2 45\"/> <area id=\"indexmanytomany2\" coords=\"3 45\"/> <area id=\"indexmanytomany3\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<map-key-many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"indexmanytomany1\"> <para> <literal>column</literal> (opcional): El nombre de la columna clave foránea para los valores índice de la colección. </para> </callout> <callout arearefs=\"indexmanytomany2\"> <para> <literal>formula</literal> (opcional): Una fórmula SQL usada para evaluar la clave foránea de la clave del mapa. </para> </callout> <callout arearefs=\"indexmanytomany3\"> <para> <literal>class</literal> (requerido): La clase de entidad usada como clave del mapa. </para> </callout> </calloutlist> </programlistingco>"
+
+#: index.docbook:267
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"index1\" coords=\"2 45\"/> <area id=\"index2\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<list-index \n"
+ " column=\"column_name\"\n"
+ " base=\"0|1|...\"/>]]></programlisting> <calloutlist> <callout arearefs=\"index1\"> <para> <literal>column_name</literal> (required): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"index1\"> <para> <literal>base</literal> (optional, defaults to <literal>0</literal>): The value of the index column that corresponds to the first element of the list or array. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"mapkey1\" coords=\"2 45\"/> <area id=\"mapkey2\" coords=\"3 45\"/> <area id=\"mapkey3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key \n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"type_name\"\n"
+ " node=\"@attribute-name\"\n"
+ " length=\"N\"/>]]></programlisting> <calloutlist> <callout arearefs=\"mapkey1\"> <para> <literal>column</literal> (optional): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"mapkey2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the key of the map. </para> </callout> <callout arearefs=\"mapkey3\"> <para> <literal>type</literal> (reguired): The type of the map keys. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"indexmanytomany1\" coords=\"2 45\"/> <area id=\"indexmanytomany2\" coords=\"3 45\"/> <area id=\"indexmanytomany3\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<map-key-many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"indexmanytomany1\"> <para> <literal>column</literal> (optional): The name of the foreign key column for the collection index values. </para> </callout> <callout arearefs=\"indexmanytomany2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the foreign key of the map key. </para> </callout> <callout arearefs=\"indexmanytomany3\"> <para> <literal>class</literal> (required): The entity class used as the map key. </para> </callout> </calloutlist> </programlistingco>"
+msgstr "Si tu tabla no tiene una columna índice, y deseas aún usar <literal>List</literal> como tipo de propiedad, debes mapear la propiedad como un <emphasis><bag></emphasis> de Hibernate. Un bag (bolsa) no retiene su orden al ser recuperado de la base de datos, pero puede ser ordenado o clasificado opcionalmente."
+
+#: index.docbook:348
+msgid "If your table doesn't have an index column, and you still wish to use <literal>List</literal> as the property type, you should map the property as a Hibernate <emphasis><bag></emphasis>. A bag does not retain its order when it is retrieved from the database, but it may be optionally sorted or ordered."
+msgstr "Hay absolutamente un rango de mapeos que pueden ser generados para colecciones, cubriendo muchos modelos relacionales comunes. Te sugerimos que experimentes con la herramienta de generación de esquemas para obtener una idea de cómo varias declaraciones de mapeo se traducen a tablas de base de datos."
+
+#: index.docbook:357
+msgid "There are quite a range of mappings that can be generated for collections, covering many common relational models. We suggest you experiment with the schema generation tool to get a feeling for how various mapping declarations translate to database tables."
+msgstr "Colecciones de valores y asociaciones muchos-a-muchos"
+
+#: index.docbook:364
+msgid "Collections of values and many-to-many associations"
+msgstr "Cualquier colección de valores o asociación muchos a muchos requiere una <emphasis>tabla de colección</emphasis> dedicada con una columna o columnas de clave foránea, <emphasis>columna de elemento de colección</emphasis> o columnas y posiblemente una columna o columnas índice."
+
+#: index.docbook:366
+msgid "Any collection of values or many-to-many association requires a dedicated <emphasis>collection table</emphasis> with a foreign key column or columns, <emphasis>collection element column</emphasis> or columns and possibly an index column or columns."
+msgstr "Para una colección de valores, usamos la etiqueta <literal><element></literal>."
+
+#: index.docbook:373
+msgid "For a collection of values, we use the <literal><element></literal> tag."
+msgstr ""
+ "<programlistingco> <areaspec> <area id=\"element1b\" coords=\"2 50\"/> <area id=\"element2b\" coords=\"3 50\"/> <area id=\"element3b\" coords=\"4 50\"/> </areaspec> <programlisting><![CDATA[<element\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"typename\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"element1b\"> <para> <literal>column</literal> (opcional): El nombre de la columna que tiene los valores de los elementos de la colección. </para> </callout> <callout arearefs=\"element2b\"> <para> <literal>formula</literal> (opcional): Una fórmula SQL usada para evaluar el elemento. </para> </callout> <callout arearefs=\"element3b\"> <para> <literal>type</literal> (requerido): El tipo del elemento de colección. </para> </callout> </calloutlist> </programlistingco> <para> Una <emphasis>asociación muchos-a-muchos</emphasis> se especifica usando el elemento <literal><many-to-many></literal>. </para> <programlistingco> <areaspec> <area id=\"manytomany1\" coords=\"2 60\"/> <area id=\"manytomany2\" coords=\"3 60\"/> <area id=\"manytomany3\" coords=\"4 60\"/> <area id=\"manytomany4\" coords=\"5 60\"/> <area id=\"manytomany5\" coords=\"6 60\"/> <area id=\"manytomany6\" coords=\"7 60\"/!
> <area id=\"manytomany7\" coords=\"8 60\"/> </areaspec> <programlisting><![CDATA[<many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ " fetch=\"select|join\"\n"
+ " unique=\"true|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]></programlisting> <calloutlist> <callout arearefs=\"manytomany1\"> <para> <literal>column</literal> (opcional): El nombre de la columna de clave foránea del elemento. </para> </callout> <callout arearefs=\"manytomany2\"> <para> <literal>formula</literal> (opcional): Una fórmula SQL opcional usada para evaluar el valor de clave foránea del elemento. </para> </callout> <callout arearefs=\"manytomany3\"> <para> <literal>class</literal> (requerido): El nombre de la clase asociada. </para> </callout> <callout arearefs=\"manytomany4\"> <para> <literal>fetch</literal> (opcional - por defecto a <literal>join</literal>): habilita la recuperación por unión externa o selección secuencial para esta asociación. Este es un caso especial; para una recuperación completamente temprana (en un solo <literal>SELECT</literal>) de una entidad y sus relaciones muchos-a-muchos a otras entidades, deberías habilitar la re!
cuperación <literal>join</literal> no sólo de la colección misma, sino también con este atributo en el elemento anidado <literal><many-to-many></literal>. </para> </callout> <callout arearefs=\"manytomany5\"> <para> <literal>unique</literal> (opcional): Habilita la generación DDL de una restricción de unicidad para la columna clave foránea. Esto hace la multiplicidad de la asociación efectivamente uno a muchos. </para> </callout> <callout arearefs=\"manytomany6\"> <para> <literal>not-found</literal> (opcional - por defecto a <literal>exception</literal>): Especifica cómo serán manejadas las claves foráneas que referencian filas perdidas: <literal>ignore</literal> tratará una fila perdida como una asociación nula. </para> </callout> <callout arearefs=\"manytomany7\"> <para> <literal>entity-name</literal> (opcional): El nombre de entidad de la clase asociada, como una alternativa !
a <literal>class</literal>. </para> </callout> </calloutlist> </progra
mlistingco>"
+
+#: index.docbook:375
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"element1b\" coords=\"2 50\"/> <area id=\"element2b\" coords=\"3 50\"/> <area id=\"element3b\" coords=\"4 50\"/> </areaspec> <programlisting><![CDATA[<element\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"typename\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"element1b\"> <para> <literal>column</literal> (optional): The name of the column holding the collection element values. </para> </callout> <callout arearefs=\"element2b\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element. </para> </callout> <callout arearefs=\"element3b\"> <para> <literal>type</literal> (required): The type of the collection element. </para> </callout> </calloutlist> </programlistingco> <para> A <emphasis>many-to-many association</emphasis> is specified using the <literal><many-to-many></literal> element. </para> <programlistingco> <areaspec> <area id=\"manytomany1\" coords=\"2 60\"/> <area id=\"manytomany2\" coords=\"3 60\"/> <area id=\"manytomany3\" coords=\"4 60\"/> <area id=\"manytomany4\" coords=\"5 60\"/> <area id=\"manytomany5\" coords=\"6 60\"/> <area id=\"manytomany6\" coords=\"7 60\"/> <area id=\"manytomany7\" coords=\"8 60\"/> <area id=\!
"manytomany8\" coords=\"9 60\"/> </areaspec> <programlisting><![CDATA[<many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ " fetch=\"select|join\"\n"
+ " unique=\"true|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]></programlisting> <calloutlist> <callout arearefs=\"manytomany1\"> <para> <literal>column</literal> (optional): The name of the element foreign key column. </para> </callout> <callout arearefs=\"manytomany2\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element foreign key value. </para> </callout> <callout arearefs=\"manytomany3\"> <para> <literal>class</literal> (required): The name of the associated class. </para> </callout> <callout arearefs=\"manytomany4\"> <para> <literal>fetch</literal> (optional - defaults to <literal>join</literal>): enables outer-join or sequential select fetching for this association. This is a special case; for full eager fetching (in a single <literal>SELECT</literal>) of an entity and its many-to-many relationships to other entities, you would enable <literal>join</literal> fetching not only of the collection itself, but also with this attribute on the <literal><many-to-many></literal!
> nested element. </para> </callout> <callout arearefs=\"manytomany5\"> <para> <literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. This makes the association multiplicity effectively one to many. </para> </callout> <callout arearefs=\"manytomany6\"> <para> <literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association. </para> </callout> <callout arearefs=\"manytomany7\"> <para> <literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>. </para> </callout> <callout arearefs=\"manytomany8\"> <para> <literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class !
is used. </para> </callout> </calloutlist> </programlistingco>"
+msgstr "Algunos ejemplos, primero, un conjunto de cadenas:"
+
+#: index.docbook:480
+msgid "Some examples, first, a set of strings:"
+msgstr ""
+ "<![CDATA[<set name=\"names\" table=\"person_names\">\n"
+ " <key column=\"person_id\"/>\n"
+ " <element column=\"person_name\" type=\"string\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:484
+msgid ""
+ "<![CDATA[<set name=\"names\" table=\"person_names\">\n"
+ " <key column=\"person_id\"/>\n"
+ " <element column=\"person_name\" type=\"string\"/>\n"
+ "</set>]]>"
+msgstr "Un bag conteniendo enteros (con un orden de iteración determinado por el atributo <literal>order-by</literal>):"
+
+#: index.docbook:486
+msgid "A bag containing integers (with an iteration order determined by the <literal>order-by</literal> attribute):"
+msgstr ""
+ "<![CDATA[<bag name=\"sizes\" \n"
+ " table=\"item_sizes\" \n"
+ " order-by=\"size asc\">\n"
+ " <key column=\"item_id\"/>\n"
+ " <element column=\"size\" type=\"integer\"/>\n"
+ "</bag>]]>"
+
+#: index.docbook:491
+msgid ""
+ "<![CDATA[<bag name=\"sizes\" \n"
+ " table=\"item_sizes\" \n"
+ " order-by=\"size asc\">\n"
+ " <key column=\"item_id\"/>\n"
+ " <element column=\"size\" type=\"integer\"/>\n"
+ "</bag>]]>"
+msgstr "Un array de entidades - en este caso, una asociación muchos a muchos:"
+
+#: index.docbook:493
+msgid "An array of entities - in this case, a many to many association:"
+msgstr ""
+ "<![CDATA[<array name=\"addresses\" \n"
+ " table=\"PersonAddress\" \n"
+ " cascade=\"persist\">\n"
+ " <key column=\"personId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <many-to-many column=\"addressId\" class=\"Address\"/>\n"
+ "</array>]]>"
+
+#: index.docbook:497
+msgid ""
+ "<![CDATA[<array name=\"addresses\" \n"
+ " table=\"PersonAddress\" \n"
+ " cascade=\"persist\">\n"
+ " <key column=\"personId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <many-to-many column=\"addressId\" class=\"Address\"/>\n"
+ "</array>]]>"
+msgstr "Un mapa de índices de cadenas a fechas:"
+
+#: index.docbook:499
+msgid "A map from string indices to dates:"
+msgstr ""
+ "<![CDATA[<map name=\"holidays\" \n"
+ " table=\"holidays\" \n"
+ " schema=\"dbo\" \n"
+ " order-by=\"hol_name asc\">\n"
+ " <key column=\"id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:503
+msgid ""
+ "<![CDATA[<map name=\"holidays\" \n"
+ " table=\"holidays\" \n"
+ " schema=\"dbo\" \n"
+ " order-by=\"hol_name asc\">\n"
+ " <key column=\"id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr "Una lista de componentes (discutidos en el próximo capítulo):"
+
+#: index.docbook:505
+msgid "A list of components (discussed in the next chapter):"
+msgstr ""
+ "<![CDATA[<list name=\"carComponents\" \n"
+ " table=\"CarComponents\">\n"
+ " <key column=\"carId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <composite-element class=\"CarComponent\">\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"type\"/>\n"
+ " <property name=\"serialNumber\" column=\"serialNum\"/>\n"
+ " </composite-element>\n"
+ "</list>]]>"
+
+#: index.docbook:509
+msgid ""
+ "<![CDATA[<list name=\"carComponents\" \n"
+ " table=\"CarComponents\">\n"
+ " <key column=\"carId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <composite-element class=\"CarComponent\">\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"type\"/>\n"
+ " <property name=\"serialNumber\" column=\"serialNum\"/>\n"
+ " </composite-element>\n"
+ "</list>]]>"
+msgstr "Asociaciones uno-a-muchos"
+
+#: index.docbook:514
+msgid "One-to-many associations"
+msgstr "Una <emphasis>asociación uno a muchos</emphasis> enlaza las tablas de dos clases por medio de una clave foránea, sin intervención de tabla de colección alguna. Este mapeo pierde cierta semántica de colecciones Java normales:"
+
+#: index.docbook:516
+msgid "A <emphasis>one to many association</emphasis> links the tables of two classes via a foreign key, with no intervening collection table. This mapping loses certain semantics of normal Java collections:"
+msgstr "Una instancia de la clase entidad contenida no puede pertenecer a más de una instancia de la colección."
+
+#: index.docbook:524
+msgid "An instance of the contained entity class may not belong to more than one instance of the collection"
+msgstr "Una instancia de la clase entidad contenida no puede aparecer en más de un valor del índice de colección."
+
+#: index.docbook:530
+msgid "An instance of the contained entity class may not appear at more than one value of the collection index"
+msgstr "Una asociación de <literal>Product</literal> a <literal>Part</literal> requiere la existencia de una columna clave foránea y posiblemente una columna índice a la tabla <literal>Part</literal>. Una etiqueta <literal><one-to-many></literal> indica que ésta es una asociación uno a muchos."
+
+#: index.docbook:537
+msgid "An association from <literal>Product</literal> to <literal>Part</literal> requires existence of a foreign key column and possibly an index column to the <literal>Part</literal> table. A <literal><one-to-many></literal> tag indicates that this is a one to many association."
+msgstr ""
+ "<![CDATA[<one-to-many \n"
+ " class=\"ClassName\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]>"
+
+#: index.docbook:550
+msgid ""
+ "<![CDATA[<one-to-many \n"
+ " class=\"ClassName\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]>"
+msgstr "<literal>class</literal> (requerido): El nombre de la clase asociada."
+
+#: index.docbook:553
+msgid "<literal>class</literal> (required): The name of the associated class."
+msgstr "<literal>not-found</literal> (opcional - por defecto a <literal>exception</literal>): Especifica cómo serán manejados los identificadores en caché que referencien filas perdidas: <literal>ignore</literal> tratará una fila perdida como una asociación nula."
+
+#: index.docbook:558
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how cached identifiers that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr "<literal>entity-name</literal> (opcional): El nombre de entidad de la clase asociada, como una alternativa a <literal>class</literal>."
+
+#: index.docbook:565
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>."
+msgstr "Observa que el elemento <literal><one-to-many></literal> no necesita declarar ninguna columna. Ni es necesario especificar el nombre de <literal>table</literal> en ningún sitio."
+
+#: index.docbook:573
+msgid "Notice that the <literal><one-to-many></literal> element does not need to declare any columns. Nor is it necessary to specify the <literal>table</literal> name anywhere."
+msgstr "<emphasis>Nota muy importante:</emphasis> Si la columna clave foránea de una asociación <literal><one-to-many></literal> es declarada <literal>NOT NULL</literal>, debes declarar el mapeo de <literal><key></literal> <literal>not-null=\"true\"</literal> o <emphasis>usar una asociación bidireccional</emphasis> con el mapeo de colección marcado <literal>inverse=\"true\"</literal>. Ver la discusión sobre asociaciones bidireccionales más adelante en este capítulo."
+
+#: index.docbook:579
+msgid "<emphasis>Very important note:</emphasis> If the foreign key column of a <literal><one-to-many></literal> association is declared <literal>NOT NULL</literal>, you must declare the <literal><key></literal> mapping <literal>not-null=\"true\"</literal> or <emphasis>use a bidirectional association</emphasis> with the collection mapping marked <literal>inverse=\"true\"</literal>. See the discussion of bidirectional associations later in this chapter."
+msgstr "Este ejemplo muestra un mapa de entidades <literal>Part</literal> por nombre (donde <literal>partName</literal> es una propiedad persistente de <literal>Part</literal>). Observa el uso de un índice basado en fórmula."
+
+#: index.docbook:588
+msgid "This example shows a map of <literal>Part</literal> entities by name (where <literal>partName</literal> is a persistent property of <literal>Part</literal>). Notice the use of a formula-based index."
+msgstr ""
+ "<![CDATA[<map name=\"parts\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"productId\" not-null=\"true\"/>\n"
+ " <map-key formula=\"partName\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:594
+msgid ""
+ "<![CDATA[<map name=\"parts\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"productId\" not-null=\"true\"/>\n"
+ " <map-key formula=\"partName\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ "</map>]]>"
+msgstr "Mapeos de colección avanzados"
+
+#: index.docbook:600
+msgid "Advanced collection mappings"
+msgstr "Colecciones ordenadas"
+
+#: index.docbook:603
+msgid "Sorted collections"
+msgstr "Hibernate soporta colecciones implementando <literal>java.util.SortedMap</literal> y <literal>java.util.SortedSet</literal>. Debes especificar un comparador en el fichero de mapeo:"
+
+#: index.docbook:605
+msgid "Hibernate supports collections implementing <literal>java.util.SortedMap</literal> and <literal>java.util.SortedSet</literal>. You must specify a comparator in the mapping file:"
+msgstr ""
+ "<![CDATA[<set name=\"aliases\" \n"
+ " table=\"person_aliases\" \n"
+ " sort=\"natural\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" sort=\"my.custom.HolidayComparator\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<set name=\"aliases\" \n"
+ " table=\"person_aliases\" \n"
+ " sort=\"natural\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" sort=\"my.custom.HolidayComparator\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr "Los valores permitidos del atributo <literal>sort</literal> son <literal>unsorted</literal>, <literal>natural</literal> y el nombre de una clase que implemente <literal>java.util.Comparator</literal>."
+
+#: index.docbook:612
+msgid "Allowed values of the <literal>sort</literal> attribute are <literal>unsorted</literal>, <literal>natural</literal> and the name of a class implementing <literal>java.util.Comparator</literal>."
+msgstr "Las colecciones ordenadas realmente se comportan como <literal>java.util.TreeSet</literal> o <literal>java.util.TreeMap</literal>."
+
+#: index.docbook:618
+msgid "Sorted collections actually behave like <literal>java.util.TreeSet</literal> or <literal>java.util.TreeMap</literal>."
+msgstr "Si quieres que la misma base de datos ordene los elementos de colección usa el atributo <literal>order-by</literal> de los mapeos <literal>set</literal>, <literal>bag</literal> o <literal>map</literal>. Esta solución está disponible sólo bajo el JDK 1.4 o superior (está implementado usando <literal>LinkedHashSet</literal> o <literal>LinkedHashMap</literal>). Esto realiza la ordenación en la consulta SQL, no en memoria."
+
+#: index.docbook:623
+msgid "If you want the database itself to order the collection elements use the <literal>order-by</literal> attribute of <literal>set</literal>, <literal>bag</literal> or <literal>map</literal> mappings. This solution is only available under JDK 1.4 or higher (it is implemented using <literal>LinkedHashSet</literal> or <literal>LinkedHashMap</literal>). This performs the ordering in the SQL query, not in memory."
+msgstr ""
+ "<![CDATA[<set name=\"aliases\" table=\"person_aliases\" order-by=\"lower(name) asc\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" order-by=\"hol_date, hol_name\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:632
+msgid ""
+ "<![CDATA[<set name=\"aliases\" table=\"person_aliases\" order-by=\"lower(name) asc\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" order-by=\"hol_date, hol_name\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date type=\"date\"/>\n"
+ "</map>]]>"
+msgstr "Observa que el valor del atributo <literal>order-by</literal> es una ordenación SQL, no una ordenación HQL!"
+
+#: index.docbook:634
+msgid "Note that the value of the <literal>order-by</literal> attribute is an SQL ordering, not a HQL ordering!"
+msgstr "Las asociaciones pueden incluso ser ordenadas por algún criterio arbitrario en tiempo de ejecución usando un <literal>filter()</literal> de colección."
+
+#: index.docbook:639
+msgid "Associations may even be sorted by some arbitrary criteria at runtime using a collection <literal>filter()</literal>."
+msgstr "<![CDATA[sortedUsers = s.createFilter( group.getUsers(), \"order by this.name\" ).list();]]>"
+
+#: index.docbook:644
+msgid "<![CDATA[sortedUsers = s.createFilter( group.getUsers(), \"order by this.name\" ).list();]]>"
+msgstr "Asociaciones bidireccionales"
+
+#: index.docbook:649
+msgid "Bidirectional associations"
+msgstr "Una <emphasis>asociación bidireccional</emphasis> permite la nevegación desde ambos \"extremos\" de la asociación. Son soportados dos tipos de asociación bidireccional:"
+
+#: index.docbook:651
+msgid "A <emphasis>bidirectional association</emphasis> allows navigation from both \"ends\" of the association. Two kinds of bidirectional association are supported:"
+msgstr "uno-a-muchos"
+
+#: index.docbook:658
+msgid "one-to-many"
+msgstr "set o bag valorados en un extremo, monovaluados al otro"
+
+#: index.docbook:660
+msgid "set or bag valued at one end, single-valued at the other"
+msgstr "muchos-a-muchos"
+
+#: index.docbook:666
+msgid "many-to-many"
+msgstr "set o bag valorados a ambos extremos"
+
+#: index.docbook:668
+msgid "set or bag valued at both ends"
+msgstr "Puedes especificar una asociación bidireccional muchos-a-muchos simplemente mapeando dos asociaciones muchos-a-muchos a la misma tabla de base de datos y declarando un extremo como <emphasis>inverse</emphasis> (cuál de ellos es tu elección, pero no puede ser una colección indexada)."
+
+#: index.docbook:677
+msgid "You may specify a bidirectional many-to-many association simply by mapping two many-to-many associations to the same database table and declaring one end as <emphasis>inverse</emphasis> (which one is your choice, but it can not be an indexed collection)."
+msgstr "He aquí un ejemplo de una asociación bidireccional muchos-a-muchos; cada categoría puede tener muchos ítems y cada ítem puede estar en muchas categorías:"
+
+#: index.docbook:684
+msgid "Here's an example of a bidirectional many-to-many association; each category can have many items and each item can be in many categories:"
+msgstr ""
+ "<![CDATA[<class name=\"Category\">\n"
+ " <id name=\"id\" column=\"CATEGORY_ID\"/>\n"
+ " ...\n"
+ " <bag name=\"items\" table=\"CATEGORY_ITEM\">\n"
+ " <key column=\"CATEGORY_ID\"/>\n"
+ " <many-to-many class=\"Item\" column=\"ITEM_ID\"/>\n"
+ " </bag>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Item\">\n"
+ " <id name=\"id\" column=\"ITEM_ID\"/>
+\n"
+ " ...\n"
+ "\n"
+ " <!-- inverse end -->\n"
+ " <bag name=\"categories\" table=\"CATEGORY_ITEM\" inverse=\"true\">\n"
+ " <key column=\"ITEM_ID\"/>\n"
+ " <many-to-many class=\"Category\" column=\"CATEGORY_ID\"/>\n"
+ " </bag>\n"
+ "</class>]]>"
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<class name=\"Category\">\n"
+ " <id name=\"id\" column=\"CATEGORY_ID\"/>\n"
+ " ...\n"
+ " <bag name=\"items\" table=\"CATEGORY_ITEM\">\n"
+ " <key column=\"CATEGORY_ID\"/>\n"
+ " <many-to-many class=\"Item\" column=\"ITEM_ID\"/>\n"
+ " </bag>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Item\">\n"
+ " <id name=\"id\" column=\"ITEM_ID\"/>\n"
+ " ...\n"
+ "\n"
+ " <!-- inverse end -->\n"
+ " <bag name=\"categories\" table=\"CATEGORY_ITEM\" inverse=\"true\">\n"
+ " <key column=\"ITEM_ID\"/>\n"
+ " <many-to-many class=\"Category\" column=\"CATEGORY_ID\"/>\n"
+ " </bag>\n"
+ "</class>]]>"
+msgstr "Los cambios hechos sólo al extremo inverso de la asociación <emphasis>no</emphasis> son persistidos. Esto significa que Hibernate tiene dos representaciones en memoria para cada asociación bidireccional, una enlaza de A a B y otra enlaza de B a A. Esto es más fácil de entender si piensas en el modelo de objetos de Java y cómo creamos una relación muchos-a-muchos en Java:"
+
+#: index.docbook:691
+msgid "Changes made only to the inverse end of the association are <emphasis>not</emphasis> persisted. This means that Hibernate has two representations in memory for every bidirectional association, one link from A to B and another link from B to A. This is easier to understand if you think about the Java object model and how we create a many-to-many relationship in Java:"
+msgstr ""
+ "<![CDATA[\n"
+ "category.getItems().add(item); // The category now \"knows\" about the relationship\n"
+ "item.getCategories().add(category); // The item now \"knows\" about the relationship\n"
+ "\n"
+ "session.persist(item); // The relationship won't be saved!\n"
+ "session.persist(category); // The relationship will be saved]]>"
+
+#: index.docbook:699
+msgid ""
+ "<![CDATA[\n"
+ "category.getItems().add(item); // The category now \"knows\" about the relationship\n"
+ "item.getCategories().add(category); // The item now \"knows\" about the relationship\n"
+ "\n"
+ "session.persist(item); // The relationship won't be saved!\n"
+ "session.persist(category); // The relationship will be saved]]>"
+msgstr "El lado no-inverso se usa para salvar la representación en memoria a la base de datos."
+
+#: index.docbook:701
+msgid "The non-inverse side is used to save the in-memory representation to the database."
+msgstr "Puedes definir una asociación bidireccional uno-a-muchos mapeando una asociación uno-a-muchos a la misma columna (o columnas) de tabla como una asociación muchos-a-uno y declarando el extremo multivaluado <literal>inverse=\"true\"</literal>."
+
+#: index.docbook:705
+msgid "You may define a bidirectional one-to-many association by mapping a one-to-many association to the same table column(s) as a many-to-one association and declaring the many-valued end <literal>inverse=\"true\"</literal>."
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"eg.Child\">\n"
+ " <id name=\"id\" column=\"id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr "Mapear un extremo de una asociación con <literal>inverse=\"true\"</literal> no afecta la operación de cascadas; éstos son conceptos ortogonales!"
+
+#: index.docbook:713
+msgid "Mapping one end of an association with <literal>inverse=\"true\"</literal> doesn't affect the operation of cascades, these are orthogonal concepts!"
+msgstr "Asociaciones bidireccionales con colecciones indexadas"
+
+#: index.docbook:721
+msgid "Bidirectional associations with indexed collections"
+msgstr "Requiere especial consideración una asociación bidireccional donde un extremo esté representado como una <literal><list></literal> o <literal><map></literal>. Si hay una propiedad de la clase hija que mapee a la columna índice, no hay problema, podemos seguir usando <literal>inverse=\"true\"</literal> en el mapeo de la colección:"
+
+#: index.docbook:722
+msgid "A bidirectional association where one end is represented as a <literal><list></literal> or <literal><map></literal> requires special consideration. If there is a property of the child class which maps to the index column, no problem, we can continue using <literal>inverse=\"true\"</literal> on the collection mapping:"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"/>\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"/>\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr "Pero, si no existe tal proiedad en la clase hija, no podemos pensar en la asociación como verdaderamente bidireccional (hay información en un extremo de la asociación que no está disponible en el otro extremo). En este caso, no podemos mapear la colección con <literal>inverse=\"true\"</literal>. En cambio, podríamos usar el siguiente mapeo:"
+
+#: index.docbook:731
+msgid "But, if there is no such property on the child class, we can't think of the association as truly bidirectional (there is information available at one end of the association that is not available at the other end). In this case, we can't map the collection <literal>inverse=\"true\"</literal>. Instead, we could use the following mapping:"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\">\n"
+ " <key column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:738
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\">\n"
+ " <key column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr "Nota que, en este mapeo, el extremo de la asociación valuado en colección es responsable de las actualizaciones a la clave foránea."
+
+#: index.docbook:740
+msgid "Note that in this mapping, the collection-valued end of the association is responsible for updates to the foreign key. TODO: Does this really result in some unnecessary update statements?"
+msgstr "Asociaciones ternarias"
+
+#: index.docbook:748
+msgid "Ternary associations"
+msgstr "Hay tres enfoques posibles para mapear una asociación ternaria. Una es usar un <literal>Map</literal> con una asociación como su índice:"
+
+#: index.docbook:750
+msgid "There are three possible approaches to mapping a ternary association. One is to use a <literal>Map</literal> with an association as its index:"
+msgstr ""
+ "<![CDATA[<map name=\"contracts\">\n"
+ " <key column=\"employer_id\" not-null=\"true\"/>\n"
+ " <map-key-many-to-many column=\"employee_id\" class=\"Employee\"/>\n"
+ " <one-to-many class=\"Contract\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:755
+msgid ""
+ "<![CDATA[<map name=\"contracts\">\n"
+ " <key column=\"employer_id\" not-null=\"true\"/>\n"
+ " <map-key-many-to-many column=\"employee_id\" class=\"Employee\"/>\n"
+ " <one-to-many class=\"Contract\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"connections\">\n"
+ " <key column=\"incoming_node_id\"/>\n"
+ " <map-key-many-to-many column=\"outgoing_node_id\" class=\"Node\"/>\n"
+ " <many-to-many column=\"connection_id\" class=\"Connection\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<map name=\"connections\">\n"
+ " <key column=\"incoming_node_id\"/>\n"
+ " <map-key-many-to-many column=\"outgoing_node_id\" class=\"Node\"/>\n"
+ " <many-to-many column=\"connection_id\" class=\"Connection\"/>\n"
+ "</map>]]>"
+msgstr "Un segundo enfoque es simplemente remodelar la asociación como una clase de entidad. Este es el enfoque que usamos más comunmente."
+
+#: index.docbook:759
+msgid "A second approach is to simply remodel the association as an entity class. This is the approach we use most commonly."
+msgstr "Una alternativa final es usar elementos compuestos, que discutiremos más adelante."
+
+#: index.docbook:764
+msgid "A final alternative is to use composite elements, which we will discuss later."
+msgstr "Usando un <idbag>"
+
+#: index.docbook:771
+msgid "Using an <idbag>"
+msgstr "Si has adoptado completamente nuestra visión de que las claves compuestas son una cosa mala y que las entidades deben tener identificadores sitéticos (claves delegadas), entonces podrías encontrar un poco raro que todas las asociaciones muchos a muchos y las colecciones de valores que hemos mostrado hasta ahora mapeen a tablas con claves compuestas! Ahora, este punto es discutible; una tabla de pura asociación no parece beneficiarse demasiado de una clave delegada (aunque sí <emphasis>podría</emphasis> una colección de valores compuestos). Sin embargo, Hibernate provee una funcionalidad que te permite mapear asociaciones muchos a muchos y colecciones de valores a una tabla con una clave delegada."
+
+#: index.docbook:773
+msgid "If you've fully embraced our view that composite keys are a bad thing and that entities should have synthetic identifiers (surrogate keys), then you might find it a bit odd that the many to many associations and collections of values that we've shown so far all map to tables with composite keys! Now, this point is quite arguable; a pure association table doesn't seem to benefit much from a surrogate key (though a collection of composite values <emphasis>might</emphasis>). Nevertheless, Hibernate provides a feature that allows you to map many to many associations and collections of values to a table with a surrogate key."
+msgstr "El elemento <literal><idbag></literal> te permite mapear una <literal>List</literal> (o <literal>Collection</literal>) con semántica de bag."
+
+#: index.docbook:784
+msgid "The <literal><idbag></literal> element lets you map a <literal>List</literal> (or <literal>Collection</literal>) with bag semantics."
+msgstr ""
+ "<![CDATA[<idbag name=\"lovers\" table=\"LOVERS\">\n"
+ " <collection-id column=\"ID\" type=\"long\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </collection-id>\n"
+ " <key column=\"PERSON1\"/>\n"
+ " <many-to-many column=\"PERSON2\" class=\"Person\" fetch=\"join\"/>\n"
+ "</idbag>]]>"
+
+#: index.docbook:789
+msgid ""
+ "<![CDATA[<idbag name=\"lovers\" table=\"LOVERS\">\n"
+ " <collection-id column=\"ID\" type=\"long\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </collection-id>\n"
+ " <key column=\"PERSON1\"/>\n"
+ " <many-to-many column=\"PERSON2\" class=\"Person\" fetch=\"join\"/>\n"
+ "</idbag>]]>"
+msgstr "Como puedes ver, un <literal><idbag></literal> tiene un generador de id sintético, igual que una clase de entidad! Una clave delegada diferente se asigna a cada fila de la colección. Hibernate no provee ningún mecanismo para descubrir el valor de clave delegada de una fila en particular, sin embargo."
+
+#: index.docbook:791
+msgid "As you can see, an <literal><idbag></literal> has a synthetic id generator, just like an entity class! A different surrogate key is assigned to each collection row. Hibernate does not provide any mechanism to discover the surrogate key value of a particular row, however."
+msgstr "Observa que el rendimiento de actualización de un <literal><idbag></literal> es <emphasis>mucho</emphasis> mejor que el de un <literal><bag></literal> regular! Hibernate puede localizar filas individuales eficientemente y actualizarlas o borrarlas individualmente, igual que si fuese una lista, mapa o conjunto."
+
+#: index.docbook:798
+msgid "Note that the update performance of an <literal><idbag></literal> is <emphasis>much</emphasis> better than a regular <literal><bag></literal>! Hibernate can locate individual rows efficiently and update or delete them individually, just like a list, map or set."
+msgstr "En la implementación actual, la estrategia de generación de identificador <literal>native</literal> no está soportada para identificadores de colecciones <literal><idbag></literal>."
+
+#: index.docbook:805
+msgid "In the current implementation, the <literal>native</literal> identifier generation strategy is not supported for <literal><idbag></literal> collection identifiers."
+msgstr "Ejemplos de colección"
+
+#: index.docbook:829
+msgid "Collection examples"
+msgstr "Las secciones previas son bastantes confusas. Así que miremos un ejemplo. Esta clase:"
+
+#: index.docbook:831
+msgid "The previous sections are pretty confusing. So lets look at an example. This class:"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "\n"
+ "public class Parent {\n"
+ " private long id;\n"
+ " private Set children;\n"
+ "\n"
+ " public long getId() { return id; }\n"
+ " private void setId(long id) { this.id=id; }\n"
+ "\n"
+ " private Set getChildren() { return children; }\n"
+ " private void setChildren(Set children) { this.children=children; }\n"
+ "\n"
+ " ....\n"
+ " ....\n"
+ "}]]>"
+
+#: index.docbook:836
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "\n"
+ "public class Parent {\n"
+ " private long id;\n"
+ " private Set children;\n"
+ "\n"
+ " public long getId() { return id; }\n"
+ " private void setId(long id) { this.id=id; }\n"
+ "\n"
+ " private Set getChildren() { return children; }\n"
+ " private void setChildren(Set children) { this.children=children; }\n"
+ "\n"
+ " ....\n"
+ " ....\n"
+ "}]]>"
+msgstr "tiene una colección de instancias de <literal>Child</literal>. Si cada hijo tiene como mucho un padre, el mapeo más natural es una asociación uno-a-muchos:"
+
+#: index.docbook:838
+msgid "has a collection of <literal>Child</literal> instances. If each child has at most one parent, the most natural mapping is a one-to-many association:"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:844
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "Esto mapea a las siguientes definiciones de tablas:"
+
+#: index.docbook:846
+msgid "This maps to the following table definitions:"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+
+#: index.docbook:850
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr "Si el padre es <emphasis>requerido</emphasis>, usa una asociación bidireccional uno-a-muchos:"
+
+#: index.docbook:852
+msgid "If the parent is <emphasis>required</emphasis>, use a bidirectional one-to-many association:"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <many-to-one name=\"parent\" class=\"Parent\" column=\"parent_id\" not-null=\"true\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:857
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <many-to-one name=\"parent\" class=\"Parent\" column=\"parent_id\" not-null=\"true\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "Observa la restricción <literal>NOT NULL</literal>:"
+
+#: index.docbook:859
+msgid "Notice the <literal>NOT NULL</literal> constraint:"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null\n"
+ " primary key,\n"
+ " name varchar(255),\n"
+ " parent_id bigint not null )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+
+#: index.docbook:863
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null\n"
+ " primary key,\n"
+ " name varchar(255),\n"
+ " parent_id bigint not null )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr "Alternativamente, si absolutamente insistes que esta asociación debe ser unidireccional, puedes declarar la restricción <literal>NOT NULL</literal> en el mapeo de <literal><key></literal>:"
+
+#: index.docbook:865
+msgid "Alternatively, if you absolutely insist that this association should be unidirectional, you can declare the <literal>NOT NULL</literal> constraint on the <literal><key></literal> mapping:"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:871
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "En la otra mano, si un hijo pudiera tener múltiples padres, sería apropiada una asociación muchos-a-muchos:"
+
+#: index.docbook:873
+msgid "On the other hand, if a child might have multiple parents, a many-to-many association is appropriate:"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" table=\"childset\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <many-to-many class=\"Child\" column=\"child_id\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:878
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" table=\"childset\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <many-to-many class=\"Child\" column=\"child_id\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "Definiciones de tabla:"
+
+#: index.docbook:880
+msgid "Table definitions:"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255) )\n"
+ "create table childset ( parent_id bigint not null,\n"
+ " child_id bigint not null,\n"
+ " primary key ( parent_id, child_id ) )\n"
+ "alter table childset add constraint childsetfk0 (parent_id) references parent\n"
+ "alter table childset add constraint childsetfk1 (child_id) references child]]>"
+
+#: index.docbook:884
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255) )\n"
+ "create table childset ( parent_id bigint not null,\n"
+ " child_id bigint not null,\n"
+ " primary key ( parent_id, child_id ) )\n"
+ "alter table childset add constraint childsetfk0 (parent_id) references parent\n"
+ "alter table childset add constraint childsetfk1 (child_id) references child]]>"
+msgstr "Para más ejemplos y un paseo completo a través del mapeo de relaciones padre/hijo, ver <xref linkend=\"example-parentchild\"/>."
+
+#: index.docbook:886
+msgid "For more examples and a complete walk-through a parent/child relationship mapping, see <xref linkend=\"example-parentchild\"/>."
+msgstr "Son posibles mapeos de asociación aún más complejos. Catalogaremos todas las posibilidades en el próximo capítulo."
+
+#: index.docbook:891
+msgid "Even more exotic association mappings are possible, we will catalog all possibilities in the next chapter."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/component_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/component_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/component_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,532 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Component Mapping"
+msgstr "Mapeo de Componentes"
+
+#: index.docbook:7
+msgid "The notion of a <emphasis>component</emphasis> is re-used in several different contexts, for different purposes, throughout Hibernate."
+msgstr "La noción de un <emphasis>componente</emphasis> es reusada en muchos contextos diferentes, para propósitos diferentes, a través de Hibernate."
+
+#: index.docbook:13
+msgid "Dependent objects"
+msgstr "Objetos dependientes"
+
+#: index.docbook:15
+msgid "A component is a contained object that is persisted as a value type, not an entity reference. The term \"component\" refers to the object-oriented notion of composition (not to architecture-level components). For example, you might model a person like this:"
+msgstr "Un componente es un objeto contenido que es persistido como un tipo de valor, no una referencia de entidad. El término \"componente\" hace referencia a la noción orientada a objetos de composición (no a componentes a nivel de arquitectura). Por ejemplo, podrías modelar una persona como:"
+
+#: index.docbook:21
+msgid ""
+ "<![CDATA[public class Person {\n"
+ " private java.util.Date birthday;\n"
+ " private Name name;\n"
+ " private String key;\n"
+ " public String getKey() {\n"
+ " return key;\n"
+ " }\n"
+ " private void setKey(String key) {\n"
+ " this.key=key;\n"
+ " }\n"
+ " public java.util.Date getBirthday() {\n"
+ " return birthday;\n"
+ " }\n"
+ " public void setBirthday(java.util.Date birthday) {\n"
+ " this.birthday = birthday;\n"
+ " }\n"
+ " public Name getName() {\n"
+ " return name;\n"
+ " }\n"
+ " public void setName(Name name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ " ......\n"
+ " ......\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Person {\n"
+ " private java.util.Date birthday;\n"
+ " private Name name;\n"
+ " private String key;\n"
+ " public String getKey() {\n"
+ " return key;\n"
+ " }\n"
+ " private void setKey(String key) {\n"
+ " this.key=key;\n"
+ " }\n"
+ " public java.util.Date getBirthday() {\n"
+ " return birthday;\n"
+ " }\n"
+ " public void setBirthday(java.util.Date birthday) {\n"
+ " this.birthday = birthday;\n"
+ " }\n"
+ " public Name getName() {\n"
+ " return name;\n"
+ " }\n"
+ " public void setName(Name name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ " ......\n"
+ " ......\n"
+ "}]]>"
+
+#: index.docbook:23
+msgid ""
+ "<![CDATA[public class Name {\n"
+ " char initial;\n"
+ " String first;\n"
+ " String last;\n"
+ " public String getFirst() {\n"
+ " return first;\n"
+ " }\n"
+ " void setFirst(String first) {\n"
+ " this.first = first;\n"
+ " }\n"
+ " public String getLast() {\n"
+ " return last;\n"
+ " }\n"
+ " void setLast(String last) {\n"
+ " this.last = last;\n"
+ " }\n"
+ " public char getInitial() {\n"
+ " return initial;\n"
+ " }\n"
+ " void setInitial(char initial) {\n"
+ " this.initial = initial;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Name {\n"
+ " char initial;\n"
+ " String first;\n"
+ " String last;\n"
+ " public String getFirst() {\n"
+ " return first;\n"
+ " }\n"
+ " void setFirst(String first) {\n"
+ " this.first = first;\n"
+ " }\n"
+ " public String getLast() {\n"
+ " return last;\n"
+ " }\n"
+ " void setLast(String last) {\n"
+ " this.last = last;\n"
+ " }\n"
+ " public char getInitial() {\n"
+ " return initial;\n"
+ " }\n"
+ " void setInitial(char initial) {\n"
+ " this.initial = initial;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:25
+msgid "Now <literal>Name</literal> may be persisted as a component of <literal>Person</literal>. Notice that <literal>Name</literal> defines getter and setter methods for its persistent properties, but doesn't need to declare any interfaces or identifier properties."
+msgstr "Ahora <literal>Name</literal> puede ser persistido como un componente de <literal>Person</literal>. Observa que <literal>Name</literal> define métodos getter y setter para sus propiedades persistentes, pero no necesita declarar ninguna interface ni propiedades identificadoras."
+
+#: index.docbook:32
+msgid "Our Hibernate mapping would look like:"
+msgstr "Nuestro mapeo de Hibernate se vería así:"
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\"> <!-- class attribute optional -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid.hex\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\"> <!-- class attribute optional -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+
+#: index.docbook:38
+msgid "The person table would have the columns <literal>pid</literal>, <literal>birthday</literal>, <literal>initial</literal>, <literal>first</literal> and <literal>last</literal>."
+msgstr "La tabla person tendría las columnas <literal>pid</literal>, <literal>birthday</literal>, <literal>initial</literal>, <literal>first</literal> y <literal>last</literal>."
+
+#: index.docbook:46
+msgid "Like all value types, components do not support shared references. In other words, two persons could have the same name, but the two person objects would contain two independent name ojects, only \"the same\" by value. The null value semantics of a component are <emphasis>ad hoc</emphasis>. When reloading the containing object, Hibernate will assume that if all component columns are null, then the entire component is null. This should be okay for most purposes."
+msgstr "Como todos los tipos de valor, los componentes no soportan referencias compartidas. En otras palabras, dos personas pueden tener el mismo nombre, pero los dos objetos persona contendrían dos objetos nombre independientes, sólo \"iguales\" en valor. La semántica de valor nulo de un componente es <emphasis>ad hoc</emphasis>. Cuando se recargue el objeto contenedor, Hibernate asumirá que si todas las columnas del componente son nulas, el componente entero es nulo. Esto debe estar bien para la mayoría de propósitos."
+
+#: index.docbook:55
+msgid "The properties of a component may be of any Hibernate type (collections, many-to-one associations, other components, etc). Nested components should <emphasis>not</emphasis> be considered an exotic usage. Hibernate is intended to support a very fine-grained object model."
+msgstr "Las propiedades de un componentes pueden ser de cualquier tipo de Hibernate (colecciones, muchos-a-uno, asociaciones, otros componentes, etc). Los componentes anidados <emphasis>no</emphasis> deben ser considerados un uso exótico. Hibernate está concebido para soportar un modelo de objetos granularizado en fino."
+
+#: index.docbook:62
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr "El elemento <literal><component></literal> permite un subelemento <literal><parent></literal> que mapee una propiedad de la clase del componente como una referencia de regreso a la entidad contenedora."
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\" unique=\"true\">\n"
+ " <parent name=\"namedPerson\"/> <!-- reference back to the Person -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid.hex\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\" unique=\"true\">\n"
+ " <parent name=\"namedPerson\"/> <!-- reference back to the Person -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+
+#: index.docbook:73
+msgid "Collections of dependent objects"
+msgstr "Colecciones de objetos dependientes"
+
+#: index.docbook:75
+msgid "Collections of components are supported (eg. an array of type <literal>Name</literal>). Declare your component collection by replacing the <literal><element></literal> tag with a <literal><composite-element></literal> tag."
+msgstr "Las colecciones de componentes están soportadas (por ejemplo, un array de tipo <literal>Name</literal>). Declara tu colección de componentes remplazando la etiqueta <literal><element></literal> por una etiqueta <literal><composite-element></literal>."
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<set name=\"someNames\" table=\"some_names\" lazy=\"true\">\n"
+ " <key column=\"id\"/>\n"
+ " <composite-element class=\"eg.Name\"> <!-- class attribute required -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </composite-element>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"someNames\" table=\"some_names\" lazy=\"true\">\n"
+ " <key column=\"id\"/>\n"
+ " <composite-element class=\"eg.Name\"> <!-- class attribute required -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </composite-element>\n"
+ "</set>]]>"
+
+#: index.docbook:84
+msgid "Note: if you define a <literal>Set</literal> of composite elements, it is very important to implement <literal>equals()</literal> and <literal>hashCode()</literal> correctly."
+msgstr "Nota: si defines un <literal>Set</literal> de elementos compuestos, es muy importante implementar <literal>equals()</literal> y <literal>hashCode()</literal> correctamente."
+
+#: index.docbook:90
+msgid "Composite elements may contain components but not collections. If your composite element itself contains components, use the <literal><nested-composite-element></literal> tag. This is a pretty exotic case - a collection of components which themselves have components. By this stage you should be asking yourself if a one-to-many association is more appropriate. Try remodelling the composite element as an entity - but note that even though the Java model is the same, the relational model and persistence semantics are still slightly different."
+msgstr "Los elementos compuestos pueden contener componentes pero no colecciones. Si tu elemento compuesto contiene a su vez componentes, usa la etiqueta <literal><nested-composite-element></literal>. Este es un caso bastante exótico - una colección de componentes que a su vez tienen componentes. A esta altura debes estar preguntándote si una asociación uno-a-muchos es más apropiada. Intenta remodelar el elemento compuesto como una entidad - pero observa que aunque el modelo Java es el mismo, el modelo relacional y la semántica de persistencia siguen siendo ligeramente diferentes."
+
+#: index.docbook:102
+msgid "Please note that a composite element mapping doesn't support null-able properties if you're using a <literal><set></literal>. Hibernate has to use each columns value to identify a record when deleting objects (there is no separate primary key column in the composite element table), which is not possible with null values. You have to either use only not-null properties in a composite-element or choose a <literal><list></literal>, <literal><map></literal>, <literal><bag></literal> or <literal><idbag></literal>."
+msgstr "Por favor observa que un mapeo de elemento compuesto no soporta propiedades nulables si estás usando un <literal><set></literal>. Hibernate tiene que usar cada columna para identificar un registro al borrar objetos (no hay una columna clave primaria separada en la tabla del elemento compuesto), lo que es imposible con valores nulos. Tienes que, o bien usar sólo propiedades no nulas en un elemento compuesto o elegir un <literal><list></literal>, <literal><map></literal>, <literal><bag></literal> o <literal><idbag></literal>."
+
+#: index.docbook:113
+msgid "A special case of a composite element is a composite element with a nested <literal><many-to-one></literal> element. A mapping like this allows you to map extra columns of a many-to-many association table to the composite element class. The following is a many-to-many association from <literal>Order</literal> to <literal>Item</literal> where <literal>purchaseDate</literal>, <literal>price</literal> and <literal>quantity</literal> are properties of the association:"
+msgstr "Un caso especial de un elemento compuesto es un elemento compuesto con un elemento anidado <literal><many-to-one></literal>. Un mapeo como este te permite mapear columnas extra de una tabla de asociación muchos-a-muchos a la clase del elemento compuesto. La siguiente es una asociación muchos-a-muchos de <literal>Order</literal> a <literal>Item</literal> donde <literal>purchaseDate</literal>, <literal>price</literal> y <literal>quantity</literal> son propiedades de la asociación:"
+
+#: index.docbook:123
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.Purchase\">\n"
+ " <property name=\"purchaseDate\"/>\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/> <!-- class attribute is optional -->\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.Purchase\">\n"
+ " <property name=\"purchaseDate\"/>\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/> <!-- class attribute is optional -->\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:125
+msgid "Of course, there can't be a reference to the purchae on the other side, for bidirectional association navigation. Remember that components are value types and don't allow shared references. A single <literal>Purchase</literal> can be in the set of an <literal>Order</literal>, but it can't be referenced by the <literal>Item</literal> at the same time."
+msgstr "Por supuesto, no puede haber una referencia a la compra del otro lado para la navegación bidireccional de la asociación. Recuerda que los componentes son tipos de valor no permiten referencias compartidas. Una sola <literal>Purchase</literal> puede estar en el conjunto de una <literal>Order</literal>, pero no puede ser referenciada por el <literal>Item</literal> al mismo tiempo."
+
+#: index.docbook:133
+msgid "Even ternary (or quaternary, etc) associations are possible:"
+msgstr "Incluso son posibles las asociaciones ternarias (o cuaternarias, etc):"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.OrderLine\">\n"
+ " <many-to-one name=\"purchaseDetails class=\"eg.Purchase\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/>\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.OrderLine\">\n"
+ " <many-to-one name=\"purchaseDetails class=\"eg.Purchase\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/>\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:137
+msgid "Composite elements may appear in queries using the same syntax as associations to other entities."
+msgstr "Los elementos compuestos pueden aparecer en consultas usando la misma sintáxis que las asociaciones a otras entidades."
+
+#: index.docbook:145
+msgid "Components as Map indices"
+msgstr "Componentes como índices de Map"
+
+#: index.docbook:147
+msgid "The <literal><composite-map-key></literal> element lets you map a component class as the key of a <literal>Map</literal>. Make sure you override <literal>hashCode()</literal> and <literal>equals()</literal> correctly on the component class."
+msgstr "El elemento <literal><composite-map-key></literal> te permite mapear una clase componente como la clave de un <literal>Map</literal>. Asegúrate que sobrescribes <literal>hashCode()</literal> y <literal>equals()</literal> correctamente en la clase componente."
+
+#: index.docbook:156
+msgid "Components as composite identifiers"
+msgstr "Componentes como identificadores compuestos"
+
+#: index.docbook:158
+msgid "You may use a component as an identifier of an entity class. Your component class must satisfy certain requirements:"
+msgstr "Puedes usar un componente como un identidicador de una clase entidad. Tu clase componente debe satisfacer ciertos requerimientos:"
+
+#: index.docbook:165
+msgid "It must implement <literal>java.io.Serializable</literal>."
+msgstr "Debe implementar <literal>java.io.Serializable</literal>."
+
+#: index.docbook:170
+msgid "It must re-implement <literal>equals()</literal> and <literal>hashCode()</literal>, consistently with the database's notion of composite key equality."
+msgstr "Debe re-implementar <literal>equals()</literal> y <literal>hashCode()</literal>, consistentemente con la noción de base de datos de igualdad de clave compuesta."
+
+#: index.docbook:179
+msgid "Note: in Hibernate3, the second requirement is not an absolutely hard requirement of Hibernate. But do it anyway."
+msgstr "Nota: en Hibernat3, el segundo requerimiento no es absolutamente un requerimiento rígido de Hibernate. Pero de todas formas, házlo."
+
+#: index.docbook:183
+msgid "You can't use an <literal>IdentifierGenerator</literal> to generate composite keys. Instead the application must assign its own identifiers."
+msgstr "No puedes usar un <literal>IdentifierGenerator</literal> para generar claves compuestas. La aplicación debe, en cambio, asignar sus propios identificadores."
+
+#: index.docbook:188
+msgid "Use the <literal><composite-id></literal> tag (with nested <literal><key-property></literal> elements) in place of the usual <literal><id></literal> declaration. For example, the <literal>OrderLine</literal> class has a primary key that depends upon the (composite) primary key of <literal>Order</literal>."
+msgstr "Usa la etiqueta <literal><composite-id></literal> (con elementos anidados <literal><key-property></literal>) en lugar de la usual declaración <literal><id></literal>. Por ejemplo, la clase <literal>OrderLine</literal> tiene una clave primaria que depende de la clave primaria (compuesta) de <literal>Order</literal>."
+
+#: index.docbook:196
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " \n"
+ " <composite-id name=\"id\" class=\"OrderLineId\">\n"
+ " <key-property name=\"lineId\"/>\n"
+ " <key-property name=\"orderId\"/>\n"
+ " <key-property name=\"customerId\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"name\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\" class=\"Order\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-one>\n"
+ " ....\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " \n"
+ " <composite-id name=\"id\" class=\"OrderLineId\">\n"
+ " <key-property name=\"lineId\"/>\n"
+ " <key-property name=\"orderId\"/>\n"
+ " <key-property name=\"customerId\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"name\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\" class=\"Order\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-one>\n"
+ " ....\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:198
+msgid "Now, any foreign keys referencing the <literal>OrderLine</literal> table are also composite. You must declare this in your mappings for other classes. An association to <literal>OrderLine</literal> would be mapped like this:"
+msgstr "Ahora, cualquier clave foránea que referencie la tabla de <literal>OrderLine</literal> es también compuesta. Debes declarar esto en tus mapeos de otras clases. Una asociación a <literal>OrderLine</literal> sería mapeado así:"
+
+#: index.docbook:204
+msgid ""
+ "<![CDATA[<many-to-one name=\"orderLine\" class=\"OrderLine\">\n"
+ "<!-- the \"class\" attribute is optional, as usual -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ "</many-to-one>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"orderLine\" class=\"OrderLine\">\n"
+ "<!-- the \"class\" attribute is optional, as usual -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:206
+msgid "(Note that the <literal><column></literal> tag is an alternative to the <literal>column</literal> attribute everywhere.)"
+msgstr "(Nota que la etiqueta <literal><column></literal> es una alternativa al atributo <literal>column</literal> en cualquier sitio.)"
+
+#: index.docbook:211
+msgid "A <literal>many-to-many</literal> association to <literal>OrderLine</literal> also uses the composite foreign key:"
+msgstr "Una asociación <literal>muchos-a-muchos</literal> a <literal>OrderLine</literal> también usa la clave foránea compuesta:"
+
+#: index.docbook:216
+msgid ""
+ "<![CDATA[<set name=\"undeliveredOrderLines\">\n"
+ " <key column name=\"warehouseId\"/>\n"
+ " <many-to-many class=\"OrderLine\">\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-many>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"undeliveredOrderLines\">\n"
+ " <key column name=\"warehouseId\"/>\n"
+ " <many-to-many class=\"OrderLine\">\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-many>\n"
+ "</set>]]>"
+
+#: index.docbook:218
+msgid "The collection of <literal>OrderLine</literal>s in <literal>Order</literal> would use:"
+msgstr "La colección de <literal>OrderLine</literal>s en <literal>Order</literal> usaría:"
+
+#: index.docbook:223
+msgid ""
+ "<![CDATA[<set name=\"orderLines\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"OrderLine\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"orderLines\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"OrderLine\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:225
+msgid "(The <literal><one-to-many></literal> element, as usual, declares no columns.)"
+msgstr "(El elemento <literal><one-to-many></literal>, como es usual, no declara columnas.)"
+
+#: index.docbook:229
+msgid "If <literal>OrderLine</literal> itself owns a collection, it also has a composite foreign key."
+msgstr "Si <literal>OrderLine</literal> posee una colección por sí misma, tiene también una clave foránea compuesta."
+
+#: index.docbook:234
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " ....\n"
+ " ....\n"
+ " <list name=\"deliveryAttempts\">\n"
+ " <key> <!-- a collection inherits the composite key type -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <list-index column=\"attemptId\" base=\"1\"/>\n"
+ " <composite-element class=\"DeliveryAttempt\">\n"
+ " ...\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " ....\n"
+ " ....\n"
+ " <list name=\"deliveryAttempts\">\n"
+ " <key> <!-- a collection inherits the composite key type -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <list-index column=\"attemptId\" base=\"1\"/>\n"
+ " <composite-element class=\"DeliveryAttempt\">\n"
+ " ...\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:239
+msgid "Dynamic components"
+msgstr "Componentes dinámicos"
+
+#: index.docbook:241
+msgid "You may even map a property of type <literal>Map</literal>:"
+msgstr "Puedes incluso mapear una propiedad de tipo <literal>Map</literal>:"
+
+#: index.docbook:245
+msgid ""
+ "<![CDATA[<dynamic-component name=\"userAttributes\">\n"
+ " <property name=\"foo\" column=\"FOO\" type=\"string\"/>\n"
+ " <property name=\"bar\" column=\"BAR\" type=\"integer\"/>\n"
+ " <many-to-one name=\"baz\" class=\"Baz\" column=\"BAZ_ID\"/>\n"
+ "</dynamic-component>]]>"
+msgstr ""
+ "<![CDATA[<dynamic-component name=\"userAttributes\">\n"
+ " <property name=\"foo\" column=\"FOO\" type=\"string\"/>\n"
+ " <property name=\"bar\" column=\"BAR\" type=\"integer\"/>\n"
+ " <many-to-one name=\"baz\" class=\"Baz\" column=\"BAZ_ID\"/>\n"
+ "</dynamic-component>]]>"
+
+#: index.docbook:247
+msgid "The semantics of a <literal><dynamic-component></literal> mapping are identical to <literal><component></literal>. The advantage of this kind of mapping is the ability to determine the actual properties of the bean at deployment time, just by editing the mapping document. Runtime manipulation of the mapping document is also possible, using a DOM parser. Even better, you can access (and change) Hibernate's configuration-time metamodel via the <literal>Configuration</literal> object."
+msgstr "La semántica de un mapeo <literal><dynamic-component></literal> es ídentica a la de <literal><component></literal>. La ventaja de este tipo de mapeos es la habilidad para determinar las propiedades reales del bean en tiempo de despliegue, sólo con editar el documento de mapeo. La manipulación del documento de mapeo en tiempo de ejecución es también posible, usando un analizador DOM. Incluso mejor, puedes acceder (y cambiar) el metamodelo de tiempo de configuración de Hibernate por medio del objeto <literal>Configuration</literal>."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/configuration.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/configuration.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/configuration.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1598 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Configuration"
+msgstr "Configuración"
+
+#: index.docbook:7
+msgid "Because Hibernate is designed to operate in many different environments, there are a large number of configuration parameters. Fortunately, most have sensible default values and Hibernate is distributed with an example <literal>hibernate.properties</literal> file in <literal>etc/</literal> that shows the various options. Just put the example file in your classpath and customize it."
+msgstr "Debido a que Hibernate está diseñado para operar en muchos entornos diferentes, hay un gran número de parámetros de configuración. Afortunadamente, la mayoría tiene valores por defecto sensibles e Hibernate se distribuye con un fichero <literal>hibernate.properties</literal> de ejemplo en <literal>etc/</literal> que muestra las diversas opciones. Tan sólo pon el fichero de ejemplo en tu classpath y personalízalo."
+
+#: index.docbook:16
+msgid "Programmatic configuration"
+msgstr "Configuración programática"
+
+#: index.docbook:18
+msgid "An instance of <literal>org.hibernate.cfg.Configuration</literal> represents an entire set of mappings of an application's Java types to an SQL database. The <literal>Configuration</literal> is used to build an (immutable) <literal>SessionFactory</literal>. The mappings are compiled from various XML mapping files."
+msgstr "Una instancia de <literal>org.hibernate.cfg.Configuration</literal> representa un conjunto entero de mapeos de los tipos Java de una aplicación a una base de datos SQL. La <literal>Configuration</literal> es usada para construir una <literal>SessionFactory</literal> (inmutable). Los mapeos se compilan de varios ficheros de mapeo XML."
+
+#: index.docbook:26
+msgid "You may obtain a <literal>Configuration</literal> instance by instantiating it directly and specifying XML mapping documents. If the mapping files are in the classpath, use <literal>addResource()</literal>:"
+msgstr "Puedes obtener una instancia de <literal>Configuration</literal> instanciándola directamente y especificando documentos de mapeo XML. Si los ficheros de mapeo están en el classpath, usa <literal>addResource()</literal>:"
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addResource(\"Item.hbm.xml\")\n"
+ " .addResource(\"Bid.hbm.xml\");]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addResource(\"Item.hbm.xml\")\n"
+ " .addResource(\"Bid.hbm.xml\");]]>"
+
+#: index.docbook:34
+msgid "An alternative (sometimes better) way is to specify the mapped class, and let Hibernate find the mapping document for you:"
+msgstr "Una forma alternativa (a veces mejor) es especificar la clase mapeada, y dejar que Hibernate encuentre el documento de mapeo por ti:"
+
+#: index.docbook:39
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class);]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class);]]>"
+
+#: index.docbook:41
+msgid "Then Hibernate will look for mapping files named <literal>/org/hibernate/auction/Item.hbm.xml</literal> and <literal>/org/hibernate/auction/Bid.hbm.xml</literal> in the classpath. This approach eliminates any hardcoded filenames."
+msgstr "Entonces Hibernate buscará ficheros de mapeo llamados <literal>/org/hibernate/auction/Item.hbm.xml</literal> y <literal>/org/hibernate/auction/Bid.hbm.xml</literal> en el classpath. Este enfoque elimina cualquier nombre de fichero en el código."
+
+#: index.docbook:48
+msgid "A <literal>Configuration</literal> also allows you to specify configuration properties:"
+msgstr "Una <literal>Configuration</literal> también te permite especificar propiedades de configuración:"
+
+#: index.docbook:53
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class)\n"
+ " .setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLInnoDBDialect\")\n"
+ " .setProperty(\"hibernate.connection.datasource\", \"java:comp/env/jdbc/test\")\n"
+ " .setProperty(\"hibernate.order_updates\", \"true\");]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class)\n"
+ " .setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLInnoDBDialect\")\n"
+ " .setProperty(\"hibernate.connection.datasource\", \"java:comp/env/jdbc/test\")\n"
+ " .setProperty(\"hibernate.order_updates\", \"true\");]]>"
+
+#: index.docbook:55
+msgid "This is not the only way to pass configuration properties to Hibernate. The various options include:"
+msgstr "Esta no es la única forma de pasar propiedades de configuración a Hibernate. La diversas opciones incluyen:"
+
+#: index.docbook:62
+msgid "Pass an instance of <literal>java.util.Properties</literal> to <literal>Configuration.setProperties()</literal>."
+msgstr "Pasar una instancia de <literal>java.util.Properties</literal> a <literal>Configuration.setProperties()</literal>."
+
+#: index.docbook:68
+msgid "Place <literal>hibernate.properties</literal> in a root directory of the classpath."
+msgstr "Colocar <literal>hibernate.properties</literal> en un directorio raíz del classpath."
+
+#: index.docbook:74
+msgid "Set <literal>System</literal> properties using <literal>java -Dproperty=value</literal>."
+msgstr "Establecer propiedades <literal>System</literal> usando <literal>java -Dproperty=value</literal>."
+
+#: index.docbook:80
+msgid "Include <literal><property></literal> elements in <literal>hibernate.cfg.xml</literal> (discussed later)."
+msgstr "Incluir elementos <literal><property></literal> en <literal>hibernate.cfg.xml</literal> (discutido luego)."
+
+#: index.docbook:87
+msgid "<literal>hibernate.properties</literal> is the easiest approach if you want to get started quickly."
+msgstr "<literal>hibernate.properties</literal> es el enfoque más fácil si quieres comenzar rápido."
+
+#: index.docbook:92
+msgid "The <literal>Configuration</literal> is intended as a startup-time object, to be discarded once a <literal>SessionFactory</literal> is created."
+msgstr "La <literal>Configuration</literal> está concebida como un objeto de tiempo de arranque, para ser descartado una vez que una <literal>SessionFactory</literal> es creada."
+
+#: index.docbook:100
+msgid "Obtaining a SessionFactory"
+msgstr "Obteniendo una SessionFactory"
+
+#: index.docbook:102
+msgid "When all mappings have been parsed by the <literal>Configuration</literal>, the application must obtain a factory for <literal>Session</literal> instances. This factory is intended to be shared by all application threads:"
+msgstr "Cuando todos los mapeos han sido parseados por la <literal>Configuration</literal>, la aplicación debe obtener una fábrica de instancias de <literal>Session</literal>. Esta fábrica está concebida para ser compartida por todas las hebras de aplicación:"
+
+#: index.docbook:108
+msgid "<![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]>"
+msgstr "<![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]>"
+
+#: index.docbook:110
+msgid "Hibernate does allow your application to instantiate more than one <literal>SessionFactory</literal>. This is useful if you are using more than one database."
+msgstr "Hibernate permite que tu aplicación instancie más de una <literal>SessionFactory</literal>. Esto es útil si estás usando más de una base de datos."
+
+#: index.docbook:119
+msgid "JDBC connections"
+msgstr "Conexiones JDBC"
+
+#: index.docbook:121
+msgid "Usually, you want to have the <literal>SessionFactory</literal> create and pool JDBC connections for you. If you take this approach, opening a <literal>Session</literal> is as simple as:"
+msgstr "Usualmente, quieres que la <literal>SessionFactory</literal> cree y almacene en pool conexiones JDBC para ti. Si adoptas este enfoque, abrir una <literal>Session</literal> es tan simple como:"
+
+#: index.docbook:127
+msgid "<![CDATA[Session session = sessions.openSession(); // open a new Session]]>"
+msgstr "<![CDATA[Session session = sessions.openSession(); // open a new Session]]>"
+
+#: index.docbook:129
+msgid "As soon as you do something that requires access to the database, a JDBC connection will be obtained from the pool."
+msgstr "En cuanto hagas algo que requiera acceso a la base de datos, se obtendrá una conexión JDBC del pool."
+
+#: index.docbook:134
+msgid "For this to work, we need to pass some JDBC connection properties to Hibernate. All Hibernate property names and semantics are defined on the class <literal>org.hibernate.cfg.Environment</literal>. We will now describe the most important settings for JDBC connection configuration."
+msgstr "Para que esto funcione, necesitamos pasar algunas propiedades de conexión JDBC a Hibernate. Todos los nombres de propiedades y su semántica están definidas en la clase <literal>org.hibernate.cfg.Environment</literal>. Describiremos ahora las configuraciones más importantes para la conexión JDBC."
+
+#: index.docbook:141
+msgid "Hibernate will obtain (and pool) connections using <literal>java.sql.DriverManager</literal> if you set the following properties:"
+msgstr "Hibernate obtendrá (y tendrá en pool) conexiones usando <literal>java.sql.DriverManager</literal> si configuras las siguientes propiedades:"
+
+#: index.docbook:147
+msgid "Hibernate JDBC Properties"
+msgstr "Propiedades JDBC de Hibernate"
+
+#: index.docbook:153, index.docbook:241, index.docbook:338, index.docbook:529, index.docbook:725, index.docbook:832, index.docbook:920
+msgid "Property name"
+msgstr "Nombre de propiedad"
+
+#: index.docbook:154, index.docbook:242, index.docbook:339, index.docbook:530, index.docbook:726, index.docbook:833, index.docbook:921
+msgid "Purpose"
+msgstr "Propósito"
+
+#: index.docbook:160
+msgid "hibernate.connection.driver_class"
+msgstr "hibernate.connection.driver_class"
+
+#: index.docbook:163
+msgid "JDBC driver class"
+msgstr "clase del driver jdbc"
+
+#: index.docbook:168
+msgid "hibernate.connection.url"
+msgstr "hibernate.connection.url"
+
+#: index.docbook:171
+msgid "JDBC URL"
+msgstr "URL de jdbc"
+
+#: index.docbook:176, index.docbook:272
+msgid "hibernate.connection.username"
+msgstr "hibernate.connection.username"
+
+#: index.docbook:179
+msgid "database user"
+msgstr "usuario de base de datos"
+
+#: index.docbook:184, index.docbook:280
+msgid "hibernate.connection.password"
+msgstr "hibernate.connection.password"
+
+#: index.docbook:187
+msgid "database user password"
+msgstr "contraseña del usuario de base de datos"
+
+#: index.docbook:192
+msgid "hibernate.connection.pool_size"
+msgstr "hibernate.connection.pool_size"
+
+#: index.docbook:195
+msgid "maximum number of pooled connections"
+msgstr "número máximo de conexiones manejadas por pooling"
+
+#: index.docbook:202
+msgid "Hibernate's own connection pooling algorithm is however quite rudimentary. It is intended to help you get started and is <emphasis>not intended for use in a production system</emphasis> or even for performance testing. You should use a third party pool for best performance and stability. Just replace the <literal>hibernate.connection.pool_size</literal> property with connection pool specific settings. This will turn off Hibernate's internal pool. For example, you might like to use C3P0."
+msgstr "El algoritmo de pooling de conexiones propio de Hibernate es sin embargo algo rudimentario. Está concebido para ayudarte a comenzar y <emphasis>no está concebido para usar en un sistema de producción</emphasis> ni siquiera para pruebas de rendimiento. Debes usar un pool de terceros para un mejor rendimiento y estabilidad. Sólo remplaza la propiedad <literal>hibernate.connection.pool_size</literal> con configuraciones específicas del pool de conexiones. Esto desactivará el pool interno de Hibernate. Por ejemplo, podrías querer usar C3P0."
+
+#: index.docbook:212
+msgid "C3P0 is an open source JDBC connection pool distributed along with Hibernate in the <literal>lib</literal> directory. Hibernate will use its <literal>C3P0ConnectionProvider</literal> for connection pooling if you set <literal>hibernate.c3p0.*</literal> properties. If you'd like to use Proxool refer to the packaged <literal>hibernate.properties</literal> and the Hibernate web site for more information."
+msgstr "C3P0 es un pool de conexiones JDBC de código abierto distribuido junto a Hibernate en el directorio <literal>lib</literal>. Hibernate usará su <literal>C3P0ConnectionProvider</literal> para pooling de conexiones si estableces propiedades <literal>hibernate.c3p0.*</literal>. Si quieres usar Proxool refiérete al <literal>hibernate.properties</literal> empaquetado y al sitio web de Hibernate para más información."
+
+#: index.docbook:221
+msgid "Here is an example <literal>hibernate.properties</literal> file for C3P0:"
+msgstr "Aquí hay un fichero <literal>hibernate.properties</literal> de ejemplo para C3P0:"
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[hibernate.connection.driver_class = org.postgresql.Driver\n"
+ "hibernate.connection.url = jdbc:postgresql://localhost/mydatabase\n"
+ "hibernate.connection.username = myuser\n"
+ "hibernate.connection.password = secret\n"
+ "hibernate.c3p0.min_size=5\n"
+ "hibernate.c3p0.max_size=20\n"
+ "hibernate.c3p0.timeout=1800\n"
+ "hibernate.c3p0.max_statements=50\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+ "<![CDATA[hibernate.connection.driver_class = org.postgresql.Driver\n"
+ "hibernate.connection.url = jdbc:postgresql://localhost/mydatabase\n"
+ "hibernate.connection.username = myuser\n"
+ "hibernate.connection.password = secret\n"
+ "hibernate.c3p0.min_size=5\n"
+ "hibernate.c3p0.max_size=20\n"
+ "hibernate.c3p0.timeout=1800\n"
+ "hibernate.c3p0.max_statements=50\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+
+#: index.docbook:227
+msgid "For use inside an application server, you should almost always configure Hibernate to obtain connections from an application server <literal>Datasource</literal> registered in JNDI. You'll need to set at least one of the following properties:"
+msgstr "Para su uso en un servidor de aplicaciones, casi siempre debes configurar Hibernate para que obtenga conexiones de un <literal>Datasource</literal> del servidor de aplicaciones registrado en JNDI. Necesitarás establecer al menos una de las siguientes propiedades:"
+
+#: index.docbook:235
+msgid "Hibernate Datasource Properties"
+msgstr "Propiedades de Datasource de Hibernate"
+
+#: index.docbook:248
+msgid "hibernate.connection.datasource"
+msgstr "hibernate.connection.datasource"
+
+#: index.docbook:251
+msgid "datasource JNDI name"
+msgstr "nombre del datasource JNDI"
+
+#: index.docbook:256
+msgid "hibernate.jndi.url"
+msgstr "hibernate.jndi.url"
+
+#: index.docbook:258
+msgid "<emphasis>URL of the JNDI provider</emphasis> (optional)"
+msgstr "<emphasis>URL del provedor JNDI</emphasis> (optional)"
+
+#: index.docbook:264
+msgid "hibernate.jndi.class"
+msgstr "hibernate.jndi.class"
+
+#: index.docbook:266
+msgid "<emphasis>class of the JNDI <literal>InitialContextFactory</literal></emphasis> (optional)"
+msgstr "<emphasis>clase de la <literal>InitialContextFactory</literal> de JNDI</emphasis> (opcional)"
+
+#: index.docbook:274
+msgid "<emphasis>database user</emphasis> (optional)"
+msgstr "<emphasis>usuario de base de datos</emphasis> (opcional)"
+
+#: index.docbook:282
+msgid "<emphasis>database user password</emphasis> (optional)"
+msgstr "<emphasis>contraseña del usuario de base de datos</emphasis> (opcional)"
+
+#: index.docbook:290
+msgid "Here's an example <literal>hibernate.properties</literal> file for an application server provided JNDI datasource:"
+msgstr "He aquí un fichero <literal>hibernate.properties</literal> de ejemplo para un un datasource JNDI provisto por un servidor de aplicaciones."
+
+#: index.docbook:295
+msgid ""
+ "<![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test\n"
+ "hibernate.transaction.factory_class = \\\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ "hibernate.transaction.manager_lookup_class = \\\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+ "<![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test\n"
+ "hibernate.transaction.factory_class = \\\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ "hibernate.transaction.manager_lookup_class = \\\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+
+#: index.docbook:297
+msgid "JDBC connections obtained from a JNDI datasource will automatically participate in the container-managed transactions of the application server."
+msgstr "Las conexiones JDBC obtenidas de un datasource JNDI participarán automáticamente en las transacciones del servidor de aplicaciones manejadas por contenedor."
+
+#: index.docbook:302
+msgid "Arbitrary connection properties may be given by prepending \"<literal>hibernate.connection</literal>\" to the property name. For example, you may specify a <literal>charSet</literal> using <literal>hibernate.connection.charSet</literal>."
+msgstr "Pueden darse propiedades de conexión arbitrarias anteponiendo \"<literal>hibernate.connnection</literal>\" al nombre de propiedad. Por ejemplo, puedes especificar un <literal>charSet</literal> usando <literal>hibernate.connection.charSet</literal>."
+
+#: index.docbook:308
+msgid "You may define your own plugin strategy for obtaining JDBC connections by implementing the interface <literal>org.hibernate.connection.ConnectionProvider</literal>. You may select a custom implementation by setting <literal>hibernate.connection.provider_class</literal>."
+msgstr "Puedes definir tu propia estrategia de plugin para obtener conexiones JDBC implementando la interface <literal>org.hibernate.connection.ConnectionProvider</literal>. Puedes seleccionar una implementación personalizada estableciendo <literal>hibernate.connection.provider_class</literal>."
+
+#: index.docbook:317
+msgid "Optional configuration properties"
+msgstr "Parámetros de configuración opcionales"
+
+#: index.docbook:319
+msgid "There are a number of other properties that control the behaviour of Hibernate at runtime. All are optional and have reasonable default values."
+msgstr "Hay un número de otras propiedades que controlan el comportamiento de Hibernate en tiempo de ejecución. Todas son opcionales y tienen valores por defecto razonables."
+
+#: index.docbook:324
+msgid "<emphasis>Warning: some of these properties are \"system-level\" only.</emphasis> System-level properties can be set only via <literal>java -Dproperty=value</literal> or <literal>hibernate.properties</literal>. They may <emphasis>not</emphasis> be set by the other techniques described above."
+msgstr "<emphasis>Advertencia: algunas de estas propiedades son de \"nivel-de-sistema\" solamente.</emphasis>. Las propiedades a nivel de sistema sólo pueden ser establecidas por medio de <literal>java -Dproperty=value</literal> o <literal>hibernate.properties</literal>. <emphasis>No</emphasis> pueden establecerse por medio de las otras técnicas arriba descritas."
+
+#: index.docbook:332
+msgid "Hibernate Configuration Properties"
+msgstr "Propiedades de Configuración de Hibernate"
+
+#: index.docbook:345
+msgid "hibernate.dialect"
+msgstr "hibernate.dialect"
+
+#: index.docbook:347
+msgid "The classname of a Hibernate <literal>Dialect</literal> which allows Hibernate to generate SQL optimized for a particular relational database."
+msgstr "El nombre de clase de un <literal>Dialect</literal> de Hibernate que permite a Hibernate generar SQL optimizado para una base de datos relacional en particular."
+
+#: index.docbook:351
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>full.classname.of.Dialect</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>full.classname.of.Dialect</literal>"
+
+#: index.docbook:359
+msgid "hibernate.show_sql"
+msgstr "hibernate.show_sql"
+
+#: index.docbook:361
+msgid "Write all SQL statements to console. This is an alternative to setting the log category <literal>org.hibernate.SQL</literal> to <literal>debug</literal>."
+msgstr "Escribe todas las sentencias SQL a la consola."
+
+#: index.docbook:365, index.docbook:377, index.docbook:471, index.docbook:484, index.docbook:497, index.docbook:510, index.docbook:564, index.docbook:591, index.docbook:605, index.docbook:660, index.docbook:888, index.docbook:903, index.docbook:993
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true</literal> | <literal>false</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:373
+msgid "hibernate.format_sql"
+msgstr "hibernate.default_schema"
+
+#: index.docbook:375
+msgid "Pretty print the SQL in the log and console."
+msgstr "Cualifica, en el SQL generado, los nombres de tabla sin cualificar con el esquema/tablespace dado."
+
+#: index.docbook:385
+msgid "hibernate.default_schema"
+msgstr "hibernate.default_catalog"
+
+#: index.docbook:387
+msgid "Qualify unqualified table names with the given schema/tablespace in generated SQL."
+msgstr "Cualifica, en el SQL generado, los nombres de tabla sin cualificar con el catálogo dado."
+
+#: index.docbook:390
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>SCHEMA_NAME</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>CATALOG_NAME</literal>"
+
+#: index.docbook:398
+msgid "hibernate.default_catalog"
+msgstr "hibernate.session_factory_name"
+
+#: index.docbook:400
+msgid "Qualify unqualified table names with the given catalog in generated SQL."
+msgstr "La <literal>SessionFactory</literal> será ligada a este nombre en JNDI automáticamente después de ser creada."
+
+#: index.docbook:403
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>CATALOG_NAME</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>jndi/composite/name</literal>"
+
+#: index.docbook:411
+msgid "hibernate.session_factory_name"
+msgstr "hibernate.max_fetch_depth"
+
+#: index.docbook:413
+msgid "The <literal>SessionFactory</literal> will be automatically bound to this name in JNDI after it has been created."
+msgstr "Establece una \"profundidad\" máxima del árbol de recuperación por outer join para asociaciones de un extremo solo (uno-a-uno, muchos-a-uno). Un <literal>0</literal> deshabilita la recuperación por outer join por defecto."
+
+#: index.docbook:416, index.docbook:859
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jndi/composite/name</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> valores recomendados entre <literal>0</literal> y <literal>3</literal>"
+
+#: index.docbook:424
+msgid "hibernate.max_fetch_depth"
+msgstr "hibernate.default_batch_fetch_size"
+
+#: index.docbook:426
+msgid "Set a maximum \"depth\" for the outer join fetch tree for single-ended associations (one-to-one, many-to-one). A <literal>0</literal> disables default outer join fetching."
+msgstr "Establece un tamaño por defecto para la recuperación en lote de asociaciones de Hibernate."
+
+#: index.docbook:430
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>0</literal> and <literal>3</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> valores recomendados <literal>4</literal>, <literal>8</literal>, <literal>16</literal>"
+
+#: index.docbook:439
+msgid "hibernate.default_batch_fetch_size"
+msgstr "hibernate.default_entity_mode"
+
+#: index.docbook:441
+msgid "Set a default size for Hibernate batch fetching of associations."
+msgstr "Establece un modo por defecto de representación de entidades para todas las sesiones abiertas por esta <literal>SessionFactory</literal>"
+
+#: index.docbook:443
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values <literal>4</literal>, <literal>8</literal>, <literal>16</literal>"
+msgstr "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+
+#: index.docbook:452
+msgid "hibernate.default_entity_mode"
+msgstr "hibernate.order_updates"
+
+#: index.docbook:454
+msgid "Set a default mode for entity representation for all sessions opened from this <literal>SessionFactory</literal>"
+msgstr "Fuerza a Hibernate a ordenar las actualizaciones SQL por el valor de la clave primaria de los items a actualizar. Esto resultará en menos bloqueos muertos de transacción en sistemas altamente concurrentes."
+
+#: index.docbook:457
+msgid "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:465
+msgid "hibernate.order_updates"
+msgstr "hibernate.generate_statistics"
+
+#: index.docbook:467
+msgid "Force Hibernate to order SQL updates by the primary key value of the items being updated. This will result in fewer transaction deadlocks in highly concurrent systems."
+msgstr "De habilitarse, Hibernate colectará estadísticas útiles para la afinación de rendimiento."
+
+#: index.docbook:479
+msgid "hibernate.generate_statistics"
+msgstr "hibernate.use_identifer_rollback"
+
+#: index.docbook:481
+msgid "If enabled, Hibernate will collect statistics useful for performance tuning."
+msgstr "De habilitarse, las propiedades identificadoras generadas serán reseteadas a valores por defecto cuando los objetos sean borrados."
+
+#: index.docbook:492
+msgid "hibernate.use_identifier_rollback"
+msgstr "hibernate.use_sql_comments"
+
+#: index.docbook:494
+msgid "If enabled, generated identifier properties will be reset to default values when objects are deleted."
+msgstr "De activarse, Hibernate generará comentarios dentro del SQL, para una más fácil depuración, por defecto a <literal>false</literal>."
+
+#: index.docbook:505
+msgid "hibernate.use_sql_comments"
+msgstr "Propiedades de JDBC y Conexiones de Hibernate"
+
+#: index.docbook:507
+msgid "If turned on, Hibernate will generate comments inside the SQL, for easier debugging, defaults to <literal>false</literal>."
+msgstr "Nombre de propiedad"
+
+#: index.docbook:521
+msgid "Hibernate JDBC and Connection Properties"
+msgstr "hibernate.jdbc.fetch_size"
+
+#: index.docbook:536
+msgid "hibernate.jdbc.fetch_size"
+msgstr "Un valor distinto de cero habilita el uso de actualizaciones en lote de JDBC2 por Hibernate."
+
+#: index.docbook:538
+msgid "A non-zero value determines the JDBC fetch size (calls <literal>Statement.setFetchSize()</literal>)."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> valores recomendados entre <literal>5</literal> y <literal>30</literal>"
+
+#: index.docbook:545
+msgid "hibernate.jdbc.batch_size"
+msgstr "hibernate.jdbc.batch_versioned_data"
+
+#: index.docbook:547
+msgid "A non-zero value enables use of JDBC2 batch updates by Hibernate."
+msgstr "Establece esta propiedad a <literal>true</literal> si tu driver JDBC devuelve cuentas correctas de filas desde <literal>executeBatch()</literal> (usualmente es seguro activar esta opción). Hibernate usará DML en lote para versionar automáticamente los datos. Por defecto a <literal>false</literal>."
+
+#: index.docbook:549
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>5</literal> and <literal>30</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:557
+msgid "hibernate.jdbc.batch_versioned_data"
+msgstr "hibernate.jdbc.factory_class"
+
+#: index.docbook:559
+msgid "Set this property to <literal>true</literal> if your JDBC driver returns correct row counts from <literal>executeBatch()</literal> (it is usually safe to turn this option on). Hibernate will then use batched DML for automatically versioned data. Defaults to <literal>false</literal>."
+msgstr "Selecciona un <literal>Batcher</literal> personalizado. La mayoría de las aplicaciones no necesitarán esta propiedad de configuración."
+
+#: index.docbook:572
+msgid "hibernate.jdbc.factory_class"
+msgstr "hibernate.jdbc.use_scrollable_resultset"
+
+#: index.docbook:574
+msgid "Select a custom <literal>Batcher</literal>. Most applications will not need this configuration property."
+msgstr "Habilita el uso de resultados scrollables de JDBC2 por Hibernate. Esta propiedad sólo es necesaria cuando se usan conexiones JDBC provistas por el usuario, en caso contrario Hibernate usa los metadatos de conexión."
+
+#: index.docbook:577
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.BatcherFactory</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:585
+msgid "hibernate.jdbc.use_scrollable_resultset"
+msgstr "hibernate.jdbc.use_streams_for_binary"
+
+#: index.docbook:587
+msgid "Enables use of JDBC2 scrollable resultsets by Hibernate. This property is only necessary when using user supplied JDBC connections, Hibernate uses connection metadata otherwise."
+msgstr "Usa flujos (streams) al escribir/leer tipos <literal>binary</literal> o <literal>serializable</literal> a/desde JDBC (propiedad a nivel de sistema)."
+
+#: index.docbook:599
+msgid "hibernate.jdbc.use_streams_for_binary"
+msgstr "hibernate.jdbc.use_get_generated_keys"
+
+#: index.docbook:601
+msgid "Use streams when writing/reading <literal>binary</literal> or <literal>serializable</literal> types to/from JDBC (system-level property)."
+msgstr "Habilita el uso de <literal>PreparedStatement.getGeneratedKeys()</literal> de JDBC3 para traer claves generadas nativamente después de insertar. Requiere un driver JDBC3+ y un JRE1.4+. Establécela a false si tu driver tiene problemas con los generadores de identificador de Hibernate. Por defecto, se intenta determinar las capacidades del driver usando los metadatos de conexión."
+
+#: index.docbook:613
+msgid "hibernate.jdbc.use_get_generated_keys"
+msgstr "hibernate.connection.provider_class"
+
+#: index.docbook:615
+msgid "Enable use of JDBC3 <literal>PreparedStatement.getGeneratedKeys()</literal> to retrieve natively generated keys after insert. Requires JDBC3+ driver and JRE1.4+, set to false if your driver has problems with the Hibernate identifier generators. By default, tries to determine the driver capabilities using connection metadata."
+msgstr "EL nombre de clase de un <literal>ConnectionProvider</literal> personalizado que provea conexiones JDBC a Hibernate."
+
+#: index.docbook:621, index.docbook:751, index.docbook:763, index.docbook:777, index.docbook:815
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true|false</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>classname.of.ConnectionProvider</literal>"
+
+#: index.docbook:629
+msgid "hibernate.connection.provider_class"
+msgstr "hibernate.connection.isolation"
+
+#: index.docbook:631
+msgid "The classname of a custom <literal>ConnectionProvider</literal> which provides JDBC connections to Hibernate."
+msgstr "Establece el nivel de aislamiento de transacción JDBC. Comprueba <literal>java.sql.Connection</literal> para valores significativos pero observa que la mayoría de las bases de datos no soportan todos los niveles de aislamiento."
+
+#: index.docbook:634
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.ConnectionProvider</literal>"
+msgstr "<emphasis role=\"strong\">eg.</emphasis> <literal>1, 2, 4, 8</literal>"
+
+#: index.docbook:642
+msgid "hibernate.connection.isolation"
+msgstr "hibernate.connection.autocommit"
+
+#: index.docbook:644
+msgid "Set the JDBC transaction isolation level. Check <literal>java.sql.Connection</literal> for meaningful values but note that most databases do not support all isolation levels."
+msgstr "Habilita compromiso automático (autocommit) para las conexiones JDBC en pool (no recomendado)."
+
+#: index.docbook:648
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>1, 2, 4, 8</literal>"
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:656
+msgid "hibernate.connection.autocommit"
+msgstr "hibernate.connection.release_mode"
+
+#: index.docbook:658
+msgid "Enables autocommit for JDBC pooled connections (not recommended)."
+msgstr "Especifica cuándo Hibernate debe liberar las conexiones JDBC. Por defecto, una conexión JDBC es retenida hasta que la sesión es cerrada explícitamente o desconectada. Para un datasource JTA del servidor de aplicaciones, debes usar <literal>after_statement</literal> para liberar agresivamente las conexiones después de cada llamada JDBC. Para una conexión no JTA, frecuentemente tiene sentido liberar la conexión al final de cada transacción, usando <literal>after_transaction</literal>. <literal>auto</literal> eligirá <literal>after_statement</literal> para las estrategias JTA o CMT de transacción y <literal>after_transaction</literal> para la estrategia JDBC de transacción."
+
+#: index.docbook:668
+msgid "hibernate.connection.release_mode"
+msgstr "hibernate.connection.<emphasis><propertyName></emphasis>"
+
+#: index.docbook:670
+msgid "Specify when Hibernate should release JDBC connections. By default, a JDBC connection is held until the session is explicitly closed or disconnected. For an application server JTA datasource, you should use <literal>after_statement</literal> to aggressively release connections after every JDBC call. For a non-JTA connection, it often makes sense to release the connection at the end of each transaction, by using <literal>after_transaction</literal>. <literal>auto</literal> will choose <literal>after_statement</literal> for the JTA and CMT transaction strategies and <literal>after_transaction</literal> for the JDBC transaction strategy."
+msgstr "Pasa la propiedad JDBC <literal>propertyName</literal> a <literal>DriverManager.getConnection()</literal>."
+
+#: index.docbook:681
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>auto</literal> (default) | <literal>on_close</literal> | <literal>after_transaction</literal> | <literal>after_statement</literal>"
+msgstr "hibernate.jndi.<emphasis><propertyName></emphasis>"
+
+#: index.docbook:686
+msgid "Note that this setting only affects <literal>Session</literal>s returned from <literal>SessionFactory.openSession</literal>. For <literal>Session</literal>s obtained through <literal>SessionFactory.getCurrentSession</literal>, the <literal>CurrentSessionContext</literal> implementation configured for use controls the connection release mode for those <literal>Session</literal>s. See"
+msgstr "Pasa la propiedad <literal>propertyName</literal> a <literal>InitialContextFactory</literal> de JNDI."
+
+#: index.docbook:698
+msgid "hibernate.connection.<emphasis><propertyName></emphasis>"
+msgstr "Propiedades de Caché de Hibernate"
+
+#: index.docbook:700
+msgid "Pass the JDBC property <literal>propertyName</literal> to <literal>DriverManager.getConnection()</literal>."
+msgstr "Nombre de propiedad"
+
+#: index.docbook:707
+msgid "hibernate.jndi.<emphasis><propertyName></emphasis>"
+msgstr "Propósito"
+
+#: index.docbook:709
+msgid "Pass the property <literal>propertyName</literal> to the JNDI <literal>InitialContextFactory</literal>."
+msgstr "hibernate.cache.provider_class"
+
+#: index.docbook:719
+msgid "Hibernate Cache Properties"
+msgstr "El nombre de clase de un <literal>CacheProvider</literal> personalizado."
+
+#: index.docbook:732
+msgid "hibernate.cache.provider_class"
+msgstr "Optimiza la operación del caché de segundo nivel para minimizar escrituras, al costo de lecturas más frecuentes. Esto es más útil para cachés en cluster y, en Hibernate3, está habilitado por defecto para implementaciones de caché en cluster."
+
+#: index.docbook:734
+msgid "The classname of a custom <literal>CacheProvider</literal>."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:736
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.CacheProvider</literal>"
+msgstr "hibernate.cache.use_query_cache"
+
+#: index.docbook:744
+msgid "hibernate.cache.use_minimal_puts"
+msgstr "Habilita el caché de lectura, consultas individuales todavía tienen que ponerse cachables."
+
+#: index.docbook:746
+msgid "Optimize second-level cache operation to minimize writes, at the cost of more frequent reads. This setting is most useful for clustered caches and, in Hibernate3, is enabled by default for clustered cache implementations."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:759
+msgid "hibernate.cache.use_query_cache"
+msgstr "Puede ser usado para deshabilitar completamente el caché de segundo nivel, que está habilitado por defecto para clases que especifican un mapeo <literal><cache></literal>."
+
+#: index.docbook:761
+msgid "Enable the query cache, individual queries still have to be set cachable."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:771
+msgid "hibernate.cache.use_second_level_cache"
+msgstr "El nombre de clase de una interface <literal>QueryCache</literal> personalizada, por defecto al <literal>StandardQueryCache</literal> prefabricado."
+
+#: index.docbook:773
+msgid "May be used to completely disable the second level cache, which is enabled by default for classes which specify a <literal><cache></literal> mapping."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>classname.of.QueryCache</literal>"
+
+#: index.docbook:785
+msgid "hibernate.cache.query_cache_factory"
+msgstr "Un prefijo a usar para los nombres de región del caché de segundo nivel."
+
+#: index.docbook:787
+msgid "The classname of a custom <literal>QueryCache</literal> interface, defaults to the built-in <literal>StandardQueryCache</literal>."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>prefix</literal>"
+
+#: index.docbook:790
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.QueryCache</literal>"
+msgstr "hibernate.cache.use_structured_entries"
+
+#: index.docbook:798
+msgid "hibernate.cache.region_prefix"
+msgstr "Fuerza a Hibernate a almacenar los datos en el caché de segundo nivel en un formato más amigable al humano."
+
+#: index.docbook:800
+msgid "A prefix to use for second-level cache region names."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:802
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>prefix</literal>"
+msgstr "Propiedades de Transacción de Hibernate"
+
+#: index.docbook:810
+msgid "hibernate.cache.use_structured_entries"
+msgstr "Nombre de propiedad"
+
+#: index.docbook:812
+msgid "Forces Hibernate to store data in the second-level cache in a more human-friendly format."
+msgstr "Propósito"
+
+#: index.docbook:826
+msgid "Hibernate Transaction Properties"
+msgstr "El nombre de clase de un <literal>TransactionFactory</literal> a usar con la API de <literal>Transaction</literal> de Hibernate (por defectoa <literal>JDBCTransactionFactory</literal>)."
+
+#: index.docbook:839
+msgid "hibernate.transaction.factory_class"
+msgstr "Un nombre JNDI usado por <literal>JTATransactionFactory</literal> para obtener la <literal>UserTransaction</literal> JTA del servidor de aplicaciones."
+
+#: index.docbook:841
+msgid "The classname of a <literal>TransactionFactory</literal> to use with Hibernate <literal>Transaction</literal> API (defaults to <literal>JDBCTransactionFactory</literal>)."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>jndi/composite/name</literal>"
+
+#: index.docbook:845
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionFactory</literal>"
+msgstr "hibernate.transaction.manager_lookup_class"
+
+#: index.docbook:853
+msgid "jta.UserTransaction"
+msgstr "El nombre de clase de un <literal>TransactionManagerLookup</literal> requerido cuando el chaché a nivel de JVM está habilitado o cuando se usa un generador alto/bajo en un entorno JTA."
+
+#: index.docbook:855
+msgid "A JNDI name used by <literal>JTATransactionFactory</literal> to obtain the JTA <literal>UserTransaction</literal> from the application server."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>classname.of.TransactionManagerLookup</literal>"
+
+#: index.docbook:867
+msgid "hibernate.transaction.manager_lookup_class"
+msgstr "De habilitarse, la sesión se limpiará (flushed) automáticamente durante la fase previa a la compleción de la transacción. (Muy útil cuando se usa Hibernate con CMT)."
+
+#: index.docbook:869
+msgid "The classname of a <literal>TransactionManagerLookup</literal> - required when JVM-level caching is enabled or when using hilo generator in a JTA environment."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:873
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionManagerLookup</literal>"
+msgstr "hibernate.transaction.auto_close_session"
+
+#: index.docbook:881
+msgid "hibernate.transaction.flush_before_completion"
+msgstr "De habilitarse, la sesión será cerrada automáticamente durante la fase posterior a la compleción de la transacción. (Muy útil cuando se usa Hibernate con CMT)."
+
+#: index.docbook:883
+msgid "If enabled, the session will be automatically flushed during the before completion phase of the transaction. Built-in and automatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:896
+msgid "hibernate.transaction.auto_close_session"
+msgstr "Nombre de propiedad"
+
+#: index.docbook:898
+msgid "If enabled, the session will be automatically closed during the after completion phase of the transaction. Built-in and utomatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr "Propósito"
+
+#: index.docbook:914
+msgid "Miscellaneous Properties"
+msgstr "Elige la implementación de parser HQL."
+
+#: index.docbook:927
+msgid "hibernate.current_session_context_class"
+msgstr "Mapeos de símbolos en consultas Hibernate a símbolos SQL. (los símbolos puedem ser nombres de función o literales, por ejemplo)."
+
+#: index.docbook:929
+msgid "Supply a (custom) strategy for the scoping of the \"current\" <literal>Session</literal>. See <xref linkend=\"architecture-current-session\"/> for more information about the built-in strategies."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>"
+
+#: index.docbook:934
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jta</literal> | <literal>thread</literal> | <literal>managed</literal> | <literal>custom.Class</literal>"
+msgstr "hibernate.hbm2ddl.auto"
+
+#: index.docbook:943
+msgid "hibernate.query.factory_class"
+msgstr "Exporta automáticamente DDL de esquema cuando al crear la <literal>SessionFactory</literal>. Con <literal>create-drop</literal>, el esquema de base de datos será desechado cuando la <literal>SessionFactory</literal> se cierre explícitamente."
+
+#: index.docbook:945
+msgid "Chooses the HQL parser implementation."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+
+#: index.docbook:947
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>"
+msgstr "hibernate.cglib.use_reflection_optimizer"
+
+#: index.docbook:956
+msgid "hibernate.query.substitutions"
+msgstr "Habilita el uso de CGLIB en vez de refleccón en tiempo de ejecución (propiedad a nivel de sistema). La reflección a veces puede ser útil ante la aparición de problemas. Observa que Hibernate siempre requiere CGLIB incluso si desactivas el optimizador. No puedes establecer esta propiedad en <literal>hibernate.cfg.xml</literal>."
+
+#: index.docbook:958
+msgid "Mapping from tokens in Hibernate queries to SQL tokens (tokens might be function or literal names, for example)."
+msgstr "<emphasis role=\"strong\">ej.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:961
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>"
+msgstr "SQL Dialects"
+
+#: index.docbook:969
+msgid "hibernate.hbm2ddl.auto"
+msgstr "You should always set the <literal>hibernate.dialect</literal> property to the correct <literal>org.hibernate.dialect.Dialect</literal> subclass for your database. If you specify a dialect, Hibernate will use sensible defaults for some of the other properties listed above, saving you the effort of specifying them manually."
+
+#: index.docbook:971
+msgid "Automatically validate or export schema DDL to the database when the <literal>SessionFactory</literal> is created. With <literal>create-drop</literal>, the database schema will be dropped when the <literal>SessionFactory</literal> is closed explicitly."
+msgstr "Dialectos SQL de Hibernate(<literal>hibernate.dialect</literal>)"
+
+#: index.docbook:977
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>validate</literal> | <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+msgstr "RDBMS"
+
+#: index.docbook:986
+msgid "hibernate.cglib.use_reflection_optimizer"
+msgstr "Dialecto"
+
+#: index.docbook:988
+msgid "Enables use of CGLIB instead of runtime reflection (System-level property). Reflection can sometimes be useful when troubleshooting, note that Hibernate always requires CGLIB even if you turn off the optimizer. You can not set this property in <literal>hibernate.cfg.xml</literal>."
+msgstr "<entry>DB2</entry>"
+
+#: index.docbook:1004
+msgid "SQL Dialects"
+msgstr "DB2 AS/400"
+
+#: index.docbook:1006
+msgid "You should always set the <literal>hibernate.dialect</literal> property to the correct <literal>org.hibernate.dialect.Dialect</literal> subclass for your database. If you specify a dialect, Hibernate will use sensible defaults for some of the other properties listed above, saving you the effort of specifying them manually."
+msgstr "org.hibernate.dialect.DB2400Dialect"
+
+#: index.docbook:1014
+msgid "Hibernate SQL Dialects (<literal>hibernate.dialect</literal>)"
+msgstr "DB2 OS390"
+
+#: index.docbook:1022
+msgid "RDBMS"
+msgstr "org.hibernate.dialect.DB2390Dialect"
+
+#: index.docbook:1023
+msgid "Dialect"
+msgstr "PostgreSQL"
+
+#: index.docbook:1028
+msgid "<entry>DB2</entry>"
+msgstr "org.hibernate.dialect.PostgreSQLDialect"
+
+#: index.docbook:1028
+msgid "org.hibernate.dialect.DB2Dialect"
+msgstr "MySQL"
+
+#: index.docbook:1031
+msgid "DB2 AS/400"
+msgstr "org.hibernate.dialect.MySQLDialect"
+
+#: index.docbook:1031
+msgid "org.hibernate.dialect.DB2400Dialect"
+msgstr "MySQL con InnoDB"
+
+#: index.docbook:1034
+msgid "DB2 OS390"
+msgstr "org.hibernate.dialect.MySQLInnoDBDialect"
+
+#: index.docbook:1034
+msgid "org.hibernate.dialect.DB2390Dialect"
+msgstr "MySQL con MyISAM"
+
+#: index.docbook:1037
+msgid "PostgreSQL"
+msgstr "org.hibernate.dialect.MySQLMyISAMDialect"
+
+#: index.docbook:1037
+msgid "org.hibernate.dialect.PostgreSQLDialect"
+msgstr "Oracle (cualquier versión)"
+
+#: index.docbook:1040
+msgid "MySQL"
+msgstr "org.hibernate.dialect.OracleDialect"
+
+#: index.docbook:1040
+msgid "org.hibernate.dialect.MySQLDialect"
+msgstr "Oracle 9i/10g"
+
+#: index.docbook:1043
+msgid "MySQL with InnoDB"
+msgstr "org.hibernate.dialect.Oracle9Dialect"
+
+#: index.docbook:1043
+msgid "org.hibernate.dialect.MySQLInnoDBDialect"
+msgstr "Sybase"
+
+#: index.docbook:1046
+msgid "MySQL with MyISAM"
+msgstr "org.hibernate.dialect.SybaseDialect"
+
+#: index.docbook:1046
+msgid "org.hibernate.dialect.MySQLMyISAMDialect"
+msgstr "Sybase Anywhere"
+
+#: index.docbook:1049
+msgid "Oracle (any version)"
+msgstr "org.hibernate.dialect.SybaseAnywhereDialect"
+
+#: index.docbook:1049
+msgid "org.hibernate.dialect.OracleDialect"
+msgstr "Microsoft SQL Server"
+
+#: index.docbook:1052
+msgid "Oracle 9i/10g"
+msgstr "org.hibernate.dialect.SQLServerDialect"
+
+#: index.docbook:1052
+msgid "org.hibernate.dialect.Oracle9Dialect"
+msgstr "SAP DB"
+
+#: index.docbook:1055
+msgid "Sybase"
+msgstr "org.hibernate.dialect.SAPDBDialect"
+
+#: index.docbook:1055
+msgid "org.hibernate.dialect.SybaseDialect"
+msgstr "Informix"
+
+#: index.docbook:1058
+msgid "Sybase Anywhere"
+msgstr "org.hibernate.dialect.InformixDialect"
+
+#: index.docbook:1058
+msgid "org.hibernate.dialect.SybaseAnywhereDialect"
+msgstr "HypersonicSQL"
+
+#: index.docbook:1061
+msgid "Microsoft SQL Server"
+msgstr "org.hibernate.dialect.HSQLDialect"
+
+#: index.docbook:1061
+msgid "org.hibernate.dialect.SQLServerDialect"
+msgstr "Ingres"
+
+#: index.docbook:1064
+msgid "SAP DB"
+msgstr "org.hibernate.dialect.IngresDialect"
+
+#: index.docbook:1064
+msgid "org.hibernate.dialect.SAPDBDialect"
+msgstr "Progress"
+
+#: index.docbook:1067
+msgid "Informix"
+msgstr "org.hibernate.dialect.ProgressDialect"
+
+#: index.docbook:1067
+msgid "org.hibernate.dialect.InformixDialect"
+msgstr "Mckoi SQL"
+
+#: index.docbook:1070
+msgid "HypersonicSQL"
+msgstr "org.hibernate.dialect.MckoiDialect"
+
+#: index.docbook:1070
+msgid "org.hibernate.dialect.HSQLDialect"
+msgstr "Interbase"
+
+#: index.docbook:1073
+msgid "Ingres"
+msgstr "org.hibernate.dialect.InterbaseDialect"
+
+#: index.docbook:1073
+msgid "org.hibernate.dialect.IngresDialect"
+msgstr "Pointbase"
+
+#: index.docbook:1076
+msgid "Progress"
+msgstr "org.hibernate.dialect.PointbaseDialect"
+
+#: index.docbook:1076
+msgid "org.hibernate.dialect.ProgressDialect"
+msgstr "FrontBase"
+
+#: index.docbook:1079
+msgid "Mckoi SQL"
+msgstr "org.hibernate.dialect.FrontbaseDialect"
+
+#: index.docbook:1079
+msgid "org.hibernate.dialect.MckoiDialect"
+msgstr "Firebird"
+
+#: index.docbook:1082
+msgid "Interbase"
+msgstr "org.hibernate.dialect.FirebirdDialect"
+
+#: index.docbook:1082
+msgid "org.hibernate.dialect.InterbaseDialect"
+msgstr "Recuperación por Unión Externa (Outer Join Fetching)"
+
+#: index.docbook:1085
+msgid "Pointbase"
+msgstr "Si tu base de datos soporta uniones externas del estilo ANSI, Oracle o Sybase, la <emphasis>recuperación por unión externa</emphasis> aumentará frecuentemente el rendimiento limitando el número de llamadas a la base de datos (al costo de más trabajo posiblemente realizado por la base de datos misma). La recuperación por unión externa permite que un grafo completo de objetos conectados por asociaciones muchos-a-uno, uno-a-muchos, muchos-a-muchos y uno-a-uno sea traído en una sola <literal>SELECT</literal> SQL."
+
+#: index.docbook:1085
+msgid "org.hibernate.dialect.PointbaseDialect"
+msgstr "La recuperación por unión externa puede ser deshabilitada <emphasis>globalmente</emphasis> estableciendo la propiedad <literal>hibernate.max_fetch_depth</literal> a <literal>0</literal>. Un valor de <literal>1</literal> o mayor habilita la recuperación por unión externa para asociaciones uno-a-uno y muchos-a-uno que hayan sido mapeadas con <literal>fetch=\"join\"</literal>."
+
+#: index.docbook:1088
+msgid "FrontBase"
+msgstr "Ver <xref linkend=\"performance-fetching\"/> para más información."
+
+#: index.docbook:1088
+msgid "org.hibernate.dialect.FrontbaseDialect"
+msgstr "Flujos Binarios"
+
+#: index.docbook:1091
+msgid "Firebird"
+msgstr "Oracle limita el tamaño de arrays de <literal>byte</literal> que puedan ser pasados a/desde su driver JDBC. Si deseas usar instancias grandes de tipo <literal>binary</literal> o <literal>serializable</literal>, debes habilitar <literal>hibernate.jdbc.use_streams_for_binary</literal>. <emphasis>Esta es una propiedad a nivel de sistema solamente.</emphasis>"
+
+#: index.docbook:1091
+msgid "org.hibernate.dialect.FirebirdDialect"
+msgstr "Caché de segundo nivel y de lectura"
+
+#: index.docbook:1100
+msgid "Outer Join Fetching"
+msgstr "Las propiedades prefijadas por <literal>hibernate.cache</literal> te permiten usar un sistema de caché de segundo nivel en el ámbito de un proceso o cluster con Hibernate. Ver <xref linkend=\"performance-cache\"/> para más detalles."
+
+#: index.docbook:1102
+msgid "If your database supports ANSI, Oracle or Sybase style outer joins, <emphasis>outer join fetching</emphasis> will often increase performance by limiting the number of round trips to and from the database (at the cost of possibly more work performed by the database itself). Outer join fetching allows a whole graph of objects connected by many-to-one, one-to-many, many-to-many and one-to-one associations to be retrieved in a single SQL <literal>SELECT</literal>."
+msgstr "Sustitución de Lenguaje de Consulta"
+
+#: index.docbook:1111
+msgid "Outer join fetching may be disabled <emphasis>globally</emphasis> by setting the property <literal>hibernate.max_fetch_depth</literal> to <literal>0</literal>. A setting of <literal>1</literal> or higher enables outer join fetching for one-to-one and many-to-one associations which have been mapped with <literal>fetch=\"join\"</literal>."
+msgstr "Puedes definir nuevos símbolos de consulta de Hibernate usando <literal>hibernate.query.substitutions</literal>. Por ejemplo:"
+
+#: index.docbook:1119
+msgid "See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "hibernate.query.substitutions true=1, false=0"
+
+#: index.docbook:1126
+msgid "Binary Streams"
+msgstr "causaría que los símbolos <literal>true</literal> y <literal>false</literal> sean traducidos a literales enteros en el SQL generado."
+
+#: index.docbook:1128
+msgid "Oracle limits the size of <literal>byte</literal> arrays that may be passed to/from its JDBC driver. If you wish to use large instances of <literal>binary</literal> or <literal>serializable</literal> type, you should enable <literal>hibernate.jdbc.use_streams_for_binary</literal>. <emphasis>This is a system-level setting only.</emphasis>"
+msgstr "hibernate.query.substitutions toLowercase=LOWER"
+
+#: index.docbook:1139
+msgid "Second-level and query cache"
+msgstr "te permitiría renombrar la función <literal>LOWER</literal> de SQL."
+
+#: index.docbook:1141
+msgid "The properties prefixed by <literal>hibernate.cache</literal> allow you to use a process or cluster scoped second-level cache system with Hibernate. See the <xref linkend=\"performance-cache\"/> for more details."
+msgstr "Hibernate statistics"
+
+#: index.docbook:1151
+msgid "Query Language Substitution"
+msgstr "Si habilitas <literal>hibernate.generate_statistics</literal>, Hibernate expondrá un número de métricas que son útiles al afinar un sistema en ejecución vía <literal>SessionFactory.getStatistics()</literal>. Hibernate puede incluso ser configurado para exponer estas estadísticas vía JMX. Lee el Javadoc de las interfaces en <literal>org.hibernate.stats</literal> para más información."
+
+#: index.docbook:1153
+msgid "You may define new Hibernate query tokens using <literal>hibernate.query.substitutions</literal>. For example:"
+msgstr "Registros de mensajes (Logging)"
+
+#: index.docbook:1158
+msgid "hibernate.query.substitutions true=1, false=0"
+msgstr "Hibernate registra varios eventos usando commons-logging de Apache."
+
+#: index.docbook:1160
+msgid "would cause the tokens <literal>true</literal> and <literal>false</literal> to be translated to integer literals in the generated SQL."
+msgstr "El servicio de commons-logging saldrá directamente ya sea a Log4J (si incluyes <literal>log4j.jar</literal> in your classpath) o JDK1.4 logging (al ejecutar bajo JDK1.4 o superior). Puedes descargar Log4J desde <literal>http://logging.apache.org</literal>. Para usar Log4J necesitarás colocar un fichero <literal>log4j.properties</literal> en tu classpath. Un fichero de propiedades de ejemplo se distribuye con Hibernate en el directorio <literal>src/</literal>."
+
+#: index.docbook:1165
+msgid "hibernate.query.substitutions toLowercase=LOWER"
+msgstr "Recomendamos fuertemente que te familiarices con los registros de mensajes de Hibernate. Se ha puesto un gran trabajo en hacer los registros de Hibernate tan detallados como se puede, sin hacerlos ilegibles. Es un dispositivo esencial en la resolución de problemas. Las categorías de registro más interesantes son las siguientes:"
+
+#: index.docbook:1167
+msgid "would allow you to rename the SQL <literal>LOWER</literal> function."
+msgstr "Categorías de Registro de Hibernate"
+
+#: index.docbook:1174
+msgid "Hibernate statistics"
+msgstr "Categoría"
+
+#: index.docbook:1176
+msgid "If you enable <literal>hibernate.generate_statistics</literal>, Hibernate will expose a number of metrics that are useful when tuning a running system via <literal>SessionFactory.getStatistics()</literal>. Hibernate can even be configured to expose these statistics via JMX. Read the Javadoc of the interfaces in <literal>org.hibernate.stats</literal> for more information."
+msgstr "Función"
+
+#: index.docbook:1188
+msgid "Logging"
+msgstr "org.hibernate.SQL"
+
+#: index.docbook:1190
+msgid "Hibernate logs various events using Apache commons-logging."
+msgstr "Registra todas las sentencias DML de SQL a medida que se ejecutan"
+
+#: index.docbook:1194
+msgid "The commons-logging service will direct output to either Apache Log4j (if you include <literal>log4j.jar</literal> in your classpath) or JDK1.4 logging (if running under JDK1.4 or above). You may download Log4j from <literal>http://jakarta.apache.org</literal>. To use Log4j you will need to place a <literal>log4j.properties</literal> file in your classpath, an example properties file is distributed with Hibernate in the <literal>src/</literal> directory."
+msgstr "org.hibernate.type"
+
+#: index.docbook:1204
+msgid "We strongly recommend that you familiarize yourself with Hibernate's log messages. A lot of work has been put into making the Hibernate log as detailed as possible, without making it unreadable. It is an essential troubleshooting device. The most interesting log categories are the following:"
+msgstr "Registra todos los parámetros JDBC"
+
+#: index.docbook:1213
+msgid "Hibernate Log Categories"
+msgstr "org.hibernate.tool.hbm2ddl"
+
+#: index.docbook:1219
+msgid "Category"
+msgstr "Registra todas las sentencias DDL de SQL a medida que se ejecutan"
+
+#: index.docbook:1220
+msgid "Function"
+msgstr "org.hibernate.pretty"
+
+#: index.docbook:1225
+msgid "org.hibernate.SQL"
+msgstr "Registra el estado de todas las entidades (máximo de 20 entidades) asociadas con la sesión en tiempo de limpieza (flush)"
+
+#: index.docbook:1226
+msgid "Log all SQL DML statements as they are executed"
+msgstr "org.hibernate.cache"
+
+#: index.docbook:1229
+msgid "org.hibernate.type"
+msgstr "Registra toda la actividad del caché de segundo nivel"
+
+#: index.docbook:1230
+msgid "Log all JDBC parameters"
+msgstr "org.hibernate.transaction"
+
+#: index.docbook:1233
+msgid "org.hibernate.tool.hbm2ddl"
+msgstr "Registra la actividad relacionada con la transacción"
+
+#: index.docbook:1234
+msgid "Log all SQL DDL statements as they are executed"
+msgstr "org.hibernate.jdbc"
+
+#: index.docbook:1237
+msgid "org.hibernate.pretty"
+msgstr "Registra toda adquisición de recursos JDBC"
+
+#: index.docbook:1238
+msgid "Log the state of all entities (max 20 entities) associated with the session at flush time"
+msgstr "org.hibernate.hql.ast"
+
+#: index.docbook:1244
+msgid "org.hibernate.cache"
+msgstr "Regista los ASTs de HQL y SQL, así como otra información sobre análisis de consultas."
+
+#: index.docbook:1245
+msgid "Log all second-level cache activity"
+msgstr "org.hibernate.secure"
+
+#: index.docbook:1248
+msgid "org.hibernate.transaction"
+msgstr "Registra todas las peticiones de autorización JAAS"
+
+#: index.docbook:1249
+msgid "Log transaction related activity"
+msgstr "org.hibernate"
+
+#: index.docbook:1252
+msgid "org.hibernate.jdbc"
+msgstr "Registra todo (mucha información, pero muy útil para la resolución de problemas)"
+
+#: index.docbook:1253
+msgid "Log all JDBC resource acquisition"
+msgstr "Al desarrollar aplicacinoes con Hibernate, casi siempre debes trabajar con <literal>debug</literal> habilitado para la categoría <literal>org.hibernate.SQL</literal> o, alternativamente, la propiedad <literal>hibernate.show_sql</literal> habilitada."
+
+#: index.docbook:1256
+msgid "org.hibernate.hql.ast.AST"
+msgstr "Implementando una <literal>NamingStrategy</literal>"
+
+#: index.docbook:1257
+msgid "Log HQL and SQL ASTs during query parsing"
+msgstr "La interface <literal>org.hibernate.cfg.NamingStrategy</literal> te permite especificar un \"estándar de nombrado\" para objetos de la base de datos y elementos de esquema."
+
+#: index.docbook:1262
+msgid "org.hibernate.secure"
+msgstr "Puedes proveer reglas para generar automáticamente identificadores de base de datos a partir de identificadores JDBC o para procesar nombres \"lógicos\" de columnas y tablas dados en el fichero de mapeo en nombres \"físicos\" de columnas y tablas. Esta funcionalidad ayuda a reducir la verborragia del documento de mapeo, eliminando ruido repetitivo (prefijos <literal>TBL_</literal>, por ejemplo). La estrategia por defecto usada por Hibernate mínima en absoluto."
+
+#: index.docbook:1263
+msgid "Log all JAAS authorization requests"
+msgstr "Puedes especificar una estrategia diferente llamando a <literal>Configuration.setNamingStrategy()</literal> antes de agregar los mapeos:"
+
+#: index.docbook:1266
+msgid "org.hibernate"
+msgstr ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)\n"
+ " .addFile(\"Item.hbm.xml\")\n"
+ " .addFile(\"Bid.hbm.xml\")\n"
+ " .buildSessionFactory();]]>"
+
+#: index.docbook:1267
+msgid "Log everything (a lot of information, but very useful for troubleshooting)"
+msgstr "<literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> es una estrategia prefabricada que puede ser un punto de partida útil para algunas aplicaciones."
+
+#: index.docbook:1276
+msgid "When developing applications with Hibernate, you should almost always work with <literal>debug</literal> enabled for the category <literal>org.hibernate.SQL</literal>, or, alternatively, the property <literal>hibernate.show_sql</literal> enabled."
+msgstr "Fichero de configuración XML"
+
+#: index.docbook:1286
+msgid "Implementing a <literal>NamingStrategy</literal>"
+msgstr "Un enfoque alternativo de configuración es especificar una configuración completa en un fichero llamado <literal>hibernate.cfg.xml</literal>. Este fichero puede ser usado como un remplazo del fichero <literal>hibernate.properties</literal> o, si ambos están presentes, para sobrescribir propiedades."
+
+#: index.docbook:1288
+msgid "The interface <literal>org.hibernate.cfg.NamingStrategy</literal> allows you to specify a \"naming standard\" for database objects and schema elements."
+msgstr "El fichero de configuración XML se espera por defecto en la raíz o tu <literal>CLASSPATH</literal>. He aquí un ejemplo:"
+
+#: index.docbook:1293
+msgid "You may provide rules for automatically generating database identifiers from Java identifiers or for processing \"logical\" column and table names given in the mapping file into \"physical\" table and column names. This feature helps reduce the verbosity of the mapping document, eliminating repetitive noise (<literal>TBL_</literal> prefixes, for example). The default strategy used by Hibernate is quite minimal."
+msgstr ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <!-- a SessionFactory instance listed as /jndi/name -->\n"
+ " <session-factory\n"
+ " name=\"java:hibernate/SessionFactory\">\n"
+ "\n"
+ " <!-- properties -->\n"
+ " <property name=\"connection.datasource\">java:/comp/env/jdbc/MyDB</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.MySQLDialect</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"transaction.factory_class\">\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ " </property>\n"
+ " <property name=\"jta.UserTransaction\">java:comp/UserTransaction</property>\n"
+ "\n"
+ " <!-- mapping files -->\n"
+ " <mapping resource=\"org/hibernate/auction/Item.hbm.xml\"/>\n"
+ " <mapping resource=\"org/hibernate/auction/Bid.hbm.xml\"/>\n"
+ "\n"
+ " <!-- cache settings -->\n"
+ " <class-cache class=\"org.hibernate.auction.Item\" usage=\"read-write\"/>\n"
+ " <class-cache class=\"org.hibernate.auction.Bid\" usage=\"read-only\"/>\n"
+ " <collection-cache collection=\"org.hibernate.auction.Item.bids\" usage=\"read-write\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:1302
+msgid "You may specify a different strategy by calling <literal>Configuration.setNamingStrategy()</literal> before adding mappings:"
+msgstr "Como puedes ver, la ventaja de este enfoque es la externalización de los nombres de los fichero de mapeo a configuración. El <literal>hibernate.cfg.xml</literal> es también más conveniente una vez que hayas afinado el caché de Hibernate. Observa que elección tuya usar ya sea <literal>hibernate.properties</literal> o <literal>hibernate.cfg.xml</literal>, ambos son equivalentes, excepto por los beneficios de usar la sintaxis XML arriba mencionados."
+
+#: index.docbook:1307
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)\n"
+ " .addFile(\"Item.hbm.xml\")\n"
+ " .addFile(\"Bid.hbm.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr "Con la configuración XML, arrancar Hibernate es tan simple como"
+
+#: index.docbook:1309
+msgid "<literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> is a built-in strategy that might be a useful starting point for some applications."
+msgstr "<![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]>"
+
+#: index.docbook:1317
+msgid "XML configuration file"
+msgstr "Puedes tomar un fichero XML diferente usando"
+
+#: index.docbook:1319
+msgid "An alternative approach to configuration is to specify a full configuration in a file named <literal>hibernate.cfg.xml</literal>. This file can be used as a replacement for the <literal>hibernate.properties</literal> file or, if both are present, to override properties."
+msgstr ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .configure(\"catdb.cfg.xml\")\n"
+ " .buildSessionFactory();]]>"
+
+#: index.docbook:1326
+msgid "The XML configuration file is by default expected to be in the root o your <literal>CLASSPATH</literal>. Here is an example:"
+msgstr "Integració con Servidores de Aplicaciones J2EE"
+
+#: index.docbook:1331
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <!-- a SessionFactory instance listed as /jndi/name -->\n"
+ " <session-factory\n"
+ " name=\"java:hibernate/SessionFactory\">\n"
+ "\n"
+ " <!-- properties -->\n"
+ " <property name=\"connection.datasource\">java:/comp/env/jdbc/MyDB</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.MySQLDialect</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"transaction.factory_class\">\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ " </property>\n"
+ " <property name=\"jta.UserTransaction\">java:comp/UserTransaction</property>\n"
+ "\n"
+ " <!-- mapping files -->\n"
+ " <mapping resource=\"org/hibernate/auction/Item.hbm.xml\"/>\n"
+ " <mapping resource=\"org/hibernate/auction/Bid.hbm.xml\"/>\n"
+ "\n"
+ " <!-- cache settings -->\n"
+ " <class-cache class=\"org.hibernate.auction.Item\" usage=\"read-write\"/>\n"
+ " <class-cache class=\"org.hibernate.auction.Bid\" usage=\"read-only\"/>\n"
+ " <collection-cache collection=\"org.hibernate.auction.Item.bids\" usage=\"read-write\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr "Hibernate tiene los siguientes puntos de integración con la infraestructura J2EE:"
+
+#: index.docbook:1333
+msgid "As you can see, the advantage of this approach is the externalization of the mapping file names to configuration. The <literal>hibernate.cfg.xml</literal> is also more convenient once you have to tune the Hibernate cache. Note that is your choice to use either <literal>hibernate.properties</literal> or <literal>hibernate.cfg.xml</literal>, both are equivalent, except for the above mentioned benefits of using the XML syntax."
+msgstr "<emphasis>Datasources manejados por contenedor</emphasis>: Hibernate puede usar conexiones JDBC manejadas por el contenedor y provistas a través de JNDI. Usualmente, un <literal>TransactionManager</literal> compatible con JTA y un <literal>ResourceManager</literal> cuidan del manejo de transacciones (CMT), esp. manejo de transacciones distribuídas a través de varios datasources. Puedes también, por supuesto, demarcar los límites de las transacciones programáticamente (BMT) o podrías querer usar para esto la API opcional de <literal>Transaction</literal> de Hibernate para mantener tu código portable."
+
+#: index.docbook:1342
+msgid "With the XML configuration, starting Hibernate is then as simple as"
+msgstr "<emphasis>Ligamento Automático JNDI</emphasis>: Hibernate puede ligar sus <literal>SessionFactory</literal> a JNDI después del arranque."
+
+#: index.docbook:1346
+msgid "<![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]>"
+msgstr "<emphasis>Ligamento de Sesión JTA:</emphasis> La <literal>Session</literal> de Hibernate puede ser ligada automáticamente al ámbito de transacciones JTA si usas EJBs. Simplemente busca la <literal>SessionFactory</literal> de JNDI y obtén la <literal>Session</literal> actual. Deja que Hibernate cuide de limpiar y cerrar la <literal>Session</literal> cuando se complete tu transacción JTA. La demarcación de transacción es declarativa, en descriptores de despliegue de EJB."
+
+#: index.docbook:1348
+msgid "You can pick a different XML configuration file using"
+msgstr "<emphasis>Despliegue JMX:</emphasis> Si tienes un servidor de aplicaciones capaz de JMX (por ejemplo, JBoss AS), puedes optar por desplegar Hibernate como un MBean manejado. Esto te ahorra el código de una línea de arranque para construir tu <literal>SessionFactory</literal> desde una <literal>Configuration</literal>. El contenedor arrancará tu <literal>HibernateService</literal>, e idealmente también cuidará de las dependencias entre servicios (El datasource debe estar disponible antes que arranque Hibernate, etc)."
+
+#: index.docbook:1352
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .configure(\"catdb.cfg.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr "Dependiendo de tu entorno, podrías tener que establecer la opción de configuración <literal>hibernate.connection.aggressive_release</literal> a true si tu servidor de aplicaciones muestra excepciones \"connection containment\"."
+
+#: index.docbook:1357
+msgid "J2EE Application Server integration"
+msgstr "Configuración de la estrategia de transacción"
+
+#: index.docbook:1359
+msgid "Hibernate has the following integration points for J2EE infrastructure:"
+msgstr "La API de <literal>Session</literal> de Hibernate es independiente de cualquier demarcación de transacción en tu arquitectura. Si dejas que Hibernate use JDBC directamente, a través de un pool de conexiones. puedes comenzar y acabar tus transacciones llamando la API de JDBC. Si ejecutas en un servidor de aplicaciones J2EE, podréas querer usar transacciones manejadas por bean y llamar la API de JTA y <literal>UserTransaction</literal> cuando sea necesario."
+
+#: index.docbook:1365
+msgid "<emphasis>Container-managed datasources</emphasis>: Hibernate can use JDBC connections managed by the container and provided through JNDI. Usually, a JTA compatible <literal>TransactionManager</literal> and a <literal>ResourceManager</literal> take care of transaction management (CMT), esp. distributed transaction handling across several datasources. You may of course also demarcate transaction boundaries programmatically (BMT) or you might want to use the optional Hibernate <literal>Transaction</literal> API for this to keep your code portable."
+msgstr "Para mantener tu código portable entre estos dos (y otros) entornos recomendamos la API de <literal>Transaction</literal> de Hibernate, que envuelve y oculta el sistema subyacente. Tienes que especificar una clase fábrica para las instancias de <literal>Transaction</literal> estableciendo la propiedad de configuración <literal>hibernate.transaction.factory_class</literal> de Hibernate."
+
+#: index.docbook:1380
+msgid "<emphasis>Automatic JNDI binding</emphasis>: Hibernate can bind its <literal>SessionFactory</literal> to JNDI after startup."
+msgstr "Hay tres elecciones estándar (prefabricadas):"
+
+#: index.docbook:1389
+msgid "<emphasis>JTA Session binding:</emphasis> The Hibernate <literal>Session</literal> may be automatically bound to the scope of JTA transactions. Simply lookup the <literal>SessionFactory</literal> from JNDI and get the current <literal>Session</literal>. Let Hibernate take care of flushing and closing the <literal>Session</literal> when your JTA transaction completes. Transaction demarcation is either declarative (CMT) or programmatic (BMT/UserTransaction)."
+msgstr "org.hibernate.transaction.JDBCTransactionFactory"
+
+#: index.docbook:1402
+msgid "<emphasis>JMX deployment:</emphasis> If you have a JMX capable application server (e.g. JBoss AS), you can chose to deploy Hibernate as a managed MBean. This saves you the one line startup code to build your <literal>SessionFactory</literal> from a <literal>Configuration</literal>. The container will startup your <literal>HibernateService</literal>, and ideally also take care of service dependencies (Datasource has to be available before Hibernate starts, etc)."
+msgstr "delega a transacciones de base de datos (JDBC) (por defecto)"
+
+#: index.docbook:1413
+msgid "Depending on your environment, you might have to set the configuration option <literal>hibernate.connection.aggressive_release</literal> to true if your application server shows \"connection containment\" exceptions."
+msgstr "org.hibernate.transaction.JTATransactionFactory"
+
+#: index.docbook:1420
+msgid "Transaction strategy configuration"
+msgstr "delega a transacciones manejadas por contenedor si una transacción existente estó por debajo en este contexto (ej. método de un bean de sesión EJB), en otro caso una nueva transacción es comenzada y se usan transacciones manejadas por bean."
+
+#: index.docbook:1422
+msgid "The Hibernate <literal>Session</literal> API is independent of any transaction demarcation system in your architecture. If you let Hibernate use JDBC directly, through a connection pool, you may begin and end your transactions by calling the JDBC API. If you run in a J2EE application server, you might want to use bean-managed transactions and call the JTA API and <literal>UserTransaction</literal> when needed."
+msgstr "org.hibernate.transaction.CMTTransactionFactory"
+
+#: index.docbook:1430
+msgid "To keep your code portable between these two (and other) environments we recommend the optional Hibernate <literal>Transaction</literal> API, which wraps and hides the underlying system. You have to specify a factory class for <literal>Transaction</literal> instances by setting the Hibernate configuration property <literal>hibernate.transaction.factory_class</literal>."
+msgstr "delega a transacciones JTA manejadas por contenedor"
+
+#: index.docbook:1437
+msgid "There are three standard (built-in) choices:"
+msgstr "Puedes definir también tus propias estrategias de transacción (para un servicio de transacción CORBA, por ejemplo)."
+
+#: index.docbook:1443
+msgid "org.hibernate.transaction.JDBCTransactionFactory"
+msgstr "Algunas funcionalidades en Hibernate (ej, el caché de segundo nivel, ligamento automático de JTA y Session, etc.) requieren acceso al <literal>TransactionManager</literal> de JTA en un entorno manejado. En un servidor de aplicaciones tienes que especificar cómo Hibernate debe obtener una referencia al <literal>TransactionManager</literal>, pues J2EE no estandariza un solo mecanismo:"
+
+#: index.docbook:1445
+msgid "delegates to database (JDBC) transactions (default)"
+msgstr "TransactionManagers de JTA"
+
+#: index.docbook:1449
+msgid "org.hibernate.transaction.JTATransactionFactory"
+msgstr "Transaction Factory"
+
+#: index.docbook:1451
+msgid "delegates to container-managed transaction if an existing transaction is underway in this context (e.g. EJB session bean method), otherwise a new transaction is started and bean-managed transaction are used."
+msgstr "Servidor de Aplicaciones"
+
+#: index.docbook:1459
+msgid "org.hibernate.transaction.CMTTransactionFactory"
+msgstr "org.hibernate.transaction.JBossTransactionManagerLookup"
+
+#: index.docbook:1461
+msgid "delegates to container-managed JTA transactions"
+msgstr "JBoss"
+
+#: index.docbook:1466
+msgid "You may also define your own transaction strategies (for a CORBA transaction service, for example)."
+msgstr "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+
+#: index.docbook:1471
+msgid "Some features in Hibernate (i.e. the second level cache, Contextual Sessions with JTA, etc.) require access to the JTA <literal>TransactionManager</literal> in a managed environment. In an application server you have to specify how Hibernate should obtain a reference to the <literal>TransactionManager</literal>, since J2EE does not standardize a single mechanism:"
+msgstr "Weblogic"
+
+#: index.docbook:1479
+msgid "JTA TransactionManagers"
+msgstr "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+
+#: index.docbook:1485
+msgid "Transaction Factory"
+msgstr "WebSphere"
+
+#: index.docbook:1486
+msgid "Application Server"
+msgstr "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+
+#: index.docbook:1491
+msgid "org.hibernate.transaction.JBossTransactionManagerLookup"
+msgstr "WebSphere 6"
+
+#: index.docbook:1492
+msgid "JBoss"
+msgstr "org.hibernate.transaction.OrionTransactionManagerLookup"
+
+#: index.docbook:1495
+msgid "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+msgstr "Orion"
+
+#: index.docbook:1496
+msgid "Weblogic"
+msgstr "org.hibernate.transaction.ResinTransactionManagerLookup"
+
+#: index.docbook:1499
+msgid "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+msgstr "Resin"
+
+#: index.docbook:1500
+msgid "WebSphere"
+msgstr "org.hibernate.transaction.JOTMTransactionManagerLookup"
+
+#: index.docbook:1503
+msgid "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+msgstr "JOTM"
+
+#: index.docbook:1504
+msgid "WebSphere 6"
+msgstr "org.hibernate.transaction.JOnASTransactionManagerLookup"
+
+#: index.docbook:1507
+msgid "org.hibernate.transaction.OrionTransactionManagerLookup"
+msgstr "JOnAS"
+
+#: index.docbook:1508
+msgid "Orion"
+msgstr "org.hibernate.transaction.JRun4TransactionManagerLookup"
+
+#: index.docbook:1511
+msgid "org.hibernate.transaction.ResinTransactionManagerLookup"
+msgstr "JRun4"
+
+#: index.docbook:1512
+msgid "Resin"
+msgstr "org.hibernate.transaction.BESTransactionManagerLookup"
+
+#: index.docbook:1515
+msgid "org.hibernate.transaction.JOTMTransactionManagerLookup"
+msgstr "Borland ES"
+
+#: index.docbook:1516
+msgid "JOTM"
+msgstr "<literal>SessionFactory</literal> ligada a JNDI"
+
+#: index.docbook:1519
+msgid "org.hibernate.transaction.JOnASTransactionManagerLookup"
+msgstr "Una <literal>SessionFactory</literal> de Hibernate ligada a JNDI puede simplificar la obtención de la fábrica y la creación de nuevas <literal>Session</literal>s. Observa que esto no está relacionado a un <literal>Datasource</literal> ligado a JNDI, simplemente ambos usan el mismo registro!"
+
+#: index.docbook:1520
+msgid "JOnAS"
+msgstr "Si deseas tener la <literal>SessionFactory</literal> ligada a un espacio de nombres de JNDI, especifica un nombre (ej. <literal>java:hibernate/SessionFactory</literal>) usando la propiedad <literal>hibernate.session_factory_name</literal>. Si esta propiedad es omitida, la <literal>SessionFactory</literal> no será ligada a JNDI (Esto es especialmente útil en entornos con una implementació JNDI de sólo lectura por defecto, ej. Tomcat.)"
+
+#: index.docbook:1523
+msgid "org.hibernate.transaction.JRun4TransactionManagerLookup"
+msgstr "Al ligar la <literal>SessionFactory</literal> a JNDI, Hibernate usará los valores de <literal>hibernate.jndi.url</literal>, <literal>hibernate.jndi.class</literal> para instanciar un contexto inicial. Si étos no se especifican, se usará el <literal>InitialContext</literal> por defecto."
+
+#: index.docbook:1524
+msgid "JRun4"
+msgstr "Hibernate colocará automáticamente la <literal>SessionFactory</literal> en JNDI después que llames a <literal>cfg.buildSessionFactory()</literal>. Esto significa que tendrás al menos esta llamada en algún código de arranque (o clase de utilidad) en tu aplicación, a menos qie uses el despliegue JMX con el <literal>HibernateService</literal> (discutido luego)."
+
+#: index.docbook:1527
+msgid "org.hibernate.transaction.BESTransactionManagerLookup"
+msgstr "Si usas una <literal>SessionFactory</literal> de JNDI, un EJB o cualquier otra clase puede obtener la <literal>SessionFactory</literal> usando una búsqueda JNDI. Observa que esta configuración no es necesaria si usas la clase de ayuda <literal>HibernateUtil</literal> introducida en el capítulo uno, que actúa como un registro Singleton. Sin embargo, <literal>HibernateUtil</literal> es más común en un entorno no manejado."
+
+#: index.docbook:1528
+msgid "Borland ES"
+msgstr "Ligado automático de JTA y Session"
+
+#: index.docbook:1537
+msgid "JNDI-bound <literal>SessionFactory</literal>"
+msgstr "Para entornos no manejados hemos sugerido <literal>HibernateUtil</literal> con una <literal>SessionFactory</literal> estática, y administración de la <literal>Session</literal> de Hibernate. Este enfoque no es fácil de usar en un entorno EJB, al poder ejecutarse muchos EJBs dentro de la misma transacción pero no en la misma hebra. Recomendados que ligues la <literal>SessionFactory</literal> a JNDI en un entorno manejado."
+
+#: index.docbook:1539
+msgid "A JNDI bound Hibernate <literal>SessionFactory</literal> can simplify the lookup of the factory and the creation of new <literal>Session</literal>s. Note that this is not related to a JNDI bound <literal>Datasource</literal>, both simply use the same registry!"
+msgstr "En vez de rodar tu propia utilidad de <literal>ThreadLocal</literal>, usa el método <literal>getCurrentSession()</literal> en la <literal>SessionFactory</literal> para obtener una <literal>Session</literal> de Hibernate. Si no hubiese una <literal>Session</literal> de Hibernate en la transacción JTA actual, se arrancará y asignará una. Ambas opciones de configuración <literal>hibernate.transaction.flush_before_completion</literal> y <literal>hibernate.transaction.auto_close_session</literal>, serán establecidas automáticamente para cada <literal>Session</literal> que obtengas con <literal>getCurrentSession()</literal>, de modo que éstas serán limpiadas (flushed) y cerradas automáticamente cuando el contenedor complete las transacciones JTA."
+
+#: index.docbook:1546
+msgid "If you wish to have the <literal>SessionFactory</literal> bound to a JNDI namespace, specify a name (eg. <literal>java:hibernate/SessionFactory</literal>) using the property <literal>hibernate.session_factory_name</literal>. If this property is omitted, the <literal>SessionFactory</literal> will not be bound to JNDI. (This is especially useful in environments with a read-only JNDI default implementation, e.g. Tomcat.)"
+msgstr "Si tu, por ejemplo, usas el patrón de diseño DAO para escribir tu capa de persistencia, todos los DAO's buscan la <literal>SessionFactory</literal> cuando se necesite y abren la sesión \"actual\". No hay necesidad de pasar las instancias de <literal>SessionFactory</literal> o <literal>Session</literal> alrededor entre el código de control y el código DAO."
+
+#: index.docbook:1554
+msgid "When binding the <literal>SessionFactory</literal> to JNDI, Hibernate will use the values of <literal>hibernate.jndi.url</literal>, <literal>hibernate.jndi.class</literal> to instantiate an initial context. If they are not specified, the default <literal>InitialContext</literal> will be used."
+msgstr "Despliegue JMX"
+
+#: index.docbook:1561
+msgid "Hibernate will automatically place the <literal>SessionFactory</literal> in JNDI after you call <literal>cfg.buildSessionFactory()</literal>. This means you will at least have this call in some startup code (or utility class) in your application, unless you use JMX deployment with the <literal>HibernateService</literal> (discussed later)."
+msgstr "La línea <literal>cfg.buildSessionFactory()</literal> todavía tiene que ser ejecutada en algun sitio para obtener una <literal>SessionFactory</literal> en JNDI. Puedes hacer esto bien en un bloque inicializador <literal>static</literal> (como aquel en <literal>HibernateUtil</literal>) o bien despliegas Hibernate como un <emphasis>servicio manejado</emphasis>."
+
+#: index.docbook:1568
+msgid "If you use a JNDI <literal>SessionFactory</literal>, an EJB or any other class may obtain the <literal>SessionFactory</literal> using a JNDI lookup."
+msgstr "Hibernate se distribuye con <literal>org.hibernate.jmx.HibernateService</literal> para despliegue en un servidor de aplicaciones con capacidades JMX, como JBoss AS. El despliegue y la configuracón reales son específicos del vendedor. He aquí un <literal>jboss-service.xml</literal> de ejemplo para JBoss 4.0.x:"
+
+#: index.docbook:1573
+msgid "We recommend that you bind the <literal>SessionFactory</literal> to JNDI in a managed environment and use a <literal>static</literal> singleton otherwise. To shield your application code from these details, we also recommend to hide the actual lookup code for a <literal>SessionFactory</literal> in a helper class, such as <literal>HibernateUtil.getSessionFactory()</literal>. Note that such a class is also a convenient way to startup Hibernate—see chapter 1."
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<server>\n"
+ "\n"
+ "<mbean code=\"org.hibernate.jmx.HibernateService\"\n"
+ " name=\"jboss.jca:service=HibernateFactory,name=HibernateFactory\">\n"
+ "\n"
+ " <!-- Required services -->\n"
+ " <depends>jboss.jca:service=RARDeployer</depends>\n"
+ " <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>\n"
+ "\n"
+ " <!-- Bind the Hibernate service to JNDI -->\n"
+ " <attribute name=\"JndiName\">java:/hibernate/SessionFactory</attribute>\n"
+ "\n"
+ " <!-- Datasource settings -->\n"
+ " <attribute name=\"Datasource\">java:HsqlDS</attribute>\n"
+ " <attribute name=\"Dialect\">org.hibernate.dialect.HSQLDialect</attribute>\n"
+ "\n"
+ " <!-- Transaction integration -->\n"
+ " <attribute name=\"TransactionStrategy\">\n"
+ " org.hibernate.transaction.JTATransactionFactory</attribute>\n"
+ " <attribute name=\"TransactionManagerLookupStrategy\">\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup</attribute>\n"
+ " <attribute name=\"FlushBeforeCompletionEnabled\">true</attribute>\n"
+ " <attribute name=\"AutoCloseSessionEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Fetching options -->\n"
+ " <attribute name=\"MaximumFetchDepth\">5</attribute>\n"
+ "\n"
+ " <!-- Second-level caching -->\n"
+ " <attribute name=\"SecondLevelCacheEnabled\">true</attribute>\n"
+ " <attribute name=\"CacheProviderClass\">org.hibernate.cache.EhCacheProvider</attribute>\n"
+ " <attribute name=\"QueryCacheEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Logging -->\n"
+ " <attribute name=\"ShowSqlEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <attribute name=\"MapResources\">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>\n"
+ "\n"
+ "</mbean>\n"
+ "\n"
+ "</server>]]>"
+
+#: index.docbook:1585
+msgid "Current Session context management with JTA"
+msgstr "Este fichero es desplegado en un directorio llamado <literal>META-INF</literal> y empaquetado en un fichero JAR con la extensión <literal>.sar</literal> (fichero de servicio). También necesitas empaquetar Hibernate, sus bibliotecas de terceros requeridas, tus clases persistentes compiladas, así como tus ficheros de mapeo en el mismo fichero. Tus beans de empresa (usualmente beans de sesión) pueden ser mantenidos en su propio fichero JAR, pero debes incluir este fichero EJB JAR en el fichero de servicio principal para obtener una unidad desplegable (en caliente). Consulta la documentación de JBoss AS para más información sobre el servicio JMX y despliegue de EJB."
+
+#: index.docbook:1587
+msgid "The easiest way to handle <literal>Session</literal>s and transactions is Hibernates automatic \"current\" <literal>Session</literal> management. See the discussion of <xref linkend=\"architecture-current-session\"/>current sessions. Using the <literal>\"jta\"</literal> session context, if there is no Hibernate <literal>Session</literal> associated with the current JTA transaction, one will be started and associated with that JTA transaction the first time you call <literal>sessionFactory.getCurrentSession()</literal>. The <literal>Session</literal>s retrieved via <literal>getCurrentSession()</literal> in <literal>\"jta\"</literal> context will be set to automatically flush before the transaction completes, close after the transaction completes, and aggressively release JDBC connections after each statement. This allows the <literal>Session</literal>s to be managed by the life cycle of the JTA transaction to which it is associated, keeping user code clean of such man!
agement concerns. Your code can either use JTA programmatically through <literal>UserTransaction</literal>, or (recommended for portable code) use the Hibernate <literal>Transaction</literal> API to set transaction boundaries. If you run in an EJB container, declarative transaction demarcation with CMT is preferred."
+msgstr ""
+
+#: index.docbook:1610
+msgid "JMX deployment"
+msgstr ""
+
+#: index.docbook:1612
+msgid "The line <literal>cfg.buildSessionFactory()</literal> still has to be executed somewhere to get a <literal>SessionFactory</literal> into JNDI. You can do this either in a <literal>static</literal> initializer block (like the one in <literal>HibernateUtil</literal>) or you deploy Hibernate as a <emphasis>managed service</emphasis>."
+msgstr ""
+
+#: index.docbook:1620
+msgid "Hibernate is distributed with <literal>org.hibernate.jmx.HibernateService</literal> for deployment on an application server with JMX capabilities, such as JBoss AS. The actual deployment and configuration is vendor specific. Here is an example <literal>jboss-service.xml</literal> for JBoss 4.0.x:"
+msgstr ""
+
+#: index.docbook:1627
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<server>\n"
+ "\n"
+ "<mbean code=\"org.hibernate.jmx.HibernateService\"\n"
+ " name=\"jboss.jca:service=HibernateFactory,name=HibernateFactory\">\n"
+ "\n"
+ " <!-- Required services -->\n"
+ " <depends>jboss.jca:service=RARDeployer</depends>\n"
+ " <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>\n"
+ "\n"
+ " <!-- Bind the Hibernate service to JNDI -->\n"
+ " <attribute name=\"JndiName\">java:/hibernate/SessionFactory</attribute>\n"
+ "\n"
+ " <!-- Datasource settings -->\n"
+ " <attribute name=\"Datasource\">java:HsqlDS</attribute>\n"
+ " <attribute name=\"Dialect\">org.hibernate.dialect.HSQLDialect</attribute>\n"
+ "\n"
+ " <!-- Transaction integration -->\n"
+ " <attribute name=\"TransactionStrategy\">\n"
+ " org.hibernate.transaction.JTATransactionFactory</attribute>\n"
+ " <attribute name=\"TransactionManagerLookupStrategy\">\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup</attribute>\n"
+ " <attribute name=\"FlushBeforeCompletionEnabled\">true</attribute>\n"
+ " <attribute name=\"AutoCloseSessionEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Fetching options -->\n"
+ " <attribute name=\"MaximumFetchDepth\">5</attribute>\n"
+ "\n"
+ " <!-- Second-level caching -->\n"
+ " <attribute name=\"SecondLevelCacheEnabled\">true</attribute>\n"
+ " <attribute name=\"CacheProviderClass\">org.hibernate.cache.EhCacheProvider</attribute>\n"
+ " <attribute name=\"QueryCacheEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Logging -->\n"
+ " <attribute name=\"ShowSqlEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <attribute name=\"MapResources\">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>\n"
+ "\n"
+ "</mbean>\n"
+ "\n"
+ "</server>]]>"
+msgstr ""
+
+#: index.docbook:1629
+msgid "This file is deployed in a directory called <literal>META-INF</literal> and packaged in a JAR file with the extension <literal>.sar</literal> (service archive). You also need to package Hibernate, its required third-party libraries, your compiled persistent classes, as well as your mapping files in the same archive. Your enterprise beans (usually session beans) may be kept in their own JAR file, but you may include this EJB JAR file in the main service archive to get a single (hot-)deployable unit. Consult the JBoss AS documentation for more information about JMX service and EJB deployment."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/events.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/events.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/events.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,348 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Interceptors and events"
+msgstr "Interceptores y eventos"
+
+#: index.docbook:7
+msgid "It is often useful for the application to react to certain events that occur inside Hibernate. This allows implementation of certain kinds of generic functionality, and extension of Hibernate functionality."
+msgstr "Frecuentemente es útil para la aplicación reaccionar a ciertos eventos que ocurran dentro de Hibernate. Esto permite la implementación de ciertos tipos de funcionalidade genérica, y extensión de la funcionalidad de Hibernate."
+
+#: index.docbook:14
+msgid "Interceptors"
+msgstr "Interceptores"
+
+#: index.docbook:16
+msgid "The <literal>Interceptor</literal> interface provides callbacks from the session to the application allowing the application to inspect and/or manipulate properties of a persistent object before it is saved, updated, deleted or loaded. One possible use for this is to track auditing information. For example, the following <literal>Interceptor</literal> automatically sets the <literal>createTimestamp</literal> when an <literal>Auditable</literal> is created and updates the <literal>lastUpdateTimestamp</literal> property when an <literal>Auditable</literal> is updated."
+msgstr "La interface <literal>Interceptor</literal> provee callbacks desde la sesión a la aplicación permitiendo a ésta última inspeccionar y/o manipular las propiedades de un objeto persistente antes que sea salvado, actualizado, borrado o cargado. Un uso posible de esto es seguir la pista de información de auditoría. Por ejemplo, el siguiente <literal>Interceptor</literal> establece automáticamente el <literal>createTimestamp</literal> cuando un <literal>Auditable</literal> es creado y actualiza la propiedad <literal>lastUpdateTimestamp</literal> cuando un <literal>Auditable</literal> es acutalizado."
+
+#: index.docbook:27
+msgid "You may either implement <literal>Interceptor</literal> directly or (better) extend <literal>EmptyInterceptor</literal>."
+msgstr ""
+ "<![CDATA[package org.hibernate.test;\n"
+ "\n"
+ "import java.io.Serializable;\n"
+ "import java.util.Date;\n"
+ "import java.util.Iterator;\n"
+ "\n"
+ "import org.hibernate.Interceptor;\n"
+ "import org.hibernate.type.Type;\n"
+ "\n"
+ "public class AuditInterceptor implements Interceptor, Serializable {\n"
+ "\n"
+ " private int updates;\n"
+ " private int creates;\n"
+ "\n"
+ " public void onDelete(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " // do nothing\n"
+ " }\n"
+ "\n"
+ " public boolean onFlushDirty(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] currentState,\n"
+ " Object[] previousState,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " updates++;\n"
+ " for ( int i=0; i < propertyNames.length; i++ ) {\n"
+ " if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " currentState[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onLoad(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onSave(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " creates++;\n"
+ " for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " state[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public void postFlush(Iterator entities) {\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates);\n"
+ " }\n"
+ "\n"
+ " public void preFlush(Iterator entities) {\n"
+ " updates=0;\n"
+ " creates=0;\n"
+ " }\n"
+ "\n"
+ " ...\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[package org.hibernate.test;\n"
+ "\n"
+ "import java.io.Serializable;\n"
+ "import java.util.Date;\n"
+ "import java.util.Iterator;\n"
+ "\n"
+ "import org.hibernate.EmptyInterceptor;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.type.Type;\n"
+ "\n"
+ "public class AuditInterceptor extends EmptyInterceptor {\n"
+ "\n"
+ " private int updates;\n"
+ " private int creates;\n"
+ " private int loads;\n"
+ "\n"
+ " public void onDelete(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " // do nothing\n"
+ " }\n"
+ "\n"
+ " public boolean onFlushDirty(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] currentState,\n"
+ " Object[] previousState,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " updates++;\n"
+ " for ( int i=0; i < propertyNames.length; i++ ) {\n"
+ " if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " currentState[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onLoad(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " loads++;\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onSave(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " creates++;\n"
+ " for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " state[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public void afterTransactionCompletion(Transaction tx) {\n"
+ " if ( tx.wasCommitted() ) {\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);\n"
+ " }\n"
+ " updates=0;\n"
+ " creates=0;\n"
+ " loads=0;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr "El interceptor podría ser especificado cuando se crea la sesión:"
+
+#: index.docbook:34
+msgid "Interceptors come in two flavors: <literal>Session</literal>-scoped and <literal>SessionFactory</literal>-scoped."
+msgstr "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+
+#: index.docbook:39
+msgid "A <literal>Session</literal>-scoped interceptor is specified when a session is opened using one of the overloaded SessionFactory.openSession() methods accepting an <literal>Interceptor</literal>."
+msgstr "Puedes además establecer un interceptor a un nivel global, usando la <literal>Configuration</literal>:"
+
+#: index.docbook:45
+msgid "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+msgstr "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
+
+#: index.docbook:47
+msgid "A <literal>SessionFactory</literal>-scoped interceptor is registered with the <literal>Configuration</literal> object prior to building the <literal>SessionFactory</literal>. In this case, the supplied interceptor will be applied to all sessions opened from that <literal>SessionFactory</literal>; this is true unless a session is opened explicitly specifying the interceptor to use. <literal>SessionFactory</literal>-scoped interceptors must be thread safe, taking care to not store session-specific state since multiple sessions will use this interceptor (potentially) concurrently."
+msgstr "Sistema de eventos"
+
+#: index.docbook:56
+msgid "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
+msgstr "Si tienes que reaccionar a eventos particulares en tu capa de persistencia, puedes también la arquitectura de <emphasis>eventos</emphasis> de Hibernate3. El sistema de eventos puede ser usado en adición o como un remplazo a los interceptores."
+
+#: index.docbook:61
+msgid "Event system"
+msgstr "Esencialmente todos los métodos de la interface <literal>Session</literal> se correlacionan con un evento. Tienes un <literal>LoadEvent</literal>, un <literal>FlushEvent</literal>, etc (consulta el DTD del fichero de configuración XML o el paquete <literal>org.hibernate.event</literal> para la lista completa de tipos de evento definidos). Cuando se hace una petición de uno de estos métodos, la <literal>Session</literal> de Hibernate genera un evento apropiado y se lo pasa al oyente (listener) de eventos configurado para ese tipo. De fábrica, estos oyentes implementan el mismo procesamiento en los que siempre resultan aquellos métodos. Sin embargo, eres libre de implementar una personalización de una de las interfaces oyentes (es decir, el <literal>LoadEvent</literal> es procesado por la implementación registrada de la interface <literal>LoadEventListener</literal>), en cuyo caso su implementación ser�!
0ed;a responsable de procesar cualquier petición <literal>load()</literal> hecha a la <literal>Session</literal>."
+
+#: index.docbook:63
+msgid "If you have to react to particular events in your persistence layer, you may also use the Hibernate3 <emphasis>event</emphasis> architecture. The event system can be used in addition or as a replacement for interceptors."
+msgstr "Los oyentes deben ser considerados efectivamente singletons; quiere decir, que son compartidos entre las peticiones, y por lo tanto no guardan ningún estado en variables de instancia."
+
+#: index.docbook:69
+msgid "Essentially all of the methods of the <literal>Session</literal> interface correlate to an event. You have a <literal>LoadEvent</literal>, a <literal>FlushEvent</literal>, etc (consult the XML configuration-file DTD or the <literal>org.hibernate.event</literal> package for the full list of defined event types). When a request is made of one of these methods, the Hibernate <literal>Session</literal> generates an appropriate event and passes it to the configured event listeners for that type. Out-of-the-box, these listeners implement the same processing in which those methods always resulted. However, you are free to implement a customization of one of the listener interfaces (i.e., the <literal>LoadEvent</literal> is processed by the registered implemenation of the <literal>LoadEventListener</literal> interface), in which case their implementation would be responsible for processing any <literal>load()</literal> requests made of the <literal>Session</literal>."
+msgstr "Un oyente personalizado debe implementar la interface apropiada para el evento que quiere procesar y/o extender una de las clases base de conveniencia (o incluso los oyentes de eventos por defecto usados por Hibernate de fábrica al ser éstos declarados non-final para este propósito). Los oyentes personalizados pueden ser registrados programáticamente a través del objeto <literal>Configuration</literal>, o especificados en el XML de configuración de Hibernate (la declaración declarativa a través del fichero de propiedades no está soportada). He aquí un ejemplo de un oyente personalizado de eventos load:"
+
+#: index.docbook:84
+msgid "The listeners should be considered effectively singletons; meaning, they are shared between requests, and thus should not save any state as instance variables."
+msgstr ""
+ "<![CDATA[public class MyLoadListener extends DefaultLoadEventListener {\n"
+ " // this is the single method defined by the LoadEventListener interface\n"
+ " public Object onLoad(LoadEvent event, LoadEventListener.LoadType loadType)\n"
+ " throws HibernateException {\n"
+ " if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {\n"
+ " throw MySecurityException(\"Unauthorized access\");\n"
+ " }\n"
+ " return super.onLoad(event, loadType);\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:89
+msgid "A custom listener should implement the appropriate interface for the event it wants to process and/or extend one of the convenience base classes (or even the default event listeners used by Hibernate out-of-the-box as these are declared non-final for this purpose). Custom listeners can either be registered programmatically through the <literal>Configuration</literal> object, or specified in the Hibernate configuration XML (declarative configuration through the properties file is not supported). Here's an example of a custom load event listener:"
+msgstr "Necesitas además una entrada de configuración diciéndole a Hibernate que use el oyente en vez del oyente por defecto:"
+
+#: index.docbook:99
+msgid ""
+ "<![CDATA[public class MyLoadListener implements LoadEventListener {\n"
+ " // this is the single method defined by the LoadEventListener interface\n"
+ " public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)\n"
+ " throws HibernateException {\n"
+ " if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {\n"
+ " throw MySecurityException(\"Unauthorized access\");\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[<hibernate-configuration>\n"
+ " <session-factory>\n"
+ " ...\n"
+ " <listener type=\"load\" class=\"MyLoadListener\"/>\n"
+ " </session-factory>\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:101
+msgid "You also need a configuration entry telling Hibernate to use the listener in addition to the default listener:"
+msgstr "En cambio, puedes registrarlo programáticamente:"
+
+#: index.docbook:106
+msgid ""
+ "<![CDATA[<hibernate-configuration>\n"
+ " <session-factory>\n"
+ " ...\n"
+ " <event type=\"load\">\n"
+ " <listener class=\"com.eg.MyLoadListener\"/>\n"
+ " <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>\n"
+ " </event>\n"
+ " </session-factory>\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration();\n"
+ "cfg.getSessionEventListenerConfig().setLoadEventListener( new MyLoadListener() );]]>"
+
+#: index.docbook:108
+msgid "Instead, you may register it programmatically:"
+msgstr "Los oyentes registrados declarativamente no pueden compartir instancias. Si el mismo nombre de clase es usado en múltiples elementos <literal><listener/></literal>, cada referencia resultará en una instancia separada de esa clase. Si necesitas la capacidad de compartir instancias de oyentes entre tipos de oyente debes usar el enfoque de registración programática."
+
+#: index.docbook:112
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration();\n"
+ "LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };\n"
+ "cfg.EventListeners().setLoadEventListeners(stack);]]>"
+msgstr "¿Por qué implementar una interface y definir el tipo espcífico durante la configuración? Bueno, una implementación de oyente podría implementar múltiples interfaces de oyente de eventos. Teniendo el tipo definido adicionalmente durante la registración lo hace más fácil para activar o desactivar oyentes personalizados durante la configuración."
+
+#: index.docbook:114
+msgid "Listeners registered declaratively cannot share instances. If the same class name is used in multiple <literal><listener/></literal> elements, each reference will result in a separate instance of that class. If you need the capability to share listener instances between listener types you must use the programmatic registration approach."
+msgstr "Seguridad declarativa de Hibernate"
+
+#: index.docbook:122
+msgid "Why implement an interface and define the specific type during configuration? Well, a listener implementation could implement multiple event listener interfaces. Having the type additionally defined during registration makes it easier to turn custom listeners on or off during configuration."
+msgstr "Usualmente, la seguridad declarativa en aplicaciones Hibernate es manejada en una capa de fachada de sesión. Ahora, Hibernate3 permite que ciertas acciones sean permitidas vía JACC, y autorizadas vía JAAS. Esta en una funcionalidad opcional construída encima de la arquitectura de eventos."
+
+#: index.docbook:132
+msgid "Hibernate declarative security"
+msgstr "Primero, debes configurar los oyentes de eventos apropiados, para habilitar el uso de autorización JAAS."
+
+#: index.docbook:133
+msgid "Usually, declarative security in Hibernate applications is managed in a session facade layer. Now, Hibernate3 allows certain actions to be permissioned via JACC, and authorized via JAAS. This is optional functionality built on top of the event architecture."
+msgstr ""
+ "<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>\n"
+ "<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>\n"
+ "<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>\n"
+ "<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
+
+#: index.docbook:139
+msgid "First, you must configure the appropriate event listeners, to enable the use of JAAS authorization."
+msgstr "Seguido, aún en <literal>hibernate.cfg.xml</literal>, liga los permisos a roles:"
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>\n"
+ "<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>\n"
+ "<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>\n"
+ "<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
+msgstr ""
+ "<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>\n"
+ "<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
+
+#: index.docbook:146
+msgid "Note that <literal><listener type=\"...\" class=\"...\"/></literal> is just a shorthand for <literal><event type=\"...\"><listener class=\"...\"/></event></literal> when there is exactly one listener for a particular event type."
+msgstr "Los nombres de role son los roles entendidos por tu proveedor de JACC."
+
+#: index.docbook:152
+msgid "Next, still in <literal>hibernate.cfg.xml</literal>, bind the permissions to roles:"
+msgstr ""
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>\n"
+ "<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
+msgstr ""
+
+#: index.docbook:158
+msgid "The role names are the roles understood by your JACC provider."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/example_mappings.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/example_mappings.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/example_mappings.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1162 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Example: Various Mappings"
+msgstr "Ejemplo: Varios Mapeos"
+
+#: index.docbook:22
+msgid "This chapters shows off some more complex association mappings."
+msgstr "Este capítulo muestra mapeos de asociaciones más complejos."
+
+#: index.docbook:27
+msgid "Employer/Employee"
+msgstr "Empleador/Empleado"
+
+#: index.docbook:29
+msgid "The following model of the relationship between <literal>Employer</literal> and <literal>Employee</literal> uses an actual entity class (<literal>Employment</literal>) to represent the association. This is done because there might be more than one period of employment for the same two parties. Components are used to model monetary values and employee names."
+msgstr "El siguiente modelo de la relación entre <literal>Employer</literal> y <literal>Employee</literal> usa una clase de entidad real (<literal>Employment</literal>) para representar la asociación. Esto se ha hecho esto porque podría haber más de un período de empleo para los mismos dos participantes. Se usan componentes para modelar valores monetarios y nombres de empleado."
+
+#: index.docbook:46
+msgid "Heres a possible mapping document:"
+msgstr "He aquí un documento de mapeo posible:"
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " \n"
+ " <class name=\"Employer\" table=\"employers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employer_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employment\" table=\"employment_periods\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employment_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"startDate\" column=\"start_date\"/>\n"
+ " <property name=\"endDate\" column=\"end_date\"/>\n"
+ "\n"
+ " <component name=\"hourlyRate\" class=\"MonetaryAmount\">\n"
+ " <property name=\"amount\">\n"
+ " <column name=\"hourly_rate\" sql-type=\"NUMERIC(12, 2)\"/>\n"
+ " </property>\n"
+ " <property name=\"currency\" length=\"12\"/>\n"
+ " </component>\n"
+ "\n"
+ " <many-to-one name=\"employer\" column=\"employer_id\" not-null=\"true\"/>\n"
+ " <many-to-one name=\"employee\" column=\"employee_id\" not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employee\" table=\"employees\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employee_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"taxfileNumber\"/>\n"
+ " <component name=\"name\" class=\"Name\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </component>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " \n"
+ " <class name=\"Employer\" table=\"employers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employer_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employment\" table=\"employment_periods\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employment_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"startDate\" column=\"start_date\"/>\n"
+ " <property name=\"endDate\" column=\"end_date\"/>\n"
+ "\n"
+ " <component name=\"hourlyRate\" class=\"MonetaryAmount\">\n"
+ " <property name=\"amount\">\n"
+ " <column name=\"hourly_rate\" sql-type=\"NUMERIC(12, 2)\"/>\n"
+ " </property>\n"
+ " <property name=\"currency\" length=\"12\"/>\n"
+ " </component>\n"
+ "\n"
+ " <many-to-one name=\"employer\" column=\"employer_id\" not-null=\"true\"/>\n"
+ " <many-to-one name=\"employee\" column=\"employee_id\" not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employee\" table=\"employees\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employee_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"taxfileNumber\"/>\n"
+ " <component name=\"name\" class=\"Name\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </component>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:52
+msgid "And heres the table schema generated by <literal>SchemaExport</literal>."
+msgstr "Y he aquí el esquema de tablas generado por <literal>SchemaExport</literal>."
+
+#: index.docbook:56
+msgid ""
+ "<![CDATA[create table employers (\n"
+ " id BIGINT not null, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employment_periods (\n"
+ " id BIGINT not null,\n"
+ " hourly_rate NUMERIC(12, 2),\n"
+ " currency VARCHAR(12), \n"
+ " employee_id BIGINT not null, \n"
+ " employer_id BIGINT not null, \n"
+ " end_date TIMESTAMP, \n"
+ " start_date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employees (\n"
+ " id BIGINT not null, \n"
+ " firstName VARCHAR(255), \n"
+ " initial CHAR(1), \n"
+ " lastName VARCHAR(255), \n"
+ " taxfileNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK0 foreign key (employer_id) references employers\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK1 foreign key (employee_id) references employees\n"
+ "create sequence employee_id_seq\n"
+ "create sequence employment_id_seq\n"
+ "create sequence employer_id_seq]]>"
+msgstr ""
+ "<![CDATA[create table employers (\n"
+ " id BIGINT not null, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employment_periods (\n"
+ " id BIGINT not null,\n"
+ " hourly_rate NUMERIC(12, 2),\n"
+ " currency VARCHAR(12), \n"
+ " employee_id BIGINT not null, \n"
+ " employer_id BIGINT not null, \n"
+ " end_date TIMESTAMP, \n"
+ " start_date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employees (\n"
+ " id BIGINT not null, \n"
+ " firstName VARCHAR(255), \n"
+ " initial CHAR(1), \n"
+ " lastName VARCHAR(255), \n"
+ " taxfileNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK0 foreign key (employer_id) references employers\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK1 foreign key (employee_id) references employees\n"
+ "create sequence employee_id_seq\n"
+ "create sequence employment_id_seq\n"
+ "create sequence employer_id_seq]]>"
+
+#: index.docbook:61
+msgid "Author/Work"
+msgstr "Autor/Obra"
+
+#: index.docbook:63
+msgid "Consider the following model of the relationships between <literal>Work</literal>, <literal>Author</literal> and <literal>Person</literal>. We represent the relationship between <literal>Work</literal> and <literal>Author</literal> as a many-to-many association. We choose to represent the relationship between <literal>Author</literal> and <literal>Person</literal> as one-to-one association. Another possibility would be to have <literal>Author</literal> extend <literal>Person</literal>."
+msgstr "Considera el siguiente modelo de las relaciones entre <literal>Work</literal>, <literal>Author</literal> y <literal>Person</literal>. Representamos la relación entre <literal>Work</literal> y <literal>Author</literal> como una asociación muchos-a-muchos. Elegimos representar la relación entre <literal>Author</literal> y <literal>Person</literal> como una asociación uno-a-uno. Otra posibilidad hubiese sido que <literal>Author</literal> extendiera <literal>Person</literal>."
+
+#: index.docbook:81
+msgid "The following mapping document correctly represents these relationships:"
+msgstr "El siguiente documento de mapeo representa estas relaciones correctamente:"
+
+#: index.docbook:85
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Work\" table=\"works\" discriminator-value=\"W\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"type\" type=\"character\"/>\n"
+ "\n"
+ " <property name=\"title\"/>\n"
+ " <set name=\"authors\" table=\"author_work\">\n"
+ " <key column name=\"work_id\"/>\n"
+ " <many-to-many class=\"Author\" column name=\"author_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"Book\" discriminator-value=\"B\">\n"
+ " <property name=\"text\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " <subclass name=\"Song\" discriminator-value=\"S\">\n"
+ " <property name=\"tempo\"/>\n"
+ " <property name=\"genre\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Author\" table=\"authors\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <!-- The Author must have the same identifier as the Person -->\n"
+ " <generator class=\"assigned\"/> \n"
+ " </id>\n"
+ "\n"
+ " <property name=\"alias\"/>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "\n"
+ " <set name=\"works\" table=\"author_work\" inverse=\"true\">\n"
+ " <key column=\"author_id\"/>\n"
+ " <many-to-many class=\"Work\" column=\"work_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Person\" table=\"persons\">\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Work\" table=\"works\" discriminator-value=\"W\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"type\" type=\"character\"/>\n"
+ "\n"
+ " <property name=\"title\"/>\n"
+ " <set name=\"authors\" table=\"author_work\">\n"
+ " <key column name=\"work_id\"/>\n"
+ " <many-to-many class=\"Author\" column name=\"author_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"Book\" discriminator-value=\"B\">\n"
+ " <property name=\"text\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " <subclass name=\"Song\" discriminator-value=\"S\">\n"
+ " <property name=\"tempo\"/>\n"
+ " <property name=\"genre\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Author\" table=\"authors\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <!-- The Author must have the same identifier as the Person -->\n"
+ " <generator class=\"assigned\"/> \n"
+ " </id>\n"
+ "\n"
+ " <property name=\"alias\"/>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "\n"
+ " <set name=\"works\" table=\"author_work\" inverse=\"true\">\n"
+ " <key column=\"author_id\"/>\n"
+ " <many-to-many class=\"Work\" column=\"work_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Person\" table=\"persons\">\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:87
+msgid "There are four tables in this mapping. <literal>works</literal>, <literal>authors</literal> and <literal>persons</literal> hold work, author and person data respectively. <literal>author_work</literal> is an association table linking authors to works. Heres the table schema, as generated by <literal>SchemaExport</literal>."
+msgstr "Hay cuatro tablas en este mapeo. <literal>works</literal>, <literal>authors</literal> y <literal>persons</literal> tienen los datos de obra, autor y persona respectivamente. <literal>author_work</literal> es una tabla de asociación enlazando autores a obras. He aquí el esquema de tablas, tal como fue generado por <literal>SchemaExport</literal>."
+
+#: index.docbook:95
+msgid ""
+ "<![CDATA[create table works (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " tempo FLOAT, \n"
+ " genre VARCHAR(255), \n"
+ " text INTEGER, \n"
+ " title VARCHAR(255), \n"
+ " type CHAR(1) not null, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table author_work (\n"
+ " author_id BIGINT not null, \n"
+ " work_id BIGINT not null, \n"
+ " primary key (work_id, author_id)\n"
+ ")\n"
+ "\n"
+ "create table authors (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " alias VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table persons (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table authors \n"
+ " add constraint authorsFK0 foreign key (id) references persons\n"
+ "alter table author_work \n"
+ " add constraint author_workFK0 foreign key (author_id) references authors\n"
+ "alter table author_work\n"
+ " add constraint author_workFK1 foreign key (work_id) references works]]>"
+msgstr ""
+ "<![CDATA[create table works (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " tempo FLOAT, \n"
+ " genre VARCHAR(255), \n"
+ " text INTEGER, \n"
+ " title VARCHAR(255), \n"
+ " type CHAR(1) not null, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table author_work (\n"
+ " author_id BIGINT not null, \n"
+ " work_id BIGINT not null, \n"
+ " primary key (work_id, author_id)\n"
+ ")\n"
+ "\n"
+ "create table authors (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " alias VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table persons (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table authors \n"
+ " add constraint authorsFK0 foreign key (id) references persons\n"
+ "alter table author_work \n"
+ " add constraint author_workFK0 foreign key (author_id) references authors\n"
+ "alter table author_work\n"
+ " add constraint author_workFK1 foreign key (work_id) references works]]>"
+
+#: index.docbook:100
+msgid "Customer/Order/Product"
+msgstr "Cliente/Orden/Producto"
+
+#: index.docbook:102
+msgid "Now consider a model of the relationships between <literal>Customer</literal>, <literal>Order</literal> and <literal>LineItem</literal> and <literal>Product</literal>. There is a one-to-many association between <literal>Customer</literal> and <literal>Order</literal>, but how should we represent <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal>? I've chosen to map <literal>LineItem</literal> as an association class representing the many-to-many association between <literal>Order</literal> and <literal>Product</literal>. In Hibernate, this is called a composite element."
+msgstr "Ahora considera un modelo de las relaciones entre <literal>Customer</literal>, <literal>Order</literal> y <literal>LineItem</literal> y <literal>Product</literal>. Hay una asociación uno-a-muchos entre <literal>Customer</literal> y <literal>Order</literal>, pero, ¿cómo deberíamos representar <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal>? He elegido mapear <literal>LineItem</literal> como una clase de asociación representando la asociación muchos-a-muchos entre <literal>Order</literal> y <literal>Product</literal>. En Hibernate, esto se llama un elemento compuesto."
+
+#: index.docbook:122
+msgid "The mapping document:"
+msgstr "El documento de mapeo:"
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Customer\" table=\"customers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <set name=\"orders\" inverse=\"true\">\n"
+ " <key column=\"customer_id\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Order\" table=\"orders\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\"/>\n"
+ " <many-to-one name=\"customer\" column=\"customer_id\"/>\n"
+ " <list name=\"lineItems\" table=\"line_items\">\n"
+ " <key column=\"order_id\"/>\n"
+ " <list-index column=\"line_number\"/>\n"
+ " <composite-element class=\"LineItem\">\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"product\" column=\"product_id\"/>\n"
+ " </composite-element>\n"
+ " </list>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Product\" table=\"products\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"serialNumber\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Customer\" table=\"customers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <set name=\"orders\" inverse=\"true\">\n"
+ " <key column=\"customer_id\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Order\" table=\"orders\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\"/>\n"
+ " <many-to-one name=\"customer\" column=\"customer_id\"/>\n"
+ " <list name=\"lineItems\" table=\"line_items\">\n"
+ " <key column=\"order_id\"/>\n"
+ " <list-index column=\"line_number\"/>\n"
+ " <composite-element class=\"LineItem\">\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"product\" column=\"product_id\"/>\n"
+ " </composite-element>\n"
+ " </list>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Product\" table=\"products\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"serialNumber\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:128
+msgid "<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> and <literal>products</literal> hold customer, order, order line item and product data respectively. <literal>line_items</literal> also acts as an association table linking orders with products."
+msgstr "<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> y <literal>products</literal> tienen los datos de cliente, orden, ítem de línea de orden y producto respectivamente. Además <literal>line_items</literal> actúa como una tabla de asociación enlazando órdenes con productos."
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[create table customers (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table orders (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " customer_id BIGINT, \n"
+ " date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table line_items (\n"
+ " line_number INTEGER not null, \n"
+ " order_id BIGINT not null, \n"
+ " product_id BIGINT, \n"
+ " quantity INTEGER, \n"
+ " primary key (order_id, line_number)\n"
+ ")\n"
+ "\n"
+ "create table products (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " serialNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table orders \n"
+ " add constraint ordersFK0 foreign key (customer_id) references customers\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK0 foreign key (product_id) references products\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK1 foreign key (order_id) references orders]]>"
+msgstr ""
+ "<![CDATA[create table customers (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table orders (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " customer_id BIGINT, \n"
+ " date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table line_items (\n"
+ " line_number INTEGER not null, \n"
+ " order_id BIGINT not null, \n"
+ " product_id BIGINT, \n"
+ " quantity INTEGER, \n"
+ " primary key (order_id, line_number)\n"
+ ")\n"
+ "\n"
+ "create table products (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " serialNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table orders \n"
+ " add constraint ordersFK0 foreign key (customer_id) references customers\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK0 foreign key (product_id) references products\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK1 foreign key (order_id) references orders]]>"
+
+#: index.docbook:140
+msgid "Miscellaneous example mappings"
+msgstr "Mapeos misceláneos de ejemplo"
+
+#: index.docbook:142
+msgid "These examples are all taken from the Hibernate test suite. You will find many other useful example mappings there. Look in the <literal>test</literal> folder of the Hibernate distribution."
+msgstr "Todos estos ejemplos están tomados de la batería de pruebas de Hibernate. Encontrarás muchos otros mapeos de ejemplo útiles allí. Mira en la carpeta <literal>test</literal> de la distribución de Hibernate."
+
+#: index.docbook:148
+msgid "TODO: put words around this stuff"
+msgstr "POR HACER: poner palabras alrededor de este material"
+
+#: index.docbook:151
+msgid "\"Typed\" one-to-one association"
+msgstr "Asociación uno-a-uno \"Tipificada\""
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"name\"/>\n"
+ " <one-to-one name=\"address\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'HOME'</formula>\n"
+ " </one-to-one>\n"
+ " <one-to-one name=\"mailingAddress\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'MAILING'</formula>\n"
+ " </one-to-one>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\" batch-size=\"2\" \n"
+ " check=\"addressType in ('MAILING', 'HOME', 'BUSINESS')\">\n"
+ " <composite-id>\n"
+ " <key-many-to-one name=\"person\" \n"
+ " column=\"personName\"/>\n"
+ " <key-property name=\"type\" \n"
+ " column=\"addressType\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"street\" type=\"text\"/>\n"
+ " <property name=\"state\"/>\n"
+ " <property name=\"zip\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"name\"/>\n"
+ " <one-to-one name=\"address\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'HOME'</formula>\n"
+ " </one-to-one>\n"
+ " <one-to-one name=\"mailingAddress\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'MAILING'</formula>\n"
+ " </one-to-one>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\" batch-size=\"2\" \n"
+ " check=\"addressType in ('MAILING', 'HOME', 'BUSINESS')\">\n"
+ " <composite-id>\n"
+ " <key-many-to-one name=\"person\" \n"
+ " column=\"personName\"/>\n"
+ " <key-property name=\"type\" \n"
+ " column=\"addressType\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"street\" type=\"text\"/>\n"
+ " <property name=\"state\"/>\n"
+ " <property name=\"zip\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:156
+msgid "Composite key example"
+msgstr "Ejemplo de clave compuesta"
+
+#: index.docbook:157
+msgid ""
+ "<![CDATA[<class name=\"Customer\">\n"
+ "\n"
+ " <id name=\"customerId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\" not-null=\"true\" length=\"100\"/>\n"
+ " <property name=\"address\" not-null=\"true\" length=\"200\"/>\n"
+ "\n"
+ " <list name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key column=\"customerId\"/>\n"
+ " <index column=\"orderNumber\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </list>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Order\" table=\"CustomerOrder\" lazy=\"true\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ " <synchronize table=\"Product\"/>\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"Order$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"orderDate\" \n"
+ " type=\"calendar_date\"\n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <property name=\"total\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity*p.price) \n"
+ " from LineItem li, Product p \n"
+ " where li.productId = p.productId \n"
+ " and li.customerId = customerId \n"
+ " and li.orderNumber = orderNumber )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ " <many-to-one name=\"customer\"\n"
+ " column=\"customerId\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <bag name=\"lineItems\"\n"
+ " fetch=\"join\" \n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key>\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"LineItem\"/>\n"
+ " </bag>\n"
+ " \n"
+ "</class>\n"
+ " \n"
+ "<class name=\"LineItem\">\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"LineItem$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " <key-property name=\"productId\" length=\"10\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"quantity\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\">\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </many-to-one>\n"
+ " \n"
+ " <many-to-one name=\"product\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"\n"
+ " column=\"productId\"/>\n"
+ " \n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Product\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ "\n"
+ " <id name=\"productId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"description\" \n"
+ " not-null=\"true\" \n"
+ " length=\"200\"/>\n"
+ " <property name=\"price\" length=\"3\"/>\n"
+ " <property name=\"numberAvailable\"/>\n"
+ " \n"
+ " <property name=\"numberOrdered\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity) \n"
+ " from LineItem li \n"
+ " where li.productId = productId )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\">\n"
+ "\n"
+ " <id name=\"customerId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\" not-null=\"true\" length=\"100\"/>\n"
+ " <property name=\"address\" not-null=\"true\" length=\"200\"/>\n"
+ "\n"
+ " <list name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key column=\"customerId\"/>\n"
+ " <index column=\"orderNumber\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </list>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Order\" table=\"CustomerOrder\" lazy=\"true\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ " <synchronize table=\"Product\"/>\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"Order$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"orderDate\" \n"
+ " type=\"calendar_date\"\n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <property name=\"total\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity*p.price) \n"
+ " from LineItem li, Product p \n"
+ " where li.productId = p.productId \n"
+ " and li.customerId = customerId \n"
+ " and li.orderNumber = orderNumber )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ " <many-to-one name=\"customer\"\n"
+ " column=\"customerId\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <bag name=\"lineItems\"\n"
+ " fetch=\"join\" \n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key>\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"LineItem\"/>\n"
+ " </bag>\n"
+ " \n"
+ "</class>\n"
+ " \n"
+ "<class name=\"LineItem\">\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"LineItem$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " <key-property name=\"productId\" length=\"10\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"quantity\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\">\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </many-to-one>\n"
+ " \n"
+ " <many-to-one name=\"product\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"\n"
+ " column=\"productId\"/>\n"
+ " \n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Product\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ "\n"
+ " <id name=\"productId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"description\" \n"
+ " not-null=\"true\" \n"
+ " length=\"200\"/>\n"
+ " <property name=\"price\" length=\"3\"/>\n"
+ " <property name=\"numberAvailable\"/>\n"
+ " \n"
+ " <property name=\"numberOrdered\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity) \n"
+ " from LineItem li \n"
+ " where li.productId = productId )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:161
+msgid "Many-to-many with shared composite key attribute"
+msgstr "Muchos-a-muchos con atributo de clave compuesta compartido"
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[<class name=\"User\" table=\"`User`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <set name=\"groups\" table=\"UserGroup\">\n"
+ " <key>\n"
+ " <column name=\"userName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"Group\">\n"
+ " <column name=\"groupName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ " \n"
+ "<class name=\"Group\" table=\"`Group`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"description\"/>\n"
+ " <set name=\"users\" table=\"UserGroup\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"groupName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"User\">\n"
+ " <column name=\"userName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[<class name=\"User\" table=\"`User`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <set name=\"groups\" table=\"UserGroup\">\n"
+ " <key>\n"
+ " <column name=\"userName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"Group\">\n"
+ " <column name=\"groupName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ " \n"
+ "<class name=\"Group\" table=\"`Group`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"description\"/>\n"
+ " <set name=\"users\" table=\"UserGroup\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"groupName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"User\">\n"
+ " <column name=\"userName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ "]]>"
+
+#: index.docbook:166
+msgid "Content based discrimination"
+msgstr "Discriminación basada en contenido"
+
+#: index.docbook:167
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " discriminator-value=\"P\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"person_id\" \n"
+ " unsaved-value=\"0\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " \n"
+ " \n"
+ " <discriminator \n"
+ " type=\"character\">\n"
+ " <formula>\n"
+ " case \n"
+ " when title is not null then 'E' \n"
+ " when salesperson is not null then 'C' \n"
+ " else 'P' \n"
+ " end\n"
+ " </formula>\n"
+ " </discriminator>\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"\n"
+ " length=\"80\"/>\n"
+ " \n"
+ " <property name=\"sex\" \n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ " \n"
+ " <component name=\"address\">\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </component>\n"
+ " \n"
+ " <subclass name=\"Employee\" \n"
+ " discriminator-value=\"E\">\n"
+ " <property name=\"title\"\n"
+ " length=\"20\"/>\n"
+ " <property name=\"salary\"/>\n"
+ " <many-to-one name=\"manager\"/>\n"
+ " </subclass>\n"
+ " \n"
+ " <subclass name=\"Customer\" \n"
+ " discriminator-value=\"C\">\n"
+ " <property name=\"comments\"/>\n"
+ " <many-to-one name=\"salesperson\"/>\n"
+ " </subclass>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " discriminator-value=\"P\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"person_id\" \n"
+ " unsaved-value=\"0\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " \n"
+ " \n"
+ " <discriminator \n"
+ " type=\"character\">\n"
+ " <formula>\n"
+ " case \n"
+ " when title is not null then 'E' \n"
+ " when salesperson is not null then 'C' \n"
+ " else 'P' \n"
+ " end\n"
+ " </formula>\n"
+ " </discriminator>\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"\n"
+ " length=\"80\"/>\n"
+ " \n"
+ " <property name=\"sex\" \n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ " \n"
+ " <component name=\"address\">\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </component>\n"
+ " \n"
+ " <subclass name=\"Employee\" \n"
+ " discriminator-value=\"E\">\n"
+ " <property name=\"title\"\n"
+ " length=\"20\"/>\n"
+ " <property name=\"salary\"/>\n"
+ " <many-to-one name=\"manager\"/>\n"
+ " </subclass>\n"
+ " \n"
+ " <subclass name=\"Customer\" \n"
+ " discriminator-value=\"C\">\n"
+ " <property name=\"comments\"/>\n"
+ " <many-to-one name=\"salesperson\"/>\n"
+ " </subclass>\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:171
+msgid "Associations on alternate keys"
+msgstr "Asociaciones sobre claves alternativas"
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"name\" length=\"100\"/>\n"
+ " \n"
+ " <one-to-one name=\"address\" \n"
+ " property-ref=\"person\"\n"
+ " cascade=\"all\"\n"
+ " fetch=\"join\"/>\n"
+ " \n"
+ " <set name=\"accounts\" \n"
+ " inverse=\"true\">\n"
+ " <key column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " <one-to-many class=\"Account\"/>\n"
+ " </set>\n"
+ " \n"
+ " <property name=\"userId\" length=\"8\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"address\" length=\"300\"/>\n"
+ " <property name=\"zip\" length=\"5\"/>\n"
+ " <property name=\"country\" length=\"25\"/>\n"
+ " <many-to-one name=\"person\" unique=\"true\" not-null=\"true\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Account\">\n"
+ " <id name=\"accountId\" length=\"32\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " \n"
+ " <many-to-one name=\"user\"\n"
+ " column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " \n"
+ " <property name=\"type\" not-null=\"true\"/>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"name\" length=\"100\"/>\n"
+ " \n"
+ " <one-to-one name=\"address\" \n"
+ " property-ref=\"person\"\n"
+ " cascade=\"all\"\n"
+ " fetch=\"join\"/>\n"
+ " \n"
+ " <set name=\"accounts\" \n"
+ " inverse=\"true\">\n"
+ " <key column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " <one-to-many class=\"Account\"/>\n"
+ " </set>\n"
+ " \n"
+ " <property name=\"userId\" length=\"8\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"address\" length=\"300\"/>\n"
+ " <property name=\"zip\" length=\"5\"/>\n"
+ " <property name=\"country\" length=\"25\"/>\n"
+ " <many-to-one name=\"person\" unique=\"true\" not-null=\"true\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Account\">\n"
+ " <id name=\"accountId\" length=\"32\">\n"
+ " <generator class=\"uuid.hex\"/>\n"
+ " </id>\n"
+ " \n"
+ " <many-to-one name=\"user\"\n"
+ " column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " \n"
+ " <property name=\"type\" not-null=\"true\"/>\n"
+ " \n"
+ "</class>]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/example_parentchild.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/example_parentchild.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/example_parentchild.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,350 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Parent/Child"
+msgstr "Ejemplo: Padre/Hijo"
+
+#: index.docbook:7
+msgid "One of the very first things that new users try to do with Hibernate is to model a parent / child type relationship. There are two different approaches to this. For various reasons the most convenient approach, especially for new users, is to model both <literal>Parent</literal> and <literal>Child</literal> as entity classes with a <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a <literal><composite-element></literal>.) Now, it turns out that default semantics of a one to many association (in Hibernate) are much less close to the usual semantics of a parent / child relationship than those of a composite element mapping. We will explain how to use a <emphasis>bidirectional one to many association with cascades</emphasis> to model a parent / child relationship efficiently and elegantly. It's not at all difficult!"
+msgstr "Una de las primerísimas cosas que los usuarios nuevos intentan hacer con Hibernate es modelar una relación de tipo padre / hijo. Para esto hay dos enfoques diferentes. Por varias razones, el enfoque más conveniente, especialmente para usuarios nuevos, es modelar tanto <literal>Parent</literal> como <literal>Child</literal> como clases de entidad con una asociación <literal><one-to-many></literal> desde <literal>Parent</literal> a <literal>Child</literal>. (El enfoque alternativo es declarar el <literal>Child</literal> como un <literal><composite-element></literal>.) Ahora, resulta que la semántica por defecto de una asociación uno a muchos (en Hibernate) es mucho menos cercana a la semántica usual de una relación padre / hijo que aquellas de un mapeo de elementos compuestos. Explicaremos cómo usar una <emphasis>asociación uno a muchos bidireccional con tratamiento en cascada</emphasis>!
para modelar una relación padre / hijo eficiente y elegantemente. ¡No es para nada difícil!"
+
+#: index.docbook:21
+msgid "A note about collections"
+msgstr "Una nota sobre las colecciones"
+
+#: index.docbook:23
+msgid "Hibernate collections are considered to be a logical part of their owning entity; never of the contained entities. This is a crucial distinction! It has the following consequences:"
+msgstr "Se considera que las colecciones de Hibernate son una parte lógica de la entidad que las posee; nunca de las entidades contenidas. ¡Esta es una distinción crucial! Esto tiene las siguientes consecuencias:"
+
+#: index.docbook:30
+msgid "When we remove / add an object from / to a collection, the version number of the collection owner is incremented."
+msgstr "Cuando se quita / añade un objeto desde / a una colección, se incrementa el número de versión del dueño de la colección."
+
+#: index.docbook:36
+msgid "If an object that was removed from a collection is an instance of a value type (eg, a composite element), that object will cease to be persistent and its state will be completely removed from the database. Likewise, adding a value type instance to the collection will cause its state to be immediately persistent."
+msgstr "Si un objeto que fue quitado de una colección es una instancia de un tipo de valor (por ejemplo, un elemento compuesto), ese objeta cesará de ser persistente y su estado será completamente quitado de la base de datos. Asimismo, añadir una instancia de tipo de valor a la colección causará que su estado sea inmediatamente persistente."
+
+#: index.docbook:44
+msgid "On the other hand, if an entity is removed from a collection (a one-to-many or many-to-many association), it will not be deleted, by default. This behaviour is completely consistent - a change to the internal state of another entity should not cause the associated entity to vanish! Likewise, adding an entity to a collection does not cause that entity to become persistent, by default."
+msgstr "Por otro lado, si se quita una entidad de una colección (una asociación uno-a-muchos o muchos-a-muchos), no será borrado, por defecto. Este comportamiento es completamente consistente. ¡Un cambio en el estado interno de otra entidad no hace desaparecer la entidad asociada! Asimismo, añadir una entidad a una colección no causa que la entidad se vuelva persistente, por defecto."
+
+#: index.docbook:54
+msgid "Instead, the default behaviour is that adding an entity to a collection merely creates a link between the two entities, while removing it removes the link. This is very appropriate for all sorts of cases. Where it is not appropriate at all is the case of a parent / child relationship, where the life of the child is bound to the life cycle of the parent."
+msgstr "En cambio, el comportamiento por defecto es que al añadir una entidad a una colección se crea meramente un enlace entre las dos entidades, mientras que al quitarla se quita el enlace. Esto es muy apropiado para todos los tipos de casos. Donde no es para nada apropiado es en el caso de una relación padre / hijo. donde la vida del hijo está ligada al ciclo de vida del padre."
+
+#: index.docbook:64
+msgid "Bidirectional one-to-many"
+msgstr "Uno-a-muchos bidirectional"
+
+#: index.docbook:66
+msgid "Suppose we start with a simple <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>."
+msgstr "Supón que empezamos con una asociación simple <literal><one-to-many></literal> desde <literal>Parent</literal> a <literal>Child</literal>."
+
+#: index.docbook:71
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:73
+msgid "If we were to execute the following code"
+msgstr "Si ejecutásemos el siguiente código"
+
+#: index.docbook:77
+msgid ""
+ "<![CDATA[Parent p = .....;\n"
+ "Child c = new Child();\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = .....;\n"
+ "Child c = new Child();\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:79
+msgid "Hibernate would issue two SQL statements:"
+msgstr "Hibernate publicaría dos sentencias SQL:"
+
+#: index.docbook:85
+msgid "an <literal>INSERT</literal> to create the record for <literal>c</literal>"
+msgstr "un <literal>INSERT</literal> para crear el registro de <literal>c</literal>"
+
+#: index.docbook:88
+msgid "an <literal>UPDATE</literal> to create the link from <literal>p</literal> to <literal>c</literal>"
+msgstr "un <literal>UPDATE</literal> para crear el enlace desde <literal>p</literal> a <literal>c</literal>"
+
+#: index.docbook:95
+msgid "This is not only inefficient, but also violates any <literal>NOT NULL</literal> constraint on the <literal>parent_id</literal> column. We can fix the nullability constraint violation by specifying <literal>not-null=\"true\"</literal> in the collection mapping:"
+msgstr "Esto no es sólo ineficiente, sino que además viola cualquier restricción <literal>NOT NULL</literal> en la columna <literal>parent_id</literal>. Podemos reparar la violación de restricción de nulabilidad especificando <literal>not-null=\"true\"</literal> en el mapeo de la colección:"
+
+#: index.docbook:101
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:103
+msgid "However, this is not the recommended solution."
+msgstr "Sin embargo, esta no es la solución recomendada."
+
+#: index.docbook:106
+msgid "The underlying cause of this behaviour is that the link (the foreign key <literal>parent_id</literal>) from <literal>p</literal> to <literal>c</literal> is not considered part of the state of the <literal>Child</literal> object and is therefore not created in the <literal>INSERT</literal>. So the solution is to make the link part of the <literal>Child</literal> mapping."
+msgstr "El caso subyacente de este comportamiento es que el enlace (la clave foránea <literal>parent_id</literal>) de <literal>p</literal> a <literal>c</literal> no es considerado parte del estado del objeto <literal>Child</literal> y por lo tanto no es creada en el <literal>INSERT</literal>. De modo que la solución es hacer el enlace parte del mapeo del <literal>Child</literal>."
+
+#: index.docbook:113
+msgid "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
+
+#: index.docbook:115
+msgid "(We also need to add the <literal>parent</literal> property to the <literal>Child</literal> class.)"
+msgstr "(Necesitamos además añadir la propiedad <literal>parent</literal> a la clase <literal>Child</literal>.)"
+
+#: index.docbook:119
+msgid "Now that the <literal>Child</literal> entity is managing the state of the link, we tell the collection not to update the link. We use the <literal>inverse</literal> attribute."
+msgstr "Ahora que la entidad <literal>Child</literal> está gestionando el estado del enlace, le decimos a la colección que no actualice el enlace. Usamos el atributo <literal>inverse</literal>."
+
+#: index.docbook:124
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:126
+msgid "The following code would be used to add a new <literal>Child</literal>"
+msgstr "El siguiente código podría ser usado para añadir un nuevo <literal>Child</literal>"
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:132
+msgid "And now, only one SQL <literal>INSERT</literal> would be issued!"
+msgstr "Y ahora, ¡Sólo se publicaría un <literal>INSERT</literal> de SQL!"
+
+#: index.docbook:136
+msgid "To tighten things up a bit, we could create an <literal>addChild()</literal> method of <literal>Parent</literal>."
+msgstr "Para ajustar un poco más las cosas, podríamos crear un método <literal>addChild()</literal> en <literal>Parent</literal>."
+
+#: index.docbook:141
+msgid ""
+ "<![CDATA[public void addChild(Child c) {\n"
+ " c.setParent(this);\n"
+ " children.add(c);\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public void addChild(Child c) {\n"
+ " c.setParent(this);\n"
+ " children.add(c);\n"
+ "}]]>"
+
+#: index.docbook:143
+msgid "Now, the code to add a <literal>Child</literal> looks like"
+msgstr "Ahora, el código para añadir un <literal>Child</literal> se ve así"
+
+#: index.docbook:147
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:152
+msgid "Cascading life cycle"
+msgstr "Ciclo de vida en cascada"
+
+#: index.docbook:154
+msgid "The explicit call to <literal>save()</literal> is still annoying. We will address this by using cascades."
+msgstr "La llamada explícita a <literal>save()</literal> es aún molesta. Apuntaremos a esto usando tratamientos en cascada."
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:161
+msgid "This simplifies the code above to"
+msgstr "Esto simplifica el código anterior a"
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:167
+msgid "Similarly, we don't need to iterate over the children when saving or deleting a <literal>Parent</literal>. The following removes <literal>p</literal> and all its children from the database."
+msgstr "Similarmente, no necesitamos iterar los hijos al salvar o borrar un <literal>Parent</literal>. Lo siguiente quita <literal>p</literal> y todos sus hijos de la base de datos."
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "session.delete(p);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "session.delete(p);\n"
+ "session.flush();]]>"
+
+#: index.docbook:174
+msgid "However, this code"
+msgstr "Sin embargo, este código"
+
+#: index.docbook:178
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "c.setParent(null);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "c.setParent(null);\n"
+ "session.flush();]]>"
+
+#: index.docbook:180
+msgid "will not remove <literal>c</literal> from the database; it will ony remove the link to <literal>p</literal> (and cause a <literal>NOT NULL</literal> constraint violation, in this case). You need to explicitly <literal>delete()</literal> the <literal>Child</literal>."
+msgstr "no quitará <literal>c</literal> de la base de datos; sólo quitará el enlace a <literal>p</literal> (y causará una violación a una restricción <literal>NOT NULL</literal>). Necesitas borrar el hijo explícitamente llamando a <literal>delete()</literal>."
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "session.delete(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "session.delete(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:188
+msgid "Now, in our case, a <literal>Child</literal> can't really exist without its parent. So if we remove a <literal>Child</literal> from the collection, we really do want it to be deleted. For this, we must use <literal>cascade=\"all-delete-orphan\"</literal>."
+msgstr "Ahora, en nuestro caso, un <literal>Child</literal> no puede existir realmente sin su padre. De modo que si quitamos un <literal>Child</literal> de la colección, realmente queremos que sea borrado. Para esto, debemos usar <literal>cascade=\"all-delete-orphan\"</literal>."
+
+#: index.docbook:194
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:196
+msgid "Note: even though the collection mapping specifies <literal>inverse=\"true\"</literal>, cascades are still processed by iterating the collection elements. So if you require that an object be saved, deleted or updated by cascade, you must add it to the collection. It is not enough to simply call <literal>setParent()</literal>."
+msgstr "Nota: aunque el mapeo de la colección especifique <literal>inverse=\"true\"</literal>, el tratamiento en cascada se procesa aún al iterar los elementos de colección. De modo que si requieres que un objeto sea salvado, borrado o actualizado en cascada, debes añadirlo a la colección. No es suficiente con simplemente llamar a <literal>setParent()</literal>."
+
+#: index.docbook:206
+msgid "Cascades and <literal>unsaved-value</literal>"
+msgstr "Tratamiento en cascada y <literal>unsaved-value</literal>"
+
+#: index.docbook:208
+msgid "Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</literal>, made some changes in a UI action and wish to persist these changes in a new session by calling <literal>update()</literal>. The <literal>Parent</literal> will contain a collection of childen and, since cascading update is enabled, Hibernate needs to know which children are newly instantiated and which represent existing rows in the database. Lets assume that both <literal>Parent</literal> and <literal>Child</literal> have genenerated identifier properties of type <literal>Long</literal>. Hibernate will use the identifier and version/timestamp property value to determine which of the children are new. (See <xref linkend=\"objectstate-saveorupdate\"/>.) <emphasis>In Hibernate3, it is no longer necessary to specify an <literal>unsaved-value</literal> explicitly.</emphasis>"
+msgstr "Supón que hemos cargado un <literal>Parent</literal> en una <literal>Session</literal>, hemos hecho algunos cambios en una acción de UI y deseamos hacer persistentes estos cambios en una nueva sesión llamando a <literal>update()</literal>. El <literal>Parent</literal> contendrá una colección de hijos y, ya que está habilitado el tratamiento en cascada, Hibernate necesita saber qué hijos están recién instanciados y cuáles representan filas existentes en la base de datos. Asumamos que tanto <literal>Parent</literal> como <literal>Child</literal> tienen propiedades identificadoras generadas de tipo <literal>Long</literal>. Hibernate usará el identificador y el valor de la propiedad de versión/timestamp para determinar cuáles de los hijos son nuevos. (Ver <xref linkend=\"objectstate-saveorupdate\"/>.) <emphasis>En Hibernate3, no es más necesario especificar un <literal>unsa!
ved-value</literal> explícitamente.</emphasis>"
+
+#: index.docbook:220
+msgid "The following code will update <literal>parent</literal> and <literal>child</literal> and insert <literal>newChild</literal>."
+msgstr "The following code will update <literal>parent</literal> and <literal>child</literal> and insert <literal>newChild</literal>."
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[//parent and child were both loaded in a previous session\n"
+ "parent.addChild(child);\n"
+ "Child newChild = new Child();\n"
+ "parent.addChild(newChild);\n"
+ "session.update(parent);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[//parent and child were both loaded in a previous session\n"
+ "parent.addChild(child);\n"
+ "Child newChild = new Child();\n"
+ "parent.addChild(newChild);\n"
+ "session.update(parent);\n"
+ "session.flush();]]>"
+
+#: index.docbook:227
+msgid "Well, that's all very well for the case of a generated identifier, but what about assigned identifiers and composite identifiers? This is more difficult, since Hibernate can't use the identifier property to distinguish between a newly instantiated object (with an identifier assigned by the user) and an object loaded in a previous session. In this case, Hibernate will either use the timestamp or version property, or will actually query the second-level cache or, worst case, the database, to see if the row exists."
+msgstr "Bueno, todo eso está muy bien para el caso de un identificador generado, pero ¿qué de los identificadores asignados y de los identificadores compuestos? Esto es más difícil, ya que Hibernate no puede usar la propiedad identificadora para distinguir entre un objeto recién instanciado (con un identificador asignado por el usuario) y un objeto cargado en una sesión previa. En este caso, Hibernate bien usará la propiedad de versión o timestamp, o bien consultará realmente el caché de segundo nivel, o bien, en el peor de los casos, la base de datos, para ver si existe la fila."
+
+#: index.docbook:260
+msgid "Conclusion"
+msgstr "Conclusión"
+
+#: index.docbook:262
+msgid "There is quite a bit to digest here and it might look confusing first time around. However, in practice, it all works out very nicely. Most Hibernate applications use the parent / child pattern in many places."
+msgstr "Hay que resumir un poco aquí y podría parecer confuso a la primera vez. Sin embargo, en la práctica, todo funciona muy agradablemente. La mayoría de las aplicaciones de Hibernate usan el patrón padre / hijo en muchos sitios."
+
+#: index.docbook:267
+msgid "We mentioned an alternative in the first paragraph. None of the above issues exist in the case of <literal><composite-element></literal> mappings, which have exactly the semantics of a parent / child relationship. Unfortunately, there are two big limitations to composite element classes: composite elements may not own collections, and they should not be the child of any entity other than the unique parent."
+msgstr "Hemos mencionado una alternativa en el primer párrafo. Ninguno de los temas anteriores existe en el caso de los mapeos <literal><composite-element></literal>, que tienen exactamente la semántica de una relación padre / hijo. Desafortunadamente, hay dos grandes limitaciones para las clases de elementos compuestos: los elementos compuestos no pueden poseer sus propias colecciones, y no deben ser el hijo de cualquier otra entidad que no sea su padre único."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/example_weblog.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/example_weblog.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/example_weblog.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,840 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Weblog Application"
+msgstr "Ejemplo: Aplicación de Weblog"
+
+#: index.docbook:8
+msgid "Persistent Classes"
+msgstr "Clases Persistentes"
+
+#: index.docbook:10
+msgid "The persistent classes represent a weblog, and an item posted in a weblog. They are to be modelled as a standard parent/child relationship, but we will use an ordered bag, instead of a set."
+msgstr "Las clases persistentes representan un weblog, y un ítem enviado a un weblog. Van a ser modelados como una relación padre/hijo estñndar, pero usaremos un bag ordenado, en vez de un conjunto (set)."
+
+#: index.docbook:16
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.List;\n"
+ "\n"
+ "public class Blog {\n"
+ " private Long _id;\n"
+ " private String _name;\n"
+ " private List _items;\n"
+ "\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public List getItems() {\n"
+ " return _items;\n"
+ " }\n"
+ " public String getName() {\n"
+ " return _name;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setItems(List list) {\n"
+ " _items = list;\n"
+ " }\n"
+ " public void setName(String string) {\n"
+ " _name = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.List;\n"
+ "\n"
+ "public class Blog {\n"
+ " private Long _id;\n"
+ " private String _name;\n"
+ " private List _items;\n"
+ "\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public List getItems() {\n"
+ " return _items;\n"
+ " }\n"
+ " public String getName() {\n"
+ " return _name;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setItems(List list) {\n"
+ " _items = list;\n"
+ " }\n"
+ " public void setName(String string) {\n"
+ " _name = string;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:18
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.text.DateFormat;\n"
+ "import java.util.Calendar;\n"
+ "\n"
+ "public class BlogItem {\n"
+ " private Long _id;\n"
+ " private Calendar _datetime;\n"
+ " private String _text;\n"
+ " private String _title;\n"
+ " private Blog _blog;\n"
+ "\n"
+ " public Blog getBlog() {\n"
+ " return _blog;\n"
+ " }\n"
+ " public Calendar getDatetime() {\n"
+ " return _datetime;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public String getText() {\n"
+ " return _text;\n"
+ " }\n"
+ " public String getTitle() {\n"
+ " return _title;\n"
+ " }\n"
+ " public void setBlog(Blog blog) {\n"
+ " _blog = blog;\n"
+ " }\n"
+ " public void setDatetime(Calendar calendar) {\n"
+ " _datetime = calendar;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setText(String string) {\n"
+ " _text = string;\n"
+ " }\n"
+ " public void setTitle(String string) {\n"
+ " _title = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.text.DateFormat;\n"
+ "import java.util.Calendar;\n"
+ "\n"
+ "public class BlogItem {\n"
+ " private Long _id;\n"
+ " private Calendar _datetime;\n"
+ " private String _text;\n"
+ " private String _title;\n"
+ " private Blog _blog;\n"
+ "\n"
+ " public Blog getBlog() {\n"
+ " return _blog;\n"
+ " }\n"
+ " public Calendar getDatetime() {\n"
+ " return _datetime;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public String getText() {\n"
+ " return _text;\n"
+ " }\n"
+ " public String getTitle() {\n"
+ " return _title;\n"
+ " }\n"
+ " public void setBlog(Blog blog) {\n"
+ " _blog = blog;\n"
+ " }\n"
+ " public void setDatetime(Calendar calendar) {\n"
+ " _datetime = calendar;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setText(String string) {\n"
+ " _text = string;\n"
+ " }\n"
+ " public void setTitle(String string) {\n"
+ " _title = string;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:23
+msgid "Hibernate Mappings"
+msgstr "Mapeos de Hibernate"
+
+#: index.docbook:25
+msgid "The XML mappings should now be quite straightforward."
+msgstr "Los mapeos XML ahora deben ser absolutamente directos."
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"Blog\"\n"
+ " table=\"BLOGS\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ "\n"
+ " <bag\n"
+ " name=\"items\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"DATE_TIME\"\n"
+ " cascade=\"all\">\n"
+ "\n"
+ " <key column=\"BLOG_ID\"/>\n"
+ " <one-to-many class=\"BlogItem\"/>\n"
+ "\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"Blog\"\n"
+ " table=\"BLOGS\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ "\n"
+ " <bag\n"
+ " name=\"items\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"DATE_TIME\"\n"
+ " cascade=\"all\">\n"
+ "\n"
+ " <key column=\"BLOG_ID\"/>\n"
+ " <one-to-many class=\"BlogItem\"/>\n"
+ "\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:31
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"BlogItem\"\n"
+ " table=\"BLOG_ITEMS\"\n"
+ " dynamic-update=\"true\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ITEM_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"title\"\n"
+ " column=\"TITLE\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"text\"\n"
+ " column=\"TEXT\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"datetime\"\n"
+ " column=\"DATE_TIME\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <many-to-one\n"
+ " name=\"blog\"\n"
+ " column=\"BLOG_ID\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"BlogItem\"\n"
+ " table=\"BLOG_ITEMS\"\n"
+ " dynamic-update=\"true\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ITEM_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"title\"\n"
+ " column=\"TITLE\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"text\"\n"
+ " column=\"TEXT\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"datetime\"\n"
+ " column=\"DATE_TIME\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <many-to-one\n"
+ " name=\"blog\"\n"
+ " column=\"BLOG_ID\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:36
+msgid "Hibernate Code"
+msgstr "Código Hibernate"
+
+#: index.docbook:38
+msgid "The following class demonstrates some of the kinds of things we can do with these classes, using Hibernate."
+msgstr "La siguiente clase demuestra algunos de los tipos de cosas que podemos haces con estas clases, usando Hibernate."
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.ArrayList;\n"
+ "import java.util.Calendar;\n"
+ "import java.util.Iterator;\n"
+ "import java.util.List;\n"
+ "\n"
+ "import org.hibernate.HibernateException;\n"
+ "import org.hibernate.Query;\n"
+ "import org.hibernate.Session;\n"
+ "import org.hibernate.SessionFactory;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.cfg.Configuration;\n"
+ "import org.hibernate.tool.hbm2ddl.SchemaExport;\n"
+ "\n"
+ "public class BlogMain {\n"
+ " \n"
+ " private SessionFactory _sessions;\n"
+ " \n"
+ " public void configure() throws HibernateException {\n"
+ " _sessions = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class)\n"
+ " .buildSessionFactory();\n"
+ " }\n"
+ " \n"
+ " public void exportTables() throws HibernateException {\n"
+ " Configuration cfg = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class);\n"
+ " new SchemaExport(cfg).create(true, true);\n"
+ " }\n"
+ " \n"
+ " public Blog createBlog(String name) throws HibernateException {\n"
+ " \n"
+ " Blog blog = new Blog();\n"
+ " blog.setName(name);\n"
+ " blog.setItems( new ArrayList() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.persist(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Blog blog, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setBlog(blog);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " blog.getItems().add(item);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Long blogid, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Blog blog = (Blog) session.load(Blog.class, blogid);\n"
+ " item.setBlog(blog);\n"
+ " blog.getItems().add(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(BlogItem item, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " item.setText(text);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(Long itemid, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);\n"
+ " item.setText(text);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public List listAllBlogNamesAndItemCounts(int max)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"select blog.id, blog.name, count(blogItem) \" +\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join blog.items as blogItem \" +\n"
+ " \"group by blog.name, blog.id \" +\n"
+ " \"order by max(blogItem.datetime)\"\n"
+ " );\n"
+ " q.setMaxResults(max);\n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ " \n"
+ " public Blog getBlogAndAllItems(Long blogid)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " Blog blog = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join fetch blog.items \" +\n"
+ " \"where blog.id = :blogid\"\n"
+ " );\n"
+ " q.setParameter(\"blogid\", blogid);\n"
+ " blog = (Blog) q.uniqueResult();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public List listBlogsAndRecentItems() throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"inner join blog.items as blogItem \" +\n"
+ " \"where blogItem.datetime > :minDate\"\n"
+ " );\n"
+ "\n"
+ " Calendar cal = Calendar.getInstance();\n"
+ " cal.roll(Calendar.MONTH, false);\n"
+ " q.setCalendar(\"minDate\", cal);\n"
+ " \n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.ArrayList;\n"
+ "import java.util.Calendar;\n"
+ "import java.util.Iterator;\n"
+ "import java.util.List;\n"
+ "\n"
+ "import org.hibernate.HibernateException;\n"
+ "import org.hibernate.Query;\n"
+ "import org.hibernate.Session;\n"
+ "import org.hibernate.SessionFactory;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.cfg.Configuration;\n"
+ "import org.hibernate.tool.hbm2ddl.SchemaExport;\n"
+ "\n"
+ "public class BlogMain {\n"
+ " \n"
+ " private SessionFactory _sessions;\n"
+ " \n"
+ " public void configure() throws HibernateException {\n"
+ " _sessions = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class)\n"
+ " .buildSessionFactory();\n"
+ " }\n"
+ " \n"
+ " public void exportTables() throws HibernateException {\n"
+ " Configuration cfg = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class);\n"
+ " new SchemaExport(cfg).create(true, true);\n"
+ " }\n"
+ " \n"
+ " public Blog createBlog(String name) throws HibernateException {\n"
+ " \n"
+ " Blog blog = new Blog();\n"
+ " blog.setName(name);\n"
+ " blog.setItems( new ArrayList() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.persist(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Blog blog, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setBlog(blog);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " blog.getItems().add(item);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Long blogid, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Blog blog = (Blog) session.load(Blog.class, blogid);\n"
+ " item.setBlog(blog);\n"
+ " blog.getItems().add(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(BlogItem item, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " item.setText(text);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(Long itemid, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);\n"
+ " item.setText(text);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public List listAllBlogNamesAndItemCounts(int max)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"select blog.id, blog.name, count(blogItem) \" +\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join blog.items as blogItem \" +\n"
+ " \"group by blog.name, blog.id \" +\n"
+ " \"order by max(blogItem.datetime)\"\n"
+ " );\n"
+ " q.setMaxResults(max);\n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ " \n"
+ " public Blog getBlogAndAllItems(Long blogid)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " Blog blog = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join fetch blog.items \" +\n"
+ " \"where blog.id = :blogid\"\n"
+ " );\n"
+ " q.setParameter(\"blogid\", blogid);\n"
+ " blog = (Blog) q.uniqueResult();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public List listBlogsAndRecentItems() throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"inner join blog.items as blogItem \" +\n"
+ " \"where blogItem.datetime > :minDate\"\n"
+ " );\n"
+ "\n"
+ " Calendar cal = Calendar.getInstance();\n"
+ " cal.roll(Calendar.MONTH, false);\n"
+ " q.setCalendar(\"minDate\", cal);\n"
+ " \n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ "}]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/filters.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/filters.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/filters.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,192 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Filtering data"
+msgstr "Filtrando datos"
+
+#: index.docbook:7
+msgid "Hibernate3 provides an innovative new approach to handling data with \"visibility\" rules. A <emphasis>Hibernate filter</emphasis> is a global, named, parameterized filter that may be enabled or disabled for a particular Hibernate session."
+msgstr "Hibernate3 provee un nuevo enfoque innovador para manejar datos con reglas de \"visibilidad\". Un <emphasis>filtro de Hibernate</emphasis> es un filtro global, con nombre y parametrizado que puede ser habilitado o deshabilitado para una sesión de Hibernate en particular."
+
+#: index.docbook:14
+msgid "Hibernate filters"
+msgstr "Filtros de Hibernate"
+
+#: index.docbook:16
+msgid "Hibernate3 adds the ability to pre-define filter criteria and attach those filters at both a class and a collection level. A filter criteria is the ability to define a restriction clause very similiar to the existing \"where\" attribute available on the class and various collection elements. Except these filter conditions can be parameterized. The application can then make the decision at runtime whether given filters should be enabled and what their parameter values should be. Filters can be used like database views, but parameterized inside the application."
+msgstr "Hibernate3 añade la habilidad de predefinir criterios de filtros y unir esos filtros tanto a nivel de una clase como de una colección. Un criterio de filtro es la habilidad de definir una cláusula de restricción muy similar al atributo existente \"where\" disponible en el elemento class y varios elementos de colección. Excepto en que estos filtros pueden ser parametrizados. La aplicación puede tomar la decisión en tiempo de ejecución de qué filtros deben estar habilitados y cuáles deben ser sus parámetros. Los filtros pueden ser usados como vistas de base de datos, pero parametrizados dentro de la aplicación."
+
+#: index.docbook:26
+msgid "In order to use filters, they must first be defined and then attached to the appropriate mapping elements. To define a filter, use the <literal><filter-def/></literal> element within a <literal><hibernate-mapping/></literal> element:"
+msgstr "Para usar los filtros, éstos deben primero ser definidos y luego unidos a los elementos de mapeo apropiados. Para definir un filtro, usa el elemento <literal><filter-def/></literal> dentro de un elemento <literal><hibernate-mapping/></literal>:"
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\">\n"
+ " <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
+ "</filter-def>]]>"
+msgstr ""
+ "<![CDATA[<filter-def name=\"myFilter\">\n"
+ " <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
+ "</filter-def>]]>"
+
+#: index.docbook:34
+msgid "Then, this filter can be attached to a class:"
+msgstr "Entonces este filtro puede ser unido a una clase:"
+
+#: index.docbook:38
+msgid ""
+ "<![CDATA[<class name=\"myClass\" ...>\n"
+ " ...\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"myClass\" ...>\n"
+ " ...\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:40
+msgid "or, to a collection:"
+msgstr "o a una colección:"
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<set ...>\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set ...>\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:46
+msgid "or, even to both (or multiples of each) at the same time."
+msgstr "o incluso a ambos (o muchos de cada uno) al mismo tiempo."
+
+#: index.docbook:50
+msgid "The methods on <literal>Session</literal> are: <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, and <literal>disableFilter(String filterName)</literal>. By default, filters are <emphasis>not</emphasis> enabled for a given session; they must be explcitly enabled through use of the <literal>Session.enabledFilter()</literal> method, which returns an instance of the <literal>Filter</literal> interface. Using the simple filter defined above, this would look like:"
+msgstr "Los métodos en <literal>Session</literal> son: <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, y <literal>disableFilter(String filterName)</literal>. Por defecto, los filtros <emphasis>no</emphasis> están habilitados para una sesión dada; deben ser habilitados explÃcitamente por medio del uso del método <literal>Session.enableFilter()</literal>, que devuelve una instancia de la interface <literal>Filter</literal>. Usando el filtro simple definido arriba, esto se verÃa asÃ:"
+
+#: index.docbook:59
+msgid "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
+msgstr "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
+
+#: index.docbook:61
+msgid "Note that methods on the org.hibernate.Filter interface do allow the method-chaining common to much of Hibernate."
+msgstr "Nota que los métodos en la interface org.hibernate.Filter permiten el encadenamiento de métodos común en gran parte de Hibernate."
+
+#: index.docbook:65
+msgid "A full example, using temporal data with an effective record date pattern:"
+msgstr "Un ejemplo completo, usando datos temporales con un patrón efectivo de fechas de registro:"
+
+#: index.docbook:69
+msgid ""
+ "<![CDATA[<filter-def name=\"effectiveDate\">\n"
+ " <filter-param name=\"asOfDate\" type=\"date\"/>\n"
+ "</filter-def>\n"
+ "\n"
+ "<class name=\"Employee\" ...>\n"
+ "...\n"
+ " <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>\n"
+ " <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>\n"
+ " <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>\n"
+ "...\n"
+ " <!--\n"
+ " Note that this assumes non-terminal records have an eff_end_dt set to\n"
+ " a max db date for simplicity-sake\n"
+ " -->\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Department\" ...>\n"
+ "...\n"
+ " <set name=\"employees\" lazy=\"true\">\n"
+ " <key column=\"dept_id\"/>\n"
+ " <one-to-many class=\"Employee\"/>\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<filter-def name=\"effectiveDate\">\n"
+ " <filter-param name=\"asOfDate\" type=\"date\"/>\n"
+ "</filter-def>\n"
+ "\n"
+ "<class name=\"Employee\" ...>\n"
+ "...\n"
+ " <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>\n"
+ " <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>\n"
+ " <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>\n"
+ "...\n"
+ " <!--\n"
+ " Note that this assumes non-terminal records have an eff_end_dt set to\n"
+ " a max db date for simplicity-sake\n"
+ " -->\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Department\" ...>\n"
+ "...\n"
+ " <set name=\"employees\" lazy=\"true\">\n"
+ " <key column=\"dept_id\"/>\n"
+ " <one-to-many class=\"Employee\"/>\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:71
+msgid "Then, in order to ensure that you always get back currently effective records, simply enable the filter on the session prior to retrieving employee data:"
+msgstr "Entonces, en orden de asegurar que siempre tendrás de vuelta registros actualmente efectivos, simplemente habilita el filtro en la sesión previo a recuperar los datos de empleados:"
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[Session session = ...;\n"
+ "session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());\n"
+ "List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")\n"
+ " .setLong(\"targetSalary\", new Long(1000000))\n"
+ " .list();\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[Session session = ...;\n"
+ "session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());\n"
+ "List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")\n"
+ " .setLong(\"targetSalary\", new Long(1000000))\n"
+ " .list();\n"
+ "]]>"
+
+#: index.docbook:78
+msgid "In the HQL above, even though we only explicitly mentioned a salary constraint on the results, because of the enabled filter the query will return only currently active employees who have a salary greater than a million dollars."
+msgstr "En el HQL de arriba, aunque sólo hemos mencionado explÃcitamente una restricción de salario en los resultados, debido al filtro habilitado la consulta sólo devolverá empleados actualmente activos que tengan un salario mayor que un millón de dólares."
+
+#: index.docbook:84
+msgid "Note: if you plan on using filters with outer joining (either through HQL or load fetching) be careful of the direction of the condition expression. Its safest to set this up for left outer joining; in general, place the parameter first followed by the column name(s) after the operator."
+msgstr "Nota: si planeas usar filtros con unión externa (outer joining) (bien a través de HQL, o bien de recuperación de carga) sé cuidadoso en la dirección de expresión de la condición. Lo más seguro es establecer esto para unión externa izquierda (left outer joining). En general, coloca el primer parámetro seguido del nombre(s) de columna(s) después del operador."
+
+#: index.docbook:91
+msgid "After being defined a filter might be attached to multiple entities and/or collections each with its own condition. That can be tedious when the conditions are the same each time. Thus <literal><filter-def/></literal> allows defining a default condition, either as an attribute or CDATA:"
+msgstr ""
+
+#: index.docbook:98
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\" condition=\"abc > xyz\">...</filter-def>\n"
+ "<filter-def name=\"myOtherFilter\">abc=xyz</filter-def>]]>"
+msgstr ""
+
+#: index.docbook:100
+msgid "This default condition will then be used whenever the filter is attached to something without specifying a condition. Note that this means you can give a specific condition as part of the attachment of the filter which overrides the default condition in that particular case."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/inheritance_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/inheritance_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/inheritance_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,636 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Inheritance Mapping"
+msgstr "Mapeo de Herencia"
+
+#: index.docbook:8
+msgid "The Three Strategies"
+msgstr "Las Tres Estrategias"
+
+#: index.docbook:10
+msgid "Hibernate supports the three basic inheritance mapping strategies:"
+msgstr "Hibernate soporta las tres estrategias básicas de mapeo de herencia:"
+
+#: index.docbook:16
+msgid "table per class hierarchy"
+msgstr "<para>tabla por jerarquía de clases</para>"
+
+#: index.docbook:21
+msgid "<para>table per subclass</para>"
+msgstr "<para>tabla por subclase</para>"
+
+#: index.docbook:26
+msgid "table per concrete class"
+msgstr "tabla por clase concreta"
+
+#: index.docbook:32
+msgid "In addition, Hibernate supports a fourth, slightly different kind of polymorphism:"
+msgstr "En adición, Hibernate soporta un cuarto, ligeramente diferente tipo de polimorfismo:"
+
+#: index.docbook:39
+msgid "implicit polymorphism"
+msgstr "polimorfismo implícito"
+
+#: index.docbook:45
+msgid "It is possible to use different mapping strategies for different branches of the same inheritance hierarchy, and then make use of implicit polymorphism to achieve polymorphism across the whole hierarchy. However, Hibernate does not support mixing <literal><subclass></literal>, and <literal><joined-subclass></literal> and <literal><union-subclass></literal> mappings under the same root <literal><class></literal> element. It is possible to mix together the table per hierarchy and table per subclass strategies, under the the same <literal><class></literal> element, by combining the <literal><subclass></literal> and <literal><join></literal> elements (see below)."
+msgstr "Es posible usar estrategias de mapeo diferentes para diferentes ramificaciones de la misma jerarquía de herencia, y entonces usar polimorfismo implícito para conseguir polimorfismo a través de toda la jerarquía. Sin embargo, Hibernate no soporta la mezcla de mapeos <literal><subclass></literal>, y <literal><joined-subclass></literal> y <literal><union-subclass></literal> bajo el mismo elemento <literal><class></literal> raíz. Es posible mezclar juntas las estrategias de tabla por jerarquía y tabla por subclase, bajo el mismo elemento <literal><class></literal>, combinando los elementos <literal><subclass></literal> y <literal><join></literal> (ver debajo)."
+
+#: index.docbook:59
+msgid "It is possible to define <literal>subclass</literal>, <literal>union-subclass</literal>, and <literal>joined-subclass</literal> mappings in separate mapping documents, directly beneath <literal>hibernate-mapping</literal>. This allows you to extend a class hierachy just by adding a new mapping file. You must specify an <literal>extends</literal> attribute in the subclass mapping, naming a previously mapped superclass. Note: Previously this feature made the ordering of the mapping documents important. Since Hibernate3, the ordering of mapping files does not matter when using the extends keyword. The ordering inside a single mapping file still needs to be defined as superclasses before subclasses."
+msgstr "Tabla por jerarquía de clases"
+
+#: index.docbook:70
+msgid ""
+ "<![CDATA[\n"
+ " <hibernate-mapping>\n"
+ " <subclass name=\"DomesticCat\" extends=\"Cat\" discriminator-value=\"D\">\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </subclass>\n"
+ " </hibernate-mapping>]]>"
+msgstr "Supón que tenemos una interface <literal>Payment</literal>, con los implementadores <literal>CreditCardPayment</literal>, <literal>CashPayment</literal>, <literal>ChequePayment</literal>. El mapeo de tabla por jerarquía se vería así:"
+
+#: index.docbook:74
+msgid "Table per class hierarchy"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:76
+msgid "Suppose we have an interface <literal>Payment</literal>, with implementors <literal>CreditCardPayment</literal>, <literal>CashPayment</literal>, <literal>ChequePayment</literal>. The table per hierarchy mapping would look like:"
+msgstr "Se requiere exactamente una tabla. Hay una gran limitación de esta estrategia de mapeo: las columnas declaradas por las subclases, como <literal>CCTYPE</literal>, no pueden tener restricciones <literal>NOT NULL</literal>."
+
+#: index.docbook:83
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr "Tabla por subclase"
+
+#: index.docbook:85
+msgid "Exactly one table is required. There is one big limitation of this mapping strategy: columns declared by the subclasses, such as <literal>CCTYPE</literal>, may not have <literal>NOT NULL</literal> constraints."
+msgstr "Un mapeo de tabla por sublclase se vería así:"
+
+#: index.docbook:94
+msgid "Table per subclass"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <joined-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:96
+msgid "A table per subclass mapping would look like:"
+msgstr "Se requieren cuatro tablas. Las tres tablas de subclase tienen asociaciones de clave primaria a la tabla de superclase (de modo que en el modelo relacional es realmente una asociación uno-a-uno)."
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <joined-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr "Tabla por subclase, usando un discriminador"
+
+#: index.docbook:102
+msgid "Four tables are required. The three subclass tables have primary key associations to the superclass table (so the relational model is actually a one-to-one association)."
+msgstr "Observa que la implementación de Hibernate de tabla por subclase no requiere ninguna columna discriminadora. Otros mapeadores objeto/relacional usan una implementación diferente de tabla por subclase que requiere una columna discriminadora de tipo en la tabla de superclase. Este enfoque es mucho más difícil de implementar pero discutiblemente más correcto desde un punto de vista relacional. Si quisieras usar una columna discriminadora con la estrategia de tabla por subclase, puedes combinar el uso de <literal><subclass></literal> y <literal><join></literal>, como sigue:"
+
+#: index.docbook:111
+msgid "Table per subclass, using a discriminator"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " <join table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " <join table=\"CHEQUE_PAYMENT\" fetch=\"select\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:113
+msgid "Note that Hibernate's implementation of table per subclass requires no discriminator column. Other object/relational mappers use a different implementation of table per subclass which requires a type discriminator column in the superclass table. The approach taken by Hibernate is much more difficult to implement but arguably more correct from a relational point of view. If you would like to use a discriminator column with the table per subclass strategy, you may combine the use of <literal><subclass></literal> and <literal><join></literal>, as follow:"
+msgstr "la declaración opcional <literal>fetch=\"select\"</literal> dice a Hibernate que no recupere los datos de la subclase <literal>ChequePayment</literal> usando una unión externa (outer join) al consultar la superclase."
+
+#: index.docbook:125
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " <join table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " <join table=\"CHEQUE_PAYMENT\" fetch=\"select\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr "Mezclando tabla por jerarquía de clases con tabla por subclase"
+
+#: index.docbook:127
+msgid "The optional <literal>fetch=\"select\"</literal> declaration tells Hibernate not to fetch the <literal>ChequePayment</literal> subclass data using an outer join when querying the superclass."
+msgstr "Puedes incluso mezclar las estrategias de tabla po jerarquía y tabla por subclase usando este enfoque:"
+
+#: index.docbook:136
+msgid "Mixing table per class hierarchy with table per subclass"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:138
+msgid "You may even mix the table per hierarchy and table per subclass strategies using this approach:"
+msgstr "Para cualquiera de estas estrategias de mapeo, una asociación polimórfica a la clase raíz <literal>Payment</literal> es mapeada usando <literal><many-to-one></literal>."
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr "<![CDATA[<many-to-one name=\"payment\" column=\"PAYMENT_ID\" class=\"Payment\"/>]]>"
+
+#: index.docbook:145
+msgid "For any of these mapping strategies, a polymorphic association to the root <literal>Payment</literal> class is mapped using <literal><many-to-one></literal>."
+msgstr "Tabla por clase concreta"
+
+#: index.docbook:151
+msgid "<![CDATA[<many-to-one name=\"payment\" column=\"PAYMENT_ID\" class=\"Payment\"/>]]>"
+msgstr "Podríamos ir de dos maneras a la estrategia de mapeo de tabla por clase concreta. La primera es usar <literal><union-subclass></literal>."
+
+#: index.docbook:156
+msgid "Table per concrete class"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <union-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:158
+msgid "There are two ways we could go about mapping the table per concrete class strategy. The first is to use <literal><union-subclass></literal>."
+msgstr "Están implicadas tres tablas. Cada tabla define columnas para todas las propiedades de la clase, inccluyendo las propiedades heredadas."
+
+#: index.docbook:163
+msgid ""
+ "<![CDATA[<class name=\"Payment\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <union-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ "</class>]]>"
+msgstr "La limitación de este enfoque es que si una propiedad es mapeada en la superclase, el nombre de columna debe ser el mismo en todas las tablas de subclase. (Podríamos relajar esto en un lanzamiento futuro de Hibernate.) La estrategia de generador de indentidad no está permitida en la herencia de unión de subclase, de hecho la semilla de clave primaria tiene que ser compartida a través de todas las subclases unidas de una jerarquía."
+
+#: index.docbook:165
+msgid "Three tables are involved for the subclasses. Each table defines columns for all properties of the class, including inherited properties."
+msgstr "Tabla por clase concreta, usando polimorfismo implícito"
+
+#: index.docbook:170
+msgid "The limitation of this approach is that if a property is mapped on the superclass, the column name must be the same on all subclass tables. (We might relax this in a future release of Hibernate.) The identity generator strategy is not allowed in union subclass inheritance, indeed the primary key seed has to be shared accross all unioned subclasses of a hierarchy."
+msgstr "Un enfoque alternativo es hacer uso de polimorfismo implícito:"
+
+#: index.docbook:179
+msgid "If your superclass is abstract, map it with <literal>abstract=\"true\"</literal>. Of course, if it is not abstract, an additional table (defaults to <literal>PAYMENT</literal> in the example above) is needed to hold instances of the superclass."
+msgstr ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CASH_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CHEQUE_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:189
+msgid "Table per concrete class, using implicit polymorphism"
+msgstr "Nota que en ningún sitio mencionamos la interface <literal>Payment</literal> explícitamente. Nota además que las propiedades de <literal>Payment</literal> son mapeadas en cada una de las subclases. Si quieres evitar duplicación, considera usar entidades XML. (por ejemplo, <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal> en la declaración <literal>DOCTYPE</literal> y <literal>&allproperties;</literal> en el mapeo)."
+
+#: index.docbook:191
+msgid "An alternative approach is to make use of implicit polymorphism:"
+msgstr "La desventaja de este enfoque es que Hibernate no genera <literal>UNION</literal>s de SQL al realizar consultas polimórficas."
+
+#: index.docbook:195
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CASH_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CHEQUE_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr "Para esta estrategia de mapeo, una asociación polimórfica a <literal>Payment</literal> es mapeada generalmente usando <literal><any></literal>."
+
+#: index.docbook:197
+msgid "Notice that nowhere do we mention the <literal>Payment</literal> interface explicitly. Also notice that properties of <literal>Payment</literal> are mapped in each of the subclasses. If you want to avoid duplication, consider using XML entities (e.g. <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal> in the <literal>DOCTYPE</literal> declartion and <literal>&allproperties;</literal> in the mapping)."
+msgstr ""
+ "<![CDATA[<any name=\"payment\" meta-type=\"string\" id-type=\"long\">\n"
+ " <meta-value value=\"CREDIT\" class=\"CreditCardPayment\"/>\n"
+ " <meta-value value=\"CASH\" class=\"CashPayment\"/>\n"
+ " <meta-value value=\"CHEQUE\" class=\"ChequePayment\"/>\n"
+ " <column name=\"PAYMENT_CLASS\"/>\n"
+ " <column name=\"PAYMENT_ID\"/>\n"
+ "</any>]]>"
+
+#: index.docbook:207
+msgid "The disadvantage of this approach is that Hibernate does not generate SQL <literal>UNION</literal>s when performing polymorphic queries."
+msgstr "Mezclando polimorfismo implícito con otros mapeos de herencia"
+
+#: index.docbook:212
+msgid "For this mapping strategy, a polymorphic association to <literal>Payment</literal> is usually mapped using <literal><any></literal>."
+msgstr "Hay una cosa más por notar acerca de este mapeo. Ya que las subclases se mapean cada una en su propio elemento <literal><class></literal> (y ya que <literal>Payment</literal> es sólo una interface), cada una de las subclases podría ser parte de otra jerarquía de herencia! (Y todavía puedes seguir usando consultas polimórficas contra la interface <literal>Payment</literal>.)"
+
+#: index.docbook:217
+msgid ""
+ "<![CDATA[<any name=\"payment\" meta-type=\"string\" id-type=\"long\">\n"
+ " <meta-value value=\"CREDIT\" class=\"CreditCardPayment\"/>\n"
+ " <meta-value value=\"CASH\" class=\"CashPayment\"/>\n"
+ " <meta-value value=\"CHEQUE\" class=\"ChequePayment\"/>\n"
+ " <column name=\"PAYMENT_CLASS\"/>\n"
+ " <column name=\"PAYMENT_ID\"/>\n"
+ "</any>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"CREDIT_CARD\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"MasterCardPayment\" discriminator-value=\"MDC\"/>\n"
+ " <subclass name=\"VisaPayment\" discriminator-value=\"VISA\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"NonelectronicTransaction\" table=\"NONELECTRONIC_TXN\">\n"
+ " <id name=\"id\" type=\"long\" column=\"TXN_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " ...\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:222
+msgid "Mixing implicit polymorphism with other inheritance mappings"
+msgstr "Una vez más, no mencionamos a <literal>Payment</literal> explícitamente. Si ejecutamos una consulta contra la interface <literal>Payment</literal> - por ejemplo, <literal>from Payment</literal> - Hibernate devuelve automáticamente instancias de <literal>CreditCardPayment</literal> (y sus subclases, ya que ellas también implementan <literal>Payment</literal>), <literal>CashPayment</literal> y <literal>ChequePayment</literal> pero no instancias de <literal>NonelectronicTransaction</literal>."
+
+#: index.docbook:224
+msgid "There is one further thing to notice about this mapping. Since the subclasses are each mapped in their own <literal><class></literal> element (and since <literal>Payment</literal> is just an interface), each of the subclasses could easily be part of another inheritance hierarchy! (And you can still use polymorphic queries against the <literal>Payment</literal> interface.)"
+msgstr "Limitaciones"
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"CREDIT_CARD\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"MasterCardPayment\" discriminator-value=\"MDC\"/>\n"
+ " <subclass name=\"VisaPayment\" discriminator-value=\"VISA\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"NonelectronicTransaction\" table=\"NONELECTRONIC_TXN\">\n"
+ " <id name=\"id\" type=\"long\" column=\"TXN_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " ...\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr "Existen ciertas limitaciones al enfoque de \"polimorfismo implícito\" en la estrategia de mapeo de tabla por clase concreta. Existen limitaciones algo menos restrictivas a los mapeos <literal><union-subclass></literal>."
+
+#: index.docbook:234
+msgid "Once again, we don't mention <literal>Payment</literal> explicitly. If we execute a query against the <literal>Payment</literal> interface - for example, <literal>from Payment</literal> - Hibernate automatically returns instances of <literal>CreditCardPayment</literal> (and its subclasses, since they also implement <literal>Payment</literal>), <literal>CashPayment</literal> and <literal>ChequePayment</literal> but not instances of <literal>NonelectronicTransaction</literal>."
+msgstr "La siguiente tabla muestra las limitaciones de mapeos de tabla por clase concreta, y de polmorfismo implícito, en Hibernate."
+
+#: index.docbook:249
+msgid "Limitations"
+msgstr "Funcionalidades de mapeo de herencia"
+
+#: index.docbook:251
+msgid "There are certain limitations to the \"implicit polymorphism\" approach to the table per concrete-class mapping strategy. There are somewhat less restrictive limitations to <literal><union-subclass></literal> mappings."
+msgstr "Estrategia de herencia"
+
+#: index.docbook:258
+msgid "The following table shows the limitations of table per concrete-class mappings, and of implicit polymorphism, in Hibernate."
+msgstr "muchos-a-uno polimórfica"
+
+#: index.docbook:264
+msgid "Features of inheritance mappings"
+msgstr "uno-a-uno polimórfica"
+
+#: index.docbook:276
+msgid "Inheritance strategy"
+msgstr "uno-a-muchos polimórfica"
+
+#: index.docbook:277
+msgid "Polymorphic many-to-one"
+msgstr "mushos-a-muchos polimórfica"
+
+#: index.docbook:278
+msgid "Polymorphic one-to-one"
+msgstr "<literal>load()/get()</literal> polimórficos"
+
+#: index.docbook:279
+msgid "Polymorphic one-to-many"
+msgstr "Consultas polimórficas"
+
+#: index.docbook:280
+msgid "Polymorphic many-to-many"
+msgstr "Uniones polimórficas"
+
+#: index.docbook:281
+msgid "Polymorphic <literal>load()/get()</literal>"
+msgstr "Recuperación por unión externa (outer join)"
+
+#: index.docbook:282
+msgid "Polymorphic queries"
+msgstr "<entry>tabla por jerarquía de clases</entry>"
+
+#: index.docbook:283
+msgid "Polymorphic joins"
+msgstr "<many-to-one>"
+
+#: index.docbook:284
+msgid "Outer join fetching"
+msgstr "<one-to-one>"
+
+#: index.docbook:289
+msgid "table per class-hierarchy"
+msgstr "<one-to-many>"
+
+#: index.docbook:290, index.docbook:301, index.docbook:312
+msgid "<many-to-one>"
+msgstr "<many-to-many>"
+
+#: index.docbook:291, index.docbook:302, index.docbook:313
+msgid "<one-to-one>"
+msgstr "s.get(Payment.class, id)"
+
+#: index.docbook:292, index.docbook:303
+msgid "<one-to-many>"
+msgstr "from Payment p"
+
+#: index.docbook:293, index.docbook:304, index.docbook:315
+msgid "<many-to-many>"
+msgstr "from Order o join o.payment p"
+
+#: index.docbook:294, index.docbook:305, index.docbook:316
+msgid "s.get(Payment.class, id)"
+msgstr "soportada"
+
+#: index.docbook:295, index.docbook:306, index.docbook:317, index.docbook:328
+msgid "from Payment p"
+msgstr "<entry>tabla por subclase</entry>"
+
+#: index.docbook:296, index.docbook:307, index.docbook:318
+msgid "from Order o join o.payment p"
+msgstr "<many-to-one>"
+
+#: index.docbook:297, index.docbook:308, index.docbook:319
+msgid "supported"
+msgstr "<one-to-one>"
+
+#: index.docbook:300
+msgid "<entry>table per subclass</entry>"
+msgstr "<one-to-many>"
+
+#: index.docbook:311
+msgid "table per concrete-class (union-subclass)"
+msgstr "<literal><one-to-many></literal> (para <literal>inverse=\"true\"</literal> solamente)"
+
+#: index.docbook:314
+msgid "<literal><one-to-many></literal> (for <literal>inverse=\"true\"</literal> only)"
+msgstr "from Payment p"
+
+#: index.docbook:322
+msgid "table per concrete class (implicit polymorphism)"
+msgstr "no soportada"
+
+#: index.docbook:323
+msgid "<any>"
+msgstr "<many-to-any>"
+
+#: index.docbook:324, index.docbook:325, index.docbook:329, index.docbook:330
+msgid "not supported"
+msgstr "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+
+#: index.docbook:326
+msgid "<many-to-any>"
+msgstr "no suportadas"
+
+#: index.docbook:327
+msgid "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+msgstr "no soportada"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/performance.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/performance.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/performance.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1208 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Improving performance"
+msgstr "Mejorando el rendimiento"
+
+#: index.docbook:8
+msgid "Fetching strategies"
+msgstr "Estrategias de recuperación"
+
+#: index.docbook:10
+msgid "A <emphasis>fetching strategy</emphasis> is the strategy Hibernate will use for retrieving associated objects if the application needs to navigate the association. Fetch strategies may be declared in the O/R mapping metadata, or over-ridden by a particular HQL or <literal>Criteria</literal> query."
+msgstr "Una <emphasis>estrategia de recuperación</emphasis> es la estrategia que usará Hibernate para recuperar los objetos asociados cuando la aplicación necesite navegar la asociación. Las estrategias de recuperación pueden ser declaradas en los metadatos de mapeo O/R, o sobrescritas por una consulta HQL o <literal>Criteria</literal> en particular."
+
+#: index.docbook:17
+msgid "Hibernate3 defines the following fetching strategies:"
+msgstr "Hibernate3 define las siguientes estrategias de recuperación:"
+
+#: index.docbook:23
+msgid "<emphasis>Join fetching</emphasis> - Hibernate retrieves the associated instance or collection in the same <literal>SELECT</literal>, using an <literal>OUTER JOIN</literal>."
+msgstr "<emphasis>Recuperación por unión (join fetching)</emphasis> - Hibernate recupera la instancia asociada o colección en la misma <literal>SELECT</literal>, usando una <literal>OUTER JOIN</literal>."
+
+#: index.docbook:30
+msgid "<emphasis>Select fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated entity or collection. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr "<emphasis>Recuperación por selección (select fetching)</emphasis> - se usa una segunda <literal>SELECT</literal> para recuperar la entidad asociada o colección. A menos que deshabilites explícitamente la recuperación perezosa especificando <literal>lazy=\"false\"</literal>, la segunda selección sólo será ejecutada cuando realmente accedas a la asociación."
+
+#: index.docbook:39
+msgid "<emphasis>Subselect fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated collections for all entities retrieved in a previous query or fetch. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr "<emphasis>Recuperación por subselección (subselect fetching)</emphasis> - se usa una segunda <literal>SELECT</literal> para recuperar las colecciones asociadas de todas las entidades recuperadas en una consulta o recuperación previa. A menos que deshabilites explícitamente la recuperación perezosa especificando <literal>lazy=\"false\"</literal>, esta segunda selección sólo será ejecutada cuando realmente accedas a la asociación."
+
+#: index.docbook:48
+msgid "<emphasis>Batch fetching</emphasis> - an optimization strategy for select fetching - Hibernate retrieves a batch of entity instances or collections in a single <literal>SELECT</literal>, by specifying a list of primary keys or foreign keys."
+msgstr "<emphasis>Recuperación en lote</emphasis> - una estrategia de optimización para la recuperación por selección - Hibernate recupera un lote de instancias de entidad o colecciones en una sola <literal>SELECT</literal>, especificando una lista de claves primarias o de claves foráneas."
+
+#: index.docbook:57
+msgid "Hibernate also distinguishes between:"
+msgstr "Hibernate también distingue entre:"
+
+#: index.docbook:63
+msgid "<emphasis>Immediate fetching</emphasis> - an association, collection or attribute is fetched immediately, when the owner is loaded."
+msgstr "<emphasis>Recuperación inmediata</emphasis> - una asociación, colección o atributo es recuperado inmediatamente, cuando el dueño es cargado."
+
+#: index.docbook:69
+msgid "<emphasis>Lazy collection fetching</emphasis> - a collection is fetched when the application invokes an operation upon that collection. (This is the default for collections.)"
+msgstr "<emphasis>Recuperación perezosa de colecciones</emphasis> - se recupera una colección cuando la aplicación invoca una operación sobre la colección. (Esto es por defecto para las colecciones.)"
+
+#: index.docbook:76
+msgid "<emphasis>\"Extra-lazy\" collection fetching</emphasis> - individual elements of the collection are accessed from the database as needed. Hibernate tries not to fetch the whole collection into memory unless absolutely needed (suitable for very large collections)"
+msgstr "<emphasis>Recuperación por proxy</emphasis> - se recupera una asociación monovaluada cuando se invoca un método que no sea el getter del identificador sobre el objeto asociado."
+
+#: index.docbook:84
+msgid "<emphasis>Proxy fetching</emphasis> - a single-valued association is fetched when a method other than the identifier getter is invoked upon the associated object."
+msgstr "<emphasis>Recuperación perezosa de atributos</emphasis> - se recupera un atributo o una asociación monovaluada cuando se accede a la variable de instancia (requiere instrumentación del bytecode en tiempo de ejecución). Este enfoque es raramente necesario."
+
+#: index.docbook:91
+msgid "<emphasis>\"No-proxy\" fetching</emphasis> - a single-valued association is fetched when the instance variable is accessed. Compared to proxy fetching, this approach is less lazy (the association is fetched even when only the identifier is accessed) but more transparent, since no proxy is visible to the application. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr "Aquí tenemos dos nociones ortogonales: <emphasis>cuándo</emphasis> se recupera la aplicación, y <emphasis>cómo</emphasis> es recuperada (qué SQL es usado). ¡No las confundas! Usamos <literal>fetch</literal> para afinar el rendimiento. Podemos usar <literal>lazy</literal> para definir un contrato sobre qué datos están siempre disponibles en cualquier instancia separada de una clase en particular."
+
+#: index.docbook:101
+msgid "<emphasis>Lazy attribute fetching</emphasis> - an attribute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr "Trabajando con asociaciones perezosas"
+
+#: index.docbook:110
+msgid "We have two orthogonal notions here: <emphasis>when</emphasis> is the association fetched, and <emphasis>how</emphasis> is it fetched (what SQL is used). Don't confuse them! We use <literal>fetch</literal> to tune performance. We may use <literal>lazy</literal> to define a contract for what data is always available in any detached instance of a particular class."
+msgstr "Por defecto, Hibernate3 usa una recuperación perezosa por selección para colecciones y una recuperación por proxy perezosa para asociaciones monovaluadas. Estas políticas por defecto tienen sentido para casi todas las asociaciones en casi todas las aplicaciones."
+
+#: index.docbook:119
+msgid "Working with lazy associations"
+msgstr "<emphasis>Nota:</emphasis> si estableces <literal>hibernate.default_batch_fetch_size</literal>, Hibernate usará la optimización de recuperación en lotes para recuperación perezosa (esta optimización también puede ser habilitada a un nivel más granularizado)."
+
+#: index.docbook:121
+msgid "By default, Hibernate3 uses lazy select fetching for collections and lazy proxy fetching for single-valued associations. These defaults make sense for almost all associations in almost all applications."
+msgstr "Sin embargo, la recuperación perezosa plantea un problema del que tienes que estar al tanto. Acceder a una asociación perezosa fuera del contexto de una sesión de Hibernate abierta resultará en una excepción. Por ejemplo:"
+
+#: index.docbook:127
+msgid "<emphasis>Note:</emphasis> if you set <literal>hibernate.default_batch_fetch_size</literal>, Hibernate will use the batch fetch optimization for lazy fetching (this optimization may also be enabled at a more granular level)."
+msgstr ""
+ "<![CDATA[s = sessions.openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ " \n"
+ "User u = (User) s.createQuery(\"from User u where u.name=:userName\")\n"
+ " .setString(\"userName\", userName).uniqueResult();\n"
+ "Map permissions = u.getPermissions();\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();\n"
+ "\n"
+ "Integer accessLevel = (Integer) permissions.get(\"accounts\"); // Error!]]>"
+
+#: index.docbook:134
+msgid "However, lazy fetching poses one problem that you must be aware of. Access to a lazy association outside of the context of an open Hibernate session will result in an exception. For example:"
+msgstr "Ya que la colección de permisos no fue inicializada cuando se cerró la <literal>Session</literal>, la colección no será capaz de cargar su estado. <emphasis>Hibernate no soporta la inicialización perezosa de objetos separados</emphasis>. La solución es mover el código que lee de la colección a justo antes que la transacción sea comprometida."
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[s = sessions.openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ " \n"
+ "User u = (User) s.createQuery(\"from User u where u.name=:userName\")\n"
+ " .setString(\"userName\", userName).uniqueResult();\n"
+ "Map permissions = u.getPermissions();\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();\n"
+ "\n"
+ "Integer accessLevel = (Integer) permissions.get(\"accounts\"); // Error!]]>"
+msgstr "Alternativamente, podríamos usar una colección no perezosa o asociación, especificando <literal>lazy=\"false\"</literal> para el mapeo de asociación. Sin embargo, está pensado que la inicialización perezosa sea usada para casi todas las colecciones y asociaciones. ¡Si defines demasiadas asociaciones no perezosas en tu modelo de objetos, Hibernate terminará necesitando recuperar la base de datos entera en cada transacción!"
+
+#: index.docbook:142
+msgid "Since the permissions collection was not initialized when the <literal>Session</literal> was closed, the collection will not be able to load its state. <emphasis>Hibernate does not support lazy initialization for detached objects</emphasis>. The fix is to move the code that reads from the collection to just before the transaction is committed."
+msgstr "Por otro lado, frecuentemente necesitamos elegir la recuperación por unión (que es no perezosa por naturaleza) en vez de la recuperación por selección en una transacción en particular. Veremos ahora cómo personalizar la estrategia de recuperación. En Hibernate3, los mecanismos para elegir una estrategia de recuperación son idénticas a las de las asociaciones monovaluadas y colecciones."
+
+#: index.docbook:150
+msgid "Alternatively, we could use a non-lazy collection or association, by specifying <literal>lazy=\"false\"</literal> for the association mapping. However, it is intended that lazy initialization be used for almost all collections and associations. If you define too many non-lazy associations in your object model, Hibernate will end up needing to fetch the entire database into memory in every transaction!"
+msgstr "Afinando las estrategias de recuperación"
+
+#: index.docbook:159
+msgid "On the other hand, we often want to choose join fetching (which is non-lazy by nature) instead of select fetching in a particular transaction. We'll now see how to customize the fetching strategy. In Hibernate3, the mechanisms for choosing a fetch strategy are identical for single-valued associations and collections."
+msgstr "La recuperación por selección (la preestablecida) es extremadamente vulnerable a problemas de selección N+1, de modo querríamos habilitar la recuperación por unión (join fetching) en el documento de mapeo:"
+
+#: index.docbook:170
+msgid "Tuning fetch strategies"
+msgstr ""
+ "<![CDATA[<set name=\"permissions\" \n"
+ " fetch=\"join\">\n"
+ " <key column=\"userId\"/>\n"
+ " <one-to-many class=\"Permission\"/>\n"
+ "</set]]>"
+
+#: index.docbook:172
+msgid "Select fetching (the default) is extremely vulnerable to N+1 selects problems, so we might want to enable join fetching in the mapping document:"
+msgstr "<![CDATA[<many-to-one name=\"mother\" class=\"Cat\" fetch=\"join\"/>]]>"
+
+#: index.docbook:177
+msgid ""
+ "<![CDATA[<set name=\"permissions\" \n"
+ " fetch=\"join\">\n"
+ " <key column=\"userId\"/>\n"
+ " <one-to-many class=\"Permission\"/>\n"
+ "</set]]>"
+msgstr "La estrategia de recuperación definida en el documento de mapeo afecta a:"
+
+#: index.docbook:179
+msgid "<![CDATA[<many-to-one name=\"mother\" class=\"Cat\" fetch=\"join\"/>]]>"
+msgstr "las recuperaciones vía <literal>get()</literal> o <literal>load()</literal>"
+
+#: index.docbook:181
+msgid "The <literal>fetch</literal> strategy defined in the mapping document affects:"
+msgstr "las recuperaciones que ocurren implícitamente cuando se navega una asociación (recuperación perezosa)"
+
+#: index.docbook:187
+msgid "retrieval via <literal>get()</literal> or <literal>load()</literal>"
+msgstr "las consultas de <literal>Criteria</literal>"
+
+#: index.docbook:192
+msgid "retrieval that happens implicitly when an association is navigated"
+msgstr "Usualmente, no usamos el documento de mapeo para personalizar la recuperación. En cambio, mantenemos el comportamiento por defecto, y lo sobrescribimos para una transacción en particular, usando <literal>left join fetch</literal> en HQL. Esto le dice a Hibernate que recupere la asociación tempranamente en la primera selección, usando una unión externa. En la API de consulta de <literal>Criteria</literal>, usarías <literal>setFetchMode(FetchMode.JOIN)</literal>."
+
+#: index.docbook:197
+msgid "<literal>Criteria</literal> queries"
+msgstr "Si acaso lo deseases, podrías cambiar la estrategia de recuperación usada por <literal>get()</literal> or <literal>load()</literal>; simplemente usa una consulta <literal>Criteria</literal>, por ejemplo:"
+
+#: index.docbook:202
+msgid "HQL queries if <literal>subselect</literal> fetching is used"
+msgstr ""
+ "<![CDATA[User user = (User) session.createCriteria(User.class)\n"
+ " .setFetchMode(\"permissions\", FetchMode.JOIN)\n"
+ " .add( Restrictions.idEq(userId) )\n"
+ " .uniqueResult();]]>"
+
+#: index.docbook:208
+msgid "No matter what fetching strategy you use, the defined non-lazy graph is guaranteed to be loaded into memory. Note that this might result in several immediate selects being used to execute a particular HQL query."
+msgstr "(Esto es el equivalente de Hibernate de lo que otras soluciones ORM llaman un \"plan de recuperación\".)"
+
+#: index.docbook:214
+msgid "Usually, we don't use the mapping document to customize fetching. Instead, we keep the default behavior, and override it for a particular transaction, using <literal>left join fetch</literal> in HQL. This tells Hibernate to fetch the association eagerly in the first select, using an outer join. In the <literal>Criteria</literal> query API, you would use <literal>setFetchMode(FetchMode.JOIN)</literal>."
+msgstr "Una forma completamente diferente de evitar problemas con selecciones N+1 es usar el caché de segundo nivel."
+
+#: index.docbook:223
+msgid "If you ever feel like you wish you could change the fetching strategy used by <literal>get()</literal> or <literal>load()</literal>, simply use a <literal>Criteria</literal> query, for example:"
+msgstr "Proxies de asociaciones de un solo extremo"
+
+#: index.docbook:229
+msgid ""
+ "<![CDATA[User user = (User) session.createCriteria(User.class)\n"
+ " .setFetchMode(\"permissions\", FetchMode.JOIN)\n"
+ " .add( Restrictions.idEq(userId) )\n"
+ " .uniqueResult();]]>"
+msgstr "La recuperación perezosa de colecciones está implementada usando la implementación de colecciones persistentes propia de Hibernate. Sin embargo, se necesita un mecanismo diferente para un comportamiento perezoso en las asociaciones de un solo extremo. La entidad objetivo de la asociación debe ser tratada con proxies. Hibernate implementa proxies de inicialización perezosa para objetos persistentes usando mejora del bytecode en tiempo de ejecución (por medio de la excelente biblioteca CGLIB)."
+
+#: index.docbook:231
+msgid "(This is Hibernate's equivalent of what some ORM solutions call a \"fetch plan\".)"
+msgstr "Por defecto, Hibernate3 genera proxies (en el arranque) para todas las clases persistentes y los usa para habilitar la recuperación perezosa de asociaciones <literal>muchos-a-uno</literal> y <literal>uno-a-uno</literal>."
+
+#: index.docbook:235
+msgid "A completely different way to avoid problems with N+1 selects is to use the second-level cache."
+msgstr "El fichero de mapeo puede declarar una interface a usar como interface de proxy para esa clase, con el atributo <literal>proxy</literal>. Por defecto, Hibernate usa una subclase de la clase. <emphasis>Nota que la clase tratada con proxies debe implementar un constructor por defecto con al menos visibilidad de paquete. ¡Recomendamos este constructor para todas las clases persistentes!</emphasis>"
+
+#: index.docbook:243
+msgid "Single-ended association proxies"
+msgstr "Hay algunos puntos a tener en cuenta al extender este enfoque a clases polimórficas, por ejemplo."
+
+#: index.docbook:245
+msgid "Lazy fetching for collections is implemented using Hibernate's own implementation of persistent collections. However, a different mechanism is needed for lazy behavior in single-ended associations. The target entity of the association must be proxied. Hibernate implements lazy initializing proxies for persistent objects using runtime bytecode enhancement (via the excellent CGLIB library)."
+msgstr ""
+ "<![CDATA[<class name=\"Cat\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:253
+msgid "By default, Hibernate3 generates proxies (at startup) for all persistent classes and uses them to enable lazy fetching of <literal>many-to-one</literal> and <literal>one-to-one</literal> associations."
+msgstr "Primero, las instancias de <literal>Cat</literal> nunca serán objeto de un cast a <literal>DomesticCat</literal>, incluso aunque la instancia subyacente sea instancia de <literal>DomesticCat</literal>:"
+
+#: index.docbook:259
+msgid "The mapping file may declare an interface to use as the proxy interface for that class, with the <literal>proxy</literal> attribute. By default, Hibernate uses a subclass of the class. <emphasis>Note that the proxied class must implement a default constructor with at least package visibility. We recommend this constructor for all persistent classes!</emphasis>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)\n"
+ "if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy\n"
+ " DomesticCat dc = (DomesticCat) cat; // Error!\n"
+ " ....\n"
+ "}]]>"
+
+#: index.docbook:266
+msgid "There are some gotchas to be aware of when extending this approach to polymorphic classes, eg."
+msgstr "Segundo, es posible romper con el operador <literal>==</literal> de un proxy."
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<class name=\"Cat\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy\n"
+ "DomesticCat dc = \n"
+ " (DomesticCat) session.load(DomesticCat.class, id); // acquire new DomesticCat proxy!\n"
+ "System.out.println(cat==dc); // false]]>"
+
+#: index.docbook:273
+msgid "Firstly, instances of <literal>Cat</literal> will never be castable to <literal>DomesticCat</literal>, even if the underlying instance is an instance of <literal>DomesticCat</literal>:"
+msgstr "Sin embargo, la situación no en absoluta tan mala como parece. Aunque tenemos ahora dos referencias a objetos proxy diferentes, la instancia subyacente será aún el mismo objeto:"
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)\n"
+ "if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy\n"
+ " DomesticCat dc = (DomesticCat) cat; // Error!\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy\n"
+ "System.out.println( dc.getWeight() ); // 11.0]]>"
+
+#: index.docbook:281
+msgid "Secondly, it is possible to break proxy <literal>==</literal>."
+msgstr "Tercero, no debes usar un proxy CGLIB para una clase <literal>final</literal> o una clase con algún método <literal>final</literal>."
+
+#: index.docbook:285
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy\n"
+ "DomesticCat dc = \n"
+ " (DomesticCat) session.load(DomesticCat.class, id); // acquire new DomesticCat proxy!\n"
+ "System.out.println(cat==dc); // false]]>"
+msgstr "Finalmente, si tu objeto persistente adquiere cualquier recurso bajo instanciación (por ejemplo, en inicializadores o constructores por defecto), entonces esos recursos serán adquiridos también por el proxy. La clase del proxy es una subclase real de la clase persistente."
+
+#: index.docbook:287
+msgid "However, the situation is not quite as bad as it looks. Even though we now have two references to different proxy objects, the underlying instance will still be the same object:"
+msgstr "Estos problemas se deben a limitaciones fundamentales en el modelo de herencia única de Java. Si deseas evitar estos problemas cada una de tus clases persistentes deben implementar una interface que declare sus métodos de negocio. Debes especificar estas interfaces en el fichero de mapeo. Por ejemplo:"
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy\n"
+ "System.out.println( dc.getWeight() ); // 11.0]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CatImpl\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCatImpl\" proxy=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:294
+msgid "Third, you may not use a CGLIB proxy for a <literal>final</literal> class or a class with any <literal>final</literal> methods."
+msgstr "donde <literal>CatImpl</literal> implementa la interface <literal>Cat</literal> y <literal>DomesticCatImpl</literal> implementa la interface <literal>DomesticCat</literal>. Entonces <literal>load()</literal> o <literal>iterate()</literal> pueden devolver instancias de <literal>Cat</literal> y <literal>DomesticCat</literal>. (Nota que <literal>list()</literal> usualmente no devuelve proxies.)"
+
+#: index.docbook:299
+msgid "Finally, if your persistent object acquires any resources upon instantiation (eg. in initializers or default constructor), then those resources will also be acquired by the proxy. The proxy class is an actual subclass of the persistent class."
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);\n"
+ "Iterator iter = session.createQuery(\"from CatImpl as cat where cat.name='fritz'\").iterate();\n"
+ "Cat fritz = (Cat) iter.next();]]>"
+
+#: index.docbook:305
+msgid "These problems are all due to fundamental limitations in Java's single inheritance model. If you wish to avoid these problems your persistent classes must each implement an interface that declares its business methods. You should specify these interfaces in the mapping file. eg."
+msgstr "Las relaciones también son inicializadas perezosamente. Esto significa que debes declarar cualquier propiedad como de tipo <literal>Cat</literal>, no <literal>CatImpl</literal>."
+
+#: index.docbook:311
+msgid ""
+ "<![CDATA[<class name=\"CatImpl\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCatImpl\" proxy=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr "Ciertas operaciones <emphasis>no</emphasis> requieren inicialización de proxies."
+
+#: index.docbook:313
+msgid "where <literal>CatImpl</literal> implements the interface <literal>Cat</literal> and <literal>DomesticCatImpl</literal> implements the interface <literal>DomesticCat</literal>. Then proxies for instances of <literal>Cat</literal> and <literal>DomesticCat</literal> may be returned by <literal>load()</literal> or <literal>iterate()</literal>. (Note that <literal>list()</literal> does not usually return proxies.)"
+msgstr "<literal>equals()</literal>, si la clase persistente no sobrescribe <literal>equals()</literal>"
+
+#: index.docbook:321
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);\n"
+ "Iterator iter = session.createQuery(\"from CatImpl as cat where cat.name='fritz'\").iterate();\n"
+ "Cat fritz = (Cat) iter.next();]]>"
+msgstr "<literal>hashCode()</literal>, si la clase persistente no sobrescribe <literal>hashCode()</literal>"
+
+#: index.docbook:323
+msgid "Relationships are also lazily initialized. This means you must declare any properties to be of type <literal>Cat</literal>, not <literal>CatImpl</literal>."
+msgstr "El método getter del identificador"
+
+#: index.docbook:328
+msgid "Certain operations do <emphasis>not</emphasis> require proxy initialization"
+msgstr "Hibernate detectará las clase persistentes que sobrescriban <literal>equals()</literal> o <literal>hashCode()</literal>."
+
+#: index.docbook:334
+msgid "<literal>equals()</literal>, if the persistent class does not override <literal>equals()</literal>"
+msgstr "Inicializando colecciones y proxies"
+
+#: index.docbook:340
+msgid "<literal>hashCode()</literal>, if the persistent class does not override <literal>hashCode()</literal>"
+msgstr "Una <literal>LazyInitializationException</literal> será lanzada por Hibernate si una colección o proxy sin inicializar es accedido fuera del ámbito de la <literal>Session</literal>, es decir, cuando la entidad que posee la colección o que tiene la referencia al proxy esté en el estado separada."
+
+#: index.docbook:346
+msgid "The identifier getter method"
+msgstr "A veces necesitamos asegurarnos que un proxy o colección esté inicializado antes de cerrar la <literal>Session</literal>. Por supuesto, siempre podemos forzar la inicialización llamando a <literal>cat.getSex()</literal> o <literal>cat.getKittens().size()</literal>, por ejemplo. Pero esto es confuso a lectores del código y no es conveniente para código genérico."
+
+#: index.docbook:352
+msgid "Hibernate will detect persistent classes that override <literal>equals()</literal> or <literal>hashCode()</literal>."
+msgstr "Los métodos estáticos <literal>Hibernate.initialize()</literal> y <literal>Hibernate.isInitialized()</literal> proveen a la aplicación de una forma conveniente de trabajar con colecciones o proxies inicializados perezosamente. <literal>Hibernate.initialize(cat)</literal> forzará la inicialización de un proxy, <literal>cat</literal>, en tanto su <literal>Session</literal> esté todavía abierta. <literal>Hibernate.initialize( cat.getKittens() )</literal> tiene un efecto similar para la colección de gatitos."
+
+#: index.docbook:357
+msgid "By choosing <literal>lazy=\"no-proxy\"</literal> instead of the default <literal>lazy=\"proxy\"</literal>, we can avoid the problems associated with typecasting. However, we will require buildtime bytecode instrumentation, and all operations will result in immediate proxy initialization."
+msgstr "Otra opción es mantener la <literal>Session</literal> abierta hasta que todas las colecciones y proxies necesarios hayan sido cargados. En algunas arquitecturas de aplicación, particularmente en aquellas donde el código que accede a los datos usando Hibernate, y el código que los usa están en capas de aplicación diferentes o procesos físicos diferentes, puede ser un problema asegurar que la <literal>Session</literal> esté abierta cuando se inicializa una colección. Existen dos formas básicas de tratar este tema:"
+
+#: index.docbook:367
+msgid "Initializing collections and proxies"
+msgstr "En una aplicación basada web, puede usarse un filtro de servlets para cerrar la <literal>Session</literal> sólo bien al final de una petición de usuario, una vez que el rendering de la vista esté completa (el patrón <emphasis>Sesión Abierta en Vista (Open Session in View)</emphasis>). Por supuesto, estos sitios requieren una fuerte demanda de corrección del manejo de excepciones de tu infraestructura de aplicación. Es de una importancia vital que la <literal>Session</literal> esté cerrada y la transacción terminada antes de volver al usuario, incluso cuando ocurra una excepción durante el rendering de la página. Para este enfoque, el filtro de servlet tiene que ser capaz de accceder la <literal>Session</literal>. Recomendamos que se use una variable <literal>ThreadLocal</literal> para tener la <literal>Session</literal> actual (ver el capítulo 1, <xref linkend=\"quickstart-pla!
yingwithcats\"/>, para una implementación de ejemplo)."
+
+#: index.docbook:369
+msgid "A <literal>LazyInitializationException</literal> will be thrown by Hibernate if an uninitialized collection or proxy is accessed outside of the scope of the <literal>Session</literal>, ie. when the entity owning the collection or having the reference to the proxy is in the detached state."
+msgstr "En una aplciación con una grada de negocios separada, la lógica de negocio debe \"preparar\" todas las colecciones que se vayan a necesitar por la grada web antes de volver. Esto significa que la grada de negocios debe cargar todos los datos y devolver a la grada de presentación web todos los datos que se requieran para un caso de uso en particular ya inicializados. Usualmente, la aplicación llama a <literal>Hibernate.initialize()</literal> para cada colección que se necesitará en la grada web (esta llamada debe ocurrir antes que la sesión sea cerrada) o recupera la colección tempranamente usando una consulta de Hibernate con una cláusula <literal>FETCH</literal> o una <literal>FetchMode.JOIN</literal> en <literal>Criteria</literal>. Esto es usualmente más fácil si adoptas el patrón <emphasis>Comando</emphasis> en vez de un <emphasis>Fachada de Sesión</emphasis>."
+
+#: index.docbook:375
+msgid "Sometimes we need to ensure that a proxy or collection is initialized before closing the <literal>Session</literal>. Of course, we can alway force initialization by calling <literal>cat.getSex()</literal> or <literal>cat.getKittens().size()</literal>, for example. But that is confusing to readers of the code and is not convenient for generic code."
+msgstr "Puedes también adjuntar un objeto cargado previamente a una nueva <literal>Session</literal> con <literal>merge()</literal> o <literal>lock()</literal> antes de acceder a colecciones no inicializadas (u otros proxies). ¡No, Hibernate no, y ciertamente <emphasis>no debe</emphasis> hacer esto automáticamente, ya que introduciría semánticas de transacción ad hoc!"
+
+#: index.docbook:382
+msgid "The static methods <literal>Hibernate.initialize()</literal> and <literal>Hibernate.isInitialized()</literal> provide the application with a convenient way of working with lazily initialized collections or proxies. <literal>Hibernate.initialize(cat)</literal> will force the initialization of a proxy, <literal>cat</literal>, as long as its <literal>Session</literal> is still open. <literal>Hibernate.initialize( cat.getKittens() )</literal> has a similar effect for the collection of kittens."
+msgstr "A veces no quieres inicializar una colección grande, pero necesitas aún alguna informacion sobre ella (como su tamaño) o un subconjunto de los datos."
+
+#: index.docbook:391
+msgid "Another option is to keep the <literal>Session</literal> open until all needed collections and proxies have been loaded. In some application architectures, particularly where the code that accesses data using Hibernate, and the code that uses it are in different application layers or different physical processes, it can be a problem to ensure that the <literal>Session</literal> is open when a collection is initialized. There are two basic ways to deal with this issue:"
+msgstr "Puedes usar un filtro de colecciones para obtener el tamaño de una colección sin inicializarla:"
+
+#: index.docbook:402
+msgid "In a web-based application, a servlet filter can be used to close the <literal>Session</literal> only at the very end of a user request, once the rendering of the view is complete (the <emphasis>Open Session in View</emphasis> pattern). Of course, this places heavy demands on the correctness of the exception handling of your application infrastructure. It is vitally important that the <literal>Session</literal> is closed and the transaction ended before returning to the user, even when an exception occurs during rendering of the view. See the Hibernate Wiki for examples of this \"Open Session in View\" pattern."
+msgstr "<![CDATA[( (Integer) s.createFilter( collection, \"select count(*)\" ).list().get(0) ).intValue()]]>"
+
+#: index.docbook:415
+msgid "In an application with a separate business tier, the business logic must \"prepare\" all collections that will be needed by the web tier before returning. This means that the business tier should load all the data and return all the data already initialized to the presentation/web tier that is required for a particular use case. Usually, the application calls <literal>Hibernate.initialize()</literal> for each collection that will be needed in the web tier (this call must occur before the session is closed) or retrieves the collection eagerly using a Hibernate query with a <literal>FETCH</literal> clause or a <literal>FetchMode.JOIN</literal> in <literal>Criteria</literal>. This is usually easier if you adopt the <emphasis>Command</emphasis> pattern instead of a <emphasis>Session Facade</emphasis>."
+msgstr "El método <literal>createFilter()</literal> se usa también para recuperar eficientemente subconjuntos de una colección sin necesidad de inicializar toda la colección:"
+
+#: index.docbook:430
+msgid "You may also attach a previously loaded object to a new <literal>Session</literal> with <literal>merge()</literal> or <literal>lock()</literal> before accessing uninitialized collections (or other proxies). No, Hibernate does not, and certainly <emphasis>should</emphasis> not do this automatically, since it would introduce ad hoc transaction semantics!"
+msgstr "<![CDATA[s.createFilter( lazyCollection, \"\").setFirstResult(0).setMaxResults(10).list();]]>"
+
+#: index.docbook:440
+msgid "Sometimes you don't want to initialize a large collection, but still need some information about it (like its size) or a subset of the data."
+msgstr "Usando recuperación en lotes"
+
+#: index.docbook:445
+msgid "You can use a collection filter to get the size of a collection without initializing it:"
+msgstr "Hibernate puede hacer un uso eficiente de la recuperación en lotes, esto es, Hibernate puede cargar muchos proxies sin inicializar si se accede a un proxy (o colecciones). La recuperación en lotes es una optimización de la estrategia de recuperación por selección perezosa. Hay dos formas en que puedes afinar la recuperación en lotes: a nivel de la clase o de la colección."
+
+#: index.docbook:449
+msgid "<![CDATA[( (Integer) s.createFilter( collection, \"select count(*)\" ).list().get(0) ).intValue()]]>"
+msgstr "La recuperación en lotes para clases/entidades es más fácil de entender. Imagina que tienes la siguiente situación en tiempo de ejecución: Tienes 25 instancias de <literal>Cat</literal> cargadas en una <literal>Session</literal>, cada <literal>Cat</literal> tiene una referencia a su <literal>owner</literal>, una <literal>Person</literal>. La clase <literal>Person</literal> está mapeada con un proxy, <literal>lazy=\"true\"</literal>. Si ahora iteras a través de todos los gatos y llamas a <literal>getOwner()</literal> para cada uno, Hibernate por defecto ejecutará 25 sentencias <literal>SELECT</literal> para traer los dueños tratados con proxies. Puedes afinar este comportamiento especificando un <literal>batch-size</literal> en el mapeo de <literal>Person</literal>:"
+
+#: index.docbook:451
+msgid "The <literal>createFilter()</literal> method is also used to efficiently retrieve subsets of a collection without needing to initialize the whole collection:"
+msgstr "<![CDATA[<class name=\"Person\" batch-size=\"10\">...</class>]]>"
+
+#: index.docbook:456
+msgid "<![CDATA[s.createFilter( lazyCollection, \"\").setFirstResult(0).setMaxResults(10).list();]]>"
+msgstr "Hibernate ahora ejecutará sólo tres consultas, el patrón es 10, 10, 5."
+
+#: index.docbook:461
+msgid "Using batch fetching"
+msgstr "También puedes habilitar la recuperación en lotes para colecciones. Por ejemplo, si cada <literal>Person</literal> tiene una colección perezosa de <literal>Cat</literal>s, y hay 10 personas actualmente cargadas en la <literal>Session</literal>, iterar a través de las 10 personas generará 10 <literal>SELECT</literal>s, una para cada llamada a <literal>getCats()</literal>. Si habilitas la recuperación en lotes para la colección de <literal>cats</literal> en el mapeo de <literal>Person</literal>, Hibernate puede recuperar por adelantado las colecciones:"
+
+#: index.docbook:463
+msgid "Hibernate can make efficient use of batch fetching, that is, Hibernate can load several uninitialized proxies if one proxy is accessed (or collections. Batch fetching is an optimization of the lazy select fetching strategy. There are two ways you can tune batch fetching: on the class and the collection level."
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <set name=\"cats\" batch-size=\"3\">\n"
+ " ...\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:469
+msgid "Batch fetching for classes/entities is easier to understand. Imagine you have the following situation at runtime: You have 25 <literal>Cat</literal> instances loaded in a <literal>Session</literal>, each <literal>Cat</literal> has a reference to its <literal>owner</literal>, a <literal>Person</literal>. The <literal>Person</literal> class is mapped with a proxy, <literal>lazy=\"true\"</literal>. If you now iterate through all cats and call <literal>getOwner()</literal> on each, Hibernate will by default execute 25 <literal>SELECT</literal> statements, to retrieve the proxied owners. You can tune this behavior by specifying a <literal>batch-size</literal> in the mapping of <literal>Person</literal>:"
+msgstr "Con un <literal>batch-size</literal> de 3, Hibernate cargará 3, 3, 3, 1 colecciones en cuatro <literal>SELECT</literal>s. Una vez más, el valor del atributo depende del número esperado de colecciones sin inicializar en una <literal>Session</literal> en particular."
+
+#: index.docbook:479
+msgid "<![CDATA[<class name=\"Person\" batch-size=\"10\">...</class>]]>"
+msgstr "La recuperación de coleccione en lotes es particularmente útil si tienes un árbol anidado de ítems, es decir, el típico patrón de cuenta de materiales. (Aunque un <emphasis>conjunto anidado</emphasis> o una <emphasis>ruta materializada</emphasis> podría ser una mejor opción para árboles que sean de lectura en la mayoría de los casos.)"
+
+#: index.docbook:481
+msgid "Hibernate will now execute only three queries, the pattern is 10, 10, 5."
+msgstr "Usando recuperación por subselección"
+
+#: index.docbook:485
+msgid "You may also enable batch fetching of collections. For example, if each <literal>Person</literal> has a lazy collection of <literal>Cat</literal>s, and 10 persons are currently loaded in the <literal>Sesssion</literal>, iterating through all persons will generate 10 <literal>SELECT</literal>s, one for every call to <literal>getCats()</literal>. If you enable batch fetching for the <literal>cats</literal> collection in the mapping of <literal>Person</literal>, Hibernate can pre-fetch collections:"
+msgstr "Si una colección perezosa o proxy monovaluado tiene que ser recuperado, Hibernate los carga a todos, volviendo a ejecutar la consulta original en una subselección. Esto funciona de la misma forma que la recuperación en lotes, sin carga fragmentaria."
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <set name=\"cats\" batch-size=\"3\">\n"
+ " ...\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr "Usando recuperación perezosa de propiedades"
+
+#: index.docbook:496
+msgid "With a <literal>batch-size</literal> of 3, Hibernate will load 3, 3, 3, 1 collections in four <literal>SELECT</literal>s. Again, the value of the attribute depends on the expected number of uninitialized collections in a particular <literal>Session</literal>."
+msgstr "Hibernate3 soporta la recuperación perezosa de propiedades individuales. Esta técnica de optimización es también conocida como <emphasis>grupos de recuperación (fetch groups)</emphasis>. Por favor, nota que éste es mayormente un aspecto de marketing, ya que en la práctica, optimizar lecturas de filas es mucho más importante que la optimización de lectura de columnas. Sin embargo, cargar sólo algunas propiedades de una clase podría ser útil en casos extremos, cuando tablas heredadas tienen cientos de columnas y el modelo de datos no puede ser mejorado."
+
+#: index.docbook:502
+msgid "Batch fetching of collections is particularly useful if you have a nested tree of items, ie. the typical bill-of-materials pattern. (Although a <emphasis>nested set</emphasis> or a <emphasis>materialized path</emphasis> might be a better option for read-mostly trees.)"
+msgstr "Para habilitar la carga perezosa de propiedades, establece el atributo <literal>lazy</literal> en tus mapeos de propiedades:"
+
+#: index.docbook:511
+msgid "Using subselect fetching"
+msgstr ""
+ "<![CDATA[<class name=\"Document\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\" length=\"50\"/>\n"
+ " <property name=\"summary\" not-null=\"true\" length=\"200\" lazy=\"true\"/>\n"
+ " <property name=\"text\" not-null=\"true\" length=\"2000\" lazy=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:513
+msgid "If one lazy collection or single-valued proxy has to be fetched, Hibernate loads all of them, re-running the original query in a subselect. This works in the same way as batch-fetching, without the piecemeal loading."
+msgstr "¡La carga perezosa de propiedades requiere la instrumentación del bytecode en tiempo de construcción! Si tus clases persistentes no son mejoradas, Hibernate ignorará silenciosamente la configuración perezosa de propiedades y caerá en recuperación inmediata."
+
+#: index.docbook:524
+msgid "Using lazy property fetching"
+msgstr "Para la instrumentación del bytecode, usa la siguiente tarea Ant:"
+
+#: index.docbook:526
+msgid "Hibernate3 supports the lazy fetching of individual properties. This optimization technique is also known as <emphasis>fetch groups</emphasis>. Please note that this is mostly a marketing feature, as in practice, optimizing row reads is much more important than optimization of column reads. However, only loading some properties of a class might be useful in extreme cases, when legacy tables have hundreds of columns and the data model can not be improved."
+msgstr ""
+ "<![CDATA[<target name=\"instrument\" depends=\"compile\">\n"
+ " <taskdef name=\"instrument\" classname=\"org.hibernate.tool.instrument.InstrumentTask\">\n"
+ " <classpath path=\"${jar.path}\"/>\n"
+ " <classpath path=\"${classes.dir}\"/>\n"
+ " <classpath refid=\"lib.class.path\"/>\n"
+ " </taskdef>\n"
+ "\n"
+ " <instrument verbose=\"true\">\n"
+ " <fileset dir=\"${testclasses.dir}/org/hibernate/auction/model\">\n"
+ " <include name=\"*.class\"/>\n"
+ " </fileset>\n"
+ " </instrument>\n"
+ "</target>]]>"
+
+#: index.docbook:535
+msgid "To enable lazy property loading, set the <literal>lazy</literal> attribute on your particular property mappings:"
+msgstr "Una forma diferente (¿mejor?) de evitar lecturas innecesarias de columnas, al menos para transacciones de sólo lectura es usar las funcionalidades de proyección de consultas HQL o Criteria. Esto evita la necesidad de procesar el bytecode en tiempo de construcción y ciertamente es una solución preferida."
+
+#: index.docbook:540
+msgid ""
+ "<![CDATA[<class name=\"Document\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\" length=\"50\"/>\n"
+ " <property name=\"summary\" not-null=\"true\" length=\"200\" lazy=\"true\"/>\n"
+ " <property name=\"text\" not-null=\"true\" length=\"2000\" lazy=\"true\"/>\n"
+ "</class>]]>"
+msgstr "Puedes forzar la usual recuperación temprana de propiedades usando <literal>fetch all properties</literal> en HQL."
+
+#: index.docbook:542
+msgid "Lazy property loading requires buildtime bytecode instrumentation! If your persistent classes are not enhanced, Hibernate will silently ignore lazy property settings and fall back to immediate fetching."
+msgstr "El Caché de Segundo Nivel"
+
+#: index.docbook:548
+msgid "For bytecode instrumentation, use the following Ant task:"
+msgstr "Una <literal>Session</literal> de Hibernate es una caché de datos persistentes a nivel de transacción. Es posible configurar un cluster o caché a nivel de JVM (a nivel de <literal>SessionFactory</literal>) sobre una base de clase-a-clase o colección-a-colección. Puedes incluso enchufar una caché en cluster. Sé cuidadoso. Las cachés nunca están al tanto de los cambios hechos por otra aplicación al almacén persistente (aunque pueden ser configurados para expirar regularmente los datos en caché)."
+
+#: index.docbook:552
+msgid ""
+ "<![CDATA[<target name=\"instrument\" depends=\"compile\">\n"
+ " <taskdef name=\"instrument\" classname=\"org.hibernate.tool.instrument.InstrumentTask\">\n"
+ " <classpath path=\"${jar.path}\"/>\n"
+ " <classpath path=\"${classes.dir}\"/>\n"
+ " <classpath refid=\"lib.class.path\"/>\n"
+ " </taskdef>\n"
+ "\n"
+ " <instrument verbose=\"true\">\n"
+ " <fileset dir=\"${testclasses.dir}/org/hibernate/auction/model\">\n"
+ " <include name=\"*.class\"/>\n"
+ " </fileset>\n"
+ " </instrument>\n"
+ "</target>]]>"
+msgstr "Por defecto, Hibernate usa EHCache para caching a nivel de JVM. (El soporte a JCS ahora está despreciado y será quitado en una futura versión de Hibernate.) Puedes elegir una implementación diferente estableciendo el nombre de una clase que implemente <literal>org.hibernate.cache.CacheProvider</literal> usando la propiedad <literal>hibernate.cache.provider_class</literal>."
+
+#: index.docbook:554
+msgid "A different (better?) way to avoid unnecessary column reads, at least for read-only transactions is to use the projection features of HQL or Criteria queries. This avoids the need for buildtime bytecode processing and is certainly a prefered solution."
+msgstr "Proveedores de Caché"
+
+#: index.docbook:561
+msgid "You may force the usual eager fetching of properties using <literal>fetch all properties</literal> in HQL."
+msgstr "Caché"
+
+#: index.docbook:571
+msgid "The Second Level Cache"
+msgstr "clase del Provedor"
+
+#: index.docbook:573
+msgid "A Hibernate <literal>Session</literal> is a transaction-level cache of persistent data. It is possible to configure a cluster or JVM-level (<literal>SessionFactory</literal>-level) cache on a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be careful. Caches are never aware of changes made to the persistent store by another application (though they may be configured to regularly expire cached data)."
+msgstr "Tipo"
+
+#: index.docbook:581
+msgid "You have the option to tell Hibernate which caching implementation to use by specifying the name of a class that implements <literal>org.hibernate.cache.CacheProvider</literal> using the property <literal>hibernate.cache.provider_class</literal>. 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."
+msgstr "Cluster Seguro"
+
+#: index.docbook:592
+msgid "Cache Providers"
+msgstr "Caché de Consultas Soportado"
+
+#: index.docbook:601, index.docbook:774
+msgid "Cache"
+msgstr "Hashtable (no pensado para uso en producción)"
+
+#: index.docbook:602
+msgid "Provider class"
+msgstr "org.hibernate.cache.HashtableCacheProvider"
+
+#: index.docbook:603
+msgid "Type"
+msgstr "memoria"
+
+#: index.docbook:604
+msgid "Cluster Safe"
+msgstr "sí"
+
+#: index.docbook:605
+msgid "Query Cache Supported"
+msgstr "EHCache"
+
+#: index.docbook:610, index.docbook:783
+msgid "Hashtable (not intended for production use)"
+msgstr "org.hibernate.cache.EhCacheProvider"
+
+#: index.docbook:611
+msgid "org.hibernate.cache.HashtableCacheProvider"
+msgstr "memoria, disco"
+
+#: index.docbook:612
+msgid "memory"
+msgstr "sí"
+
+#: index.docbook:614, index.docbook:621, index.docbook:628, index.docbook:784, index.docbook:785, index.docbook:786, index.docbook:791, index.docbook:792, index.docbook:793, index.docbook:798, index.docbook:799, index.docbook:800, index.docbook:805, index.docbook:806, index.docbook:812, index.docbook:815
+msgid "<entry>yes</entry>"
+msgstr "OSCache"
+
+#: index.docbook:617, index.docbook:790
+msgid "EHCache"
+msgstr "org.hibernate.cache.OSCacheProvider"
+
+#: index.docbook:618
+msgid "org.hibernate.cache.EhCacheProvider"
+msgstr "memoria, disco"
+
+#: index.docbook:619, index.docbook:626
+msgid "memory, disk"
+msgstr "sí"
+
+#: index.docbook:624, index.docbook:797
+msgid "OSCache"
+msgstr "org.hibernate.cache.SwarmCacheProvider"
+
+#: index.docbook:625
+msgid "org.hibernate.cache.OSCacheProvider"
+msgstr "clusterizado (ip multicast)"
+
+#: index.docbook:631, index.docbook:804
+msgid "SwarmCache"
+msgstr "org.hibernate.cache.TreeCacheProvider"
+
+#: index.docbook:632
+msgid "org.hibernate.cache.SwarmCacheProvider"
+msgstr "clusterizado (ip multicast), transaccional"
+
+#: index.docbook:633
+msgid "clustered (ip multicast)"
+msgstr "sí (replicación)"
+
+#: index.docbook:634
+msgid "yes (clustered invalidation)"
+msgstr "sí (requiere sincronización de reloj)"
+
+#: index.docbook:638, index.docbook:811
+msgid "JBoss TreeCache"
+msgstr "Mapeos de caché"
+
+#: index.docbook:639
+msgid "org.hibernate.cache.TreeCacheProvider"
+msgstr "El elemento <literal><cache></literal> de una mapeo de clase o colección tiene la siguiente forma:"
+
+#: index.docbook:640
+msgid "clustered (ip multicast), transactional"
+msgstr ""
+ "<![CDATA[<cache \n"
+ " usage=\"transactional|read-write|nonstrict-read-write|read-only\"\n"
+ "/>]]>"
+
+#: index.docbook:641
+msgid "yes (replication)"
+msgstr "<literal>usage</literal> especifica la estrategia de caching: <literal>transactional</literal>, <literal>read-write</literal>, <literal>nonstrict-read-write</literal> o <literal>read-only</literal>"
+
+#: index.docbook:642
+msgid "yes (clock sync req.)"
+msgstr "Alternativamente (¿preferiblemente?), puedes especificar los elementos <literal><class-cache></literal> y <literal><collection-cache></literal> en <literal>hibernate.cfg.xml</literal>."
+
+#: index.docbook:649
+msgid "Cache mappings"
+msgstr "El atributo <literal>usage</literal> especifica una <emphasis>estrategia de concurrencia al caché</emphasis>."
+
+#: index.docbook:651
+msgid "The <literal><cache></literal> element of a class or collection mapping has the following form:"
+msgstr "Estrategia: sólo lectura (read only)"
+
+#: index.docbook:662
+msgid ""
+ "<![CDATA[<cache \n"
+ " usage=\"transactional|read-write|nonstrict-read-write|read-only\"\n"
+ " region=\"RegionName\"\n"
+ " include=\"all|non-lazy\"\n"
+ "/>]]>"
+msgstr "Si tu aplicación necesita leer pero nunca modificar las instancias de una clase persistente, puede usarse un caché <literal>read-only</literal>. Esta es la mejor y más simple estrategia. Es incluso perfectamente segura de usar en un cluster."
+
+#: index.docbook:665
+msgid "<literal>usage</literal> (required) specifies the caching strategy: <literal>transactional</literal>, <literal>read-write</literal>, <literal>nonstrict-read-write</literal> or <literal>read-only</literal>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Immutable\" mutable=\"false\">\n"
+ " <cache usage=\"read-only\"/>\n"
+ " ....\n"
+ "</class>]]>"
+
+#: index.docbook:674
+msgid "<literal>region</literal> (optional, defaults to the class or collection role name) specifies the name of the second level cache region"
+msgstr "Estrategia: lectura/escritura (read/write)"
+
+#: index.docbook:681
+msgid "<literal>include</literal> (optional, defaults to <literal>all</literal>) <literal>non-lazy</literal> specifies that properties of the entity mapped with <literal>lazy=\"true\"</literal> may not be cached when attribute-level lazy fetching is enabled"
+msgstr "Si la aplicación necesita actualizar datos, un caché <literal>read-write</literal> podría ser apropiado. Esta estrategia de caché nunca debe ser usada si se requiere nivel de aislamiento serializable de transacciones. Si el caché es usado en un entorno JTA, debes especificar la propiedad <literal>hibernate.transaction.manager_lookup_class</literal>, mencionando una estrategia para obtener el <literal>TransactionManager</literal> de JTA. En otros entornos, debes asegurarte que la transacción esté completada cuando se llame a <literal>Session.close()</literal> o <literal>Session.disconnect()</literal>. Si deseas usar esta estrategia en un cluster, debes asegurarte que la implementación de caché subyacente soporta bloqueos. Los provedores de caché internos predeterminados <emphasis>no</emphasis> no lo soportan."
+
+#: index.docbook:691
+msgid "Alternatively (preferrably?), you may specify <literal><class-cache></literal> and <literal><collection-cache></literal> elements in <literal>hibernate.cfg.xml</literal>."
+msgstr ""
+ "<![CDATA[<class name=\"eg.Cat\" .... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " <set name=\"kittens\" ... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:696
+msgid "The <literal>usage</literal> attribute specifies a <emphasis>cache concurrency strategy</emphasis>."
+msgstr "Estrategia: lectura/escritura no estricta (nonstrict read/write)"
+
+#: index.docbook:703
+msgid "Strategy: read only"
+msgstr "Si la aplicación necesita sólo ocasionalmente actualizar datos (es decir, es extremadamente inprobable que dos transacciones intenten actualizar el mismo ítem simultáneamente) y no se requiere de un aislamiento de transacciones estricto, un caché <literal>nonstrict-read-write</literal> podría ser apropiado. Si se usa el caché en un entorno JTA, debes especificar <literal>hibernate.transaction.manager_lookup_class</literal>. En otros entornos, debes asegurarte que la transacción se haya completado cuando se llame a <literal>Session.close()</literal> o <literal>Session.disconnect()</literal>."
+
+#: index.docbook:705
+msgid "If your application needs to read but never modify instances of a persistent class, a <literal>read-only</literal> cache may be used. This is the simplest and best performing strategy. It's even perfectly safe for use in a cluster."
+msgstr "Estrategia: transaccional"
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"eg.Immutable\" mutable=\"false\">\n"
+ " <cache usage=\"read-only\"/>\n"
+ " ....\n"
+ "</class>]]>"
+msgstr "La estrategia de caché <literal>transactional</literal> brinda soporte a provedores de cachés completamente transaccionales como TreeCache de JBoss. Un caché así, puede sólo ser usado en un entorno JTA y debes especificar <literal>hibernate.transaction.manager_lookup_class</literal>."
+
+#: index.docbook:717
+msgid "Strategy: read/write"
+msgstr "Ninguno de los provedores de caché soporta todas las estrategias de concurrencia al caché. La siguiente tabla muestra qué provedores son compatibles con qué estrategias de concurrencia."
+
+#: index.docbook:719
+msgid "If the application needs to update data, a <literal>read-write</literal> cache might be appropriate. This cache strategy should never be used if serializable transaction isolation level is required. If the cache is used in a JTA environment, you must specify the property <literal>hibernate.transaction.manager_lookup_class</literal>, naming a strategy for obtaining the JTA <literal>TransactionManager</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called. If you wish to use this strategy in a cluster, you should ensure that the underlying cache implementation supports locking. The built-in cache providers do <emphasis>not</emphasis>."
+msgstr "Soporte a Estrategia de Concurrencia a Caché"
+
+#: index.docbook:730
+msgid ""
+ "<![CDATA[<class name=\"eg.Cat\" .... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " <set name=\"kittens\" ... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr "Caché"
+
+#: index.docbook:735
+msgid "Strategy: nonstrict read/write"
+msgstr "read-only"
+
+#: index.docbook:737
+msgid "If the application only occasionally needs to update data (ie. if it is extremely unlikely that two transactions would try to update the same item simultaneously) and strict transaction isolation is not required, a <literal>nonstrict-read-write</literal> cache might be appropriate. If the cache is used in a JTA environment, you must specify <literal>hibernate.transaction.manager_lookup_class</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called."
+msgstr "nonstrict-read-write"
+
+#: index.docbook:749
+msgid "Strategy: transactional"
+msgstr "read-write"
+
+#: index.docbook:751
+msgid "The <literal>transactional</literal> cache strategy provides support for fully transactional cache providers such as JBoss TreeCache. Such a cache may only be used in a JTA environment and you must specify <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr "transactional"
+
+#: index.docbook:759
+msgid "None of the cache providers support all of the cache concurrency strategies. The following table shows which providers are compatible with which concurrency strategies."
+msgstr "Hashtable (no pensado para uso en producción)"
+
+#: index.docbook:765
+msgid "Cache Concurrency Strategy Support"
+msgstr "sí"
+
+#: index.docbook:775
+msgid "read-only"
+msgstr "sí"
+
+#: index.docbook:776
+msgid "nonstrict-read-write"
+msgstr "EHCache"
+
+#: index.docbook:777
+msgid "read-write"
+msgstr "sí"
+
+#: index.docbook:778
+msgid "transactional"
+msgstr "sí"
+
+#: index.docbook:824
+msgid "Managing the caches"
+msgstr ""
+ "<![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat\n"
+ "sessionFactory.evict(Cat.class); //evict all Cats\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\", catId); //evict a particular collection of kittens\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\"); //evict all kitten collections]]>"
+
+#: index.docbook:826
+msgid "Whenever you pass an object to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal> and whenever you retrieve an object using <literal>load()</literal>, <literal>get()</literal>, <literal>list()</literal>, <literal>iterate()</literal> or <literal>scroll()</literal>, that object is added to the internal cache of the <literal>Session</literal>."
+msgstr "El <literal>CacheMode</literal> controla cómo una sesión en particular interactúa con el caché de segundo nivel."
+
+#: index.docbook:833
+msgid "When <literal>flush()</literal> is subsequently called, the state of that object will be synchronized with the database. If you do not want this synchronization to occur or if you are processing a huge number of objects and need to manage memory efficiently, the <literal>evict()</literal> method may be used to remove the object and its collections from the first-level cache."
+msgstr "<literal>CacheMode.NORMAL</literal> - lee ítems desde y escribe ítems hacia el caché de segundo nivel"
+
+#: index.docbook:841
+msgid ""
+ "<![CDATA[ScrollableResult cats = sess.createQuery(\"from Cat as cat\").scroll(); //a huge result set\n"
+ "while ( cats.next() ) {\n"
+ " Cat cat = (Cat) cats.get(0);\n"
+ " doSomethingWithACat(cat);\n"
+ " sess.evict(cat);\n"
+ "}]]>"
+msgstr "<literal>CacheMode.GET</literal> - lee ítems del caché de segundo nivel, pero no escribe al caché de segundo nivel excepto al actualizar datos"
+
+#: index.docbook:843
+msgid "The <literal>Session</literal> also provides a <literal>contains()</literal> method to determine if an instance belongs to the session cache."
+msgstr "<literal>CacheMode.PUT</literal> - escribe ítems al caché de segundo nivel, pero no lee del caché de segundo nivel"
+
+#: index.docbook:848
+msgid "To completely evict all objects from the session cache, call <literal>Session.clear()</literal>"
+msgstr "<literal>CacheMode.REFRESH</literal> - escribe ítems al caché de segundo nivel, pero no lee del caché de segundo nivel, saltándose el efecto de <literal>hibernate.cache.use_minimal_puts</literal>, forzando un refresco del caché de segundo nivel para todos los ítems leídos de la base de datos"
+
+#: index.docbook:852
+msgid "For the second-level cache, there are methods defined on <literal>SessionFactory</literal> for evicting the cached state of an instance, entire class, collection instance or entire collection role."
+msgstr "Para navegar por los contenidos de una región de caché de segundo nivel o de consultas, usa la API de <literal>Statistics</literal>:"
+
+#: index.docbook:858
+msgid ""
+ "<![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat\n"
+ "sessionFactory.evict(Cat.class); //evict all Cats\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\", catId); //evict a particular collection of kittens\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\"); //evict all kitten collections]]>"
+msgstr ""
+ "<![CDATA[Map cacheEntries = sessionFactory.getStatistics()\n"
+ " .getSecondLevelCacheStatistics(regionName)\n"
+ " .getEntries();]]>"
+
+#: index.docbook:860
+msgid "The <literal>CacheMode</literal> controls how a particular session interacts with the second-level cache."
+msgstr "Necesitarás habilitar las estadísticas y, opcionalmente, forzar a Hibernate para que guarde las entradas del caché en un formato más entendible por humanos:"
+
+#: index.docbook:867
+msgid "<literal>CacheMode.NORMAL</literal> - read items from and write items to the second-level cache"
+msgstr ""
+ "<![CDATA[hibernate.generate_statistics true\n"
+ "hibernate.cache.use_structured_entries true]]>"
+
+#: index.docbook:872
+msgid "<literal>CacheMode.GET</literal> - read items from the second-level cache, but don't write to the second-level cache except when updating data"
+msgstr "El Caché de Consultas"
+
+#: index.docbook:878
+msgid "<literal>CacheMode.PUT</literal> - write items to the second-level cache, but don't read from the second-level cache"
+msgstr "Los conjuntos resultado de consultas también pueden tratarse en caché. Esto sólo es útil para consultas que se ejecutan frecuentemente con los mismos parámetros. Para usar el caché de consultas primero debes habilitarlo:"
+
+#: index.docbook:884
+msgid "<literal>CacheMode.REFRESH</literal> - write items to the second-level cache, but don't read from the second-level cache, bypass the effect of <literal>hibernate.cache.use_minimal_puts</literal>, forcing a refresh of the second-level cache for all items read from the database"
+msgstr "<![CDATA[hibernate.cache.use_query_cache true]]>"
+
+#: index.docbook:892
+msgid "To browse the contents of a second-level or query cache region, use the <literal>Statistics</literal> API:"
+msgstr "Esta configuración causa la creación de dos nuevas regiones de caché - una teniendo en caché conjuntos resultado de consulta (<literal>org.hibernate.cache.StandardQueryCache</literal>), el otro teniendo timestamps de las actualizaciones más recientes a tablas consultables (<literal>org.hibernate.cache.UpdateTimestampsCache</literal>). Nota que el caché de consultas no pone en caché el estado de las entidades reales en el conjunto resultado; sólo tiene en caché valores indentificadores y resultados de tipo de valor. De modo que el caché de consultas siempre debe ser usado en conjunción con el caché de segundo nivel."
+
+#: index.docbook:897
+msgid ""
+ "<![CDATA[Map cacheEntries = sessionFactory.getStatistics()\n"
+ " .getSecondLevelCacheStatistics(regionName)\n"
+ " .getEntries();]]>"
+msgstr "La mayoría de consultas no se benefician del tratamiento en caché, de modo que por defecto las consultas no son tratadas en caché. Para habilitar el tratamiento en caché, llama a <literal>Query.setCacheable(true)</literal>. Esta llamada permite a la consulta buscar resultados existentes en caché o agregar sus resultados al caché cuando se ejecuta."
+
+#: index.docbook:899
+msgid "You'll need to enable statistics, and, optionally, force Hibernate to keep the cache entries in a more human-understandable format:"
+msgstr "Si requieres un control finamente granularizado sobre las políticas de expiración del caché de consultas, puedes especificar una región de caché con nombre para una consulta en particular llamando a <literal>Query.setCacheRegion()</literal>."
+
+#: index.docbook:904
+msgid ""
+ "<![CDATA[hibernate.generate_statistics true\n"
+ "hibernate.cache.use_structured_entries true]]>"
+msgstr ""
+ "<![CDATA[List blogs = sess.createQuery(\"from Blog blog where blog.blogger = :blogger\")\n"
+ " .setEntity(\"blogger\", blogger)\n"
+ " .setMaxResults(15)\n"
+ " .setCacheable(true)\n"
+ " .setCacheRegion(\"frontpages\")\n"
+ " .list();]]>"
+
+#: index.docbook:909
+msgid "The Query Cache"
+msgstr "Si la consulta debe forzar un refresco de si región del caché de consultas, debes llamar a <literal>Query.setCacheMode(CacheMode.REFRESH)</literal>. Esto es particularmente útil en casos donde los datos subyacentes pueden haber sido actualizados por medio de un proceso separado (es decir, no modificados a través de Hibernate) y permite a la aplicación refrescar selectivamente conjuntos resultado de consultas en particular. Esto es una alternativa más eficient al desahuciamiento de una región del caché de consultas vía <literal>SessionFactory.evictQueries()</literal>."
+
+#: index.docbook:911
+msgid "Query result sets may also be cached. This is only useful for queries that are run frequently with the same parameters. To use the query cache you must first enable it:"
+msgstr "Entendiendo el rendimiento de Colecciones"
+
+#: index.docbook:916
+msgid "<![CDATA[hibernate.cache.use_query_cache true]]>"
+msgstr "Ya hemos llevado un buen tiempo hablando sobre colecciones. En esta sección resaltaremos un par de temas más sobre cómo las colecciones se comportan en tiempo de ejecución."
+
+#: index.docbook:918
+msgid "This setting causes the creation of two new cache regions - one holding cached query result sets (<literal>org.hibernate.cache.StandardQueryCache</literal>), the other holding timestamps of the most recent updates to queryable tables (<literal>org.hibernate.cache.UpdateTimestampsCache</literal>). Note that the query cache does not cache the state of the actual entities in the result set; it caches only identifier values and results of value type. So the query cache should always be used in conjunction with the second-level cache."
+msgstr "Taxonomia"
+
+#: index.docbook:928
+msgid "Most queries do not benefit from caching, so by default queries are not cached. To enable caching, call <literal>Query.setCacheable(true)</literal>. This call allows the query to look for existing cache results or add its results to the cache when it is executed."
+msgstr "Hibernate define tres tipos básicos de colecciones:"
+
+#: index.docbook:935
+msgid "If you require fine-grained control over query cache expiration policies, you may specify a named cache region for a particular query by calling <literal>Query.setCacheRegion()</literal>."
+msgstr "colecciones de valores"
+
+#: index.docbook:941
+msgid ""
+ "<![CDATA[List blogs = sess.createQuery(\"from Blog blog where blog.blogger = :blogger\")\n"
+ " .setEntity(\"blogger\", blogger)\n"
+ " .setMaxResults(15)\n"
+ " .setCacheable(true)\n"
+ " .setCacheRegion(\"frontpages\")\n"
+ " .list();]]>"
+msgstr "asociaciones uno a muchos"
+
+#: index.docbook:943
+msgid "If the query should force a refresh of its query cache region, you should call <literal>Query.setCacheMode(CacheMode.REFRESH)</literal>. This is particularly useful in cases where underlying data may have been updated via a separate process (i.e., not modified through Hibernate) and allows the application to selectively refresh particular query result sets. This is a more efficient alternative to eviction of a query cache region via <literal>SessionFactory.evictQueries()</literal>."
+msgstr "asociaciones muchos a muchos"
+
+#: index.docbook:955
+msgid "Understanding Collection performance"
+msgstr "Esta clasificación distingue las varias tablas y relaciones de clave foránea pero no nos dice absolutamente todo lo que necesitamos saber sobre el modelo relacional. Para entender completamente la estructura relacional y las características de rendimiento, debemos considerar la estructura de la clave primaria que es usada por Hibernate para actualizar o borrar filas de colección. Esto sugiere la siguiente clasificación:"
+
+#: index.docbook:957
+msgid "We've already spent quite some time talking about collections. In this section we will highlight a couple more issues about how collections behave at runtime."
+msgstr "colecciones indexadas"
+
+#: index.docbook:964
+msgid "Taxonomy"
+msgstr "conjuntos (sets)"
+
+#: index.docbook:966
+msgid "Hibernate defines three basic kinds of collections:"
+msgstr "bolsas (bags)"
+
+#: index.docbook:970
+msgid "collections of values"
+msgstr "Todas las colecciones indexadas (mapas, listas, arrays) tienen una clave primaria consistente de las columnas <literal><key></literal> y <literal><index></literal>. En este caso las actualizaciones de colecciones son usualmente extremadamente eficientes. La clave primaria puede ser indexada fácilmente y una fila en particular puede ser localizada cuando Hibernate intenta actualizarla o borrarla."
+
+#: index.docbook:973
+msgid "one to many associations"
+msgstr "Los conjuntos (sets) tienen una clave primaria consistente en <literal><key></literal> y columnas de elemento. Esto puede ser menos eficiente para algunos tipos de elemento de colección, particularmente elementos compuestos o texto largo, o campos binarios. La base de datos puede no ser capaz de indexar una clave primaria compleja eficientemente. Por otra parte, para asociaciones uno a muchos o muchos a muchos, particularmente en el caso de identificadores sintéticos, es probable que sólo sea tan eficiente. (Nota al márgen: si quieres que <literal>SchemaExport</literal> realmente cree la clave primaria de un <literal><set></literal> por ti, debes declarar todas las columnas como <literal>not-null=\"true\"</literal>.)"
+
+#: index.docbook:976
+msgid "many to many associations"
+msgstr "Los mapeos de <literal><idbag></literal> definen una clave delegada, de modo que siempre resulten eficientes de actualizar. De hecho, son el mejor caso."
+
+#: index.docbook:980
+msgid "This classification distinguishes the various table and foreign key relationships but does not tell us quite everything we need to know about the relational model. To fully understand the relational structure and performance characteristics, we must also consider the structure of the primary key that is used by Hibernate to update or delete collection rows. This suggests the following classification:"
+msgstr "Los bags son el peor caso. Ya que un bag permite valores de elementos duplicados y no tiene ninguna columna índice, no puede definirse ninguna clave primaria. Hibernate no tiene forma de distinguir entre filas duplicadas. Hibernate resuelve este problema quitando completamente (en un solo <literal>DELETE</literal>) y recreando la colección siempre que cambia. Esto podría ser muy ineficiente."
+
+#: index.docbook:991
+msgid "indexed collections"
+msgstr "Nota que para una asociación uno-a-muchos, la \"clave primaria\" puede no ser la clave primaria física de la tabla de base de datos; pero incluso en este caso, la clasificación anterior es útil todavía. (Aún refleja cómo Hibernate \"localiza\" filas individuales de la colección.)"
+
+#: index.docbook:994
+msgid "sets"
+msgstr "Las listas, mapas, idbags y conjuntos son las colecciones más eficientes de actualizar"
+
+#: index.docbook:997
+msgid "bags"
+msgstr "Desde la discusión anterior, debe quedar claro que las colecciones indexadas y (usualmente) los conjuntos permiten la operación más eficiente en términos de añadir, quitar y actualizar elementos."
+
+#: index.docbook:1001
+msgid "All indexed collections (maps, lists, arrays) have a primary key consisting of the <literal><key></literal> and <literal><index></literal> columns. In this case collection updates are usually extremely efficient - the primary key may be efficiently indexed and a particular row may be efficiently located when Hibernate tries to update or delete it."
+msgstr "Hay, discutiblemente, una ventaja más que las colecciones indexadas tienen sobre otros conjuntos para las asociaciones muchos a muchos o colecciones de valores. Debido a la estructura de un <literal>Set</literal>, Hibernate ni siquiera actualiza una fila con <literal>UPDATE</literal> cuando se \"cambia\" un elemento. Los cambios a un <literal>Set</literal> siempre funcionan por medio de <literal>INSERT</literal> y <literal>DELETE</literal> (de filas individuales). Una vez más, esta consideración no se aplica a las asociaciones uno a muchos."
+
+#: index.docbook:1009
+msgid "Sets have a primary key consisting of <literal><key></literal> and element columns. This may be less efficient for some types of collection element, particularly composite elements or large text or binary fields; the database may not be able to index a complex primary key as efficently. On the other hand, for one to many or many to many associations, particularly in the case of synthetic identifiers, it is likely to be just as efficient. (Side-note: if you want <literal>SchemaExport</literal> to actually create the primary key of a <literal><set></literal> for you, you must declare all columns as <literal>not-null=\"true\"</literal>.)"
+msgstr "Después de observar que los arrays no pueden ser perezosos, podríamos concluir que las listas, mapas e idbags son los tipos más eficientes de colecciones (no inversas), con los conjuntos (sets) no muy por detrás. Se espera que los sets sean el tipo más común de colección en las aplicaciones de Hibernate. Esto es debido a que la semántica de los sets es la más natural en el modelo relacional."
+
+#: index.docbook:1020
+msgid "<literal><idbag></literal> mappings define a surrogate key, so they are always very efficient to update. In fact, they are the best case."
+msgstr "Sin embargo, en modelos de dominio de Hibernate bien dieñados, usualmente vemos que la mayoría de las colecciones son de hecho asociaciones uno-a-muchos con <literal>inverse=\"true\"</literal>. Para estas asociaciones, la actualización es manejada por el extremo muchos-a-uno de la asociación, y las consideraciones de este tipo sobre el rendimiento de actualización de colecciones simplemente no se aplican."
+
+#: index.docbook:1025
+msgid "Bags are the worst case. Since a bag permits duplicate element values and has no index column, no primary key may be defined. Hibernate has no way of distinguishing between duplicate rows. Hibernate resolves this problem by completely removing (in a single <literal>DELETE</literal>) and recreating the collection whenever it changes. This might be very inefficient."
+msgstr "Los Bags y las listas son las colecciones inversas más eficientes"
+
+#: index.docbook:1033
+msgid "Note that for a one-to-many association, the \"primary key\" may not be the physical primary key of the database table - but even in this case, the above classification is still useful. (It still reflects how Hibernate \"locates\" individual rows of the collection.)"
+msgstr "Justo antes que tires a la zanja los bags para siempre, hay un caso en particular en el que los bags son muchos más eficientes que los conjuntos. Para una colección con <literal>inverse=\"true\"</literal> (el idioma estándar de relaciones uno-a-muchos bidireccionales, por ejemplo) ¡podemos añadir elementos a un bag o lista sin necesidad de inicializar (fetch) los elementos del bag! Esto se debe a que <literal>Collection.add()</literal> o <literal>Collection.addAll()</literal> siempre deben devolver true para un bag o <literal>List</literal> (no como un <literal>Set</literal>). Esto puede hacer el siguiente código común mucho más rápido."
+
+#: index.docbook:1043
+msgid "Lists, maps, idbags and sets are the most efficient collections to update"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) sess.load(Parent.class, id);\n"
+ " Child c = new Child();\n"
+ " c.setParent(p);\n"
+ " p.getChildren().add(c); //no need to fetch the collection!\n"
+ " sess.flush();]]>"
+
+#: index.docbook:1045
+msgid "From the discussion above, it should be clear that indexed collections and (usually) sets allow the most efficient operation in terms of adding, removing and updating elements."
+msgstr "Borrado de un solo tiro"
+
+#: index.docbook:1051
+msgid "There is, arguably, one more advantage that indexed collections have over sets for many to many associations or collections of values. Because of the structure of a <literal>Set</literal>, Hibernate doesn't ever <literal>UPDATE</literal> a row when an element is \"changed\". Changes to a <literal>Set</literal> always work via <literal>INSERT</literal> and <literal>DELETE</literal> (of individual rows). Once again, this consideration does not apply to one to many associations."
+msgstr "Ocasionalmente, borrar los elementos de una colección uno a uno puede ser extremadamente ineficiente. Hibernate no es completamente estúpido, de modo que sabe no hacer eso, en el caso de una colección nueva-vacía (si has llamado a <literal>list.clear()</literal>, por ejemplo). En este caso, Hibernate publicará una sola <literal>DELETE</literal>, ¡y listo!"
+
+#: index.docbook:1060
+msgid "After observing that arrays cannot be lazy, we would conclude that lists, maps and idbags are the most performant (non-inverse) collection types, with sets not far behind. Sets are expected to be the most common kind of collection in Hibernate applications. This is because the \"set\" semantics are most natural in the relational model."
+msgstr "Supón que añadimos un solo elemento a una colección de tamaño veinte y luego quitamos dos elementos. Hibernate publicará una sentencia <literal>INSERT</literal> y dos sentencias <literal>DELETE</literal> (a menos que la colección sea un bag). Esto es ciertamente deseable."
+
+#: index.docbook:1068
+msgid "However, in well-designed Hibernate domain models, we usually see that most collections are in fact one-to-many associations with <literal>inverse=\"true\"</literal>. For these associations, the update is handled by the many-to-one end of the association, and so considerations of collection update performance simply do not apply."
+msgstr "Sin embargo, supón que quitamos dieciocho elementos, dejando dos y luego añadimos tres nuevos elementos. Hay dos formas posibles de proceder"
+
+#: index.docbook:1078
+msgid "Bags and lists are the most efficient inverse collections"
+msgstr "borrar dieciocho filas una a una y luego insertar tres filas"
+
+#: index.docbook:1080
+msgid "Just before you ditch bags forever, there is a particular case in which bags (and also lists) are much more performant than sets. For a collection with <literal>inverse=\"true\"</literal> (the standard bidirectional one-to-many relationship idiom, for example) we can add elements to a bag or list without needing to initialize (fetch) the bag elements! This is because <literal>Collection.add()</literal> or <literal>Collection.addAll()</literal> must always return true for a bag or <literal>List</literal> (unlike a <literal>Set</literal>). This can make the following common code much faster."
+msgstr "quitar toda la colección (en un solo <literal>DELETE</literal> de SQL) e insertar todos los cinco elementos actuales (uno a uno)"
+
+#: index.docbook:1090
+msgid ""
+ "<![CDATA[Parent p = (Parent) sess.load(Parent.class, id);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c); //no need to fetch the collection!\n"
+ "sess.flush();]]>"
+msgstr "Hibernate no es lo suficientemente inteligente para saber que la segunda opción es probablemente más rápida en este caso. (Y que sería probablemente indeseable para Hibernate ser tan inteligente; este comportamiento podría confundir a disparadores de base de datos, etc.)"
+
+#: index.docbook:1095
+msgid "One shot delete"
+msgstr "Afortunadamente, puedes forzar este comportamiento (es decir, la segunda estrategia) en cualquier momento descartando (es decir, desreferenciando) la colección original y devolviendo una colección nuevamente instanciada con todos los elementos actuales. Esto puede ser muy útil y potente de vez en cuando."
+
+#: index.docbook:1097
+msgid "Occasionally, deleting collection elements one by one can be extremely inefficient. Hibernate isn't completely stupid, so it knows not to do that in the case of an newly-empty collection (if you called <literal>list.clear()</literal>, for example). In this case, Hibernate will issue a single <literal>DELETE</literal> and we are done!"
+msgstr "Por supuesto, el borrado-de-un-solo-tiro no se aplica a colecciones mapeadas <literal>inverse=\"true\"</literal>."
+
+#: index.docbook:1104
+msgid "Suppose we add a single element to a collection of size twenty and then remove two elements. Hibernate will issue one <literal>INSERT</literal> statement and two <literal>DELETE</literal> statements (unless the collection is a bag). This is certainly desirable."
+msgstr "Monitoreando el rendimiento"
+
+#: index.docbook:1110
+msgid "However, suppose that we remove eighteen elements, leaving two and then add thee new elements. There are two possible ways to proceed"
+msgstr "La optimización no es de mucho uso sin el monitoreo y el acceso a números de rendimiento. Hibernate provee un rango completo de figuras sobre sus operaciones internas. Las estadísticas en Hibernate están disponibles por <literal>SessionFactory</literal>."
+
+#: index.docbook:1117
+msgid "delete eighteen rows one by one and then insert three rows"
+msgstr "Monitoreando una SessionFactory"
+
+#: index.docbook:1120
+msgid "remove the whole collection (in one SQL <literal>DELETE</literal>) and insert all five current elements (one by one)"
+msgstr "Puedes acceder a las métricas de <literal>SessionFactory</literal> de dos formas. Tu primera opción es llamar a <literal>sessionFactory.getStatistics()</literal> y leer o mostrar por pantalla la <literal>Statistics</literal> por ti mismo."
+
+#: index.docbook:1125
+msgid "Hibernate isn't smart enough to know that the second option is probably quicker in this case. (And it would probably be undesirable for Hibernate to be that smart; such behaviour might confuse database triggers, etc.)"
+msgstr "Hibernate puede también usar JMX para publicar las métricas si habilitas el MBean <literal>StatisticsService</literal>. Puede habilitar un solo MBean para todas tus <literal>SessionFactory</literal> o una por fábrica. Mira el siguiente código para ejemplos de configuración minimalistas:"
+
+#: index.docbook:1131
+msgid "Fortunately, you can force this behaviour (ie. the second strategy) at any time by discarding (ie. dereferencing) the original collection and returning a newly instantiated collection with all the current elements. This can be very useful and powerful from time to time."
+msgstr ""
+ "<![CDATA[// MBean service registration for a specific SessionFactory\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"myFinancialApp\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory\n"
+ "server.registerMBean(stats, on); // Register the Mbean on the server]]>"
+
+#: index.docbook:1137
+msgid "Of course, one-shot-delete does not apply to collections mapped <literal>inverse=\"true\"</literal>."
+msgstr ""
+ "<![CDATA[// MBean service registration for all SessionFactory's\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"all\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "server.registerMBean(stats, on); // Register the MBean on the server]]>"
+
+#: index.docbook:1146
+msgid "Monitoring performance"
+msgstr "POR HACER: Esto no tiene sentido: En el primer caso, recuperamos y usamos el MBean directamente. En el segundo, debemos proporcionar el nombre JNDI en el que se guarda la fábrica de sesiones antes de usarlo. Usa <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal>"
+
+#: index.docbook:1148
+msgid "Optimization is not much use without monitoring and access to performance numbers. Hibernate provides a full range of figures about its internal operations. Statistics in Hibernate are available per <literal>SessionFactory</literal>."
+msgstr "Puedes (des)activar el monitoreo de una <literal>SessionFactory</literal>"
+
+#: index.docbook:1155
+msgid "Monitoring a SessionFactory"
+msgstr "en tiempo de configuración, establece <literal>hibernate.generate_statistics</literal> a <literal>false</literal>"
+
+#: index.docbook:1157
+msgid "You can access <literal>SessionFactory</literal> metrics in two ways. Your first option is to call <literal>sessionFactory.getStatistics()</literal> and read or display the <literal>Statistics</literal> yourself."
+msgstr "en tiempo de ejecución: <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> o <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>"
+
+#: index.docbook:1163
+msgid "Hibernate can also use JMX to publish metrics if you enable the <literal>StatisticsService</literal> MBean. You may enable a single MBean for all your <literal>SessionFactory</literal> or one per factory. See the following code for minimalistic configuration examples:"
+msgstr "Las estadísticas pueden ser reajustadas programáticamente usando el método <literal>clear()</literal>. Puede enviarse un resumen a un logger (nivel info) usando el método <literal>logSummary()</literal>."
+
+#: index.docbook:1170
+msgid ""
+ "<![CDATA[// MBean service registration for a specific SessionFactory\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"myFinancialApp\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory\n"
+ "server.registerMBean(stats, on); // Register the Mbean on the server]]>"
+msgstr "Métricas"
+
+#: index.docbook:1173
+msgid ""
+ "<![CDATA[// MBean service registration for all SessionFactory's\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"all\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "server.registerMBean(stats, on); // Register the MBean on the server]]>"
+msgstr "Hibernate provee un número de métricas, desde información muy básica a la especializada sólo relevante en ciertos escenarios. Todos los contadores disponibles se describen en la API de la interface <literal>Statistics</literal>, en tres categorías:"
+
+#: index.docbook:1175
+msgid "TODO: This doesn't make sense: In the first case, we retrieve and use the MBean directly. In the second one, we must give the JNDI name in which the session factory is held before using it. Use <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal>"
+msgstr "Métricas relacionadas al uso general de <literal>Session</literal> usage, tales como número de sesiones abiertas, conexiones JDBC recuperadas, etc,"
+
+#: index.docbook:1180
+msgid "You can (de)activate the monitoring for a <literal>SessionFactory</literal>"
+msgstr "Métricas relacionadas a las entidades, colecciones, consultas, y cachés como un todo. (también conocidas como métricas globales)."
+
+#: index.docbook:1185
+msgid "at configuration time, set <literal>hibernate.generate_statistics</literal> to <literal>false</literal>"
+msgstr "Métricas detalladas relacionadas a una entidad, colección, consulta o región de caché en particular."
+
+#: index.docbook:1192
+msgid "at runtime: <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> or <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>"
+msgstr "Por ejemplo, puedes comprobar el acceso, pérdida, y radio de colocación de entidades, colecciones y consultas en el caché, y el tiempo promedio que necesita una consulta. Ten en cuenta que el número de milisegundos está sujeto a aproximación en Java. Hibernate está pegado a la precisión de la JVM, en algunas plataformas esto podría incuso ser tener sólo una exactitud de 10 segundos."
+
+#: index.docbook:1199
+msgid "Statistics can be reset programatically using the <literal>clear()</literal> method. A summary can be sent to a logger (info level) using the <literal>logSummary()</literal> method."
+msgstr "Se usan getters simples para acceder a las métricas globales (es decir, no pegadas a una entidad, colección, región de caché, etc, en particular). Puedes acceder a las métricas de una entidad, colección, región de caché en particular a través de su nombre, y a través de su representación HQL o SQL para las consultas. Por favor refiérete al Javadoc de la API de <literal>Statistics</literal>, <literal>EntityStatistics</literal>, <literal>CollectionStatistics</literal>, <literal>SecondLevelCacheStatistics</literal>, y <literal>QueryStatistics</literal> para más información. El siguiente código muestra un ejemplo sencillo:"
+
+#: index.docbook:1208
+msgid "Metrics"
+msgstr ""
+ "<![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();\n"
+ "\n"
+ "double queryCacheHitCount = stats.getQueryCacheHitCount();\n"
+ "double queryCacheMissCount = stats.getQueryCacheMissCount();\n"
+ "double queryCacheHitRatio =\n"
+ " queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);\n"
+ "\n"
+ "log.info(\"Query Hit ratio:\" + queryCacheHitRatio);\n"
+ "\n"
+ "EntityStatistics entityStats =\n"
+ " stats.getEntityStatistics( Cat.class.getName() );\n"
+ "long changes =\n"
+ " entityStats.getInsertCount()\n"
+ " + entityStats.getUpdateCount()\n"
+ " + entityStats.getDeleteCount();\n"
+ "log.info(Cat.class.getName() + \" changed \" + changes + \"times\" );]]>"
+
+#: index.docbook:1210
+msgid "Hibernate provides a number of metrics, from very basic to the specialized information only relevant in certain scenarios. All available counters are described in the <literal>Statistics</literal> interface API, in three categories:"
+msgstr "Para trabajar sobre todas las entidades, colecciones, consultas y regiones de cachés, puedes recuperar la lista de nombres de entidades, colecciones, consultas y regiones de cachés con los siguientes métodos: <literal>getQueries()</literal>, <literal>getEntityNames()</literal>, <literal>getCollectionRoleNames()</literal>, y <literal>getSecondLevelCacheRegionNames()</literal>."
+
+#: index.docbook:1217
+msgid "Metrics related to the general <literal>Session</literal> usage, such as number of open sessions, retrieved JDBC connections, etc."
+msgstr ""
+
+#: index.docbook:1223
+msgid "Metrics related to he entities, collections, queries, and caches as a whole (aka global metrics),"
+msgstr ""
+
+#: index.docbook:1229
+msgid "Detailed metrics related to a particular entity, collection, query or cache region."
+msgstr ""
+
+#: index.docbook:1236
+msgid "For exampl,e you can check the cache hit, miss, and put ratio of entities, collections and queries, and the average time a query needs. Beware that the number of milliseconds is subject to approximation in Java. Hibernate is tied to the JVM precision, on some platforms this might even only be accurate to 10 seconds."
+msgstr ""
+
+#: index.docbook:1243
+msgid "Simple getters are used to access the global metrics (i.e. not tied to a particular entity, collection, cache region, etc.). You can access the metrics of a particular entity, collection or cache region through its name, and through its HQL or SQL representation for queries. Please refer to the <literal>Statistics</literal>, <literal>EntityStatistics</literal>, <literal>CollectionStatistics</literal>, <literal>SecondLevelCacheStatistics</literal>, and <literal>QueryStatistics</literal> API Javadoc for more information. The following code shows a simple example:"
+msgstr ""
+
+#: index.docbook:1253
+msgid ""
+ "<![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();\n"
+ "\n"
+ "double queryCacheHitCount = stats.getQueryCacheHitCount();\n"
+ "double queryCacheMissCount = stats.getQueryCacheMissCount();\n"
+ "double queryCacheHitRatio =\n"
+ " queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);\n"
+ "\n"
+ "log.info(\"Query Hit ratio:\" + queryCacheHitRatio);\n"
+ "\n"
+ "EntityStatistics entityStats =\n"
+ " stats.getEntityStatistics( Cat.class.getName() );\n"
+ "long changes =\n"
+ " entityStats.getInsertCount()\n"
+ " + entityStats.getUpdateCount()\n"
+ " + entityStats.getDeleteCount();\n"
+ "log.info(Cat.class.getName() + \" changed \" + changes + \"times\" );]]>"
+msgstr ""
+
+#: index.docbook:1255
+msgid "To work on all entities, collections, queries and region caches, you can retrieve the list of names of entities, collections, queries and region caches with the following methods: <literal>getQueries()</literal>, <literal>getEntityNames()</literal>, <literal>getCollectionRoleNames()</literal>, and <literal>getSecondLevelCacheRegionNames()</literal>."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/persistent_classes.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/persistent_classes.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/persistent_classes.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,625 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Persistent Classes"
+msgstr "Clases Persistentes"
+
+#: index.docbook:7
+msgid "Persistent classes are classes in an application that implement the entities of the business problem (e.g. Customer and Order in an E-commerce application). Not all instances of a persistent class are considered to be in the persistent state - an instance may instead be transient or detached."
+msgstr "Clases presistentes son clases en una aplicación que implementan las entidades del problema de negocio (por ejemplo, Customer y Order en una aplicación de comercio electrónico). No todas las instancias de una clase persistente se considera que estén en el estado persistente, una instancia puede en cambio ser transitoria o estar separada."
+
+#: index.docbook:14
+msgid "Hibernate works best if these classes follow some simple rules, also known as the Plain Old Java Object (POJO) programming model. However, none of these rules are hard requirements. Indeed, Hibernate3 assumes very little about the nature of your persistent objects. You may express a domain model in other ways: using trees of <literal>Map</literal> instances, for example."
+msgstr "Hibernate funciona mejor si las clases siguen algunas simples reglas, también conocidas como el modelo de programación de Viejas Clases Java Planas (Plain Old Java Object o POJO). Sin embargo, ninguna de estas reglas son requerimientos rígidos. En cambio, Hibernate3 asume muy poco acerca de la naturaleza de tus objetos persistentes. Puedes expresar un modelo de dominio en otras formas: usando árboles de instancias de <literal>Map</literal>, por ejemplo."
+
+#: index.docbook:23
+msgid "A simple POJO example"
+msgstr "Un ejemplo simple de POJO"
+
+#: index.docbook:25
+msgid "Most Java applications require a persistent class representing felines."
+msgstr "La mayoría de aplicaciones Java requieren una clase representando felinos."
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ "\n"
+ " private Date birthdate;\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ " private int litterId;\n"
+ "\n"
+ " private Cat mother;\n"
+ " private Set kittens = new HashSet();\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ "\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ "\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " void setLitterId(int id) {\n"
+ " this.litterId = id;\n"
+ " }\n"
+ " public int getLitterId() {\n"
+ " return litterId;\n"
+ " }\n"
+ "\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " \n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kitten.setMother(this);\n"
+ " kitten.setLitterId( kittens.size() ); \n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ "\n"
+ " private Date birthdate;\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ " private int litterId;\n"
+ "\n"
+ " private Cat mother;\n"
+ " private Set kittens = new HashSet();\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ "\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ "\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " void setLitterId(int id) {\n"
+ " this.litterId = id;\n"
+ " }\n"
+ " public int getLitterId() {\n"
+ " return litterId;\n"
+ " }\n"
+ "\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " \n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kitten.setMother(this);\n"
+ " kitten.setLitterId( kittens.size() ); \n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:31
+msgid "There are four main rules to follow here:"
+msgstr "Aquí hay cuatro reglas principales a seguir:"
+
+#: index.docbook:37
+msgid "Implement a no-argument constructor"
+msgstr "Implementa un constructor sin argumentos"
+
+#: index.docbook:39
+msgid "<literal>Cat</literal> has a no-argument constructor. All persistent classes must have a default constructor (which may be non-public) so that Hibernate can instantiate them using <literal>Constructor.newInstance()</literal>. We strongly recommend having a default constructor with at least <emphasis>package</emphasis> visibility for runtime proxy generation in Hibernate."
+msgstr "<literal>Cat</literal> tiene un contructor sin argumentos. Todas las clases persistentes deben tener un constructor por defecto (que puede no ser público) de modo que Hibernate pueda instanciarlas usando <literal>Constructor.newInstance()</literal>. Recomendamos fuertemente tener un constructor por defecto con al menos visibilidad de <emphasis>package</emphasis> para la generación de proxies en tiempo de ejecución en Hibernate."
+
+#: index.docbook:49
+msgid "Provide an identifier property (optional)"
+msgstr "Provee una propiedad identificadora (opcional)"
+
+#: index.docbook:51
+msgid "<literal>Cat</literal> has a property called <literal>id</literal>. This property maps to the primary key column of a database table. The property might have been called anything, and its type might have been any primitive type, any primitive \"wrapper\" type, <literal>java.lang.String</literal> or <literal>java.util.Date</literal>. (If your legacy database table has composite keys, you can even use a user-defined class with properties of these types - see the section on composite identifiers later.)"
+msgstr "<literal>Cat</literal> tiene una propiedad llamada <literal>id</literal>. Esta propiedad mapea a la columna clave primaria de la tabla de base de datos. La propiedad podría llamarse cualquierCosa, y su tipo podría haber sido cualquier tipo primitivo, cualquier tipo de \"envoltura\" primitivo, <literal>java.lang.String</literal> o <literal>java.util.Date</literal>. (Si tu tabla de base de datos heredada tiene claves compuestas, puedes incluso usar una clase definida por el usuario con propiedades de estos tipos, ver la sección sobre identificadores compuestos luego.)"
+
+#: index.docbook:60
+msgid "The identifier property is strictly optional. You can leave them off and let Hibernate keep track of object identifiers internally. We do not recommend this, however."
+msgstr "La propiedad identificadora es estrictamente opcional. Puedes olvidarla y dejar que Hibernate siga internamente la pista de los identificadores del objeto. Sin embargo, no recomendamos esto."
+
+#: index.docbook:65
+msgid "In fact, some functionality is available only to classes which declare an identifier property:"
+msgstr "De hecho, alguna funcionalidad está disponible sólo para clases que declaran una propiedad identificadora:"
+
+#: index.docbook:72
+msgid "Transitive reattachment for detached objects (cascade update or cascade merge) - see"
+msgstr "Reasociación transitiva de objetos separados (actualizaciones o fusiones en cascada) - ver"
+
+#: index.docbook:79
+msgid "Session.saveOrUpdate()"
+msgstr "Session.saveOrUpdate()"
+
+#: index.docbook:84
+msgid "Session.merge()"
+msgstr "Session.merge()"
+
+#: index.docbook:89
+msgid "We recommend you declare consistently-named identifier properties on persistent classes. We further recommend that you use a nullable (ie. non-primitive) type."
+msgstr "Recomendamos que declares propiedades identificadoras nombradas-consistentemente en clases persistentes. Mas aún, recomendamos que uses un tipo nulable (es decir, no primitivo)."
+
+#: index.docbook:96
+msgid "Prefer non-final classes (optional)"
+msgstr "Prefiere las clases no finales (opcional)"
+
+#: index.docbook:97
+msgid "A central feature of Hibernate, <emphasis>proxies</emphasis>, depends upon the persistent class being either non-final, or the implementation of an interface that declares all public methods."
+msgstr "Un aspecto central de Hibernate, <emphasis>proxies</emphasis>, depende de que las clases persistentes sean ya no finales, o sean ya la implementación de una interface que declare todos los métodos públicos."
+
+#: index.docbook:102
+msgid "You can persist <literal>final</literal> classes that do not implement an interface with Hibernate, but you won't be able to use proxies for lazy association fetching - which will limit your options for performance tuning."
+msgstr "Puedes persistir con Hibernate clases <literal>final</literal> que no implementen una interface, pero no serás capaz de usar proxies para recuperación perezosa de asociaciones, lo que limitará tus opciones para afinar el rendimiento."
+
+#: index.docbook:107
+msgid "You should also avoid declaring <literal>public final</literal> methods on the non-final classes. If you want to use a class with a <literal>public final</literal> method, you must explicitly disable proxying by setting <literal>lazy=\"false\"</literal>."
+msgstr "Debes también evitar declarar métodos <literal>public final</literal> en clases non-final. Si quieres usar una clase con un método <literal>public final</literal>, debes deshabilitar explícitamente el uso de proxies estableciendo <literal>lazy=\"false\"</literal>."
+
+#: index.docbook:115
+msgid "Declare accessors and mutators for persistent fields (optional)"
+msgstr "Declara métodos de acceso y modificación para los campos persistentes (opcional)"
+
+#: index.docbook:117
+msgid "<literal>Cat</literal> declares accessor methods for all its persistent fields. Many other ORM tools directly persist instance variables. We believe it is better to provide an indirection between the relational schema and internal data structures of the class. By default, Hibernate persists JavaBeans style properties, and recognizes method names of the form <literal>getFoo</literal>, <literal>isFoo</literal> and <literal>setFoo</literal>. You may switch to direct field access for particular properties, if needed."
+msgstr "<literal>Cat</literal> declara métodos de acceso para todos sus campos persistente. Muchas otras herramientas ORM persisten directamente variables de instancia. Creemos que es mejor proveer una indirección entre el esquema relacional y las estructuras internas de la clase. Por defecto, Hibernate persiste propiedades del estilo JavaBeans, y reconoce nombres de método de la forma <literal>getFoo</literal>, <literal>isFoo</literal> y <literal>setFoo</literal>. Puedes cambiar a acceso directo a campos para propiedades en particular, de ser necesario."
+
+#: index.docbook:127
+msgid "Properties need <emphasis>not</emphasis> be declared public - Hibernate can persist a property with a default, <literal>protected</literal> or <literal>private</literal> get / set pair."
+msgstr "Las propiedades <emphasis>no</emphasis> necesitan ser declaradas públicas. Hibernate puede persistir una propiedad con un par get / set <literal>protected</literal> o <literal>private</literal>."
+
+#: index.docbook:138
+msgid "Implementing inheritance"
+msgstr "Implementando herencia"
+
+#: index.docbook:140
+msgid "A subclass must also observe the first and second rules. It inherits its identifier property from the superclass, <literal>Cat</literal>."
+msgstr "Una subclase puede a su vez observar la primera y segunda regla. Hereda su propiedad identificadora de la superclase, <literal>Cat</literal>."
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "public class DomesticCat extends Cat {\n"
+ " private String name;\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ " protected void setName(String name) {\n"
+ " this.name=name;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "public class DomesticCat extends Cat {\n"
+ " private String name;\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ " protected void setName(String name) {\n"
+ " this.name=name;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:149
+msgid "Implementing <literal>equals()</literal> and <literal>hashCode()</literal>"
+msgstr "Implementando <literal>equals()</literal> y <literal>hashCode()</literal>"
+
+#: index.docbook:151
+msgid "You have to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods if you"
+msgstr "Tienes que sobrescribir los métodos <literal>equals()</literal> y <literal>hashCode()</literal> si :"
+
+#: index.docbook:157
+msgid "intend to put instances of persistent classes in a <literal>Set</literal> (the recommended way to represent many-valued associations) <emphasis>and</emphasis>"
+msgstr "piensas poner instancias de clases persistentes en un <literal>Set</literal> (la forma recomendada de representar asociaciones multivaluadas) <emphasis>y</emphasis>"
+
+#: index.docbook:164
+msgid "intend to use reattachment of detached instances"
+msgstr "piensas usar reasociación de instancias separadas."
+
+#: index.docbook:170
+msgid "Hibernate guarantees equivalence of persistent identity (database row) and Java identity only inside a particular session scope. So as soon as we mix instances retrieved in different sessions, we must implement <literal>equals()</literal> and <literal>hashCode()</literal> if we wish to have meaningful semantics for <literal>Set</literal>s."
+msgstr "Hibernate garantiza la equivalencia de identidad persistente (fila de base de datos) y identidad Java sólo dentro del ámbito de una sesión en particular. De modo que en el momento que mezclamos instancias recuperadas en sesiones diferentes, debemos implementar <literal>equals()</literal> y <literal>hashCode()</literal> si deseamos tener una semántica significativa de <literal>Set</literal>s."
+
+#: index.docbook:178
+msgid "The most obvious way is to implement <literal>equals()</literal>/<literal>hashCode()</literal> by comparing the identifier value of both objects. If the value is the same, both must be the same database row, they are therefore equal (if both are added to a <literal>Set</literal>, we will only have one element in the <literal>Set</literal>). Unfortunately, we can't use that approach with generated identifiers! Hibernate will only assign identifier values to objects that are persistent, a newly created instance will not have any identifier value! Furthermore, if an instance is unsaved and currently in a <literal>Set</literal>, saving it will assign an identifier value to the object. If <literal>equals()</literal> and <literal>hashCode()</literal> are based on the identifier value, the hash code would change, breaking the contract of the <literal>Set</literal>. See the Hibernate website for a full discussion of this problem. Note that this is not a Hibernate issue, but !
normal Java semantics of object identity and equality."
+msgstr "La forma más obvia es implementar <literal>equals()</literal>/<literal>hashCode()</literal> comparando el valor identificador de ambos objetos. Si el valor es el mismo, ambos deben ser la misma fila de base de datos, por lo tanto son iguales (si ambos son agregados a un <literal>Set</literal>, sólo tendremos un elemento en el <literal>Set</literal>). Desafortunadamente, no podemos usar este enfoque con identificadores generados! Hibernate sólo asignará valores identificadores a objetos que son persistentes, una instancia recién creada no tendrá ningún valor identificador! Además, si una instancia no está salvada y está actualmente en un <literal>Set</literal>, salvarla asignará un valor identificador al objeto. Si <literal>equals()</literal> and <literal>hashCode()</literal> están basados en el valor identificador, el código hash podría cambiar, rompiendo el contrato de!
<literal>Set</literal>. Ver el sitio web de Hibernate para una discusión completa de este problema. Observa que esto no es una incidencia de Hibernate, sino la semántica normal de Java de identidad de objeto e igualdad."
+
+#: index.docbook:192
+msgid "We recommend implementing <literal>equals()</literal> and <literal>hashCode()</literal> using <emphasis>Business key equality</emphasis>. Business key equality means that the <literal>equals()</literal> method compares only the properties that form the business key, a key that would identify our instance in the real world (a <emphasis>natural</emphasis> candidate key):"
+msgstr "Recomendamos implementar <literal>equals()</literal> y <literal>hashCode()</literal> usando <emphasis>igualdad de clave de negocio (Business key equality)</emphasis>. Igualdad de clave de negocio significa que el método <literal>equals()</literal> compara sólo las propiedades que forman la clave de negocio, una clave que podría identificar nuestra instancia en el mundo real (una clave candidata <emphasis>natural</emphasis>):"
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[public class Cat {\n"
+ "\n"
+ " ...\n"
+ " public boolean equals(Object other) {\n"
+ " if (this == other) return true;\n"
+ " if ( !(other instanceof Cat) ) return false;\n"
+ "\n"
+ " final Cat cat = (Cat) other;\n"
+ "\n"
+ " if ( !cat.getLitterId().equals( getLitterId() ) ) return false;\n"
+ " if ( !cat.getMother().equals( getMother() ) ) return false;\n"
+ "\n"
+ " return true;\n"
+ " }\n"
+ "\n"
+ " public int hashCode() {\n"
+ " int result;\n"
+ " result = getMother().hashCode();\n"
+ " result = 29 * result + getLitterId();\n"
+ " return result;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Cat {\n"
+ "\n"
+ " ...\n"
+ " public boolean equals(Object other) {\n"
+ " if (this == other) return true;\n"
+ " if ( !(other instanceof Cat) ) return false;\n"
+ "\n"
+ " final Cat cat = (Cat) other;\n"
+ "\n"
+ " if ( !cat.getLitterId().equals( getLitterId() ) ) return false;\n"
+ " if ( !cat.getMother().equals( getMother() ) ) return false;\n"
+ "\n"
+ " return true;\n"
+ " }\n"
+ "\n"
+ " public int hashCode() {\n"
+ " int result;\n"
+ " result = getMother().hashCode();\n"
+ " result = 29 * result + getLitterId();\n"
+ " return result;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:202
+msgid "Note that a business key does not have to be as solid as a database primary key candidate (see <xref linkend=\"transactions-basics-identity\"/>). Immutable or unique properties are usually good candidates for a business key."
+msgstr "Nota que una clave de negocio no tiene que ser tan sólida como una clave primaria candidata de base de datos (ver <xref linkend=\"transactions-basics-identity\"/>). Las propiedades inmutables o únicas son usualmente buenas candidatas para una clave de negocio."
+
+#: index.docbook:212
+msgid "Dynamic models"
+msgstr "Modelos dinámicos"
+
+#: index.docbook:215
+msgid "Note that the following features are currently considered experimental and may change in the near future."
+msgstr "Ten en cuenta que las siguientes funcionalidades están consideradas actualmente experimentales y pueden cambiar en el futuro cercano."
+
+#: index.docbook:219
+msgid "Persistent entities don't necessarily have to be represented as POJO classes or as JavaBean objects at runtime. Hibernate also supports dynamic models (using <literal>Map</literal>s of <literal>Map</literal>s at runtime) and the representation of entities as DOM4J trees. With this approach, you don't write persistent classes, only mapping files."
+msgstr "Las entidades persistentes no necesariamente tienen que estar representadas como clases POJO o como objetos JavaBean en tiempo de ejecución. Hibernate soporta además modelos dinámicos (usando <literal>Map</literal>s de <literal>Map</literal>s en tiempo de ejecución) y la representación de entidades como árboles de DOM4J. Con este enfoque no escribes clases persistentes, sólo ficheros de mapeo."
+
+#: index.docbook:227
+msgid "By default, Hibernate works in normal POJO mode. You may set a default entity representation mode for a particular <literal>SessionFactory</literal> using the <literal>default_entity_mode</literal> configuration option (see <xref linkend=\"configuration-optional-properties\"/>."
+msgstr "Por defecto, Hibernate funciona en modo POJO normal. Puedes establecer una representación de entidad por defecto para una <literal>SessionFactory</literal> en particular usando la opción de configuración <literal>default_entity_mode</literal> (ver <xref linkend=\"configuration-optional-properties\"/>)."
+
+#: index.docbook:234
+msgid "The following examples demonstrates the representation using <literal>Map</literal>s. First, in the mapping file, an <literal>entity-name</literal> has to be declared instead of (or in addition to) a class name:"
+msgstr "Los siguientes ejemplos demuestran la representación usando <literal>Map</literal>s. Primero, en el fichero de mapeo, tiene que declararse un <literal>entity-name</literal> en vez de (o como agregado a) un nombre de clase:"
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class entity-name=\"Customer\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " type=\"long\"\n"
+ " column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <property name=\"address\"\n"
+ " column=\"ADDRESS\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <many-to-one name=\"organization\"\n"
+ " column=\"ORGANIZATION_ID\"\n"
+ " class=\"Organization\"/>\n"
+ "\n"
+ " <bag name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " lazy=\"false\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"CUSTOMER_ID\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ " \n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class entity-name=\"Customer\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " type=\"long\"\n"
+ " column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <property name=\"address\"\n"
+ " column=\"ADDRESS\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <many-to-one name=\"organization\"\n"
+ " column=\"ORGANIZATION_ID\"\n"
+ " class=\"Organization\"/>\n"
+ "\n"
+ " <bag name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " lazy=\"false\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"CUSTOMER_ID\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ " \n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:242
+msgid "Note that even though associations are declared using target class names, the target type of an associations may also be a dynamic entity instead of a POJO."
+msgstr "Ten en cuenta que aunque las asociaciones se declaran usando nombres de clase objetivo, el tipo objetivo de una asociación puede ser además una entidad dinámica en vez de un POJO."
+
+#: index.docbook:249
+msgid "After setting the default entity mode to <literal>dynamic-map</literal> for the <literal>SessionFactory</literal>, we can at runtime work with <literal>Map</literal>s of <literal>Map</literal>s:"
+msgstr "Después de establecer el modo de entidad por defecto a <literal>dynamic-map</literal> para la <literal>SessionFactory</literal>, podemos trabajar en tiempo de ejecución con <literal>Map</literal>s de <literal>Map</literal>s:"
+
+#: index.docbook:255
+msgid ""
+ "<![CDATA[Session s = openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ "Session s = openSession();\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "\n"
+ "// Create an organization\n"
+ "Map foobar = new HashMap();\n"
+ "foobar.put(\"name\", \"Foobar Inc.\");\n"
+ "\n"
+ "// Link both\n"
+ "david.put(\"organization\", foobar);\n"
+ "\n"
+ "// Save both\n"
+ "s.save(\"Customer\", david);\n"
+ "s.save(\"Organization\", foobar);\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();]]>"
+msgstr ""
+ "<![CDATA[Session s = openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ "Session s = openSession();\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "\n"
+ "// Create an organization\n"
+ "Map foobar = new HashMap();\n"
+ "foobar.put(\"name\", \"Foobar Inc.\");\n"
+ "\n"
+ "// Link both\n"
+ "david.put(\"organization\", foobar);\n"
+ "\n"
+ "// Save both\n"
+ "s.save(\"Customer\", david);\n"
+ "s.save(\"Organization\", foobar);\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();]]>"
+
+#: index.docbook:257
+msgid "The advantages of a dynamic mapping are quick turnaround time for prototyping without the need for entity class implementation. However, you lose compile-time type checking and will very likely deal with many exceptions at runtime. Thanks to the Hibernate mapping, the database schema can easily be normalized and sound, allowing to add a proper domain model implementation on top later on."
+msgstr "Las ventajas de un mapeo dinámico es rápido tiempo de ciclo de prototipado sin la necesidad de implementación de clases de entidad. Sin embargo, pierdes chequeo de tipos en tiempo de compilación y muy probablemente tratarás con muchas excepciones en tiempo de ejecución. Gracias al mapeo de Hibernate, el esquema de base de datos puede estar facilmente sano y normalizado, permitiendo agregar una implementación apropiada del modelo de dominio más tarde."
+
+#: index.docbook:265
+msgid "Entity representation modes can also be set on a per <literal>Session</literal> basis:"
+msgstr "Los modos de representación de entidad pueden ser establecidos por <literal>Session</literal>:"
+
+#: index.docbook:270
+msgid ""
+ "<![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "dynamicSession.save(\"Customer\", david);\n"
+ "...\n"
+ "dynamicSession.flush();\n"
+ "dynamicSession.close()\n"
+ "...\n"
+ "// Continue on pojoSession\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "dynamicSession.save(\"Customer\", david);\n"
+ "...\n"
+ "dynamicSession.flush();\n"
+ "dynamicSession.close()\n"
+ "...\n"
+ "// Continue on pojoSession\n"
+ "]]>"
+
+#: index.docbook:273
+msgid "Please note that the call to <literal>getSession()</literal> using an <literal>EntityMode</literal> is on the <literal>Session</literal> API, not the <literal>SessionFactory</literal>. That way, the new <literal>Session</literal> shares the underlying JDBC connection, transaction, and other context information. This means you don't have tocall <literal>flush()</literal> and <literal>close()</literal> on the secondary <literal>Session</literal>, and also leave the transaction and connection handling to the primary unit of work."
+msgstr "Por favor, ten en cuenta que la llamada a <literal>getSession()</literal> usando un <literal>EntityMode</literal> está en la API de <literal>Session</literal>, no en la de <literal>SessionFactory</literal>. De esta forma, la nueva <literal>Session</literal> comparte la conexión JDBC, transacción y otra información de contexto. Esto significa que no tienes que llamar a <literal>flush()</literal> ni a <literal>close()</literal> en la <literal>Session</literal> secundaria, y tembién dejar el manejo de la transacción y de la conexión a la unidad de trabajo primaria."
+
+#: index.docbook:283
+msgid "More information about the XML representation capabilities can be found in <xref linkend=\"xml\"/>."
+msgstr "Puede encontrarse más información sobre las capacidades de representación XML en <xref linkend=\"xml\"/>."
+
+#: index.docbook:291
+msgid "Tuplizers"
+msgstr "PORHACER: Documentar el framework de extensiones del usuario en los paquetes de propiedad y proxies."
+
+#: index.docbook:293
+msgid "<literal>org.hibernate.tuple.Tuplizer</literal>, and its sub-interfaces, are responsible for managing a particular representation of a piece of data, given that representation's <literal>org.hibernate.EntityMode</literal>. If a given piece of data is thought of as a data structure, then a tuplizer is the thing which knows how to create such a data structure and how to extract values from and inject values into such a data structure. For example, for the POJO entity mode, the correpsonding tuplizer knows how create the POJO through its constructor and how to access the POJO properties using the defined property accessors. There are two high-level types of Tuplizers, represented by the <literal>org.hibernate.tuple.entity.EntityTuplizer</literal> and <literal>org.hibernate.tuple.component.ComponentTuplizer</literal> interfaces. <literal>EntityTuplizer</literal>s are responsible for managing the above mentioned contracts in regards to entities, while <literal>ComponentTu!
plizer</literal>s do the same for components."
+msgstr ""
+
+#: index.docbook:308
+msgid "Users may also plug in their own tuplizers. Perhaps you require that a <literal>java.util.Map</literal> implementation other than <literal>java.util.HashMap</literal> be used while in the dynamic-map entity-mode; or perhaps you need to define a different proxy generation strategy than the one used by default. Both would be achieved by defining a custom tuplizer implementation. Tuplizers definitions are attached to the entity or component mapping they are meant to manage. Going back to the example of our customer entity:"
+msgstr ""
+
+#: index.docbook:317
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " <class entity-name=\"Customer\">\n"
+ " <!--\n"
+ " Override the dynamic-map entity-mode\n"
+ " tuplizer for the customer entity\n"
+ " -->\n"
+ " <tuplizer entity-mode=\"dynamic-map\"\n"
+ " class=\"CustomMapTuplizerImpl\"/>\n"
+ "\n"
+ " <id name=\"id\" type=\"long\" column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <!-- other properties -->\n"
+ " ...\n"
+ " </class>\n"
+ "</hibernate-mapping>\n"
+ "\n"
+ "\n"
+ "public class CustomMapTuplizerImpl\n"
+ " extends org.hibernate.tuple.entity.DynamicMapEntityTuplizer {\n"
+ " // override the buildInstantiator() method to plug in our custom map...\n"
+ " protected final Instantiator buildInstantiator(\n"
+ " org.hibernate.mapping.PersistentClass mappingInfo) {\n"
+ " return new CustomMapInstantiator( mappingInfo );\n"
+ " }\n"
+ "\n"
+ " private static final class CustomMapInstantiator\n"
+ " extends org.hibernate.tuple.DynamicMapInstantitor {\n"
+ " // override the generateMap() method to return our custom map...\n"
+ " protected final Map generateMap() {\n"
+ " return new CustomMap();\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:322
+msgid "TODO: Document user-extension framework in the property and proxy packages"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/preface.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/preface.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/preface.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,68 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Preface"
+msgstr "Prefacio"
+
+#: index.docbook:23
+msgid "Working with object-oriented software and a relational database can be cumbersome and time consuming in today's enterprise environments. Hibernate is an object/relational mapping tool for Java environments. The term object/relational mapping (ORM) refers to the technique of mapping a data representation from an object model to a relational data model with a SQL-based schema."
+msgstr "Trabajar con software orientado a objetos y una base de datos relacional puede ser incómodo y consumir tiempo en los entornos de empresa de hoy. Hibernate es una herramienta de mapeo objeto/relacional para entornos Java. El término mapeo objeto/relacional (MOR) hace referencia a la técnica de mapear una representación de datos desde un modelo de objetos a un modelo de datos relacional con un esquema basado en SQL."
+
+#: index.docbook:31
+msgid "Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities and can significantly reduce development time otherwise spent with manual data handling in SQL and JDBC."
+msgstr "Hibernate no sólo se encarga de mapear de clases Java a tablas de base de datos (y de tipos de datos de Java a tipos de datos SQL), sino que también provee facilidades de consulta y recuperación de datos y puede reducir significativamente el tiempo de desarrollo que de otra forma se gasta en el manejo de los datos en SQL y JDBC."
+
+#: index.docbook:38
+msgid "Hibernates goal is to relieve the developer from 95 percent of common data persistence related programming tasks. Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate vendor-specific SQL code and will help with the common task of result set translation from a tabular representation to a graph of objects."
+msgstr "La meta de Hibernate es relevar al desarrollador del 95 por ciento de las tareas comunes relacionadas a la programación de la persistencia de los datos. Hibernate puede no ser la mejor solución para aplicaciones que usan solamente procedimientos almacenados para implementar la lógica de negocio en la base de datos, es mas útil con modelos de dominio orientados a objetos y lógica de negocio en middle-tier basada en Java. Sin embargo, Hibernate ciertamente puede ayudarte a quitar o encapsular código SQL específico de vendedor y ayudará con la tarea común de traducción de resultados desde una representación tabular a un grafo de objetos."
+
+#: index.docbook:48
+msgid "If you are new to Hibernate and Object/Relational Mapping or even Java, please follow these steps:"
+msgstr "Si eres nuevo en Hibernate y lo del Mapeo Objeto/Relacional o incluso en Java, sigue por favor estos pasos:"
+
+#: index.docbook:55
+msgid "Read <xref linkend=\"tutorial\"/> for a tutorial with step-by-step instructions. The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr "Lee <xref linkend=\"quickstart\"/> para un tutorial de 30 minutos, usando Tomcat."
+
+#: index.docbook:63
+msgid "Read <xref linkend=\"architecture\"/> to understand the environments where Hibernate can be used."
+msgstr "Lee <xref linkend=\"architecture\"/> para entender los entornos en los que puede ser usado Hibernate."
+
+#: index.docbook:69
+msgid "Have a look at the <literal>eg/</literal> directory in the Hibernate distribution, it contains a simple standalone application. Copy your JDBC driver to the <literal>lib/</literal> directory and edit <literal>etc/hibernate.properties</literal>, specifying correct values for your database. From a command prompt in the distribution directory, type <literal>ant eg</literal> (using Ant), or under Windows, type <literal>build eg</literal>."
+msgstr "Dale una mirada al directorio <literal>eg/</literal> en la distribución de Hibernate, contiene una aplicación independiente simple. Copia tu driver JDBC al directorio <literal>lib/</literal> y edita <literal>etc/hibernate.properties</literal>, especificando los valores correctos para tu base de datos. Desde línea de comandos en el directorio de la distribución, tipea <literal>ant eg</literal> (usando Ant), o bajo Windows, tipea <literal>build eg</literal>."
+
+#: index.docbook:80
+msgid "Use this reference documentation as your primary source of information. Consider reading <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2) if you need more help with application design or if you prefer a step-by-step tutorial. Also visit http://caveatemptor.hibernate.org and download the example application for Java Persistence with Hibernate."
+msgstr "Usa esta documentación de referencia como tu fuente de información primaria. Ten en consideración leer <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2) si necesitas mas ayuda con el diseño de aplicaciones o si prefieres un tutorial paso a paso. Visita también http://caveatemptor.hibernate.org y descarga la aplicación de ejemplo para Java Persistence with Hibernate."
+
+#: index.docbook:90
+msgid "FAQs are answered on the Hibernate website."
+msgstr "Los FAQs son respondidos en el sitio web de Hibernate."
+
+#: index.docbook:95
+msgid "Third party demos, examples, and tutorials are linked on the Hibernate website."
+msgstr "En el sitio web de Hibernate hay enlaces a demos de terceros, ejemplos y tutoriales."
+
+#: index.docbook:101
+msgid "The Community Area on the Hibernate website is a good resource for design patterns and various integration solutions (Tomcat, JBoss AS, Struts, EJB, etc.)."
+msgstr "El Area de Comunidad en el sitio web de Hibernate es una buena fuente de patrones de diseño y varias soluciones de integración (Tomcat, JBoss, Struts, EJB, etc.)."
+
+#: index.docbook:109
+msgid "If you have questions, use the user forum linked on the Hibernate website. We also provide a JIRA issue trackings system for bug reports and feature requests. If you are interested in the development of Hibernate, join the developer mailing list. If you are interested in translating this documentation into your language, contact us on the developer mailing list."
+msgstr "Si tienes preguntas, usa el foro de usuarios enlazado en el sitio web de Hibernate. También proveemos un sistema de seguimiento JIRA para reportes de defectos y peticiones de nuevas características. Si estas interesado en el desarrollo de Hibernate, únete a la lista de correo de desarrolladores. Si estas interesado en traducir esta documentación a tu lenguaje, contáctanos en la lista de correo de desarrolladores."
+
+#: index.docbook:117
+msgid "Commercial development support, production support, and training for Hibernate is available through JBoss Inc. (see http://www.hibernate.org/SupportTraining/). Hibernate is a Professional Open Source project and a critical component of the JBoss Enterprise Middleware System (JEMS) suite of products."
+msgstr "A través de JBoss Inc. (see http://www.hibernate.org/SupportTraining/) hay disponibilidad de soporte comercial de desarrollo, soporte de producción y entrenamiento en Hibernate. Hibernate es un proyecto de la suite de productos de código abierto JBoss Professional."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/query_criteria.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/query_criteria.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/query_criteria.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,672 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Criteria Queries"
+msgstr "Consultas por Criterios"
+
+#: index.docbook:7
+msgid "Hibernate features an intuitive, extensible criteria query API."
+msgstr "Acompaña a Hibernate una API de consultas por criterios intuitiva y extensible."
+
+#: index.docbook:12
+msgid "Creating a <literal>Criteria</literal> instance"
+msgstr "Creando una instancia de <literal>Criteria</literal>"
+
+#: index.docbook:14
+msgid "The interface <literal>org.hibernate.Criteria</literal> represents a query against a particular persistent class. The <literal>Session</literal> is a factory for <literal>Criteria</literal> instances."
+msgstr "La interface <literal>org.hibernate.Criteria</literal> representa una consulta contra una clase persistente en particular. La <literal>Session</literal> es una fábrica de instancias de <literal>Criteria</literal>."
+
+#: index.docbook:20
+msgid ""
+ "<![CDATA[Criteria crit = sess.createCriteria(Cat.class);\n"
+ "crit.setMaxResults(50);\n"
+ "List cats = crit.list();]]>"
+msgstr ""
+ "<![CDATA[Criteria crit = sess.createCriteria(Cat.class);\n"
+ "crit.setMaxResults(50);\n"
+ "List cats = crit.list();]]>"
+
+#: index.docbook:25
+msgid "Narrowing the result set"
+msgstr "Estrechando el conjunto resultado"
+
+#: index.docbook:27
+msgid "An individual query criterion is an instance of the interface <literal>org.hibernate.criterion.Criterion</literal>. The class <literal>org.hibernate.criterion.Restrictions</literal> defines factory methods for obtaining certain built-in <literal>Criterion</literal> types."
+msgstr "Un criterio individual de consulta es una instancia de la interface <literal>org.hibernate.criterion.Criterion</literal>. La clase <literal>org.hibernate.criterion.Restrictions</literal> define métodos de fábrica para obtener ciertos tipos prefabricados de <literal>Criterion</literal>."
+
+#: index.docbook:35
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.between(\"weight\", minWeight, maxWeight) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.between(\"weight\", minWeight, maxWeight) )\n"
+ " .list();]]>"
+
+#: index.docbook:37
+msgid "Restrictions may be grouped logically."
+msgstr "Las restricciones pueden ser agrupadas lógicamente."
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.or(\n"
+ " Restrictions.eq( \"age\", new Integer(0) ),\n"
+ " Restrictions.isNull(\"age\")\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.or(\n"
+ " Restrictions.eq( \"age\", new Integer(0) ),\n"
+ " Restrictions.isNull(\"age\")\n"
+ " ) )\n"
+ " .list();]]>"
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.in( \"name\", new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( Restrictions.isNull(\"age\") )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(0) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(1) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(2) ) )\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.in( \"name\", new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( Restrictions.isNull(\"age\") )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(0) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(1) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(2) ) )\n"
+ " ) )\n"
+ " .list();]]>"
+
+#: index.docbook:45
+msgid "There are quite a range of built-in criterion types (<literal>Restrictions</literal> subclasses), but one that is especially useful lets you specify SQL directly."
+msgstr "Hay un gran rango de tipos de criterio prefabricados (subclases de <literal>Restrictions</literal>), pero uno que es especialmente útil te deja especificar SQL directamente."
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.sqlRestriction(\"lower({alias}.name) like lower(?)\", \"Fritz%\", Hibernate.STRING) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.sql(\"lower({alias}.name) like lower(?)\", \"Fritz%\", Hibernate.STRING) )\n"
+ " .list();]]>"
+
+#: index.docbook:52
+msgid "The <literal>{alias}</literal> placeholder with be replaced by the row alias of the queried entity."
+msgstr "El sitio <literal>{alias}</literal> será remplazado por el alias de fila de la entidad consultada."
+
+#: index.docbook:57
+msgid "An alternative approach to obtaining a criterion is to get it from a <literal>Property</literal> instance. You can create a <literal>Property</literal> by calling <literal>Property.forName()</literal>."
+msgstr "Un enfoque alternativo para obtener un criterio es tomarlo de una instancia de <literal>Property</literal>. Puedes crear una <literal>Property</literal> llamando a <literal>Property.forName()</literal>."
+
+#: index.docbook:63
+msgid ""
+ "<![CDATA[\n"
+ "Property age = Property.forName(\"age\");\n"
+ "List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( age.isNull() )\n"
+ " .add( age.eq( new Integer(0) ) )\n"
+ " .add( age.eq( new Integer(1) ) )\n"
+ " .add( age.eq( new Integer(2) ) )\n"
+ " ) )\n"
+ " .add( Property.forName(\"name\").in( new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "Property age = Property.forName(\"age\");\n"
+ "List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( age.isNull() )\n"
+ " .add( age.eq( new Integer(0) ) )\n"
+ " .add( age.eq( new Integer(1) ) )\n"
+ " .add( age.eq( new Integer(2) ) )\n"
+ " ) )\n"
+ " .add( Property.forName(\"name\").in( new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .list();]]>"
+
+#: index.docbook:68
+msgid "Ordering the results"
+msgstr "Ordenando los resultados"
+
+#: index.docbook:70
+msgid "You may order the results using <literal>org.hibernate.criterion.Order</literal>."
+msgstr "Puedes ordenar los resultados usando <literal>org.hibernate.criterion.Order</literal>."
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .addOrder( Order.asc(\"name\") )\n"
+ " .addOrder( Order.desc(\"age\") )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .addOrder( Order.asc(\"name\") )\n"
+ " .addOrder( Order.desc(\"age\") )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"name\").like(\"F%\") )\n"
+ " .addOrder( Property.forName(\"name\").asc() )\n"
+ " .addOrder( Property.forName(\"age\").desc() )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"name\").like(\"F%\") )\n"
+ " .addOrder( Property.forName(\"name\").asc() )\n"
+ " .addOrder( Property.forName(\"age\").desc() )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:81
+msgid "Associations"
+msgstr "Asociaciones"
+
+#: index.docbook:83
+msgid "You may easily specify constraints upon related entities by navigating associations using <literal>createCriteria()</literal>."
+msgstr "Puedes especificar fácilmente restricciones sobre las entidades relacionadas al navegar asociaciones usando <literal>createCriteria()</literal>."
+
+#: index.docbook:88
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .createCriteria(\"kittens\")\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .createCriteria(\"kittens\")\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .list();]]>"
+
+#: index.docbook:90
+msgid "note that the second <literal>createCriteria()</literal> returns a new instance of <literal>Criteria</literal>, which refers to the elements of the <literal>kittens</literal> collection."
+msgstr "nota que el segundo <literal>createCriteria()</literal> devuelve una nueva instancia de <literal>Criteria</literal>, que hace referencia a los elementos de la colección <literal>kittens</literal>."
+
+#: index.docbook:96
+msgid "The following, alternate form is useful in certain circumstances."
+msgstr "La siguiente forma alternativa es útil en ciertas circunstancias."
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createAlias(\"kittens\", \"kt\")\n"
+ " .createAlias(\"mate\", \"mt\")\n"
+ " .add( Restrictions.eqProperty(\"kt.name\", \"mt.name\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createAlias(\"kittens\", \"kt\")\n"
+ " .createAlias(\"mate\", \"mt\")\n"
+ " .add( Restrictions.eqProperty(\"kt.name\", \"mt.name\") )\n"
+ " .list();]]>"
+
+#: index.docbook:102
+msgid "(<literal>createAlias()</literal> does not create a new instance of <literal>Criteria</literal>.)"
+msgstr "(<literal>createAlias()</literal> no crea una nueva instancia de <literal>Criteria</literal>.)"
+
+#: index.docbook:107
+msgid "Note that the kittens collections held by the <literal>Cat</literal> instances returned by the previous two queries are <emphasis>not</emphasis> pre-filtered by the criteria! If you wish to retrieve just the kittens that match the criteria, you must use a <literal>ResultTransformer</literal>."
+msgstr "¡Observa que las colecciones de gatitos tenidas por las instancias de <literal>Cat</literal> devueltas por las dos consultas previas <emphasis>no</emphasis> están prefiltradas por los criterios! Si deseas recuperar sólo los gatitos que emparejen los criterios, debes usar <literal>returnMaps()</literal>."
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createCriteria(\"kittens\", \"kt\")\n"
+ " .add( Restrictions.eq(\"name\", \"F%\") )\n"
+ " .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)\n"
+ " .list();\n"
+ "Iterator iter = cats.iterator();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Map map = (Map) iter.next();\n"
+ " Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);\n"
+ " Cat kitten = (Cat) map.get(\"kt\");\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createCriteria(\"kittens\", \"kt\")\n"
+ " .add( Restrictions.eq(\"name\", \"F%\") )\n"
+ " .returnMaps()\n"
+ " .list();\n"
+ "Iterator iter = cats.iterator();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Map map = (Map) iter.next();\n"
+ " Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);\n"
+ " Cat kitten = (Cat) map.get(\"kt\");\n"
+ "}]]>"
+
+#: index.docbook:119
+msgid "Dynamic association fetching"
+msgstr "Recuperación dinámica de asociaciones"
+
+#: index.docbook:121
+msgid "You may specify association fetching semantics at runtime using <literal>setFetchMode()</literal>."
+msgstr "Puedes especificar la semántica de recuperación de asociaciones en tiempo de ejecución usando <literal>setFetchMode()</literal>."
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .setFetchMode(\"mate\", FetchMode.EAGER)\n"
+ " .setFetchMode(\"kittens\", FetchMode.EAGER)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .setFetchMode(\"mate\", FetchMode.EAGER)\n"
+ " .setFetchMode(\"kittens\", FetchMode.EAGER)\n"
+ " .list();]]>"
+
+#: index.docbook:128
+msgid "This query will fetch both <literal>mate</literal> and <literal>kittens</literal> by outer join. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "Esta consulta recuperará tanto <literal>mate</literal> como <literal>kittens</literal> por unión exterior (outer join). Ver <xref linkend=\"performance-fetching\"/> para más información."
+
+#: index.docbook:136
+msgid "Example queries"
+msgstr "Consultas por ejemplos"
+
+#: index.docbook:138
+msgid "The class <literal>org.hibernate.criterion.Example</literal> allows you to construct a query criterion from a given instance."
+msgstr "La clase <literal>org.hibernate.criterion.Example</literal> te permite construir un criterio de consulta a partir de una instancia dada."
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[Cat cat = new Cat();\n"
+ "cat.setSex('F');\n"
+ "cat.setColor(Color.BLACK);\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new Cat();\n"
+ "cat.setSex('F');\n"
+ "cat.setColor(Color.BLACK);\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .list();]]>"
+
+#: index.docbook:145
+msgid "Version properties, identifiers and associations are ignored. By default, null valued properties are excluded."
+msgstr "Las propiedades de versión, los identificadores y las asociaciones son ignorados. Por defecto, las propiedades valuadas a nulo son excluídas."
+
+#: index.docbook:150
+msgid "You can adjust how the <literal>Example</literal> is applied."
+msgstr "Puedes ajustar cómo se aplica el <literal>Example</literal>."
+
+#: index.docbook:154
+msgid ""
+ "<![CDATA[Example example = Example.create(cat)\n"
+ " .excludeZeroes() //exclude zero valued properties\n"
+ " .excludeProperty(\"color\") //exclude the property named \"color\"\n"
+ " .ignoreCase() //perform case insensitive string comparisons\n"
+ " .enableLike(); //use like for string comparisons\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add(example)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Example example = Example.create(cat)\n"
+ " .excludeZeroes() //exclude zero valued properties\n"
+ " .excludeProperty(\"color\") //exclude the property named \"color\"\n"
+ " .ignoreCase() //perform case insensitive string comparisons\n"
+ " .enableLike(); //use like for string comparisons\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add(example)\n"
+ " .list();]]>"
+
+#: index.docbook:156
+msgid "You can even use examples to place criteria upon associated objects."
+msgstr "Puedes incluso usar ejemplos para colocar criterios sobre objetos asociados."
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .createCriteria(\"mate\")\n"
+ " .add( Example.create( cat.getMate() ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .createCriteria(\"mate\")\n"
+ " .add( Example.create( cat.getMate() ) )\n"
+ " .list();]]>"
+
+#: index.docbook:165
+msgid "Projections, aggregation and grouping"
+msgstr "Proyecciones, agregación y agrupamiento"
+
+#: index.docbook:166
+msgid "The class <literal>org.hibernate.criterion.Projections</literal> is a factory for <literal>Projection</literal> instances. We apply a projection to a query by calling <literal>setProjection()</literal>."
+msgstr "La clase <literal>org.hibernate.criterion.Projections</literal> es una fábrica de instancias de <literal>Projection</literal>. Aplicamos una proyección a una consulta llamando a <literal>setProjection()</literal>."
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.rowCount() )\n"
+ " .add( Restrictions.eq(\"color\", Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.rowCount() )\n"
+ " .add( Restrictions.eq(\"color\", Color.BLACK) )\n"
+ " .list();]]>"
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount() )\n"
+ " .add( Projections.avg(\"weight\") )\n"
+ " .add( Projections.max(\"weight\") )\n"
+ " .add( Projections.groupProperty(\"color\") )\n"
+ " )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount() )\n"
+ " .add( Projections.avg(\"weight\") )\n"
+ " .add( Projections.max(\"weight\") )\n"
+ " .add( Projections.groupProperty(\"color\") )\n"
+ " )\n"
+ " .list();]]>"
+
+#: index.docbook:176
+msgid "There is no explicit \"group by\" necessary in a criteria query. Certain projection types are defined to be <emphasis>grouping projections</emphasis>, which also appear in the SQL <literal>group by</literal> clause."
+msgstr "No es necesario ningún \"group by\" explícito en una consulta por criterios. Ciertos tipos de proyecciones son definidos para ser <emphasis>proyecciones agrupadas</emphasis>, que además aparecen en la cláusula SQL <literal>group by</literal>."
+
+#: index.docbook:182
+msgid "An alias may optionally be assigned to a projection, so that the projected value may be referred to in restrictions or orderings. Here are two different ways to do this:"
+msgstr "Puede opcionalmente asignarse un alias a una proyección, de modo que el valor proyectado pueda ser referido en restricciones u ordenamientos. Aquí hay dos formas diferentes de hacer esto:"
+
+#: index.docbook:188
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.alias( Projections.groupProperty(\"color\"), \"colr\" ) )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.alias( Projections.groupProperty(\"color\"), \"colr\" ) )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+
+#: index.docbook:190
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.groupProperty(\"color\").as(\"colr\") )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.groupProperty(\"color\").as(\"colr\") )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+
+#: index.docbook:192
+msgid "The <literal>alias()</literal> and <literal>as()</literal> methods simply wrap a projection instance in another, aliased, instance of <literal>Projection</literal>. As a shortcut, you can assign an alias when you add the projection to a projection list:"
+msgstr "Los métodos <literal>alias()</literal> y <literal>as()</literal> simplemente envuelven una instancia de proyección en otra instancia de <literal>Projection</literal> con alias. Como un atajo, puedes asignar un alias cuando agregas la proyección a una lista de proyecciones:"
+
+#: index.docbook:199
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount(), \"catCountByColor\" )\n"
+ " .add( Projections.avg(\"weight\"), \"avgWeight\" )\n"
+ " .add( Projections.max(\"weight\"), \"maxWeight\" )\n"
+ " .add( Projections.groupProperty(\"color\"), \"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount(), \"catCountByColor\" )\n"
+ " .add( Projections.avg(\"weight\"), \"avgWeight\" )\n"
+ " .add( Projections.max(\"weight\"), \"maxWeight\" )\n"
+ " .add( Projections.groupProperty(\"color\"), \"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+
+#: index.docbook:201
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Domestic.class, \"cat\")\n"
+ " .createAlias(\"kittens\", \"kit\")\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.property(\"cat.name\"), \"catName\" )\n"
+ " .add( Projections.property(\"kit.name\"), \"kitName\" )\n"
+ " )\n"
+ " .addOrder( Order.asc(\"catName\") )\n"
+ " .addOrder( Order.asc(\"kitName\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Domestic.class, \"cat\")\n"
+ " .createAlias(\"kittens\", \"kit\")\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.property(\"cat.name\"), \"catName\" )\n"
+ " .add( Projections.property(\"kit.name\"), \"kitName\" )\n"
+ " )\n"
+ " .addOrder( Order.asc(\"catName\") )\n"
+ " .addOrder( Order.asc(\"kitName\") )\n"
+ " .list();]]>"
+
+#: index.docbook:203
+msgid "You can also use <literal>Property.forName()</literal> to express projections:"
+msgstr "Puedes también usar <literal>Property.forName()</literal> para expresar proyecciones:"
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Property.forName(\"name\") )\n"
+ " .add( Property.forName(\"color\").eq(Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Property.forName(\"name\") )\n"
+ " .add( Property.forName(\"color\").eq(Color.BLACK) )\n"
+ " .list();]]>"
+
+#: index.docbook:209
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount().as(\"catCountByColor\") )\n"
+ " .add( Property.forName(\"weight\").avg().as(\"avgWeight\") )\n"
+ " .add( Property.forName(\"weight\").max().as(\"maxWeight\") )\n"
+ " .add( Property.forName(\"color\").group().as(\"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount().as(\"catCountByColor\") )\n"
+ " .add( Property.forName(\"weight\").avg().as(\"avgWeight\") )\n"
+ " .add( Property.forName(\"weight\").max().as(\"maxWeight\") )\n"
+ " .add( Property.forName(\"color\").group().as(\"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+
+#: index.docbook:214
+msgid "Detached queries and subqueries"
+msgstr "Consultas y subconsultas separadas"
+
+#: index.docbook:215
+msgid "The <literal>DetachedCriteria</literal> class lets you create a query outside the scope of a session, and then later execute it using some arbitrary <literal>Session</literal>."
+msgstr "La clase <literal>DetachedCriteria</literal> te deja crear una consulta fuera del ámbito de una sesión, y entonces ejecutarla luego usando alguna <literal>Session</literal> arbitraria."
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)\n"
+ " .add( Property.forName(\"sex\").eq('F') );\n"
+ " \n"
+ "Session session = ....;\n"
+ "Transaction txn = session.beginTransaction();\n"
+ "List results = query.getExecutableCriteria(session).setMaxResults(100).list();\n"
+ "txn.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)\n"
+ " .add( Property.forName(\"sex\").eq('F') );\n"
+ " \n"
+ "Session session = ....;\n"
+ "Transaction txn = session.beginTransaction();\n"
+ "List results = query.getExecutableCriteria(session).setMaxResults(100).list();\n"
+ "txn.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:222
+msgid "A <literal>DetachedCriteria</literal> may also be used to express a subquery. Criterion instances involving subqueries may be obtained via <literal>Subqueries</literal> or <literal>Property</literal>."
+msgstr "También una <literal>DetachedCriteria</literal> puede usarse para expresar una subconsulta. Las instancias de Criterion implicando subconsultas pueden obtenerse vía <literal>Subqueries</literal> o <literal>Property</literal>."
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\").avg() );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"weight\").gt(avgWeight) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\").avg() );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"weight\").gt(avgWeight) )\n"
+ " .list();]]>"
+
+#: index.docbook:230
+msgid ""
+ "<![CDATA[DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\") );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Subqueries.geAll(\"weight\", weights) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\") );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Subqueries.geAll(\"weight\", weights) )\n"
+ " .list();]]>"
+
+#: index.docbook:232
+msgid "Even correlated subqueries are possible:"
+msgstr "Incluso son posibles las subconsultas correlacionadas:"
+
+#: index.docbook:236
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, \"cat2\")\n"
+ " .setProjection( Property.forName(\"weight\").avg() )\n"
+ " .add( Property.forName(\"cat2.sex\").eqProperty(\"cat.sex\") );\n"
+ "session.createCriteria(Cat.class, \"cat\")\n"
+ " .add( Property.forName(\"weight\").gt(avgWeightForSex) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, \"cat2\")\n"
+ " .setProjection( Property.forName(\"weight\").avg() )\n"
+ " .add( Property.forName(\"cat2.sex\").eqProperty(\"cat.sex\") );\n"
+ "session.createCriteria(Cat.class, \"cat\")\n"
+ " .add( Property.forName(\"weight\").gt(avgWeightForSex) )\n"
+ " .list();]]>"
+
+#: index.docbook:245
+msgid "Queries by natural identifier"
+msgstr "Consultas por identificador natural"
+
+#: index.docbook:247
+msgid "For most queries, including criteria queries, the query cache is not very efficient, because query cache invalidation occurs too frequently. However, there is one special kind of query where we can optimize the cache invalidation algorithm: lookups by a constant natural key. In some applications, this kind of query occurs frequently. The criteria API provides special provision for this use case."
+msgstr "Para la mayoría de consultas, incluyendo las consultas por criterios, el caché de consulta no es muy eficiente, debido a que la invalidación del caché de consulta ocurre demasiado frecuentemente. Sin embargo, hay un tipo especial de consulta donde podemos optimizar el algoritmo de invalidación de caché: búsquedas por una clave natural constante. En algunas aplicaciones, este tipo de consulta, ocurre frecuentemente. La API de criterios brinda especial provisión para este caso de uso."
+
+#: index.docbook:255
+msgid "First, you should map the natural key of your entity using <literal><natural-id></literal>, and enable use of the second-level cache."
+msgstr "Primero, debes mapear la clave natural de tu entidad usando <literal><natural-id></literal>, y habilitar el uso del caché de segundo nivel."
+
+#: index.docbook:260
+msgid ""
+ "<![CDATA[<class name=\"User\">\n"
+ " <cache usage=\"read-write\"/>\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <natural-id>\n"
+ " <property name=\"name\"/>\n"
+ " <property name=\"org\"/>\n"
+ " </natural-id>\n"
+ " <property name=\"password\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"User\">\n"
+ " <cache usage=\"read-write\"/>\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <natural-id>\n"
+ " <property name=\"name\"/>\n"
+ " <property name=\"org\"/>\n"
+ " </natural-id>\n"
+ " <property name=\"password\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:262
+msgid "Note that this functionality is not intended for use with entities with <emphasis>mutable</emphasis> natural keys."
+msgstr "Nota que esta funcionalidad no está pensada para uso con entidades con claves naturales <emphasis>mutable</emphasis>."
+
+#: index.docbook:267
+msgid "Next, enable the Hibernate query cache."
+msgstr "Seguido, habilita el caché de consulta de Hibernate."
+
+#: index.docbook:271
+msgid "Now, <literal>Restrictions.naturalId()</literal> allows us to make use of the more efficient cache algorithm."
+msgstr "Ahora, <literal>Restrictions.naturalId()</literal> nos permite hacer uso de el algoritmo de caché más eficiente."
+
+#: index.docbook:276
+msgid ""
+ "<![CDATA[session.createCriteria(User.class)\n"
+ " .add( Restrictions.naturalId()\n"
+ " .set(\"name\", \"gavin\")\n"
+ " .set(\"org\", \"hb\") \n"
+ " ).setCacheable(true)\n"
+ " .uniqueResult();]]>"
+msgstr ""
+ "<![CDATA[session.createCriteria(User.class)\n"
+ " .add( Restrictions.naturalId()\n"
+ " .set(\"name\", \"gavin\")\n"
+ " .set(\"org\", \"hb\") \n"
+ " ).setCacheable(true)\n"
+ " .uniqueResult();]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/query_hql.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/query_hql.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/query_hql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1510 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "HQL: The Hibernate Query Language"
+msgstr "HQL: El Lenguaje de Consulta de Hibernate"
+
+#: index.docbook:7
+msgid "Hibernate is equipped with an extremely powerful query language that (quite intentionally) looks very much like SQL. But don't be fooled by the syntax; HQL is fully object-oriented, understanding notions like inheritence, polymorphism and association."
+msgstr "Hibernate está equipado con un lenguaje de consulta extremadamente potente que (intencionalmente en absoluto) se parece muchísimo a SQL. Pero no te engañes por la sintaxis; HQL es completamente orientado a objetos, entendiendo nociones como herencia, polimorfismo y asociación."
+
+#: index.docbook:14
+msgid "Case Sensitivity"
+msgstr "Sensibilidad a Mayúsculas"
+
+#: index.docbook:16
+msgid "Queries are case-insensitive, except for names of Java classes and properties. So <literal>SeLeCT</literal> is the same as <literal>sELEct</literal> is the same as <literal>SELECT</literal> but <literal>org.hibernate.eg.FOO</literal> is not <literal>org.hibernate.eg.Foo</literal> and <literal>foo.barSet</literal> is not <literal>foo.BARSET</literal>."
+msgstr "Las consultas son insensibles a mayúsculas, excepto para nombres de clases Java y propiedades. De modo que <literal>SeLeCT</literal> es lo mismo que <literal>sELEct</literal> e igual a <literal>SELECT</literal>, pero <literal>org.hibernate.eg.FOO</literal> no lo es a <literal>org.hibernate.eg.Foo</literal> y <literal>foo.barSet</literal> no es igual a <literal>foo.BARSET</literal>."
+
+#: index.docbook:27
+msgid "This manual uses lowercase HQL keywords. Some users find queries with uppercase keywords more readable, but we find this convention ugly when embedded in Java code."
+msgstr "Este manual usa palabras clave HQL en minúsculas. Algunos usuarios encuentran las consultas con palabras clave en mayúsculas más leíbles, pero encontramos esta convención fea cuando se encaja en código Java."
+
+#: index.docbook:35
+msgid "The from clause"
+msgstr "La cláusula from"
+
+#: index.docbook:37
+msgid "The simplest possible Hibernate query is of the form:"
+msgstr "La consulta más simple posible de Hibernate es de la forma:"
+
+#: index.docbook:41
+msgid "<![CDATA[from eg.Cat]]>"
+msgstr "<![CDATA[from eg.Cat]]>"
+
+#: index.docbook:43
+msgid "which simply returns all instances of the class <literal>eg.Cat</literal>. We don't usually need to qualify the class name, since <literal>auto-import</literal> is the default. So we almost always just write:"
+msgstr "que simplemente devuelve todas las instancias de la clase <literal>eg.Cat</literal>. Usualmente no necesitamos cualificar el nombre de la clase, ya que <literal>auto-import</literal> está por defecto. De modo que casi siempre escribimos solamente:"
+
+#: index.docbook:49
+msgid "<![CDATA[from Cat]]>"
+msgstr "<![CDATA[from Cat]]>"
+
+#: index.docbook:51
+msgid "Most of the time, you will need to assign an <emphasis>alias</emphasis>, since you will want to refer to the <literal>Cat</literal> in other parts of the query."
+msgstr "La mayoría del tiempo, necesitarás asignar un <emphasis>alias</emphasis>, ya que querrás referirte al <literal>Cat</literal> en otras partes de la consulta."
+
+#: index.docbook:57, index.docbook:372
+msgid "<![CDATA[from Cat as cat]]>"
+msgstr "<![CDATA[from Cat as cat]]>"
+
+#: index.docbook:59
+msgid "This query assigns the alias <literal>cat</literal> to <literal>Cat</literal> instances, so we could use that alias later in the query. The <literal>as</literal> keyword is optional; we could also write:"
+msgstr "Esta consulta asigna el alias <literal>cat</literal> a las instancias de <literal>Cat</literal>, de modo que podríamos usar ese alias luego en la consulta. La palabra clave <literal>as</literal> es opcional; también podríamos escribir:"
+
+#: index.docbook:65
+msgid "<![CDATA[from Cat cat]]>"
+msgstr "<![CDATA[from Cat cat]]>"
+
+#: index.docbook:67
+msgid "Multiple classes may appear, resulting in a cartesian product or \"cross\" join."
+msgstr "Pueden aparecer múltiples clases, resultando en un producto cartesiano o unión \"cruzada\" (cross join)."
+
+#: index.docbook:71
+msgid "<![CDATA[from Formula, Parameter]]>"
+msgstr "<![CDATA[from Formula, Parameter]]>"
+
+#: index.docbook:72
+msgid "<![CDATA[from Formula as form, Parameter as param]]>"
+msgstr "<![CDATA[from Formula as form, Parameter as param]]>"
+
+#: index.docbook:74
+msgid "It is considered good practice to name query aliases using an initial lowercase, consistent with Java naming standards for local variables (eg. <literal>domesticCat</literal>)."
+msgstr "Se considera buena práctica el nombrar los alias de consulta usando una inicial en minúsculas, consistente con los estándares de nombrado de Java para variables locales (por ejemplo, <literal>domesticCat</literal>)."
+
+#: index.docbook:83
+msgid "Associations and joins"
+msgstr "Asociaciones y uniones (joins)"
+
+#: index.docbook:85
+msgid "We may also assign aliases to associated entities, or even to elements of a collection of values, using a <literal>join</literal>."
+msgstr "Podemos también asignar aliases a entidades asociadas, e incluso a elementos de una colección de valores, usando una <literal>join</literal>."
+
+#: index.docbook:90
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join cat.mate as mate\n"
+ " left outer join cat.kittens as kitten]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ " inner join cat.mate as mate\n"
+ " left outer join cat.kittens as kitten]]>"
+
+#: index.docbook:92
+msgid "<![CDATA[from Cat as cat left join cat.mate.kittens as kittens]]>"
+msgstr "<![CDATA[from Cat as cat left join cat.mate.kittens as kittens]]>"
+
+#: index.docbook:94
+msgid "<![CDATA[from Formula form full join form.parameter param]]>"
+msgstr "<![CDATA[from Formula form full join form.parameter param]]>"
+
+#: index.docbook:96
+msgid "The supported join types are borrowed from ANSI SQL"
+msgstr "Los tipos de join soportados son prestados de ANSI SQL"
+
+#: index.docbook:103
+msgid "inner join"
+msgstr "inner join"
+
+#: index.docbook:108
+msgid "left outer join"
+msgstr "left outer join"
+
+#: index.docbook:113
+msgid "right outer join"
+msgstr "right outer join"
+
+#: index.docbook:117
+msgid "<literal>full join</literal> (not usually useful)"
+msgstr "<literal>full join</literal> (no útil usualmente)"
+
+#: index.docbook:123
+msgid "The <literal>inner join</literal>, <literal>left outer join</literal> and <literal>right outer join</literal> constructs may be abbreviated."
+msgstr "Las construcciones <literal>inner join</literal>, <literal>left outer join</literal> y <literal>right outer join</literal> pueden ser abreviadas."
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " join cat.mate as mate\n"
+ " left join cat.kittens as kitten]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ " join cat.mate as mate\n"
+ " left join cat.kittens as kitten]]>"
+
+#: index.docbook:130
+msgid "You may supply extra join conditions using the HQL <literal>with</literal> keyword."
+msgstr "Puedes proveer condiciones de unión extra usando la palabra clave <literal>with</literal> de HQL."
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " left join cat.kittens as kitten\n"
+ " with kitten.bodyWeight > 10.0]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ " left join cat.kittens as kitten \n"
+ " with kitten.bodyWeight > 10.0]]>"
+
+#: index.docbook:137
+msgid "In addition, a \"fetch\" join allows associations or collections of values to be initialized along with their parent objects, using a single select. This is particularly useful in the case of a collection. It effectively overrides the outer join and lazy declarations of the mapping file for associations and collections. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "En adición, un \"fetch\" join permite a las asociaciones o colecciones de valores ser inicializadas junto a sus objetos padres, usando una sola selección. Esto es particularmente útil en el case de una colección. Efectivamente sobrescribe el outer join y las declaraciones perezosas (lazy) del fichero de mapeo para asociaciones y colecciones. Ver <xref linkend=\"performance-fetching\"/> para más información."
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens]]>"
+
+#: index.docbook:147
+msgid "A fetch join does not usually need to assign an alias, because the associated objects should not be used in the <literal>where</literal> clause (or any other clause). Also, the associated objects are not returned directly in the query results. Instead, they may be accessed via the parent object. The only reason we might need an alias is if we are recursively join fetching a further collection:"
+msgstr "Usualmente a un fetch join no se necesita asignársele un alias, porque los objetos asociados no deben ser usados en la cláusula <literal>where</literal> (ni en cualquier otra cláusula). Además, los objetos asociados no son devueltos directamente en los resultados de consulta. En cambio, pueden ser accedidos vía el objeto padre. La única razón por la que necesitaríamos un alias es estamos uniendo recursivamente otra colección:"
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens child\n"
+ " left join fetch child.kittens]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens child\n"
+ " left join fetch child.kittens]]>"
+
+#: index.docbook:157
+msgid "Note that the <literal>fetch</literal> construct may not be used in queries called using <literal>iterate()</literal> (though <literal>scroll()</literal> can be used). Nor should <literal>fetch</literal> be used together with <literal>setMaxResults()</literal> or <literal>setFirstResult()</literal> as these operations are based on the result rows, which usually contain duplicates for eager collection fetching, hence, the number of rows is not what you'd expect. Nor may <literal>fetch</literal> be used together with an ad hoc <literal>with</literal> condition. It is possible to create a cartesian product by join fetching more than one collection in a query, so take care in this case. Join fetching multiple collection roles also sometimes gives unexpected results for bag mappings, so be careful about how you formulate your queries in this case. Finally, note that <literal>full join fetch</literal> and <literal>right join fetch</literal> are not meaningful."
+msgstr "Nota que la construcción <literal>fetch</literal> no puede usarse en consultas llamadas usando <literal>scroll()</literal> o <literal>iterate()</literal>. Ni debe usarse <literal>fetch</literal> junto con <literal>setMaxResults()</literal> o <literal>setFirstResult()</literal>. Tampoco puede usarse <literal>fetch</literal> junto a una condición <literal>with</literal> ad hoc. Es posible crear un producto cartesiano trayendo por join más de una colección en una colección, así que ten cuidado en este caso. Traer por join múltiples roles de colección también da a veces resultados inesperados para mapeos de bag, así que sé cuidadoso sobre cómo formular tus consultas en este caso. Finalmente, nota que <literal>full join fetch</literal> y <literal>right join fetch</literal> no son significativos."
+
+#: index.docbook:172
+msgid "If you are using property-level lazy fetching (with bytecode instrumentation), it is possible to force Hibernate to fetch the lazy properties immediately (in the first query) using <literal>fetch all properties</literal>."
+msgstr "Si estás usando recuperación perezosa a nivel de propiedad (con instrumentación de bytecode), es posible forzar a Hibernate a traer las propiedades perezosas inmediatamente (en la primera consulta) usando <literal>fetch all properties</literal>."
+
+#: index.docbook:178
+msgid "<![CDATA[from Document fetch all properties order by name]]>"
+msgstr "<![CDATA[from Document fetch all properties order by name]]>"
+
+#: index.docbook:179
+msgid "<![CDATA[from Document doc fetch all properties where lower(doc.name) like '%cats%']]>"
+msgstr "<![CDATA[from Document doc fetch all properties where lower(doc.name) like '%cats%']]>"
+
+#: index.docbook:184
+msgid "Forms of join syntax"
+msgstr "La cláusula select"
+
+#: index.docbook:186
+msgid "HQL supports two forms of association joining: <literal>implicit</literal> and <literal>explicit</literal>."
+msgstr "La cláusula <literal>select</literal> escoge qué objetos y propiedades devolver in el conjunto resultado de la consulta. Considera:"
+
+#: index.docbook:190
+msgid "The queries shown in the previous section all use the <literal>explicit</literal> form where the join keyword is explicitly used in the from clause. This is the recommended form."
+msgstr ""
+ "<![CDATA[select mate \n"
+ "from Cat as cat \n"
+ " inner join cat.mate as mate]]>"
+
+#: index.docbook:195
+msgid "The <literal>implicit</literal> form does not use the join keyword. Instead, the associations are \"dereferenced\" using dot-notation. <literal>implicit</literal> joins can appear in any of the HQL clauses. <literal>implicit</literal> join result in inner joins in the resulting SQL statement."
+msgstr "La consulta seleccionará <literal>mate</literal>s de otros <literal>Cat</literal>s. Realmente, puedes expresar esta consulta en un forma más compacta como:"
+
+#: index.docbook:202
+msgid "<![CDATA[from Cat as cat where cat.mate.name like '%s%']]>"
+msgstr "<![CDATA[select cat.mate from Cat cat]]>"
+
+#: index.docbook:206
+msgid "Refering to identifier property"
+msgstr "Las consultas pueden devolver propiedades de cualquier tipo de valor incluyendo propiedades de tipo componente:"
+
+#: index.docbook:208
+msgid "There are, generally speaking, 2 ways to refer to an entity's identifier property:"
+msgstr ""
+ "<![CDATA[select cat.name from DomesticCat cat\n"
+ "where cat.name like 'fri%']]>"
+
+#: index.docbook:213
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the identifier property of an entity <emphasis>provided that entity does not define a non-identifier property named id</emphasis>."
+msgstr "<![CDATA[select cust.name.firstName from Customer as cust]]>"
+
+#: index.docbook:220
+msgid "If the entity defines a named identifier property, you may use that property name."
+msgstr "Las consultas pueden devolver múltiples objetos y/o propiedades como un array de tipo <literal>Object[]</literal>,"
+
+#: index.docbook:226
+msgid "References to composite identifier properties follow the same naming rules. If the entity has a non-identifier property named id, the composite identifier property can only be referenced by its defined named; otherwise, the special <literal>id</literal> property can be used to rerference the identifier property."
+msgstr ""
+ "<![CDATA[select mother, offspr, mate.name \n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+
+#: index.docbook:233
+msgid "Note: this has changed significantly starting in version 3.2.2. In previous versions, <literal>id</literal> <emphasis>always</emphasis> referred to the identifier property no matter what its actual name. A ramification of that decision was that non-identifier properties named <literal>id</literal> could never be referenced in Hibernate queries."
+msgstr "o como una <literal>List</literal>,"
+
+#: index.docbook:242
+msgid "The select clause"
+msgstr ""
+ "<![CDATA[select new list(mother, offspr, mate.name)\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+
+#: index.docbook:244
+msgid "The <literal>select</literal> clause picks which objects and properties to return in the query result set. Consider:"
+msgstr "o como un objeto real Java de tipo seguro,"
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[select mate\n"
+ "from Cat as cat\n"
+ " inner join cat.mate as mate]]>"
+msgstr ""
+ "<![CDATA[select new Family(mother, mate, offspr)\n"
+ "from DomesticCat as mother\n"
+ " join mother.mate as mate\n"
+ " left join mother.kittens as offspr]]>"
+
+#: index.docbook:251
+msgid "The query will select <literal>mate</literal>s of other <literal>Cat</literal>s. Actually, you may express this query more compactly as:"
+msgstr "asumiendo que la clase <literal>Family</literal> tiene un constructor apropiado."
+
+#: index.docbook:256
+msgid "<![CDATA[select cat.mate from Cat cat]]>"
+msgstr "Puedes asignar aliases para seleccionar expresiones usando <literal>as</literal>:"
+
+#: index.docbook:258
+msgid "Queries may return properties of any value type including properties of component type:"
+msgstr ""
+ "<![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n\n"
+ "from Cat cat]]>"
+
+#: index.docbook:262
+msgid ""
+ "<![CDATA[select cat.name from DomesticCat cat\n"
+ "where cat.name like 'fri%']]>"
+msgstr "Esto es lo más útil cuando se usa junto con <literal>select new map</literal>:"
+
+#: index.docbook:264
+msgid "<![CDATA[select cust.name.firstName from Customer as cust]]>"
+msgstr ""
+ "<![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )\n"
+ "from Cat cat]]>"
+
+#: index.docbook:266
+msgid "Queries may return multiple objects and/or properties as an array of type <literal>Object[]</literal>,"
+msgstr "Esta consulta devuelve un <literal>Map</literal> de aliases a valores seleccionados."
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[select mother, offspr, mate.name\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr "Funciones de agregación"
+
+#: index.docbook:273
+msgid "or as a <literal>List</literal>,"
+msgstr "Las consultas HQL pueden incluso devolver resultados de funciones de agregación sobre propiedades:"
+
+#: index.docbook:277
+msgid ""
+ "<![CDATA[select new list(mother, offspr, mate.name)\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr ""
+ "<![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)\n"
+ "from Cat cat]]>"
+
+#: index.docbook:279
+msgid "or as an actual typesafe Java object,"
+msgstr "Las funciones de agregación soportadas son"
+
+#: index.docbook:283
+msgid ""
+ "<![CDATA[select new Family(mother, mate, offspr)\n"
+ "from DomesticCat as mother\n"
+ " join mother.mate as mate\n"
+ " left join mother.kittens as offspr]]>"
+msgstr "avg(...), sum(...), min(...), max(...)"
+
+#: index.docbook:285
+msgid "assuming that the class <literal>Family</literal> has an appropriate constructor."
+msgstr "count(*)"
+
+#: index.docbook:289
+msgid "You may assign aliases to selected expressions using <literal>as</literal>:"
+msgstr "count(...), count(distinct ...), count(all...)"
+
+#: index.docbook:293
+msgid ""
+ "<![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n\n"
+ "from Cat cat]]>"
+msgstr "Puedes usar operadores aritméticos, concatenación, y funciones SQL reconocidas en la cláusula select:"
+
+#: index.docbook:295
+msgid "This is most useful when used together with <literal>select new map</literal>:"
+msgstr ""
+ "<![CDATA[select cat.weight + sum(kitten.weight) \n"
+ "from Cat cat \n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.weight]]>"
+
+#: index.docbook:299
+msgid ""
+ "<![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )\n"
+ "from Cat cat]]>"
+msgstr "<![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]>"
+
+#: index.docbook:301
+msgid "This query returns a <literal>Map</literal> from aliases to selected values."
+msgstr "Las palabras clave <literal>distinct</literal> y <literal>all</literal> pueden ser usadas y tienen las misma semántica que en SQL."
+
+#: index.docbook:308
+msgid "Aggregate functions"
+msgstr ""
+ "<![CDATA[select distinct cat.name from Cat cat\n"
+ "\n"
+ "select count(distinct cat.name), count(cat) from Cat cat]]>"
+
+#: index.docbook:310
+msgid "HQL queries may even return the results of aggregate functions on properties:"
+msgstr "Consultas polimórficas"
+
+#: index.docbook:314
+msgid ""
+ "<![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)\n"
+ "from Cat cat]]>"
+msgstr "Una consulta como:"
+
+#: index.docbook:325
+msgid "The supported aggregate functions are"
+msgstr "<![CDATA[from Cat as cat]]>"
+
+#: index.docbook:332
+msgid "avg(...), sum(...), min(...), max(...)"
+msgstr "devuelve instancias no sólo de <literal>Cat</literal>, sino también de subclases como <literal>DomesticCat</literal>. Las consultas de Hibernate pueden mencionar <emphasis>cualquier</emphasis> clase o interface Java en la cláusula <literal>from</literal>. La consulta devolverá instancias de todas las clases persistentes que extiendan esa clase o implementen la interface. La siguiente consulta devolvería todos los objetos persistentes."
+
+#: index.docbook:337
+msgid "count(*)"
+msgstr "<![CDATA[from java.lang.Object o]]>"
+
+#: index.docbook:342
+msgid "count(...), count(distinct ...), count(all...)"
+msgstr "La interface <literal>Named</literal> podría ser implementada por varias clases persistentes:"
+
+#: index.docbook:347
+msgid "You may use arithmetic operators, concatenation, and recognized SQL functions in the select clause:"
+msgstr "<![CDATA[from Named n, Named m where n.name = m.name]]>"
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[select cat.weight + sum(kitten.weight)\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.weight]]>"
+msgstr "Nota que estas dos últimas consultas requerirán más de un <literal>SELECT</literal> SQL. Esto significa que la cláusula <literal>order by</literal> no ordenará correctamente todo el conjunto resultado. (Significa además que no puedes llamar estas consulta usando <literal>Query.scroll()</literal>.)"
+
+#: index.docbook:354
+msgid "<![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]>"
+msgstr "La cláusula where"
+
+#: index.docbook:356
+msgid "The <literal>distinct</literal> and <literal>all</literal> keywords may be used and have the same semantics as in SQL."
+msgstr "La cláusula where te permite estrechar la lista de instancias devueltas. Si no existe ningún alias. puedes referirte a las propiedades por nombre:"
+
+#: index.docbook:361
+msgid ""
+ "<![CDATA[select distinct cat.name from Cat cat\n"
+ "\n"
+ "select count(distinct cat.name), count(cat) from Cat cat]]>"
+msgstr "<![CDATA[from Cat where name='Fritz']]>"
+
+#: index.docbook:366
+msgid "Polymorphic queries"
+msgstr "Si existe un alias, usan un nombre cualificado de propiedad:"
+
+#: index.docbook:368
+msgid "A query like:"
+msgstr "<![CDATA[from Cat as cat where cat.name='Fritz']]>"
+
+#: index.docbook:374
+msgid "returns instances not only of <literal>Cat</literal>, but also of subclasses like <literal>DomesticCat</literal>. Hibernate queries may name <emphasis>any</emphasis> Java class or interface in the <literal>from</literal> clause. The query will return instances of all persistent classes that extend that class or implement the interface. The following query would return all persistent objects:"
+msgstr ""
+ "<![CDATA[select foo \n"
+ "from Foo foo, Bar bar\n"
+ "where foo.startDate = bar.date]]>"
+
+#: index.docbook:382
+msgid "<![CDATA[from java.lang.Object o]]>"
+msgstr "devolverá todas las instancias de <literal>Foo</literal> para las cuales exista una instancia de <literal>bar</literal> con una propiedad <literal>date</literal> igual a la propiedad <literal>startDate</literal> del <literal>Foo</literal>. Las expresiones de ruta compuestas hacen la cláusula <literal>where</literal> extremadamente potente. Considera:"
+
+#: index.docbook:384
+msgid "The interface <literal>Named</literal> might be implemented by various persistent classes:"
+msgstr "<![CDATA[from Cat cat where cat.mate.name is not null]]>"
+
+#: index.docbook:389
+msgid "<![CDATA[from Named n, Named m where n.name = m.name]]>"
+msgstr "Esta consulta se traduce en una consulta SQL con una unión de tabla (interna). Si fueses a escribir algo como"
+
+#: index.docbook:391
+msgid "Note that these last two queries will require more than one SQL <literal>SELECT</literal>. This means that the <literal>order by</literal> clause does not correctly order the whole result set. (It also means you can't call these queries using <literal>Query.scroll()</literal>.)"
+msgstr ""
+ "<![CDATA[from Foo foo \n"
+ "where foo.bar.baz.customer.address.city is not null]]>"
+
+#: index.docbook:400
+msgid "The where clause"
+msgstr "terminarías con una consulta que requeriría cuatro uniones de tablas en SQL."
+
+#: index.docbook:402
+msgid "The <literal>where</literal> clause allows you to narrow the list of instances returned. If no alias exists, you may refer to properties by name:"
+msgstr "El operador <literal>=</literal> puede ser usado para comparar no sólo propiedades, sino también instancias:"
+
+#: index.docbook:407
+msgid "<![CDATA[from Cat where name='Fritz']]>"
+msgstr "<![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]>"
+
+#: index.docbook:409
+msgid "If there is an alias, use a qualified property name:"
+msgstr ""
+ "<![CDATA[select cat, mate \n"
+ "from Cat cat, Cat mate\n"
+ "where cat.mate = mate]]>"
+
+#: index.docbook:413
+msgid "<![CDATA[from Cat as cat where cat.name='Fritz']]>"
+msgstr "La propiedad especial (en minúsculas) <literal>id</literal> puede ser usada para referenciar el identificador único de un objeto. (También puedes usar su nombre de propiedad.)"
+
+#: index.docbook:415
+msgid "returns instances of <literal>Cat</literal> named 'Fritz'."
+msgstr ""
+ "<![CDATA[from Cat as cat where cat.id = 123\n"
+ "\n"
+ "from Cat as cat where cat.mate.id = 69]]>"
+
+#: index.docbook:419
+msgid ""
+ "<![CDATA[select foo\n"
+ "from Foo foo, Bar bar\n"
+ "where foo.startDate = bar.date]]>"
+msgstr "La segunda consulta es eficiente. ¡No se requiere ninguna unión de tablas!"
+
+#: index.docbook:421
+msgid "will return all instances of <literal>Foo</literal> for which there exists an instance of <literal>bar</literal> with a <literal>date</literal> property equal to the <literal>startDate</literal> property of the <literal>Foo</literal>. Compound path expressions make the <literal>where</literal> clause extremely powerful. Consider:"
+msgstr "También pueden ser usadas las propiedades de identificadores compuestos. Supón que <literal>Person</literal> tiene un identificador compuesto consistente en <literal>country</literal> y <literal>medicareNumber</literal>."
+
+#: index.docbook:430
+msgid "<![CDATA[from Cat cat where cat.mate.name is not null]]>"
+msgstr ""
+ "<![CDATA[from bank.Person person\n"
+ "where person.id.country = 'AU' \n"
+ " and person.id.medicareNumber = 123456]]>"
+
+#: index.docbook:432
+msgid "This query translates to an SQL query with a table (inner) join. If you were to write something like"
+msgstr ""
+ "<![CDATA[from bank.Account account\n"
+ "where account.owner.id.country = 'AU' \n"
+ " and account.owner.id.medicareNumber = 123456]]>"
+
+#: index.docbook:437
+msgid ""
+ "<![CDATA[from Foo foo\n"
+ "where foo.bar.baz.customer.address.city is not null]]>"
+msgstr "Una vez más, la segunda consulta no requiere ninguna unión de tablas."
+
+#: index.docbook:439
+msgid "you would end up with a query that would require four table joins in SQL."
+msgstr "Asimismo, la propiedad especial <literal>class</literal> acccede al valor discriminador de una instancia en el caso de persistencia polimórfica. Un nombre de clase Java embebido en la cláusula where será traducido a su valor discriminador."
+
+#: index.docbook:443
+msgid "The <literal>=</literal> operator may be used to compare not only properties, but also instances:"
+msgstr "<![CDATA[from Cat cat where cat.class = DomesticCat]]>"
+
+#: index.docbook:448
+msgid "<![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]>"
+msgstr "Puedes también especificar propiedades de componentes o tipos compuestos de usuario (y de componentes de componentes, etc). Nunca intentes usar una expresión de ruta que termine en una propiedad de tipo componente (al contrario de una propiedad de un componente). Por ejemplo, si <literal>store.owner</literal> es una entidad con un componente <literal>address</literal>"
+
+#: index.docbook:450
+msgid ""
+ "<![CDATA[select cat, mate\n"
+ "from Cat cat, Cat mate\n"
+ "where cat.mate = mate]]>"
+msgstr ""
+ "<![CDATA[store.owner.address.city // okay\n"
+ "store.owner.address // error!]]>"
+
+#: index.docbook:452
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the unique identifier of an object. See <xref linkend=\"queryhql-identifier-property\"/> for more information."
+msgstr "Un tipo \"any\" tiene las propiedades especiales <literal>id</literal> y <literal>class</literal>, permiténdonos expresar un join en la siguiente forma (donde <literal>AuditLog.item</literal> es una propiedad mapeada con <literal><any></literal>)."
+
+#: index.docbook:458
+msgid ""
+ "<![CDATA[from Cat as cat where cat.id = 123\n"
+ "\n"
+ "from Cat as cat where cat.mate.id = 69]]>"
+msgstr ""
+ "<![CDATA[from AuditLog log, Payment payment \n"
+ "where log.item.class = 'Payment' and log.item.id = payment.id]]>"
+
+#: index.docbook:460
+msgid "The second query is efficient. No table join is required!"
+msgstr "Nota que <literal>log.item.class</literal> y <literal>payment.class</literal> harían referencia a los valores de columnas de base de datos completamente diferentes en la consulta anterior."
+
+#: index.docbook:464
+msgid "Properties of composite identifiers may also be used. Suppose <literal>Person</literal> has a composite identifier consisting of <literal>country</literal> and <literal>medicareNumber</literal>. Again, see <xref linkend=\"queryhql-identifier-property\"/> for more information regarding referencing identifier properties."
+msgstr "Expresiones"
+
+#: index.docbook:471
+msgid ""
+ "<![CDATA[from bank.Person person\n"
+ "where person.id.country = 'AU'\n"
+ " and person.id.medicareNumber = 123456]]>"
+msgstr "Las expresiones permitidas en la cláusula <literal>where</literal> incluyen la mayoría del tipo de cosas que podrías escribir en SQL:"
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[from bank.Account account\n"
+ "where account.owner.id.country = 'AU'\n"
+ " and account.owner.id.medicareNumber = 123456]]>"
+msgstr "operadores matemáticos <literal>+, -, *, /</literal>"
+
+#: index.docbook:475
+msgid "Once again, the second query requires no table join."
+msgstr "operadores de comparación binarios <literal>=, >=, <=, <>, !=, like</literal>"
+
+#: index.docbook:479
+msgid "Likewise, the special property <literal>class</literal> accesses the discriminator value of an instance in the case of polymorphic persistence. A Java class name embedded in the where clause will be translated to its discriminator value."
+msgstr "operadores lógicos <literal>and, or, not</literal>"
+
+#: index.docbook:485
+msgid "<![CDATA[from Cat cat where cat.class = DomesticCat]]>"
+msgstr "Paréntesis <literal>( )</literal>, indicando agrupación"
+
+#: index.docbook:487
+msgid "You may also use components or composite user types, or properties of said component types. See <xref linkend=\"queryhql-coomponents\"/> for more details."
+msgstr "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> y <literal>not member of</literal>"
+
+#: index.docbook:492
+msgid "An \"any\" type has the special properties <literal>id</literal> and <literal>class</literal>, allowing us to express a join in the following way (where <literal>AuditLog.item</literal> is a property mapped with <literal><any></literal>)."
+msgstr "Caso \"simple\", <literal>case ... when ... then ... else ... end</literal>, y caso \"buscado\", <literal>case when ... then ... else ... end</literal>"
+
+#: index.docbook:498
+msgid ""
+ "<![CDATA[from AuditLog log, Payment payment\n"
+ "where log.item.class = 'Payment' and log.item.id = payment.id]]>"
+msgstr "concatenación de cadenas <literal>...||...</literal> o <literal>concat(...,...)</literal>"
+
+#: index.docbook:500
+msgid "Notice that <literal>log.item.class</literal> and <literal>payment.class</literal> would refer to the values of completely different database columns in the above query."
+msgstr "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+
+#: index.docbook:508
+msgid "Expressions"
+msgstr "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+
+#: index.docbook:510
+msgid "Expressions allowed in the <literal>where</literal> clause include most of the kind of things you could write in SQL:"
+msgstr "Cualquier función u operador definido por EJB-QL 3.0: <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()</literal>"
+
+#: index.docbook:517
+msgid "mathematical operators <literal>+, -, *, /</literal>"
+msgstr "<literal>coalesce()</literal> y <literal>nullif()</literal>"
+
+#: index.docbook:522
+msgid "binary comparison operators <literal>=, >=, <=, <>, !=, like</literal>"
+msgstr "<literal>str()</literal> para convertir valores numéricos o temporales a una cadena legible."
+
+#: index.docbook:527
+msgid "logical operations <literal>and, or, not</literal>"
+msgstr "<literal>cast(... as ...)</literal>, donde el segundo argumento es el nombre de un tipo Hibernate , y <literal>extract(... from ...)</literal> si <literal>cast()</literal> y <literal>extract()</literal> fuesen soportados por la base de datos subyacente."
+
+#: index.docbook:532
+msgid "Parentheses <literal>( )</literal>, indicating grouping"
+msgstr "la función <literal>index()</literal> de HQL, que se aplica a alias de una colección indexada unida."
+
+#: index.docbook:537
+msgid "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> and <literal>not member of</literal>"
+msgstr "funciones de HQL que tomen expresiones de ruta valuadas en colecciones: <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal>, junto a las funciones especiales <literal>elements()</literal> and <literal>indices</literal> que pueden ser cuantificadas usando <literal>some, all, exists, any, in</literal>."
+
+#: index.docbook:550
+msgid "\"Simple\" case, <literal>case ... when ... then ... else ... end</literal>, and \"searched\" case, <literal>case when ... then ... else ... end</literal>"
+msgstr "Cualquier función escalar SQL soportada por la base de datos como <literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>"
+
+#: index.docbook:556
+msgid "string concatenation <literal>...||...</literal> or <literal>concat(...,...)</literal>"
+msgstr "parámetros posicionales JDBC <literal>?</literal>"
+
+#: index.docbook:561
+msgid "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+msgstr "parámetros con nombre <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+
+#: index.docbook:567
+msgid "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+msgstr "literales SQL <literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+
+#: index.docbook:574
+msgid "Any function or operator defined by EJB-QL 3.0: <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()</literal>"
+msgstr "constantes Java <literal>public static final</literal> <literal>eg.Color.TABBY</literal>"
+
+#: index.docbook:580
+msgid "<literal>coalesce()</literal> and <literal>nullif()</literal>"
+msgstr "<literal>in</literal> y <literal>between</literal> pueden usarse como sigue:"
+
+#: index.docbook:585
+msgid "<literal>str()</literal> for converting numeric or temporal values to a readable string"
+msgstr "<![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]>"
+
+#: index.docbook:591
+msgid "<literal>cast(... as ...)</literal>, where the second argument is the name of a Hibernate type, and <literal>extract(... from ...)</literal> if ANSI <literal>cast()</literal> and <literal>extract()</literal> is supported by the underlying database"
+msgstr "<![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]>"
+
+#: index.docbook:599
+msgid "the HQL <literal>index()</literal> function, that applies to aliases of a joined indexed collection"
+msgstr "y pueden escribirse las formas negadas"
+
+#: index.docbook:605
+msgid "HQL functions that take collection-valued path expressions: <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal>, along with the special <literal>elements()</literal> and <literal>indices</literal> functions which may be quantified using <literal>some, all, exists, any, in</literal>."
+msgstr "<![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]>"
+
+#: index.docbook:613
+msgid "Any database-supported SQL scalar function like <literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]>"
+
+#: index.docbook:619
+msgid "JDBC-style positional parameters <literal>?</literal>"
+msgstr "Asimismo, <literal>is null</literal> y <literal>is not null</literal> pueden ser usadas para comprobar valores nulos."
+
+#: index.docbook:624
+msgid "named parameters <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+msgstr "Los booleanos pueden ser fácilmente usados en expresiones declarando substituciones de consulta HQL en la configuración de Hibernate:"
+
+#: index.docbook:629
+msgid "SQL literals <literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+msgstr "<![CDATA[<property name=\"hibernate.query.substitutions\">true 1, false 0</property>]]>"
+
+#: index.docbook:635
+msgid "Java <literal>public static final</literal> constants <literal>eg.Color.TABBY</literal>"
+msgstr "Esto remplazará las palabras clave <literal>true</literal> y <literal>false</literal> con los literales <literal>1</literal> y <literal>0</literal> en el SQL traducido de este HQL:"
+
+#: index.docbook:641
+msgid "<literal>in</literal> and <literal>between</literal> may be used as follows:"
+msgstr "<![CDATA[from Cat cat where cat.alive = true]]>"
+
+#: index.docbook:645
+msgid "<![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]>"
+msgstr "Puedes comprobar el tamaño de una colección con la propiedad especial <literal>size</literal>, o la función especial <literal>size()</literal>."
+
+#: index.docbook:647
+msgid "<![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr "<![CDATA[from Cat cat where cat.kittens.size > 0]]>"
+
+#: index.docbook:649
+msgid "and the negated forms may be written"
+msgstr "<![CDATA[from Cat cat where size(cat.kittens) > 0]]>"
+
+#: index.docbook:653
+msgid "<![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]>"
+msgstr "Para colecciones indexadas, puedes referirte a los índices máximo y mínimo usando las funciones <literal>minindex</literal> y <literal>maxindex</literal>. Similarmente, puedes referirte a los elementos máximo y mínimo de una colección de tipo básico usando las funciones <literal>minelement</literal> y <literal>maxelement</literal>."
+
+#: index.docbook:655
+msgid "<![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr "<![CDATA[from Calendar cal where maxelement(cal.holidays) > current_date]]>"
+
+#: index.docbook:657
+msgid "Likewise, <literal>is null</literal> and <literal>is not null</literal> may be used to test for null values."
+msgstr "<![CDATA[from Order order where maxindex(order.items) > 100]]>"
+
+#: index.docbook:662
+msgid "Booleans may be easily used in expressions by declaring HQL query substitutions in Hibernate configuration:"
+msgstr "<![CDATA[from Order order where minelement(order.items) > 10000]]>"
+
+#: index.docbook:667
+msgid "<![CDATA[<property name=\"hibernate.query.substitutions\">true 1, false 0</property>]]>"
+msgstr "Las funciones SQL <literal>any, some, all, exists, in</literal> están soportadas cuando se les pasa el conjunto de elementos o índices de una colección (funciones <literal>elements</literal> y <literal>indices</literal>) o el resultado de una subconsulta (ver debajo)."
+
+#: index.docbook:669
+msgid "This will replace the keywords <literal>true</literal> and <literal>false</literal> with the literals <literal>1</literal> and <literal>0</literal> in the translated SQL from this HQL:"
+msgstr ""
+ "<![CDATA[select mother from Cat as mother, Cat as kit\n"
+ "where kit in elements(foo.kittens)]]>"
+
+#: index.docbook:674
+msgid "<![CDATA[from Cat cat where cat.alive = true]]>"
+msgstr ""
+ "<![CDATA[select p from NameList list, Person p\n"
+ "where p.name = some elements(list.names)]]>"
+
+#: index.docbook:676
+msgid "You may test the size of a collection with the special property <literal>size</literal>, or the special <literal>size()</literal> function."
+msgstr "<![CDATA[from Cat cat where exists elements(cat.kittens)]]>"
+
+#: index.docbook:681
+msgid "<![CDATA[from Cat cat where cat.kittens.size > 0]]>"
+msgstr "<![CDATA[from Player p where 3 > all elements(p.scores)]]>"
+
+#: index.docbook:683
+msgid "<![CDATA[from Cat cat where size(cat.kittens) > 0]]>"
+msgstr "<![CDATA[from Show show where 'fizard' in indices(show.acts)]]>"
+
+#: index.docbook:685
+msgid "For indexed collections, you may refer to the minimum and maximum indices using <literal>minindex</literal> and <literal>maxindex</literal> functions. Similarly, you may refer to the minimum and maximum elements of a collection of basic type using the <literal>minelement</literal> and <literal>maxelement</literal> functions."
+msgstr "Nota que estas construcciones - <literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal> - pueden ser usadas solamente en la cláusula where en Hibernate3."
+
+#: index.docbook:693
+msgid "<![CDATA[from Calendar cal where maxelement(cal.holidays) > current_date]]>"
+msgstr "Los elementos de colecciones indexadas (arrays, listas, mapas) pueden ser referidos por índice (en una cláusula where solamente):"
+
+#: index.docbook:695
+msgid "<![CDATA[from Order order where maxindex(order.items) > 100]]>"
+msgstr "<![CDATA[from Order order where order.items[0].id = 1234]]>"
+
+#: index.docbook:697
+msgid "<![CDATA[from Order order where minelement(order.items) > 10000]]>"
+msgstr ""
+ "<![CDATA[select person from Person person, Calendar calendar\n"
+ "where calendar.holidays['national day'] = person.birthDay\n"
+ " and person.nationality.calendar = calendar]]>"
+
+#: index.docbook:699
+msgid "The SQL functions <literal>any, some, all, exists, in</literal> are supported when passed the element or index set of a collection (<literal>elements</literal> and <literal>indices</literal> functions) or the result of a subquery (see below)."
+msgstr ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11]]>"
+
+#: index.docbook:705
+msgid ""
+ "<![CDATA[select mother from Cat as mother, Cat as kit\n"
+ "where kit in elements(foo.kittens)]]>"
+msgstr ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ maxindex(order.items) ] = item and order.id = 11]]>"
+
+#: index.docbook:707
+msgid ""
+ "<![CDATA[select p from NameList list, Person p\n"
+ "where p.name = some elements(list.names)]]>"
+msgstr "La expresión dentro de <literal>[]</literal> puede incluso ser una expresión aritmética."
+
+#: index.docbook:709
+msgid "<![CDATA[from Cat cat where exists elements(cat.kittens)]]>"
+msgstr ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ size(order.items) - 1 ] = item]]>"
+
+#: index.docbook:711
+msgid "<![CDATA[from Player p where 3 > all elements(p.scores)]]>"
+msgstr "HQL provee además el función prefabricada <literal>index()</literal>, para elementos de una asociación uno-a-muchos o colección de valores."
+
+#: index.docbook:713
+msgid "<![CDATA[from Show show where 'fizard' in indices(show.acts)]]>"
+msgstr ""
+ "<![CDATA[select item, index(item) from Order order \n"
+ " join order.items item\n"
+ "where index(item) < 5]]>"
+
+#: index.docbook:715
+msgid "Note that these constructs - <literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal> - may only be used in the where clause in Hibernate3."
+msgstr "Pueden usarse las funciones SQL escalares soportadas por la base de datos subyacente"
+
+#: index.docbook:722
+msgid "Elements of indexed collections (arrays, lists, maps) may be referred to by index (in a where clause only):"
+msgstr "<![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]>"
+
+#: index.docbook:727
+msgid "<![CDATA[from Order order where order.items[0].id = 1234]]>"
+msgstr "Si aún no estás convencido de todo esto, piensa cuánto más largo y menos leíble sería la siguiente consulta en SQL:"
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[select person from Person person, Calendar calendar\n"
+ "where calendar.holidays['national day'] = person.birthDay\n"
+ " and person.nationality.calendar = calendar]]>"
+msgstr ""
+ "<![CDATA[select cust\n"
+ "from Product prod,\n"
+ " Store store\n"
+ " inner join store.customers cust\n"
+ "where prod.name = 'widget'\n"
+ " and store.location.name in ( 'Melbourne', 'Sydney' )\n"
+ " and prod = all elements(cust.currentOrder.lineItems)]]>"
+
+#: index.docbook:731
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11]]>"
+msgstr "<emphasis>Ayuda:</emphasis> algo como"
+
+#: index.docbook:733
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ maxindex(order.items) ] = item and order.id = 11]]>"
+msgstr ""
+ "<![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order\n"
+ "FROM customers cust,\n"
+ " stores store,\n"
+ " locations loc,\n"
+ " store_customers sc,\n"
+ " product prod\n"
+ "WHERE prod.name = 'widget'\n"
+ " AND store.loc_id = loc.id\n"
+ " AND loc.name IN ( 'Melbourne', 'Sydney' )\n"
+ " AND sc.store_id = store.id\n"
+ " AND sc.cust_id = cust.id\n"
+ " AND prod.id = ALL(\n"
+ " SELECT item.prod_id\n"
+ " FROM line_items item, orders o\n"
+ " WHERE item.order_id = o.id\n"
+ " AND cust.current_order = o.id\n"
+ " )]]>"
+
+#: index.docbook:735
+msgid "The expression inside <literal>[]</literal> may even be an arithmetic expression."
+msgstr "La cláusula order by"
+
+#: index.docbook:739
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ size(order.items) - 1 ] = item]]>"
+msgstr "La lista devuelta por una consulta puede ser ordenada por cualquier propiedad de una clase devuelta o componentes:"
+
+#: index.docbook:741
+msgid "HQL also provides the built-in <literal>index()</literal> function, for elements of a one-to-many association or collection of values."
+msgstr ""
+ "<![CDATA[from DomesticCat cat\n"
+ "order by cat.name asc, cat.weight desc, cat.birthdate]]>"
+
+#: index.docbook:746
+msgid ""
+ "<![CDATA[select item, index(item) from Order order\n"
+ " join order.items item\n"
+ "where index(item) < 5]]>"
+msgstr "Los <literal>asc</literal> o <literal>desc</literal> opcionales indican ordenamiento ascendente o descendente respectivamente."
+
+#: index.docbook:748
+msgid "Scalar SQL functions supported by the underlying database may be used"
+msgstr "La cláusula group by"
+
+#: index.docbook:752
+msgid "<![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]>"
+msgstr "Una consulta que devuelve valores agregados puede ser agrupada por cualquier propiedad de una clase devuelta o componentes:"
+
+#: index.docbook:754
+msgid "If you are not yet convinced by all this, think how much longer and less readable the following query would be in SQL:"
+msgstr ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat) \n"
+ "from Cat cat\n"
+ "group by cat.color]]>"
+
+#: index.docbook:759
+msgid ""
+ "<![CDATA[select cust\n"
+ "from Product prod,\n"
+ " Store store\n"
+ " inner join store.customers cust\n"
+ "where prod.name = 'widget'\n"
+ " and store.location.name in ( 'Melbourne', 'Sydney' )\n"
+ " and prod = all elements(cust.currentOrder.lineItems)]]>"
+msgstr ""
+ "<![CDATA[select foo.id, avg(name), max(name) \n"
+ "from Foo foo join foo.names name\n"
+ "group by foo.id]]>"
+
+#: index.docbook:761
+msgid "<emphasis>Hint:</emphasis> something like"
+msgstr "Se permite también una cláusula <literal>having</literal>."
+
+#: index.docbook:765
+msgid ""
+ "<![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order\n"
+ "FROM customers cust,\n"
+ " stores store,\n"
+ " locations loc,\n"
+ " store_customers sc,\n"
+ " product prod\n"
+ "WHERE prod.name = 'widget'\n"
+ " AND store.loc_id = loc.id\n"
+ " AND loc.name IN ( 'Melbourne', 'Sydney' )\n"
+ " AND sc.store_id = store.id\n"
+ " AND sc.cust_id = cust.id\n"
+ " AND prod.id = ALL(\n"
+ " SELECT item.prod_id\n"
+ " FROM line_items item, orders o\n"
+ " WHERE item.order_id = o.id\n"
+ " AND cust.current_order = o.id\n"
+ " )]]>"
+msgstr ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat) \n"
+ "from Cat cat\n"
+ "group by cat.color \n"
+ "having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]>"
+
+#: index.docbook:770
+msgid "The order by clause"
+msgstr "Las funciones y funciones de agregación SQL están permitidas en las cláusulas <literal>having</literal> y <literal>order by</literal>, si están soportadas por la base de datos subyacente (por ejemplo, no en MySQL)."
+
+#: index.docbook:772
+msgid "The list returned by a query may be ordered by any property of a returned class or components:"
+msgstr ""
+ "<![CDATA[select cat\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat\n"
+ "having avg(kitten.weight) > 100\n"
+ "order by count(kitten) asc, sum(kitten.weight) desc]]>"
+
+#: index.docbook:776
+msgid ""
+ "<![CDATA[from DomesticCat cat\n"
+ "order by cat.name asc, cat.weight desc, cat.birthdate]]>"
+msgstr "Nota que ni la cláusula <literal>group by</literal> ni la cláusula <literal>order by</literal> pueden contener expresiones aritméticas."
+
+#: index.docbook:778
+msgid "The optional <literal>asc</literal> or <literal>desc</literal> indicate ascending or descending order respectively."
+msgstr "Subconsultas"
+
+#: index.docbook:785
+msgid "The group by clause"
+msgstr "Para bases de datos que soportan subconsultas, Hibernate soporta subconsultas dentro de consultas. Una subconsulta debe ser encerrada entre paréntesis (frecuentemente por una llamada a una función de agregación SQL). Incluso se permiten subconsultas correlacionadas (subconsultas que hacen referencia a un alias en la consulta exterior)."
+
+#: index.docbook:787
+msgid "A query that returns aggregate values may be grouped by any property of a returned class or components:"
+msgstr ""
+ "<![CDATA[from Cat as fatcat \n"
+ "where fatcat.weight > ( \n"
+ " select avg(cat.weight) from DomesticCat cat \n"
+ ")]]>"
+
+#: index.docbook:791
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color]]>"
+msgstr ""
+ "<![CDATA[from DomesticCat as cat \n"
+ "where cat.name = some ( \n"
+ " select name.nickName from Name as name \n"
+ ")]]>"
+
+#: index.docbook:793
+msgid ""
+ "<![CDATA[select foo.id, avg(name), max(name)\n"
+ "from Foo foo join foo.names name\n"
+ "group by foo.id]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ "where not exists ( \n"
+ " from Cat as mate where mate.mate = cat \n"
+ ")]]>"
+
+#: index.docbook:795
+msgid "A <literal>having</literal> clause is also allowed."
+msgstr ""
+ "<![CDATA[from DomesticCat as cat \n"
+ "where cat.name not in ( \n"
+ " select name.nickName from Name as name \n"
+ ")]]>"
+
+#: index.docbook:799
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color\n"
+ "having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]>"
+msgstr "Para las subconsultas con más de una expresión en la lista de selección, puedes usar un constructor de tuplas:"
+
+#: index.docbook:801
+msgid "SQL functions and aggregate functions are allowed in the <literal>having</literal> and <literal>order by</literal> clauses, if supported by the underlying database (eg. not in MySQL)."
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ "where not ( cat.name, cat.color ) in ( \n"
+ " select cat.name, cat.color from DomesticCat cat \n"
+ ")]]>"
+
+#: index.docbook:807
+msgid ""
+ "<![CDATA[select cat\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.name, cat.other, cat.properties\n"
+ "having avg(kitten.weight) > 100\n"
+ "order by count(kitten) asc, sum(kitten.weight) desc]]>"
+msgstr "Nota que en algunas bases de datos (pero no en Oracle o HSQL), puedes usar constructores de tuplar en otros contextos, por ejemplo al consultar componentes o tipos de usuario compuestos:"
+
+#: index.docbook:809
+msgid "Note that neither the <literal>group by</literal> clause nor the <literal>order by</literal> clause may contain arithmetic expressions. Also note that Hibernate currently does not expand a grouped entity, so you can't write <literal>group by cat</literal> if all properties of <literal>cat</literal> are non-aggregated. You have to list all non-aggregated properties explicitly."
+msgstr "<![CDATA[from Person where name = ('Gavin', 'A', 'King')]]>"
+
+#: index.docbook:821
+msgid "Subqueries"
+msgstr "Que es equivalente a la más verborrágica:"
+
+#: index.docbook:823
+msgid "For databases that support subselects, Hibernate supports subqueries within queries. A subquery must be surrounded by parentheses (often by an SQL aggregate function call). Even correlated subqueries (subqueries that refer to an alias in the outer query) are allowed."
+msgstr "<![CDATA[from Person where name.first = 'Gavin' and name.initial = 'A' and name.last = 'King')]]>"
+
+#: index.docbook:829
+msgid ""
+ "<![CDATA[from Cat as fatcat\n"
+ "where fatcat.weight > (\n"
+ " select avg(cat.weight) from DomesticCat cat\n"
+ ")]]>"
+msgstr "Existen dos buenas razones por las cuales podrías no querer hacer este tipo de cosa: primero, no es completamente portable entre plataformas de base de datos; segundo, la consulta ahora es dependiente del orden de propiedades en el documento de mapeo."
+
+#: index.docbook:831
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name = some (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr "Ejemplos de HQL"
+
+#: index.docbook:833
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not exists (\n"
+ " from Cat as mate where mate.mate = cat\n"
+ ")]]>"
+msgstr "Las consultas de Hibernate pueden ser abolutamente potentes y complejas, De hecho, el poder del lenguaje de consulta es uno de los puntos principales de venta de Hibernate. He aquí algunos consultas de ejemplo muy similares a consultas que he usado en un proyecto reciente. ¡Nota que la mayoría de las consultas que escribirás som mucho más simples que estas!"
+
+#: index.docbook:835
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name not in (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr "La siguiente consulta devuelve el order id, número de items y valor total de la orden para todas las ordenes inpagas de un cliente en particular y valor total mínimo dados, ordenando los resultados por valor total. Al determinar los precios, usa el catálogo actual. La consulta SQL resultante, contra las tablas <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal> and <literal>PRICE</literal> tiene cuatro joins interiores y una subselect (no correlacionada)."
+
+#: index.docbook:837
+msgid ""
+ "<![CDATA[select cat.id, (select max(kit.weight) from cat.kitten kit)\n"
+ "from Cat as cat]]>"
+msgstr ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog.effectiveDate < sysdate\n"
+ " and catalog.effectiveDate >= all (\n"
+ " select cat.effectiveDate \n"
+ " from Catalog as cat\n"
+ " where cat.effectiveDate < sysdate\n"
+ " )\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+
+#: index.docbook:839
+msgid "Note that HQL subqueries may occur only in the select or where clauses."
+msgstr "¡Qué monstruo! Realmente, en la vida real, no estoy muy afilado en subconsultas, de modo que mi consulta fue realmente algo como esto:"
+
+#: index.docbook:843
+msgid "Note that subqueries can also utilize <literal>row value constructor</literal> syntax. See <xref linkend=\"queryhql-tuple\"/> for more details."
+msgstr ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog = :currentCatalog\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+
+#: index.docbook:851
+msgid "HQL examples"
+msgstr "La próxima consulta cuenta el número de pagos en cada estado, excluyendo todos los pagos en el estado <literal>AWAITING_APPROVAL</literal> donde el estado más reciente fue hecho por el usuario actual. Se traduce en una consulta SQL con dos joins interiores y una subselect correlacionada contra las tablas <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> y <literal>PAYMENT_STATUS_CHANGE</literal>."
+
+#: index.docbook:853
+msgid "Hibernate queries can be quite powerful and complex. In fact, the power of the query language is one of Hibernate's main selling points. Here are some example queries very similar to queries that I used on a recent project. Note that most queries you will write are much simpler than these!"
+msgstr ""
+ "<![CDATA[select count(payment), status.name \n"
+ "from Payment as payment \n"
+ " join payment.currentStatus as status\n"
+ " join payment.statusChanges as statusChange\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or (\n"
+ " statusChange.timeStamp = ( \n"
+ " select max(change.timeStamp) \n"
+ " from PaymentStatusChange change \n"
+ " where change.payment = payment\n"
+ " )\n"
+ " and statusChange.user <> :currentUser\n"
+ " )\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+
+#: index.docbook:859
+msgid "The following query returns the order id, number of items and total value of the order for all unpaid orders for a particular customer and given minimum total value, ordering the results by total value. In determining the prices, it uses the current catalog. The resulting SQL query, against the <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal> and <literal>PRICE</literal> tables has four inner joins and an (uncorrelated) subselect."
+msgstr "Si hubiese mapeado la colección <literal>statusChanges</literal> como una lista, en vez de un conjunto, la consulta habría sido mucho más simple de escribir."
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog.effectiveDate < sysdate\n"
+ " and catalog.effectiveDate >= all (\n"
+ " select cat.effectiveDate\n"
+ " from Catalog as cat\n"
+ " where cat.effectiveDate < sysdate\n"
+ " )\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr ""
+ "<![CDATA[select count(payment), status.name \n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+
+#: index.docbook:870
+msgid "What a monster! Actually, in real life, I'm not very keen on subqueries, so my query was really more like this:"
+msgstr "La próxima consulta usa la función <literal>isNull()</literal> de MS SQL Server para devolver todas las cuentas y pagos inpagos de la organización a la que pertenece el usuario actual. Se traduce en una consulta SQL con tres joins interiores, un join exterior y una subconsulta contra las tablas <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> y <literal>ORG_USER</literal>."
+
+#: index.docbook:875
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog = :currentCatalog\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser in elements(account.holder.users)\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+
+#: index.docbook:877
+msgid "The next query counts the number of payments in each status, excluding all payments in the <literal>AWAITING_APPROVAL</literal> status where the most recent status change was made by the current user. It translates to an SQL query with two inner joins and a correlated subselect against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> and <literal>PAYMENT_STATUS_CHANGE</literal> tables."
+msgstr "Para algunas bases de datos, necesitaríamos eliminar la subselect (correlacionada)."
+
+#: index.docbook:885
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ " join payment.statusChanges as statusChange\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or (\n"
+ " statusChange.timeStamp = (\n"
+ " select max(change.timeStamp)\n"
+ " from PaymentStatusChange change\n"
+ " where change.payment = payment\n"
+ " )\n"
+ " and statusChange.user <> :currentUser\n"
+ " )\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " join account.holder.users as user\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser = user\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+
+#: index.docbook:887
+msgid "If I would have mapped the <literal>statusChanges</literal> collection as a list, instead of a set, the query would have been much simpler to write."
+msgstr "Sentencias UPDATE y DELETE masivas"
+
+#: index.docbook:892
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr "HQL soporta ahora sentencias UPDATE y DELETE en HQL. Ver <xref linkend=\"batch-direct\"/> para detalles."
+
+#: index.docbook:894
+msgid "The next query uses the MS SQL Server <literal>isNull()</literal> function to return all the accounts and unpaid payments for the organization to which the current user belongs. It translates to an SQL query with three inner joins, an outer join and a subselect against the <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> and <literal>ORG_USER</literal> tables."
+msgstr "Consejos y Trucos"
+
+#: index.docbook:903
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser in elements(account.holder.users)\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr "Puedes contar el número de resultados de una consulta sin devolverlos realmente:"
+
+#: index.docbook:905
+msgid "For some databases, we would need to do away with the (correlated) subselect."
+msgstr "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue()]]>"
+
+#: index.docbook:909
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " join account.holder.users as user\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser = user\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr "Para ordenar un resultado por el tamaño de una colección, usa la siguiente consulta:"
+
+#: index.docbook:914
+msgid "Bulk update and delete"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr \n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "order by count(msg)]]>"
+
+#: index.docbook:916
+msgid "HQL now supports <literal>update</literal>, <literal>delete</literal> and <literal>insert ... select ...</literal> statements. See <xref linkend=\"batch-direct\"/> for details."
+msgstr "Si tu base de datos soporta subselects, puedes colocar una condición sobre el tamaño de selección en la cláusula where de tu consulta:"
+
+#: index.docbook:924
+msgid "Tips & Tricks"
+msgstr "<![CDATA[from User usr where size(usr.messages) >= 1]]>"
+
+#: index.docbook:926
+msgid "You can count the number of query results without actually returning them:"
+msgstr "Si tu base de datos no soporta subselects, usa la siguiente consulta:"
+
+#: index.docbook:930
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue()]]>"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User usr.name\n"
+ " join usr.messages msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) >= 1]]>"
+
+#: index.docbook:932
+msgid "To order a result by the size of a collection, use the following query:"
+msgstr "Como esta solución no puede devolver un <literal>User</literal> con cero mensajes debido a la unión interior, la siguiente forma es también útil:"
+
+#: index.docbook:936
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "order by count(msg)]]>"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) = 0]]>"
+
+#: index.docbook:938
+msgid "If your database supports subselects, you can place a condition upon selection size in the where clause of your query:"
+msgstr "Las propiedades de un JavaBean pueden ser ligadas al parámetros de consulta con nombre:"
+
+#: index.docbook:943
+msgid "<![CDATA[from User usr where size(usr.messages) >= 1]]>"
+msgstr ""
+ "<![CDATA[Query q = s.createQuery(\"from foo Foo as foo where foo.name=:name and foo.size=:size\");\n"
+ "q.setProperties(fooBean); // fooBean has getName() and getSize()\n"
+ "List foos = q.list();]]>"
+
+#: index.docbook:945
+msgid "If your database doesn't support subselects, use the following query:"
+msgstr "Las colecciones son paginables usando la interface <literal>Query</literal> con un filtro:"
+
+#: index.docbook:949
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User usr.name\n"
+ " join usr.messages msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) >= 1]]>"
+msgstr ""
+ "<![CDATA[Query q = s.createFilter( collection, \"\" ); // the trivial filter\n"
+ "q.setMaxResults(PAGE_SIZE);\n"
+ "q.setFirstResult(PAGE_SIZE * pageNumber);\n"
+ "List page = q.list();]]>"
+
+#: index.docbook:951
+msgid "As this solution can't return a <literal>User</literal> with zero messages because of the inner join, the following form is also useful:"
+msgstr "Los elementos de colección pueden ser ordenados o agrupados usando un filtro de consulta:"
+
+#: index.docbook:956
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) = 0]]>"
+msgstr ""
+ "<![CDATA[Collection orderedCollection = s.filter( collection, \"order by this.amount\" );\n"
+ "Collection counts = s.filter( collection, \"select this.type, count(this) group by this.type\" );]]>"
+
+#: index.docbook:958
+msgid "Properties of a JavaBean can be bound to named query parameters:"
+msgstr "Puedes hallar el tamaño de una colección sin inicializarla:"
+
+#: index.docbook:962
+msgid ""
+ "<![CDATA[Query q = s.createQuery(\"from foo Foo as foo where foo.name=:name and foo.size=:size\");\n"
+ "q.setProperties(fooBean); // fooBean has getName() and getSize()\n"
+ "List foos = q.list();]]>"
+msgstr "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue();]]>"
+
+#: index.docbook:964
+msgid "Collections are pageable by using the <literal>Query</literal> interface with a filter:"
+msgstr ""
+
+#: index.docbook:968
+msgid ""
+ "<![CDATA[Query q = s.createFilter( collection, \"\" ); // the trivial filter\n"
+ "q.setMaxResults(PAGE_SIZE);\n"
+ "q.setFirstResult(PAGE_SIZE * pageNumber);\n"
+ "List page = q.list();]]>"
+msgstr ""
+
+#: index.docbook:970
+msgid "Collection elements may be ordered or grouped using a query filter:"
+msgstr ""
+
+#: index.docbook:974
+msgid ""
+ "<![CDATA[Collection orderedCollection = s.filter( collection, \"order by this.amount\" );\n"
+ "Collection counts = s.filter( collection, \"select this.type, count(this) group by this.type\" );]]>"
+msgstr ""
+
+#: index.docbook:976
+msgid "You can find the size of a collection without initializing it:"
+msgstr ""
+
+#: index.docbook:980
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue();]]>"
+msgstr ""
+
+#: index.docbook:985
+msgid "Components"
+msgstr ""
+
+#: index.docbook:987
+msgid "Components might be used in just about every way that simple value types can be used in HQL queries. They can appear in the <literal>select</literal> clause:"
+msgstr ""
+
+#: index.docbook:992, index.docbook:1038
+msgid "<![CDATA[select p.name from from Person p]]>"
+msgstr ""
+
+#: index.docbook:993
+msgid "<![CDATA[select p.name.first from from Person p]]>"
+msgstr ""
+
+#: index.docbook:995
+msgid "where the Person's name property is a component. Components can also be used in the <literal>where</literal> clause:"
+msgstr ""
+
+#: index.docbook:1000
+msgid "<![CDATA[from from Person p where p.name = :name]]>"
+msgstr ""
+
+#: index.docbook:1001
+msgid "<![CDATA[from from Person p where p.name.first = :firstName]]>"
+msgstr ""
+
+#: index.docbook:1003
+msgid "Components can also be used in the <literal>order by</literal> clause:"
+msgstr ""
+
+#: index.docbook:1007
+msgid "<![CDATA[from from Person p order by p.name]]>"
+msgstr ""
+
+#: index.docbook:1008
+msgid "<![CDATA[from from Person p order by p.name.first]]>"
+msgstr ""
+
+#: index.docbook:1010
+msgid "Another common use of components is in <xref linkend=\"queryhql-tuple\"/>row value constructors."
+msgstr ""
+
+#: index.docbook:1016
+msgid "Row value constructor syntax"
+msgstr ""
+
+#: index.docbook:1018
+msgid "HQL supports the use of ANSI SQL <literal>row value constructor</literal> syntax (sometimes called <literal>tuple</literal> syntax), even though the underlying database may not support that notion. Here we are generally referring to multi-valued comparisons, typically associated with components. Consider an entity Person which defines a name component:"
+msgstr ""
+
+#: index.docbook:1025
+msgid "<![CDATA[from Person p where p.name.first='John' and p.name.last='Jingleheimer-Schmidt']]>"
+msgstr ""
+
+#: index.docbook:1027
+msgid "That's valid syntax, although a little verbose. It be nice to make this a bit more concise and use <literal>row value constructor</literal> syntax:"
+msgstr ""
+
+#: index.docbook:1032
+msgid "<![CDATA[from Person p where p.name=('John', 'Jingleheimer-Schmidt')]]>"
+msgstr ""
+
+#: index.docbook:1034
+msgid "It can also be useful to specify this in the <literal>select</literal> clause:"
+msgstr ""
+
+#: index.docbook:1040
+msgid "Another time using <literal>row value constructor</literal> syntax can be beneficial is when using subqueries needing to compare against multiple values:"
+msgstr ""
+
+#: index.docbook:1045
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not ( cat.name, cat.color ) in (\n"
+ " select cat.name, cat.color from DomesticCat cat\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:1047
+msgid "One thing to consider when deciding if you want to use this syntax is that the query will be dependent upon the ordering of the component sub-properties in the metadata."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/query_sql.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/query_sql.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/query_sql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,990 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Native SQL"
+msgstr "SQL Nativo"
+
+#: index.docbook:7
+msgid "You may also express queries in the native SQL dialect of your database. This is useful if you want to utilize database specific features such as query hints or the <literal>CONNECT</literal> keyword in Oracle. It also provides a clean migration path from a direct SQL/JDBC based application to Hibernate."
+msgstr "Puedes también expresar consultas en el dialecto SQL nativo de tu base de datos. Esto es útil si quieres utilizar aspectos específicos de base de datos tal como consejos (hints) de consulta o la palabra clave <literal>CONNECT</literal> en Oracle. Provee además una clara ruta de migración desde una aplicación basada en SQL/JDBC directo a Hibernate."
+
+#: index.docbook:13
+msgid "Hibernate3 allows you to specify handwritten SQL (including stored procedures) for all create, update, delete, and load operations."
+msgstr "Hibernate3 te permite especificar SQL escrito a mano (incluyendo procedimientos almacenados) para todas las operaciones de creación, actualización, borrado y carga."
+
+#: index.docbook:17
+msgid "Using a <literal>SQLQuery</literal>"
+msgstr "Creando una <literal>Query</literal> de SQL nativo"
+
+#: index.docbook:19
+msgid "Execution of native SQL queries is controlled via the <literal>SQLQuery</literal> interface, which is obtained by calling <literal>Session.createSQLQuery()</literal>. The following describes how to use this API for querying."
+msgstr "Las consultas SQL se controlan por medio de la interface <literal>SQLQuery</literal>, que se obtiene llamando a <literal>Session.createSQLQuery()</literal>."
+
+#: index.docbook:25
+msgid "Scalar queries"
+msgstr ""
+ "<![CDATA[List cats = sess.createSQLQuery(\"select {cat.*} from cats cat\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:27
+msgid "The most basic SQL query is to get a list of scalars (values)."
+msgstr "Esta consulta especificada:"
+
+#: index.docbook:30
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").list();\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").list();\n"
+ "]]>"
+msgstr "la cadena de consulta SQL, con un lugar para que Hibernate inyecte los alias de columnas"
+
+#: index.docbook:32
+msgid "These will both return a List of Object arrays (Object[]) with scalar values for each column in the CATS table. Hibernate will use ResultSetMetadata to deduce the actual order and types of the returned scalar values."
+msgstr "la entidad devuelta por la consulta, y sus alias de tablas SQL"
+
+#: index.docbook:37
+msgid "To avoid the overhead of using <literal>ResultSetMetadata</literal> or simply to be more explicit in what is returned one can use <literal>addScalar()</literal>."
+msgstr "El método <literal>addEntity()</literal> asocia alias de tablas SQL con clases de entidad, y determina la forma del conjunto resultado de la consulta."
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\", Hibernate.STRING)\n"
+ " .addScalar(\"BIRTHDATE\", Hibernate.DATE)\n"
+ "]]>"
+msgstr "El método <literal>addJoin()</literal> puede ser usado para cargar asociaciones a otras entidades y colecciones."
+
+#: index.docbook:43, index.docbook:89, index.docbook:170, index.docbook:321
+msgid "This query specified:"
+msgstr ""
+ "<![CDATA[List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"kitten\", \"cat.kittens\")\n"
+ " .list();]]>"
+
+#: index.docbook:47, index.docbook:93, index.docbook:325
+msgid "the SQL query string"
+msgstr "Una consulta SQL nativa podría devolver un valor escalar simple o una combinación de escalares y entidades."
+
+#: index.docbook:51
+msgid "the columns and types to return"
+msgstr ""
+ "<![CDATA[Double max = (Double) sess.createSQLQuery(\"select max(cat.weight) as maxWeight from cats cat\")\n"
+ " .addScalar(\"maxWeight\", Hibernate.DOUBLE);\n"
+ " .uniqueResult();]]>"
+
+#: index.docbook:55
+msgid "This will still return Object arrays, but now it will not use <literal>ResultSetMetdata</literal> but will instead explicitly get the ID, NAME and BIRTHDATE column as respectively a Long, String and a Short from the underlying resultset. This also means that only these three columns will be returned, even though the query is using <literal>*</literal> and could return more than the three listed columns."
+msgstr "Alias y referencias de propiedad"
+
+#: index.docbook:63
+msgid "It is possible to leave out the type information for all or some of the scalars."
+msgstr "La notación <literal>{cat.*}</literal> usada arriba es un atajo para \"todas las propiedades\". Alternativamente, puedes listar las columnas explícitamente, pero incluso en este caso dejamos que Hibernate inyecte los alias de columnas SQL para cada propiedad. El lugar para un alias de columna es sólo el nombre de propiedad cualificado por el alias de la tabla. En el siguiente ejemplo, recuperamos <literal>Cat</literal>s de una tabla diferente (<literal>cat_log</literal>) a una declarada en los metadatos de mapeo. Nota que podríamos incluso usar los alias de propiedad en la cláusula where si quisieramos."
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\")\n"
+ " .addScalar(\"BIRTHDATE\")\n"
+ "]]>"
+msgstr "La sintáxis <literal>{}</literal> <emphasis>no</emphasis> es requerida para consultas con nombre. Ver"
+
+#: index.docbook:68
+msgid "This is essentially the same query as before, but now <literal>ResultSetMetaData</literal> is used to decide the type of NAME and BIRTHDATE where as the type of ID is explicitly specified."
+msgstr ""
+ "<![CDATA[String sql = \"select cat.originalId as {cat.id}, \" +\n"
+ " \"cat.mateid as {cat.mate}, cat.sex as {cat.sex}, \" +\n"
+ " \"cat.weight*10 as {cat.weight}, cat.name as {cat.name} \" +\n"
+ " \"from cat_log cat where {cat.mate} = :catId\"\n"
+ " \n"
+ "List loggedCats = sess.createSQLQuery(sql)\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .setLong(\"catId\", catId)\n"
+ " .list();]]>"
+
+#: index.docbook:72
+msgid "How the java.sql.Types returned from ResultSetMetaData is mapped to Hibernate types is controlled by the Dialect. If a specific type is not mapped or does not result in the expected type it is possible to customize it via calls to <literal>registerHibernateType</literal> in the Dialect."
+msgstr "<emphasis>Nota:</emphasis> si listas cada propiedad explícitamente, ¡debes incluir todas las propiedades de la clase <emphasis>y sus subclases</emphasis>!"
+
+#: index.docbook:80
+msgid "Entity queries"
+msgstr "Consultas SQL con nombre"
+
+#: index.docbook:82
+msgid "The above queries were all about returning scalar values, basically returning the \"raw\" values from the resultset. The following shows how to get entity objects from a native sql query via <literal>addEntity()</literal>."
+msgstr "Las consultas SQL con nombre pueden definirse en el documento de mapeo y llamadas exactamente en la misma forma en que a una consulta HQL con nombre. En este caso, <emphasis>no</emphasis> necesitamos llamar a <literal>addEntity()</literal>."
+
+#: index.docbook:87
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").addEntity(Cat.class);\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"persons\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex}\n"
+ " FROM PERSON person \n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+
+#: index.docbook:97
+msgid "the entity returned by the query"
+msgstr ""
+ "<![CDATA[<sql-query name=\"personsWith\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person \n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+
+#: index.docbook:101
+msgid "Assuming that Cat is mapped as a class with the columns ID, NAME and BIRTHDATE the above queries will both return a List where each element is a Cat entity."
+msgstr "Una consulta SQL con nombre puede devolver un valor escalar. Debes especificar el alias de columna y tipo Hibernate usando el elementp <literal><return-scalar></literal>:"
+
+#: index.docbook:105
+msgid "If the entity is mapped with a <literal>many-to-one</literal> to another entity it is required to also return this when performing the native query, otherwise a database specific \"column not found\" error will occur. The additional columns will automatically be returned when using the * notation, but we prefer to be explicit as in the following example for a <literal>many-to-one</literal> to a <literal>Dog</literal>:"
+msgstr ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return-scalar column=\"name\" type=\"string\"/>\n"
+ " <return-scalar column=\"age\" type=\"long\"/>\n"
+ " SELECT p.NAME AS name,\n"
+ " p.AGE AS age,\n"
+ " FROM PERSON p WHERE p.NAME LIKE 'Hiber%'\n"
+ "</sql-query>]]>"
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr "Usando return-property para especificar explícitamente nombres de columna/alias"
+
+#: index.docbook:115
+msgid "This will allow cat.getDog() to function properly."
+msgstr "Con <literal><return-property></literal> puedes decirle explícitamente a Hibernate qué alias de columna usar, en vez de usar la sintáxis <literal>{}</literal> para dejar que Hibernate inyecte sus propios alias."
+
+#: index.docbook:119
+msgid "Handling associations and collections"
+msgstr ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return alias=\"person\" class=\"eg.Person\">\n"
+ " <return-property name=\"name\" column=\"myName\"/>\n"
+ " <return-property name=\"age\" column=\"myAge\"/>\n"
+ " <return-property name=\"sex\" column=\"mySex\"/>\n"
+ " </return>\n"
+ " SELECT person.NAME AS myName,\n"
+ " person.AGE AS myAge,\n"
+ " person.SEX AS mySex,\n"
+ " FROM PERSON person WHERE person.NAME LIKE :name\n"
+ "</sql-query>\n"
+ "]]>"
+
+#: index.docbook:121
+msgid "It is possible to eagerly join in the <literal>Dog</literal> to avoid the possible extra roundtrip for initializing the proxy. This is done via the <literal>addJoin()</literal> method, which allows you to join in an association or collection."
+msgstr "<literal><return-property></literal> también trabaja con múltiples columnas. Esto resuelve una limitación de la sintáxis <literal>{}</literal>, la cual no puede permitir un control fino de propiedades multi-columna."
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.ID, NAME, BIRTHDATE, DOG_ID, D_ID, D_NAME FROM CATS c, DOGS d WHERE c.DOG_ID = d.D_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dog\");\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"organizationCurrentEmployments\">\n"
+ " <return alias=\"emp\" class=\"Employment\"> \n"
+ " <return-property name=\"salary\"> \n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/> \n"
+ " </return-property>\n"
+ " <return-property name=\"endDate\" column=\"myEndDate\"/>\n"
+ " </return>\n"
+ " SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer}, \n"
+ " STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},\n"
+ " REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT\n"
+ " WHERE EMPLOYER = :id AND ENDDATE IS NULL\n"
+ " ORDER BY STARTDATE ASC\n"
+ "</sql-query>]]>"
+
+#: index.docbook:128
+msgid "In this example the returned <literal>Cat</literal>'s will have their <literal>dog</literal> property fully initialized without any extra roundtrip to the database. Notice that we added a alias name (\"cat\") to be able to specify the target property path of the join. It is possible to do the same eager joining for collections, e.g. if the <literal>Cat</literal> had a one-to-many to <literal>Dog</literal> instead."
+msgstr "Nota que en este ejemplo hemos usado <literal><return-property></literal> en combinación con la sintáxis <literal>{}</literal> para inyección, permitiendo a los usuarios elejir cómo quieren referirse a las columnas y propiedades."
+
+#: index.docbook:136
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, D_ID, D_NAME, CAT_ID FROM CATS c, DOGS d WHERE c.ID = d.CAT_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dogs\");\n"
+ "]]>"
+msgstr "Si tu mapeo tiene un discriminador debes usar <literal><return-discriminator></literal> para especificar la columna discriminadora."
+
+#: index.docbook:138
+msgid "At this stage we are reaching the limits of what is possible with native queries without starting to enhance the sql queries to make them usable in Hibernate; the problems starts to arise when returning multiple entities of the same type or when the default alias/column names are not enough."
+msgstr "Usando procedimientos almacenados para consultar"
+
+#: index.docbook:146
+msgid "Returning multiple entities"
+msgstr "Hibernate3 introduce soporte para consultas vía procedimientos almacenados. Los procedimientos almacenados deben devolver un conjunto resultado como el primer parámetro de salida para ser capaces de funcionar con Hibernate. Un ejemplo de uno procedimiento almacenado en Oracle 9 o superior es así:"
+
+#: index.docbook:148
+msgid "Until now the result set column names are assumed to be the same as the column names specified in the mapping document. This can be problematic for SQL queries which join multiple tables, since the same column names may appear in more than one table."
+msgstr ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION selectAllEmployments \n"
+ " RETURN SYS_REFCURSOR \n"
+ "AS \n"
+ " st_cursor SYS_REFCURSOR; \n"
+ "BEGIN \n"
+ " OPEN st_cursor FOR \n"
+ " SELECT EMPLOYEE, EMPLOYER, \n"
+ " STARTDATE, ENDDATE, \n"
+ " REGIONCODE, EID, VALUE, CURRENCY \n"
+ " FROM EMPLOYMENT; \n"
+ " RETURN st_cursor; \n"
+ " END;]]>"
+
+#: index.docbook:153
+msgid "Column alias injection is needed in the following query (which most likely will fail):"
+msgstr "Para usar esta consulta en Hibernate necesitas mapearla por medio de una consulta con nombre."
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.*, m.* FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"selectAllEmployees_SP\" callable=\"true\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"employee\" column=\"EMPLOYEE\"/>\n"
+ " <return-property name=\"employer\" column=\"EMPLOYER\"/> \n"
+ " <return-property name=\"startDate\" column=\"STARTDATE\"/>\n"
+ " <return-property name=\"endDate\" column=\"ENDDATE\"/> \n"
+ " <return-property name=\"regionCode\" column=\"REGIONCODE\"/> \n"
+ " <return-property name=\"id\" column=\"EID\"/> \n"
+ " <return-property name=\"salary\"> \n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/> \n"
+ " </return-property>\n"
+ " </return>\n"
+ " { ? = call selectAllEmployments() }\n"
+ "</sql-query>]]>"
+
+#: index.docbook:158
+msgid "The intention for this query is to return two Cat instances per row, a cat and its mother. This will fail since there is a conflict of names since they are mapped to the same column names and on some databases the returned column aliases will most likely be on the form \"c.ID\", \"c.NAME\", etc. which are not equal to the columns specificed in the mappings (\"ID\" and \"NAME\")."
+msgstr "Nota que los procedimientos almacenados sólo devuelven escalares y entidades. No están soportados <literal><return-join></literal> y <literal><load-collection></literal>."
+
+#: index.docbook:165
+msgid "The following form is not vulnerable to column name duplication:"
+msgstr "Reglas/limitaciones para usar procedimientos almacenados"
+
+#: index.docbook:168
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr "Para usar procedimientos almacenados con Hibernate los procedimientos tienen que seguir algunas reglas. Si no siguen esas reglas no son usables por Hibernate. Si aún quisieras usar estos procedimientos tendrías que ejecutarlos por medio de <literal>session.connection()</literal>. Las reglas son diferentes para cada base de datos, ya que los vendedores de base de datos tienen diferentes semánticas/sintáxis de procedimientos almacenados."
+
+#: index.docbook:174
+msgid "the SQL query string, with placeholders for Hibernate to inject column aliases"
+msgstr "Para Oracle se aplican las siguientes reglas:"
+
+#: index.docbook:179
+msgid "the entities returned by the query"
+msgstr "El procedimiento debe devolver un conjunto resultado. Esto se hace devolviendo un <literal>SYS_REFCURSOR</literal> en Oracle 9 o 10. En Oracle necesitas definir un tipo <literal>REF CURSOR</literal>."
+
+#: index.docbook:183
+msgid "The {cat.*} and {mother.*} notation used above is a shorthand for \"all properties\". Alternatively, you may list the columns explicity, but even in this case we let Hibernate inject the SQL column aliases for each property. The placeholder for a column alias is just the property name qualified by the table alias. In the following example, we retrieve Cats and their mothers from a different table (cat_log) to the one declared in the mapping metadata. Notice that we may even use the property aliases in the where clause if we like."
+msgstr "La forma recomendada es <literal>{ ? = call procName(<parameters>) }</literal> o <literal>{ ? = call procName }</literal> (esto es más una regla de Oracle que una regla de Hibernate)."
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[String sql = \"SELECT ID as {c.id}, NAME as {c.name}, \" + \n"
+ " \"BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} \" +\n"
+ " \"FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID\";\n"
+ "\n"
+ "List loggedCats = sess.createSQLQuery(sql)\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class).list()\n"
+ "]]>"
+msgstr "Para Sybase o MS SQL server se aplican las siguientes reglas:"
+
+#: index.docbook:195
+msgid "Alias and property references"
+msgstr "El procedimiento debe devolver un conjunto resultado. Nota que ya que estos servidores pueden y devolverán múltiples conjuntos resultados y cuentas de actualización, Hibernate iterará los resultados y tomará el primer resultado que sea un conjunto resultado como su valor a devolver. Todo lo demás será descartado."
+
+#: index.docbook:197
+msgid "For most cases the above alias injection is needed, but for queries relating to more complex mappings like composite properties, inheritance discriminators, collections etc. there are some specific aliases to use to allow Hibernate to inject the proper aliases."
+msgstr "Si habilitas <literal>SET NOCOUNT ON</literal> en tu procedimiento será probablemente más eficiente, pero esto no es un requerimiento."
+
+#: index.docbook:202
+msgid "The following table shows the different possibilities of using the alias injection. Note: the alias names in the result are examples, each alias will have a unique and probably different name when used."
+msgstr "SQL personalizado para crear, actualizar y borrar"
+
+#: index.docbook:208
+msgid "Alias injection names"
+msgstr "Hibernate3 puede usar sentencias SQL personalizadas para las operaciones de crear, actualizar y borrar. Los persistidores de clases y colecciones en Hibernate ya contienen un conjunto de cadenas generadas en tiempo de configuración (insertsql, deletesql, updatesql, etc.). Las etiquetas de mapeo <literal><sql-insert></literal>, <literal><sql-delete></literal>, y <literal><sql-update></literal> sobrescriben estas cadenas:"
+
+#: index.docbook:219
+msgid "Description"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>\n"
+ " <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>\n"
+ " <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>\n"
+ "</class>]]>"
+
+#: index.docbook:221
+msgid "Syntax"
+msgstr "El SQL se ejecuta directamente en tu base de datos, de modo que eres libre de usar cualquier dialecto que quieras. Esto reducirá, por supuesto, la portabilidad de tu mapeo si usas SQL específico de la base de datos."
+
+#: index.docbook:223
+msgid "Example"
+msgstr "Los procedimientos almacenados son soportados si está establecido el atributo <literal>callable</literal>:"
+
+#: index.docbook:229
+msgid "A simple property"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert callable=\"true\">{call createPerson (?, ?)}</sql-insert>\n"
+ " <sql-delete callable=\"true\">{? = call deletePerson (?)}</sql-delete>\n"
+ " <sql-update callable=\"true\">{? = call updatePerson (?, ?)}</sql-update>\n"
+ "</class>]]>"
+
+#: index.docbook:231
+msgid "{[aliasname].[propertyname]"
+msgstr "El orden de los parámetros posicionales son actualmente vitales, ya que deben estar en la misma secuencia en que las espera Hibernate."
+
+#: index.docbook:233
+msgid "A_NAME as {item.name}"
+msgstr "Puedes ver el orden esperado habilitando el registro de depuración para el nivel <literal>org.hibernate.persister.entity</literal>. Con este nivel habilitado, Hibernate imprimirá el SQL estático que se usa para crear, actualizar, borrar, etc. las entidades. (Para ver la secuencia esperada, recuerda no incluir tu SQL personalizado en los ficheros de mapeo ya que sobrescribirán el sql estático generado por Hibernate.)"
+
+#: index.docbook:237
+msgid "A composite property"
+msgstr "Los procedimientos almacenados son, en la mayoría de los casos (léase, mejor hacerlo que no hacerlo), obligados a devolver el número de filas insertadas/actualizadas/borradas, ya que Hibernate tiene algunas comprobaciones en tiempo de ejecución del éxito de la sentencia. Hibernate siempre registra el primer parámetro de la sentencia como un parámetro de salida numérico para las operaciones CUD:"
+
+#: index.docbook:239
+msgid "{[aliasname].[componentname].[propertyname]}"
+msgstr ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)\n"
+ " RETURN NUMBER IS\n"
+ "BEGIN\n"
+ "\n"
+ " update PERSON\n"
+ " set\n"
+ " NAME = uname,\n"
+ " where\n"
+ " ID = uid;\n"
+ "\n"
+ " return SQL%ROWCOUNT;\n"
+ "\n"
+ "END updatePerson;]]>"
+
+#: index.docbook:241
+msgid "CURRENCY as {item.amount.currency}, VALUE as {item.amount.value}"
+msgstr "SQL personalizado para carga"
+
+#: index.docbook:246
+msgid "Discriminator of an entity"
+msgstr "Puedes también declarar tu propias consultas SQL (o HQL) para cargar entidades:"
+
+#: index.docbook:248
+msgid "{[aliasname].class}"
+msgstr ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\" lock-mode=\"upgrade\"/>\n"
+ " SELECT NAME AS {pers.name}, ID AS {pers.id} \n"
+ " FROM PERSON \n"
+ " WHERE ID=? \n"
+ " FOR UPDATE\n"
+ "</sql-query>]]>"
+
+#: index.docbook:250
+msgid "DISC as {item.class}"
+msgstr "Esto es sólo una declaración de consulta con nombrem como se ha discutido anteriormente. Puedes hacer referencia a esta consulta con nombre en un mapeo de clase:"
+
+#: index.docbook:254
+msgid "All properties of an entity"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <loader query-ref=\"person\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:256, index.docbook:304
+msgid "{[aliasname].*}"
+msgstr "Esto incluso funciona con procedimientos almacenados."
+
+#: index.docbook:258
+msgid "{item.*}"
+msgstr "Puedes incluso definit una consulta para la carga de colecciones:"
+
+#: index.docbook:262
+msgid "A collection key"
+msgstr ""
+ "<![CDATA[<set name=\"employments\" inverse=\"true\">\n"
+ " <key/>\n"
+ " <one-to-many class=\"Employment\"/>\n"
+ " <loader query-ref=\"employments\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:264
+msgid "{[aliasname].key}"
+msgstr ""
+ "<![CDATA[<sql-query name=\"employments\">\n"
+ " <load-collection alias=\"emp\" role=\"Person.employments\"/>\n"
+ " SELECT {emp.*}\n"
+ " FROM EMPLOYMENT emp\n"
+ " WHERE EMPLOYER = :id\n"
+ " ORDER BY STARTDATE ASC, EMPLOYEE ASC\n"
+ "</sql-query>]]>"
+
+#: index.docbook:266
+msgid "ORGID as {coll.key}"
+msgstr "Podrías incluso definir un cargador de entidades que cargue una colección por recuperación por unión (join fetching):"
+
+#: index.docbook:270
+msgid "The id of an collection"
+msgstr ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\"/>\n"
+ " <return-join alias=\"emp\" property=\"pers.employments\"/> \n"
+ " SELECT NAME AS {pers.*}, {emp.*}\n"
+ " FROM PERSON pers\n"
+ " LEFT OUTER JOIN EMPLOYMENT emp \n"
+ " ON pers.ID = emp.PERSON_ID\n"
+ " WHERE ID=?\n"
+ "</sql-query>]]>"
+
+#: index.docbook:272
+msgid "{[aliasname].id}"
+msgstr ""
+
+#: index.docbook:274
+msgid "EMPID as {coll.id}"
+msgstr ""
+
+#: index.docbook:278
+msgid "The element of an collection"
+msgstr ""
+
+#: index.docbook:280
+msgid "{[aliasname].element}"
+msgstr ""
+
+#: index.docbook:282
+msgid "XID as {coll.element}"
+msgstr ""
+
+#: index.docbook:286
+msgid "roperty of the element in the collection"
+msgstr ""
+
+#: index.docbook:288
+msgid "{[aliasname].element.[propertyname]}"
+msgstr ""
+
+#: index.docbook:290
+msgid "NAME as {coll.element.name}"
+msgstr ""
+
+#: index.docbook:294
+msgid "All properties of the element in the collection"
+msgstr ""
+
+#: index.docbook:296
+msgid "{[aliasname].element.*}"
+msgstr ""
+
+#: index.docbook:298
+msgid "{coll.element.*}"
+msgstr ""
+
+#: index.docbook:302
+msgid "All properties of the the collection"
+msgstr ""
+
+#: index.docbook:306
+msgid "{coll.*}"
+msgstr ""
+
+#: index.docbook:315
+msgid "Returning non-managed entities"
+msgstr ""
+
+#: index.docbook:317
+msgid "It is possible to apply a ResultTransformer to native sql queries. Allowing it to e.g. return non-managed entities."
+msgstr ""
+
+#: index.docbook:319
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT NAME, BIRTHDATE FROM CATS\")\n"
+ " .setResultTransformer(Transformers.aliasToBean(CatDTO.class))]]>"
+msgstr ""
+
+#: index.docbook:329
+msgid "a result transformer"
+msgstr ""
+
+#: index.docbook:333
+msgid "The above query will return a list of <literal>CatDTO</literal> which has been instantiated and injected the values of NAME and BIRTHNAME into its corresponding properties or fields."
+msgstr ""
+
+#: index.docbook:340
+msgid "Handling inheritance"
+msgstr ""
+
+#: index.docbook:342
+msgid "Native sql queries which query for entities that is mapped as part of an inheritance must include all properties for the baseclass and all it subclasses."
+msgstr ""
+
+#: index.docbook:348
+msgid "Parameters"
+msgstr ""
+
+#: index.docbook:350
+msgid "Native sql queries support positional as well as named parameters:"
+msgstr ""
+
+#: index.docbook:353
+msgid ""
+ "<![CDATA[Query query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like ?\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(0, \"Pus%\").list();\n"
+ " \n"
+ "query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like :name\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(\"name\", \"Pus%\").list(); ]]>"
+msgstr ""
+
+#: index.docbook:361
+msgid "Named SQL queries"
+msgstr ""
+
+#: index.docbook:363
+msgid "Named SQL queries may be defined in the mapping document and called in exactly the same way as a named HQL query. In this case, we do <emphasis>not</emphasis> need to call <literal>addEntity()</literal>."
+msgstr ""
+
+#: index.docbook:368
+msgid ""
+ "<![CDATA[<sql-query name=\"persons\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex}\n"
+ " FROM PERSON person\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:370
+msgid ""
+ "<![CDATA[List people = sess.getNamedQuery(\"persons\")\n"
+ " .setString(\"namePattern\", namePattern)\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:372
+msgid "The <literal><return-join></literal> and <literal><load-collection></literal> elements are used to join associations and define queries which initialize collections, respectively."
+msgstr ""
+
+#: index.docbook:377
+msgid ""
+ "<![CDATA[<sql-query name=\"personsWith\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:379
+msgid "A named SQL query may return a scalar value. You must declare the column alias and Hibernate type using the <literal><return-scalar></literal> element:"
+msgstr ""
+
+#: index.docbook:383
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return-scalar column=\"name\" type=\"string\"/>\n"
+ " <return-scalar column=\"age\" type=\"long\"/>\n"
+ " SELECT p.NAME AS name,\n"
+ " p.AGE AS age,\n"
+ " FROM PERSON p WHERE p.NAME LIKE 'Hiber%'\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:385
+msgid "You can externalize the resultset mapping informations in a <literal><resultset></literal> element to either reuse them accross several named queries or through the <literal>setResultSetMapping()</literal> API."
+msgstr ""
+
+#: index.docbook:390
+msgid ""
+ "<![CDATA[<resultset name=\"personAddress\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ "</resultset>\n"
+ "\n"
+ "<sql-query name=\"personsWith\" resultset-ref=\"personAddress\">\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:392
+msgid "You can alternatively use the resultset mapping information in your hbm files directly in java code."
+msgstr ""
+
+#: index.docbook:395
+msgid ""
+ "<![CDATA[List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .setResultSetMapping(\"catAndKitten\")\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:398
+msgid "Using return-property to explicitly specify column/alias names"
+msgstr ""
+
+#: index.docbook:401
+msgid "With <literal><return-property></literal> you can explicitly tell Hibernate what column aliases to use, instead of using the <literal>{}</literal>-syntax to let Hibernate inject its own aliases."
+msgstr ""
+
+#: index.docbook:406
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return alias=\"person\" class=\"eg.Person\">\n"
+ " <return-property name=\"name\" column=\"myName\"/>\n"
+ " <return-property name=\"age\" column=\"myAge\"/>\n"
+ " <return-property name=\"sex\" column=\"mySex\"/>\n"
+ " </return>\n"
+ " SELECT person.NAME AS myName,\n"
+ " person.AGE AS myAge,\n"
+ " person.SEX AS mySex,\n"
+ " FROM PERSON person WHERE person.NAME LIKE :name\n"
+ "</sql-query>\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:408
+msgid "<literal><return-property></literal> also works with multiple columns. This solves a limitation with the <literal>{}</literal>-syntax which can not allow fine grained control of multi-column properties."
+msgstr ""
+
+#: index.docbook:413
+msgid ""
+ "<![CDATA[<sql-query name=\"organizationCurrentEmployments\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " <return-property name=\"endDate\" column=\"myEndDate\"/>\n"
+ " </return>\n"
+ " SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},\n"
+ " STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},\n"
+ " REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT\n"
+ " WHERE EMPLOYER = :id AND ENDDATE IS NULL\n"
+ " ORDER BY STARTDATE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:415
+msgid "Notice that in this example we used <literal><return-property></literal> in combination with the <literal>{}</literal>-syntax for injection. Allowing users to choose how they want to refer column and properties."
+msgstr ""
+
+#: index.docbook:420
+msgid "If your mapping has a discriminator you must use <literal><return-discriminator></literal> to specify the discriminator column."
+msgstr ""
+
+#: index.docbook:426
+msgid "Using stored procedures for querying"
+msgstr ""
+
+#: index.docbook:428
+msgid "Hibernate 3 introduces support for queries via stored procedures and functions. Most of the following documentation is equivalent for both. The stored procedure/function must return a resultset as the first out-parameter to be able to work with Hibernate. An example of such a stored function in Oracle 9 and higher is as follows:"
+msgstr ""
+
+#: index.docbook:434
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION selectAllEmployments\n"
+ " RETURN SYS_REFCURSOR\n"
+ "AS\n"
+ " st_cursor SYS_REFCURSOR;\n"
+ "BEGIN\n"
+ " OPEN st_cursor FOR\n"
+ " SELECT EMPLOYEE, EMPLOYER,\n"
+ " STARTDATE, ENDDATE,\n"
+ " REGIONCODE, EID, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT;\n"
+ " RETURN st_cursor;\n"
+ " END;]]>"
+msgstr ""
+
+#: index.docbook:436
+msgid "To use this query in Hibernate you need to map it via a named query."
+msgstr ""
+
+#: index.docbook:439
+msgid ""
+ "<![CDATA[<sql-query name=\"selectAllEmployees_SP\" callable=\"true\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"employee\" column=\"EMPLOYEE\"/>\n"
+ " <return-property name=\"employer\" column=\"EMPLOYER\"/>\n"
+ " <return-property name=\"startDate\" column=\"STARTDATE\"/>\n"
+ " <return-property name=\"endDate\" column=\"ENDDATE\"/>\n"
+ " <return-property name=\"regionCode\" column=\"REGIONCODE\"/>\n"
+ " <return-property name=\"id\" column=\"EID\"/>\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " </return>\n"
+ " { ? = call selectAllEmployments() }\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:441
+msgid "Notice stored procedures currently only return scalars and entities. <literal><return-join></literal> and <literal><load-collection></literal> are not supported."
+msgstr ""
+
+#: index.docbook:446
+msgid "Rules/limitations for using stored procedures"
+msgstr ""
+
+#: index.docbook:448
+msgid "To use stored procedures with Hibernate the procedures/functions have to follow some rules. If they do not follow those rules they are not usable with Hibernate. If you still want to use these procedures you have to execute them via <literal>session.connection()</literal>. The rules are different for each database, since database vendors have different stored procedure semantics/syntax."
+msgstr ""
+
+#: index.docbook:455
+msgid "Stored procedure queries can't be paged with <literal>setFirstResult()/setMaxResults()</literal>."
+msgstr ""
+
+#: index.docbook:458
+msgid "Recommended call form is standard SQL92: <literal>{ ? = call functionName(<parameters>) }</literal> or <literal>{ ? = call procedureName(<parameters>}</literal>. Native call syntax is not supported."
+msgstr ""
+
+#: index.docbook:463
+msgid "For Oracle the following rules apply:"
+msgstr ""
+
+#: index.docbook:467
+msgid "A function must return a result set. The first parameter of a procedure must be an <literal>OUT</literal> that returns a result set. This is done by using a <literal>SYS_REFCURSOR</literal> type in Oracle 9 or 10. In Oracle you need to define a <literal>REF CURSOR</literal> type, see Oracle literature."
+msgstr ""
+
+#: index.docbook:476
+msgid "For Sybase or MS SQL server the following rules apply:"
+msgstr ""
+
+#: index.docbook:480
+msgid "The procedure must return a result set. Note that since these servers can/will return multiple result sets and update counts, Hibernate will iterate the results and take the first result that is a result set as its return value. Everything else will be discarded."
+msgstr ""
+
+#: index.docbook:488
+msgid "If you can enable <literal>SET NOCOUNT ON</literal> in your procedure it will probably be more efficient, but this is not a requirement."
+msgstr ""
+
+#: index.docbook:498
+msgid "Custom SQL for create, update and delete"
+msgstr ""
+
+#: index.docbook:500
+msgid "Hibernate3 can use custom SQL statements for create, update, and delete operations. The class and collection persisters in Hibernate already contain a set of configuration time generated strings (insertsql, deletesql, updatesql etc.). The mapping tags <literal><sql-insert></literal>, <literal><sql-delete></literal>, and <literal><sql-update></literal> override these strings:"
+msgstr ""
+
+#: index.docbook:508
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>\n"
+ " <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>\n"
+ " <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:510
+msgid "The SQL is directly executed in your database, so you are free to use any dialect you like. This will of course reduce the portability of your mapping if you use database specific SQL."
+msgstr ""
+
+#: index.docbook:514
+msgid "Stored procedures are supported if the <literal>callable</literal> attribute is set:"
+msgstr ""
+
+#: index.docbook:517
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert callable=\"true\">{call createPerson (?, ?)}</sql-insert>\n"
+ " <sql-delete callable=\"true\">{? = call deletePerson (?)}</sql-delete>\n"
+ " <sql-update callable=\"true\">{? = call updatePerson (?, ?)}</sql-update>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:519
+msgid "The order of the positional parameters are currently vital, as they must be in the same sequence as Hibernate expects them."
+msgstr ""
+
+#: index.docbook:522
+msgid "You can see the expected order by enabling debug logging for the <literal>org.hibernate.persister.entity</literal> level. With this level enabled Hibernate will print out the static SQL that is used to create, update, delete etc. entities. (To see the expected sequence, remember to not include your custom SQL in the mapping files as that will override the Hibernate generated static sql.)"
+msgstr ""
+
+#: index.docbook:529
+msgid "The stored procedures are in most cases (read: better do it than not) required to return the number of rows inserted/updated/deleted, as Hibernate has some runtime checks for the success of the statement. Hibernate always registers the first statement parameter as a numeric output parameter for the CUD operations:"
+msgstr ""
+
+#: index.docbook:535
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)\n"
+ " RETURN NUMBER IS\n"
+ "BEGIN\n"
+ "\n"
+ " update PERSON\n"
+ " set\n"
+ " NAME = uname,\n"
+ " where\n"
+ " ID = uid;\n"
+ "\n"
+ " return SQL%ROWCOUNT;\n"
+ "\n"
+ "END updatePerson;]]>"
+msgstr ""
+
+#: index.docbook:539
+msgid "Custom SQL for loading"
+msgstr ""
+
+#: index.docbook:541
+msgid "You may also declare your own SQL (or HQL) queries for entity loading:"
+msgstr ""
+
+#: index.docbook:544
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\" lock-mode=\"upgrade\"/>\n"
+ " SELECT NAME AS {pers.name}, ID AS {pers.id}\n"
+ " FROM PERSON\n"
+ " WHERE ID=?\n"
+ " FOR UPDATE\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:546
+msgid "This is just a named query declaration, as discussed earlier. You may reference this named query in a class mapping:"
+msgstr ""
+
+#: index.docbook:549
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <loader query-ref=\"person\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:551
+msgid "This even works with stored procedures."
+msgstr ""
+
+#: index.docbook:553
+msgid "You may even define a query for collection loading:"
+msgstr ""
+
+#: index.docbook:555
+msgid ""
+ "<![CDATA[<set name=\"employments\" inverse=\"true\">\n"
+ " <key/>\n"
+ " <one-to-many class=\"Employment\"/>\n"
+ " <loader query-ref=\"employments\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:557
+msgid ""
+ "<![CDATA[<sql-query name=\"employments\">\n"
+ " <load-collection alias=\"emp\" role=\"Person.employments\"/>\n"
+ " SELECT {emp.*}\n"
+ " FROM EMPLOYMENT emp\n"
+ " WHERE EMPLOYER = :id\n"
+ " ORDER BY STARTDATE ASC, EMPLOYEE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:559
+msgid "You could even define an entity loader that loads a collection by join fetching:"
+msgstr ""
+
+#: index.docbook:562
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\"/>\n"
+ " <return-join alias=\"emp\" property=\"pers.employments\"/>\n"
+ " SELECT NAME AS {pers.*}, {emp.*}\n"
+ " FROM PERSON pers\n"
+ " LEFT OUTER JOIN EMPLOYMENT emp\n"
+ " ON pers.ID = emp.PERSON_ID\n"
+ " WHERE ID=?\n"
+ "</sql-query>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/quickstart.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/quickstart.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/quickstart.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,474 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "appended paragraph 1"
+msgstr "Comienzo rápido con Tomcat"
+
+#: index.docbook:8
+msgid "appended paragraph 2"
+msgstr "Empezando con Hibernate"
+
+#: index.docbook:10
+msgid "appended paragraph 3"
+msgstr "Este tutorial explica una instalación de Hibernate con el contenedor de servlets Apache Tomcat (hemos usado la versión 4.1, las diferencias con la 5.0 deben ser mínimas) para una aplicación basada en web. Hibernate trabaja bien en un entorno manejado con todos los servidores de aplicaciones J2EE importantes, o incluso en aplicaciones Java independientes. El sistema de base de datos es sólo una cuestión de cambiar la configuración del dialecto SQL de Hibernate y las propiedades de conexión."
+
+#: index.docbook:21
+msgid "appended paragraph 4"
+msgstr "Primero, tenemos que copiar todas las bibliotecas requeridas a la instalación de Tomcat. Usamos un contexto web separado (<literal>webapps/quickstart</literal>) para este tutorial, de modo que tenemos que considerar tanto la ruta de búsqueda de bibliotecas global (<literal>TOMCAT/common/lib</literal>) como también el cargador de clases a nivel de contexto en <literal>webapps/quickstart/WEB-INF/lib</literal> (para ficheros JAR) y <literal>webapps/quickstart/WEB-INF/classes</literal>. Nos referiremos a ambos niveles de cargador de clases como el classpath global y el classpath de contexto, respectivamente."
+
+#: index.docbook:32
+msgid "appended paragraph 5"
+msgstr "Ahora, copia las bibliotecas a los dos classpaths:"
+
+#: index.docbook:38
+msgid "appended paragraph 6"
+msgstr "Copia el driver JDBC para la base de datos al classpath global. Esto se requiere para el software de pool de conexiones DBCP que se distribuye con Tomcat. Hibernate usa conexiones JDBC para ejecutar SQL sobre la base de datos, de modo que, o bien tienes que proveer conexiones JDBC en pool, o bien configurar Hibernate para que use uno de los pools soportados directamente (C3P0, Proxool). Para este tutorial, copia la biblioteca <literal>pg74jdbc3.jar</literal> (para PostgreSQL 7.4 y JDK 1.4) al classpath del cargador global. Si quisieras usar una base de datos diferente, simplemente copia su apropiado driver JDBC."
+
+#: index.docbook:51
+msgid "appended paragraph 7"
+msgstr "Nunca copies nada más dentro de la ruta del cargador de clases global en Tomcat, o tendrás problemas con varias herramientas, incluyendo Log4J, commons-logging y otras. Siempre usa el classpath de contexto para cada aplicación web, esto es, copia las bibliotecas a <literal>WEB-INF/lib</literal> y tus propias clases y ficheros de configuración/propiedades a <literal>WEB-INF/classes</literal>. Ambos directorios están a nivel del classpath de contexto por defecto."
+
+#: index.docbook:62
+msgid "appended paragraph 8"
+msgstr "Hibernate está empaquetado como una biblioteca JAR. El fichero <literal>hibernate3.jar</literal> debe ser copiado en el classpath de contexto junto a las otras clases de la aplicación. Hibernate requiere algunas bibliotecas de terceros en tiempo de ejecución; éstas vienen incluídas con la distribución de Hibernate en el directorio <literal>lib/</literal>. Ver <xref linkend=\"3rdpartylibs\"/>. Copia las bibliotecas de terceros requeridas al classpath de contexto."
+
+#: index.docbook:75
+msgid "appended paragraph 9"
+msgstr "Bibliotecas de terceros de Hibernate"
+
+#: index.docbook:83
+msgid "appended paragraph 10"
+msgstr "Biblioteca"
+
+#: index.docbook:86
+msgid "appended paragraph 11"
+msgstr "Descripción"
+
+#: index.docbook:93
+msgid "appended paragraph 12"
+msgstr "antlr (requerida)"
+
+#: index.docbook:96
+msgid "appended paragraph 13"
+msgstr "Hibernate usa ANTLR para producir analizadores de consultas, esta biblioteca también se necesita en tiempo de ejecución."
+
+#: index.docbook:102
+msgid "appended paragraph 14"
+msgstr "dom4j (requerida)"
+
+#: index.docbook:105
+msgid "appended paragraph 15"
+msgstr "Hibernate usa dom4j para analizar ficheros de configuración XML y ficheros de metadatos de mapeo XML."
+
+#: index.docbook:111
+msgid "appended paragraph 16"
+msgstr "CGLIB, asm (requerida)"
+
+#: index.docbook:114
+msgid "appended paragraph 17"
+msgstr "Hibernate usa la biblioteca de generación de código para aumentar las clases en tiempo de ejecución (en combinación con reflección Java)."
+
+#: index.docbook:121
+msgid "appended paragraph 18"
+msgstr "Commons Collections, Commons Logging (requeridas)"
+
+#: index.docbook:124
+msgid "appended paragraph 19"
+msgstr "Hibernate usa varias bibliotecas de utilidad del proyecto Jakarta Commons de Apache."
+
+#: index.docbook:130
+msgid "appended paragraph 20"
+msgstr "EHCache (requerida)"
+
+#: index.docbook:133
+msgid "appended paragraph 21"
+msgstr "Hibernate puede usar varios provedores de caché para el caché de segundo nivel. EHCache es el provedor de caché por defecto si no se cambia en la configuración."
+
+#: index.docbook:140
+msgid "appended paragraph 22"
+msgstr "Log4j (opcional)"
+
+#: index.docbook:143
+msgid "appended paragraph 23"
+msgstr "Hibernate usa la API de Commons Logging, que a su vez puede usar Log4J como el mecanismo de logging subyacente. Si la biblioteca Log4J está disponible en el directorio de bibliotecas del contexto, Commons Logging usará Log4J y la configuración <literal>log4j.properties</literal> en el classpath de contexto. Un fichero de propiedades de ejemplo para Log4J se incluye con la distribución de Hibernate. Así que copia log4j.jar y el fichero de configuración (de <literal>src/</literal>) a tu classpath de contexto si quieres ver que ocurre tras escénas."
+
+#: index.docbook:157
+msgid "appended paragraph 24"
+msgstr "¿Requerida o no?"
+
+#: index.docbook:160
+msgid "appended paragraph 25"
+msgstr "Echa una mirada al fichero <literal>lib/README.txt</literal> en la distribución de Hibernate. Esta es una lista actualizada de bibliotecas de terceros distribuídas con Hibernate. Encontrarás listadas ahí todas las bibliotecas requeridas y opcionales (Observa que \"buildtame required\" significa aquí para la construcción de Hibernate, no de tu aplicación)."
+
+#: index.docbook:174
+msgid "appended paragraph 26"
+msgstr "Ahora instalamos el pooling y modo compartido de conexiones de base de datos tanto en Tomcat como Hibernate. Esto significa que Tomcat proveerá conexiones JDBC en pool (usando su funcionalidad prefabricada de pooling DBCP). Hibernate pide esas conexiones a través de JNDI. Alternativamente, puedes dejar que Hibernate maneje el pool de conexiones. Tomcat liga su pool de conexiones a JNDI; agregamos una declaración de recurso al fichero de configuración principal de Tomcat, <literal>TOMCAT/conf/server.xml</literal>:"
+
+#: index.docbook:184
+msgid "appended paragraph 27"
+msgstr ""
+ "<![CDATA[<Context path=\"/quickstart\" docBase=\"quickstart\">\n"
+ " <Resource name=\"jdbc/quickstart\" scope=\"Shareable\" type=\"javax.sql.DataSource\"/>\n"
+ " <ResourceParams name=\"jdbc/quickstart\">\n"
+ " <parameter>\n"
+ " <name>factory</name>\n"
+ " <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>\n"
+ " </parameter>\n"
+ "\n"
+ " <!-- DBCP database connection settings -->\n"
+ " <parameter>\n"
+ " <name>url</name>\n"
+ " <value>jdbc:postgresql://localhost/quickstart</value>\n"
+ " </parameter>\n"
+ " <parameter>\n"
+ " <name>driverClassName</name><value>org.postgresql.Driver</value>\n"
+ " </parameter>\n"
+ " <parameter>\n"
+ " <name>username</name>\n"
+ " <value>quickstart</value>\n"
+ " </parameter>\n"
+ " <parameter>\n"
+ " <name>password</name>\n"
+ " <value>secret</value>\n"
+ " </parameter>\n"
+ "\n"
+ " <!-- DBCP connection pooling options -->\n"
+ " <parameter>\n"
+ " <name>maxWait</name>\n"
+ " <value>3000</value>\n"
+ " </parameter>\n"
+ " <parameter>\n"
+ " <name>maxIdle</name>\n"
+ " <value>100</value>\n"
+ " </parameter>\n"
+ " <parameter>\n"
+ " <name>maxActive</name>\n"
+ " <value>10</value>\n"
+ " </parameter>\n"
+ " </ResourceParams>\n"
+ "</Context>]]>"
+
+#: index.docbook:186
+msgid "appended paragraph 28"
+msgstr "El contexto que configuramos en este ejemplo se llama <literal>quickstart</literal>, su base es el directorio <literal>TOMCAT/webapp/quickstart</literal>. Para acceder a cualquier servlet, llama a la ruta <literal>http://localhost:8080/quickstart</literal> en tu navegador (por supuesto, agregando el nombre del servlet como se mapee en tu <literal>web.xml</literal>). Puedes también ir más allá y crear ahora un servlet simple que tenga un método <literal>process()</literal> vacío."
+
+#: index.docbook:196
+msgid "appended paragraph 29"
+msgstr "Tomcat provee ahora conexiones a través de JNDI en <literal>java:comp/env/jdbc/quickstart</literal>. Si tienes problemas obteniendo el pool de conexiones en ejecución, refiérete a la documentación de Tomcat. Si obtienes mensajes de excepción del driver JDBC, intenta instalar primero el pool de conexiones JDBC sin Hibernate. Hay disponibles en la Web tutoriales de Tomcat y JDBC."
+
+#: index.docbook:205
+msgid "appended paragraph 30"
+msgstr "Tu próximo paso es configurar Hibernate. Hibernate tiene que saber cómo debe obtener conexiones JDBC. Usamos la configuración de Hibernate basada en XML. El otro enfoque, usando un ficheros de propiedad, es casi equivalente pero pierde unas pocas funcionalidades que sí permite la sintaxis XML. El fichero de configuración XML se ubica en el classpath de contexto (<literal>WEB-INF/classes</literal>), como <literal>hibernate.cfg.xml</literal>:"
+
+#: index.docbook:214
+msgid "appended paragraph 31"
+msgstr ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <property name=\"connection.datasource\">java:comp/env/jdbc/quickstart</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.PostgreSQLDialect</property>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <mapping resource=\"Cat.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:216
+msgid "appended paragraph 32"
+msgstr "Desactivamos el registro (logging) de comandos SQL y decimos a Hibernate qué dialecto SQL de base de datos se usa y dónde obtener conexiones JDBC (declarando la dirección JNDI del pool ligado a Tomcat). El dialecto es una configuración requerida, las bases de datos difieren en su interpretación del \"estándar\" de SQL. Hibernate cuidará de las diferencias y viene con dialectos incluídos para todas las principales bases de datos comerciales y de código abierto."
+
+#: index.docbook:227
+msgid "appended paragraph 33"
+msgstr "Una <literal>SessionFactory</literal> es el concepto de Hibernate de un almacén de datos solo. Pueden usarse múltiples bases de datos creando múltiples ficheros de configuración XML y creando múltiples objetos <literal>Configuration</literal> y <literal>SessionFactory</literal> en tu aplicación."
+
+#: index.docbook:235
+msgid "appended paragraph 34"
+msgstr "El último elemento del <literal>hibernate.cfg.xml</literal> declara <literal>Cat.hbm.xml</literal> como el nombre de un fichero de mapeo XML para la clase persistente <literal>Cat</literal>. Este fichero contiene los metadatos para el mapeo de la clase POJO <literal>Cat</literal> a una tabla (o tablas) de base de datos. Volveremos a este fichero pronto. Escribamos primero la clase POJO y luego declaremos los metadatos de mapeo para ella."
+
+#: index.docbook:248
+msgid "appended paragraph 35"
+msgstr "Primera clase persistente"
+
+#: index.docbook:250
+msgid "appended paragraph 36"
+msgstr "Hibernate trabaja mejor con el modelo de programación de los Viejos Objetos Planos de Java (POJOs, a veces llamados Ordinarios Objetos Planos de Java) para clases persistentes. Un POJO es como un JavaBean, con las propiedades de la clase accesible vía métodos getter y setter, encapsulando la representación interna de la interfaz publicamente visible (Hibernate puede también acceder a los campos directamente, si se necesita):"
+
+#: index.docbook:260
+msgid "appended paragraph 37"
+msgstr ""
+ "<![CDATA[package org.hibernate.examples.quickstart;\n"
+ "\n"
+ "public class Cat {\n"
+ "\n"
+ " private String id;\n"
+ " private String name;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " public Cat() {\n"
+ " }\n"
+ "\n"
+ " public String getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(String id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ "\n"
+ " public void setName(String name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ "\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " public void setSex(char sex) {\n"
+ " this.sex = sex;\n"
+ " }\n"
+ "\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:262
+msgid "appended paragraph 38"
+msgstr "Hibernate no está restringido en su uso de tipos de propiedad, todos los tipos y tipos primitivos del JDK de Java (como <literal>String</literal>, <literal>char</literal> y <literal>Date</literal>) pueden ser mapeados, incluyendo clases del framework de colecciones de Java. Puedes mapearlos como valores, colecciones de valores, o asociaciones a otras entidades. El <literal>id</literal> es una propiedad especial que representa el identificador de base de datos (clave primaria) de la clase. Es altamente recomendado para entidades como un <literal>Cat</literal>. Hibernate puede usar identificadores sólo internamente, pero perderíamos algo de la flexibilidad en nuestra arquitectura de aplicación."
+
+#: index.docbook:275
+msgid "appended paragraph 39"
+msgstr "No tiene que implementarse ninguna interface especial para las clases persistentes ni tienes que subclasear de una clase persistente raíz en especial. Hibernate tampoco requiere ningún procesamiento en tiempo de construcción, como manipulación del byte-code. Se basa solamente en reflección de Java y aumentación de clases en tiempo de ejecución (a través de CGLIB). De modo que, sin ninguna dependencia de la clase POJO en Hibernate, podemos mapearla a una tabla de base de datos."
+
+#: index.docbook:288
+msgid "appended paragraph 40"
+msgstr "Mapeando el gato"
+
+#: index.docbook:290
+msgid "appended paragraph 41"
+msgstr "El fichero de mapeo <literal>Cat.hbm.xml</literal> contiene los metadatos requeridos para el mapeo objeto/relacional. Los metadatos incluyen la declaración de clases persistentes y el mapeo de propiedades (a columnas y relaciones de claves foráneas a otras entidades) a tablas de base de datos."
+
+#: index.docbook:298
+msgid "appended paragraph 42"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"org.hibernate.examples.quickstart.Cat\" table=\"CAT\">\n"
+ "\n"
+ " <!-- A 32 hex character is our surrogate key. It's automatically\n"
+ " generated by Hibernate with the UUID pattern. -->\n"
+ " <id name=\"id\" type=\"string\" unsaved-value=\"null\" >\n"
+ " <column name=\"CAT_ID\" sql-type=\"char(32)\" not-null=\"true\"/>\n"
+ " <generator class=\"uuid.hex\"/>\n"
+ " </id>\n"
+ "\n"
+ " <!-- A cat has to have a name, but it shouldn' be too long. -->\n"
+ " <property name=\"name\">\n"
+ " <column name=\"NAME\" length=\"16\" not-null=\"true\"/>\n"
+ " </property>\n"
+ "\n"
+ " <property name=\"sex\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:300
+msgid "appended paragraph 43"
+msgstr "Cada clase persistente debe tener un atributo identificador (realmente, sólo las clases que representen entidades, no las clases dependientes de tipo-valor, que son mapeadas como componentes de una entidad). Esta propiedad es usada para distinguir los objetos persistentes: Dos gatos son iguales si <literal>catA.getId().equals(catB.getId())</literal> es verdadero. Este concepto se llama <emphasis>identidad de base de datos (database identity)</emphasis>. Hibernate viene empaquetado con varios generadores de identificador para diferentes escenarios (incluyendo generadores nativos para secuencias de base de datos, tablas de identificadores alto/bajo, e identificadores asignados por aplicación). Usamos el generador UUID (recomendado sólo para pruebas, pues deben preferirse las claves enteras delegadas generadas por la base de datos) y también especificamos la columna <literal>CAT_ID</literal> de la tabla <literal>CAT</literal> para el valor i!
dentificador generado por Hibernate (como una clave primaria de la tabla)."
+
+#: index.docbook:317
+msgid "appended paragraph 44"
+msgstr "Todas las demás propiedades de <literal>Cat</literal> son mapeadas a la misma tabla. En el caso de la propiedad <literal>name</literal>, la hemos mapeado con una declaración explícita de columna de base de datos. Esto es especialmente útil cuando el esquema de base de datos es generado automáticamente (como sentencias DDL de SQL) desde la declaración de mapeo con la herramienta <emphasis>SchemaExport</emphasis> de Hibernate. Todas las demás propiedades son mapeadas usando la configuración por defecto de Hibernate, que es lo que necesitas la mayoría del tiempo. La tabla <literal>CAT</literal> en la base de datos se ve así como:"
+
+#: index.docbook:329
+msgid "appended paragraph 45"
+msgstr ""
+ "<![CDATA[ Columna | Tipo | Modificadores\n"
+ "--------+-----------------------+-----------\n"
+ " cat_id | character(32) | not null\n"
+ " name | character varying(16) | not null\n"
+ " sex | character(1) |\n"
+ " weight | real |\n"
+ "Indexes: cat_pkey primary key btree (cat_id)]]>"
+
+#: index.docbook:331
+msgid "appended paragraph 46"
+msgstr "Ahora debes crear esta tabla manualmente en tu base de datos, y luego leer el <xref linkend=\"toolsetguide\"/> si quieres automatizar este paso con la herramienta <literal>hbm2ddl</literal>. Esta herramienta puede crear un DDL SQL completo, incluyendo definición de tablas, restricciones personalizadas de tipo de columnas, restricciones de unicidad e índices."
+
+#: index.docbook:342
+msgid "appended paragraph 47"
+msgstr "Jugando con gatos"
+
+#: index.docbook:344
+msgid "appended paragraph 48"
+msgstr "Ahora estamos listos para comenzar la <literal>Session</literal> de Hibernate. Es el <emphasis>manejador de persistencia</emphasis> que usamos para almacenar y traer <literal>Cat</literal>s hacia y desde la base de datos. Pero primero, tenemos que obtener una <literal>Session</literal> (unidad de trabajo de Hibernate) de la <literal>SessionFactory</literal>:"
+
+#: index.docbook:352
+msgid "appended paragraph 49"
+msgstr ""
+ "<![CDATA[SessionFactory sessionFactory =\n"
+ " new Configuration().configure().buildSessionFactory();]]>"
+
+#: index.docbook:354
+msgid "appended paragraph 50"
+msgstr "La llamada a <literal>configure()</literal> carga el fichero de configuración <literal>hibernate.cfg.xml</literal> e inicializa la instancia de <literal>Configuration</literal>. Puedes establecer otras propiedades (e incluso cambiar los metadatos de mapeo) accediendo a la <literal>Configuration</literal> <emphasis>antes</emphasis> que construyas la <literal>SessionFactory</literal> (que es inmutable). ¿Dónde creamos la <literal>SessionFactory</literal> y cómo accedemos a ella en nuestra aplicación?"
+
+#: index.docbook:365
+msgid "appended paragraph 51"
+msgstr "Una <literal>SessionFactory</literal> usualmente se construye una vez, por ejemplo, al arrancar con un servlet <emphasis>load-on-startup</emphasis>. Esto significa también que no debes mantenerla en una variable de instancia en tus servlets, sino en alguna otro sitio. Además, necesitamos algún tipo de <emphasis>Singleton</emphasis>, de modo que podamos acceder a la <literal>SessionFactory</literal> fácilmente en el código de aplicación. El siguiente enfoque mostrado resuelve ambos problemas: configuración de arranque y fácil acceso a una <literal>SessionFactory</literal>."
+
+#: index.docbook:377
+msgid "appended paragraph 52"
+msgstr "Implementamos una clase de ayuda <literal>HibernateUtil</literal>:"
+
+#: index.docbook:381
+msgid "appended paragraph 53"
+msgstr ""
+ "<![CDATA[import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ "\n"
+ " private static Logger log = LoggerFactory.getLogger(HibernateUtil.class);\n"
+ "\n"
+ " private static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Create the SessionFactory\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " log.error(\"Initial SessionFactory creation failed.\", ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static final ThreadLocal session = new ThreadLocal();\n"
+ "\n"
+ " public static Session currentSession() {\n"
+ " Session s = (Session) session.get();\n"
+ " // Open a new Session, if this Thread has none yet\n"
+ " if (s == null) {\n"
+ " s = sessionFactory.openSession();\n"
+ " session.set(s);\n"
+ " }\n"
+ " return s;\n"
+ " }\n"
+ "\n"
+ " public static void closeSession() {\n"
+ " Session s = (Session) session.get();\n"
+ " if (s != null)\n"
+ " s.close();\n"
+ " session.set(null);\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:383
+msgid "appended paragraph 54"
+msgstr "Esta clase no sólo cuida de la <literal>SessionFactory</literal> con su inicializador static, sino que además tiene una variable <literal>ThreadLocal</literal> que tiene la <literal>Session</literal> para la hebra actual. Asegúrate de entender el concepto Java de una variable local a una hebra antes de intentar usar esta ayuda. Una clase <literal>HibernateUtil</literal> más compleja y potente puede encontrarse en <literal>CaveatEmptor</literal>, http://caveatemptor.hibernate.org/"
+
+#: index.docbook:393
+msgid "appended paragraph 55"
+msgstr "Una <literal>SessionFactory</literal> es segura entre hebras, muchas hebras pueden acceder a ella concurrentemente y pedirle <literal>Session</literal>s. Una <literal>Session</literal> no es un objeto seguro entre hebras que representa una sola unidad-de-trabajo con la base de datos. Las <literal>Session</literal>s se abren desde una <literal>SessionFactory</literal> y son cerradas cuando todo el trabajo está completo. Un ejemplo en el método <literal>process()</literal> de tu servlet podría parecerse a esto (sin manejo de excepciones):"
+
+#: index.docbook:404
+msgid "appended paragraph 56"
+msgstr ""
+ "<![CDATA[Session session = HibernateUtil.currentSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Cat princess = new Cat();\n"
+ "princess.setName(\"Princess\");\n"
+ "princess.setSex('F');\n"
+ "princess.setWeight(7.4f);\n"
+ "\n"
+ "session.save(princess);\n"
+ "\n"
+ "tx.commit();\n"
+ "HibernateUtil.closeSession();]]>"
+
+#: index.docbook:406
+msgid "appended paragraph 57"
+msgstr "En una <literal>Session</literal>, cada operación de base de datos ocurre dentro de una transacción que aísla las operaciones de base de datos (incluso operaciones de sólo lectura). Usamos la API de <literal>Transaction</literal> de Hibernate para abstraer de la estrategia de transacciones subyacente (en nuestro caso, transacciones JDBC). Esto permite que nuestro código sea desplegado con transacciones manejadas por contenedor (usando JTA) sin cambio alguno."
+
+#: index.docbook:416
+msgid "appended paragraph 58"
+msgstr "Observa que puedes llamar <literal>HibernateUtil.currentSession();</literal> tantas veces como quieras, siempre obtendrás la <literal>Session</literal> actual de esta hebra. Tienes que asegurarte que la <literal>Session</literal> sea cerrada después que se complete tu unidad-de-trabajo, ya sea en código de tu servlet o en un filtro de servlet antes que la respuesta HTTP sea enviada. El bonito efecto colateral de la segunda opción es la fácil inicialización perezosa: la <literal>Session</literal> todavía está abierta cuando se dibuja la vista, de modo que Hibernate puede cargar objetos no inicializados mientras navegas tu actual grafo de objetos."
+
+#: index.docbook:428
+msgid "appended paragraph 59"
+msgstr "Hibernate tiene varios métodos que pueden ser usados para traer objetos desde la base de datos. La forma más flexible es usando el Lenguaje de Consulta de Hibernate (Hibernate Query Language o HQL), que es una extensión orientada a objetos de SQL fácil de aprender:"
+
+#: index.docbook:436
+msgid "appended paragraph 60"
+msgstr ""
+ "<![CDATA[Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Query query = session.createQuery(\"select c from Cat as c where c.sex = :sex\");\n"
+ "query.setCharacter(\"sex\", 'F');\n"
+ "for (Iterator it = query.iterate(); it.hasNext();) {\n"
+ " Cat cat = (Cat) it.next();\n"
+ " out.println(\"Female Cat: \" + cat.getName() );\n"
+ "}\n"
+ "\n"
+ "tx.commit();]]>"
+
+#: index.docbook:438
+msgid "appended paragraph 61"
+msgstr "Hibernate también ofrece una API <emphasis>consulta por criterios</emphasis> orientada a objetos que puede ser usada para formular consultas de tipo seguro. Por supuesto, Hibernate usa <literal>PreparedStatement</literal>s y ligado de parámetros para toda la comunicación SQL con la base de datos. También puedes usar la funcionalidad de consulta SQL directa de Hibernate u obtener una conexión plana de JDBC de una <literal>Session</literal> en casos raros."
+
+#: index.docbook:451
+msgid "appended paragraph 62"
+msgstr "Finalmente"
+
+#: index.docbook:453
+msgid "appended paragraph 63"
+msgstr "Rasguñamos solamente la superficie de Hibernate en este pequeño tutorial. Por favor, observa que no incluimos ningún código específico de servlet en nuestros ejemplos. Tienes que crear un servlet por tí mismo e insertar el código de Hibernate como lo veas ubicado."
+
+#: index.docbook:461
+msgid "appended paragraph 64"
+msgstr "Ten en mente que Hibernate, como capa de acceso a datos, está firmemente integrado dentro de tu aplicación. Usualmente, todas las otras capas dependen del mecanismo de persistencia. Asegúrate de entender las implicaciones de este diseño."
+
+#: index.docbook:468
+msgid "appended paragraph 65"
+msgstr "Para un ejemplo de aplicación más compleja, ver http://caveatemptor.hibernate.org/ y echa una mirada a los otros tutoriales con links en http://www.hibernate.org/Documentation"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/session_api.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/session_api.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/session_api.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1220 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Working with objects"
+msgstr "Trabajando con objetos"
+
+#: index.docbook:7
+msgid "Hibernate is a full object/relational mapping solution that not only shields the developer from the details of the underlying database management system, but also offers <emphasis>state management</emphasis> of objects. This is, contrary to the management of SQL <literal>statements</literal> in common JDBC/SQL persistence layers, a very natural object-oriented view of persistence in Java applications."
+msgstr "Hibernate es una solución completa de mapeo objeto/relacional que no sólo abstrae al desarrollador de los detalles del sistema de manejo de base datos subyacente, sino que además ofrece <emphasis>manejo de estado</emphasis> de objetos. Esto es, al contrario del manejo de <literal>sentencias</literal> SQL en capas comunes de persistencia JDBC/SQL, una vista de la persistencia en aplicaciones Java muy natural y orientada a objetos."
+
+#: index.docbook:16
+msgid "In other words, Hibernate application developers should always think about the <emphasis>state</emphasis> of their objects, and not necessarily about the execution of SQL statements. This part is taken care of by Hibernate and is only relevant for the application developer when tuning the performance of the system."
+msgstr "En otras palabras, los desarroladores de aplicaciones Hibernate deben siempre pensar en el <emphasis>estado</emphasis> de sus objetos, y no necesariamente en la ejecución de sentencias SQL. Esta parte es cuidada por Hibernate y es sólo relevante para el desarrollador de la aplicación al afinar el rendimiento del sistema."
+
+#: index.docbook:24
+msgid "Hibernate object states"
+msgstr "Estados de objeto de Hibernate"
+
+#: index.docbook:26
+msgid "Hibernate defines and supports the following object states:"
+msgstr "Hibernate define y soporta los siguientes estados de objeto:"
+
+#: index.docbook:32
+msgid "<emphasis>Transient</emphasis> - an object is transient if it has just been instantiated using the <literal>new</literal> operator, and it is not associated with a Hibernate <literal>Session</literal>. It has no persistent representation in the database and no identifier value has been assigned. Transient instances will be destroyed by the garbage collector if the application doesn't hold a reference anymore. Use the Hibernate <literal>Session</literal> to make an object persistent (and let Hibernate take care of the SQL statements that need to be executed for this transition)."
+msgstr "<emphasis>Transitorio</emphasis> - un objeto es transitorio si ha sido recién instanciado usando el operador <literal>new</literal>, y no está asociado a una <literal>Session</literal> de Hibernate. No tiene una representación persistente en la base de datos y no se le ha asignado un valor identificador. Las instancias transitorias serán destruídas por el recolector de basura si la aplicación no mantiene más una referencia. Usa la <literal>Session</literal> de Hibernate para hacer un objeto persistente (y deja que Hibernate cuide de las sentencias SQL que necesitan ejecutarse para esta transición)."
+
+#: index.docbook:44
+msgid "<emphasis>Persistent</emphasis> - a persistent instance has a representation in the database and an identifier value. It might just have been saved or loaded, however, it is by definition in the scope of a <literal>Session</literal>. Hibernate will detect any changes made to an object in persistent state and synchronize the state with the database when the unit of work completes. Developers don't execute manual <literal>UPDATE</literal> statements, or <literal>DELETE</literal> statements when an object should be made transient."
+msgstr "<emphasis>Persistente</emphasis> - una instancia persistente tiene una representación en la base de datos y un valor identificador. Puede haber sido salvado o cargado, sin embargo, está por definición en el ámbito de una <literal>Session</literal>. Hibernate detectará cualquier cambio hecho a un objeto en estado persistentey sincronizará el estado con la base de datos cuando se complete la unidad de trabajo. Los desarrolladores no ejecutan sentencias <literal>UPDATE</literal> manuales, o sentencias <literal>DELETE</literal> cuando un objeto debe ser hecho transitorio."
+
+#: index.docbook:55
+msgid "<emphasis>Detached</emphasis> - a detached instance is an object that has been persistent, but its <literal>Session</literal> has been closed. The reference to the object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be reattached to a new <literal>Session</literal> at a later point in time, making it (and all the modifications) persistent again. This feature enables a programming model for long running units of work that require user think-time. We call them <emphasis>application transactions</emphasis>, i.e. a unit of work from the point of view of the user."
+msgstr "<emphasis>Separado (detached)</emphasis> - una instancia separada es un objeto que ha sido hecho persistente, pero su <literal>Session</literal> ha sido cerrada. La referencia al objeto todavía es válida, por supuesto, y la instancia separada podría incluso ser modificada en este estado. Una instancia separada puede ser re-unida a una nueva <literal>Session</literal> en un punto posterior en el tiempo, haciéndola persistente de nuevo (con todas las modificaciones). Este aspecto habilita un modelo de programación para unidades de trabajo de ejecución larga que requieren tiempo-para-pensar del usuario. Las llamamos <emphasis>transaccciones de aplicación</emphasis>, es decir, una unidad de trabajo desde el punto de vista del usuario."
+
+#: index.docbook:69
+msgid "We'll now discuss the states and state transitions (and the Hibernate methods that trigger a transition) in more detail."
+msgstr "Discutiremos ahora los estados y transiciones de estados (y los métodos de Hibernate que disparan una transición) en más detalle:"
+
+#: index.docbook:77
+msgid "Making objects persistent"
+msgstr "Haciendo los objetos persistentes"
+
+#: index.docbook:79
+msgid "Newly instantiated instances of a a persistent class are considered <emphasis>transient</emphasis> by Hibernate. We can make a transient instance <emphasis>persistent</emphasis> by associating it with a session:"
+msgstr "Las instancias recién instanciadas de una clase persistente son consideradas <emphasis>transitorias</emphasis> por Hibernate. Podemos hacer una instancia transitoria <emphasis>persistente</emphasis> asociándola con una sesión:"
+
+#: index.docbook:86
+msgid ""
+ "<![CDATA[DomesticCat fritz = new DomesticCat();\n"
+ "fritz.setColor(Color.GINGER);\n"
+ "fritz.setSex('M');\n"
+ "fritz.setName(\"Fritz\");\n"
+ "Long generatedId = (Long) sess.save(fritz);]]>"
+msgstr ""
+ "<![CDATA[DomesticCat fritz = new DomesticCat();\n"
+ "fritz.setColor(Color.GINGER);\n"
+ "fritz.setSex('M');\n"
+ "fritz.setName(\"Fritz\");\n"
+ "Long generatedId = (Long) sess.save(fritz);]]>"
+
+#: index.docbook:88
+msgid "If <literal>Cat</literal> has a generated identifier, the identifier is generated and assigned to the <literal>cat</literal> when <literal>save()</literal> is called. If <literal>Cat</literal> has an <literal>assigned</literal> identifier, or a composite key, the identifier should be assigned to the <literal>cat</literal> instance before calling <literal>save()</literal>. You may also use <literal>persist()</literal> instead of <literal>save()</literal>, with the semantics defined in the EJB3 early draft."
+msgstr "Si <literal>Cat</literal> tiene un identificador generado, el identificador es generado y asignado al <literal>cat</literal> cuando se llama a <literal>save()</literal>. Si <literal>Cat</literal> tiene un identificador <literal>assigned</literal>, o una clave compuesta, el identificador debe ser asignado a la instancia de <literal>cat</literal> antes de llamar a <literal>save()</literal>. Puedes también usar <literal>persist()</literal> en vez de <literal>save()</literal>, con la semántica definida en el temprano borrador de EJB3."
+
+#: index.docbook:100
+msgid "<literal>persist()</literal> makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. <literal>persist()</literal> also guarantees that it will not execute an <literal>INSERT</literal> statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context."
+msgstr "Alternativamente, puedes asignar el identificador usando una versión sobrecargada de <literal>save()</literal>."
+
+#: index.docbook:111
+msgid "<literal>save()</literal> does guarantee to return an identifier. If an INSERT has to be executed to get the identifier ( e.g. \"identity\" generator, not \"sequence\"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is problematic in a long-running conversation with an extended Session/persistence context."
+msgstr ""
+ "<![CDATA[DomesticCat pk = new DomesticCat();\n"
+ "pk.setColor(Color.TABBY);\n"
+ "pk.setSex('F');\n"
+ "pk.setName(\"PK\");\n"
+ "pk.setKittens( new HashSet() );\n"
+ "pk.addKitten(fritz);\n"
+ "sess.save( pk, new Long(1234) );]]>"
+
+#: index.docbook:121
+msgid "Alternatively, you may assign the identifier using an overloaded version of <literal>save()</literal>."
+msgstr "Si el objeto que haces persistente tiene objetos asociados (por ejemplo, la colección <literal>kittens</literal> en el ejemplo anterior), estos objetos pueden ser hechos persistentes en cualquier orden que quieras a menos que tengas una restricción <literal>NOT NULL</literal> sobre una columna clave foránea. Nunca hay riesgo de violar restricciones de clave foránea. Sin embargo, podrías violar una restricción <literal>NOT NULL</literal> si llamas a <literal>save()</literal> sobre objetos en orden erróneo."
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[DomesticCat pk = new DomesticCat();\n"
+ "pk.setColor(Color.TABBY);\n"
+ "pk.setSex('F');\n"
+ "pk.setName(\"PK\");\n"
+ "pk.setKittens( new HashSet() );\n"
+ "pk.addKitten(fritz);\n"
+ "sess.save( pk, new Long(1234) );]]>"
+msgstr "Usualmente no te preocupas con este detalle, pues muy probablemente usarás la funcionalidad de <emphasis>persistencia transitiva</emphasis> de Hibernate para salvar los objetos asociados automáticamente. Entonces, ni siquiera ocurren violaciones de restricciones <literal>NOT NULL</literal> - Hibernate cuidará de todo. La persistencia transitiva se discute más adelante en este capítulo."
+
+#: index.docbook:128
+msgid "If the object you make persistent has associated objects (e.g. the <literal>kittens</literal> collection in the previous example), these objects may be made persistent in any order you like unless you have a <literal>NOT NULL</literal> constraint upon a foreign key column. There is never a risk of violating foreign key constraints. However, you might violate a <literal>NOT NULL</literal> constraint if you <literal>save()</literal> the objects in the wrong order."
+msgstr "Cargando un objeto"
+
+#: index.docbook:138
+msgid "Usually you don't bother with this detail, as you'll very likely use Hibernate's <emphasis>transitive persistence</emphasis> feature to save the associated objects automatically. Then, even <literal>NOT NULL</literal> constraint violations don't occur - Hibernate will take care of everything. Transitive persistence is discussed later in this chapter."
+msgstr "Los métodos <literal>load()</literal> de <literal>Session</literal> te brindan una forma de traer una instancia persistente si ya saves su identificador. <literal>load()</literal> toma un objeto clase y cargará el estado dentro de una instancia recién instanciada de esta clase, en estado persistente."
+
+#: index.docbook:149
+msgid "Loading an object"
+msgstr "<![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]>"
+
+#: index.docbook:151
+msgid "The <literal>load()</literal> methods of <literal>Session</literal> gives you a way to retrieve a persistent instance if you already know its identifier. <literal>load()</literal> takes a class object and will load the state into a newly instantiated instance of that class, in persistent state."
+msgstr ""
+ "<![CDATA[// you need to wrap primitive identifiers\n"
+ "long id = 1234;\n"
+ "DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );]]>"
+
+#: index.docbook:158
+msgid "<![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]>"
+msgstr "Alternativamente, puedes cargar estado dentro de una instancia dada:"
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[// you need to wrap primitive identifiers\n"
+ "long id = 1234;\n"
+ "DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "// load pk's state into cat\n"
+ "sess.load( cat, new Long(pkId) );\n"
+ "Set kittens = cat.getKittens();]]>"
+
+#: index.docbook:162
+msgid "Alternatively, you can load state into a given instance:"
+msgstr "Nota que <literal>load()</literal> lanzará una excepción irrecuperable si no hay una fila correspondiente en base de datos. Si la clase es mapeada con un proxy, <literal>load()</literal> sólo devuelve un proxy no inicializado y no llamará realmente a la base de datos hasta que invoques un método del proxy. Este comportamiento es muy útil si deseas crear una asociación a un objeto sin cargarlo realmente de la base de datos. Permite además que múltiples instancias sean cargadas como un lote si se define <literal>batch-size</literal> para el mapeo de la clase."
+
+#: index.docbook:166
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "// load pk's state into cat\n"
+ "sess.load( cat, new Long(pkId) );\n"
+ "Set kittens = cat.getKittens();]]>"
+msgstr "Si no tienes certeza que exista una fila correspondiente, debes usar el método <literal>get()</literal>, que llama a la base de datos inmediatamente y devuelve nulo si no existe una fila correspondiente."
+
+#: index.docbook:168
+msgid "Note that <literal>load()</literal> will throw an unrecoverable exception if there is no matching database row. If the class is mapped with a proxy, <literal>load()</literal> just returns an uninitialized proxy and does not actually hit the database until you invoke a method of the proxy. This behaviour is very useful if you wish to create an association to an object without actually loading it from the database. It also allows multiple instances to be loaded as a batch if <literal>batch-size</literal> is defined for the class mapping."
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);\n"
+ "if (cat==null) {\n"
+ " cat = new Cat();\n"
+ " sess.save(cat, id);\n"
+ "}\n"
+ "return cat;]]>"
+
+#: index.docbook:179
+msgid "If you are not certain that a matching row exists, you should use the <literal>get()</literal> method, which hits the database immediately and returns null if there is no matching row."
+msgstr "Puedes incluso cargar un objeto usando un <literal>SELECT ... FOR UPDATE</literal> de SQL, usando un <literal>LockMode</literal>. Ver la documentación de la API para más información."
+
+#: index.docbook:185
+msgid ""
+ "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);\n"
+ "if (cat==null) {\n"
+ " cat = new Cat();\n"
+ " sess.save(cat, id);\n"
+ "}\n"
+ "return cat;]]>"
+msgstr "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]>"
+
+#: index.docbook:187
+msgid "You may even load an object using an SQL <literal>SELECT ... FOR UPDATE</literal>, using a <literal>LockMode</literal>. See the API documentation for more information."
+msgstr "Ten en cuenta que <emphasis>ninguna</emphasis> instancia asociada o colección contenida es selecciona <literal>FOR UPDATE</literal>, a menos que decidas especificar <literal>lock</literal> o <literal>all</literal> como un estilo de cascada para la asociación."
+
+#: index.docbook:192
+msgid "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]>"
+msgstr "Es posible volver a cargar un objeto y todas sus colecciones en cualquier momento, usando el método <literal>refresh()</literal>. Esto es útil cuando se usan disparadores de base de datos para inicializar algunas de las propiedades del objeto."
+
+#: index.docbook:194
+msgid "Note that any associated instances or contained collections are <emphasis>not</emphasis> selected <literal>FOR UPDATE</literal>, unless you decide to specify <literal>lock</literal> or <literal>all</literal> as a cascade style for the association."
+msgstr ""
+ "<![CDATA[sess.save(cat);\n"
+ "sess.flush(); //force the SQL INSERT\n"
+ "sess.refresh(cat); //re-read the state (after the trigger executes)]]>"
+
+#: index.docbook:201
+msgid "It is possible to re-load an object and all its collections at any time, using the <literal>refresh()</literal> method. This is useful when database triggers are used to initialize some of the properties of the object."
+msgstr "Una cuestión importante aparece usualmente en este punto: ¿Cuánto carga Hibernate de la base de datos y cuántos <literal>SELECT</literal>s de SQL usará? Esto depende de la <emphasis>estrategia de recuperación</emphasis> y se explica en <xref linkend=\"performance-fetching\"/>."
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[sess.save(cat);\n"
+ "sess.flush(); //force the SQL INSERT\n"
+ "sess.refresh(cat); //re-read the state (after the trigger executes)]]>"
+msgstr "Consultando"
+
+#: index.docbook:209
+msgid "An important question usually appears at this point: How much does Hibernate load from the database and how many SQL <literal>SELECT</literal>s will it use? This depends on the <emphasis>fetching strategy</emphasis> and is explained in <xref linkend=\"performance-fetching\"/>."
+msgstr "Si no sabes los identificadores de los objetos que estás buscando, necesitas una consulta. Hibernate soporta un lenguaje de consulta orientado a objetos (HQL) fácil de usar pero potente. Para la creación de consultas programáticas, Hibernate soporta una funcionalidad sofisticada de consulta de Criteria y Example (QBC and QBE). También puedes expresar tu consulta en el SQL nativo de tu base de datos, con soporte opcional de Hibernate para la conversión del conjunto resultado en objetos."
+
+#: index.docbook:219
+msgid "Querying"
+msgstr "Ejecutando consultas"
+
+#: index.docbook:221
+msgid "If you don't know the identifiers of the objects you are looking for, you need a query. Hibernate supports an easy-to-use but powerful object oriented query language (HQL). For programmatic query creation, Hibernate supports a sophisticated Criteria and Example query feature (QBC and QBE). You may also express your query in the native SQL of your database, with optional support from Hibernate for result set conversion into objects."
+msgstr "Las consultas HQL y SQL nativas son representadas con una instancia de <literal>org.hibernate.Query</literal>. Esta interface ofrece métodos para la ligación de parámetros, manejo del conjunto resultado, y para la ejecución de la consulta real. Siempre obtienes una <literal>Query</literal> usando la <literal>Session</literal> actual:"
+
+#: index.docbook:231
+msgid "Executing queries"
+msgstr ""
+ "<![CDATA[List cats = session.createQuery(\n"
+ " \"from Cat as cat where cat.birthdate < ?\")\n"
+ " .setDate(0, date)\n"
+ " .list();\n"
+ "\n"
+ "List mothers = session.createQuery(\n"
+ " \"select mother from Cat as cat join cat.mother as mother where cat.name = ?\")\n"
+ " .setString(0, name)\n"
+ " .list();\n"
+ "\n"
+ "List kittens = session.createQuery(\n"
+ " \"from Cat as cat where cat.mother = ?\")\n"
+ " .setEntity(0, pk)\n"
+ " .list();\n"
+ "\n"
+ "Cat mother = (Cat) session.createQuery(\n"
+ " \"select cat.mother from Cat as cat where cat = ?\")\n"
+ " .setEntity(0, izi)\n"
+ " .uniqueResult();]]>"
+
+#: index.docbook:233
+msgid "HQL and native SQL queries are represented with an instance of <literal>org.hibernate.Query</literal>. This interface offers methods for parameter binding, result set handling, and for the execution of the actual query. You always obtain a <literal>Query</literal> using the current <literal>Session</literal>:"
+msgstr "Una consulta se ejecuta usualmente invocando a <literal>list()</literal>, el resultado de la consulta será cargado completamente dentro de una colección en memoria. Las instancias de entidad traídas por una consulta están en estado persistente. El método <literal>uniqueResult()</literal> ofrece un atajo si sabes que tu consulta devolverá sólo un objeto."
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[List cats = session.createQuery(\n"
+ " \"from Cat as cat where cat.birthdate < ?\")\n"
+ " .setDate(0, date)\n"
+ " .list();\n"
+ "\n"
+ "List mothers = session.createQuery(\n"
+ " \"select mother from Cat as cat join cat.mother as mother where cat.name = ?\")\n"
+ " .setString(0, name)\n"
+ " .list();\n"
+ "\n"
+ "List kittens = session.createQuery(\n"
+ " \"from Cat as cat where cat.mother = ?\")\n"
+ " .setEntity(0, pk)\n"
+ " .list();\n"
+ "\n"
+ "Cat mother = (Cat) session.createQuery(\n"
+ " \"select cat.mother from Cat as cat where cat = ?\")\n"
+ " .setEntity(0, izi)\n"
+ " .uniqueResult();]]\n"
+ "\n"
+ "Query mothersWithKittens = (Cat) session.createQuery(\n"
+ " \"select mother from Cat as mother left join fetch mother.kittens\");\n"
+ "Set uniqueMothers = new HashSet(mothersWithKittens.list());]]>"
+msgstr "Iterando los resultados"
+
+#: index.docbook:242
+msgid "A query is usually executed by invoking <literal>list()</literal>, the result of the query will be loaded completely into a collection in memory. Entity instances retrieved by a query are in persistent state. The <literal>uniqueResult()</literal> method offers a shortcut if you know your query will only return a single object. Note that queries that make use of eager fetching of collections usually return duplicates of the root objects (but with their collections initialized). You can filter these duplicates simply through a <literal>Set</literal>."
+msgstr "Ocasionalmente, podrías ser capaz de lograr mejor rendimiento al ejecutar la consulta usando el método <literal>iterate()</literal>. Esto sólo será en el caso que esperes que las instancias reales de entidad devueltas por la consulta estén ya en la sesión o caché de segundo nivel. Si todavía no están en caché, <literal>iterate()</literal> será más lento que <literal>list()</literal> y podría requerir muchas llamadas a la base de datos para una consulta simple, usualmente <emphasis>1</emphasis> para la selección inicial que solamente devuelve identificadores, y <emphasis>n</emphasis> selecciones adicionales para inicializar las instancias reales."
+
+#: index.docbook:254
+msgid "Iterating results"
+msgstr ""
+ "<![CDATA[// fetch ids\n"
+ "Iterator iter = sess.createQuery(\"from eg.Qux q order by q.likeliness\").iterate();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Qux qux = (Qux) iter.next(); // fetch the object\n"
+ " // something we couldnt express in the query\n"
+ " if ( qux.calculateComplicatedAlgorithm() ) {\n"
+ " // delete the current instance\n"
+ " iter.remove();\n"
+ " // dont need to process the rest\n"
+ " break;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:256
+msgid "Occasionally, you might be able to achieve better performance by executing the query using the <literal>iterate()</literal> method. This will only usually be the case if you expect that the actual entity instances returned by the query will already be in the session or second-level cache. If they are not already cached, <literal>iterate()</literal> will be slower than <literal>list()</literal> and might require many database hits for a simple query, usually <emphasis>1</emphasis> for the initial select which only returns identifiers, and <emphasis>n</emphasis> additional selects to initialize the actual instances."
+msgstr "Consultas que devuelven tuplas"
+
+#: index.docbook:268
+msgid ""
+ "<![CDATA[// fetch ids\n"
+ "Iterator iter = sess.createQuery(\"from eg.Qux q order by q.likeliness\").iterate();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Qux qux = (Qux) iter.next(); // fetch the object\n"
+ " // something we couldnt express in the query\n"
+ " if ( qux.calculateComplicatedAlgorithm() ) {\n"
+ " // delete the current instance\n"
+ " iter.remove();\n"
+ " // dont need to process the rest\n"
+ " break;\n"
+ " }\n"
+ "}]]>"
+msgstr "Las consultas de Hibernate a veces devuelven tuplas de objetos, en cuyo caso cada tupla se devuelve como un array:"
+
+#: index.docbook:272
+msgid "Queries that return tuples"
+msgstr ""
+ "<![CDATA[Iterator kittensAndMothers = sess.createQuery(\n"
+ " \"select kitten, mother from Cat kitten join kitten.mother mother\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( kittensAndMothers.hasNext() ) {\n"
+ " Object[] tuple = (Object[]) kittensAndMothers.next();\n"
+ " Cat kitten = (Cat) tuple[0];
+\n"
+ " Cat mother = (Cat) tuple[1];
+\n"
+ " ....\n"
+ "}]]>"
+
+#: index.docbook:274
+msgid "Hibernate queries sometimes return tuples of objects, in which case each tuple is returned as an array:"
+msgstr "Resultados escalares"
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Iterator kittensAndMothers = sess.createQuery(\n"
+ " \"select kitten, mother from Cat kitten join kitten.mother mother\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( kittensAndMothers.hasNext() ) {\n"
+ " Object[] tuple = (Object[]) kittensAndMothers.next();\n"
+ " Cat kitten = (Cat) tuple[0];\n"
+ " Cat mother = (Cat) tuple[1];\n"
+ " ....\n"
+ "}]]>"
+msgstr "Las consultas pueden especificar una propiedad de una clase en la cláusula <literal>select</literal>. Pueden incluso llamar a funciones de agregación SQL. Las propiedades o agregaciones son considerados resultados \"escalares\" (y no entidades en estado persistente)."
+
+#: index.docbook:284
+msgid "Scalar results"
+msgstr ""
+ "<![CDATA[Iterator results = sess.createQuery(\n"
+ " \"select cat.color, min(cat.birthdate), count(cat) from Cat cat \" +\n"
+ " \"group by cat.color\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( results.hasNext() ) {\n"
+ " Object[] row = results.next();\n"
+ " Color type = (Color) row[0];\n"
+ " Date oldest = (Date) row[1];\n"
+ " Integer count = (Integer) row[2];\n"
+ " .....\n"
+ "}]]>"
+
+#: index.docbook:286
+msgid "Queries may specify a property of a class in the <literal>select</literal> clause. They may even call SQL aggregate functions. Properties or aggregates are considered \"scalar\" results (and not entities in persistent state)."
+msgstr "Ligación de parámetros"
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[Iterator results = sess.createQuery(\n"
+ " \"select cat.color, min(cat.birthdate), count(cat) from Cat cat \" +\n"
+ " \"group by cat.color\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( results.hasNext() ) {\n"
+ " Object[] row = (Object[]) results.next();\n"
+ " Color type = (Color) row[0];\n"
+ " Date oldest = (Date) row[1];\n"
+ " Integer count = (Integer) row[2];\n"
+ " .....\n"
+ "}]]>"
+msgstr "Se proveen métodos en <literal>Query</literal> para ligar valores a parámetros con nombre o parámetros <literal>?</literal> de estilo JDBC. <emphasis>Al contrario de JDBC, Hibernate numera los parámetros desde cero.</emphasis> Los parámetros con nombre son identificadores de la forma <literal>:name</literal> en la cadena de la consulta. Las ventajas de los parámetros con nombre son:"
+
+#: index.docbook:297
+msgid "Bind parameters"
+msgstr "los parámetros con nombre son insensibles al orden en que aparecen en la cadena de consulta"
+
+#: index.docbook:299
+msgid "Methods on <literal>Query</literal> are provided for binding values to named parameters or JDBC-style <literal>?</literal> parameters. <emphasis>Contrary to JDBC, Hibernate numbers parameters from zero.</emphasis> Named parameters are identifiers of the form <literal>:name</literal> in the query string. The advantages of named parameters are:"
+msgstr "pueden aparecer múltiples veces en la misma consulta"
+
+#: index.docbook:309
+msgid "named parameters are insensitive to the order they occur in the query string"
+msgstr "son auto-documentados"
+
+#: index.docbook:315
+msgid "they may occur multiple times in the same query"
+msgstr ""
+ "<![CDATA[//named parameter (preferred)\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = :name\");\n"
+ "q.setString(\"name\", \"Fritz\");\n"
+ "Iterator cats = q.iterate();]]>"
+
+#: index.docbook:320
+msgid "they are self-documenting"
+msgstr ""
+ "<![CDATA[//positional parameter\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = ?\");\n"
+ "q.setString(0, \"Izi\");\n"
+ "Iterator cats = q.iterate();]]>"
+
+#: index.docbook:326
+msgid ""
+ "<![CDATA[//named parameter (preferred)\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = :name\");\n"
+ "q.setString(\"name\", \"Fritz\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr ""
+ "<![CDATA[//named parameter list\n"
+ "List names = new ArrayList();\n"
+ "names.add(\"Izi\");\n"
+ "names.add(\"Fritz\");\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name in (:namesList)\");\n"
+ "q.setParameterList(\"namesList\", names);\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:328
+msgid ""
+ "<![CDATA[//positional parameter\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = ?\");\n"
+ "q.setString(0, \"Izi\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr "Paginación"
+
+#: index.docbook:330
+msgid ""
+ "<![CDATA[//named parameter list\n"
+ "List names = new ArrayList();\n"
+ "names.add(\"Izi\");\n"
+ "names.add(\"Fritz\");\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name in (:namesList)\");\n"
+ "q.setParameterList(\"namesList\", names);\n"
+ "List cats = q.list();]]>"
+msgstr "Si necesitas especificar límites sobre tu conjunto resultado (el número máximo de filas que quieras traer y/o la primera fila que quieras traer) debes usar los métodos de la interface <literal>Query</literal>:"
+
+#: index.docbook:335
+msgid "Pagination"
+msgstr ""
+ "<![CDATA[Query q = sess.createQuery(\"from DomesticCat cat\");\n"
+ "q.setFirstResult(20);\n"
+ "q.setMaxResults(10);\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:337
+msgid "If you need to specify bounds upon your result set (the maximum number of rows you want to retrieve and / or the first row you want to retrieve) you should use methods of the <literal>Query</literal> interface:"
+msgstr "Hibernate sabe cómo traducir este límite de consulta al SQL nativo de tu DBMS."
+
+#: index.docbook:343
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"from DomesticCat cat\");\n"
+ "q.setFirstResult(20);\n"
+ "q.setMaxResults(10);\n"
+ "List cats = q.list();]]>"
+msgstr "Iteración scrollable"
+
+#: index.docbook:345
+msgid "Hibernate knows how to translate this limit query into the native SQL of your DBMS."
+msgstr "Si tu driver JDBC soporta <literal>ResultSet</literal>s scrollables, la interface <literal>Query</literal> puede ser usada para obtener un objeto <literal>ScrollableResults</literal>, que permite una navegación flexible de los resultados de consulta."
+
+#: index.docbook:353
+msgid "Scrollable iteration"
+msgstr ""
+ "<![CDATA[Query q = sess.createQuery(\"select cat.name, cat from DomesticCat cat \" +\n"
+ " \"order by cat.name\");\n"
+ "ScrollableResults cats = q.scroll();\n"
+ "if ( cats.first() ) {\n"
+ "\n"
+ " // find the first name on each page of an alphabetical list of cats by name\n"
+ " firstNamesOfPages = new ArrayList();\n"
+ " do {\n"
+ " String name = cats.getString(0);\n"
+ " firstNamesOfPages.add(name);\n"
+ " }\n"
+ " while ( cats.scroll(PAGE_SIZE) );\n"
+ "\n"
+ " // Now get the first page of cats\n"
+ " pageOfCats = new ArrayList();\n"
+ " cats.beforeFirst();\n"
+ " int i=0;\n"
+ " while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );\n"
+ "\n"
+ "}\n"
+ "cats.close()]]>"
+
+#: index.docbook:355
+msgid "If your JDBC driver supports scrollable <literal>ResultSet</literal>s, the <literal>Query</literal> interface may be used to obtain a <literal>ScrollableResults</literal> object, which allows flexible navigation of the query results."
+msgstr "Nota que se requiere una conexión de base de datos abierta (y cursor) para esta funcionalidad, usa <literal>setMaxResult()</literal>/<literal>setFirstResult()</literal> si necesitas la funcionalidad de paginación fuera de línea."
+
+#: index.docbook:362
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"select cat.name, cat from DomesticCat cat \" +\n"
+ " \"order by cat.name\");\n"
+ "ScrollableResults cats = q.scroll();\n"
+ "if ( cats.first() ) {\n"
+ "\n"
+ " // find the first name on each page of an alphabetical list of cats by name\n"
+ " firstNamesOfPages = new ArrayList();\n"
+ " do {\n"
+ " String name = cats.getString(0);\n"
+ " firstNamesOfPages.add(name);\n"
+ " }\n"
+ " while ( cats.scroll(PAGE_SIZE) );\n"
+ "\n"
+ " // Now get the first page of cats\n"
+ " pageOfCats = new ArrayList();\n"
+ " cats.beforeFirst();\n"
+ " int i=0;\n"
+ " while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );\n"
+ "\n"
+ "}\n"
+ "cats.close()]]>"
+msgstr "Externalizando consultas con nombre"
+
+#: index.docbook:364
+msgid "Note that an open database connection (and cursor) is required for this functionality, use <literal>setMaxResult()</literal>/<literal>setFirstResult()</literal> if you need offline pagination functionality."
+msgstr "Puedes además definir consultas con nombre en el documento de mapeo. (Recuerda usar una sección <literal>CDATA</literal> si tu consulta contiene caracteres que puedan ser interpretados como etiquetado.)"
+
+#: index.docbook:373
+msgid "Externalizing named queries"
+msgstr ""
+ "<![CDATA[<query name=\"eg.DomesticCat.by.name.and.minimum.weight\"><![CDATA[\n"
+ " from eg.DomesticCat as cat\n"
+ " where cat.name = ?\n"
+ " and cat.weight > ?\n"
+ "] ]></query>]]>"
+
+#: index.docbook:375
+msgid "You may also define named queries in the mapping document. (Remember to use a <literal>CDATA</literal> section if your query contains characters that could be interpreted as markup.)"
+msgstr "La ligación de parámetros y ejecución se hace programáticamente:"
+
+#: index.docbook:381
+msgid ""
+ "<![CDATA[<query name=\"ByNameAndMaximumWeight\"><![CDATA[\n"
+ " from eg.DomesticCat as cat\n"
+ " where cat.name = ?\n"
+ " and cat.weight > ?\n"
+ "] ]></query>]]>"
+msgstr ""
+ "<![CDATA[Query q = sess.getNamedQuery(\"eg.DomesticCat.by.name.and.minimum.weight\");\n"
+ "q.setString(0, name);\n"
+ "q.setInt(1, minWeight);\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:383
+msgid "Parameter binding and executing is done programatically:"
+msgstr "Nota que el código real del programa es independiente del lenguaje de consulta usado; puedes además definir consultas SQL nativas en metadatos, o migrar consultas existentes a Hibernate colocándolas en ficheros de mapeo."
+
+#: index.docbook:387
+msgid ""
+ "<![CDATA[Query q = sess.getNamedQuery(\"ByNameAndMaximumWeight\");\n"
+ "q.setString(0, name);\n"
+ "q.setInt(1, minWeight);\n"
+ "List cats = q.list();]]>"
+msgstr "Filtrando colecciones"
+
+#: index.docbook:389
+msgid "Note that the actual program code is independent of the query language that is used, you may also define native SQL queries in metadata, or migrate existing queries to Hibernate by placing them in mapping files."
+msgstr "Un <emphasis>filtro</emphasis> de colección es un tipo especial de consulta que puede ser aplicado a una colección persistente o array. La cadena de consulta puede referirse a <literal>this</literal>, significando el elemento de colección actual."
+
+#: index.docbook:395
+msgid "Also note that a query declaration inside a <literal><hibernate-mapping></literal> element requires a global unique name for the query, while a query declaration inside a <literal><class></literal> element is made unique automatically by prepending the fully qualified name of the class, for example <literal>eg.Cat.ByNameAndMaximumWeight</literal>."
+msgstr ""
+ "<![CDATA[Collection blackKittens = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"where this.color = ?\")\n"
+ " .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )\n"
+ " .list()\n"
+ ");]]>"
+
+#: index.docbook:408
+msgid "Filtering collections"
+msgstr "La colección devuelta es considerada un bag, y es una copia de la colección dada. La colección original no es modificada (esto es contrario a la implicación del nombre \"filtro\", pero consistente con el comportamiento esperado)."
+
+#: index.docbook:409
+msgid "A collection <emphasis>filter</emphasis> is a special type of query that may be applied to a persistent collection or array. The query string may refer to <literal>this</literal>, meaning the current collection element."
+msgstr "Observa que los filtros no requieren una cláusula <literal>from</literal> (aunque pueden tener uno si se requiere). Los filtros no están limitados a devolver los elementos de colección por sí mismos."
+
+#: index.docbook:415
+msgid ""
+ "<![CDATA[Collection blackKittens = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"where this.color = ?\")\n"
+ " .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )\n"
+ " .list()\n"
+ ");]]>"
+msgstr ""
+ "<![CDATA[Collection blackKittenMates = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"select this.mate where this.color = eg.Color.BLACK.intValue\")\n"
+ " .list();]]>"
+
+#: index.docbook:417
+msgid "The returned collection is considered a bag, and it's a copy of the given collection. The original collection is not modified (this is contrary to the implication of the name \"filter\", but consistent with expected behavior)."
+msgstr "Incluso una consulta de filtro vacío es útil, por ejemplo, para cargar un subconjunto de elementos en una colección enorme:"
+
+#: index.docbook:423
+msgid "Observe that filters do not require a <literal>from</literal> clause (though they may have one if required). Filters are not limited to returning the collection elements themselves."
+msgstr ""
+ "<![CDATA[Collection tenKittens = session.createFilter(\n"
+ " mother.getKittens(), \"\")\n"
+ " .setFirstResult(0).setMaxResults(10)\n"
+ " .list();]]>"
+
+#: index.docbook:428
+msgid ""
+ "<![CDATA[Collection blackKittenMates = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"select this.mate where this.color = eg.Color.BLACK.intValue\")\n"
+ " .list();]]>"
+msgstr "Consultas de criterios"
+
+#: index.docbook:430
+msgid "Even an empty filter query is useful, e.g. to load a subset of elements in a huge collection:"
+msgstr "HQL es extremadamente potente pero algunos desarrolladores prefieren construir consultas dinámicamente usando una API orientada a objetos, en vez construir cadenas de consulta. Hibernate provee una API intuitiva de consulta <literal>Criteria</literal> para estos casos:"
+
+#: index.docbook:435
+msgid ""
+ "<![CDATA[Collection tenKittens = session.createFilter(\n"
+ " mother.getKittens(), \"\")\n"
+ " .setFirstResult(0).setMaxResults(10)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Criteria crit = session.createCriteria(Cat.class);\n"
+ "crit.add( Restrictions.eq( \"color\", eg.Color.BLACK ) );\n"
+ "crit.setMaxResults(10);\n"
+ "List cats = crit.list();]]>"
+
+#: index.docbook:440
+msgid "Criteria queries"
+msgstr "Las APIs de <literal>Criteria</literal> y la asociada <literal>Example</literal> son discutidas en más detalle en <xref linkend=\"querycriteria\"/>."
+
+#: index.docbook:442
+msgid "HQL is extremely powerful but some developers prefer to build queries dynamically, using an object-oriented API, rather than building query strings. Hibernate provides an intuitive <literal>Criteria</literal> query API for these cases:"
+msgstr "Consultas en SQL nativo"
+
+#: index.docbook:448
+msgid ""
+ "<![CDATA[Criteria crit = session.createCriteria(Cat.class);\n"
+ "crit.add( Restrictions.eq( \"color\", eg.Color.BLACK ) );\n"
+ "crit.setMaxResults(10);\n"
+ "List cats = crit.list();]]>"
+msgstr "Puedes expresar una consulta en SQL, usando <literal>createSQLQuery()</literal> y dejando que Hibernate cuide del mapeo de los conjuntos resultado a objetos. Nota que puedes llamar en cualquier momento a <literal>session.connection()</literal> y usar la <literal>Connection</literal> JDBC directamente. Si eliges usar la API de Hibernate, debes encerrar los alias de SQL entre llaves:"
+
+#: index.docbook:450
+msgid "The <literal>Criteria</literal> and the associated <literal>Example</literal> API are discussed in more detail in <xref linkend=\"querycriteria\"/>."
+msgstr ""
+ "<![CDATA[List cats = session.createSQLQuery(\"SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10\")
+\n"
+ " .addEntity(\"cat\", Cat.class)
+\n"
+ ".list();]]>"
+
+#: index.docbook:458
+msgid "Queries in native SQL"
+msgstr ""
+ "<![CDATA[List cats = session.createSQLQuery(
+\n"
+ " \"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, \" +
+\n"
+ " \"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... \" +
+\n"
+ " \"FROM CAT {cat} WHERE ROWNUM<10\")
+\n"
+ " .addEntity(\"cat\", Cat.class)
+\n"
+ ".list()]]>"
+
+#: index.docbook:460
+msgid "You may express a query in SQL, using <literal>createSQLQuery()</literal> and let Hibernate take care of the mapping from result sets to objects. Note that you may at any time call <literal>session.connection()</literal> and use the JDBC <literal>Connection</literal> directly. If you chose to use the Hibernate API, you must enclose SQL aliases in braces:"
+msgstr "Las consultas SQL pueden contener parámetros con nombre y posicionales, al igual que las consultas de Hibernate. Puede encontrarse más información sobre consultas en SQL nativo en <xref linkend=\"querysql\"/>."
+
+#: index.docbook:468
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\"SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list();]]>"
+msgstr "Modificando objetos persistentes"
+
+#: index.docbook:470
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\n"
+ " \"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, \" +\n"
+ " \"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... \" +\n"
+ " \"FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list()]]>"
+msgstr "Las <emphasis>instancias persistentes transaccionales</emphasis> (es decir, objetos cargados, creados o consultados por la <literal>Session</literal>) pueden ser manipulados por la aplicación y cualquier cambio al estado persistente será persistido cuando la <literal>Session</literal> sea <emphasis>limpiada (flushed)</emphasis> (discutido más adelante en este capítulo). No hay necesidad de llamar un método en particular (como <literal>update()</literal>, que tiene un propósito diferente) para hacer persistentes tus modificaciones. De modo que la forma más directa de actualizar el estado de un objeto es cargarlo con <literal>load()</literal>, y entonces manipularlo directamente, mientras la <literal>Session</literal> está abierta:"
+
+#: index.docbook:472
+msgid "SQL queries may contain named and positional parameters, just like Hibernate queries. More information about native SQL queries in Hibernate can be found in <xref linkend=\"querysql\"/>."
+msgstr ""
+ "<![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );\n"
+ "cat.setName(\"PK\");\n"
+ "sess.flush(); // changes to cat are automatically detected and persisted]]>"
+
+#: index.docbook:483
+msgid "Modifying persistent objects"
+msgstr "A veces este modelo de programación es ineficiente pues podría requerir una <literal>SELECT</literal> de SQL (para cargar un objeto) y un <literal>UPDATE</literal> de SQL (para hacer persistentes sus datos actualizados) en la misma sesión. Por lo tanto, Hibernate ofrece un enfoque alternativo, usando instancias separadas (detached)."
+
+#: index.docbook:485
+msgid "<emphasis>Transactional persistent instances</emphasis> (ie. objects loaded, saved, created or queried by the <literal>Session</literal>) may be manipulated by the application and any changes to persistent state will be persisted when the <literal>Session</literal> is <emphasis>flushed</emphasis> (discussed later in this chapter). There is no need to call a particular method (like <literal>update()</literal>, which has a different purpose) to make your modifications persistent. So the most straightforward way to update the state of an object is to <literal>load()</literal> it, and then manipulate it directly, while the <literal>Session</literal> is open:"
+msgstr "Nota que Hibernate no ofreve su propia API para ejecución directa de sentencias <literal>UPDATE</literal> o <literal>DELETE</literal>. Hibernate es un servicio de <emphasis>gestión de estado</emphasis>, no tienes que pensar en <literal>sentencias</literal> para usarlo. JDBC es una API perfecta para ejecutar sentencias SQL; puedes obtener una <literal>Connection</literal> JDBC en cualquier momento llamando a <literal>session.connection()</literal>. Además, la noción de operaciones masivas entra en conflicto con el mapeo objeto/relacional en aplicaciones en línea orientadas al procesamiento de transacciones. Versiones futuras de Hibernate pueden, sin embargo, proveer funciones de operación masiva especiales. Ver <xref linkend=\"batch\"/> por algunos trucos de operación en lote (batch) posibles."
+
+#: index.docbook:496
+msgid ""
+ "<![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );\n"
+ "cat.setName(\"PK\");\n"
+ "sess.flush(); // changes to cat are automatically detected and persisted]]>"
+msgstr "Modificando objetos separados"
+
+#: index.docbook:498
+msgid "Sometimes this programming model is inefficient since it would require both an SQL <literal>SELECT</literal> (to load an object) and an SQL <literal>UPDATE</literal> (to persist its updated state) in the same session. Therefore Hibernate offers an alternate approach, using detached instances."
+msgstr "Muchas aplicaciones necesitan recuperar un objeto en una transacción, enviarla a la capa de UI para su manipulación, y entonces salvar los cambios en una nueva transacción. Las aplicaciones que usan este tipo de enfoque en un entorno de alta concurrencia usualmente usan datos versionados para asegurar el aislamiento de la unidad de trabajo \"larga\"."
+
+#: index.docbook:506
+msgid "Note that Hibernate does not offer its own API for direct execution of <literal>UPDATE</literal> or <literal>DELETE</literal> statements. Hibernate is a <emphasis>state management</emphasis> service, you don't have to think in <emphasis>statements</emphasis> to use it. JDBC is a perfect API for executing SQL statements, you can get a JDBC <literal>Connection</literal> at any time by calling <literal>session.connection()</literal>. Furthermore, the notion of mass operations conflicts with object/relational mapping for online transaction processing-oriented applications. Future versions of Hibernate may however provide special mass operation functions. See <xref linkend=\"batch\"/> for some possible batch operation tricks."
+msgstr "Hibernate soporta este modelo al proveer re-unión de instancias separadas usando los métodos <literal>Session.update()</literal> o <literal>Session.merge()</literal>:"
+
+#: index.docbook:521
+msgid "Modifying detached objects"
+msgstr ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catId);\n"
+ "Cat potentialMate = new Cat();\n"
+ "firstSession.save(potentialMate);\n"
+ "\n"
+ "// in a higher layer of the application\n"
+ "cat.setMate(potentialMate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.update(cat); // update cat\n"
+ "secondSession.update(mate); // update mate]]>"
+
+#: index.docbook:523
+msgid "Many applications need to retrieve an object in one transaction, send it to the UI layer for manipulation, then save the changes in a new transaction. Applications that use this kind of approach in a high-concurrency environment usually use versioned data to ensure isolation for the \"long\" unit of work."
+msgstr "Si el <literal>Cat</literal> con identificador <literal>catId</literal> ya hubiera sido cargado por <literal>secondSession</literal> cuando la aplicación intentó volver a unirlo, se habría lanzado una excepción."
+
+#: index.docbook:530
+msgid "Hibernate supports this model by providing for reattachment of detached instances using the <literal>Session.update()</literal> or <literal>Session.merge()</literal> methods:"
+msgstr "Usa <literal>update()</literal> si no estás seguro que la sesión tenga una instancia ya persistente con el mismo identificador, y <literal>merge()</literal> si quieres fusionar tus modificaciones en cualquier momento sin consideración del estado de la sesión. En otras palabras, <literal>update()</literal> es usualmente el primer método que llamarías en una sesión fresca, asegurando que la re-unión de tus instancias separadas es la primera operación que se ejecuta."
+
+#: index.docbook:536
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catId);\n"
+ "Cat potentialMate = new Cat();\n"
+ "firstSession.save(potentialMate);\n"
+ "\n"
+ "// in a higher layer of the application\n"
+ "cat.setMate(potentialMate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.update(cat); // update cat\n"
+ "secondSession.update(mate); // update mate]]>"
+msgstr "La aplicación debe actualizar individualmente las instancias separadas alcanzables por la instancia separada dada llamando a <literal>update()</literal>, si y <emphasis>sólo</emphasis> si quiere que sus estados sean también actualizados. Esto puede, por supuesto, ser automatizado usando <emphasis>persistencia transitiva</emphasis>, ver <xref linkend=\"objectstate-transitive\"/>."
+
+#: index.docbook:538
+msgid "If the <literal>Cat</literal> with identifier <literal>catId</literal> had already been loaded by <literal>secondSession</literal> when the application tried to reattach it, an exception would have been thrown."
+msgstr "El método <literal>lock()</literal> también permite a una aplicación reasociar un objeto con una sesión nueva. Sin embargo, la instancia separada no puede haber sido modificada!"
+
+#: index.docbook:544
+msgid "Use <literal>update()</literal> if you are sure that the session does not contain an already persistent instance with the same identifier, and <literal>merge()</literal> if you want to merge your modifications at any time without consideration of the state of the session. In other words, <literal>update()</literal> is usually the first method you would call in a fresh session, ensuring that reattachment of your detached instances is the first operation that is executed."
+msgstr ""
+ "<![CDATA[//just reassociate:\n"
+ "sess.lock(fritz, LockMode.NONE);\n"
+ "//do a version check, then reassociate:\n"
+ "sess.lock(izi, LockMode.READ);\n"
+ "//do a version check, using SELECT ... FOR UPDATE, then reassociate:\n"
+ "sess.lock(pk, LockMode.UPGRADE);]]>"
+
+#: index.docbook:553
+msgid "The application should individually <literal>update()</literal> detached instances reachable from the given detached instance if and <emphasis>only</emphasis> if it wants their state also updated. This can be automated of course, using <emphasis>transitive persistence</emphasis>, see <xref linkend=\"objectstate-transitive\"/>."
+msgstr "Nota que <literal>lock()</literal> puede ser usado con varios <literal>LockMode</literal>s, ver la documentación de la API y el capítulo sobre manejo de transacciones para más información. La re-unión no es el único caso de uso para <literal>lock()</literal>."
+
+#: index.docbook:560
+msgid "The <literal>lock()</literal> method also allows an application to reassociate an object with a new session. However, the detached instance has to be unmodified!"
+msgstr "Se discuten otros modelos para unidades de trabajo largas en <xref linkend=\"transactions-optimistic\"/>."
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[//just reassociate:\n"
+ "sess.lock(fritz, LockMode.NONE);\n"
+ "//do a version check, then reassociate:\n"
+ "sess.lock(izi, LockMode.READ);\n"
+ "//do a version check, using SELECT ... FOR UPDATE, then reassociate:\n"
+ "sess.lock(pk, LockMode.UPGRADE);]]>"
+msgstr "Detección automática de estado"
+
+#: index.docbook:567
+msgid "Note that <literal>lock()</literal> can be used with various <literal>LockMode</literal>s, see the API documentation and the chapter on transaction handling for more information. Reattachment is not the only usecase for <literal>lock()</literal>."
+msgstr "Los usuarios de Hibernate han pedido un método de propósito general que bien salve una instancia transitoria generando un identificador nuevo, o bien actualice/reúna las instancias separadas asociadas con su identificador actual. El método <literal>saveOrUpdate()</literal> implementa esta funcionalidad."
+
+#: index.docbook:574
+msgid "Other models for long units of work are discussed in <xref linkend=\"transactions-optimistic\"/>."
+msgstr ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catID);\n"
+ "\n"
+ "// in a higher tier of the application\n"
+ "Cat mate = new Cat();\n"
+ "cat.setMate(mate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.saveOrUpdate(cat); // update existing state (cat has a non-null id)\n"
+ "secondSession.saveOrUpdate(mate); // save the new instance (mate has a null id)]]>"
+
+#: index.docbook:581
+msgid "Automatic state detection"
+msgstr "El uso y semántica de <literal>saveOrUpdate()</literal> parece ser confuso para usuarios nuevos. Primeramente, en tanto no estés intentando usar instancias de una sesión en otra sesión nueva, no debes necesitar usar <literal>update()</literal>, <literal>saveOrUpdate()</literal>, o <literal>merge()</literal>. Algunas aplicaciones enteras nunca usarán ninguno de estos métodos."
+
+#: index.docbook:583
+msgid "Hibernate users have requested a general purpose method that either saves a transient instance by generating a new identifier or updates/reattaches the detached instances associated with its current identifier. The <literal>saveOrUpdate()</literal> method implements this functionality."
+msgstr "Usualmente <literal>update()</literal> o <literal>saveOrUpdate()</literal> se usan en el siguiente escenario:"
+
+#: index.docbook:590
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catID);\n"
+ "\n"
+ "// in a higher tier of the application\n"
+ "Cat mate = new Cat();\n"
+ "cat.setMate(mate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.saveOrUpdate(cat); // update existing state (cat has a non-null id)\n"
+ "secondSession.saveOrUpdate(mate); // save the new instance (mate has a null id)]]>"
+msgstr "la aplicación carga un objeto en la primera sesión"
+
+#: index.docbook:592
+msgid "The usage and semantics of <literal>saveOrUpdate()</literal> seems to be confusing for new users. Firstly, so long as you are not trying to use instances from one session in another new session, you should not need to use <literal>update()</literal>, <literal>saveOrUpdate()</literal>, or <literal>merge()</literal>. Some whole applications will never use either of these methods."
+msgstr "el objeto es pasado a la capa de UI"
+
+#: index.docbook:600
+msgid "Usually <literal>update()</literal> or <literal>saveOrUpdate()</literal> are used in the following scenario:"
+msgstr "se hacen algunas modificaciones al objeto"
+
+#: index.docbook:607
+msgid "the application loads an object in the first session"
+msgstr "el objeto se pasa abajo de regreso a la capa de negocio"
+
+#: index.docbook:612
+msgid "the object is passed up to the UI tier"
+msgstr "la aplicación hace estas modificaciones persistentes llamando a <literal>update()</literal> en una segunda sesión"
+
+#: index.docbook:617
+msgid "some modifications are made to the object"
+msgstr "<literal>saveOrUpdate()</literal> hace lo siguiente:"
+
+#: index.docbook:622
+msgid "the object is passed back down to the business logic tier"
+msgstr "si el objeto ya es persistente en esta sesión, no hace nada"
+
+#: index.docbook:627
+msgid "the application persists these modifications by calling <literal>update()</literal> in a second session"
+msgstr "si otro objeto asociado con la sesión tiene el mismo identificador, lanza una excepción"
+
+#: index.docbook:634
+msgid "<literal>saveOrUpdate()</literal> does the following:"
+msgstr "si el objeto no tiene ninguna propiedad identificadora, lo salva llamando a <literal>save()</literal>"
+
+#: index.docbook:640
+msgid "if the object is already persistent in this session, do nothing"
+msgstr "si el identificador del objeto tiene el valor asignado a un objeto recién instanciado, lo salva llamando a <literal>save()</literal>"
+
+#: index.docbook:645
+msgid "if another object associated with the session has the same identifier, throw an exception"
+msgstr "si el objeto está versionado (por un <literal><version></literal> o <literal><timestamp></literal>), y el valor de la propiedad de versión es el mismo valor asignado a una objeto recién instanciado, lo salva llamando a <literal>save()</literal>"
+
+#: index.docbook:651
+msgid "if the object has no identifier property, <literal>save()</literal> it"
+msgstr "en cualquier otro caso se actualiza el objeto llamando a <literal>update()</literal>"
+
+#: index.docbook:656
+msgid "if the object's identifier has the value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr "y <literal>merge()</literal> es muy diferente:"
+
+#: index.docbook:662
+msgid "if the object is versioned (by a <literal><version></literal> or <literal><timestamp></literal>), and the version property value is the same value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr "si existe una instancia persistente con el mismo identificador asignado actualmente con la sesión, copia el estado del objeto dado en la instancia persistente"
+
+#: index.docbook:670
+msgid "otherwise <literal>update()</literal> the object"
+msgstr "si no existe ninguna instancia persistente actualmente asociada a la sesión, intente cargarla de la base de datos, o crear una nueva instancia persistente"
+
+#: index.docbook:676
+msgid "and <literal>merge()</literal> is very different:"
+msgstr "la instancia persistente es devuelta"
+
+#: index.docbook:682
+msgid "if there is a persistent instance with the same identifier currently associated with the session, copy the state of the given object onto the persistent instance"
+msgstr "la instancia dada no resulta ser asociada a la sesión, permanece separada"
+
+#: index.docbook:689
+msgid "if there is no persistent instance currently associated with the session, try to load it from the database, or create a new persistent instance"
+msgstr "Borrando objetos persistentes"
+
+#: index.docbook:695
+msgid "the persistent instance is returned"
+msgstr "<literal>Session.delete()</literal> quitará el estado de un objeto de la base de datos. Por supuesto, tu aplicación podría tener aún una referencia a un objeto borrado. Lo mejor es pensar en <literal>delete()</literal> como hacer transitoria una instancia persistente."
+
+#: index.docbook:700
+msgid "the given instance does not become associated with the session, it remains detached"
+msgstr "<![CDATA[sess.delete(cat);]]>"
+
+#: index.docbook:710
+msgid "Deleting persistent objects"
+msgstr "Puedes borrar los objetos en el orden que gustes, sin riesgo de violaciones de restricción de clave foránea. Aún es posible violar una restricción <literal>NOT NULL</literal> sobre una columna clave foránea borrando objetos en un orden erróneo, por ejemplo, si borras el padre, pero olvidas borrar los hijos."
+
+#: index.docbook:712
+msgid "<literal>Session.delete()</literal> will remove an object's state from the database. Of course, your application might still hold a reference to a deleted object. It's best to think of <literal>delete()</literal> as making a persistent instance transient."
+msgstr "Replicando objetos entre dos almacénes de datos diferentes"
+
+#: index.docbook:719
+msgid "<![CDATA[sess.delete(cat);]]>"
+msgstr "Es ocasionalmente útil ser capaz de tomar un grafo de instancias persistentes y hacerlas persistentes en un almacén de datos diferente, sin regenerar los valores identificadores."
+
+#: index.docbook:721
+msgid "You may delete objects in any order you like, without risk of foreign key constraint violations. It is still possible to violate a <literal>NOT NULL</literal> constraint on a foreign key column by deleting objects in the wrong order, e.g. if you delete the parent, but forget to delete the children."
+msgstr ""
+ "<![CDATA[//retrieve a cat from one database\n"
+ "Session session1 = factory1.openSession();\n"
+ "Transaction tx1 = session1.beginTransaction();\n"
+ "Cat cat = session1.get(Cat.class, catId);\n"
+ "tx1.commit();\n"
+ "session1.close();\n"
+ "\n"
+ "//reconcile with a second database\n"
+ "Session session2 = factory2.openSession();\n"
+ "Transaction tx2 = session2.beginTransaction();\n"
+ "session2.replicate(cat, ReplicationMode.LATEST_VERSION);\n"
+ "tx2.commit();\n"
+ "session2.close();]]>"
+
+#: index.docbook:732
+msgid "Replicating object between two different datastores"
+msgstr "El <literal>ReplicationMode</literal> determina cómo <literal>replicate()</literal> tratará los conflictos con filas existentes en la base de datos."
+
+#: index.docbook:734
+msgid "It is occasionally useful to be able to take a graph of persistent instances and make them persistent in a different datastore, without regenerating identifier values."
+msgstr "<literal>ReplicationMode.IGNORE</literal> - ignora el objeto cuando existe una fila de base de datos con el mismo identificador"
+
+#: index.docbook:740
+msgid ""
+ "<![CDATA[//retrieve a cat from one database\n"
+ "Session session1 = factory1.openSession();\n"
+ "Transaction tx1 = session1.beginTransaction();\n"
+ "Cat cat = session1.get(Cat.class, catId);\n"
+ "tx1.commit();\n"
+ "session1.close();\n"
+ "\n"
+ "//reconcile with a second database\n"
+ "Session session2 = factory2.openSession();\n"
+ "Transaction tx2 = session2.beginTransaction();\n"
+ "session2.replicate(cat, ReplicationMode.LATEST_VERSION);\n"
+ "tx2.commit();\n"
+ "session2.close();]]>"
+msgstr "<literal>ReplicationMode.OVERWRITE</literal> - sobrescribe cualquier fila de base de datos existente con el mismo identificador"
+
+#: index.docbook:742
+msgid "The <literal>ReplicationMode</literal> determines how <literal>replicate()</literal> will deal with conflicts with existing rows in the database."
+msgstr "<literal>ReplicationMode.EXCEPTION</literal> - lanza una excepción si existe una fila de base de datos con el mismo identificador"
+
+#: index.docbook:749
+msgid "<literal>ReplicationMode.IGNORE</literal> - ignore the object when there is an existing database row with the same identifier"
+msgstr "<literal>ReplicationMode.LATEST_VERSION</literal> - sobrescribe la fila si su número de versión es anterior al número de versión del objeto, o en caso contrario ignora el objeto"
+
+#: index.docbook:755
+msgid "<literal>ReplicationMode.OVERWRITE</literal> - overwrite any existing database row with the same identifier"
+msgstr "Los casos de uso para esta funcionalidad incluyen reconciliar datos ingresados en instancias diferentes de bases de datos, actualizar información de configuración de sistema durante actualizaciones de producto, deshacer cambios producidos durante transacciones no-ACID y más."
+
+#: index.docbook:761
+msgid "<literal>ReplicationMode.EXCEPTION</literal> - throw an exception if there is an existing database row with the same identifier"
+msgstr "Limpiando (flushing) la sesión"
+
+#: index.docbook:767
+msgid "<literal>ReplicationMode.LATEST_VERSION</literal> - overwrite the row if its version number is earlier than the version number of the object, or ignore the object otherwise"
+msgstr "Cada tanto, la <literal>Session</literal> ejecutará las sentencias SQL necesarias para sincronizar el estado de la conexión JDBC con el estado de los objetos mantenidos en menoria. Este proceso, <emphasis>limpieza (flush)</emphasis>, ocurre por defecto en los siguientes puntos"
+
+#: index.docbook:775
+msgid "Usecases for this feature include reconciling data entered into different database instances, upgrading system configuration information during product upgrades, rolling back changes made during non-ACID transactions and more."
+msgstr "antes de algunas ejecuciones de consulta"
+
+#: index.docbook:784
+msgid "Flushing the Session"
+msgstr "desde <literal>org.hibernate.Transaction.commit()</literal>"
+
+#: index.docbook:786
+msgid "From time to time the <literal>Session</literal> will execute the SQL statements needed to synchronize the JDBC connection's state with the state of objects held in memory. This process, <emphasis>flush</emphasis>, occurs by default at the following points"
+msgstr "desde <literal>Session.flush()</literal>"
+
+#: index.docbook:795
+msgid "before some query executions"
+msgstr "Las sentencias SQL son liberadas en el siguiente orden"
+
+#: index.docbook:800
+msgid "from <literal>org.hibernate.Transaction.commit()</literal>"
+msgstr "todas las inserciones de entidades, en el mismo orden que los objetos correspondientes fueron salvados usando <literal>Session.save()</literal>"
+
+#: index.docbook:805
+msgid "from <literal>Session.flush()</literal>"
+msgstr "todas las actualizaciones de entidades"
+
+#: index.docbook:811
+msgid "The SQL statements are issued in the following order"
+msgstr "todas los borrados de colecciones"
+
+#: index.docbook:817
+msgid "all entity insertions, in the same order the corresponding objects were saved using <literal>Session.save()</literal>"
+msgstr "todos los borrados, actualizaciones e inserciones de elementos de colección"
+
+#: index.docbook:823
+msgid "all entity updates"
+msgstr "todas las inserciones de colecciones"
+
+#: index.docbook:828
+msgid "all collection deletions"
+msgstr "todos los borrados de entidades, en el mismo orden que los objetos correspondientes fueron borrados usando <literal>Session.delete()</literal>"
+
+#: index.docbook:833
+msgid "all collection element deletions, updates and insertions"
+msgstr "(Una excepción es que los objetos que usan generación de ID <literal>native</literal> se insertan cuando son salvados.)"
+
+#: index.docbook:838
+msgid "all collection insertions"
+msgstr "Excepto cuando llamas explícitamente a <literal>flush()</literal>, no hay en absoluto garantías sobre <emphasis>cuándo</emphasis> la <literal>Session</literal> ejecuta las llamadas JDBC. sólo sobre el <emphasis>orden</emphasis> en que son ejecutadas. Sin embargo, Hibernate garantiza que los métodos <literal>Query.list(..)</literal> nunca devolverán datos añejos o erróneos."
+
+#: index.docbook:843
+msgid "all entity deletions, in the same order the corresponding objects were deleted using <literal>Session.delete()</literal>"
+msgstr "Es posible cambiar el comportamiento por defecto de modo que la limpieza (flush) ocurra menos frecuentemente. La clase <literal>FlushMode</literal> tres modos diferentes: sólo en tiempo de compromiso (y sólo cuando se use la API de <literal>Transaction</literal> de Hibernate), limpieza automática usando la rutina explicada, o nunca limpiar a menos que se llame a <literal>flush()</literal> explícitamente. El último modo es útil para unidades de trabajo largas, donde una <literal>Session</literal> se mantiene abierta y desconectada por largo tiempo (ver <xref linkend=\"transactions-optimistic-longsession\"/>)."
+
+#: index.docbook:850
+msgid "(An exception is that objects using <literal>native</literal> ID generation are inserted when they are saved.)"
+msgstr ""
+ "<![CDATA[sess = sf.openSession();\n"
+ "Transaction tx = sess.beginTransaction();\n"
+ "sess.setFlushMode(FlushMode.COMMIT); // allow queries to return stale state\n"
+ "\n"
+ "Cat izi = (Cat) sess.load(Cat.class, id);\n"
+ "izi.setName(iznizi);\n"
+ "\n"
+ "// might return stale data\n"
+ "sess.find(\"from Cat as cat left outer join cat.kittens kitten\");\n"
+ "\n"
+ "// change to izi is not flushed!\n"
+ "...\n"
+ "tx.commit(); // flush occurs]]>"
+
+#: index.docbook:855
+msgid "Except when you explicity <literal>flush()</literal>, there are absolutely no guarantees about <emphasis>when</emphasis> the <literal>Session</literal> executes the JDBC calls, only the <emphasis>order</emphasis> in which they are executed. However, Hibernate does guarantee that the <literal>Query.list(..)</literal> will never return stale data; nor will they return the wrong data."
+msgstr "Durante la limpieza, puede ocurrir una excepción (por ejemplo, si una operación DML violase una restricción). Ya que el manejo de excepciones implica alguna comprensión del comportamiento transaccional de Hibernate, lo discutimos en <xref linkend=\"transactions\"/>."
+
+#: index.docbook:863
+msgid "It is possible to change the default behavior so that flush occurs less frequently. The <literal>FlushMode</literal> class defines three different modes: only flush at commit time (and only when the Hibernate <literal>Transaction</literal> API is used), flush automatically using the explained routine, or never flush unless <literal>flush()</literal> is called explicitly. The last mode is useful for long running units of work, where a <literal>Session</literal> is kept open and disconnected for a long time (see <xref linkend=\"transactions-optimistic-longsession\"/>)."
+msgstr "Persistencia transitiva"
+
+#: index.docbook:873
+msgid ""
+ "<![CDATA[sess = sf.openSession();\n"
+ "Transaction tx = sess.beginTransaction();\n"
+ "sess.setFlushMode(FlushMode.COMMIT); // allow queries to return stale state\n"
+ "\n"
+ "Cat izi = (Cat) sess.load(Cat.class, id);\n"
+ "izi.setName(iznizi);\n"
+ "\n"
+ "// might return stale data\n"
+ "sess.find(\"from Cat as cat left outer join cat.kittens kitten\");\n"
+ "\n"
+ "// change to izi is not flushed!\n"
+ "...\n"
+ "tx.commit(); // flush occurs\n"
+ "sess.close();]]>"
+msgstr "Es absolutamente incómodo dalvar, borrar, o reunir objetos individuales, especialmente si tratas con un grafo de objetos asociados. Un caso común es una relación padre/hijo. Considera el siguiente ejemplo:"
+
+#: index.docbook:875
+msgid "During flush, an exception might occur (e.g. if a DML operation violates a constraint). Since handling exceptions involves some understanding of Hibernate's transactional behavior, we discuss it in <xref linkend=\"transactions\"/>."
+msgstr "Si los hijos en una relación padre/hijo pudieran ser tipificados en valor (por ejemplo, una colección de direcciones o cadenas), sus ciclos de vida dependerían del padre y se requeriría ninguna otra acción para el tratamiento en \"cascada\" de cambios de estado. Cuando el padre es salvado, los objetos hijo tipificados en valor son salvados también, cuando se borra el padre, se borran los hijos, etc. Esto funciona incluso para operaciones como el retiro de un hijo de la colección. Hibernate detectará esto y, ya que los objetos tipificados en valor no pueden tener referencias compartidas, borrará el hijo de la base de datos."
+
+#: index.docbook:884
+msgid "Transitive persistence"
+msgstr "Ahora considera el mismo escenario con los objetos padre e hijos siendo entidades, no tipos de valor (por ejemplo, categorías e ítems, o gatos padre e hijos). Las entidades tienen su propio ciclo de vida, soportan referencias compartidas (de modo que quitar una entidad de una colección no significa que sea borrada), y no hay por defecto ningún tratamiento en \"cascada\" de estado de una entidad a otras entidades asociadas. Hibernate no implementa <emphasis>persistencia por alcance</emphasis>."
+
+#: index.docbook:886
+msgid "It is quite cumbersome to save, delete, or reattach individual objects, especially if you deal with a graph of associated objects. A common case is a parent/child relationship. Consider the following example:"
+msgstr "Para cada operación básica de la sesión de Hibernate - incluyendo <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal> - hay un estilo de cascada correspondiente. Respectivamente, los estilos de cascada se llaman <literal>create, merge, save-update, delete, lock, refresh, evict, replicate</literal>. Si quieres que una operación sea tratada en cascada a lo largo de una asociación, debes indicar eso en el documento de mapeo. Por ejemplo:"
+
+#: index.docbook:892
+msgid "If the children in a parent/child relationship would be value typed (e.g. a collection of addresses or strings), their life cycle would depend on the parent and no further action would be required for convenient \"cascading\" of state changes. When the parent is saved, the value-typed child objects are saved as well, when the parent is deleted, the children will be deleted, etc. This even works for operations such as the removal of a child from the collection; Hibernate will detect this and, since value-typed objects can't have shared references, delete the child from the database."
+msgstr "<![CDATA[<one-to-one name=\"person\" cascade=\"persist\"/>]]>"
+
+#: index.docbook:903
+msgid "Now consider the same scenario with parent and child objects being entities, not value-types (e.g. categories and items, or parent and child cats). Entities have their own life cycle, support shared references (so removing an entity from the collection does not mean it can be deleted), and there is by default no cascading of state from one entity to any other associated entities. Hibernate does not implement <emphasis>persistence by reachability</emphasis> by default."
+msgstr "Los estilos de cascada pueden combinarse:"
+
+#: index.docbook:912
+msgid "For each basic operation of the Hibernate session - including <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal> - there is a corresponding cascade style. Respectively, the cascade styles are named <literal>create, merge, save-update, delete, lock, refresh, evict, replicate</literal>. If you want an operation to be cascaded along an association, you must indicate that in the mapping document. For example:"
+msgstr "<![CDATA[<one-to-one name=\"person\" cascade=\"persist,delete,lock\"/>]]>"
+
+#: index.docbook:921
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist\"/>]]>"
+msgstr "Puedes incluso usar <literal>cascade=\"all\"</literal> para especificar que <emphasis>todas</emphasis> las operaciones deben ser tratadas en cascada a lo largo de la asociación. El por defecto <literal>cascade=\"none\"</literal> especifica que ninguna operación será tratada en cascada."
+
+#: index.docbook:923
+msgid "Cascade styles my be combined:"
+msgstr "Un estilo de cascada especial, <literal>delete-orphan</literal>, se aplica sólo a asociaciones uno-a-muchos, e indica que la operación <literal>delete()</literal> debe aplicarse a cualquier objeto hijo que sea quitado de la asociación."
+
+#: index.docbook:927
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist,delete,lock\"/>]]>"
+msgstr "Recomendaciones:"
+
+#: index.docbook:929
+msgid "You may even use <literal>cascade=\"all\"</literal> to specify that <emphasis>all</emphasis> operations should be cascaded along the association. The default <literal>cascade=\"none\"</literal> specifies that no operations are to be cascaded."
+msgstr "Usualmente no tiene sentido habilitar el tratamiento en cascada a una asociación <literal><many-to-one></literal> o <literal><many-to-many></literal>. El tratamiento en cascada es frecuentemente útil para las asociaciones <literal><one-to-one></literal> y <literal><one-to-many></literal>. associations."
+
+#: index.docbook:935
+msgid "A special cascade style, <literal>delete-orphan</literal>, applies only to one-to-many associations, and indicates that the <literal>delete()</literal> operation should be applied to any child object that is removed from the association."
+msgstr "Si la esperanza de vida de los objetos hijos está ligada a la eesperanza de vida del objeto padre, házlo un <emphasis>objeto de ciclo de vida</emphasis> especificando <literal>cascade=\"all,delete-orphan\"</literal>."
+
+#: index.docbook:942
+msgid "Recommendations:"
+msgstr "En otro caso, puede que no necesites tratamiento en cascada en absoluto. Pero si piensas que estarás trabajando frecuentemente con padre e hijos juntos en la misma transacción, y quieres ahorrarte algo de tipeo, considera usar <literal>cascade=\"persist,merge,save-update\"</literal>."
+
+#: index.docbook:948
+msgid "It doesn't usually make sense to enable cascade on a <literal><many-to-one></literal> or <literal><many-to-many></literal> association. Cascade is often useful for <literal><one-to-one></literal> and <literal><one-to-many></literal> associations."
+msgstr "Mapear una asociación (ya sea una asociación monovaluada, o una colección) con <literal>cascade=\"all\"</literal> marca la asociación como una relación del estilo <emphasis>padre/hijo</emphasis> donde save/update/delete en el padre resulta en save/update/delete del hijo o hijos."
+
+#: index.docbook:956
+msgid "If the child object's lifespan is bounded by the lifespan of the parent object, make it a <emphasis>life cycle object</emphasis> by specifying <literal>cascade=\"all,delete-orphan\"</literal>."
+msgstr "Además, una mera referencia a un hijo desde un padre persistente resultará en un save/update del hijo. Esta metáfora está incompleta, sin embargo. Un hijo que deje de ser referenciado por su padre <emphasis>no</emphasis> es borrado automáticamente, excepto en el caso de una asociación <literal><one-to-many></literal> mapeada con <literal>cascade=\"delete-orphan\"</literal>. La semántica precisa de las operaciones en cascada para una relación padre/hijo es:"
+
+#: index.docbook:963
+msgid "Otherwise, you might not need cascade at all. But if you think that you will often be working with the parent and children together in the same transaction, and you want to save yourself some typing, consider using <literal>cascade=\"persist,merge,save-update\"</literal>."
+msgstr "Si un padre le es pasado a <literal>persist()</literal>, todos los hijos le son pasados a <literal>persist()</literal>"
+
+#: index.docbook:971
+msgid "Mapping an association (either a single valued association, or a collection) with <literal>cascade=\"all\"</literal> marks the association as a <emphasis>parent/child</emphasis> style relationship where save/update/delete of the parent results in save/update/delete of the child or children."
+msgstr "Si un padre le es pasado a <literal>merge()</literal>, todos los hijos le son pasados a <literal>merge()</literal>"
+
+#: index.docbook:977
+msgid "Futhermore, a mere reference to a child from a persistent parent will result in save/update of the child. This metaphor is incomplete, however. A child which becomes unreferenced by its parent is <emphasis>not</emphasis> automatically deleted, except in the case of a <literal><one-to-many></literal> association mapped with <literal>cascade=\"delete-orphan\"</literal>. The precise semantics of cascading operations for a parent/child relationship are as follows:"
+msgstr "Si un padre le es pasado a <literal>save()</literal>, <literal>update()</literal> o <literal>saveOrUpdate()</literal>, todos los hijos le son pasados a <literal>saveOrUpdate()</literal>"
+
+#: index.docbook:988
+msgid "If a parent is passed to <literal>persist()</literal>, all children are passed to <literal>persist()</literal>"
+msgstr "Si un hijo transitorio o separado se vuelve referenciado por un padre persistente, le es pasado a <literal>saveOrUpdate()</literal>"
+
+#: index.docbook:994
+msgid "If a parent is passed to <literal>merge()</literal>, all children are passed to <literal>merge()</literal>"
+msgstr "Si un padre es borrado, todos los hijos le son pasados a <literal>delete()</literal>"
+
+#: index.docbook:1000
+msgid "If a parent is passed to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal>, all children are passed to <literal>saveOrUpdate()</literal>"
+msgstr "Si un hijo deja de ser referenciado por un padre persistente, <emphasis>no ocurre nada especial</emphasis> - la aplicación debe borrar explícitamente el hijo de ser necesario - a menos que <literal>cascade=\"delete-orphan\"</literal>, en cuyo caso el hijo \"huérfano\" es borrado."
+
+#: index.docbook:1006
+msgid "If a transient or detached child becomes referenced by a persistent parent, it is passed to <literal>saveOrUpdate()</literal>"
+msgstr "Usando metadatos"
+
+#: index.docbook:1012
+msgid "If a parent is deleted, all children are passed to <literal>delete()</literal>"
+msgstr "Hibernate requiere de un modelo de meta-nivel muy rico de todas las entidades y tipos de valor. De vez en cuando, este modelo es muy útil para la aplicación misma. Por ejemplo, la aplicación podría usar los metadatos de Hibernate para implementar un algoritmo \"inteligente\" de copia en profundidad que entienda qué objetos deben ser copiados (por ejemplo, tipo de valor mutables) y cuáles no (por ejemplo, tipos de valor inmutables y, posiblemente, entidades asociadas)."
+
+#: index.docbook:1017
+msgid "If a child is dereferenced by a persistent parent, <emphasis>nothing special happens</emphasis> - the application should explicitly delete the child if necessary - unless <literal>cascade=\"delete-orphan\"</literal>, in which case the \"orphaned\" child is deleted."
+msgstr "Hibernate expone los metadatos vía las interfaces <literal>ClassMetadata</literal> y <literal>CollectionMetadata</literal> y la jerarquía <literal>Type</literal>. Las instancias de las interfaces de metadatos pueden obtenerse de <literal>SessionFactory</literal>."
+
+#: index.docbook:1026
+msgid "Finally, note that cascading of operations can be applied to an object graph at <emphasis>call time</emphasis> or at <emphasis>flush time</emphasis>. All operations, if enabled, are cascaded to associated entities reachable when the operation is executed. However, <literal>save-upate</literal> and <literal>delete-orphan</literal> are transitive for all associated entities reachable during flush of the <literal>Session</literal>."
+msgstr ""
+ "<![CDATA[Cat fritz = ......;\n"
+ "ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);\n"
+ "\n"
+ "Object[] propertyValues = catMeta.getPropertyValues(fritz);\n"
+ "String[] propertyNames = catMeta.getPropertyNames();\n"
+ "Type[] propertyTypes = catMeta.getPropertyTypes();\n"
+ "\n"
+ "// get a Map of all properties which are not collections or associations\n"
+ "Map namedValues = new HashMap();\n"
+ "for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {\n"
+ " namedValues.put( propertyNames[i], propertyValues[i] );\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:1038
+msgid "Using metadata"
+msgstr ""
+
+#: index.docbook:1040
+msgid "Hibernate requires a very rich meta-level model of all entity and value types. From time to time, this model is very useful to the application itself. For example, the application might use Hibernate's metadata to implement a \"smart\" deep-copy algorithm that understands which objects should be copied (eg. mutable value types) and which should not (eg. immutable value types and, possibly, associated entities)."
+msgstr ""
+
+#: index.docbook:1047
+msgid "Hibernate exposes metadata via the <literal>ClassMetadata</literal> and <literal>CollectionMetadata</literal> interfaces and the <literal>Type</literal> hierarchy. Instances of the metadata interfaces may be obtained from the <literal>SessionFactory</literal>."
+msgstr ""
+
+#: index.docbook:1054
+msgid ""
+ "<![CDATA[Cat fritz = ......;\n"
+ "ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);\n"
+ "\n"
+ "Object[] propertyValues = catMeta.getPropertyValues(fritz);\n"
+ "String[] propertyNames = catMeta.getPropertyNames();\n"
+ "Type[] propertyTypes = catMeta.getPropertyTypes();\n"
+ "\n"
+ "// get a Map of all properties which are not collections or associations\n"
+ "Map namedValues = new HashMap();\n"
+ "for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {\n"
+ " namedValues.put( propertyNames[i], propertyValues[i] );\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/toolset_guide.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/toolset_guide.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/toolset_guide.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,725 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Toolset Guide"
+msgstr "Guía del Conjunto de Herramientas"
+
+#: index.docbook:7
+msgid "Roundtrip engineering with Hibernate is possible using a set of Eclipse plugins, commandline tools, as well as Ant tasks."
+msgstr "La ingeniería de ida y vuelta con Hibernate es posible usando un conjunto de plugins de Eclipse, herramientas de línea de comandos, así como tareas de Ant."
+
+#: index.docbook:12
+msgid "The <emphasis>Hibernate Tools</emphasis> currently include plugins for the Eclipse IDE as well as Ant tasks for reverse engineering of existing databases:"
+msgstr "Las <emphasis>Herramientas de Hibernate</emphasis> actualmente incluyen plugins para la IDE de Eclipse así como tareas de Ant para la ingeniería inversa de bases de datos existentes:"
+
+#: index.docbook:18
+msgid "<emphasis>Mapping Editor:</emphasis> An editor for Hibernate XML mapping files, supporting auto-completion and syntax highlighting. It also supports semantic auto-completion for class names and property/field names, making it much more versatile than a normal XML editor."
+msgstr "<emphasis>Editor de Mapeo:</emphasis> Un editor de ficheros de mapeo XML, que soporta autocompleción y resaltado de sintáxis. Soporta también autocompleción semántica de nombres de clases y nombres de campos/propiedades, haciéndolo mucho más versátil que un editor de XML normal."
+
+#: index.docbook:23
+msgid "<emphasis>Console:</emphasis> The console is a new view in Eclipse. In addition to a tree overview of your console configurations, you also get an interactive view of your persistent classes and their relationships. The console allows you to execute HQL queries against your database and browse the result directly in Eclipse."
+msgstr "<emphasis>Consola:</emphasis> La consola es una nueva vista en Eclipse. Además de la vista de árbol de tus configuraciones de consola, tienes también una vista interactiva de tus clases persistentes y sus relaciones. La console te permite ejecutar consultas HQL contra tu base de datos y navegar el resultado directamente en Eclipse."
+
+#: index.docbook:30
+msgid "<emphasis>Development Wizards:</emphasis> Several wizards are provided with the Hibernate Eclipse tools; you can use a wizard to quickly generate Hibernate configuration (cfg.xml) files, or you may even completely reverse engineer an existing database schema into POJO source files and Hibernate mapping files. The reverse engineering wizard supports customizable templates."
+msgstr "<emphasis>Asistentes de Desarrollo:</emphasis> Se proveen muchos asistentes con las herramientas de Eclipse. Puedes usar un asistente para generar rápidamente ficheros de configuración de Hibernate (cfg.xml), o incluso puedes haceruna ingeniería inversa completa de un esquema de base de datos existente en ficheros de código de POJO y ficheros de mapeo de Hibernate. El asistente de ingeniería inversa soporta plantillas personalizables."
+
+#: index.docbook:38
+msgid "Ant Tasks:"
+msgstr "Tareas de Ant:"
+
+#: index.docbook:43
+msgid "Please refer to the <emphasis>Hibernate Tools</emphasis> package and it's documentation for more information."
+msgstr "Por favor refiérete al paquete <emphasis>Herramientas de Hibernate</emphasis> y su documentación para más información."
+
+#: index.docbook:48
+msgid "However, the Hibernate main package comes bundled with an integrated tool (it can even be used from \"inside\" Hibernate on-the-fly): <emphasis>SchemaExport</emphasis> aka <literal>hbm2ddl</literal>."
+msgstr "Sin embargo, el paquete principal de Hibernate viene incluyendo una herramienta integrada (puede ser usada incluso \"dentro\" de Hibernate on-the-fly): <emphasis>SchemaExport</emphasis> también conocido como <literal>hbm2ddl</literal>."
+
+#: index.docbook:55
+msgid "Automatic schema generation"
+msgstr "Generación automática de esquemas"
+
+#: index.docbook:57
+msgid "DDL may be generated from your mapping files by a Hibernate utility. The generated schema includes referential integrity constraints (primary and foreign keys) for entity and collection tables. Tables and sequences are also created for mapped identifier generators."
+msgstr "Una utilidad de Hibernate puede generar DDL desde tus ficheros de mapeo. El esquema generado incluye restricciones de integridad referencial (claves primarias y foráneas) para las tablas de entidades y colecciones. Las tablas y secuencias también son creadas para los generadores de identificadores mapeados."
+
+#: index.docbook:64
+msgid "You <emphasis>must</emphasis> specify a SQL <literal>Dialect</literal> via the <literal>hibernate.dialect</literal> property when using this tool, as DDL is highly vendor specific."
+msgstr "<emphasis>Debes</emphasis> especificar un <literal>Dialecto</literal> SQL vía la propiedad <literal>hibernate.dialect</literal> al usar esta herramienta, ya que el DDL es altamente específico del vendedor."
+
+#: index.docbook:70
+msgid "First, customize your mapping files to improve the generated schema."
+msgstr "First, customize your mapping files to improve the generated schema."
+
+#: index.docbook:75
+msgid "Customizing the schema"
+msgstr "Personalizando el esquema"
+
+#: index.docbook:77
+msgid "Many Hibernate mapping elements define optional attributes named <literal>length</literal>, <literal>precision</literal> and <literal>scale</literal>. You may set the length, precision and scale of a column with this attribute."
+msgstr "Muchos elementos de mapeo de Hibernate definen un atributo opcional llamado <literal>length</literal>. Con este atributo puedes establecer el tamaño de una columna. (O, para tipos de datos numéricos/decimales, la precisión.)"
+
+#: index.docbook:84
+msgid "<![CDATA[<property name=\"zip\" length=\"5\"/>]]>"
+msgstr "Algunas etiquetas también aceptan un atributo <literal>not-null</literal> (para generar una restricción <literal>NOT NULL</literal> en columnas de tablas) y y un atributo <literal>unique</literal> (para generar restricciones <literal>UNIQUE</literal> en columnas de tablas)."
+
+#: index.docbook:85
+msgid "<![CDATA[<property name=\"balance\" precision=\"12\" scale=\"2\"/>]]>"
+msgstr "Algunas etiquetas aceptan un atributo <literal>index</literal> para especificar el nombre de un índice para esa columna. Se puede usar un atributo <literal>unique-key</literal> para agrupar columnas en una restricción de clave de una sola unidad. Actualmente, el valor especificado del atributo <literal>unique-key</literal> <emphasis>no</emphasis> es usado para nombrar la restricción, sólo para agrupar las columnas en el fichero de mapeo."
+
+#: index.docbook:87
+msgid "Some tags also accept a <literal>not-null</literal> attribute (for generating a <literal>NOT NULL</literal> constraint on table columns) and a <literal>unique</literal> attribute (for generating <literal>UNIQUE</literal> constraint on table columns)."
+msgstr "Ejemplos:"
+
+#: index.docbook:93
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" not-null=\"true\"/>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"foo\" type=\"string\" length=\"64\" not-null=\"true\"/>\n"
+ "\n"
+ "<many-to-one name=\"bar\" foreign-key=\"fk_foo_bar\" not-null=\"true\"/>\n"
+ "\n"
+ "<element column=\"serial_number\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+
+#: index.docbook:95
+msgid "<![CDATA[<element column=\"serialNumber\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+msgstr "Alternativamente, estos elementos aceptan tambíen un elemento hijo <literal><column></literal>. Esto es particularmente útil para tipos multicolumnas:"
+
+#: index.docbook:97
+msgid "A <literal>unique-key</literal> attribute may be used to group columns in a single unique key constraint. Currently, the specified value of the <literal>unique-key</literal> attribute is <emphasis>not</emphasis> used to name the constraint in the generated DDL, only to group the columns in the mapping file."
+msgstr ""
+ "<![CDATA[<property name=\"foo\" type=\"string\">\n"
+ " <column name=\"foo\" length=\"64\" not-null=\"true\" sql-type=\"text\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:105
+msgid ""
+ "<![CDATA[<many-to-one name=\"org\" column=\"orgId\" unique-key=\"OrgEmployeeId\"/>\n"
+ "<property name=\"employeeId\" unique-key=\"OrgEmployee\"/>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"bar\" type=\"my.customtypes.MultiColumnType\"/>\n"
+ " <column name=\"fee\" not-null=\"true\" index=\"bar_idx\"/>\n"
+ " <column name=\"fi\" not-null=\"true\" index=\"bar_idx\"/>\n"
+ " <column name=\"fo\" not-null=\"true\" index=\"bar_idx\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:107
+msgid "An <literal>index</literal> attribute specifies the name of an index that will be created using the mapped column or columns. Multiple columns may be grouped into the same index, simply by specifying the same index name."
+msgstr "El atributo <literal>sql-type</literal> permite al usuario sobrescribir el mapeo por defecto de tipo Hibernate a tipo de datos SQL."
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[<property name=\"lastName\" index=\"CustName\"/>\n"
+ "<property name=\"firstName\" index=\"CustName\"/>]]>"
+msgstr "El atributo <literal>check</literal> te permite especificar una comprobación de restricción."
+
+#: index.docbook:115
+msgid "A <literal>foreign-key</literal> attribute may be used to override the name of any generated foreign key constraint."
+msgstr ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:120
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" foreign-key=\"FKFooBar\"/>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">\n"
+ " ...\n"
+ " <property name=\"bar\" type=\"float\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:122
+msgid "Many mapping elements also accept a child <literal><column></literal> element. This is particularly useful for mapping multi-column types:"
+msgstr "Resumen"
+
+#: index.docbook:127
+msgid ""
+ "<![CDATA[<property name=\"name\" type=\"my.customtypes.Name\"/>\n"
+ " <column name=\"last\" not-null=\"true\" index=\"bar_idx\" length=\"30\"/>\n"
+ " <column name=\"first\" not-null=\"true\" index=\"bar_idx\" length=\"20\"/>\n"
+ " <column name=\"initial\"/>\n"
+ "</property>]]>"
+msgstr "Atributo"
+
+#: index.docbook:129
+msgid "The <literal>default</literal> attribute lets you specify a default value for a column (you should assign the same value to the mapped property before saving a new instance of the mapped class)."
+msgstr "Valores"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<property name=\"credits\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"credits\" default=\"10\"/>\n"
+ "</property>]]>"
+msgstr "Interpretación"
+
+#: index.docbook:137
+msgid ""
+ "<![CDATA[<version name=\"version\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"version\" default=\"0\"/>\n"
+ "</property>]]>"
+msgstr "length"
+
+#: index.docbook:139
+msgid "The <literal>sql-type</literal> attribute allows the user to override the default mapping of a Hibernate type to SQL datatype."
+msgstr "number"
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<property name=\"balance\" type=\"float\">\n"
+ " <column name=\"balance\" sql-type=\"decimal(13,3)\"/>\n"
+ "</property>]]>"
+msgstr "largo de columna/precisión decimal"
+
+#: index.docbook:146
+msgid "The <literal>check</literal> attribute allows you to specify a check constraint."
+msgstr "not-null"
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>\n"
+ "</property>]]>"
+msgstr "true|false"
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">\n"
+ " ...\n"
+ " <property name=\"bar\" type=\"float\"/>\n"
+ "</class>]]>"
+msgstr "especifica que la columna debe ser no nulable"
+
+#: index.docbook:156
+msgid "Summary"
+msgstr "unique"
+
+#: index.docbook:163
+msgid "Attribute"
+msgstr "true|false"
+
+#: index.docbook:164
+msgid "Values"
+msgstr "especifica que la columna debe tener una restricción de unicidad"
+
+#: index.docbook:165
+msgid "Interpretation"
+msgstr "index"
+
+#: index.docbook:170
+msgid "length"
+msgstr "index_name"
+
+#: index.docbook:171, index.docbook:176, index.docbook:181
+msgid "number"
+msgstr "especifica el nombre de un índice (multicolumna)"
+
+#: index.docbook:172
+msgid "column length"
+msgstr "unique-key"
+
+#: index.docbook:175
+msgid "precision"
+msgstr "unique_key_name"
+
+#: index.docbook:177
+msgid "column decimal precision"
+msgstr "foreign-key"
+
+#: index.docbook:180
+msgid "scale"
+msgstr "foreign_key_name"
+
+#: index.docbook:182
+msgid "column decimal scale"
+msgstr "sql-type"
+
+#: index.docbook:185
+msgid "not-null"
+msgstr "column_type"
+
+#: index.docbook:186, index.docbook:191
+msgid "true|false"
+msgstr "sobrescribe el tipo de columna por defecto (sólo atributo del elemento <literal><column></literal>)"
+
+#: index.docbook:187
+msgid "specfies that the column should be non-nullable"
+msgstr "check"
+
+#: index.docbook:190
+msgid "unique"
+msgstr "expresión SQL"
+
+#: index.docbook:192
+msgid "specifies that the column should have a unique constraint"
+msgstr "El elemento <literal><comment></literal> te permite especificar un comentario para el esquema generado."
+
+#: index.docbook:195
+msgid "index"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">\n"
+ " <comment>Current customers only</comment>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:196
+msgid "index_name"
+msgstr ""
+ "<![CDATA[<property name=\"balance\">\n"
+ " <column name=\"bal\">\n"
+ " <comment>Balance in USD</comment>\n"
+ " </column>\n"
+ "</property>]]>"
+
+#: index.docbook:197
+msgid "specifies the name of a (multi-column) index"
+msgstr "Esto resulta en una sentencia <literal>comment on table</literal> o <literal>comment on column</literal> en el DDL generado (donde esté soportado)."
+
+#: index.docbook:200
+msgid "unique-key"
+msgstr "Ejecutando la herramienta"
+
+#: index.docbook:201
+msgid "unique_key_name"
+msgstr "La herramienta <literal>SchemaExport</literal> escribe un guión DDL a la salida estándar y/o ejecuta las sentencias DDL."
+
+#: index.docbook:202
+msgid "specifies the name of a multi-column unique constraint"
+msgstr "<literal>java -cp </literal><emphasis>classpaths_de_hibernate</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>opciones ficheros_de_mapeo</emphasis>"
+
+#: index.docbook:205
+msgid "foreign-key"
+msgstr "Opciones de Línea de Comandos de <literal>SchemaExport</literal>"
+
+#: index.docbook:206
+msgid "foreign_key_name"
+msgstr "Opción"
+
+#: index.docbook:207
+msgid "specifies the name of the foreign key constraint generated for an association, for a <literal><one-to-one></literal>, <literal><many-to-one></literal>, <literal><key></literal>, or <literal><many-to-many></literal> mapping element. Note that <literal>inverse=\"true\"</literal> sides will not be considered by <literal>SchemaExport</literal>."
+msgstr "Descripción"
+
+#: index.docbook:217
+msgid "sql-type"
+msgstr "--quiet"
+
+#: index.docbook:218
+msgid "SQL column type"
+msgstr "no enviar a salida estándar el guión"
+
+#: index.docbook:219
+msgid "overrides the default column type (attribute of <literal><column></literal> element only)"
+msgstr "--drop"
+
+#: index.docbook:225
+msgid "default"
+msgstr "sólo desechar las tablas"
+
+#: index.docbook:226, index.docbook:233
+msgid "SQL expression"
+msgstr "--text"
+
+#: index.docbook:227
+msgid "specify a default value for the column"
+msgstr "no exportar a la base de datos"
+
+#: index.docbook:232
+msgid "check"
+msgstr "--output=my_schema.ddl"
+
+#: index.docbook:234
+msgid "create an SQL check constraint on either column or table"
+msgstr "--config=hibernate.cfg.xml"
+
+#: index.docbook:242
+msgid "The <literal><comment></literal> element allows you to specify comments for the generated schema."
+msgstr "lee la configuración de Hibernate de un fichero XML"
+
+#: index.docbook:247
+msgid ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">\n"
+ " <comment>Current customers only</comment>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr "--properties=hibernate.properties"
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[<property name=\"balance\">\n"
+ " <column name=\"bal\">\n"
+ " <comment>Balance in USD</comment>\n"
+ " </column>\n"
+ "</property>]]>"
+msgstr "lee las propiedades de base de datos de un fichero"
+
+#: index.docbook:251
+msgid "This results in a <literal>comment on table</literal> or <literal>comment on column</literal> statement in the generated DDL (where supported)."
+msgstr "--format"
+
+#: index.docbook:260
+msgid "Running the tool"
+msgstr "formatea agradablemente el SQL generado en el guión"
+
+#: index.docbook:262
+msgid "The <literal>SchemaExport</literal> tool writes a DDL script to standard out and/or executes the DDL statements."
+msgstr "--delimiter=x"
+
+#: index.docbook:267
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "establece un delimitador de fin de línea para el guión"
+
+#: index.docbook:273
+msgid "<literal>SchemaExport</literal> Command Line Options"
+msgstr "Puedes incluso encajar <literal>SchemaExport</literal> en tu aplicación:"
+
+#: index.docbook:279, index.docbook:429, index.docbook:498
+msgid "Option"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+
+#: index.docbook:280, index.docbook:367, index.docbook:430, index.docbook:499
+msgid "Description"
+msgstr "Propiedades"
+
+#: index.docbook:285, index.docbook:435
+msgid "--quiet"
+msgstr "Las propiedades de base de datos pueden especificarse"
+
+#: index.docbook:286, index.docbook:436
+msgid "don't output the script to stdout"
+msgstr "como propiedades de sistema con <literal>-D</literal><emphasis><property></emphasis>"
+
+#: index.docbook:289
+msgid "--drop"
+msgstr "en <literal>hibernate.properties</literal>"
+
+#: index.docbook:290
+msgid "only drop the tables"
+msgstr "en un fichero de propiedades mencionado con <literal>--properties</literal>"
+
+#: index.docbook:293
+msgid "--create"
+msgstr "Las propiedades necesarias son:"
+
+#: index.docbook:294
+msgid "only create the tables"
+msgstr "Propiedades de Conexión de SchemaExport"
+
+#: index.docbook:297, index.docbook:439
+msgid "--text"
+msgstr "Nombre de Propiedad"
+
+#: index.docbook:298
+msgid "don't export to the database"
+msgstr "Descripción"
+
+#: index.docbook:301
+msgid "--output=my_schema.ddl"
+msgstr "hibernate.connection.driver_class"
+
+#: index.docbook:302
+msgid "output the ddl script to a file"
+msgstr "clase del driver jdbc"
+
+#: index.docbook:305, index.docbook:443, index.docbook:504
+msgid "--naming=eg.MyNamingStrategy"
+msgstr "hibernate.connection.url"
+
+#: index.docbook:306, index.docbook:444, index.docbook:505
+msgid "select a <literal>NamingStrategy</literal>"
+msgstr "url de jdbc"
+
+#: index.docbook:309, index.docbook:451, index.docbook:512
+msgid "--config=hibernate.cfg.xml"
+msgstr "hibernate.connection.username"
+
+#: index.docbook:310
+msgid "read Hibernate configuration from an XML file"
+msgstr "usuario de base de datos"
+
+#: index.docbook:313, index.docbook:447, index.docbook:508
+msgid "--properties=hibernate.properties"
+msgstr "hibernate.connection.password"
+
+#: index.docbook:314, index.docbook:448, index.docbook:509
+msgid "read database properties from a file"
+msgstr "contraseña de usuario"
+
+#: index.docbook:317
+msgid "--format"
+msgstr "hibernate.dialect"
+
+#: index.docbook:318
+msgid "format the generated SQL nicely in the script"
+msgstr "dialecto"
+
+#: index.docbook:321
+msgid "--delimiter=;"
+msgstr "Usando Ant"
+
+#: index.docbook:322
+msgid "set an end of line delimiter for the script"
+msgstr "Puedes llamar a <literal>SchemaExport</literal> desde tu guión de construcción de Ant:"
+
+#: index.docbook:328
+msgid "You may even embed <literal>SchemaExport</literal> in your application:"
+msgstr ""
+ "<![CDATA[<target name=\"schemaexport\">\n"
+ " <taskdef name=\"schemaexport\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaexport\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\"\n"
+ " text=\"no\"\n"
+ " drop=\"no\"\n"
+ " delimiter=\";\"\n"
+ " output=\"schema-export.sql\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaexport>\n"
+ "</target>]]>"
+
+#: index.docbook:332
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+msgstr "Actualizaciones incrementales de esquema"
+
+#: index.docbook:337
+msgid "Properties"
+msgstr "La herramienta <literal>SchemaUpdate</literal> actualizará un esquema existente con cambios \"incrementales\". Nota que <literal>SchemaUpdate</literal> depende fuertemente de la API de metadatos de JDBC, de modo que no funcionará con todos los drivers JDBC."
+
+#: index.docbook:339
+msgid "Database properties may be specified"
+msgstr "<literal>java -cp </literal><emphasis>classpaths_de_hibernate</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>opciones ficheros_de_mapeo</emphasis>"
+
+#: index.docbook:345
+msgid "as system properties with <literal>-D</literal><emphasis><property></emphasis>"
+msgstr "Opciones de Línea de Comandos de <literal>SchemaUpdate</literal>"
+
+#: index.docbook:348
+msgid "in <literal>hibernate.properties</literal>"
+msgstr "Opción"
+
+#: index.docbook:351
+msgid "in a named properties file with <literal>--properties</literal>"
+msgstr "Descripción"
+
+#: index.docbook:355
+msgid "The needed properties are:"
+msgstr "--quiet"
+
+#: index.docbook:360
+msgid "SchemaExport Connection Properties"
+msgstr "no enviar a salida estándar el guión"
+
+#: index.docbook:366
+msgid "Property Name"
+msgstr "--properties=hibernate.properties"
+
+#: index.docbook:372
+msgid "hibernate.connection.driver_class"
+msgstr "Puedes encajar <literal>SchemaUpdate</literal> en tu aplicación:"
+
+#: index.docbook:373
+msgid "jdbc driver class"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+
+#: index.docbook:376
+msgid "hibernate.connection.url"
+msgstr "Usando Ant para actualizaciones incrementales de esquema"
+
+#: index.docbook:377
+msgid "jdbc url"
+msgstr "Puedes llamar a <literal>SchemaUpdate</literal> desde el guión de Ant:"
+
+#: index.docbook:380
+msgid "hibernate.connection.username"
+msgstr ""
+ "<![CDATA[<target name=\"schemaupdate\">\n"
+ " <taskdef name=\"schemaupdate\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaupdate\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaupdate>\n"
+ "</target>]]>"
+
+#: index.docbook:381
+msgid "database user"
+msgstr ""
+
+#: index.docbook:384
+msgid "hibernate.connection.password"
+msgstr ""
+
+#: index.docbook:385
+msgid "user password"
+msgstr ""
+
+#: index.docbook:388
+msgid "hibernate.dialect"
+msgstr ""
+
+#: index.docbook:389
+msgid "dialect"
+msgstr ""
+
+#: index.docbook:398
+msgid "Using Ant"
+msgstr ""
+
+#: index.docbook:400
+msgid "You can call <literal>SchemaExport</literal> from your Ant build script:"
+msgstr ""
+
+#: index.docbook:404
+msgid ""
+ "<![CDATA[<target name=\"schemaexport\">\n"
+ " <taskdef name=\"schemaexport\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaexport\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\"\n"
+ " text=\"no\"\n"
+ " drop=\"no\"\n"
+ " delimiter=\";\"\n"
+ " output=\"schema-export.sql\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaexport>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:409
+msgid "Incremental schema updates"
+msgstr ""
+
+#: index.docbook:411
+msgid "The <literal>SchemaUpdate</literal> tool will update an existing schema with \"incremental\" changes. Note that <literal>SchemaUpdate</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers."
+msgstr ""
+
+#: index.docbook:417
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>options mapping_files</emphasis>"
+msgstr ""
+
+#: index.docbook:423
+msgid "<literal>SchemaUpdate</literal> Command Line Options"
+msgstr ""
+
+#: index.docbook:440
+msgid "don't export the script to the database"
+msgstr ""
+
+#: index.docbook:452, index.docbook:513
+msgid "specify a <literal>.cfg.xml</literal> file"
+msgstr ""
+
+#: index.docbook:458
+msgid "You may embed <literal>SchemaUpdate</literal> in your application:"
+msgstr ""
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+msgstr ""
+
+#: index.docbook:467
+msgid "Using Ant for incremental schema updates"
+msgstr ""
+
+#: index.docbook:469
+msgid "You can call <literal>SchemaUpdate</literal> from the Ant script:"
+msgstr ""
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[<target name=\"schemaupdate\">\n"
+ " <taskdef name=\"schemaupdate\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaupdate\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaupdate>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:478
+msgid "Schema validation"
+msgstr ""
+
+#: index.docbook:480
+msgid "The <literal>SchemaValidator</literal> tool will validate that the existing database schema \"matches\" your mapping documents. Note that <literal>SchemaValidator</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers. This tool is extremely useful for testing."
+msgstr ""
+
+#: index.docbook:486
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaValidator</literal> <emphasis>options mapping_files</emphasis>"
+msgstr ""
+
+#: index.docbook:492
+msgid "<literal>SchemaValidator</literal> Command Line Options"
+msgstr ""
+
+#: index.docbook:519
+msgid "You may embed <literal>SchemaValidator</literal> in your application:"
+msgstr ""
+
+#: index.docbook:523
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaValidator(cfg).validate();]]>"
+msgstr ""
+
+#: index.docbook:528
+msgid "Using Ant for schema validation"
+msgstr ""
+
+#: index.docbook:530
+msgid "You can call <literal>SchemaValidator</literal> from the Ant script:"
+msgstr ""
+
+#: index.docbook:534
+msgid ""
+ "<![CDATA[<target name=\"schemavalidate\">\n"
+ " <taskdef name=\"schemavalidator\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaValidatorTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemavalidator\n"
+ " properties=\"hibernate.properties\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemavalidator>\n"
+ "</target>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/transactions.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/transactions.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/transactions.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,738 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Transactions And Concurrency"
+msgstr "Transacciones y Concurrencia"
+
+#: index.docbook:7
+msgid "The most important point about Hibernate and concurrency control is that it is very easy to understand. Hibernate directly uses JDBC connections and JTA resources without adding any additional locking behavior. We highly recommend you spend some time with the JDBC, ANSI, and transaction isolation specification of your database management system."
+msgstr "El punto más importante sobre Hibernate y el control de concurrencia es que muy fácil de comprender. Hibernate usa directamente conexiones JDBC y recursos JTA sin agregar ningún comportamiento de bloqueo adicional. Recomendamos altamente que gastes algo de tiempo con la especificación de JDBC, ANSI, y el aislamiento de transacciones de tu sistema de gestión de base de datos. Hibernate sólo añade versionado automático pero no bloquea objetos en memoria ni cambia el nivel de aislamiento de tus transacciones de base de datos. Básicamente, usa Hibernate como usarías JDBC directo (o JTA/CMT) con tus recursos de base de datos."
+
+#: index.docbook:14
+msgid "Hibernate does not lock objects in memory. Your application can expect the behavior as defined by the isolation level of your database transactions. Note that thanks to the <literal>Session</literal>, which is also a transaction-scoped cache, Hibernate provides repeatable reads for lookup by identifier and entity queries (not reporting queries that return scalar values)."
+msgstr "Sin embargo, además del versionado automático, Hibernate ofrece una API (menor) para bloqueo pesimista de filas, usando la sintáxis <literal>SELECT FOR UPDATE</literal>. Esta API se discute más adelante en este capítulo:"
+
+#: index.docbook:22
+msgid "In addition to versioning for automatic optimistic concurrency control, Hibernate also offers a (minor) API for pessimistic locking of rows, using the <literal>SELECT FOR UPDATE</literal> syntax. Optimistic concurrency control and this API are discussed later in this chapter."
+msgstr "Comenzamos la discusión del control de concurrencia en Hibernate con la granularidad de <literal>Configuration</literal>, <literal>SessionFactory</literal>, y <literal>Session</literal>, así como la base de datos y las transacciones de aplicación largas."
+
+#: index.docbook:29
+msgid "We start the discussion of concurrency control in Hibernate with the granularity of <literal>Configuration</literal>, <literal>SessionFactory</literal>, and <literal>Session</literal>, as well as database transactions and long conversations."
+msgstr "Ámbitos de sesión y de transacción"
+
+#: index.docbook:36
+msgid "Session and transaction scopes"
+msgstr "Una <literal>SessionFactory</literal> es un objeto seguro entre hebras caro-de-crear pensado para ser compartido por todas las hebras de la aplicación. Es creado una sola vez, usualmente en el arranque de la aplicación, a partir de una instancia de <literal>Configuration</literal>."
+
+#: index.docbook:38
+msgid "A <literal>SessionFactory</literal> 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</literal> instance."
+msgstr "Una <literal>Session</literal> es un objeto barato, inseguro entre hebras que debe ser usado una sola vez, para un solo proceso de negocio, una sola unidad de trabajo, y luego descartado. Una <literal>Session</literal> no obtendrá una <literal>Connection</literal> JDBC (o un <literal>Datasource</literal>) a menos que sea necesario, de modo que puedas abrir y cerrar seguramente una <literal>Session</literal> incluso si no estás seguro que se necesitará acceso a los datos para servir una petición en particular. (Esto se vuelve importante en cuanto estés implementando alguno de los siguientes patrones usando intercepción de peticiones)."
+
+#: index.docbook:44
+msgid "A <literal>Session</literal> is an inexpensive, non-threadsafe object that should be used once, for a single request, a conversation, single unit of work, and then discarded. A <literal>Session</literal> will not obtain a JDBC <literal>Connection</literal> (or a <literal>Datasource</literal>) unless it is needed, hence consume no resources until used."
+msgstr "Para completar este cuadro tienes que pensar también en las transacciones de base de datos. Una transacción de base de datos tiene que ser tan corta como sea posible, para reducir la contención de bloqueos en la base de datos. Las transacciones largas de base de datos prevendrán a tu aplicación de escalar a una carga altamente concurrente."
+
+#: index.docbook:52
+msgid "To complete this picture you also have to think about database transactions. A database transaction has to be as short as possible, to reduce lock contention in the database. Long database transactions will prevent your application from scaling to highly concurrent load. Hence, it is almost never good design to hold a database transaction open during user think time, until the unit of work is complete."
+msgstr "¿Qué es el ámbito de una unidad de trabajo? ¿Puede una sola <literal>Session</literal> de Hibernate extenderse a través de varias transacciones de base de datos o es ésta una relación uno-a-uno de ámbitos? ¿Cuándo debes abrir y cerrar una <literal>Session</literal> y cómo demarcas los límites de la transacción de base de datos?"
+
+#: index.docbook:61
+msgid "What is the scope of a unit of work? Can a single Hibernate <literal>Session</literal> span several database transactions or is this a one-to-one relationship of scopes? When should you open and close a <literal>Session</literal> and how do you demarcate the database transaction boundaries?"
+msgstr "Unidad de trabajo"
+
+#: index.docbook:69
+msgid "Unit of work"
+msgstr "Primero, no uses el antipatrón <emphasis>sesión-por-operación</emphasis>, esto es, ¡no abras y cierres una <literal>Session</literal> para cada simple llamada a la base de datos en una sola hebra! Por supuesto, lo mismo es verdad para transacciones de base de datos. Las llamadas a base de datos en una aplicación se hacen usando una secuencia prevista, que están agrupadas dentro de unidades de trabajo atómicas. (Nota que esto también significa que el auto-commit después de cada una de las sentencias SQL es inútil en una aplicación, este modo está pensado para trabajo ad-hoc de consola SQL. Hibernate deshabilita, o espera que el servidor de aplicaciones lo haga, el modo auto-commit inmediatamente.)"
+
+#: index.docbook:71
+msgid "First, don't use the <emphasis>session-per-operation</emphasis> antipattern, that is, don't open and close a <literal>Session</literal> for every simple database call in a single thread! Of course, 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. (Note that this also means that auto-commit after every single SQL statement is useless in an application, this mode is intended for ad-hoc SQL console work. Hibernate disables, or expects the application server to do so, auto-commit mode immediately.) Database transactions are never optional, all communication with a database has to occur inside a transaction, no matter if you read or write data. As explained, 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 much more maintainable and extensible."
+msgstr "El patrón más común en una aplicación mutiusuario cliente/servidor es <emphasis>sesión-por-petición</emphasis>. En este modelo, una petición del cliente es enviada al servidor (en donde se ejecuta la capa de persistencia de Hibernate), se abre una nueva <literal>Session</literal> de Hibernate, y todas las operaciones de base de datos se ejecutan en esta unidad de trabajo. Una vez completado el trabajo (y se ha preparado la respuesta para el cliente) la sesión es limpiada y cerrada. Podrías usar una sola transacción de base de datos para servir a petición del cliente, comenzándola y comprometiéndola cuando abres y cierras la <literal>Session</literal>. La relación entre las dos es uno-a-uno y este modelo es a la medida perfecta de muchas aplicaciones."
+
+#: index.docbook:87
+msgid "The most common pattern in a multi-user client/server application is <emphasis>session-per-request</emphasis>. In this model, a request from the client is send to the server (where the Hibernate persistence layer runs), a new Hibernate <literal>Session</literal> is opened, and all database operations are executed in this unit of work. Once the work has been completed (and the response for the client has been prepared), the session is flushed and closed. You would also use a single database transaction to serve the clients request, starting and committing it when you open and close the <literal>Session</literal>. The relationship between the two is one-to-one and this model is a perfect fit for many applications."
+msgstr "El desafío yace en la implementación: no sólo tienen que comenzarse y terminarse correctamente la <literal>Session</literal> y la transacción, sino que además tienen que estar accesibles para las operaciones de acceso a datos. La demarcación de una unidad de trabajo se implementa idealmente usando un interceptor que se ejecuta cuando una petición llama al servidor y anter que la respuesta sea enviada (es decir, un <literal>ServletFilter</literal>). Recomendamos ligar la <literal>Session</literal> a la hebra que atiende la petición, usando una variable <literal>ThreadLocal</literal>. Esto permite un fácil acceso (como acceder a una variable static) en tódo el código que se ejecuta en esta hebra. Dependiendo del mecanismo de demarcación de transacciones de base de datos que elijas, podrías mantener también el contexto de la transacción en una variable <literal>Thre!
adLocal</literal>. Los patrones de implementación para esto son conocidos como <emphasis>Sesión Local de Hebra (ThreadLocal Session)</emphasis> y <emphasis>Sesión Abierta en Vista (Open Session in View)</emphasis>. Puedes extender fácilmente la clase de ayuda <literal>HibernateUtil</literal> mostrada anteriormente para encontrar una forma de implementar un interceptor e instalarlo en tu entorno. Ver el sitio web de Hibernate para consejos y ejemplos."
+
+#: index.docbook:99
+msgid "The challenge lies in the implementation. Hibernate provides built-in management of the \"current session\" to simplify this pattern. All you have to do is start a transaction when a server request has to be processed, and end the transaction before the response is send to the client. You can do this in any way you like, common solutions are <literal>ServletFilter</literal>, 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 decide to use programmatic transaction demarcation, prefer the Hibernate <literal>Transaction</literal> API shown later in this chapter, for ease of use and code portability."
+msgstr "Transacciones de aplicación"
+
+#: index.docbook:112
+msgid "Your application code can access a \"current session\" to process the request by simply calling <literal>sessionFactory.getCurrentSession()</literal> anywhere and as often as needed. You will always get a <literal>Session</literal> 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 "El patrón sesión-por-petición no es el único concepto útil que puedes usar para diseñar unidades de trabajo. Muchos procesos de negocio requiere una serie completa de interacciones con el usuario intercaladas con accesos a base de datos. En aplicaciones web y de empresa no es aceptable que una transacción de base de datos se extienda a través de la interacción de un usuario. Considera el siguiente ejemplo:"
+
+#: index.docbook:120
+msgid "Sometimes it is convenient to extend the scope of a <literal>Session</literal> 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 complete is easy to do if you implement your own interceptor. However, it is not easily doable if you rely on EJBs with container-managed transactions, as 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 around this <emphasis>Open Session in View</emphasis> pattern."
+msgstr "Se abre la primera pantalla de un diálogo, los datos vistos por el usuario han sido cargados en una <literal>Session</literal> y transacción de base de datos particular. El usuario es libre de modificar los objetos."
+
+#: index.docbook:135
+msgid "Long conversations"
+msgstr "El usuario hace click en \"Salvar\" después de 5 minutos y espera que sus modificaciones sean hechas persistentes. También espera que él sea la única persona editando esta información y que no puede ocurrir ninguna modificación en conflicto."
+
+#: index.docbook:137
+msgid "The session-per-request pattern is not the only useful concept you can use to design units of work. Many business processes require a whole series of interactions with the user interleaved with database accesses. In web and enterprise applications it is not acceptable for a database transaction to span a user interaction. Consider the following example:"
+msgstr "Llamamos a esto unidad de trabajo, desde el punto de vista del usuario, una larga <emphasis>transacción de aplicación</emphasis> ejecutándose. Hay muchas formas en que puedes implementar esto en tu aplicación."
+
+#: index.docbook:147
+msgid "The first screen of a dialog opens, the data seen by the user has been loaded in a particular <literal>Session</literal> and database transaction. The user is free to modify the objects."
+msgstr "Una primera implementación ingenua podría mantener abierta la <literal>Session</literal> y la transacción de base de datos durante el tiempo de pensar del usuario, con bloqueos tomados en la base de datos para prevenir la modificación concurrente, y para garantizar aislamiento y atomicidad. Esto es, por supuesto, un antipatrón, ya que la contención de bloqueo no permitiría a la aplicación escalar con el número de usuarios concurrentes."
+
+#: index.docbook:154
+msgid "The user clicks \"Save\" after 5 minutes and expects his modifications to be made persistent; he also expects that he was the only person editing this information and that no conflicting modification can occur."
+msgstr "Claramente, tenemos que usar muchas transacciones de base de datos para implementar la transacción de aplicación. En este caso, mantener el aislamiento de los procesos de negocio se vuelve una responsabilidad parcial de la capa de aplicación. Una sola transacción de aplicación usualmente abarca varias transacciones de base de datos. Será atómica si sólo una de estas transacciones de base de datos (la última) almacena los datos actualizados, todas las otras simplemente leen datos (por ejemplo, en un diálogo estilo-asistente abarcando muchos ciclos petición/respuesta). Esto es más fácil de implementar de lo que suena, especialmente si usas las funcionalidades de Hibernate:"
+
+#: index.docbook:162
+msgid "We call this unit of work, from the point of view of the user, a long running <emphasis>conversation</emphasis> (or <emphasis>application transaction</emphasis>). There are many ways how you can implement this in your application."
+msgstr "<emphasis>Versionado Automático</emphasis> - Hibernate puede llevar un control automático de concurrencia optimista por ti, puede detectar automáticamente si una modificación concurrente ha ocurrido durante el tiempo de pensar del usuario."
+
+#: index.docbook:168
+msgid "A first naive implementation might keep the <literal>Session</literal> 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 of course an anti-pattern, since lock contention would not allow the application to scale with the number of concurrent users."
+msgstr "<emphasis>Objetos Separados</emphasis> - Si decides usar el ya discutido patrón de <emphasis>sesión-por-petición</emphasis>, todas las instancias cargadas estarán en estado separado durante el tiempo de pensar del usuario. Hibernate te permite volver a unir los objetos y hacer persistentes las modificaciones. El patrón se llama <emphasis>sesión-por-petición-con-objetos-separados</emphasis>. Se usa versionado automático para aislar las modificaciones concurrentes."
+
+#: index.docbook:176
+msgid "Clearly, we have to use several database transactions to implement the converastion. 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 (e.g. in a wizard-style dialog spanning several request/response cycles). This is easier to implement than it might sound, especially if you use Hibernate's features:"
+msgstr "<emphasis>Sesión Larga</emphasis> - La <literal>Session</literal> de Hibernate puede ser desconectada de la conexión JDBC subyacente después que se haya sido comprometida la transacción de base de datos, y reconectada cuando ocurra una nueva petición del cliente. Este patrón es conocido como <emphasis>sesión-por-transacción-de-aplicación</emphasis> y hace la re-unión innecesaria. Para aislar las modificaciones concurrentes se usa el versionado automático."
+
+#: index.docbook:189
+msgid "<emphasis>Automatic Versioning</emphasis> - Hibernate can do automatic optimistic concurrency control for you, it can automatically detect if a concurrent modification occured during user think time. Usually we only check at the end of the conversation."
+msgstr "Tanto <emphasis>sesión-por-petición-con-objetos-separados</emphasis> como <emphasis>sesión-por-transacción-de-aplicación</emphasis>, ambas tienen ventajas y desventajas, las discutimos más adelante en este capítulo en el contexto del control optimista de concurrencia."
+
+#: index.docbook:197
+msgid "<emphasis>Detached Objects</emphasis> - If you decide to use the already discussed <emphasis>session-per-request</emphasis> pattern, all loaded instances will be in 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</emphasis>. Automatic versioning is used to isolate concurrent modifications."
+msgstr "Considerando la identidad del objeto"
+
+#: index.docbook:207
+msgid "<emphasis>Extended (or Long) Session</emphasis> - The Hibernate <literal>Session</literal> may 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</literal> is usually not allowed to be flushed automatically, but explicitely."
+msgstr "Una aplicación puede acceder concurrentemente a el mismo estado persistente en dos <literal>Session</literal>s diferentes. Sin embargo, una instancia de una clase persistente nunca se comparte entre dos instancias de <literal>Session</literal>. Por lo tanto existen dos nociones diferentes de identidad:"
+
+#: index.docbook:220
+msgid "Both <emphasis>session-per-request-with-detached-objects</emphasis> and <emphasis>session-per-conversation</emphasis> have advantages and disadvantages, we discuss them later in this chapter in the context of optimistic concurrency control."
+msgstr "Identidad de Base de Datos"
+
+#: index.docbook:229
+msgid "Considering object identity"
+msgstr "foo.getId().equals( bar.getId() )"
+
+#: index.docbook:231
+msgid "An application may concurrently access the same persistent state in two different <literal>Session</literal>s. However, an instance of a persistent class is never shared between two <literal>Session</literal> instances. Hence there are two different notions of identity:"
+msgstr "Identidad JVM"
+
+#: index.docbook:240
+msgid "Database Identity"
+msgstr "foo==bar"
+
+#: index.docbook:243
+msgid "foo.getId().equals( bar.getId() )"
+msgstr "Entonces para objetos unidos a una <literal>Session</literal> <emphasis>en particular</emphasis> (es decir en el ámbito de una <literal>Session</literal>) las dos nociones son equivalentes, y la identidad JVM para la identidad de base de datos está garantizada por Hibernate. Sin embargo, mientras la aplicación acceda concurrentemente al \"mismo\" (identidad persistente) objeto de negocio en dos sesiones diferentes, las dos instancias serán realmente \"diferentes\" (identidad JVM). Los conflictos se resuelven (con versionado automático) en tiempo de limpieza (flush) usando un enfoque optimista."
+
+#: index.docbook:248
+msgid "JVM Identity"
+msgstr "Este enfoque deja que Hibernate y la base de datos se preocupen sobre la concurrencia. Además provee la mejor escalabilidad, ya que garantizando la identidad un unidades de trabajo monohebra no se necesitan bloqueos caros u otros medios de sincronización. La aplicación nunca necesita sincronizar sobre ningún objeto de negocio, siempre que se apegue a una sola hebra por <literal>Session</literal>. Dentro de una <literal>Session</literal> la aplicación puede usar con seguridad <literal>==</literal> para comparar objetos."
+
+#: index.docbook:251
+msgid "foo==bar"
+msgstr "Sin embargo, una aplicación que usa <literal>==</literal> fuera de una <literal>Session</literal>, podría ver resultados inesperados. Esto podría ocurrir incluso en sitios algo inesperados, por ejemplo, si pones dos instancias separadas dentro del mismo <literal>Set</literal>. Ambas podrían tener la misma identidad de base de datos (es decir, representar la misma fila), pero la identidad JVM, por definición, no está garantizada para las instancias en estado separado. El desarrollador tiene que sobrescribir los métodos <literal>equals()</literal> y <literal>hashCode()</literal> en las clases persistentes e implementar su propia noción de igualdad de objetos. Hay una advertencia: Nunca uses el identificador de base de datos para implementar la igualdad, usa una clave de negocio, una combinación de atributos únicos, usualmente inmutables. El identificador de base de datos cambiará si un objeto!
transitorio es hecho persistente. Si la instancia transitoria (usualmente junta a instancias separadas) es mantenida en un <literal>Set</literal>, cambiar el código hash rompe el contrato del <literal>Set</literal>. Los atributos para las claves de negocio no tienen que ser tan estables como las claves primarias de base de datos, sólo tienes que garantizar estabilidad en tanto los objetos estén en el mismo <literal>Set</literal>. Mira el sitio web de Hibernate para una discusión más cuidadosa de este tema. Nota también que éste no es un tema de Hibernate, sino simplemente cómo la identidad y la igualdad de los objetos Java tiene que ser implementada."
+
+#: index.docbook:257
+msgid "Then for objects attached to a <emphasis>particular</emphasis> <literal>Session</literal> (i.e. in the scope of a <literal>Session</literal>) the two notions are equivalent, and JVM identity for database identity is guaranteed by Hibernate. However, 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 (automatic versioning) at flush/commit time, using an optimistic approach."
+msgstr "Temas comunes"
+
+#: index.docbook:266
+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 only doesn't need expensive locking or other means of synchronization. The application never needs to synchronize on any business object, as long as it sticks to a single thread per <literal>Session</literal>. Within a <literal>Session</literal> the application may safely use <literal>==</literal> to compare objects."
+msgstr "Nunca uses los antipatrones <emphasis>sesión-por-sesión-de-usuario</emphasis> o <emphasis>sesión-por-aplicación</emphasis> (por supuesto, hay raras excepciones a esta regla). Nota que algunis de los siguientes temas podrían también aparecer con los patrones recomendados. Asegúrate que entiendes las implicaciones antes de tomar una decisión de diseño:"
+
+#: index.docbook:275
+msgid "However, an application that uses <literal>==</literal> outside of a <literal>Session</literal>, might see unexpected results. This might occur even in some unexpected places, for example, if you put two detached instances into the same <literal>Set</literal>. Both might have the same database identity (i.e. they represent the same row), but JVM identity is by definition not guaranteed for instances in detached state. The developer has to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods in persistent classes and implement his own notion of object equality. There is one caveat: Never use the database identifier to implement equality, use a business key, 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</literal>, changing the hashcode breaks the contract of t!
he <literal>Set</literal>. Attributes for business keys don't 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</literal>. See the Hibernate website for a more thorough discussion of this issue. Also note that this is not a Hibernate issue, but simply how Java object identity and equality has to be implemented."
+msgstr "Una <literal>Session</literal> no es segura entre hebras. Las cosas que se suponen que funcionan concurrentemente, como peticiones HTTP, beans de sesión, o workers de Swing, provocarán condiciones de competencia si una instancia de <literal>Session</literal> fuese compartida. Si guardas tu <literal>Session</literal> de Hibernate en tu <literal>HttpSession</literal> (discutido más adelante), debes considerar sincronizar el acceso a tu sesión HTTP. De otro modo, un usuario que hace click lo suficientemente rápido puede llegar a usar la misma <literal>Session</literal> en dos hebras ejecutándose concurrentemente."
+
+#: index.docbook:296
+msgid "Common issues"
+msgstr "Una excepción lanzada por Hibernate significa que tienes que deshacer (rollback) tu transacción de base de datos y cerrar la <literal>Session</literal> inmediatamente (discutido en más detalle luego). Si tu <literal>Session</literal> está ligada a la aplicación, tienes que parar la aplicación. Deshacer (rollback) la transacción de base de datos no pone a tus objetos de vuelta al estado en que estaban al comienzo de la transacción. Esto significa que el estado de la base de datos y los objetos de negocio quedan fuera de sincronía. Usualmente esto no es un problema, pues las excepciones no son recuperables y tienes que volver a comenzar después del rollback de todos modos."
+
+#: index.docbook:298
+msgid "Never use the anti-patterns <emphasis>session-per-user-session</emphasis> or <emphasis>session-per-application</emphasis> (of course, there are rare exceptions to this rule). Note that some of the following issues might also appear with the recommended patterns, make sure you understand the implications before making a design decision:"
+msgstr "La <literal>Session</literal> pone en caché todo objeto que esté en estado persistente (vigilado y chequeado por estado sucio por Hibernate). Esto significa que crece sin fin hasta que obtienes una OutOfMemoryException, si la mantienes abierta por un largo tiempo o simplemente cargas demasiados datos. Una solución para esto es llamar a <literal>clear()</literal> y <literal>evict()</literal> para gestionar el caché de la <literal>Session</literal>, pero probalemente debas considerar un procedimiento almacenado si necesitas operaciones de datos masivas. Se muestran algunas soluciones en <xref linkend=\"batch\"/>. Mantener una <literal>Session</literal> abierta por la duración de una sesión de usuario significa también una alta probabilidad de datos añejos."
+
+#: index.docbook:307
+msgid "A <literal>Session</literal> is not thread-safe. Things which are supposed to work concurrently, like HTTP requests, session beans, or Swing workers, will cause race conditions if a <literal>Session</literal> instance would be shared. If you keep your Hibernate <literal>Session</literal> in your <literal>HttpSession</literal> (discussed later), you should consider synchronizing access to your Http session. Otherwise, a user that clicks reload fast enough may use the same <literal>Session</literal> in two concurrently running threads."
+msgstr "Demarcación de la transacción de base de datos"
+
+#: index.docbook:318
+msgid "An exception thrown by Hibernate means you have to rollback your database transaction and close the <literal>Session</literal> immediately (discussed later in more detail). If your <literal>Session</literal> is bound to the application, you have to stop the application. Rolling back the database transaction doesn't put your business objects back into the state they were at the start of the transaction. This means the database state and the business objects do get out of sync. Usually this is not a problem, because exceptions are not recoverable and you have to start over after rollback anyway."
+msgstr "Los límites de las transacciones de base de datos (o sistema) son siempre necesarios. Ninguna comunicación con la base de datos puede darse fuera de una transacción de base de datos (esto parece confundir muchos desarrolladores acostumbrados al modo auto-commit). Siempre usa límites de transacción claros, incluso para las operaciones de sólo lectura. Dependiendo del nivel de aislamiento y las capacidades de base de datos, esto podría o no ser requerido, pero no hay un merma si siempre demarcas explícitamente las transacciones."
+
+#: index.docbook:330
+msgid "The <literal>Session</literal> caches every object that is in persistent state (watched and checked for dirty state by Hibernate). This means it grows endlessly until you get an OutOfMemoryException, if you keep it open for a long time or simply load too much data. One solution for this is to call <literal>clear()</literal> and <literal>evict()</literal> to manage the <literal>Session</literal> cache, but you most likely should consider a Stored Procedure if you need mass data operations. Some solutions are shown in <xref linkend=\"batch\"/>. Keeping a <literal>Session</literal> open for the duration of a user session also means a high probability of stale data."
+msgstr "Una aplicación Hibernate puede ejecutarse en entornos no manejados (es decir, como independiente, Web simple, o aplicaciones Swing) y entornos manejados J2EE. En un entorno no manejado, Hibernate es usualmente responsable de su propio pool de conexiones de base de datos. El desarrollador de aplicaciones tiene que establecer manualmente los límites de transacción, en otras palabras, hacer begin, commit, o rollback las transacciones de base de datos por sí mismo. Un entorno manejado usualmente provee transacciones gestionadas por contenedor, con el ensamble de transacción definido declarativamente en descriptores de despliegue de beans de sesión EJB, por ejemplo. La demarcación programática de transacciones no es más necesario, incluso limpiar (flush) la <literal>Session</literal> es hecho automáticamente."
+
+#: index.docbook:348
+msgid "Database transaction demarcation"
+msgstr "Sin embargo, frecuentemente es deseable mantener portable tu capa de persistencia. Hibernate ofrece una API de envoltura llamada <literal>Transaction</literal> que se traduce al sistema de transacciones nativo de tu entorno de despliegue. Esta API es realmente opcional, pero recomendamos fuertemente su uso salvo que estés en un bean de sesión CMT."
+
+#: index.docbook:350
+msgid "Datatabase (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 "Usualmente, finalizar una <literal>Session</literal> implica cuatro fases distintas:"
+
+#: index.docbook:360
+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, in other words, begin, commit, or rollback database transactions himself. 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 "limpiar (flush) la sesión"
+
+#: index.docbook:370
+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 you'd use programmatic transaction demaracation. Hibernate offers a wrapper API called <literal>Transaction</literal> 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 "comprometer la transacción"
+
+#: index.docbook:379
+msgid "Usually, ending a <literal>Session</literal> involves four distinct phases:"
+msgstr "cerrar la sesión"
+
+#: index.docbook:385
+msgid "flush the session"
+msgstr "manejar excepciones"
+
+#: index.docbook:390
+msgid "commit the transaction"
+msgstr "Limpiar la sesión ha sido discutido anteriormente, tendremos ahora una mirada más de cerca a la demarcación de transacciones y manejo de excepciones en sendos entornos manejado y no manejados."
+
+#: index.docbook:395
+msgid "close the session"
+msgstr "Entorno no manejado"
+
+#: index.docbook:400
+msgid "handle exceptions"
+msgstr "Si una capa de persistencia Hibernate se ejecuta en un entorno no manejado, las conexiones de base de datos son manejadas usualmente por el mecanismo de pooling de Hibernate. El idioma manejo de sesión/transacción se ve así:"
+
+#: index.docbook:406
+msgid "Flushing the session has been discussed earlier, we'll now have a closer look at transaction demarcation and exception handling in both managed- and non-managed environments."
+msgstr ""
+ "<![CDATA[//Non-managed environment idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+
+#: index.docbook:413
+msgid "Non-managed environment"
+msgstr "No tienes que limpiar con <literal>flush()</literal> la <literal>Session</literal> explícitamente - la llamada a <literal>commit()</literal> automáticamente dispara la sincronización."
+
+#: index.docbook:415
+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 "Una llamada a <literal>close()</literal> marca el fin de una sesión. La principal implicación de <literal>close()</literal> es que la conexión JDBC será abandonada por la sesión."
+
+#: index.docbook:422
+msgid ""
+ "<![CDATA[// Non-managed environment idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr "Este código Java es portable y se ejecuta tanto en entornos no manejados como en entornos JTA."
+
+#: index.docbook:424
+msgid "You don't have to <literal>flush()</literal> the <literal>Session</literal> explicitly - the call to <literal>commit()</literal> automatically triggers the synchronization (depending upon the <xref linkend=\"objectstate-flushing\"/>FlushMode for the session. A call to <literal>close()</literal> marks the end of a session. The main implication of <literal>close()</literal> is that the JDBC connection will be relinquished by the session. This Java code is portable and runs in both non-managed and JTA environments."
+msgstr "Muy probablemente nunca veas este idioma en código de negocio en una aplicación normal; las excepciones fatales (sistema) deben siempre ser capturadas en la \"cima\". En otras palabras, el código que ejecuta las llamadas de Hibernate (en la capa de persistencia) y el código que maneja <literal>RuntimeException</literal> (y usualmente sólo puede limpiar y salir) están en capas diferentes. Esto puede ser un desafío de diseñarlo tú mismo y debes usar los servicios de contenedor J2EE/EJB en cuanto estuviesen disponibles. El manejo de excepciones se dicute más adelante en este capítulo."
+
+#: index.docbook:433
+msgid "A much more flexible solution is Hibernate's built-in \"current session\" context management, as described earlier:"
+msgstr "Nota que debes seleccionar <literal>org.hibernate.transaction.JDBCTransactionFactory</literal> (que es el por defecto)."
+
+#: index.docbook:438
+msgid ""
+ "<![CDATA[// Non-managed environment idiom with getCurrentSession()\n"
+ "try {\n"
+ " factory.getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " factory.getCurrentSession().getTransaction().commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " factory.getCurrentSession().getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr "Usando JTA"
+
+#: index.docbook:440
+msgid "You will very likely never 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</literal> (and usually can only clean up and exit) are in different layers. The current context management by Hibernate can significantly simplify this design, as all you need is access to a <literal>SessionFactory</literal>. Exception handling is discussed later in this chapter."
+msgstr "Si tu capa de persistencia se ejecuta en un servidor de aplicaciones (por ejemplo, detrás de beans de sesión EJB), cada conexión de datasource obtenida por Hibernate será parte automáticamente de la transacción JTA global. Hibernate ofrece dos estrategias para esta integración."
+
+#: index.docbook:450
+msgid "Note that you should select <literal>org.hibernate.transaction.JDBCTransactionFactory</literal> (which is the default), and for the second example <literal>\"thread\"</literal> as your <literal>hibernate.current_session_context_class</literal>."
+msgstr "Si usas transacciones gestionadas-por-bean (BMT) Hibernate le dirá al servidor de aplicaciones que comience y finalice una transacción BMT si usas la API de <literal>Transaction</literal>. De modo que, el código de gestión de la transacción es idéntico al de un entorno no manejado."
+
+#: index.docbook:459
+msgid "Using JTA"
+msgstr ""
+ "<![CDATA[// BMT idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+
+#: index.docbook:461
+msgid "If your persistence layer runs in an application server (e.g. 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 "Con CMT, la demarcación de la transacción se hace en descriptores de despliegue de beans de sesión, no programáticamente. Si no quieres limpiar (flush) y cerrar manualmente la <literal>Session</literal> por ti mismo, solamente establece <literal>hibernate.transaction.flush_before_completion</literal> a <literal>true</literal>, <literal>hibernate.connection.release_mode</literal> a <literal>after_statement</literal> o <literal>auto</literal> y <literal>hibernate.transaction.auto_close_session</literal> a <literal>true</literal>. Hibernate limpiará y cerrará entonces automáticamente la <literal>Session</literal> para ti. Lo único que resta es deshacer (rollback) la transacción cuando ocurra una excepción. Afortunadamente, en un bean CMT, incluso esto ocurre automáticamente, ya que una <literal>RuntimeException</literal> no manejada disparada por un método de un bean de sesión le!
dice al contenedor que ponga a deshacer la transacción global. <emphasis>Esto significa que, en CMT, no necesitas usar en absoluto la API de <literal>Transaction</literal> de Hibernate.</emphasis>"
+
+#: index.docbook:468
+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</literal> API. So, the transaction management code is identical to the non-managed environment."
+msgstr "Nota que debes elegir <literal>org.hibernate.transaction.JTATransactionFactory</literal> en un bean de sesión BMT, y <literal>org.hibernate.transaction.CMTTransactionFactory</literal> en un bean de sesión CMT, cuando configures la fábrica de transacciones de Hibernate. Recuerda además establecer <literal>org.hibernate.transaction.manager_lookup_class</literal>."
+
+#: index.docbook:474
+msgid ""
+ "<![CDATA[// BMT idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr "Si trabajas en un entorno CMT, y usas limpieza (flushing) y cierre automáticos de la sesión, podrías querer también usar la misma sesión en diferentes partes de tu código. Típicamente, en un entorno no manejado, usarías una variable <literal>ThreadLocal</literal> para tener la sesión, pero una sola petición de EJB puede ejecutarse en diferentes hebras (por ejemplo, un bean de sesión llamando a otro bean de sesión). Si no quieres molestarte en pasar tu <literal>Session</literal> por alrededor, la <literal>SessionFactory</literal> provee el método <literal>getCurrentSession()</literal>, que devuelve una sesión que está pegada al contexto de transacción JTA. ¡Esta es la forma más fácil de integrar Hibernate en una aplicación! La sesión \"actual\" siempre tiene habilitados limpieza, cierre y liberación de conexió!
;n automáticos (sin importar la configuración de las propiedades anteriores). Nuestra idioma de gestión de sesión/transacción se reduce a:"
+
+#: index.docbook:476
+msgid "If you want to use a transaction-bound <literal>Session</literal>, that is, the <literal>getCurrentSession()</literal> functionality for easy context propagation, you will have to use the JTA <literal>UserTransaction</literal> API directly:"
+msgstr ""
+ "<![CDATA[// CMT idiom\n"
+ "Session sess = factory.getCurrentSession();\n"
+ "\n"
+ "// do some work\n"
+ "...\n"
+ "\n"
+ "]]>"
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[// BMT idiom with getCurrentSession()\n"
+ "try {\n"
+ " UserTransaction tx = (UserTransaction)new InitialContext()\n"
+ " .lookup(\"java:comp/UserTransaction\");\n"
+ "\n"
+ " tx.begin();\n"
+ "\n"
+ " // Do some work on Session bound to transaction\n"
+ " factory.getCurrentSession().load(...);\n"
+ " factory.getCurrentSession().persist(...);\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr "En otras palabras, todo lo que tienes que hacer en un entorno manejado, es llamar a <literal>SessionFactory.getCurrentSession()</literal>, hacer tu trabajo de acceso a datos, y dejar el resto al contenedor. Los límites de transacción se establecen declarativamente en los descriptores de despliegue de tu bean de sesión. El ciclo de vida de la sesión es manejado completamente por Hibernate."
+
+#: index.docbook:484
+msgid "With CMT, transaction demarcation is done in session bean deployment descriptors, not programatically, hence, the code is reduced to:"
+msgstr "Existe una advertencia al uso del modo de liberación de conexión <literal>after_statement</literal>. Debido a una limitación tonta de la especificación de JTA, no es posible para Hibernate limpiar automáticamente ningún <literal>ScrollableResults</literal> no cerrado ni instancias de <literal>Iterator</literal> devueltas por <literal>scroll()</literal> o <literal>iterate()</literal>. <emphasis>Debes</emphasis> liberar el cursor de base de datos subyacente llamando a <literal>ScrollableResults.close()</literal> o <literal>Hibernate.close(Iterator)</literal> explícitamente desde un bloque <literal>finally</literal>. (Por supuesto, la mayoría de las aplicaciones pueden evitarlo fácilmente no usando en absoluto ningún <literal>scroll()</literal> o <literal>iterate()</literal> desde el código CMT.)"
+
+#: index.docbook:489
+msgid ""
+ "<![CDATA[// CMT idiom\n"
+ " Session sess = factory.getCurrentSession();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "]]>"
+msgstr "Manejo de excepciones"
+
+#: index.docbook:491
+msgid "In a CMT/EJB even rollback happens automatically, since an unhandled <literal>RuntimeException</literal> thrown by a session bean method tells the container to set the global transaction to rollback. <emphasis>This means you do not need to use the Hibernate <literal>Transaction</literal> API at all with BMT or CMT, and you get automatic propagation of the \"current\" Session bound to the transaction.</emphasis>"
+msgstr "Si la <literal>Session</literal> lanza una excepción (incluyendo cualquier <literal>SQLException</literal>), debes inmediatamente deshacer (rollback) la transacción de base de datos, llamar a <literal>Session.close()</literal> y descartar la instancia de <literal>Session</literal>. Ciertos métodos de <literal>Session</literal> <emphasis>no</emphasis> dejarán la sesión en un estado consistente. Ninguna excepción lanzada por Hibernate puede ser tratada como recuperable. Asegúrate que la <literal>Session</literal> sea cerrada llamando a <literal>close()</literal> en un bloque <literal>finally</literal>."
+
+#: index.docbook:499
+msgid "Note that you should 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, when you configure Hibernate's transaction factory. Remember to also set <literal>hibernate.transaction.manager_lookup_class</literal>. Furthermore, make sure that your <literal>hibernate.current_session_context_class</literal> is either unset (backwards compatiblity), or set to <literal>\"jta\"</literal>."
+msgstr "La <literal>HibernateException</literal>, que envuelve la mayoría de los errores que pueden ocurrir en la capa de persistencia de Hibernate, en una excepción no chequeada (no lo era en versiones anteriores de Hibernate). En nuestra opinión, no debemos forzar al desarrollador de aplicaciones a capturar una excepción irrecuperable en una capa baja. En la mayoría de los sistemas, las excepciones no chequeadas y fatales son manejadas en uno de los primeros cuadros de la pila de llamadas a métodos (es decir, en las capas más altas) y se presenta un mensaje de error al usuario de la aplicación (o se toma alguna otra acción apropiada). Nota que Hibernate podría también lanzar otras excepciones no chequeadas que no sean una <literal>HibernateException</literal>. Una vez más, no son recuperables y debe tomarse una acción apropiada."
+
+#: index.docbook:508
+msgid "The <literal>getCurrentSession()</literal> operation has one downside in a JTA environment. There is one caveat to the use of <literal>after_statement</literal> connection release mode, which is then used by default. Due to a silly limitation of the JTA spec, it is not possible for Hibernate to automatically clean up any unclosed <literal>ScrollableResults</literal> or <literal>Iterator</literal> instances returned by <literal>scroll()</literal> or <literal>iterate()</literal>. You <emphasis>must</emphasis> release the underlying database cursor by calling <literal>ScrollableResults.close()</literal> or <literal>Hibernate.close(Iterator)</literal> explicity from a <literal>finally</literal> block. (Of course, most applications can easily avoid using <literal>scroll()</literal> or <literal>iterate()</literal> at all from the JTA or CMT code.)"
+msgstr "Hibernate envuelve <literal>SQLException</literal>s lanzadas mientras se interactúa con la base de datos en una <literal>JDBCException</literal>. De hecho, Hibernate intentará convertir la excepción en una subclase de <literal>JDBCException</literal> más significativa. La <literal>SQLException</literal> está siempre disponible vía <literal>JDBCException.getCause()</literal>. Hibernate convierte la <literal>SQLException</literal> en una subclase de <literal>JDBCException</literal> apropiada usando el <literal>SQLExceptionConverter</literal> adjunto a la <literal>SessionFactory</literal>. Por defecto, el <literal>SQLExceptionConverter</literal> está definido para el dialecto configurado; sin embargo, es también posible enchufar una implementación personalizada (ver los javadocs de la clase <literal>SQLExceptionConverterFactory</literal> para los detalles). Los subtipos estándar de <literal>JDBCExcep!
tion</literal> son:"
+
+#: index.docbook:524
+msgid "Exception handling"
+msgstr "<literal>JDBCConnectionException</literal> - indica un error con la comunicación JDBC subyacente."
+
+#: index.docbook:526
+msgid "If the <literal>Session</literal> throws an exception (including any <literal>SQLException</literal>), you should immediately rollback the database transaction, call <literal>Session.close()</literal> and discard the <literal>Session</literal> instance. Certain methods of <literal>Session</literal> will <emphasis>not</emphasis> leave the session in a consistent state. No exception thrown by Hibernate can be treated as recoverable. Ensure that the <literal>Session</literal> will be closed by calling <literal>close()</literal> in a <literal>finally</literal> block."
+msgstr "<literal>SQLGrammarException</literal> - indica un problema de gramática o sintáxis con el SQL publicado."
+
+#: index.docbook:537
+msgid "The <literal>HibernateException</literal>, which wraps most of the errors that can occur in a Hibernate persistence layer, is an unchecked exception (it wasn't in older versions of Hibernate). In our opinion, we shouldn't 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 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 which are not a <literal>HibernateException</literal>. These are, again, not recoverable and appropriate action should be taken."
+msgstr "<literal>ConstraintViolationException</literal> - indica alguna forma de violación de restricción de integridad."
+
+#: index.docbook:549
+msgid "Hibernate wraps <literal>SQLException</literal>s thrown while interacting with the database in a <literal>JDBCException</literal>. In fact, Hibernate will attempt to convert the eexception into a more meningful subclass of <literal>JDBCException</literal>. The underlying <literal>SQLException</literal> is always available via <literal>JDBCException.getCause()</literal>. Hibernate converts the <literal>SQLException</literal> into an appropriate <literal>JDBCException</literal> subclass using the <literal>SQLExceptionConverter</literal> attached to the <literal>SessionFactory</literal>. By default, the <literal>SQLExceptionConverter</literal> is defined by the configured dialect; however, it is also possible to plug in a custom implementation (see the javadocs for the <literal>SQLExceptionConverterFactory</literal> class for details). The standard <literal>JDBCException</literal> subtypes are:"
+msgstr "<literal>LockAcquisitionException</literal> - indica un error adquiriendo un nivel de bloqueo necesario para realizar una operación solicitada."
+
+#: index.docbook:565
+msgid "<literal>JDBCConnectionException</literal> - indicates an error with the underlying JDBC communication."
+msgstr "<literal>GenericJDBCException</literal> - una excepción genérica que no cayó en ninguna de las otras categorías."
+
+#: index.docbook:571
+msgid "<literal>SQLGrammarException</literal> - indicates a grammar or syntax problem with the issued SQL."
+msgstr "Control optimista de concurrencia"
+
+#: index.docbook:577
+msgid "<literal>ConstraintViolationException</literal> - indicates some form of integrity constraint violation."
+msgstr "El único enfoque que es consistente con alta concurrencia y alta escalabilidad es el control optimista de concurrencia con versionamiento. El chuequeo de versión usa números de versión, o timestamps, para detectar actualizaciones en conflicto (y para prevenir actualizaciones perdidas). Hibernate provee para tres enfoques posibles de escribir código de aplicación que use concurrencia optimista. Los casos de uso que hemos mostrado están en el contexto de transacciones de aplicación largas pero el chequeo de versiones tiene además el beneficio de prevenir actualizaciones perdidas en transacciones de base de datos solas."
+
+#: index.docbook:583
+msgid "<literal>LockAcquisitionException</literal> - indicates an error acquiring a lock level necessary to perform the requested operation."
+msgstr "Chequeo de versiones de aplicación"
+
+#: index.docbook:589
+msgid "<literal>GenericJDBCException</literal> - a generic exception which did not fall into any of the other categories."
+msgstr "En una implementación sin mucha ayuda de Hibernate, cada interacción con la base de datos ocurre en una nueva <literal>Session</literal> y el desarrollador es responsable de recargar todas las intancias persistentes desde la base de datos antes de manipularlas. Este enfoque fuerza a la aplicación a realizar su propio chequeo de versiones para asegurar el aislamiento de transacciones de base de datos. Es el enfoque más similar a los EJBs de entidad."
+
+#: index.docbook:599
+msgid "Transaction timeout"
+msgstr ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "int oldVersion = foo.getVersion();\n"
+ "session.load( foo, foo.getKey() ); // load the current state\n"
+ "if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();\n"
+ "foo.setProperty(\"bar\");\n"
+ "t.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:601
+msgid "One extremely 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 functioanlity is abstracted by the Hibernate <literal>Transaction</literal> object."
+msgstr "La propiedad <literal>version</literal> se mapea usando <literal><version></literal>, e Hibernate la incrementará automáticamente durante la limpieza si la entidad está sucia."
+
+#: index.docbook:614
+msgid ""
+ "<![CDATA[\n"
+ "Session sess = factory.openSession();\n"
+ "try {\n"
+ " //set transaction timeout to 3 seconds\n"
+ " sess.getTransaction().setTimeout(3);\n"
+ " sess.getTransaction().begin();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " sess.getTransaction().commit()\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " sess.getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr "Por supuesto, si estás operando un entorno de baja-concurrencia-de-datos y no requieres chequeo de versiones, puedes usar este enfoque y simplemente saltar el chequeo de versiones. En ese caso, <emphasis>el último compromiso (commit) gana</emphasis> será la estrategia por defecto para tus transacciones de aplicación largas. Ten en mente que esto podría confundir a los usuarios de la aplicación, pues podrían experimentar actualizaciones perdidas sin mensajes de error ni chance de fusionar los cambios conflictivos."
+
+#: index.docbook:616
+msgid "Note that <literal>setTimeout()</literal> may not be called in a CMT bean, where transaction timeouts must be defined declaratively."
+msgstr "Claramente, el chequeo manual de versiones es factible solamente en circunstancias muy triviales, y no es práctico para la mayoría de aplicaciones. Frecuentemente, no sólo intancias solas, sino grafos completos de objetos modificados tienen que ser chequeados. Hibernate ofrece chequeo de versiones automático con el paradigma de diseño de <literal>Session</literal> larga o de instancias separadas."
+
+#: index.docbook:626
+msgid "Optimistic concurrency control"
+msgstr "Sesión larga y versionado automático"
+
+#: index.docbook:628
+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 for three possible approaches to writing application code that uses optimistic concurrency. The use cases we show are in the context of long conversations, but version checking also has the benefit of preventing lost updates in single database transactions."
+msgstr "Una sola instancia de <literal>Session</literal> y sus instancias persistentes son usadas para toda la transacción de aplicación. Hibernate chequea las versiones de instancia en el momento de limpieza (flush), lanzando una excepción si se detecta una modificación concurrente. Concierne al desarrollador capturar y manejar esta excepción (las opciones comunes son la oportunidad del usuario de fusionar los cambios, o recomenzar el proceso de negocio sin datos añejos)."
+
+#: index.docbook:639
+msgid "Application version checking"
+msgstr "La <literal>Session</literal> se desconecta de cualquier conexión JDBC subyacente al esperar por una interacción del usuario. Este enfoque es el más eficiente en términos de acceso a base de datos. La aplicación no necesita tratar por sí misma con el chequeo de versiones, ni re-uniendo instancias separadas, ni tiene que recargar instancias en cada transacción de base de datos."
+
+#: index.docbook:641
+msgid "In an implementation without much help from Hibernate, each interaction with the database occurs in a new <literal>Session</literal> and the developer is responsible for reloading all persistent instances from the database before manipulating them. This approach forces the application 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 ""
+ "<![CDATA[// foo is an instance loaded earlier by the Session\n"
+ "session.reconnect(); // Obtain a new JDBC connection\n"
+ "Transaction t = session.beginTransaction();\n"
+ "foo.setProperty(\"bar\");\n"
+ "t.commit(); // End database transaction, flushing the change and checking the version\n"
+ "session.disconnect(); // Return JDBC connection ]]>"
+
+#: index.docbook:650
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "\n"
+ "int oldVersion = foo.getVersion();\n"
+ "session.load( foo, foo.getKey() ); // load the current state\n"
+ "if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr "El objeto <literal>foo</literal> todavía conoce en qué <literal>Session</literal> fue cargado. <literal>Session.reconnect()</literal> obtiene una nueva conexión (o puedes proveer una) y reasume la sesión. El método <literal>Session.disconnect()</literal> desconectará la sesión de la conexión JDBC y la devolverá la conexión al pool (a menos que hayas provisto la conexión). Después de la reconexión, para forzar un chequeo de versión en datos que no estés actualizando, puedes llamar a <literal>Session.lock()</literal> con <literal>LockMode.READ</literal> sobre cualquier objeto que pudiese haber sido actualizado por otra transacción. No necesitas bloquear ningún dato que <emphasis>sí estés</emphasis> actualizando."
+
+#: index.docbook:652
+msgid "The <literal>version</literal> property is mapped using <literal><version></literal>, and Hibernate will automatically increment it during flush if the entity is dirty."
+msgstr "Si las llamadas explícitas a <literal>disconnect()</literal> y <literal>reconnect()</literal> son muy onerosas, puedes usar en cambio <literal>hibernate.connection.release_mode</literal>."
+
+#: index.docbook:658
+msgid "Of course, if you are operating in a low-data-concurrency environment and don't require version checking, you may use this approach and just skip the version check. In that case, <emphasis>last commit wins</emphasis> will be the default strategy for your long conversations. Keep in mind 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 "Este patrón es problemático si la <literal>Session</literal> es demasiado grande para ser almacenada durante el tiempo de pensar del usuario, por ejemplo, una <literal>HttpSession</literal> debe mantenerse tan pequeña como sea posible. Ya que la <literal>Session</literal> es también el caché (obligatorio) de primer nivel y contiene todos los objetos cargados, podemos probablemente cargar esta estrategia sólo para unos pocos ciclos petición/respuesta. Esto está de hecho recomendado, ya que la <literal>Session</literal> tendrá pronto también datos añejos."
+
+#: index.docbook:667
+msgid "Clearly, manual version checking is only feasible in very trivial circumstances and not practical for most applications. Often not only single instances, but complete graphs of modified ojects have to be checked. Hibernate offers automatic version checking with either an extended <literal>Session</literal> or detached instances as the design paradigm."
+msgstr "Nota también que debes mantener la <literal>Session</literal> desconectada próxima a la capa de persistencia. En otras palabras, usa una sesión de EJB con estado para tener la <literal>Session</literal> y no transferirla a la capa web para almacenarla en la <literal>HttpSession</literal> (ni incluso serializarla a una capa separada)."
+
+#: index.docbook:678
+msgid "Extended session and automatic versioning"
+msgstr "Objetos separados y versionado automático"
+
+#: index.docbook:680
+msgid "A single <literal>Session</literal> instance and its persistent instances are used for the whole conversation, known as <emphasis>session-per-conversation</emphasis>. Hibernate checks instance versions at flush time, throwing an exception if concurrent modification is detected. It's 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 "Cada interacción con el almacén persistente ocurre en una nueva <literal>Session</literal>. Sin embargo, las mismas instancias persistentes son reusadas para cada interacción con la base de datos. La aplicación manipula el estado de las instancias separadas originalmente cargadas en otra <literal>Session</literal> y luego las readjunta usando <literal>Session.update()</literal>, <literal>Session.saveOrUpdate()</literal>, o <literal>Session.merge()</literal>."
+
+#: index.docbook:689
+msgid "The <literal>Session</literal> 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 need not concern itself with version checking or with reattaching detached instances, nor does it have to reload instances in every database transaction."
+msgstr ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "foo.setProperty(\"bar\");\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "session.saveOrUpdate(foo); // Use merge() if \"foo\" might have been loaded already\n"
+ "t.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:697
+msgid ""
+ "<![CDATA[// foo is an instance loaded earlier by the old session\n"
+ "Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction\n"
+ "\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "session.flush(); // Only for last transaction in conversation\n"
+ "t.commit(); // Also return JDBC connection\n"
+ "session.close(); // Only for last transaction in conversation]]>"
+msgstr "De nuevo, Hibernate chequeará las versiones de instancia durante la limpieza (flush), lanzando una excepción si ocurrieron actualizaciones en conflicto."
+
+#: index.docbook:698
+msgid "The <literal>foo</literal> object still knows which <literal>Session</literal> 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 aren't updating, you may call <literal>Session.lock()</literal> with <literal>LockMode.READ</literal> on any objects that might have been updated by another transaction. You don't need to lock any data that you <emphasis>are</emphasis> updating. Usually you would set <literal>FlushMode.MANUAL</literal> on an extended <literal>Session</literal>, so that only the last database transaction cycle is allowed to actually persist all modifications made in this conversation. Hence, only this last database transaction would include the <literal>flush()</literal> operation, and then also <literal>close()!
</literal> the session to end the conversation."
+msgstr "Puedes también llamar a <literal>lock()</literal> en vez de <literal>update()</literal> y usar <literal>LockMode.READ</literal> (realizando un chequeo de versión, puenteando todos los cachés) si estás seguro que el objeto no ha sido modificado."
+
+#: index.docbook:713
+msgid "This pattern is problematic if the <literal>Session</literal> is too big to be stored during user think time, e.g. an <literal>HttpSession</literal> should be kept as small as possible. As the <literal>Session</literal> is also the (mandatory) first-level cache and contains all loaded objects, we can probably use this strategy only for a few request/response cycles. You should use a <literal>Session</literal> only for a single conversation, as it will soon also have stale data."
+msgstr "Personalizando el versionado automático"
+
+#: index.docbook:723
+msgid "(Note that earlier Hibernate versions required explicit disconnection and reconnection of a <literal>Session</literal>. These methods are deprecated, as beginning and ending a transaction has the same effect.)"
+msgstr "Puedes deshabilitar el incremento de versión automático de Hibernate para propiedades en particular y colecciones estableciendo el atributo de mapeo <literal>optimistic-lock</literal> a <literal>false</literal>. Hibernate entonces no incrementará ya más las versiones si la propiedad está sucia."
+
+#: index.docbook:729
+msgid "Also note that you should keep the disconnected <literal>Session</literal> close to the persistence layer. In other words, use an EJB stateful session bean to hold the <literal>Session</literal> in a three-tier environment, and don't transfer it to the web layer (or even serialize it to a separate tier) to store it in the <literal>HttpSession</literal>."
+msgstr "Los esquemas de base de datos heredados son frecuentemente estáticos y no pueden ser modificados. U otras aplicaciones podrían también acceder la misma base de datos y no saber cómo manejar los números de versión ni incluso timestamps. En ambos casos, el versionado no puede confiarse a una columna en particular en una tabla. Para forzar un chequeo de versiones sin un mapeo de propiedad de versión o timestamp, con una comparación del estado de todos los campos en una fila, activa <literal>optimistic-lock=\"all\"</literal> en el mapeo de <literal><class></literal>. Nota que esto conceptualmente funciona solamente si Hibernate puede comparar el estado viejo y nuevo, es decir, si usas una sola <literal>Session</literal> larga y no sesión-por-petición-con-instancias-separadas."
+
+#: index.docbook:737
+msgid "The extended session pattern, or <emphasis>session-per-conversation</emphasis>, is more difficult to implement with automatic current session context management. You need to supply your own implementation of the <literal>CurrentSessionContext</literal> for this, see the Hibernate Wiki for examples."
+msgstr "A veces las modificaciones concurrentes pueden permitirse, en cuanto los cambios que hayan sido hechos no se traslapen. Si estableces <literal>optimistic-lock=\"dirty\"</literal> al mapear la <literal><class></literal>, Hibernate sólo comparará los campos sucios durante la limpieza."
+
+#: index.docbook:747
+msgid "Detached objects and automatic versioning"
+msgstr "En ambos casos, con columnas de versión/timestamp dedicadas o con comparación de campos completa/sucios, Hibernate usa una sola sentencia <literal>UPDATE</literal> (con una cláusula <literal>WHERE</literal> apropiada) por entidad para ejecutar el chequeo de versiones y actualizar la información. Si usas persistencia transitiva para la re-unión en cascada de entidades asociadas, Hibernate podría ejecutar actualizaciones innecesarias. Esto usualmente no es un problema, pero podrían ejecutarse disparadores (triggers) <emphasis>on update</emphasis> en la base de datos incluso cuando no se haya hecho ningún cambio a las instancias separadas. Puedes personalizar este comportamiento estableciendo <literal>select-before-update=\"true\"</literal> en el mapeo de <literal><class></literal>, forzando a Hibernate a <literal>SELECT</literal> la instancia para asegurar que las actualizaciones realmente ocurran, antes de!
actualizar la fila."
+
+#: index.docbook:749
+msgid "Each interaction with the persistent store occurs in a new <literal>Session</literal>. However, the same persistent instances are reused for each interaction with the database. The application manipulates the state of detached instances originally loaded in another <literal>Session</literal> and then reattaches them using <literal>Session.update()</literal>, <literal>Session.saveOrUpdate()</literal>, or <literal>Session.merge()</literal>."
+msgstr "Bloqueo pesimista"
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "foo.setProperty(\"bar\");\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "session.saveOrUpdate(foo); // Use merge() if \"foo\" might have been loaded already\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr "No se pretende que los usuarios gasten mucho tiempo preocupándose de las estrategias de bloqueo. Usualmente es suficiente con especificar un nivel de aislamiento para las conexiones JDBC y entonces simplemente dejar que la base de datos haga todo el trabajo. Sin embargo, los usuarios avanzados pueden a veces obtener bloqueos exclusivos pesimistas, o reobtener bloqueos al comienzo de una nueva transacción."
+
+#: index.docbook:759
+msgid "Again, Hibernate will check instance versions during flush, throwing an exception if conflicting updates occured."
+msgstr "¡Hibernate siempre usará el mecanismo de bloqueo de la base de datos, nunca bloqueo de objetos en memoria!"
+
+#: index.docbook:764
+msgid "You may also call <literal>lock()</literal> instead of <literal>update()</literal> and use <literal>LockMode.READ</literal> (performing a version check, bypassing all caches) if you are sure that the object has not been modified."
+msgstr "La clase <literal>LockMode</literal> define los diferentes niveles de bloqueo que pueden ser adquiridos por Hibernate. Un bloqueo se obtiene por los siguientes mecanismos:"
+
+#: index.docbook:773
+msgid "Customizing automatic versioning"
+msgstr "<literal>LockMode.WRITE</literal> se adquiere automáticamente cuando Hibernate actualiza o inserta una fila."
+
+#: index.docbook:775
+msgid "You may disable Hibernate's automatic version increment for particular properties and collections by setting the <literal>optimistic-lock</literal> mapping attribute to <literal>false</literal>. Hibernate will then no longer increment versions if the property is dirty."
+msgstr "<literal>LockMode.UPGRADE</literal> puede ser adquirido bajo petición explícita del usuario usando <literal>SELECT ... FOR UPDATE</literal> en base de datos que soporten esa sintáxis."
+
+#: index.docbook:782
+msgid "Legacy database schemas are often static and can't be modified. Or, other applications might also access the same database and don't know how to handle version numbers or even timestamps. In both cases, versioning can't rely on a particular column in a table. To force a version check without a version or timestamp property mapping, with a comparison of the state of all fields in a row, turn on <literal>optimistic-lock=\"all\"</literal> in the <literal><class></literal> mapping. Note that this concepetually only works if Hibernate can compare the old and new state, i.e. if you use a single long <literal>Session</literal> and not session-per-request-with-detached-objects."
+msgstr "<literal>LockMode.UPGRADE_NOWAIT</literal> puede ser adquirido bajo petición explícita del usuario usando un <literal>SELECT ... FOR UPDATE NOWAIT</literal> bajo Oracle."
+
+#: index.docbook:793
+msgid "Sometimes concurrent modification can be permitted as long as the changes that have been made don't overlap. If you set <literal>optimistic-lock=\"dirty\"</literal> when mapping the <literal><class></literal>, Hibernate will only compare dirty fields during flush."
+msgstr "<literal>LockMode.READ</literal> es adquirido automáticamente cuando Hibernate lee datos bajo los niveles de aislamiento Repeatable Read o Serializable. Puede ser readquirido por pedido explícito del usuario."
+
+#: index.docbook:799
+msgid "In both cases, with dedicated version/timestamp columns or with full/dirty field comparison, Hibernate uses a single <literal>UPDATE</literal> statement (with an appropriate <literal>WHERE</literal> clause) per entity to execute the version check and update the information. If you use transitive persistence to cascade reattachment to associated entities, Hibernate might execute uneccessary updates. This is usually not a problem, but <emphasis>on update</emphasis> 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\"</literal> in the <literal><class></literal> mapping, forcing Hibernate to <literal>SELECT</literal> the instance to ensure that changes did actually occur, before updating the row."
+msgstr "<literal>LockMode.NONE</literal> representa la ausencia de un bloqueo. Todos los objetos se pasan a este modo de bloqueo al final de una <literal>Transaction</literal>. Los objetos asociados con una sesión vía una llamada a <literal>update()</literal> o <literal>saveOrUpdate()</literal> también comienzan en este modo de bloqueo."
+
+#: index.docbook:817
+msgid "Pessimistic Locking"
+msgstr "La \"petición explícita del usuario\" se expresa en una de las siguientes formas:"
+
+#: index.docbook:819
+msgid "It is not intended that users spend much time worring about locking strategies. Its 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 sometimes wish to obtain exclusive pessimistic locks, or re-obtain locks at the start of a new transaction."
+msgstr "Una llamada a <literal>Session.load()</literal>, especificando un <literal>LockMode</literal>."
+
+#: index.docbook:826
+msgid "Hibernate will always use the locking mechanism of the database, never lock objects in memory!"
+msgstr "Una llamada a <literal>Session.lock()</literal>."
+
+#: index.docbook:831
+msgid "The <literal>LockMode</literal> class defines the different lock levels that may be acquired by Hibernate. A lock is obtained by the following mechanisms:"
+msgstr "Una llamada a <literal>Query.setLockMode()</literal>."
+
+#: index.docbook:838
+msgid "<literal>LockMode.WRITE</literal> is acquired automatically when Hibernate updates or inserts a row."
+msgstr "Si se llama a <literal>Session.load()</literal> con <literal>UPGRADE</literal> o <literal>UPGRADE_NOWAIT</literal>, y el objeto pedido no ha sido aún cargado por la sesión, el objeto es cargado usando <literal>SELECT ... FOR UPDATE</literal>. Si se llama a <literal>load()</literal> para un objeto que ya esté cargado con un bloqueo menos restrictivo que el pedido, Hibernate llama a <literal>lock()</literal> para ese objeto."
+
+#: index.docbook:844
+msgid "<literal>LockMode.UPGRADE</literal> may be acquired upon explicit user request using <literal>SELECT ... FOR UPDATE</literal> on databases which support that syntax."
+msgstr "<literal>Session.lock()</literal> realiza un chequeo de número de versión si el modo de bloqueo especificado es <literal>READ</literal>, <literal>UPGRADE</literal> o <literal>UPGRADE_NOWAIT</literal>. (En el caso de <literal>UPGRADE</literal> o <literal>UPGRADE_NOWAIT</literal>, se usa <literal>SELECT ... FOR UPDATE</literal>.)"
+
+#: index.docbook:850
+msgid "<literal>LockMode.UPGRADE_NOWAIT</literal> may be acquired upon explicit user request using a <literal>SELECT ... FOR UPDATE NOWAIT</literal> under Oracle."
+msgstr "Si la base de datos no soporta el modo de bloqueo solicitado, Hibernate usará un modo alternativo apropiado (en vez de lanzar una excepción). Esto asegura que las aplicaciones serán portables."
+
+#: index.docbook:856
+msgid "<literal>LockMode.READ</literal> is acquired automatically when Hibernate reads data under Repeatable Read or Serializable isolation level. May be re-acquired by explicit user request."
+msgstr ""
+
+#: index.docbook:863
+msgid "<literal>LockMode.NONE</literal> represents the absence of a lock. All objects switch to this lock mode at the end of a <literal>Transaction</literal>. Objects associated with the session via a call to <literal>update()</literal> or <literal>saveOrUpdate()</literal> also start out in this lock mode."
+msgstr ""
+
+#: index.docbook:872
+msgid "The \"explicit user request\" is expressed in one of the following ways:"
+msgstr ""
+
+#: index.docbook:878
+msgid "A call to <literal>Session.load()</literal>, specifying a <literal>LockMode</literal>."
+msgstr ""
+
+#: index.docbook:883
+msgid "A call to <literal>Session.lock()</literal>."
+msgstr ""
+
+#: index.docbook:888
+msgid "A call to <literal>Query.setLockMode()</literal>."
+msgstr ""
+
+#: index.docbook:894
+msgid "If <literal>Session.load()</literal> is called with <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, and the requested object was not yet loaded by the session, the object is loaded using <literal>SELECT ... FOR UPDATE</literal>. If <literal>load()</literal> is called for an object that is already loaded with a less restrictive lock than the one requested, Hibernate calls <literal>lock()</literal> for that object."
+msgstr ""
+
+#: index.docbook:903
+msgid "<literal>Session.lock()</literal> performs a version number check if the specified lock mode is <literal>READ</literal>, <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>. (In the case of <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, <literal>SELECT ... FOR UPDATE</literal> is used.)"
+msgstr ""
+
+#: index.docbook:910
+msgid "If the database does not support the requested lock mode, Hibernate will use an appropriate alternate mode (instead of throwing an exception). This ensures that applications will be portable."
+msgstr ""
+
+#: index.docbook:919
+msgid "Connection Release Modes"
+msgstr ""
+
+#: index.docbook:921
+msgid "The legacy (2.x) behavior of Hibernate in regards to JDBC connection management was that a <literal>Session</literal> would obtain a connection when it was first needed and then hold unto that connection until the session was closed. Hibernate 3.x introduced the notion of connection release modes to tell a session how to handle its JDBC connections. Note that the following discussion is pertinent only to connections provided through a configured <literal>ConnectionProvider</literal>; 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</literal>:"
+msgstr ""
+
+#: index.docbook:935
+msgid "<literal>ON_CLOSE</literal> - is essentially the legacy behavior described above. The Hibernate session obatins a connection when it first needs to perform some JDBC access and holds unto that connection until the session is closed."
+msgstr ""
+
+#: index.docbook:942
+msgid "<literal>AFTER_TRANSACTION</literal> - says to release connections after a <literal>org.hibernate.Transaction</literal> has completed."
+msgstr ""
+
+#: index.docbook:948
+msgid "<literal>AFTER_STATEMENT</literal> (also referred to as aggressive release) - says to release connections after each and 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</literal>."
+msgstr ""
+
+#: index.docbook:958
+msgid "The configuration parameter <literal>hibernate.connection.release_mode</literal> is used to specify which release mode to use. The possible values:"
+msgstr ""
+
+#: index.docbook:965
+msgid "<literal>auto</literal> (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. It is rarely a good idea to 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 ""
+
+#: index.docbook:975
+msgid "<literal>on_close</literal> - says to use ConnectionReleaseMode.ON_CLOSE. This setting is left for backwards compatibility, but its use is highly discouraged."
+msgstr ""
+
+#: index.docbook:981
+msgid "<literal>after_transaction</literal> - says to use 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 ""
+
+#: index.docbook:989
+msgid "<literal>after_statement</literal> - says to use ConnectionReleaseMode.AFTER_STATEMENT. Additionally, the configured <literal>ConnectionProvider</literal> is consulted to see if it supports this setting (<literal>supportsAggressiveRelease()</literal>). 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 we make a call into <literal>ConnectionProvider.getConnection()</literal> or in auto-commit environments where it does not matter whether we get back the same connection."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/tutorial.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/tutorial.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/tutorial.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1747 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:7
+msgid "Introduction to Hibernate"
+msgstr "Introducción a Hibernate"
+
+#: index.docbook:10
+msgid "Preface"
+msgstr "Prefacio"
+
+#: index.docbook:12
+msgid "This chapter is an introductory tutorial for new users of Hibernate. We start with a simple command line application using an in-memory database and develop it in easy to understand steps."
+msgstr "Este capítulo es un tutorial introductorio de Hibernate. Comenzamos con una aplicación simple de línea de comandos usando un base de datos en-memoria y desarrollándola en fácil para entender los pasos."
+
+#: index.docbook:18
+msgid "This tutorial is intended for new users of Hibernate but requires Java and SQL knowledge. It is based on a tutorial by Michael Gloegl, the third-party libraries we name are for JDK 1.4 and 5.0. You might need others for JDK 1.3."
+msgstr "Este tutorial está concebido para usuarios nuevos de Hibernate pero requiere conocimiento en Java y SQL. Está basado en un tutorial de Michael Gloegl. Las bibliotecas de terceros que mencionamos son para JDK 1.4 y 5.0. Podrías necesitar otras para JDK 1.3."
+
+#: index.docbook:24
+msgid "The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr "Parte 1 - La primera Aplicación Hibernate"
+
+#: index.docbook:32
+msgid "Part 1 - The first Hibernate Application"
+msgstr "Primero, crearemos una aplicación simple de Hibenate basada en consola. Usamos usamos una base de datos en-memoria (HSQL DB), de modo que no necesitamos instalar ningún servidor de base de datos."
+
+#: index.docbook:34
+msgid "First, we'll create a simple console-based Hibernate application. We use an Java database (HSQL DB), so we do not have to install any database server."
+msgstr "Asumamos que necesitamos una aplicación pequeña de base de datos que pueda almacenar eventos que queremos atender, e información acerca de los hostales de estos eventos."
+
+#: index.docbook:39
+msgid "Let's assume we need a small database application that can store events we want to attend, and information about the hosts of these events."
+msgstr "La primera cosa que hacemos, es armar nuestro directorio de desarrollo y poner en él todas las bibliotecas Java que necesitamos. Descarga la distribución de Hibernate del sitio web de Hibernate. Extrae el paquete y coloca todas las bibliotecas requeridas encontradas en <literal>/lib</literal> dentro del directorio <literal>/lib</literal> de nuestro nuevo directorio de desarrollo de trabajo. Debe asemejarse a esto:"
+
+#: index.docbook:44
+msgid "The first thing we do, is set up our development directory and put all the Java libraries we need into it. Download the Hibernate distribution from the Hibernate website. Extract the package and place all required libraries found in <literal>/lib</literal> into into the <literal>/lib</literal> directory of your new development working directory. It should look like this:"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " antlr.jar\n"
+ " cglib-full.jar\n"
+ " asm.jar\n"
+ " asm-attrs.jars\n"
+ " commons-collections.jar\n"
+ " commons-logging.jar\n"
+ " ehcache.jar\n"
+ " hibernate3.jar\n"
+ " jta.jar\n"
+ " dom4j.jar\n"
+ " log4j.jar ]]>"
+
+#: index.docbook:52
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " antlr.jar\n"
+ " cglib.jar\n"
+ " asm.jar\n"
+ " asm-attrs.jars\n"
+ " commons-collections.jar\n"
+ " commons-logging.jar\n"
+ " hibernate3.jar\n"
+ " jta.jar\n"
+ " dom4j.jar\n"
+ " log4j.jar ]]>"
+msgstr "Este es el conjunto mínimo de bibliotecas requeridas para Hibernate (observa que también hemos copiado hibernate3.jar, el fichero principal). Ver el fichero <literal>README.txt</literal> en el directorio <literal>lib/</literal> de la distribución de Hibernate para más información sobre bibliotecas de terceros requeridas y opcionales. (Realmente, Log4J no es requerida aunque preferida por muchos desarrolladores)."
+
+#: index.docbook:54
+msgid "This is the minimum set of required libraries (note that we also copied hibernate3.jar, the main archive) for Hibernate <emphasis>at the time of writing</emphasis>. The Hibernate release you are using might require more or less libraries. See the <literal>README.txt</literal> file in the <literal>lib/</literal> directory of the Hibernate distribution for more information about required and optional third-party libraries. (Actually, Log4j is not required but preferred by many developers.)"
+msgstr "Por siguiente, creamos una clase que represente el evento que queremos almacenar en base de datos."
+
+#: index.docbook:63
+msgid "Next we create a class that represents the event we want to store in database."
+msgstr "La primera clase"
+
+#: index.docbook:68
+msgid "The first class"
+msgstr "Nuestra primera clase persistente es un JavaBean simple con algunas propiedades:"
+
+#: index.docbook:70
+msgid "Our first persistent class is a simple JavaBean class with some properties:"
+msgstr ""
+ "<![CDATA[import java.util.Date;\n"
+ "\n"
+ "public class Event {\n"
+ " private Long id;\n"
+ "\n"
+ " private String title;\n"
+ " private Date date;\n"
+ "\n"
+ " Event() {}\n"
+ "\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public Date getDate() {\n"
+ " return date;\n"
+ " }\n"
+ "\n"
+ " public void setDate(Date date) {\n"
+ " this.date = date;\n"
+ " }\n"
+ "\n"
+ " public String getTitle() {\n"
+ " return title;\n"
+ " }\n"
+ "\n"
+ " public void setTitle(String title) {\n"
+ " this.title = title;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Event {\n"
+ " private Long id;\n"
+ "\n"
+ " private String title;\n"
+ " private Date date;\n"
+ "\n"
+ " public Event() {}\n"
+ "\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public Date getDate() {\n"
+ " return date;\n"
+ " }\n"
+ "\n"
+ " public void setDate(Date date) {\n"
+ " this.date = date;\n"
+ " }\n"
+ "\n"
+ " public String getTitle() {\n"
+ " return title;\n"
+ " }\n"
+ "\n"
+ " public void setTitle(String title) {\n"
+ " this.title = title;\n"
+ " }\n"
+ "}]]>"
+msgstr "Puedes ver que esta clase usa las convenciones de nombrado estándar de JavaBean para métodos getter y setter de propiedad, así como visibilidad privada para los campos. Esto es un diseño recomendado, aunque no requerido. Hibernate también puede acceder a los campos directamente; el beneficio de los métodos de acceso es la robustez para la refactorización."
+
+#: index.docbook:76
+msgid "You can see that this class uses standard JavaBean naming conventions for property getter and setter methods, as well as private visibility for the fields. This is a recommended design - but not required. Hibernate can also access fields directly, the benefit of accessor methods is robustness for refactoring. The no-argument constructor is required to instantiate an object of this class through reflection."
+msgstr "La propiedad <literal>id</literal> tiene un valor único de identificador para un evento en particular. Todas las clase de entidad persistentes ( también hay clases dependientes menos importantes) necesitarán una propiedad identificadora similar si queremos usar el conjunto completo de funcionalidades de Hibernate. De hecho, la mayoría de las aplicaciones (esp. aplicaciones web) necesitan distinguir objetos por identificador, de modo que debes considerar esto como un aspecto en vez de una limitación. Sin embargo, usualmente no manipulamos la identidad de un objeto, por lo tanto el método setter debe ser privado. Sólo Hibernate asignará identificadores cuando un objeto sea salvado. Puedes ver que Hibernate puede acceder a métodos de acceso públicos, privados y protegidos, tanto como directamente a campos (públicos, privados y protegidos). La elección está en ti, y puedes ajustar!
la a tu diseño de aplicación."
+
+#: index.docbook:84
+msgid "The <literal>id</literal> property holds a unique identifier value for a particular event. All persistent entity classes (there are less important dependent classes as well) will need such an identifier property if we want to use the full feature set of Hibernate. In fact, most applications (esp. web applications) need to distinguish objects by identifier, so you should consider this a feature rather than a limitation. However, we usually don't manipulate the identity of an object, hence the setter method should be private. Only Hibernate will assign identifiers when an object is saved. You can see that Hibernate can access public, private, and protected accessor methods, as well as (public, private, protected) fields directly. The choice is up to you and you can match it to fit your application design."
+msgstr "El constructor sin argumentos es un requerimiento para todas las clases persistentes. Hibernate tiene que crear objetos para ti, usando reflección Java. El constructor puede ser privado, sin embargo, la visibilidad de paquete es requerida para la generación de proxies en tiempo de ejecución y la recuperación de datos sin instrumentación del bytecode."
+
+#: index.docbook:96
+msgid "The no-argument constructor is a requirement for all persistent classes; Hibernate has to create objects for you, using Java Reflection. The constructor can be private, however, package visibility is required for runtime proxy generation and efficient data retrieval without bytecode instrumentation."
+msgstr "Coloca este fichero de código Java en un directorio llamado <literal>src</literal> en la carpeta de desarrollo. El directorio ahora debe verse como esto:"
+
+#: index.docbook:103
+msgid "Place this Java source file in a directory called <literal>src</literal> in the development folder, and in its correct package. The directory should now look like this:"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " Event.java]]>"
+
+#: index.docbook:108
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java]]>"
+msgstr "En el próximo paso, le decimos a Hibernate sobre esta clase persistente."
+
+#: index.docbook:110
+msgid "In the next step, we tell Hibernate about this persistent class."
+msgstr "El fichero de mapeo"
+
+#: index.docbook:117
+msgid "The mapping file"
+msgstr "Hibernate necesita saber cómo cargar y almacenar objetos de la clase persistente. Aquí es donde el fichero de mapeo de Hibernate entra en juego. El fichero de mapeo le dice a Hibernate a qué tabla en la base de datos tiene que acceder, y qué columnas en esta tabla debe usar."
+
+#: index.docbook:119
+msgid "Hibernate needs to know how to load and store objects of the persistent class. This is where the Hibernate mapping file comes into play. The mapping file tells Hibernate what table in the database it has to access, and what columns in that table it should use."
+msgstr "La estructura básica de un fichero de mapeo se parece a esto:"
+
+#: index.docbook:126
+msgid "The basic structure of a mapping file looks like this:"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "[...]\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "[...]\n"
+ "</hibernate-mapping>]]>"
+msgstr "Observa que el DTD de Hibernate es muy sofisticado. Puedes usarlo para autocompleción de los elementos y atributos XML de mapeo en tu editor o IDE. Debes también abrir el fichero DTD en tu editor de texto. Es la forma más fácil para tener un panorama de todos los elementos y atributos y ver los valores por defectos, así como algunos comentarios. Nota que Hibernate no cargará el fichero DTD de la web, sino que primero buscará en el classpath de la aplicación. El fichero DTD está incluído en <literal>hibernate3.jar</literal> así como también en el directorio <literal>src/</literal> de la distribución de Hibernate."
+
+#: index.docbook:132
+msgid "Note that the Hibernate DTD is very sophisticated. You can use it for auto-completion of XML mapping elements and attributes in your editor or IDE. You also should open up the DTD file in your text editor - it's the easiest way to get an overview of all elements and attributes and to see the defaults, as well as some comments. Note that Hibernate will not load the DTD file from the web, but first look it up from the classpath of the application. The DTD file is included in <literal>hibernate3.jar</literal> as well as in the <literal>src/</literal> directory of the Hibernate distribution."
+msgstr "Omitiremos la declaración de DTD en futuros ejemplos para acortar el código. Por supuesto, no es opcional."
+
+#: index.docbook:143
+msgid "We will omit the DTD declaration in future examples to shorten the code. It is of course not optional."
+msgstr "Entre las dos etiquetas <literal>hibernate-mapping</literal>, incluye un elemento <literal>class</literal>. Todas las clases de entidad persistentes (de nuevo, podría haber más adelante clases dependientes, que no sean entidades de-primera-clase) necesitan dicho mapeo a una tabla en la base de datos SQL:"
+
+#: index.docbook:148
+msgid "Between the two <literal>hibernate-mapping</literal> tags, include a <literal>class</literal> element. All persistent entity classes (again, there might be dependent classes later on, which are not first-class entities) need such a mapping, to a table in the SQL database:"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Event\" table=\"EVENTS\">\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "Hasta ahora dijimos a Hibernate cómo persistir y cargar el objeto de clase <literal>Event</literal> a la tabla <literal>EVENTS</literal>, cada instancia representada por una fila en esta tabla. Ahora continuamos con un mapeo de la propiedad de identificado único a la clave primaria de la tabla. Además, como no queremos cuidar del manejo de este identificador, configuramos la estrategia de generación de identificadores para una columna clave primaria delegada:"
+
+#: index.docbook:157
+msgid "So far we told Hibernate how to persist and load object of class <literal>Event</literal> to the table <literal>EVENTS</literal>, each instance represented by a row in that table. Now we continue with a mapping of the unique identifier property to the tables primary key. In addition, as we don't want to care about handling this identifier, we configure Hibernate's identifier generation strategy for a surrogate primary key column:"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "El elemento <literal>id</literal> el la declaración de la propiedad identificadora, <literal>name=\"id\"</literal> declara el nombre de la propiedad Java. Hibernate usará los métodos getter y setter para acceder a la propiedad. El attributo de columna dice a Hibernate cuál columna de la tabla <literal>EVENTS</literal> usamos para esta clave primaria. El elemento anidado <literal>generator</literal> especifica la estrategia de generación de identificadores, en este caso usamos <literal>increment</literal>, que es un método muy simple de incremento de número en-memoria útil mayormente para testeo (y tutoriales). Hibernate también soporta identificadores generados por base de datos, globalmente únicos, así como también asignados por aplicación (o cualquier estrategia para la que hayas escrito una extensión)."
+
+#: index.docbook:167
+msgid "The <literal>id</literal> element is the declaration of the identifer property, <literal>name=\"id\"</literal> declares the name of the Java property - Hibernate will use the getter and setter methods to access the property. The column attribute tells Hibernate which column of the <literal>EVENTS</literal> table we use for this primary key. The nested <literal>generator</literal> element specifies the identifier generation strategy, in this case we used <literal>native</literal>, which picks the best strategy depending on the configured database (dialect). Hibernate supports database generated, globally unique, as well as application assigned identifiers (or any strategy you have written an extension for)."
+msgstr "Finalmente incluímos declaraciones para las propiedades persistentes de la clases en el fichero de mapeo. Por defecto, ninguna propiedad de la clase se considera persistente:"
+
+#: index.docbook:180
+msgid "Finally we include declarations for the persistent properties of the class in the mapping file. By default, no properties of the class are considered persistent:"
+msgstr ""
+ "<![CDATA[\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"date\" type=\"timestamp\" column=\"EVENT_DATE\"/>\n"
+ " <property name=\"title\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\" type=\"timestamp\" column=\"EVENT_DATE\"/>\n"
+ " <property name=\"title\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "Al igual que con el elemento <literal>id</literal>, el atributo <literal>name</literal> del elemento <literal>property</literal> dice a Hibernate cáles métodos getter y setter usar."
+
+#: index.docbook:188
+msgid "Just as with the <literal>id</literal> element, the <literal>name</literal> attribute of the <literal>property</literal> element tells Hibernate which getter and setter methods to use. So, in this case, Hibernate will look for <literal>getDate()/setDate()</literal>, as well as <literal>getTitle()/setTitle()</literal>."
+msgstr "¿Por qué el mapeo de la propiedad <literal>date</literal> incluye el atributo <literal>column</literal>, pero el de la de <literal>title</literal> no? Sin el atributo <literal>column</literal> Hibernate usa por defecto el nombre de propiedad como nombre de columna. Esto funciona bien para <literal>title</literal>. Sin embargo, However, <literal>date</literal> es una palabra reservada en la mayoría de las bases de datos, así que mejor la mapeamos a un nombre diferente."
+
+#: index.docbook:195
+msgid "Why does the <literal>date</literal> property mapping include the <literal>column</literal> attribute, but the <literal>title</literal> doesn't? Without the <literal>column</literal> attribute Hibernate by default uses the property name as the column name. This works fine for <literal>title</literal>. However, <literal>date</literal> is a reserved keyword in most database, so we better map it to a different name."
+msgstr "La próxima cosa interesante es que el mapeo de <literal>title</literal> carece de un atributo <literal>type</literal>. Los tipos que declaramos y usamos en el fichero de mapeo no son, como podrías esperar, tipos de datos Java. Tampoco son tipos de base de datos SQL. Estos tipos son los llamados así <emphasis>Tipos de mapeo de Hibernate</emphasis>, convertidores que pueden traducir de tipos Java a SQL y vice versa. De nuevo, Hibernate intentará determinar la conversión y el mapeo mismo de tipo correctos si el atributo <literal>type</literal> no estuviese presente en el mapeo. En algunos casos esta detección automática (usando reflección en la clase Java) puede no tener lo que esperas o necesitas. Este es el caso de la propiedad <literal>date</literal>. Hibernate no puede saber is la propiedad mapeará a una columna <literal>date</literal>, <literal>timestamp</literal> o <literal>time</literal>. Declaramos !
que queremos preservar la información completa de fecha y hora mapeando la propiedad con un <literal>timestamp</literal>."
+
+#: index.docbook:204
+msgid "The next interesting thing is that the <literal>title</literal> mapping also lacks a <literal>type</literal> attribute. The types we declare and use in the mapping files are not, as you might expect, Java data types. They are also not SQL database types. These types are so called <emphasis>Hibernate mapping types</emphasis>, converters which can translate from Java to SQL data types and vice versa. Again, Hibernate will try to determine the correct conversion and mapping type itself if the <literal>type</literal> attribute is not present in the mapping. In some cases this automatic detection (using Reflection on the Java class) might not have the default you expect or need. This is the case with the <literal>date</literal> property. Hibernate can't know if the property (which is of <literal>java.util.Date</literal>) should map to a SQL <literal>date</literal>, <literal>timestamp</literal>, or <literal>time</literal> column. We preserve full date and time information !
by mapping the property with a <literal>timestamp</literal> converter."
+msgstr "Este fichero de mapeo debe ser salvado como <literal>Event.hbm.xml</literal>, justo en el directorio próximo al fichero de código fuente de la clase Java <literal>Event</literal>. El nombrado de los ficheros de mapeo puede ser arbitrario, sin embargo, el sufijo <literal>hbm.xml</literal> se ha vuelto una convención el la comunidad de desarrolladores de Hibernate. La estructura de directorio debe ahora verse como esto:"
+
+#: index.docbook:220
+msgid "This mapping file should be saved as <literal>Event.hbm.xml</literal>, right in the directory next to the <literal>Event</literal> Java class source file. The naming of mapping files can be arbitrary, however the <literal>hbm.xml</literal> suffix is a convention in the Hibernate developer community. The directory structure should now look like this:"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " Event.java\n"
+ " Event.hbm.xml]]>"
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml]]>"
+msgstr "Continuamos con la configuración principal de Hibernate."
+
+#: index.docbook:230
+msgid "We continue with the main configuration of Hibernate."
+msgstr "Configuración de Hibernate"
+
+#: index.docbook:237
+msgid "Hibernate configuration"
+msgstr "Tenemos ahora una clase persistente y su fichero de mapeo en su sitio. Es momento de configurar Hibernate. Antes que hagamos esto, necesitaremos una base de datos. HSQL DB, un DBMS SQL en-memoria basado en Java, puede ser descargado del sitio web de HSQL DB. Realmente, de esta descarga sólo necesitas el <literal>hsqldb.jar</literal>. Coloca este fichero en el directorio <literal>lib/</literal> de la carpeta de desarrollo."
+
+#: index.docbook:239
+msgid "We now have a persistent class and its mapping file in place. It is time to configure Hibernate. Before we do this, we will need a database. HSQL DB, a java-based SQL DBMS, can be downloaded from the HSQL DB website(http://hsqldb.org/). Actually, you only need the <literal>hsqldb.jar</literal> from this download. Place this file in the <literal>lib/</literal> directory of the development folder."
+msgstr "Crea un directorio llamado <literal>data</literal> en la raíz del directorio de desarrollo. Allí es donde HSQL DB almacenará sus ficheros de datos."
+
+#: index.docbook:247
+msgid "Create a directory called <literal>data</literal> in the root of the development directory - this is where HSQL DB will store its data files. Now start the database by running <literal>java -classpath ../lib/hsqldb.jar org.hsqldb.Server</literal> in this data directory. You can see it start up and bind to a TCP/IP socket, this is where our application will connect later. If you want to start with a fresh database during this tutorial, shutdown HSQL DB (press <literal>CTRL + C</literal> in the window), delete all files in the <literal>data/</literal> directory, and start HSQL DB again."
+msgstr "Hibernate es la capa en tu aplicación que se conecta a esta base de datos, de modo que necesita información de conexión. Las conexiones se hacen a través de un pool de conexiones JDBC, que tambén tenemos que configurar. La distribución de Hibernate contiene muchas herramientas de pooling de conexiones JDBC de código abierto, pero para este tutorial usaremos el pool de conexiones prefabricado dentro de Hibernate. Observa que tienes que copiar la biblioteca requerida en tu classpath y usar diferentes configuraciones de pooling de conexiones si quieres usar un software de pooling JDBC de terceros de calidad de producción."
+
+#: index.docbook:257
+msgid "Hibernate is the layer in your application which connects to this database, so it needs connection information. The connections are made through a JDBC connection pool, which we also have to configure. The Hibernate distribution contains several open source JDBC connection pooling tools, but will use the Hibernate built-in connection pool for this tutorial. Note that you have to copy the required library into your classpath and use different connection pooling settings if you want to use a production-quality third party JDBC pooling software."
+msgstr "Para la configuración de Hibernate, podemos usar un fichero <literal>hibernate.properties</literal> simple, un fichero <literal>hibernate.cfg.xml</literal> ligeramente más sofisticado, o incluso una configuración completamente programática. La mayoría de los usuarios prefieren el fichero de configuración XML:"
+
+#: index.docbook:267
+msgid "For Hibernate's configuration, we can use a simple <literal>hibernate.properties</literal> file, a slightly more sophisticated <literal>hibernate.cfg.xml</literal> file, or even complete programmatic setup. Most users prefer the XML configuration file:"
+msgstr ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <!-- Database connection settings -->\n"
+ " <property name=\"connection.driver_class\">org.hsqldb.jdbcDriver</property>\n"
+ " <property name=\"connection.url\">jdbc:hsqldb:data/tutorial</property>\n"
+ " <property name=\"connection.username\">sa</property>\n"
+ " <property name=\"connection.password\"></property>\n"
+ "\n"
+ " <!-- JDBC connection pool (use the built-in) -->\n"
+ " <property name=\"connection.pool_size\">1</property>\n"
+ "\n"
+ " <!-- SQL dialect -->\n"
+ " <property name=\"dialect\">org.hibernate.dialect.HSQLDialect</property>\n"
+ "\n"
+ " <!-- Echo all executed SQL to stdout -->\n"
+ " <property name=\"show_sql\">true</property>\n"
+ "\n"
+ " <!-- Drop and re-create the database schema on startup -->\n"
+ " <property name=\"hbm2ddl.auto\">create</property>\n"
+ "\n"
+ " <mapping resource=\"Event.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:273
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <!-- Database connection settings -->\n"
+ " <property name=\"connection.driver_class\">org.hsqldb.jdbcDriver</property>\n"
+ " <property name=\"connection.url\">jdbc:hsqldb:hsql://localhost</property>\n"
+ " <property name=\"connection.username\">sa</property>\n"
+ " <property name=\"connection.password\"></property>\n"
+ "\n"
+ " <!-- JDBC connection pool (use the built-in) -->\n"
+ " <property name=\"connection.pool_size\">1</property>\n"
+ "\n"
+ " <!-- SQL dialect -->\n"
+ " <property name=\"dialect\">org.hibernate.dialect.HSQLDialect</property>\n"
+ "\n"
+ " <!-- Enable Hibernate's automatic session context management -->\n"
+ " <property name=\"current_session_context_class\">thread</property>\n"
+ "\n"
+ " <!-- Disable the second-level cache -->\n"
+ " <property name=\"cache.provider_class\">org.hibernate.cache.NoCacheProvider</property>\n"
+ "\n"
+ " <!-- Echo all executed SQL to stdout -->\n"
+ " <property name=\"show_sql\">true</property>\n"
+ "\n"
+ " <!-- Drop and re-create the database schema on startup -->\n"
+ " <property name=\"hbm2ddl.auto\">create</property>\n"
+ "\n"
+ " <mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr "Observa que esta configuración XML usa un DTD diferente. Configuramos la <literal>SessionFactory</literal> de Hibernate, una fábrica global responsable de una base de datos en particular. Si tienes varias bases de datos, usa varias configuraciones <literal><session-factory></literal> , usualmente en varios ficheros de configuración (para un arranque más fácil)."
+
+#: index.docbook:275
+msgid "Note that this XML configuration uses a different DTD. We configure Hibernate's <literal>SessionFactory</literal> - a global factory responsible for a particular database. If you have several databases, use several <literal><session-factory></literal> configurations, usually in several configuration files (for easier startup)."
+msgstr "Los primeros cuatro elementos <literal>property</literal> contienen la configuración necesaria para la conexión JDBC. El elemento de dialecto <literal>property</literal> especifica la variante de SQL en particular que genera Hibernate. La opción <literal>hbm2ddl.auto</literal> activa la generación automática de esquemas de base de datos, directamente en la base de datos. Esto, por supuesto, puede desactivarse (quitando la opción config) o redirigido a un fichero con la ayuda de la tarea de Ant <literal>SchemaExport</literal>. Finalmente, agregamos el(los) fichero(s) de mapeo para clases persistentes."
+
+#: index.docbook:283
+msgid "The first four <literal>property</literal> elements contain the necessary configuration for the JDBC connection. The dialect <literal>property</literal> element specifies the particular SQL variant Hibernate generates. Hibernate's automatic session management for persistence contexts will come in handy as you will soon see. The <literal>hbm2ddl.auto</literal> option turns on automatic generation of database schemas - directly into the database. This can of course also be turned off (by removing the config option) or redirected to a file with the help of the <literal>SchemaExport</literal> Ant task. Finally, we add the mapping file(s) for persistent classes to the configuration."
+msgstr "Copia este fichero dentro del directorio de código fuente, de modo que termine ubicado en la raiíz del classpath. Hibernate busca automáticamente un fichero llamado <literal>hibernate.cfg.xml</literal> en la raíz del classpath al arrancar."
+
+#: index.docbook:296
+msgid "Copy this file into the source directory, so it will end up in the root of the classpath. Hibernate automatically looks for a file called <literal>hibernate.cfg.xml</literal> in the root of the classpath, on startup."
+msgstr "Construyendo con Ant"
+
+#: index.docbook:305
+msgid "Building with Ant"
+msgstr "Construiremos ahora el tutorial con Ant. Necesitarás tener Ant instalado. Obténlo de <ulink url=\"http://ant.apache.org/bindownload.cgi\">Página de descarga de Ant</ulink>. No se cubrirá aquí cómo instalar Ant. Por favor refiérete al <ulink url=\"http://ant.apache.org/manual/index.html\"> Manual de Ant</ulink>. Después que hayas instalado Ant, podemos comenzar a crear el buildfile. Será llamado <literal>build.xml</literal> y colocado directamente en el directorio de desarrollo."
+
+#: index.docbook:307
+msgid "We'll now build the tutorial with Ant. You will need to have Ant installed - get it from the <ulink url=\"http://ant.apache.org/bindownload.cgi\">Ant download page</ulink>. How to install Ant will not be covered here. Please refer to the <ulink url=\"http://ant.apache.org/manual/index.html\">Ant manual</ulink>. After you have installed Ant, we can start to create the buildfile. It will be called <literal>build.xml</literal> and placed directly in the development directory."
+msgstr "Reparar Ant"
+
+#: index.docbook:316
+msgid "A basic build file looks like this:"
+msgstr "Observa que la distribución de Ant está por defecto rota (como se describe en el FAQ de Ant) y tiene que ser reparado por ti, por ejemplo, si quisieras usar JUnit desde dentro de tu fichero de construcción. Para hacer que funcione la tarea de JUnit (no lo necesitaremos en este tutorial), copia junit.jar a <literal>ANT_HOME/lib</literal> o quita el trozo de plugin <literal>ANT_HOME/lib/ant-junit.jar</literal>."
+
+#: index.docbook:320
+msgid ""
+ "<![CDATA[<project name=\"hibernate-tutorial\" default=\"compile\">\n"
+ "\n"
+ " <property name=\"sourcedir\" value=\"${basedir}/src\"/>\n"
+ " <property name=\"targetdir\" value=\"${basedir}/bin\"/>\n"
+ " <property name=\"librarydir\" value=\"${basedir}/lib\"/>\n"
+ "\n"
+ " <path id=\"libraries\">\n"
+ " <fileset dir=\"${librarydir}\">\n"
+ " <include name=\"*.jar\"/>\n"
+ " </fileset>\n"
+ " </path>\n"
+ "\n"
+ " <target name=\"clean\">\n"
+ " <delete dir=\"${targetdir}\"/>\n"
+ " <mkdir dir=\"${targetdir}\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"compile\" depends=\"clean, copy-resources\">\n"
+ " <javac srcdir=\"${sourcedir}\"\n"
+ " destdir=\"${targetdir}\"\n"
+ " classpathref=\"libraries\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"copy-resources\">\n"
+ " <copy todir=\"${targetdir}\">\n"
+ " <fileset dir=\"${sourcedir}\">\n"
+ " <exclude name=\"**/*.java\"/>\n"
+ " </fileset>\n"
+ " </copy>\n"
+ " </target>\n"
+ "\n"
+ "</project>]]>"
+msgstr "Un fichero de construcción básico se ve como esto:"
+
+#: index.docbook:322
+msgid "This will tell Ant to add all files in the lib directory ending with <literal>.jar</literal> to the classpath used for compilation. It will also copy all non-Java source files to the target directory, e.g. configuration and Hibernate mapping files. If you now run Ant, you should get this output:"
+msgstr ""
+ "<![CDATA[<project name=\"hibernate-tutorial\" default=\"compile\">\n"
+ "\n"
+ " <property name=\"sourcedir\" value=\"${basedir}/src\"/>\n"
+ " <property name=\"targetdir\" value=\"${basedir}/bin\"/>\n"
+ " <property name=\"librarydir\" value=\"${basedir}/lib\"/>\n"
+ "\n"
+ " <path id=\"libraries\">\n"
+ " <fileset dir=\"${librarydir}\">\n"
+ " <include name=\"*.jar\"/>\n"
+ " </fileset>\n"
+ " </path>\n"
+ "\n"
+ " <target name=\"clean\">\n"
+ " <delete dir=\"${targetdir}\"/>\n"
+ " <mkdir dir=\"${targetdir}\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"compile\" depends=\"clean, copy-resources\">\n"
+ " <javac srcdir=\"${sourcedir}\"\n"
+ " destdir=\"${targetdir}\"\n"
+ " classpathref=\"libraries\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"copy-resources\">\n"
+ " <copy todir=\"${targetdir}\">\n"
+ " <fileset dir=\"${sourcedir}\">\n"
+ " <exclude name=\"**/*.java\"/>\n"
+ " </fileset>\n"
+ " </copy>\n"
+ " </target>\n"
+ "\n"
+ "</project>]]>"
+
+#: index.docbook:329
+msgid ""
+ "<![CDATA[C:\\hibernateTutorial\\>ant\n"
+ "Buildfile: build.xml\n"
+ "\n"
+ "copy-resources:\n"
+ " [copy] Copying 2 files to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "compile:\n"
+ " [javac] Compiling 1 source file to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "BUILD SUCCESSFUL\n"
+ "Total time: 1 second ]]>"
+msgstr "Esto dirá a Ant que agregue todos los ficheros en el directorio lib que terminen con <literal>.jar</literal> al classpath usado para la compilación. También copiará todos los ficheros que no sean código Java al directorio objetivo, por ejemplo, ficheros de configuración y mapeos de Hibernate. Si ahora corres Ant, debes obtener esta salida:"
+
+#: index.docbook:334
+msgid "Startup and helpers"
+msgstr ""
+ "<![CDATA[C:\\hibernateTutorial\\>ant\n"
+ "Buildfile: build.xml\n"
+ "\n"
+ "copy-resources:\n"
+ " [copy] Copying 2 files to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "compile:\n"
+ " [javac] Compiling 1 source file to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "BUILD SUCCESSFUL\n"
+ "Total time: 1 second ]]>"
+
+#: index.docbook:336
+msgid "It's time to load and store some <literal>Event</literal> objects, but first we have to complete the setup with some infrastructure code. We have to startup Hibernate. This startup includes building a global <literal>SessionFactory</literal> object and to store it somewhere for easy access in application code. A <literal>SessionFactory</literal> can open up new <literal>Session</literal>'s. A <literal>Session</literal> represents a single-threaded unit of work, the <literal>SessionFactory</literal> is a thread-safe global object, instantiated once."
+msgstr "Arranque y ayudantes"
+
+#: index.docbook:346
+msgid "We'll create a <literal>HibernateUtil</literal> helper class which takes care of startup and makes accessing a <literal>SessionFactory</literal> convenient. Let's have a look at the implementation:"
+msgstr "Es momento de cargar y almacenar algunos objetos <literal>Event</literal>, pero primero tenemos que completar la configuración de algún código de infraestructura. Tenemos que arrancar Hibernate. Este arranque incluye construir un objeto <literal>SessionFactory</literal> global y almacenarlo en algún sitio de fácil acceso en el código de aplicación. Una <literal>SessionFactory</literal> puede abrir nuevas <literal>Session</literal>'s. Una <literal>Session</literal> representa un unidad de trabajo mono-hebra. La <literal>SessionFactory</literal> es un objeto global seguro entre hebras, instanciado una sola vez."
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[package util;\n"
+ "\n"
+ "import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ "\n"
+ " private static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Create the SessionFactory from hibernate.cfg.xml\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " System.err.println(\"Initial SessionFactory creation failed.\" + ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static SessionFactory getSessionFactory() {\n"
+ " return sessionFactory;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr "Crearemos una clase de ayuda <literal>HibernateUtil</literal> que cuide del arranque y haga conveniente el manejo de <literal>Session</literal>. El así llamado patrón <emphasis>Sesión de Hebra Local (ThreadLocal Session)</emphasis> es útil aquí; mantenemos la unidad de trabajo actual asociada a la hebra actual. Echemos una mirada a la implementación:"
+
+#: index.docbook:354
+msgid "This class does not only produce the global <literal>SessionFactory</literal> in its static initializer (called once by the JVM when the class is loaded), but also hides the fact that it uses a static singleton. It might as well lookup the <literal>SessionFactory</literal> from JNDI in an application server."
+msgstr ""
+ "<![CDATA[import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ "\n"
+ " public static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Create the SessionFactory from hibernate.cfg.xml\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " System.err.println(\"Initial SessionFactory creation failed.\" + ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static final ThreadLocal session = new ThreadLocal();\n"
+ "\n"
+ " public static Session currentSession() throws HibernateException {\n"
+ " Session s = (Session) session.get();\n"
+ " // Open a new Session, if this thread has none yet\n"
+ " if (s == null) {\n"
+ " s = sessionFactory.openSession();\n"
+ " // Store it in the ThreadLocal variable\n"
+ " session.set(s);\n"
+ " }\n"
+ " return s;\n"
+ " }\n"
+ "\n"
+ " public static void closeSession() throws HibernateException {\n"
+ " Session s = (Session) session.get();\n"
+ " if (s != null)\n"
+ " s.close();\n"
+ " session.set(null);\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:361
+msgid "If you give the <literal>SessionFactory</literal> a name in your configuration file, Hibernate will in fact try to bind it to JNDI after it has been built. To avoid this code completely you could also use JMX deployment and let the JMX-capable container instantiate and bind a <literal>HibernateService</literal> to JNDI. These advanced options are discussed in the Hibernate reference documentation."
+msgstr "Esta clase no ólo produce la <literal>SessionFactory</literal> global en su inicializador static (llamado sólo una vez por la JVM al cargar la clase), sino que también tiene una variable <literal>ThreadLocal</literal> para tener la <literal>Session</literal> para la hebra actual. No importa cuándo llames a <literal>HibernateUtil.currentSession()</literal>, siempre devolverá la misma unidad de trabajo de Hibernate en la misma hebra. Una llamada a <literal>HibernateUtil.closeSession()</literal> termina la unidad de trabajo actualmente asociada a la hebra."
+
+#: index.docbook:370
+msgid "Place <literal>HibernateUtil.java</literal> in the development source directory, in a package next to <literal>events</literal>:"
+msgstr "Asegúrate de entender el concepto Java de una variable local a una hebra antes de usar esta ayuda. Una clase <literal>HibernateUtil</literal> más potente puede encontrarse en <literal>CaveatEmptor</literal>, http://caveatemptor.hibernate.org/, así como en el libro \"Java Persistence with Hibernate\". Observa que esta clase no es necesaria si despliegas Hibernate en un servidor de aplicaciones J2EE: una <literal>Session</literal> será automáticamente ligada a la transacción JTA actual, y puedes buscar la <literal>SessionFactory</literal> a través de JNDI. Si usas JBoss AS, Hibernate puede ser desplegado como un servicio de sistema manejado y automáticamente ligará la <literal>SessionFactory</literal> a un nombre JNDI."
+
+#: index.docbook:375
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml\n"
+ " +util\n"
+ " HibernateUtil.java\n"
+ " hibernate.cfg.xml\n"
+ "+data\n"
+ "build.xml]]>"
+msgstr "Coloca <literal>HibernateUtil.java</literal> en el directorio de fuentes de desarrollo, junto a <literal>Event.java</literal>:"
+
+#: index.docbook:377
+msgid "This should again compile without problems. We finally need to configure a logging system - Hibernate uses commons logging and leaves you the choice between Log4j and JDK 1.4 logging. Most developers prefer Log4j: copy <literal>log4j.properties</literal> from the Hibernate distribution (it's in the <literal>etc/</literal> directory) to your <literal>src</literal> directory, next to <literal>hibernate.cfg.xml</literal>. Have a look at the example configuration and change the settings if you like to have more verbose output. By default, only Hibernate startup message are shown on stdout."
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " Event.java\n"
+ " Event.hbm.xml\n"
+ " HibernateUtil.java\n"
+ " hibernate.cfg.xml\n"
+ "+data\n"
+ "build.xml]]>"
+
+#: index.docbook:387
+msgid "The tutorial infrastructure is complete - and we are ready to do some real work with Hibernate."
+msgstr "Esto también debe compilar sin problemas. Finalmente necesitamos configurar un sistema de logging (registro). Hibernate usa commons logging y te deja la elección entre Log4J y logging de JDK 1.4. La mayoría de los desarrolladores prefieren Log4J: copia <literal>log4j.properties</literal> de la distribución de Hibernate (está en el directorio <literal>etc/</literal>) a tu directorio <literal>src</literal>, junto a <literal>hibernate.cfg.xml</literal>. Echa una mirada a la configuración de ejemplo y cambia los ajustes si te gusta tener una salida más verborrágica. Por defecto, sólo se muestra el mensaje de arranque de Hibernate en la salida."
+
+#: index.docbook:395
+msgid "Loading and storing objects"
+msgstr "La infraestructura del tutorial está completa, y estamos listos para hacer algún trabajo real con Hibernate."
+
+#: index.docbook:397
+msgid "Finally, we can use Hibernate to load and store objects. We write an <literal>EventManager</literal> class with a <literal>main()</literal> method:"
+msgstr "Cargando y almacenando objetos"
+
+#: index.docbook:402
+msgid ""
+ "<![CDATA[package events;\n"
+ "import org.hibernate.Session;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "import util.HibernateUtil;\n"
+ "\n"
+ "public class EventManager {\n"
+ "\n"
+ " public static void main(String[] args) {\n"
+ " EventManager mgr = new EventManager();\n"
+ "\n"
+ " if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " }\n"
+ "\n"
+ " HibernateUtil.getSessionFactory().close();\n"
+ " }\n"
+ "\n"
+ " private void createAndStoreEvent(String title, Date theDate) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " session.save(theEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr "Finalmente, podemos usar Hibernate para cargar y almacenar objetos. Escribimos una clase <literal>EventManager</literal> con un método <literal>main()</literal>:"
+
+#: index.docbook:404
+msgid "We create a new <literal>Event</literal> object, and hand it over to Hibernate. Hibernate now takes care of the SQL and executes <literal>INSERT</literal>s on the database. Let's have a look at the <literal>Session</literal> and <literal>Transaction</literal>-handling code before we run this."
+msgstr ""
+ "<![CDATA[import org.hibernate.Transaction;\n"
+ "import org.hibernate.Session;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class EventManager {\n"
+ "\n"
+ " public static void main(String[] args) {\n"
+ " EventManager mgr = new EventManager();\n"
+ "\n"
+ " if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " }\n"
+ "\n"
+ " HibernateUtil.sessionFactory.close();\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:411
+msgid "A <literal>Session</literal> is a single unit of work. For now we'll keep things simple and assume a one-to-one granularity between a Hibernate <literal>Session</literal> and a database transaction. To shield our code from the actual underlying transaction system (in this case plain JDBC, but it could also run with JTA) we use the <literal>Transaction</literal> API that is available on the Hibernate <literal>Session</literal>."
+msgstr "Leemos algunos argumentos de la línea de comandos, y si el primer argumento es \"store\", creamos y almacenamos un nuevo Event:"
+
+#: index.docbook:419
+msgid "What does <literal>sessionFactory.getCurrentSession()</literal> do? First, you can call it as many times and anywhere you like, once you get hold of your <literal>SessionFactory</literal> (easy thanks to <literal>HibernateUtil</literal>). The <literal>getCurrentSession()</literal> method always returns the \"current\" unit of work. Remember that we switched the configuration option for this mechanism to \"thread\" in <literal>hibernate.cfg.xml</literal>? Hence, the current unit of work is bound to the current Java thread that executes our application. However, this is not the full picture, you also have to consider scope, when a unit of work begins and when it ends."
+msgstr ""
+ "<![CDATA[private void createAndStoreEvent(String title, Date theDate) {\n"
+ " Session session = HibernateUtil.currentSession();\n"
+ " Transaction tx = session.beginTransaction();\n"
+ "\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " session.save(theEvent);\n"
+ "\n"
+ " tx.commit();\n"
+ " HibernateUtil.closeSession();\n"
+ "}]]>"
+
+#: index.docbook:430
+msgid "A <literal>Session</literal> begins when it is first needed, when the first call to <literal>getCurrentSession()</literal> is made. It is then bound by Hibernate to the current thread. When the transaction ends, either through commit or rollback, Hibernate automatically unbinds the <literal>Session</literal> from the thread and closes it for you. If you call <literal>getCurrentSession()</literal> again, you get a new <literal>Session</literal> and can start a new unit of work. This <emphasis>thread-bound</emphasis> programming model is the most popular way of using Hibernate, as it allows flexible layering of your code (transaction demarcation code can be separated from data access code, we'll do this later in this tutorial)."
+msgstr "Creamos un nuevo objeto <literal>Event</literal>, y se lo damos a Hibernate. Hibernate cuida ahora del SQL y ejecuta <literal>INSERT</literal>s en la base de datos. Echemos una mirada al código de manejo de <literal>Session</literal> y <literal>Transaction</literal> antes de ejecutar esto."
+
+#: index.docbook:441
+msgid "Related to the unit of work scope, should the Hibernate <literal>Session</literal> be used to execute one or several database operations? The above example uses one <literal>Session</literal> for one operation. This is pure coincidence, the example is just not complex enough to show any other approach. The scope of a Hibernate <literal>Session</literal> is flexible but you should never design your application to use a new Hibernate <literal>Session</literal> for <emphasis>every</emphasis> database operation. So even if you see it a few more times in the following (very trivial) examples, consider <emphasis>session-per-operation</emphasis> an anti-pattern. A real (web) application is shown later in this tutorial."
+msgstr "Una <literal>Session</literal> es una sola unidad de trabajo. Podría sorprenderte que tengamos una API adicional, <literal>Transaction</literal>. Esto implica que una unidad de trabajo puede ser \"más larga\" que una sola transacción de base de datos; imagina una unidad de trabajo que se abarca varios ciclos petición/respuesta HTTP (por ejemplo, un diálogo asistente) en una aplicación web. Separar las transacciones de base de datos de \"las unidades de trabajo de la aplicación desde el punto de vista del usuario\" es uno de los conceptos básicos de diseño de Hibernate. Llamamos una unidad de trabajo larga <emphasis>Transacción de Aplicación</emphasis>, usualmente encapsulando varias transacciones de base de datos más cortas. Por ahora mantendremos las cosas simples y asumiremos una granularidad uno-a-uno entre una <literal>Session</literal> y una <literal>Transaction</literal>."
+
+#: index.docbook:452
+msgid "Have a look at <xref linkend=\"transactions\"/> for more information about transaction handling and demarcation. We also skipped any error handling and rollback in the previous example."
+msgstr "¿Qué es lo que hacen <literal>Transaction.begin()</literal> y <literal>commit()</literal>? ¿Dónde está el rollback en caso que algo vaya mal? La API de <literal>Transaction</literal> de Hibernate es opcional realmente, pero la usamos por conveniencia y portabilidad. Si manejases la transacción de base de datos por ti mismo (por ejemplo, llamando a <literal>session.connection.commit()</literal>), ligarías el código a un entorno de despliegue particular, en este JDBC directo no manejado. Estableciendo la fábrica de <literal>Transaction</literal> en tu configuración de Hibernate puedes desplegar tu capa de persistencia en cualquier sitio. Echa una mirada al <xref linkend=\"transactions\"/> para más información sobre manejo y demarcación de transacciones. Hemos saltado también cualquier manejo de excepciones y rollback en este ejemplo."
+
+#: index.docbook:458
+msgid "To run this first routine we have to add a callable target to the Ant build file:"
+msgstr "Para ejecutar la primera rutina tenemos que agregar un objetivo llamable al fichero de construcción de Ant:"
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[<target name=\"run\" depends=\"compile\">\n"
+ " <java fork=\"true\" classname=\"events.EventManager\" classpathref=\"libraries\">\n"
+ " <classpath path=\"${targetdir}\"/>\n"
+ " <arg value=\"${action}\"/>\n"
+ " </java>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"run\" depends=\"compile\">\n"
+ " <java fork=\"true\" classname=\"EventManager\" classpathref=\"libraries\">\n"
+ " <classpath path=\"${targetdir}\"/>\n"
+ " <arg value=\"${action}\"/>\n"
+ " </java>\n"
+ "</target>]]>"
+
+#: index.docbook:464
+msgid "The value of the <literal>action</literal> argument is set on the command line when calling the target:"
+msgstr "El valor del argumento <literal>action</literal> es establecido por línea de comandos al llamar al objetivo:"
+
+#: index.docbook:469
+msgid "<![CDATA[C:\\hibernateTutorial\\>ant run -Daction=store]]>"
+msgstr "<![CDATA[C:\\hibernateTutorial\\>ant run -Daction=store]]>"
+
+#: index.docbook:471
+msgid "You should see, after compilation, Hibernate starting up and, depending on your configuration, lots of log output. At the end you will find the following line:"
+msgstr "Debes ver, después de la compilación, a Hibernate arrancando y, dependiendo de tu configuración mucha salida de registro (log). Al final encontrarás la siguiente línea:"
+
+#: index.docbook:476
+msgid "<![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]>"
+msgstr "<![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]>"
+
+#: index.docbook:478
+msgid "This is the <literal>INSERT</literal> executed by Hibernate, the question marks represent JDBC bind parameters. To see the values bound as arguments, or to reduce the verbosity of the log, check your <literal>log4j.properties</literal>."
+msgstr "Esta es la <literal>INSERT</literal> ejecutada por Hibernate, los signos de preguntas representan parámetros de ligado JDBC. Para ver los valores ligados como argumentos, o para reducir la verborragia del registro, chequea tu <literal>log4j.properties</literal>."
+
+#: index.docbook:484
+msgid "Now we'd like to list stored events as well, so we add an option to the main method:"
+msgstr "Ahora quisiéramos listar acontecimientos almacenados también, así que agregamos una opción al método principal:"
+
+#: index.docbook:488
+msgid ""
+ "<![CDATA[if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ "}\n"
+ "else if (args[0].equals(\"list\")) {\n"
+ " List events = mgr.listEvents();\n"
+ " for (int i = 0; i < events.size(); i++) {\n"
+ " Event theEvent = (Event) events.get(i);\n"
+ " System.out.println(\"Event: \" + theEvent.getTitle() +\n"
+ " \" Time: \" + theEvent.getDate());\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ "}\n"
+ "else if (args[0].equals(\"list\")) {\n"
+ " List events = mgr.listEvents();\n"
+ " for (int i = 0; i < events.size(); i++) {\n"
+ " Event theEvent = (Event) events.get(i);\n"
+ " System.out.println(\"Event: \" + theEvent.getTitle() +\n"
+ " \" Time: \" + theEvent.getDate());\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:490
+msgid "We also add a new <literal>listEvents() method</literal>:"
+msgstr "Agregamos también un nuevo método <literal>listEvents()</literal>:"
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[private List listEvents() {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " List result = session.createQuery(\"from Event\").list();\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " return result;\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private List listEvents() {\n"
+ " Session session = HibernateUtil.currentSession();\n"
+ " Transaction tx = session.beginTransaction();\n"
+ "\n"
+ " List result = session.createQuery(\"from Event\").list();\n"
+ "\n"
+ " tx.commit();\n"
+ " session.close();\n"
+ "\n"
+ " return result;\n"
+ "}]]>"
+
+#: index.docbook:496
+msgid "What we do here is use an HQL (Hibernate Query Language) query to load all existing <literal>Event</literal> objects from the database. Hibernate will generate the appropriate SQL, send it to the database and populate <literal>Event</literal> objects with the data. You can create more complex queries with HQL, of course."
+msgstr "Lo que hacemos aquí es usar una consulta HQL (Lenguaje de Consulta de Hibernate o Hibernate Query Language) para cargar todos los objetos <literal>Event</literal> existentes de la base de datos. Hibernate generará el SQL apropiado, lo enviará a la base de datosy poblará los objetos <literal>Event</literal> con datos. Puedes, por supuesto, crear consultas más complejas con HQL."
+
+#: index.docbook:503
+msgid "Now, to execute and test all of this, follow these steps:"
+msgstr "Si ahora llamas a Ant con <literal>-Daction=list</literal>, debes ver los eventos que has almacenado hasta ahora. Puede sorprenderte que esto no funcione, al menos si has seguido este tutorial paso por paso; el resultado siempre estará vacío. La razon de esto es la opción <literal>hbm2ddl.auto</literal> en la configuración de Hibernate: Hibernate recreará la base de datos en cada ejecución. Deshabilítala quitando la opción, y verás resultados en tu listado después que llames a la acción <literal>store</literal> unas cuantas veces. La generación y exportación de esquema es útil mayormente en testeo unitario."
+
+#: index.docbook:509
+msgid "Run <literal>ant run -Daction=store</literal> to store something into the database and, of course, to generate the database schema before through hbm2ddl."
+msgstr "Part 2 - Mapeando asociaciones"
+
+#: index.docbook:515
+msgid "Now disable hbm2ddl by commenting out the property in your <literal>hibernate.cfg.xml</literal> file. Usually you only leave it turned on in continous unit testing, but another run of hbm2ddl would <emphasis>drop</emphasis> everything you have stored - the <literal>create</literal> configuration setting actually translates into \"drop all tables from the schema, then re-create all tables, when the SessionFactory is build\"."
+msgstr "Hemos mapeado un clase de entidad persistente a una tabla. Construyamos sobre esto y agreguemos algunas asociaciones de clase. Primero agregaremos personas a nuestra aplicación, y almacenaremos una lista de eventos en las que participan."
+
+#: index.docbook:525
+msgid "If you now call Ant with <literal>-Daction=list</literal>, you should see the events you have stored so far. You can of course also call the <literal>store</literal> action a few times more."
+msgstr "Mapeando la clase Person"
+
+#: index.docbook:531
+msgid "Note: Most new Hibernate users fail at this point and we see questions about <emphasis>Table not found</emphasis> error messages regularly. However, if you follow the steps outlined above you will not have this problem, as hbm2ddl creates the database schema on the first run, and subsequent application restarts will use this schema. If you change the mapping and/or database schema, you have to re-enable hbm2ddl once again."
+msgstr "El primer corte de la clase <literal>Person</literal> es simple:"
+
+#: index.docbook:544
+msgid "Part 2 - Mapping associations"
+msgstr ""
+ "<![CDATA[public class Person {\n"
+ "\n"
+ " private Long id;\n"
+ " private int age;\n"
+ " private String firstname;\n"
+ " private String lastname;\n"
+ "\n"
+ " Person() {}\n"
+ "\n"
+ " // Accessor methods for all properties, private setter for 'id'\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:546
+msgid "We mapped a persistent entity class to a table. Let's build on this and add some class associations. First we'll add people to our application, and store a list of events they participate in."
+msgstr "Crea un fichero de mapeo llamado <literal>Person.hbm.xml</literal>:"
+
+#: index.docbook:552
+msgid "Mapping the Person class"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:554
+msgid "The first cut of the <literal>Person</literal> class is simple:"
+msgstr "Finalmente, agrega el nuevo mapeo a la configuración de Hibernate:"
+
+#: index.docbook:558
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "public class Person {\n"
+ "\n"
+ " private Long id;\n"
+ " private int age;\n"
+ " private String firstname;\n"
+ " private String lastname;\n"
+ "\n"
+ " public Person() {}\n"
+ "\n"
+ " // Accessor methods for all properties, private setter for 'id'\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[ <mapping resource=\"Event.hbm.xml\"/>\n"
+ " <mapping resource=\"Person.hbm.xml\"/>\n"
+ "]]>"
+
+#: index.docbook:560
+msgid "Create a new mapping file called <literal>Person.hbm.xml</literal> (don't forget the DTD reference at the top):"
+msgstr "Crearemos ahora una asociación entre estas dos entidades. Obviamente, las personas pueden participar en eventos, y los eventos tienen participantes. Las cuestiones de diseño con que tenemos que tratar son: direccionalidad, multiplicidad y comportamiento de colección."
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "Una asociación unidireccional basada en Set"
+
+#: index.docbook:567
+msgid "Finally, add the new mapping to Hibernate's configuration:"
+msgstr "Agregaremos una colección de eventos a la clase <literal>Person</literal>. De esta forma podemos navegar facilmente a los eventos de una persona en particular, sin ejecutar una consulta explícita, llamando a <literal>aPerson.getEvents()</literal>. Usamos una colección Java, un <literal>Set</literal>, porque la colección no contendrá elementos duplicados y el ordenamiento no nos es relevante."
+
+#: index.docbook:571
+msgid ""
+ "<![CDATA[<mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "<mapping resource=\"events/Person.hbm.xml\"/>]]>"
+msgstr "Hasta ahora hemos diseñado asociaciones unidireccionales multivaluadas, implementadas con un <literal>Set</literal>. Escribamos el código para esto en las clases Java y luego lo mapeemos:"
+
+#: index.docbook:573
+msgid "We'll now create an association between these two entities. Obviously, persons can participate in events, and events have participants. The design questions we have to deal with are: directionality, multiplicity, and collection behavior."
+msgstr ""
+ "<![CDATA[public class Person {\n"
+ "\n"
+ " private Set events = new HashSet();\n"
+ "\n"
+ " public Set getEvents() {\n"
+ " return events;\n"
+ " }\n"
+ "\n"
+ " public void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:583
+msgid "A unidirectional Set-based association"
+msgstr "Antes que mapeemos esta asociación, piensa sobre el otro lado. Claramente, podemos mantener esto solamente unidireccional. O podemos crear otra colección en el <literal>Event</literal>, si queremos ser capaces de navegarlos bidireccionalmente; por ejemplo, <literal>anEvent.getParticipants()</literal>. Esta es una elección de diseño que recae en ti, pero lo que está claro de esta discusión es la multiplicidad de la asociación: \"multi\" valuada a ambos lados, llamamos a esto una asociación <emphasis>muchos-a-muchos</emphasis>. Por lo tanto, usamos un mapeo many-to-many de Hibernate:"
+
+#: index.docbook:585
+msgid "We'll add a collection of events to the <literal>Person</literal> class. That way we can easily navigate to the events for a particular person, without executing an explicit query - by calling <literal>aPerson.getEvents()</literal>. We use a Java collection, a <literal>Set</literal>, because the collection will not contain duplicate elements and the ordering is not relevant for us."
+msgstr ""
+ "<![CDATA[<class name=\"Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ "\n"
+ " <set name=\"events\" table=\"PERSON_EVENT\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <many-to-many column=\"EVENT_ID\" class=\"Event\"/>\n"
+ " </set>\n"
+ "\n"
+ "</class>]]>"
+
+#: index.docbook:592
+msgid "We need a unidirectional, many-valued associations, implemented with a <literal>Set</literal>. Let's write the code for this in the Java classes and then map it:"
+msgstr "Hibernate soporta todo tipo de mapeos de colección, siendo el más común un <literal><set></literal>. Para una asociación muchos-a-muchos (o relación de entidad <emphasis>n:m</emphasis>), se necesita una tabla de asociación. Cada fila en esta tabla representa un enlace entre una persona y un evento. Esta tabla se configura con el atributo <literal>table</literal> del elemento <literal>set</literal>. El nombre de la columna identificadora en la asociación, para el lado de la persona, se define con el elemento <literal><key></literal>. El nombre de columna para el lado del evento se define con el atributo <literal>column</literal> del <literal><many-to-many></literal>. También tienes que decirle a Hibernate la clase de los objetos en tu colección (correcto: la clase del otro lado de la colección de referencias)."
+
+#: index.docbook:597
+msgid ""
+ "<![CDATA[public class Person {\n"
+ "\n"
+ " private Set events = new HashSet();\n"
+ "\n"
+ " public Set getEvents() {\n"
+ " return events;\n"
+ " }\n"
+ "\n"
+ " public void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ " }\n"
+ "}]]>"
+msgstr "El esquema de base de datos para este mapeo es, por lo tanto:"
+
+#: index.docbook:599
+msgid "Before we map this association, think about the other side. Clearly, we could just keep this unidirectional. Or, we could create another collection on the <literal>Event</literal>, if we want to be able to navigate it bi-directional, i.e. <literal>anEvent.getParticipants()</literal>. This is not necessary, from a functional perspective. You could always execute an explicit query to retrieve the participants for a particular event. This is a design choice left to you, but what is clear from this discussion is the multiplicity of the association: \"many\" valued on both sides, we call this a <emphasis>many-to-many</emphasis> association. Hence, we use Hibernate's many-to-many mapping:"
+msgstr ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | |\n"
+ " |_____________| |__________________| | PERSON |\n"
+ " | | | | |_____________|\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | |\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE |\n"
+ " |_____________| | FIRSTNAME |\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ "\n"
+ " <set name=\"events\" table=\"PERSON_EVENT\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <many-to-many column=\"EVENT_ID\" class=\"events.Event\"/>\n"
+ " </set>\n"
+ "\n"
+ "</class>]]>"
+msgstr "Trabajando la asociación"
+
+#: index.docbook:612
+msgid "Hibernate supports all kinds of collection mappings, a <literal><set></literal> being most common. For a many-to-many association (or <emphasis>n:m</emphasis> entity relationship), an association table is needed. Each row in this table represents a link between a person and an event. The table name is configured with the <literal>table</literal> attribute of the <literal>set</literal> element. The identifier column name in the association, for the person's side, is defined with the <literal><key></literal> element, the column name for the event's side with the <literal>column</literal> attribute of the <literal><many-to-many></literal>. You also have to tell Hibernate the class of the objects in your collection (correct: the class on the other side of the collection of references)."
+msgstr "Traigamos alguna gente y eventos juntos en un nuevo método en <literal>EventManager</literal>:"
+
+#: index.docbook:624
+msgid "The database schema for this mapping is therefore:"
+msgstr ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ " Session session = HibernateUtil.currentSession();\n"
+ " Transaction tx = session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent);\n"
+ "\n"
+ " tx.commit();\n"
+ " HibernateUtil.closeSession();\n"
+ "}]]>"
+
+#: index.docbook:628
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | |\n"
+ " |_____________| |__________________| | PERSON |\n"
+ " | | | | |_____________|\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | |\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE |\n"
+ " |_____________| | FIRSTNAME |\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr "Después de cargar una <literal>Person</literal> y un <literal>Event</literal>, simplemente modifica la colección usando sus métodos normales. Como puedes ver, no hay una llamada explícita a <literal>update()</literal> o <literal>save()</literal>. Hibernate detecta automáticamente que la colección ha sido modificada y necesita ser salvada. Esto es llamado <emphasis>chequeo sucio automótico (automatic dirty checking)</emphasis>, y también puedes intentarlo modificando el nombre de la propiedad de fecha de cualquiera de tus objetos. Mientras estén en estado <emphasis>persistente</emphasis>, esto es, ligados a una <literal>Session</literal> de Hibernate particular (es decir, justo han sido cargados o almacenados en una unidad de trabajo), Hibernate monitoriza cualquier cambio y ejecuta SQL en estilo escribe-por-detrás. El proceso de sincronización del estado de memoria con la base de datos, usu!
almente sólo al final de una unidad de trabajo, es llamado <emphasis>limpieza (flushing)</emphasis>."
+
+#: index.docbook:633
+msgid "Working the association"
+msgstr "Podrías, por supuesto, cargar persona y evento en unidades de trabajo diferentes. O modificas un objeto fuera de una <literal>Session</literal>, cuando no está en estado persistente (si antes era persistente llamamos a este estado <emphasis>separado (detached) </emphasis>). En código (no muy realista), esto se vería como sigue:"
+
+#: index.docbook:635
+msgid "Let's bring some people and events together in a new method in <literal>EventManager</literal>:"
+msgstr ""
+ "<![CDATA[ private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.currentSession();\n"
+ " Transaction tx = session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " tx.commit();\n"
+ " HibernateUtil.closeSession();\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent); // aPerson is detached\n"
+ "\n"
+ " Session session2 = HibernateUtil.currentSession();\n"
+ " Transaction tx2 = session.beginTransaction();\n"
+ "\n"
+ " session2.update(aPerson); // Reattachment of aPerson\n"
+ "\n"
+ " tx2.commit();\n"
+ " HibernateUtil.closeSession();\n"
+ " }\n"
+ "]]>"
+
+#: index.docbook:639
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr "La llamada a <literal>update</literal> hace a un objeto persistente de nuevo, podrías decir que la liga a una nueva unidad de trabajo, de modo que cualquier modificación que le hagas mientras esté separado puede ser salvada a base de datos."
+
+#: index.docbook:641
+msgid "After loading a <literal>Person</literal> and an <literal>Event</literal>, simply modify the collection using the normal collection methods. As you can see, there is no explicit call to <literal>update()</literal> or <literal>save()</literal>, Hibernate automatically detects that the collection has been modified and needs to be updated. This is called <emphasis>automatic dirty checking</emphasis>, and you can also try it by modifying the name or the date property of any of your objects. As long as they are in <emphasis>persistent</emphasis> state, that is, bound to a particular Hibernate <literal>Session</literal> (i.e. they have been just loaded or saved in a unit of work), Hibernate monitors any changes and executes SQL in a write-behind fashion. The process of synchronizing the memory state with the database, usually only at the end of a unit of work, is called <emphasis>flushing</emphasis>. In our code, the unit of work ends with a commit (or rollback) of the dat!
abase transaction - as defined by the <literal>thread</literal> configuration option for the <literal>CurrentSessionContext</literal> class."
+msgstr "Bueno, esto no es muy usado en nuestra situación actual, pero es un concepto importante que puedes diseñar en tu propia aplicación. Por ahora, completa este ejercicio agregando una nueva acción al método main de <literal>EventManager</literal> y llámala desde la línea de comandos. Si necesitas los identificadores de una persona o evento, el método <literal>save()</literal> los devuelve."
+
+#: index.docbook:656
+msgid "You might of course load person and event in different units of work. Or you modify an object outside of a <literal>Session</literal>, when it is not in persistent state (if it was persistent before, we call this state <emphasis>detached</emphasis>). You can even modify a collection when it is detached:"
+msgstr "Esto fue un ejemplo de una asociación entre dos clases igualmente importantes, dos entidades. Como se ha mencionado anteriormente, hay otras clases y tipos en un modelo típico, usualmente \"menos importantes\". Algunos ya los habrás visto, como un <literal>int</literal> o un <literal>String</literal>. Llamamos a estas clases <emphasis>tipos de valor (value types)</emphasis>, y sus instancias <emphasis>dependen</emphasis> de una entidad en particular. Las instancias de estos tipos no tienen su propia identidad, ni son compartidas entre entidades (dos personas no referencian el mismo objeto <literal>firstname</literal>, incluso si tuvieran el mismo primer nombre). Por supuesto, los tipos de valor no sólo pueden encontrarse en el JDK (de hecho, en una aplicación Hibernate todas las clases del JDK son consideradas tipos de valor), sino que además puedes escribir por ti mismo clases dependientes, por ejemplo, <literal>Address</li!
teral> o <literal>MonetaryAmount</literal>."
+
+#: index.docbook:663
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session\n"
+ " .createQuery(\"select p from Person p left join fetch p.events where p.id = :pid\")\n"
+ " .setParameter(\"pid\", personId)\n"
+ " .uniqueResult(); // Eager fetch the collection so we can use it detached\n"
+ "\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " // End of first unit of work\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent); // aPerson (and its collection) is detached\n"
+ "\n"
+ " // Begin second unit of work\n"
+ "\n"
+ " Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session2.beginTransaction();\n"
+ "\n"
+ " session2.update(aPerson); // Reattachment of aPerson\n"
+ "\n"
+ " session2.getTransaction().commit();\n"
+ "}]]>"
+msgstr "También puedes diseñar una colección de tipos de valor. Esto es conceptualmente muy diferente de una colección de referencias a otras entidades, pero se ve casi lo mismo en Java."
+
+#: index.docbook:665
+msgid "The call to <literal>update</literal> makes a detached object persistent again, you could say it binds it to a new unit of work, so any modifications you made to it while detached can be saved to the database. This includes any modifications (additions/deletions) you made to a collection of that entity object."
+msgstr "Colección de valores"
+
+#: index.docbook:672
+msgid "Well, this is not much use in our current situation, but it's an important concept you can design into your own application. For now, complete this exercise by adding a new action to the <literal>EventManager</literal>'s main method and call it from the command line. If you need the identifiers of a person and an event - the <literal>save()</literal> method returns it (you might have to modify some of the previous methods to return that identifier):"
+msgstr "Agregamos una colección de objetos tipificados en valor a la entidad <literal>Person</literal>. Queremos almacenar direcciones de email, de modo que el tipo que usamos es <literal>String</literal>, y la colección es nuevamente un <literal>Set</literal>:"
+
+#: index.docbook:680
+msgid ""
+ "<![CDATA[else if (args[0].equals(\"addpersontoevent\")) {\n"
+ " Long eventId = mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " Long personId = mgr.createAndStorePerson(\"Foo\", \"Bar\");\n"
+ " mgr.addPersonToEvent(personId, eventId);\n"
+ " System.out.println(\"Added person \" + personId + \" to event \" + eventId);\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private Set emailAddresses = new HashSet();\n"
+ "\n"
+ "public Set getEmailAddresses() {\n"
+ " return emailAddresses;\n"
+ "}\n"
+ "\n"
+ "public void setEmailAddresses(Set emailAddresses) {\n"
+ " this.emailAddresses = emailAddresses;\n"
+ "}]]>"
+
+#: index.docbook:682
+msgid "This was an example of an association between two equally important classes, two entities. As mentioned earlier, there are other classes and types in a typical model, usually \"less important\". Some you have already seen, like an <literal>int</literal> or a <literal>String</literal>. We call these classes <emphasis>value types</emphasis>, and their instances <emphasis>depend</emphasis> on a particular entity. Instances of these types don't have their own identity, nor are they shared between entities (two persons don't reference the same <literal>firstname</literal> object, even if they have the same first name). Of course, value types can not only be found in the JDK (in fact, in a Hibernate application all JDK classes are considered value types), but you can also write dependent classes yourself, <literal>Address</literal> or <literal>MonetaryAmount</literal>, for example."
+msgstr "El mapeo de este <literal>Set</literal>:"
+
+#: index.docbook:695
+msgid "You can also design a collection of value types. This is conceptually very different from a collection of references to other entities, but looks almost the same in Java."
+msgstr ""
+ "<![CDATA[<set name=\"emailAddresses\" table=\"PERSON_EMAIL_ADDR\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <element type=\"string\" column=\"EMAIL_ADDR\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:703
+msgid "Collection of values"
+msgstr "La diferencia comparada con el mapeo anterior es la parte <literal>element</literal>, que le dice a Hibernate que la colección no contiene referencias a otra entidad, sino una colección de elementos de tipo <literal>String</literal> (el nombre en minúsculas te dice que es un tipo/conversor de mapeo de Hibernate). Una vez más, el atributo <literal>table</literal> del elemento <literal>set</literal> determina el nombre de la tabla para la colección. El elemento <literal>key</literal> define el nombre de la columna clave foránea en la tabla de colección. El atributo <literal>column</literal> en el elemento <literal>element</literal> define el nombre de columna donde realmente serán almacenados los valores <literal>String</literal>."
+
+#: index.docbook:705
+msgid "We add a collection of value typed objects to the <literal>Person</literal> entity. We want to store email addresses, so the type we use is <literal>String</literal>, and the collection is again a <literal>Set</literal>:"
+msgstr "Echa una mirada al esquema actualizado:"
+
+#: index.docbook:710
+msgid ""
+ "<![CDATA[private Set emailAddresses = new HashSet();\n"
+ "\n"
+ "public Set getEmailAddresses() {\n"
+ " return emailAddresses;\n"
+ "}\n"
+ "\n"
+ "public void setEmailAddresses(Set emailAddresses) {\n"
+ " this.emailAddresses = emailAddresses;\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | | ___________________\n"
+ " |_____________| |__________________| | PERSON | | |\n"
+ " | | | | |_____________| | PERSON_EMAIL_ADDR |\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | | |___________________|\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE | | *EMAIL_ADDR |\n"
+ " |_____________| | FIRSTNAME | |___________________|\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+
+#: index.docbook:712
+msgid "The mapping of this <literal>Set</literal>:"
+msgstr "Puedes ver que la clave primaria de la tabla de colección es de hecho una clave compuesta, usando ambas columnas. Esto implica también que no pueden haber direcciones de email duplicadas por persona, que es exactamente la semántica que necesitamos para un conjunto en Java."
+
+#: index.docbook:716
+msgid ""
+ "<![CDATA[<set name=\"emailAddresses\" table=\"PERSON_EMAIL_ADDR\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <element type=\"string\" column=\"EMAIL_ADDR\"/>\n"
+ "</set>]]>"
+msgstr "Puedes ahora intentar y agregar elementos a esta colección, al igual que hicimos antes enlazando personas y eventos. Es el mismo código en Java."
+
+#: index.docbook:718
+msgid "The difference compared with the earlier mapping is the <literal>element</literal> part, which tells Hibernate that the collection does not contain references to another entity, but a collection of elements of type <literal>String</literal> (the lowercase name tells you it's a Hibernate mapping type/converter). Once again, the <literal>table</literal> attribute of the <literal>set</literal> element determines the table name for the collection. The <literal>key</literal> element defines the foreign-key column name in the collection table. The <literal>column</literal> attribute in the <literal>element</literal> element defines the column name where the <literal>String</literal> values will actually be stored."
+msgstr "Asociaciones bidireccionales"
+
+#: index.docbook:728
+msgid "Have a look at the updated schema:"
+msgstr "A continuacion vamos a mapear una asociación bidireccional, haciendo que la asociación entre persona y evento funcione desde ambos lados en Java. Por supuesto, el esquema de base de datos no cambia; todavía necesitamos multiplicidad muchos-a-muchos. Una base de datos relacional es más flexible que un lenguaje de programación de red, así que no necesita nada parecido a una dirección de navegación; los datos pueden ser vistos y recuperados en cualquier forma posible."
+
+#: index.docbook:732
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | | ___________________\n"
+ " |_____________| |__________________| | PERSON | | |\n"
+ " | | | | |_____________| | PERSON_EMAIL_ADDR |\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | | |___________________|\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE | | *EMAIL_ADDR |\n"
+ " |_____________| | FIRSTNAME | |___________________|\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr "Primero agrega una colección de participantes a la clase de eventos <literal>Event</literal>:"
+
+#: index.docbook:734
+msgid "You can see that the primary key of the collection table is in fact a composite key, using both columns. This also implies that there can't be duplicate email addresses per person, which is exactly the semantics we need for a set in Java."
+msgstr ""
+ "<![CDATA[private Set participants = new HashSet();\n"
+ "\n"
+ "public Set getParticipants() {\n"
+ " return participants;\n"
+ "}\n"
+ "\n"
+ "public void setParticipants(Set participants) {\n"
+ " this.participants = participants;\n"
+ "}]]>"
+
+#: index.docbook:740
+msgid "You can now try and add elements to this collection, just like we did before by linking persons and events. It's the same code in Java:"
+msgstr "Ahora mapea este lado de la asociación también, en <literal>Event.hbm.xml</literal>."
+
+#: index.docbook:745
+msgid ""
+ "<![CDATA[private void addEmailToPerson(Long personId, String emailAddress) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ "\n"
+ " // The getEmailAddresses() might trigger a lazy load of the collection\n"
+ " aPerson.getEmailAddresses().add(emailAddress);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[<set name=\"participants\" table=\"PERSON_EVENT\" inverse=\"true\">\n"
+ " <key column=\"EVENT_ID\"/>\n"
+ " <many-to-many column=\"PERSON_ID\" class=\"Person\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:747
+msgid "This time we didnt' use a <emphasis>fetch</emphasis> query to initialize the collection. Hence, the call to its getter method will trigger an additional select to initialize it, so we can add an element to it. Monitor the SQL log and try to optimize this with an eager fetch."
+msgstr "Como ves, estos son mapeos normales de <literal>set</literal> en ambos documentos de mapeo. Nota que los nombres de columnas en <literal>key</literal> y <literal>many-to-many</literal> fueron permutados en ambos documentos de mapeo. Aquí la adición más importante es el atributo <literal>inverse=\"true\"</literal> en el elemento <literal>set</literal> del mapeo de colección de <literal>Event</literal>."
+
+#: index.docbook:757
+msgid "Bi-directional associations"
+msgstr "Lo que esto significa es que Hibernate debe tomar el otro lado - la clase <literal>Person</literal> - cuando necesite descubrir información sobre el enlace entre las dos. Esto será mucho más fácil de entender una vez que veas cómo se crea el enlace bidireccional entre nuestras dos entidades."
+
+#: index.docbook:759
+msgid "Next we are going to map a bi-directional association - making the association between person and event work from both sides in Java. Of course, the database schema doesn't change, we still have many-to-many multiplicity. A relational database is more flexible than a network programming language, so it doesn't need anything like a navigation direction - data can be viewed and retrieved in any possible way."
+msgstr "Trabajando enlaces bidireccionales"
+
+#: index.docbook:767
+msgid "First, add a collection of participants to the <literal>Event</literal> Event class:"
+msgstr "Primero, ten en mente que Hhibernate no afecta la semántica normal de Java. ¿Cómo hemos creado un enlace entre una <literal>Person</literal> y un <literal>Event</literal> en el ejemplo unidireccional? Hemos agregado una instancia de <literal>Event</literal> a la colección de referencias de eventos de una instancia de <literal>Person</literal>. De modo que, obviamente, si queremos que este enlace funcione bidireccionalmente, tenemos que hacer lo mismo del otro lado, agregando una referencia a <literal>Person</literal> a la colección en un <literal>Event</literal>. Este \"establecer el enlace a ambos lados\" es absolutamente necesario y nunca debes olvidar hacerlo."
+
+#: index.docbook:771
+msgid ""
+ "<![CDATA[private Set participants = new HashSet();\n"
+ "\n"
+ "public Set getParticipants() {\n"
+ " return participants;\n"
+ "}\n"
+ "\n"
+ "public void setParticipants(Set participants) {\n"
+ " this.participants = participants;\n"
+ "}]]>"
+msgstr "Muchos desarrolladores programan a la defensiva y crean métodos de manejo de un enlace para establecer correctamente ambos lados, por ejemplo en <literal>Person</literal>:"
+
+#: index.docbook:773
+msgid "Now map this side of the association too, in <literal>Event.hbm.xml</literal>."
+msgstr ""
+ "<![CDATA[protected Set getEvents() {\n"
+ " return events;\n"
+ "}\n"
+ "\n"
+ "protected void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ "}\n"
+ "\n"
+ "public void addToEvent(Event event) {\n"
+ " this.getEvents().add(event);\n"
+ " event.getParticipants().add(this);\n"
+ "}\n"
+ "\n"
+ "public void removeFromEvent(Event event) {\n"
+ " this.getEvents().remove(event);\n"
+ " event.getParticipants().remove(this);\n"
+ "}]]>"
+
+#: index.docbook:777
+msgid ""
+ "<![CDATA[<set name=\"participants\" table=\"PERSON_EVENT\" inverse=\"true\">\n"
+ " <key column=\"EVENT_ID\"/>\n"
+ " <many-to-many column=\"PERSON_ID\" class=\"events.Person\"/>\n"
+ "</set>]]>"
+msgstr "Nota que los métodos get y set para esta colección son ahora protegidos. Esto le permite a clases en el mismo paquete y a subclases acceder aún a los métodos, pero previene a cualquier otro de ensuciarse con la colección directamente (bueno, casi). Probablemente debas hacer lo mismo con la colección al otro lado."
+
+#: index.docbook:779
+msgid "As you see, these are normal <literal>set</literal> mappings in both mapping documents. Notice that the column names in <literal>key</literal> and <literal>many-to-many</literal> are swapped in both mapping documents. The most important addition here is the <literal>inverse=\"true\"</literal> attribute in the <literal>set</literal> element of the <literal>Event</literal>'s collection mapping."
+msgstr "Y ¿qué del atributo de mapeo <literal>inverse</literal>? Para ti, y para Java, un enlace bidireccional es simplemente cuestión de establecer correctamente las referencias a ambos lados. Hibernate, sin embargo, no tiene suficiente información para arreglar correctamente sentencias <literal>INSERT</literal> y <literal>UPDATE</literal> de SQL (para evitar violación de restricciones), y necesita alguna ayuda para manejar asociaciones bidireccionales apropiadamente. El hacer un lado de la asociación <literal>inverse</literal> le dice a Hibernate que basicamente lo ignore, que lo considere un <emphasis>espejo</emphasis> del otro lado. Esto es todo lo necesario para que Hibernate resuelva todas las incidencias al transformar un modelo de navegación direccional a un esquema SQL de base de datos. Las reglas que tienes que recordar son directas: Todas las asociaciones bidireccionales necesitan uno de los lados como <literal>inverse</!
literal>. En una asociación uno-a-muchos debe ser el lado-de-muchos. En una asociación muchos-a-muchos, puedes tomar cualquier lado, no hay diferencia."
+
+#: index.docbook:787
+msgid "What this means is that Hibernate should take the other side - the <literal>Person</literal> class - when it needs to find out information about the link between the two. This will be a lot easier to understand once you see how the bi-directional link between our two entities is created ."
+msgstr "Summary"
+
+#: index.docbook:796
+msgid "Working bi-directional links"
+msgstr "Este tutorial cubrió los fundamentos de escribir una simple aplicación independiente de Hibernate."
+
+#: index.docbook:798
+msgid "First, keep in mind that Hibernate does not affect normal Java semantics. How did we create a link between a <literal>Person</literal> and an <literal>Event</literal> in the unidirectional example? We added an instance of <literal>Event</literal> to the collection of event references, of an instance of <literal>Person</literal>. So, obviously, if we want to make this link working bi-directional, we have to do the same on the other side - adding a <literal>Person</literal> reference to the collection in an <literal>Event</literal>. This \"setting the link on both sides\" is absolutely necessary and you should never forget doing it."
+msgstr "Si ya te sientes confidente con Hibernate, continúa navegando a través de la tabla de contenidos de la documentación de referencia para los temas que encuentres interesantes. Los más consultados son procesamiento transaccional (<xref linkend=\"transactions\"/>), rendimiento de recuperación (<xref linkend=\"performance\"/>), o el uso de la API (<xref linkend=\"objectstate\"/>) y las funcionalidades de consulta (<xref linkend=\"objectstate-querying\"/>)."
+
+#: index.docbook:808
+msgid "Many developers program defensive and create link management methods to correctly set both sides, e.g. in <literal>Person</literal>:"
+msgstr "No olvides chequear el sitio web de Hibernate por más (especializados) tutoriales."
+
+#: index.docbook:813
+msgid ""
+ "<![CDATA[protected Set getEvents() {\n"
+ " return events;\n"
+ "}\n"
+ "\n"
+ "protected void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ "}\n"
+ "\n"
+ "public void addToEvent(Event event) {\n"
+ " this.getEvents().add(event);\n"
+ " event.getParticipants().add(this);\n"
+ "}\n"
+ "\n"
+ "public void removeFromEvent(Event event) {\n"
+ " this.getEvents().remove(event);\n"
+ " event.getParticipants().remove(this);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:815
+msgid "Notice that the get and set methods for the collection are now protected - this allows classes in the same package and subclasses to still access the methods, but prevents everybody else from messing with the collections directly (well, almost). You should probably do the same with the collection on the other side."
+msgstr ""
+
+#: index.docbook:822
+msgid "What about the <literal>inverse</literal> mapping attribute? For you, and for Java, a bi-directional link is simply a matter of setting the references on both sides correctly. Hibernate however doesn't have enough information to correctly arrange SQL <literal>INSERT</literal> and <literal>UPDATE</literal> statements (to avoid constraint violations), and needs some help to handle bi-directional associations properly. Making one side of the association <literal>inverse</literal> tells Hibernate to basically ignore it, to consider it a <emphasis>mirror</emphasis> of the other side. That's all that is necessary for Hibernate to work out all of the issues when transformation a directional navigation model to a SQL database schema. The rules you have to remember are straightforward: All bi-directional associations need one side as <literal>inverse</literal>. In a one-to-many association it has to be the many-side, in many-to-many association you can pick either side, there!
is no difference."
+msgstr ""
+
+#: index.docbook:837
+msgid "Let's turn this into a small web application."
+msgstr ""
+
+#: index.docbook:844
+msgid "Part 3 - The EventManager web application"
+msgstr ""
+
+#: index.docbook:846
+msgid "A Hibernate web application uses <literal>Session</literal> and <literal>Transaction</literal> almost like a standalone application. However, some common patterns are useful. We now write an <literal>EventManagerServlet</literal>. This servlet can list all events stored in the database, and it provides an HTML form to enter new events."
+msgstr ""
+
+#: index.docbook:854
+msgid "Writing the basic servlet"
+msgstr ""
+
+#: index.docbook:856
+msgid "Create a new class in your source directory, in the <literal>events</literal> package:"
+msgstr ""
+
+#: index.docbook:861
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "// Imports\n"
+ "\n"
+ "public class EventManagerServlet extends HttpServlet {\n"
+ "\n"
+ " // Servlet code\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:863
+msgid "The servlet handles HTTP <literal>GET</literal> requests only, hence, the method we implement is <literal>doGet()</literal>:"
+msgstr ""
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[protected void doGet(HttpServletRequest request,\n"
+ " HttpServletResponse response)\n"
+ " throws ServletException, IOException {\n"
+ "\n"
+ " SimpleDateFormat dateFormatter = new SimpleDateFormat(\"dd.MM.yyyy\");\n"
+ "\n"
+ " try {\n"
+ " // Begin unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // Process request and render page...\n"
+ "\n"
+ " // End unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().commit();\n"
+ "\n"
+ " } catch (Exception ex) {\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().rollback();\n"
+ " throw new ServletException(ex);\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:870
+msgid "The pattern we are applying here is called <emphasis>session-per-request</emphasis>. When a request hits the servlet, a new Hibernate <literal>Session</literal> is opened through the first call to <literal>getCurrentSession()</literal> on the <literal>SessionFactory</literal>. Then a database transaction is started—all data access as to occur inside a transaction, no matter if data is read or written (we don't use the auto-commit mode in applications)."
+msgstr ""
+
+#: index.docbook:879
+msgid "Do <emphasis>not</emphasis> use a new Hibernate <literal>Session</literal> for every database operation. Use one Hibernate <literal>Session</literal> that is scoped to the whole request. Use <literal>getCurrentSession()</literal>, so that it is automatically bound to the current Java thread."
+msgstr ""
+
+#: index.docbook:886
+msgid "Next, the possible actions of the request are processed and the response HTML is rendered. We'll get to that part soon."
+msgstr ""
+
+#: index.docbook:891
+msgid "Finally, the unit of work ends when processing and rendering is complete. If any problem occured during processing or rendering, an exception will be thrown and the database transaction rolled back. This completes the <literal>session-per-request</literal> pattern. Instead of the transaction demarcation code in every servlet you could also write a servlet filter. See the Hibernate website and Wiki for more information about this pattern, called <emphasis>Open Session in View</emphasis>—you'll need it as soon as you consider rendering your view in JSP, not in a servlet."
+msgstr ""
+
+#: index.docbook:905
+msgid "Processing and rendering"
+msgstr ""
+
+#: index.docbook:907
+msgid "Let's implement the processing of the request and rendering of the page."
+msgstr ""
+
+#: index.docbook:911
+msgid ""
+ "<![CDATA[// Write HTML header\n"
+ "PrintWriter out = response.getWriter();\n"
+ "out.println(\"<html><head><title>Event Manager</title></head><body>\");\n"
+ "\n"
+ "// Handle actions\n"
+ "if ( \"store\".equals(request.getParameter(\"action\")) ) {\n"
+ "\n"
+ " String eventTitle = request.getParameter(\"eventTitle\");\n"
+ " String eventDate = request.getParameter(\"eventDate\");\n"
+ "\n"
+ " if ( \"\".equals(eventTitle) || \"\".equals(eventDate) ) {\n"
+ " out.println(\"<b><i>Please enter event title and date.</i></b>\");\n"
+ " } else {\n"
+ " createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));\n"
+ " out.println(\"<b><i>Added event.</i></b>\");\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "// Print page\n"
+ "printEventForm(out);\n"
+ "listEvents(out, dateFormatter);\n"
+ "\n"
+ "// Write HTML footer\n"
+ "out.println(\"</body></html>\");\n"
+ "out.flush();\n"
+ "out.close();]]>"
+msgstr ""
+
+#: index.docbook:913
+msgid "Granted, this coding style with a mix of Java and HTML would not scale in a more complex application—keep in mind that we are only illustrating basic Hibernate concepts in this tutorial. The code prints an HTML header and a footer. Inside this page, an HTML form for event entry and a list of all events in the database are printed. The first method is trivial and only outputs HTML:"
+msgstr ""
+
+#: index.docbook:922
+msgid ""
+ "<![CDATA[private void printEventForm(PrintWriter out) {\n"
+ " out.println(\"<h2>Add new event:</h2>\");\n"
+ " out.println(\"<form>\");\n"
+ " out.println(\"Title: <input name='eventTitle' length='50'/><br/>\");\n"
+ " out.println(\"Date (e.g. 24.12.2009): <input name='eventDate' length='10'/><br/>\");\n"
+ " out.println(\"<input type='submit' name='action' value='store'/>\");\n"
+ " out.println(\"</form>\");\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:924
+msgid "The <literal>listEvents()</literal> method uses the Hibernate <literal>Session</literal> bound to the current thread to execute a query:"
+msgstr ""
+
+#: index.docbook:930
+msgid ""
+ "<![CDATA[private void listEvents(PrintWriter out, SimpleDateFormat dateFormatter) {\n"
+ "\n"
+ " List result = HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().createCriteria(Event.class).list();\n"
+ " if (result.size() > 0) {\n"
+ " out.println(\"<h2>Events in database:</h2>\");\n"
+ " out.println(\"<table border='1'>\");\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<th>Event title</th>\");\n"
+ " out.println(\"<th>Event date</th>\");\n"
+ " out.println(\"</tr>\");\n"
+ " for (Iterator it = result.iterator(); it.hasNext();) {\n"
+ " Event event = (Event) it.next();\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<td>\" + event.getTitle() + \"</td>\");\n"
+ " out.println(\"<td>\" + dateFormatter.format(event.getDate()) + \"</td>\");\n"
+ " out.println(\"</tr>\");\n"
+ " }\n"
+ " out.println(\"</table>\");\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:932
+msgid "Finally, the <literal>store</literal> action is dispatched to the <literal>createAndStoreEvent()</literal> method, which also uses the <literal>Session</literal> of the current thread:"
+msgstr ""
+
+#: index.docbook:938
+msgid ""
+ "<![CDATA[protected void createAndStoreEvent(String title, Date theDate) {\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().save(theEvent);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:940
+msgid "That's it, the servlet is complete. A request to the servlet will be processed in a single <literal>Session</literal> and <literal>Transaction</literal>. As earlier in the standalone application, Hibernate can automatically bind these ojects to the current thread of execution. This gives you the freedom to layer your code and access the <literal>SessionFactory</literal> in any way you like. Usually you'd use a more sophisticated design and move the data access code into data access objects (the DAO pattern). See the Hibernate Wiki for more examples."
+msgstr ""
+
+#: index.docbook:954
+msgid "Deploying and testing"
+msgstr ""
+
+#: index.docbook:956
+msgid "To deploy this application you have to create a web archive, a WAR. Add the following Ant target to your <literal>build.xml</literal>:"
+msgstr ""
+
+#: index.docbook:961
+msgid ""
+ "<![CDATA[<target name=\"war\" depends=\"compile\">\n"
+ " <war destfile=\"hibernate-tutorial.war\" webxml=\"web.xml\">\n"
+ " <lib dir=\"${librarydir}\">\n"
+ " <exclude name=\"jsdk*.jar\"/>\n"
+ " </lib>\n"
+ "\n"
+ " <classes dir=\"${targetdir}\"/>\n"
+ " </war>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:963
+msgid "This target creates a file called <literal>hibernate-tutorial.war</literal> in your project directory. It packages all libraries and the <literal>web.xml</literal> descriptor, which is expected in the base directory of your project:"
+msgstr ""
+
+#: index.docbook:969
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<web-app version=\"2.4\"\n"
+ " xmlns=\"http://java.sun.com/xml/ns/j2ee\"\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ " xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">\n"
+ "\n"
+ " <servlet>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <servlet-class>events.EventManagerServlet</servlet-class>\n"
+ " </servlet>\n"
+ "\n"
+ " <servlet-mapping>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <url-pattern>/eventmanager</url-pattern>\n"
+ " </servlet-mapping>\n"
+ "</web-app>]]>"
+msgstr ""
+
+#: index.docbook:971
+msgid "Before you compile and deploy the web application, note that an additional library is required: <literal>jsdk.jar</literal>. This is the Java servlet development kit, if you don't have this library already, get it from the Sun website and copy it to your library directory. However, it will be only used for compliation and excluded from the WAR package."
+msgstr ""
+
+#: index.docbook:979
+msgid "To build and deploy call <literal>ant war</literal> in your project directory and copy the <literal>hibernate-tutorial.war</literal> file into your Tomcat <literal>webapp</literal> directory. If you don't have Tomcat installed, download it and follow the installation instructions. You don't have to change any Tomcat configuration to deploy this application though."
+msgstr ""
+
+#: index.docbook:987
+msgid "Once deployed and Tomcat is running, access the application at <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal>. Make sure you watch the Tomcat log to see Hibernate initialize when the first request hits your servlet (the static initializer in <literal>HibernateUtil</literal> is called) and to get the detailed output if any exceptions occurs."
+msgstr ""
+
+#: index.docbook:1000
+msgid "Summary"
+msgstr ""
+
+#: index.docbook:1002
+msgid "This tutorial covered the basics of writing a simple standalone Hibernate application and a small web application."
+msgstr ""
+
+#: index.docbook:1007
+msgid "If you already feel confident with Hibernate, continue browsing through the reference documentation table of contents for topics you find interesting - most asked are transactional processing (<xref linkend=\"transactions\"/>), fetch performance (<xref linkend=\"performance\"/>), or the usage of the API (<xref linkend=\"objectstate\"/>) and the query features (<xref linkend=\"objectstate-querying\"/>)."
+msgstr ""
+
+#: index.docbook:1015
+msgid "Don't forget to check the Hibernate website for more (specialized) tutorials."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/content/xml.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/content/xml.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/content/xml.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,420 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "XML Mapping"
+msgstr "Mapeo XML"
+
+#: index.docbook:7
+msgid "Note that this is an experimental feature in Hibernate 3.0 and is under extremely active development."
+msgstr "Nota que esta es una funcionalidad experimental en Hibernate 3.0 y está bajo un desarrollo extremadamente activo."
+
+#: index.docbook:13
+msgid "Working with XML data"
+msgstr "Trabajando con datos XML"
+
+#: index.docbook:15
+msgid "Hibernate lets you work with persistent XML data in much the same way you work with persistent POJOs. A parsed XML tree can be thought of as just another way to represent the relational data at the object level, instead of POJOs."
+msgstr "Hibernate te permite trabajar con datos XML persistentes en casi la misma forma que trabajas con POJOs persistentes. Un árbol XML analizado (parsed) puede ser pensado como sólo otra forma de representar los datos relacionales a nivel de objetos, en vez de POJOs."
+
+#: index.docbook:22
+msgid "Hibernate supports dom4j as API for manipulating XML trees. You can write queries that retrieve dom4j trees from the database and have any modification you make to the tree automatically synchronized to the database. You can even take an XML document, parse it using dom4j, and write it to the database with any of Hibernate's basic operations: <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> (merging is not yet supported)."
+msgstr "Hibernate soporta dom4j como API para manipular árboles XML. Puedes escribir consultas que traigan árboles dom4j de la base de datos y tener cualquier modificación que hagas al árbol sincronizada automáticamente a la base de datos. Puedes incluso tomar un documento XML, analizarlo usando dom4j, y escribirlo a la base de datos con cualquiera de las operaciones básicas de Hibernate: <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> (la fusión no está aún soportada)."
+
+#: index.docbook:32
+msgid "This feature has many applications including data import/export, externalization of entity data via JMS or SOAP and XSLT-based reporting."
+msgstr "Esta funcionalidad tiene muchas aplicaciones incluyendo la importación/exportación de datos, externalización de datos de entidad vÃa JMS o SOAP y reportes basados en XSLT."
+
+#: index.docbook:37
+msgid "A single mapping may be used to simultaneously map properties of a class and nodes of an XML document to the database, or, if there is no class to map, it may be used to map just the XML."
+msgstr "Un solo mapeo puede ser usado para mapear simultáneamente las propiedades de una clase y los nodos de un documento XML a la base de datos, o, si no hay ninguna clase a mapear, puede ser usado para mapear sólo el XML."
+
+#: index.docbook:44
+msgid "Specifying XML and class mapping together"
+msgstr "Especificando los mapeos de XML y de clase juntos"
+
+#: index.docbook:46
+msgid "Here is an example of mapping a POJO and XML simultaneously:"
+msgstr "He aquà un ejemplo de mapear un POJO y XML simultáneamente:"
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<class name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"accountId\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <many-to-one name=\"customer\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"accountId\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <many-to-one name=\"customer\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:54
+msgid "Specifying only an XML mapping"
+msgstr "Especificando sólo un mapeo XML"
+
+#: index.docbook:56
+msgid "Here is an example where there is no POJO class:"
+msgstr "He aquà un ejemplo donde no hay ninguna clase POJO:"
+
+#: index.docbook:60
+msgid ""
+ "<![CDATA[<class entity-name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\" \n"
+ " type=\"string\"/>\n"
+ " \n"
+ " <many-to-one name=\"customerId\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\" \n"
+ " entity-name=\"Customer\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\" \n"
+ " type=\"big_decimal\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class entity-name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\" \n"
+ " type=\"string\"/>\n"
+ " \n"
+ " <many-to-one name=\"customerId\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\" \n"
+ " entity-name=\"Customer\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\" \n"
+ " type=\"big_decimal\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:62
+msgid "This mapping allows you to access the data as a dom4j tree, or as a graph of property name/value pairs (java <literal>Map</literal>s). The property names are purely logical constructs that may be referred to in HQL queries."
+msgstr "Este mapeo te permite acceder a los datos como un árbol dom4j, o como un grafo de pares nombre/valor de propiedad (<literal>Map</literal>s de Java). Los nombres de propiedades son construcciones puramente lógicas a las que se puede hacer referencia en consultas HQL."
+
+#: index.docbook:73
+msgid "XML mapping metadata"
+msgstr "Mapeo de metadatos XML"
+
+#: index.docbook:75
+msgid "Many Hibernate mapping elements accept the <literal>node</literal> attribute. This let's you specify the name of an XML attribute or element that holds the property or entity data. The format of the <literal>node</literal> attribute must be one of the following:"
+msgstr "Muchos elementos de mapeo de Hibernate aceptan el atributo <literal>node</literal>. Esto te permite espcificar el nombre de un atributo o elemento XML que contenga los datos de la propiedad o entidad. El formato del atributo <literal>node</literal> debe ser uno de los siguientes:"
+
+#: index.docbook:84
+msgid "<literal>\"element-name\"</literal> - map to the named XML element"
+msgstr "<literal>\"element-name\"</literal> - mapea al elemento XML mencionado"
+
+#: index.docbook:87
+msgid "<literal>\"@attribute-name\"</literal> - map to the named XML attribute"
+msgstr "<literal>\"@attribute-name\"</literal> - mapea al atributo XML mencionado"
+
+#: index.docbook:90
+msgid "<literal>\".\"</literal> - map to the parent element"
+msgstr "<literal>\".\"</literal> - mapea al elemento padre"
+
+#: index.docbook:93
+msgid "<literal>\"element-name/@attribute-name\"</literal> - map to the named attribute of the named element"
+msgstr "<literal>\"element-name/@attribute-name\"</literal> - mapea al atributo mencionado del elemento mencionado"
+
+#: index.docbook:100
+msgid "For collections and single valued associations, there is an additional <literal>embed-xml</literal> attribute. If <literal>embed-xml=\"true\"</literal>, the default, the XML tree for the associated entity (or collection of value type) will be embedded directly in the XML tree for the entity that owns the association. Otherwise, if <literal>embed-xml=\"false\"</literal>, then only the referenced identifier value will appear in the XML for single point associations and collections will simply not appear at all."
+msgstr "Para las colecciones y asociaciones monovaluadas, existe un atributo adicional <literal>embed-xml</literal>. Si <literal>embed-xml=\"true\"</literal>, que es el valor por defecto, el árbol XML para la entidad asociada (o colección de tipo de valor) será embebida directamente en el árbol XML para la entidad que posee la asociación. En otro caso, si <literal>embed-xml=\"false\"</literal>, sólo el valor identificador referenciado aparecerá en el XML para asociaciones de punto único y para las colecciones simplemente no aparecerá en absoluto."
+
+#: index.docbook:110
+msgid "You should be careful not to leave <literal>embed-xml=\"true\"</literal> for too many associations, since XML does not deal well with circularity!"
+msgstr "¡Debes ser cuidadoso de no dejar <literal>embed-xml=\"true\"</literal> para demasiadas asociaciones, ya que XML no trata bien la circularidad!"
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Customer\" \n"
+ " table=\"CUSTOMER\" \n"
+ " node=\"customer\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"CUST_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <map name=\"accounts\" \n"
+ " node=\".\" \n"
+ " embed-xml=\"true\">\n"
+ " <key column=\"CUSTOMER_ID\" \n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"SHORT_DESC\" \n"
+ " node=\"@short-desc\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many entity-name=\"Account\"\n"
+ " embed-xml=\"false\" \n"
+ " node=\"account\"/>\n"
+ " </map>\n"
+ " \n"
+ " <component name=\"name\" \n"
+ " node=\"name\">\n"
+ " <property name=\"firstName\" \n"
+ " node=\"first-name\"/>\n"
+ " <property name=\"initial\" \n"
+ " node=\"initial\"/>\n"
+ " <property name=\"lastName\" \n"
+ " node=\"last-name\"/>\n"
+ " </component>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\" \n"
+ " table=\"CUSTOMER\" \n"
+ " node=\"customer\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"CUST_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <map name=\"accounts\" \n"
+ " node=\".\" \n"
+ " embed-xml=\"true\">\n"
+ " <key column=\"CUSTOMER_ID\" \n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"SHORT_DESC\" \n"
+ " node=\"@short-desc\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many entity-name=\"Account\"\n"
+ " embed-xml=\"false\" \n"
+ " node=\"account\"/>\n"
+ " </map>\n"
+ " \n"
+ " <component name=\"name\" \n"
+ " node=\"name\">\n"
+ " <property name=\"firstName\" \n"
+ " node=\"first-name\"/>\n"
+ " <property name=\"initial\" \n"
+ " node=\"initial\"/>\n"
+ " <property name=\"lastName\" \n"
+ " node=\"last-name\"/>\n"
+ " </component>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:117
+msgid "in this case, we have decided to embed the collection of account ids, but not the actual account data. The following HQL query:"
+msgstr "en este caso, hemos decidido embeber la colección de ids de cuenta, pero no los datos reales de cuenta. La siguiente consulta HQL:"
+
+#: index.docbook:122
+msgid "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
+msgstr "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
+
+#: index.docbook:124
+msgid "Would return datasets such as this:"
+msgstr "devolverÃa conjuntos de datos como estos:"
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account short-desc=\"Savings\">987632567</account>\n"
+ " <account short-desc=\"Credit Card\">985612323</account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account short-desc=\"Savings\">987632567</account>\n"
+ " <account short-desc=\"Credit Card\">985612323</account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+
+#: index.docbook:130
+msgid "If you set <literal>embed-xml=\"true\"</literal> on the <literal><one-to-many></literal> mapping, the data might look more like this:"
+msgstr "Si estableces <literal>embed-xml=\"true\"</literal> en el mapeo <literal><one-to-many></literal>, los datos podrÃan verse asÃ:"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account id=\"987632567\" short-desc=\"Savings\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>100.29</balance>\n"
+ " </account>\n"
+ " <account id=\"985612323\" short-desc=\"Credit Card\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>-2370.34</balance>\n"
+ " </account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account id=\"987632567\" short-desc=\"Savings\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>100.29</balance>\n"
+ " </account>\n"
+ " <account id=\"985612323\" short-desc=\"Credit Card\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>-2370.34</balance>\n"
+ " </account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+
+#: index.docbook:141
+msgid "Manipulating XML data"
+msgstr "Manipulando datos XML"
+
+#: index.docbook:143
+msgid "Let's rearead and update XML documents in the application. We do this by obtaining a dom4j session:"
+msgstr "Vamos a releer y actualizar documentos XML en la aplicación. Hacemos esto obteniendo una sesión dom4j:"
+
+#: index.docbook:148
+msgid ""
+ "<![CDATA[Document doc = ....;\n"
+ " \n"
+ "Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "List results = dom4jSession\n"
+ " .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")\n"
+ " .list();\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " //add the customer data to the XML document\n"
+ " Element customer = (Element) results.get(i);\n"
+ " doc.add(customer);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Document doc = ....;\n"
+ " \n"
+ "Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "List results = dom4jSession\n"
+ " .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")\n"
+ " .list();\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " //add the customer data to the XML document\n"
+ " Element customer = (Element) results.get(i);\n"
+ " doc.add(customer);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " Element customer = (Element) results.get(i);\n"
+ " //change the customer name in the XML and database\n"
+ " Element name = customer.element(\"name\");\n"
+ " name.element(\"first-name\").setText(firstName);\n"
+ " name.element(\"initial\").setText(initial);\n"
+ " name.element(\"last-name\").setText(lastName);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " Element customer = (Element) results.get(i);\n"
+ " //change the customer name in the XML and database\n"
+ " Element name = customer.element(\"name\");\n"
+ " name.element(\"first-name\").setText(firstName);\n"
+ " name.element(\"initial\").setText(initial);\n"
+ " name.element(\"last-name\").setText(lastName);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:152
+msgid "It is extremely useful to combine this feature with Hibernate's <literal>replicate()</literal> operation to implement XML-based data import/export."
+msgstr "Es extremadamente útil combinar esta funcionalidad con la operación <literal>replicate()</literal> de Hibernate para implementar la importación/exportación de datos basada en XML."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/es-ES/legal_notice.po
===================================================================
--- core/trunk/documentation/manual/translations/es-ES/legal_notice.po (rev 0)
+++ core/trunk/documentation/manual/translations/es-ES/legal_notice.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,48 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Legal Notice"
+msgstr "Legal Notice"
+
+#: index.docbook:22
+msgid "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+msgstr "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+
+#: index.docbook:31
+msgid "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+msgstr "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+
+#: index.docbook:34
+msgid "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+msgstr "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+
+#: index.docbook:37
+msgid "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+msgstr "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+
+#: index.docbook:40
+msgid "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+msgstr "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+
+#: index.docbook:43
+msgid "All other trademarks referenced herein are the property of their respective owners."
+msgstr "All other trademarks referenced herein are the property of their respective owners."
+
+#: index.docbook:46
+msgid "The GPG fingerprint of the security at redhat.com key is:"
+msgstr "The GPG fingerprint of the security at redhat.com key is:"
+
+#: index.docbook:49
+msgid "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+msgstr "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/Hibernate_Reference.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/Hibernate_Reference.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/Hibernate_Reference.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,24 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:26
+msgid "HIBERNATE - Relational Persistence for Idiomatic Java"
+msgstr "HIBERNATE - Persistance relationnelle en Java standard"
+
+#: index.docbook:27
+msgid "Hibernate Reference Documentation"
+msgstr "Documentation de référence d'Hibernate"
+
+#: index.docbook:41
+msgid "©rightHolder;"
+msgstr "©rightHolder;"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/architecture.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/architecture.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/architecture.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,216 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Architecture"
+msgstr "Architecture"
+
+#: index.docbook:24
+msgid "Overview"
+msgstr "Généralités"
+
+#: index.docbook:26
+msgid "A (very) high-level view of the Hibernate architecture:"
+msgstr "Voici une vue (très) haut niveau de l'architecture d'Hibernate :"
+
+#: index.docbook:39
+msgid "This diagram shows Hibernate using the database and configuration data to provide persistence services (and persistent objects) to the application."
+msgstr "Ce diagramme montre Hibernate utilisant une base de données et des données de configuration pour fournir un service de persistance (et des objets persistants) à l'application."
+
+#: index.docbook:44
+msgid "We would like to show a more detailed view of the runtime architecture. Unfortunately, Hibernate is flexible and supports several approaches. We will show the two extremes. The \"lite\" architecture has the application provide its own JDBC connections and manage its own transactions. This approach uses a minimal subset of Hibernate's APIs:"
+msgstr "Nous aimerions décrire une vue plus détaillée de l'architecture. Malheureusement, Hibernate est flexible et supporte différentes approches. Nous allons en montrer les deux extrêmes. L'architecture légère laisse l'application fournir ses propres connexions JDBC et gérer ses propres transactions. Cette approche utilise le minimum des APIs Hibernate :"
+
+#: index.docbook:61
+msgid "The \"full cream\" architecture abstracts the application away from the underlying JDBC/JTA APIs and lets Hibernate take care of the details."
+msgstr "L'architecture la plus complète abstrait l'application des APIs JDBC/JTA sous-jacentes et laisse Hibernate s'occuper des détails."
+
+#: index.docbook:75
+msgid "Heres some definitions of the objects in the diagrams:"
+msgstr "Voici quelques définitions des objets des diagrammes :"
+
+#: index.docbook:80
+msgid "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+msgstr "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+
+#: index.docbook:82
+msgid "A threadsafe (immutable) cache of compiled mappings for a single database. A factory for <literal>Session</literal> and a client of <literal>ConnectionProvider</literal>. Might hold an optional (second-level) cache of data that is reusable between transactions, at a process- or cluster-level."
+msgstr "Un cache threadsafe (immuable) des mappings vers une (et une seule) base de données. Une factory (fabrique) de <literal>Session</literal> et un client de <literal>ConnectionProvider</literal>. Peut contenir un cache optionnel de données (de second niveau) qui est réutilisable entre les différentes transactions que cela soit au sein du même processus (JVLM) ou par plusieurs nÅuds d'un cluster."
+
+#: index.docbook:92
+msgid "Session (<literal>org.hibernate.Session</literal>)"
+msgstr "Session (<literal>org.hibernate.Session</literal>)"
+
+#: index.docbook:94
+msgid "A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC connection. Factory for <literal>Transaction</literal>. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier."
+msgstr "Un objet mono-threadé, à durée de vie courte, qui représente une conversation entre l'application et l'entrepôt de persistance. Encapsule une connexion JDBC. Factory (fabrique) des objets <literal>Transaction</literal>. Contient un cache (de premier niveau) des objets persistants, ce cache est obligatoire. Il est utilisé lors de la navigation dans le graphe d'objets ou lors de la récupération d'objets par leur identifiant."
+
+#: index.docbook:104
+msgid "Persistent objects and collections"
+msgstr "Objets et Collections persistants"
+
+#: index.docbook:106
+msgid "Short-lived, single threaded objects containing persistent state and business function. These might be ordinary JavaBeans/POJOs, the only special thing about them is that they are currently associated with (exactly one) <literal>Session</literal>. As soon as the <literal>Session</literal> is closed, they will be detached and free to use in any application layer (e.g. directly as data transfer objects to and from presentation)."
+msgstr "Objets mono-threadés à vie courte contenant l'état de persistance et la fonction métier. Ceux-ci sont en général les objets de type JavaBean (ou POJOs) ; la seule particularité est qu'ils sont associés avec une (et une seule) <literal>Session</literal>. Dès que la <literal>Session</literal> est fermée, ils seront détachés et libres d'être utilisés par n'importe laquelle des couches de l'application (ie. de et vers la présentation en tant que Data Transfer Objects - DTO : objet de transfert de données)."
+
+#: index.docbook:117
+msgid "Transient and detached objects and collections"
+msgstr "Objets et collections transients"
+
+#: index.docbook:119
+msgid "Instances of persistent classes that are not currently associated with a <literal>Session</literal>. They may have been instantiated by the application and not (yet) persisted or they may have been instantiated by a closed <literal>Session</literal>."
+msgstr "Instances de classes persistantes qui ne sont actuellement pas associées à une <literal>Session</literal>. Elles ont pu être instanciées par l'application et ne pas avoir (encore) été persistées ou elle ont pu être instanciées par une <literal>Session</literal> fermée."
+
+#: index.docbook:128
+msgid "Transaction (<literal>org.hibernate.Transaction</literal>)"
+msgstr "Transaction (<literal>org.hibernate.Transaction</literal>)"
+
+#: index.docbook:130
+msgid "(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. Abstracts application from underlying JDBC, JTA or CORBA transaction. A <literal>Session</literal> might span several <literal>Transaction</literal>s in some cases. However, transaction demarcation, either using the underlying API or <literal>Transaction</literal>, is never optional!"
+msgstr "(Optionnel) Un objet mono-threadé à vie courte utilisé par l'application pour définir une unité de travail atomique. Abstrait l'application des transactions sous-jacentes qu'elles soient JDBC, JTA ou CORBA. Une <literal>Session</literal> peut fournir plusieurs <literal>Transaction</literal>s dans certains cas. Toutefois, la délimitation des transactions, via l'API d'Hibernate ou par la <literal>Transaction</literal> sous-jacente, n'est jamais optionnelle!"
+
+#: index.docbook:141
+msgid "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+msgstr "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+
+#: index.docbook:143
+msgid "(Optional) A factory for (and pool of) JDBC connections. Abstracts application from underlying <literal>Datasource</literal> or <literal>DriverManager</literal>. Not exposed to application, but can be extended/implemented by the developer."
+msgstr "(Optionnel) Une fabrique de (pool de) connexions JDBC. Abstrait l'application de la <literal>Datasource</literal> ou du <literal>DriverManager</literal> sous-jacent. Non exposé à l'application, mais peut être étendu/implémenté par le développeur."
+
+#: index.docbook:151
+msgid "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+msgstr "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+
+#: index.docbook:153
+msgid "(Optional) A factory for <literal>Transaction</literal> instances. Not exposed to the application, but can be extended/implemented by the developer."
+msgstr "(Optionnel) Une fabrique d'instances de <literal>Transaction</literal>. Non exposé à l'application, mais peut être étendu/implémenté par le développeur."
+
+#: index.docbook:160
+msgid "Extension Interfaces"
+msgstr "Interfaces d'extension"
+
+#: index.docbook:162
+msgid "Hibernate offers many optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details."
+msgstr "Hibernate fournit de nombreuses interfaces d'extensions optionnelles que vous pouvez implémenter pour personnaliser le comportement de votre couche de persistance. Reportez vous à la documentation de l'API pour plus de détails."
+
+#: index.docbook:171
+msgid "Given a \"lite\" architecture, the application bypasses the <literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or <literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly."
+msgstr "Dans une architecture légère, l'application n'aura pas à utiliser les APIs <literal>Transaction</literal>/<literal>TransactionFactory</literal> et/ou n'utilisera pas les APIs <literal>ConnectionProvider</literal> pour utiliser JTA ou JDBC."
+
+#: index.docbook:179
+msgid "Instance states"
+msgstr "Etats des instances"
+
+#: index.docbook:180
+msgid "An instance of a persistent classes may be in one of three different states, which are defined with respect to a <emphasis>persistence context</emphasis>. The Hibernate <literal>Session</literal> object is the persistence context:"
+msgstr "Une instance d'une classe persistante peut être dans l'un des trois états suivants, définis par rapport à un <emphasis>contexte de persistance</emphasis>. L'objet <literal>Session</literal> d'hibernate correspond à ce concept de contexte de persistance :"
+
+#: index.docbook:188
+msgid "transient"
+msgstr "passager (transient)"
+
+#: index.docbook:190
+msgid "The instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value)."
+msgstr "L'instance n'est pas et n'a jamais été associée à un contexte de persistance. Elle ne possède pas d'identité persistante (valeur de clé primaire)"
+
+#: index.docbook:198
+msgid "persistent"
+msgstr "persistant"
+
+#: index.docbook:200
+msgid "The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, Hibernate <emphasis>guarantees</emphasis> that persistent identity is equivalent to Java identity (in-memory location of the object)."
+msgstr "L'instance est associée au contexte de persistance. Elle possède une identité persistante (valeur de clé primaire) et, peut-être, un enregistrement correspondant dans la base. Pour un contexte de persistance particulier, Hibernate <emphasis>garantit</emphasis> que l'identité persistante est équivalente à l'identité Java (emplacement mémoire de l'objet)"
+
+#: index.docbook:212
+msgid "detached"
+msgstr "détaché"
+
+#: index.docbook:214
+msgid "The instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corrsponding row in the database. For detached instances, Hibernate makes no guarantees about the relationship between persistent identity and Java identity."
+msgstr "L'instance a été associée au contexte de persistance mais ce contexte a été fermé, ou l'instance a été sérialisée vers un autre processus. Elle possède une identité persistante et peut-être un enregistrement correspondant dans la base. Pour des instances détachées, Hibernate ne donne aucune garantie sur la relation entre l'identité persistante et l'identité Java."
+
+#: index.docbook:229
+msgid "JMX Integration"
+msgstr "Intégration JMX"
+
+#: index.docbook:231
+msgid "JMX is the J2EE standard for management of Java components. Hibernate may be managed via a JMX standard service. We provide an MBean implementation in the distribution, <literal>org.hibernate.jmx.HibernateService</literal>."
+msgstr "JMX est le standard J2EE de gestion des composants Java. Hibernate peut être géré via un service JMX standard. Nous fournissons une implémentation d'un MBean dans la distribution : <literal>org.hibernate.jmx.HibernateService</literal>."
+
+#: index.docbook:237
+msgid "For an example how to deploy Hibernate as a JMX service on the JBoss Application Server, please see the JBoss User Guide. On JBoss AS, you also get these benefits if you deploy using JMX:"
+msgstr "Pour avoir un exemple sur la manière de déployer Hibernate en tant que service JMX dans le serveur d'application JBoss Application Server, référez vous au guide utilisateur JBoss (JBoss User Guide). Si vous déployez Hibernate via JMX sur JBoss AS, vous aurez également les bénéfices suivants :"
+
+#: index.docbook:245
+msgid "<emphasis>Session Management:</emphasis> The Hibernate <literal>Session</literal>'s life cycle can be automatically bound to the scope of a JTA transaction. This means you no longer have to manually open and close the <literal>Session</literal>, this becomes the job of a JBoss EJB interceptor. You also don't have to worry about transaction demarcation in your code anymore (unless you'd like to write a portable persistence layer of course, use the optional Hibernate <literal>Transaction</literal> API for this). You call the <literal>HibernateContext</literal> to access a <literal>Session</literal>."
+msgstr "<emphasis>Gestion de la session :</emphasis> Le cycle de vie de la <literal>Session</literal> Hibernate peut être automatiquement limitée à la portée d'une transaction JTA. Cela signifie que vous n'avez plus besoin d'ouvrir et de fermer la <literal>Session</literal> manuellement, cela devient le travail de l'intercepteur EJB de JBoss. Vous n'avez pas non plus à vous occuper des démarcations des transactions dans votre code (sauf si vous voulez écrire une couche de persistance qui soit portable, dans ce cas vous pouvez utiliser l'API optionnelle <literal>Transaction</literal> d'Hibernate). Vous appelez l'<literal>HibernateContext</literal> pour accéder à la <literal>Session</literal>."
+
+#: index.docbook:257
+msgid "<emphasis>HAR deployment:</emphasis> Usually you deploy the Hibernate JMX service using a JBoss service deployment descriptor (in an EAR and/or SAR file), it supports all the usual configuration options of a Hibernate <literal>SessionFactory</literal>. However, you still have to name all your mapping files in the deployment descriptor. If you decide to use the optional HAR deployment, JBoss will automatically detect all mapping files in your HAR file."
+msgstr "<emphasis>Déploiement HAR :</emphasis> Habituellement vous déployez le service JMX Hibernate en utilisant le descripteur de déploiement de JBoss (dans un fichier EAR et/ou un SAR), il supporte toutes les options de configuration usuelles d'une <literal>SessionFactory</literal> Hibernate. Cependant, vous devez toujours nommer tous vos fichiers de mapping dans le descripteur de déploiement. Si vous décidez d'utiliser le déploiement optionnel sous forme de HAR, JBoss détectera automatiquement tous vos fichiers de mapping dans votre fichier HAR."
+
+#: index.docbook:268
+msgid "Consult the JBoss AS user guide for more information about these options."
+msgstr "Consultez le guide d'utilisation de JBoss AS pour plus d'informations sur ces options."
+
+#: index.docbook:272
+msgid "Another feature available as a JMX service are runtime Hibernate statistics. See <xref linkend=\"configuration-optional-statistics\"/>."
+msgstr "Les statistiques pendant l'exécution d'Hibernate (au runtime) sont une autre fonctionnalité disponible en tant que service JMX. Voyez pour cela <xref linkend=\"configuration-optional-statistics\"/>."
+
+#: index.docbook:279
+msgid "JCA Support"
+msgstr "Support JCA"
+
+#: index.docbook:280
+msgid "Hibernate may also be configured as a JCA connector. Please see the website for more details. Please note that Hibernate JCA support is still considered experimental."
+msgstr "Hibernate peut aussi être configuré en tant que connecteur JCA. Référez-vous au site web pour de plus amples détails. Il est important de noter que le support JCA d'Hibernate est encore considéré comme expérimental."
+
+#: index.docbook:287
+msgid "Contextual Sessions"
+msgstr "Sessions Contextuelles"
+
+#: index.docbook:288
+msgid "Most applications using Hibernate need some form of \"contextual\" sessions, where a given session is in effect throughout the scope of a given context. However, across applications the definition of what constitutes a context is typically different; and different contexts define different scopes to the notion of current. Applications using Hibernate prior to version 3.0 tended to utilize either home-grown <literal>ThreadLocal</literal>-based contextual sessions, helper classes such as <literal>HibernateUtil</literal>, or utilized third-party frameworks (such as Spring or Pico) which provided proxy/interception-based contextual sessions."
+msgstr "Certaines applications utilisant Hibernate ont besoin d'une sorte de session \"contextuelle\", où une session est liée à la portée d'un contexte particulier. Cependant, les applications ne définissent pas toutes la notion de contexte de la même manière, et différents contextes définissent différentes portées à la notion de \"courant\". Les applications à base d'Hibernate, versions précédentes à la 3.0 utilisaient généralement un principe maison de sessions contextuelles basées sur le <literal>ThreadLocal</literal>, ainsi que sur des classes utilitaires comme <literal>HibernateUtil</literal>, ou utilisaient des framework tiers (comme Spring ou Pico) qui fournissaient des sessions contextuelles basées sur l'utilisation de proxy/interception."
+
+#: index.docbook:297
+msgid "Starting with version 3.0.1, Hibernate added the <literal>SessionFactory.getCurrentSession()</literal> method. Initially, this assumed usage of <literal>JTA</literal> transactions, where the <literal>JTA</literal> transaction defined both the scope and context of a current session. The Hibernate team maintains that, given the maturity of the numerous stand-alone <literal>JTA TransactionManager</literal> implementations out there, most (if not all) applications should be using <literal>JTA</literal> transaction management whether or not they are deployed into a <literal>J2EE</literal> container. Based on that, the <literal>JTA</literal>-based contextual sessions is all you should ever need to use."
+msgstr "A partir de la version 3.0.1, Hibernate a ajouté la méthode <literal>SessionFactory.getCurrentSession()</literal>. Initialement, cela demandait l'usage de transactions <literal>JTA</literal>, où la transaction <literal>JTA</literal> définissait la portée et le contexte de la session courante. L'équipe Hibernate pense que, étant donnée la maturité des implémentations de <literal>JTA TransactionManager</literal> , la plupart (sinon toutes) des applications devraient utiliser la gestion des transactions par <literal>JTA</literal> qu'elles soient ou non déployées dans un conteneur <literal>J2EE</literal>. Par conséquent, vous devriez toujours contextualiser vos sessions, si vous en avez besoin, via la méthode basée sur JTA."
+
+#: index.docbook:307
+msgid "However, as of version 3.1, the processing behind <literal>SessionFactory.getCurrentSession()</literal> is now pluggable. To that end, a new extension interface (<literal>org.hibernate.context.CurrentSessionContext</literal>) and a new configuration parameter (<literal>hibernate.current_session_context_class</literal>) have been added to allow pluggability of the scope and context of defining current sessions."
+msgstr "Cependant, depuis la version 3.1, la logique derrière <literal>SessionFactory.getCurrentSession()</literal> est désormais branchable. A cette fin, une nouvelle interface d'extension (<literal>org.hibernate.context.CurrentSessionContext</literal>) et un nouveau paramètre de configuration (<literal>hibernate.current_session_context_class</literal>) ont été ajoutés pour permettre de configurer d'autres moyens de définir la portée et le contexte des sessions courantes."
+
+#: index.docbook:314
+msgid "See the Javadocs for the <literal>org.hibernate.context.CurrentSessionContext</literal> interface for a detailed discussion of its contract. It defines a single method, <literal>currentSession()</literal>, by which the implementation is responsible for tracking the current contextual session. Out-of-the-box, Hibernate comes with three implementations of this interface."
+msgstr "Allez voir les Javadocs de l'interface <literal>org.hibernate.context.CurrentSessionContext</literal> pour une description détaillée de son contrat. Elle définit une seule méthode, <literal>currentSession()</literal>, depuis laquelle l'implémentation est responsable de traquer la session courante du contexte. Hibernate fournit deux implémentation de cette interface."
+
+#: index.docbook:324
+msgid "<literal>org.hibernate.context.JTASessionContext</literal> - current sessions are tracked and scoped by a <literal>JTA</literal> transaction. The processing here is exactly the same as in the older JTA-only approach. See the Javadocs for details."
+msgstr "<literal>org.hibernate.context.JTASessionContext</literal> - les sessions courantes sont associées à une transaction <literal>JTA</literal>. La logique est la même que l'ancienne approche basée sur JTA. Voir les javadocs pour les détails."
+
+#: index.docbook:332
+msgid "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - current sessions are tracked by thread of execution. Again, see the Javadocs for details."
+msgstr "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - les sessions courantes sont associées au thread d'exécution. Voir les javadocs pour les détails."
+
+#: index.docbook:338
+msgid "<literal>org.hibernate.context.ManagedSessionContext</literal> - current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a <literal>Session</literal> instance with static methods on this class, it does never open, flush, or close a <literal>Session</literal>."
+msgstr "Les deux implémentations fournissent un modèle de programmation de type \"une session - une transaction à la base de données\", aussi connu sous le nom de <emphasis>session-per-request</emphasis>. Le début et la fin d'une session Hibernate sont définis par la durée d'une transaction de base de données. Si vous utilisez une démarcation programmatique de la transaction (par exemple sous J2SE ou JTA/UserTransaction/BMT), nous vous conseillons d'utiliser l'API Hibernate <literal>Transaction</literal> pour masquer le système de transaction utilisé. Si vous exécutez sous un conteneur EJB qui supporte CMT, vous n'avez besoin d'aucune opérations de démarcations de session ou transaction dans votre code puisque tout est géré de manière déclarative. Référez vous à <xref linkend=\"transactions\"/> pour plus d'informations et des exemples de code."
+
+#: index.docbook:347
+msgid "The first two implementations provide a \"one session - one database transaction\" programming model, also known and used as <emphasis>session-per-request</emphasis>. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programatic transaction demarcation in plain JSE without JTA, you are adviced to use the Hibernate <literal>Transaction</literal> API to hide the underlying transaction system from your code. If you use JTA, use the JTA interfaces to demarcate transactions. If you execute in an EJB container that supports CMT, transaction boundaries are defined declaratively and you don't need any transaction or session demarcation operations in your code. Refer to <xref linkend=\"transactions\"/> for more information and code examples."
+msgstr "Le paramètre de configuration <literal>hibernate.current_session_context_class</literal> définit quelle implémentation de <literal>org.hibernate.context.CurrentSessionContext</literal> doit être utilisée. Notez que pour assurer la compatibilité avec les versions précédentes, si ce paramètre n'est pas défini mais qu'un <literal>org.hibernate.transaction.TransactionManagerLookup</literal> est configuré, Hibernate utilisera le <literal>org.hibernate.context.JTASessionContext</literal>. La valeur de ce paramètre devrait juste nommer la classe d'implémentation à utiliser, pour les deux implémentations fournies, il y a cependant deux alias correspondant: \"jta\" et \"thread\"."
+
+#: index.docbook:359
+msgid "The <literal>hibernate.current_session_context_class</literal> configuration parameter defines which <literal>org.hibernate.context.CurrentSessionContext</literal> implementation should be used. Note that for backwards compatibility, if this config param is not set but a <literal>org.hibernate.transaction.TransactionManagerLookup</literal> is configured, Hibernate will use the <literal>org.hibernate.context.JTASessionContext</literal>. Typically, the value of this parameter would just name the implementation class to use; for the three out-of-the-box implementations, however, there are three corresponding short names, \"jta\", \"thread\", and \"managed\"."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/association_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/association_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/association_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,970 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:6
+msgid "Association Mappings"
+msgstr "Mapper les associations"
+
+#: index.docbook:9
+msgid "Introduction"
+msgstr "Introduction"
+
+#: index.docbook:11
+msgid "Association mappings are the often most difficult thing to get right. In this section we'll go through the canonical cases one by one, starting with unidirectional mappings, and then considering the bidirectional cases. We'll use <literal>Person</literal> and <literal>Address</literal> in all the examples."
+msgstr "Correctement mapper les associations est souvent la tâche la plus difficile. Dans cette section nous traiterons les cas classiques les uns après les autres. Nous commencerons d'abbord par les mappings unidirectionnels, puis nous aborderons la question des mappings bidirectionnels. Nous illustrerons tous nos exemples avec les classes <literal>Person</literal> et <literal>Address</literal>."
+
+#: index.docbook:19
+msgid "We'll classify associations by whether or not they map to an intervening join table, and by multiplicity."
+msgstr "Nous utiliserons deux critères pour classer les associations : le premier sera de savoir si l'association est bâti sur une table supplémentaire d'association et le deuxieme sera basé sur la multiplicité de cette association."
+
+#: index.docbook:24
+msgid "Nullable foreign keys are not considered good practice in traditional data modelling, so all our examples use not null foreign keys. This is not a requirement of Hibernate, and the mappings will all work if you drop the nullability constraints."
+msgstr "Autoriser une clé étrangère nulle est considéré comme un mauvais choix dans la construction d'un modèle de données. Nous supposerons donc que dans tous les exemples qui vont suivre on aura interdit la valeur nulle pour les clés étrangères. Attention, ceci ne veut pas dire que Hibernate ne supporte pas les clés étrangères pouvant prendre des valeurs nulles, les exemples qui suivent continueront de fonctionner si vous décidiez ne plus imposer la contrainte de non-nullité sur les clés étrangères."
+
+#: index.docbook:34
+msgid "Unidirectional associations"
+msgstr "Association unidirectionnelle"
+
+#: index.docbook:37, index.docbook:108
+msgid "many to one"
+msgstr "plusieurs à un"
+
+#: index.docbook:39
+msgid "A <emphasis>unidirectional many-to-one association</emphasis> is the most common kind of unidirectional association."
+msgstr "Une <emphasis>association plusieurs-Ã -un (many-to-one) unidirectionnelle </emphasis> est le type que l'on rencontre le plus souvent dans les associations unidirectionnelles."
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:45, index.docbook:161
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:50, index.docbook:121, index.docbook:185, index.docbook:225
+msgid "one to one"
+msgstr "un à un"
+
+#: index.docbook:52
+msgid "A <emphasis>unidirectional one-to-one association on a foreign key</emphasis> is almost identical. The only difference is the column unique constraint."
+msgstr "une <emphasis>association un-à -un (one-to-one) sur une clé étrangère</emphasis> est presque identique. La seule différence est sur la contrainte d'unicité que l'on impose à cette colonne."
+
+#: index.docbook:57
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:58, index.docbook:193
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:60
+msgid "A <emphasis>unidirectional one-to-one association on a primary key</emphasis> usually uses a special id generator. (Notice that we've reversed the direction of the association in this example.)"
+msgstr "Une <emphasis>association un-à -un (one-to-one) unidirectionnelle sur une clé primaire</emphasis> utilise un générateur d'identifiant particulier. (Remarquez que nous avons inversé le sens de cette association dans cet exemple.)"
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:67, index.docbook:201
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( personId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( personId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:72, index.docbook:94
+msgid "one to many"
+msgstr "un à plusieurs"
+
+#: index.docbook:74
+msgid "A <emphasis>unidirectional one-to-many association on a foreign key</emphasis> is a very unusual case, and is not really recommended."
+msgstr "Une <emphasis>association un-à -plusieurs (one-to-many) unidirectionnelle sur une clé étrangère</emphasis> est vraiment inhabituelle, et n'est pas vraiment recommandée."
+
+#: index.docbook:79
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\">\n"
+ " <key column=\"personId\" \n"
+ " not-null=\"true\"/>\n"
+ " <one-to-many class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\">\n"
+ " <key column=\"personId\" \n"
+ " not-null=\"true\"/>\n"
+ " <one-to-many class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:80
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key, personId bigint not null )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key, personId bigint not null )\n"
+ " ]]>"
+
+#: index.docbook:82
+msgid "We think it's better to use a join table for this kind of association."
+msgstr "Nous pensons qu'il est préférable d'utiliser une table de jointure pour ce type d'association."
+
+#: index.docbook:91
+msgid "Unidirectional associations with join tables"
+msgstr "Associations unidirectionnelles avec tables de jointure"
+
+#: index.docbook:96
+msgid "A <emphasis>unidirectional one-to-many association on a join table</emphasis> is much preferred. Notice that by specifying <literal>unique=\"true\"</literal>, we have changed the multiplicity from many-to-many to one-to-many."
+msgstr "Une <emphasis>association unidirectionnelle un-à -plusieurs (one-to-many) avec une table de jointure</emphasis> est un bien meilleur choix. Remarquez qu'en spécifiant <literal>unique=\"true\"</literal>, on a changé la multiplicité plusieurs-à -plusieurs (many-to-many) pour un-à -plusieurs (one-to-many)."
+
+#: index.docbook:102
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:103
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:110
+msgid "A <emphasis>unidirectional many-to-one association on a join table</emphasis> is quite common when the association is optional."
+msgstr "Une <emphasis>assiociation plusieurs-à -un (many-to-one) unidirectionnelle sur une table de jointure</emphasis> est très fréquente quand l'association est optionnelle."
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:116
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:123
+msgid "A <emphasis>unidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr "Une <emphasis>association unidirectionnelle un-à -un (one-to-one) sur une table de jointure</emphasis> est extrèmement rare mais envisageable."
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:129, index.docbook:233
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:134, index.docbook:238
+msgid "many to many"
+msgstr "plusieurs à plusieurs"
+
+#: index.docbook:136
+msgid "Finally, we have a <emphasis>unidirectional many-to-many association</emphasis>."
+msgstr "Finallement, nous avons <emphasis>l'association unidirectionnelle plusieurs-Ã -plusieurs (many-to-many)</emphasis>."
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:141, index.docbook:246
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:148
+msgid "Bidirectional associations"
+msgstr "Associations bidirectionnelles"
+
+#: index.docbook:151, index.docbook:211
+msgid "one to many / many to one"
+msgstr "un à plusieurs / plusieurs à un"
+
+#: index.docbook:153
+msgid "A <emphasis>bidirectional many-to-one association</emphasis> is the most common kind of association. (This is the standard parent/child relationship.)"
+msgstr "Une <emphasis>association bidirectionnelle plusieurs à un (many-to-one)</emphasis> est le type d'association que l'on rencontre le plus souvent. (c'est la façon standard de créer des relations parents/enfants.)"
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:163
+msgid "If you use a <literal>List</literal> (or other indexed collection) you need to set the <literal>key</literal> column of the foreign key to <literal>not null</literal>, and let Hibernate manage the association from the collections side to maintain the index of each element (making the other side virtually inverse by setting <literal>update=\"false\"</literal> and <literal>insert=\"false\"</literal>):"
+msgstr "Si vous utilisez une <literal>List</literal> (ou toute autre collection indexée) vous devez paramétrer la colonne <literal>key</literal> de la clé étrangère à <literal>not null</literal>, et laisser Hibernate gérer l'association depuis l'extrémité collection pour maintenir l'index de chaque élément (rendant l'autre extrémité virtuellement inverse en paramétrant <literal>update=\"false\"</literal> et <literal>insert=\"false\"</literal>):"
+
+#: index.docbook:171
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <list name=\"people\">\n"
+ " <key column=\"addressId\" not-null=\"true\"/>\n"
+ " <list-index column=\"peopleIdx\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </list>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <list name=\"people\">\n"
+ " <key column=\"addressId\" not-null=\"true\"/>\n"
+ " <list-index column=\"peopleIdx\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </list>\n"
+ "</class>]]>"
+
+#: index.docbook:173
+msgid "It is important that you define <literal>not-null=\"true\"</literal> on the <literal><key></literal> element of the collection mapping if the underlying foreign key column is <literal>NOT NULL</literal>. Don't only declare <literal>not-null=\"true\"</literal> on a possible nested <literal><column></literal> element, but on the <literal><key></literal> element."
+msgstr "Un à un"
+
+#: index.docbook:187
+msgid "A <emphasis>bidirectional one-to-one association on a foreign key</emphasis> is quite common."
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " property-ref=\"address\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " property-ref=\"address\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:195
+msgid "A <emphasis>bidirectional one-to-one association on a primary key</emphasis> uses the special id generator."
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"address\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"address\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( personId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:208
+msgid "Bidirectional associations with join tables"
+msgstr "un à plusieurs / plusieurs à un"
+
+#: index.docbook:213
+msgid "A <emphasis>bidirectional one-to-many association on a join table</emphasis>. Note that the <literal>inverse=\"true\"</literal> can go on either end of the association, on the collection, or on the join."
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" \n"
+ " table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " inverse=\"true\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\"\n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+
+#: index.docbook:219
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" \n"
+ " table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " inverse=\"true\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\"\n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr "Un à un"
+
+#: index.docbook:227
+msgid "A <emphasis>bidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\"\n"
+ " inverse=\"true\">\n"
+ " <key column=\"addressId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\"\n"
+ " inverse=\"true\">\n"
+ " <key column=\"addressId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:240
+msgid "Finally, we have a <emphasis>bidirectional many-to-many association</emphasis>."
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\" table=\"PersonAddress\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-many column=\"personId\"\n"
+ " class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:244
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\" table=\"PersonAddress\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-many column=\"personId\"\n"
+ " class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:253
+msgid "More complex association mappings"
+msgstr "Des associations encore plus complexes sont <emphasis>extrêmement</emphasis> rares. Hibernate permet de gérer des situations plus complexes en utilisant des parties SQL dans les fichiers de mapping. Par exemple, si une table avec l'historiques des informations d'un compte définit les colonnes <literal>accountNumber</literal>, <literal>effectiveEndDate</literal> et <literal>effectiveStartDate</literal>, mappées de telle sorte:"
+
+#: index.docbook:255
+msgid "More complex association joins are <emphasis>extremely</emphasis> rare. Hibernate makes it possible to handle more complex situations using SQL fragments embedded in the mapping document. For example, if a table with historical account information data defines <literal>accountNumber</literal>, <literal>effectiveEndDate</literal> and <literal>effectiveStartDate</literal>columns, mapped as follows:"
+msgstr ""
+ "<![CDATA[<properties name=\"currentAccountKey\">\n"
+ " <property name=\"accountNumber\" type=\"string\" not-null=\"true\"/>\n"
+ " <property name=\"currentAccount\" type=\"boolean\">\n"
+ " <formula>case when effectiveEndDate is null then 1 else 0 end</formula>\n"
+ " </property>\n"
+ "</properties>\n"
+ "<property name=\"effectiveEndDate\" type=\"date\"/>\n"
+ "<property name=\"effectiveStateDate\" type=\"date\" not-null=\"true\"/>]]>"
+
+#: index.docbook:264
+msgid ""
+ "<![CDATA[<properties name=\"currentAccountKey\">\n"
+ " <property name=\"accountNumber\" type=\"string\" not-null=\"true\"/>\n"
+ " <property name=\"currentAccount\" type=\"boolean\">\n"
+ " <formula>case when effectiveEndDate is null then 1 else 0 end</formula>\n"
+ " </property>\n"
+ "</properties>\n"
+ "<property name=\"effectiveEndDate\" type=\"date\"/>\n"
+ "<property name=\"effectiveStateDate\" type=\"date\" not-null=\"true\"/>]]>"
+msgstr "alors nous pouvons mapper une association à l'instance <emphasis>courante</emphasis> (celle avec une <literal>effectiveEndDate</literal>) nulle en utilisant:"
+
+#: index.docbook:266
+msgid "Then we can map an association to the <emphasis>current</emphasis> instance (the one with null <literal>effectiveEndDate</literal>) using:"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"currentAccountInfo\" \n"
+ " property-ref=\"currentAccountKey\"\n"
+ " class=\"AccountInfo\">\n"
+ " <column name=\"accountNumber\"/>\n"
+ " <formula>'1'</formula>\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<many-to-one name=\"currentAccountInfo\" \n"
+ " property-ref=\"currentAccountKey\"\n"
+ " class=\"AccountInfo\">\n"
+ " <column name=\"accountNumber\"/>\n"
+ " <formula>'1'</formula>\n"
+ "</many-to-one>]]>"
+msgstr "Dans un exemple plus complexe, imaginez qu'une association entre <literal>Employee</literal> et <literal>Organization</literal> est gérée dans une table <literal>Employment</literal> pleines de données historiques. Dans ce cas, une association vers l'employeur <emphasis>le plus récent</emphasis> (celui avec la <literal>startDate</literal> la plus récente) pourrait être mappée comme cela:"
+
+#: index.docbook:273
+msgid "In a more complex example, imagine that the association between <literal>Employee</literal> and <literal>Organization</literal> is maintained in an <literal>Employment</literal> table full of historical employment data. Then an association to the employee's <emphasis>most recent</emphasis> employer (the one with the most recent <literal>startDate</literal>) might be mapped this way:"
+msgstr ""
+ "<![CDATA[<join>\n"
+ " <key column=\"employeeId\"/>\n"
+ " <subselect>\n"
+ " select employeeId, orgId \n"
+ " from Employments \n"
+ " group by orgId \n"
+ " having startDate = max(startDate)\n"
+ " </subselect>\n"
+ " <many-to-one name=\"mostRecentEmployer\" \n"
+ " class=\"Organization\" \n"
+ " column=\"orgId\"/>\n"
+ "</join>]]>"
+
+#: index.docbook:281
+msgid ""
+ "<![CDATA[<join>\n"
+ " <key column=\"employeeId\"/>\n"
+ " <subselect>\n"
+ " select employeeId, orgId \n"
+ " from Employments \n"
+ " group by orgId \n"
+ " having startDate = max(startDate)\n"
+ " </subselect>\n"
+ " <many-to-one name=\"mostRecentEmployer\" \n"
+ " class=\"Organization\" \n"
+ " column=\"orgId\"/>\n"
+ "</join>]]>"
+msgstr "Vous pouvez être créatif grace à ces possibilités, mais il est généralement plus pratique d'utiliser des requêtes HQL ou criteria dans ce genre de situation."
+
+#: index.docbook:283
+msgid "You can get quite creative with this functionality, but it is usually more practical to handle these kinds of cases using HQL or a criteria query."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/basic_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/basic_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/basic_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,3057 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Basic O/R Mapping"
+msgstr "Mapping O/R basique"
+
+#: index.docbook:8
+msgid "Mapping declaration"
+msgstr "Déclaration de Mapping"
+
+#: index.docbook:10
+msgid "Object/relational mappings are usually defined in an XML document. The mapping document is designed to be readable and hand-editable. The mapping language is Java-centric, meaning that mappings are constructed around persistent class declarations, not table declarations."
+msgstr "Les mappings Objet/relationnel sont généralement définis dans un document XML. Le document de mapping est conçu pour être lisible et éditable à la main. Le langage de mapping est Java-centrique, c'est à dire que les mappings sont construits à partir des déclarations des classes persistantes et non des déclarations des tables."
+
+#: index.docbook:17
+msgid "Note that, even though many Hibernate users choose to write the XML by hand, a number of tools exist to generate the mapping document, including XDoclet, Middlegen and AndroMDA."
+msgstr "Remarquez que même si beaucoup d'utilisateurs de Hibernate préfèrent écrire les fichiers de mappings à la main, plusieurs outils existent pour générer ce document, notamment XDoclet, Middlegen et AndroMDA."
+
+#: index.docbook:23
+msgid "Lets kick off with an example mapping:"
+msgstr "Démarrons avec un exemple de mapping :"
+
+#: index.docbook:27
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\"\n"
+ " table=\"cats\"\n"
+ " discriminator-value=\"C\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "\n"
+ " <discriminator column=\"subclass\"\n"
+ " type=\"character\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " <property name=\"birthdate\"\n"
+ " type=\"date\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"color\"\n"
+ " type=\"eg.types.ColorUserType\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"sex\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"litterId\"\n"
+ " column=\"litterId\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <many-to-one name=\"mother\"\n"
+ " column=\"mother_id\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <set name=\"kittens\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"litter_id\">\n"
+ " <key column=\"mother_id\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"DomesticCat\"\n"
+ " discriminator-value=\"D\">\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" \n"
+ " table=\"cats\"\n"
+ " discriminator-value=\"C\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "\n"
+ " <discriminator column=\"subclass\" \n"
+ " type=\"character\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " <property name=\"birthdate\"\n"
+ " type=\"date\" \n"
+ " not-null=\"true\" \n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"color\"\n"
+ " type=\"eg.types.ColorUserType\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"sex\"\n"
+ " not-null=\"true\" \n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"litterId\"\n"
+ " column=\"litterId\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <many-to-one name=\"mother\"\n"
+ " column=\"mother_id\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <set name=\"kittens\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"litter_id\">\n"
+ " <key column=\"mother_id\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"DomesticCat\"\n"
+ " discriminator-value=\"D\">\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " type=\"string\"/>\n"
+ "\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:29
+msgid "We will now discuss the content of the mapping document. We will only describe the document elements and attributes that are used by Hibernate at runtime. The mapping document also contains some extra optional attributes and elements that affect the database schemas exported by the schema export tool. (For example the <literal> not-null</literal> attribute.)"
+msgstr "Etudions le contenu du document de mapping. Nous décrirons uniquement les éléments et attributs du document utilisés par Hibernate à l'exécution. Le document de mapping contient aussi des attributs et éléments optionnels qui agissent sur le schéma de base de données exporté par l'outil de génération de schéma. (Par exemple l'attribut <literal>not-null</literal>.)"
+
+#: index.docbook:40
+msgid "Doctype"
+msgstr "Doctype"
+
+#: index.docbook:42
+msgid "All XML mappings should declare the doctype shown. The actual DTD may be found at the URL above, in the directory <literal>hibernate-x.x.x/src/org/hibernate </literal> or in <literal>hibernate3.jar</literal>. Hibernate will always look for the DTD in its classpath first. If you experience lookups of the DTD using an Internet connection, check your DTD declaration against the contents of your claspath."
+msgstr "Tous les mappings XML devraient utiliser le doctype indiqué. Ce fichier est présent à l'URL ci-dessus, dans le répertoire <literal>hibernate-x.x.x/src/org/hibernate</literal> ou dans <literal>hibernate3.jar</literal>. Hibernate va toujours chercher la DTD dans son classpath en premier lieu. Si vous constatez des recherches de la DTD sur Internet, vérifiez votre déclaration de DTD par rapport au contenu de votre classpath."
+
+#: index.docbook:52
+msgid "EntityResolver"
+msgstr "hibernate-mapping"
+
+#: index.docbook:53
+msgid "As mentioned previously, Hibernate will first attempt to resolve DTDs in its classpath. The manner in which it does this is by registering a custom <literal>org.xml.sax.EntityResolver</literal> implementation with the SAXReader it uses to read in the xml files. This custom <literal>EntityResolver</literal> recognizes two different systemId namespaces."
+msgstr "Cet élément a plusieurs attributs optionnels. Les attributs <literal>schema</literal> et <literal>catalog</literal> indiquent que les tables référencées par ce mapping appartiennent au schéma nommé et/ou au catalogue. S'ils sont spécifiés, les noms de tables seront qualifiés par les noms de schéma et catalogue. L'attribut <literal>default-cascade</literal> indique quel type de cascade sera utlisé par défaut pour les propriétés et collections qui ne précisent pas l'attribut <literal>cascade</literal>. L'attribut <literal>auto-import</literal> nous permet d'utiliser par défaut des noms de classes non qualifiés dans le langage de requête."
+
+#: index.docbook:61
+msgid "a <literal>hibernate namespace</literal> is recognized whenever the resolver encounteres a systemId starting with <literal>http://hibernate.sourceforge.net/</literal>; the resolver attempts to resolve these entities via the classlaoder which loaded the Hibernate classes."
+msgstr ""
+ "<![CDATA[<hibernate-mapping\n"
+ " schema=\"schemaName\"\n"
+ " catalog=\"catalogName\"\n"
+ " default-cascade=\"cascade_style\"\n"
+ " default-access=\"field|property|ClassName\"\n"
+ " default-lazy=\"true|false\"\n"
+ " auto-import=\"true|false\"\n"
+ " package=\"package.name\"\n"
+ " />]]>"
+
+#: index.docbook:70
+msgid "a <literal>user namespace</literal> is recognized whenever the resolver encounteres a systemId using a <literal>classpath://</literal> URL protocol; the resolver will attempt to resolve these entities via (1) the current thread context classloader and (2) the classloader which loaded the Hibernate classes."
+msgstr "<literal>schema</literal> (optionnel) : Le nom d'un schéma de base de données."
+
+#: index.docbook:79
+msgid "An example of utilizing user namespacing:"
+msgstr "<literal>catalog</literal> (optionnel) : Le nom d'un catalogue de base de données."
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\" [\n"
+ " <!ENTITY types SYSTEM \"classpath://your/domain/types.xml\">\n"
+ "]>\n"
+ "\n"
+ "<hibernate-mapping package=\"your.domain\">\n"
+ " <class name=\"MyEntity\">\n"
+ " <id name=\"id\" type=\"my-custom-id-type\">\n"
+ " ...\n"
+ " </id>\n"
+ " <class>\n"
+ " &types;\n"
+ "</hibernate-mapping>]]>"
+msgstr "<literal>default-cascade</literal> (optionnel - par défaut vaut : <literal>none</literal>) : Un type de cascade par défaut."
+
+#: index.docbook:83
+msgid "Where <literal>types.xml</literal> is a resource in the <literal>your.domain</literal> package and contains a custom <xref linkend=\"mapping-types-custom\"/>typedef."
+msgstr "<literal>default-access</literal> (optionnel - par défaut vaut : <literal>property</literal>) : Comment hibernate accèdera aux propriétés. On peut aussi redéfinir sa propre implémentation de <literal>PropertyAccessor</literal>."
+
+#: index.docbook:91
+msgid "hibernate-mapping"
+msgstr "<literal>default-lazy</literal> (optionnel - par défaut vaut : <literal>true</literal>) : Valeur par défaut pour un attribut <literal>lazy</literal> non spécifié : celui des mappings de classes et de collection."
+
+#: index.docbook:93
+msgid "This element has several optional attributes. The <literal>schema</literal> and <literal>catalog</literal> attributes specify that tables referred to in this mapping belong to the named schema and/or catalog. If specified, tablenames will be qualified by the given schema and catalog names. If missing, tablenames will be unqualified. The <literal>default-cascade</literal> attribute specifies what cascade style should be assumed for properties and collections which do not specify a <literal>cascade</literal> attribute. The <literal>auto-import</literal> attribute lets us use unqualified class names in the query language, by default."
+msgstr "<literal>auto-import</literal> (optionnel - par défaut vaut : <literal>true</literal>) : Spécifie si l'on peut utiliser des noms de classes non qualifiés (des classes de ce mapping) dans le langage de requête."
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[<hibernate-mapping\n"
+ " schema=\"schemaName\"\n"
+ " catalog=\"catalogName\"\n"
+ " default-cascade=\"cascade_style\"\n"
+ " default-access=\"field|property|ClassName\"\n"
+ " default-lazy=\"true|false\"\n"
+ " auto-import=\"true|false\"\n"
+ " package=\"package.name\"\n"
+ " />]]>"
+msgstr "<literal>package</literal> (optionnel) : Préfixe de package par défaut pour les noms de classe non qualifiés du document de mapping."
+
+#: index.docbook:117
+msgid "<literal>schema</literal> (optional): The name of a database schema."
+msgstr "Si deux classes possèdent le même nom de classe (non qualifié), vous devez indiquer <literal>auto-import=\"false\"</literal>. Hibernate lancera une exception si vous essayez d'assigner à deux classes le même nom importé."
+
+#: index.docbook:122
+msgid "<literal>catalog</literal> (optional): The name of a database catalog."
+msgstr "Notez que l'élément <literal>hibernate-mapping</literal> vous permet d'imbriquer plusieurs mappings de <literal><class></literal> persistantes, comme dans l'exemple ci-dessus. Cependant la bonne pratique (ce qui est attendu par certains outils) est de mapper une seule classe (ou une seule hiérarchie de classes) par fichier de mapping et de nommer ce fichier d'après le nom de la superclasse, par exemple <literal>Cat.hbm.xml</literal>, <literal>Dog.hbm.xml</literal>, ou en cas d'héritage, <literal>Animal.hbm.xml</literal>."
+
+#: index.docbook:127
+msgid "<literal>default-cascade</literal> (optional - defaults to <literal>none</literal>): A default cascade style."
+msgstr "<title>class</title>"
+
+#: index.docbook:133
+msgid "<literal>default-access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing all properties. Can be a custom implementation of <literal>PropertyAccessor</literal>."
+msgstr "Déclarez une classe persistante avec l'élément <literal>class</literal> :"
+
+#: index.docbook:140
+msgid "<literal>default-lazy</literal> (optional - defaults to <literal>true</literal>): The default value for unspecifed <literal>lazy</literal> attributes of class and collection mappings."
+msgstr ""
+ "<![CDATA[<class\n"
+ " name=\"ClassName\"\n"
+ " table=\"tableName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " mutable=\"true|false\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " select-before-update=\"true|false\"\n"
+ " polymorphism=\"implicit|explicit\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " persister=\"PersisterClass\"\n"
+ " batch-size=\"N\"\n"
+ " optimistic-lock=\"none|version|dirty|all\"\n"
+ " lazy=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " catalog=\"catalog\"\n"
+ " check=\"arbitrary sql check condition\"\n"
+ " rowid=\"rowid\"\n"
+ " subselect=\"SQL expression\"\n"
+ " abstract=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ "/>]]>"
+
+#: index.docbook:147
+msgid "<literal>auto-import</literal> (optional - defaults to <literal>true</literal>): Specifies whether we can use unqualified class names (of classes in this mapping) in the query language."
+msgstr "<literal>name</literal> (optionnel) : Le nom Java complet de la classe (ou interface) persistante. Si cet attribut est absent, il est supposé que ce mapping ne se rapporte pas à une entité POJO."
+
+#: index.docbook:154
+msgid "<literal>package</literal> (optional): Specifies a package prefix to assume for unqualified class names in the mapping document."
+msgstr "<literal>table</literal> (optionnel - par défaut le nom (non-qualifié) de la classe) : Le nom de sa table en base de données."
+
+#: index.docbook:162
+msgid "If you have two persistent classes with the same (unqualified) name, you should set <literal>auto-import=\"false\"</literal>. Hibernate will throw an exception if you attempt to assign two classes to the same \"imported\" name."
+msgstr "<literal>discriminator-value</literal> (optionnel - par défaut le nom de la classe) : Une valeur permettant de distinguer les sous-classes dans le cas de l'utilisation du polymorphisme. Les valeurs <literal>null</literal> et <literal>not null</literal> sont autorisées."
+
+#: index.docbook:168
+msgid "Note that the <literal>hibernate-mapping</literal> element allows you to nest several persistent <literal><class></literal> mappings, as shown above. It is however good practice (and expected by some tools) to map only a single persistent class (or a single class hierarchy) in one mapping file and name it after the persistent superclass, e.g. <literal>Cat.hbm.xml</literal>, <literal>Dog.hbm.xml</literal>, or if using inheritance, <literal>Animal.hbm.xml</literal>."
+msgstr "<literal>mutable</literal> (optionnel, vaut <literal>true</literal> par défaut) : Spécifie que des instances de la classe sont (ou non) immuables."
+
+#: index.docbook:181
+msgid "<title>class</title>"
+msgstr "<literal>schema</literal> (optionnel) : Surcharge le nom de schéma spécifié par l'élément racine <literal><hibernate-mapping></literal>."
+
+#: index.docbook:183
+msgid "You may declare a persistent class using the <literal>class</literal> element:"
+msgstr "<literal>catalog</literal> (optionnel) : Surcharge le nom du catalogue spécifié par l'élément racine <literal><hibernate-mapping></literal>."
+
+#: index.docbook:211
+msgid ""
+ "<![CDATA[<class\n"
+ " name=\"ClassName\"\n"
+ " table=\"tableName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " mutable=\"true|false\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " select-before-update=\"true|false\"\n"
+ " polymorphism=\"implicit|explicit\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " persister=\"PersisterClass\"\n"
+ " batch-size=\"N\"\n"
+ " optimistic-lock=\"none|version|dirty|all\"\n"
+ " lazy=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " check=\"arbitrary sql check condition\"\n"
+ " rowid=\"rowid\"\n"
+ " subselect=\"SQL expression\"\n"
+ " abstract=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]>"
+msgstr "<literal>proxy</literal> (optionnel) : Spécifie une interface à utiliser pour l'initialisation différée (lazy loading) des proxies. Vous pouvez indiquer le nom de la classe elle-même."
+
+#: index.docbook:214
+msgid "<literal>name</literal> (optional): The fully qualified Java class name of the persistent class (or interface). If this attribute is missing, it is assumed that the mapping is for a non-POJO entity."
+msgstr "<literal>dynamic-update</literal> (optionnel, par défaut à <literal>false</literal>) : Spécifie que les <literal>UPDATE</literal> SQL doivent être générés à l'exécution et contenir uniquement les colonnes dont les valeurs ont été modifiées."
+
+#: index.docbook:221
+msgid "<literal>table</literal> (optional - defaults to the unqualified class name): The name of its database table."
+msgstr "<literal>dynamic-insert</literal> (optionnel, par défaut à <literal>false</literal>): Spécifie que les <literal>INSERT</literal> SQL doivent être générés à l'exécution et ne contenir que les colonnes dont les valeurs sont non nulles."
+
+#: index.docbook:227
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses, used for polymorphic behaviour. Acceptable values include <literal>null</literal> and <literal>not null</literal>."
+msgstr "<literal>select-before-update</literal> (optionnel, par défaut à <literal>false</literal>): Spécifie que Hibernate ne doit <emphasis>jamais</emphasis> exécuter un <literal>UPDATE</literal> SQL sans être certain qu'un objet a été réellement modifié. Dans certains cas, (en réalité, seulement quand un objet transient a été associé à une nouvelle session par <literal>update()</literal>), cela signifie que Hibernate exécutera un <literal>SELECT</literal> SQL pour s'assurer qu'un <literal>UPDATE</literal> SQL est véritablement nécessaire."
+
+#: index.docbook:234
+msgid "<literal>mutable</literal> (optional, defaults to <literal>true</literal>): Specifies that instances of the class are (not) mutable."
+msgstr "<literal>polymorphism</literal> (optionnel, vaut <literal>implicit</literal> par défaut) : Détermine si, pour cette classe, une requête polymorphique implicite ou explicite est utilisée."
+
+#: index.docbook:240, index.docbook:2204
+msgid "<literal>schema</literal> (optional): Override the schema name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr "<literal>where</literal> (optionnel) spécifie une clause SQL <literal>WHERE</literal> à utiliser lorsque l'on récupère des objets de cette classe."
+
+#: index.docbook:246, index.docbook:2210
+msgid "<literal>catalog</literal> (optional): Override the catalog name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr "<literal>persister</literal> (optionnel) : Spécifie un <literal>ClassPersister</literal> particulier."
+
+#: index.docbook:252
+msgid "<literal>proxy</literal> (optional): Specifies an interface to use for lazy initializing proxies. You may specify the name of the class itself."
+msgstr "<literal>batch-size</literal> (optionnel, par défaut = <literal>1</literal>) : spécifie une taille de batch pour remplir les instances de cette classe par identifiant en une seule requête."
+
+#: index.docbook:258
+msgid "<literal>dynamic-update</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>UPDATE</literal> SQL should be generated at runtime and contain only those columns whose values have changed."
+msgstr "<literal>optimistic-lock</literal> (optionnel, par défaut = <literal>version</literal>) : Détermine la stratégie de verrou optimiste."
+
+#: index.docbook:265
+msgid "<literal>dynamic-insert</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>INSERT</literal> SQL should be generated at runtime and contain only the columns whose values are not null."
+msgstr "<literal>lazy</literal> (optionnel) : Déclarer <literal>lazy=\"true\"</literal> est un raccourci pour spécifier le nom de la classe comme étant l'interface <literal>proxy</literal>."
+
+#: index.docbook:272
+msgid "<literal>select-before-update</literal> (optional, defaults to <literal>false</literal>): Specifies that Hibernate should <emphasis>never</emphasis> perform an SQL <literal>UPDATE</literal> unless it is certain that an object is actually modified. In certain cases (actually, only when a transient object has been associated with a new session using <literal>update()</literal>), this means that Hibernate will perform an extra SQL <literal>SELECT</literal> to determine if an <literal>UPDATE</literal> is actually required."
+msgstr "<literal>entity-name</literal> (optionnel) : Hibernate3 permet à une classe d'être mappée plusieurs fois (potentiellement à plusieurs tables), et permet aux mappings d'entité d'être représentés par des Maps ou du XML au niveau Java. Dans ces cas, vous devez indiquer un nom explicite arbitraire pour les entités. Voir <xref linkend=\"persistent-classes-dynamicmodels\"/> et <xref linkend=\"xml\"/> pour plus d'informations."
+
+#: index.docbook:282
+msgid "<literal>polymorphism</literal> (optional, defaults to <literal>implicit</literal>): Determines whether implicit or explicit query polymorphism is used."
+msgstr "<literal>catalog</literal> (optionnel) : The name of a database catalog used for this class and its table."
+
+#: index.docbook:288
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving objects of this class"
+msgstr "<literal>check</literal> (optionnel) : expression SQL utilisée pour générer une contrainte de vérification multi-lignes pour la génération automatique de schéma."
+
+#: index.docbook:294
+msgid "<literal>persister</literal> (optional): Specifies a custom <literal>ClassPersister</literal>."
+msgstr "<literal>rowid</literal> (optionnel) : Hibernate peut utiliser des ROWID sur les bases de données qui utilisent ce mécanisme. Par exemple avec Oracle, Hibernate peut utiliser la colonne additionnelle <literal>rowid</literal> pour des mises à jour rapides si cette option vaut <literal>rowid</literal>. Un ROWID représente la localisation physique d'un tuple enregistré."
+
+#: index.docbook:299
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for fetching instances of this class by identifier."
+msgstr "<literal>subselect</literal> (optionnel) : Permet de mapper une entité immuable en lecture-seule sur un sous-select de base de données. Utile pour avoir une vue au lieu d'une table en base, mais à éviter. Voir plus bas pour plus d'information."
+
+#: index.docbook:305
+msgid "<literal>optimistic-lock</literal> (optional, defaults to <literal>version</literal>): Determines the optimistic locking strategy."
+msgstr "<literal>abstract</literal> (optionnel) : Utilisé pour marquer des superclasses abstraites dans des hiérarchies de <literal><union-subclass></literal>."
+
+#: index.docbook:311
+msgid "<literal>lazy</literal> (optional): Lazy fetching may be completely disabled by setting <literal>lazy=\"false\"</literal>."
+msgstr "Il est tout à fait possible d'utiliser une interface comme nom de classe persistante. Vous devez alors déclarer les classes implémentant cette interface en utilisant l'élément <literal><subclass></literal>. Vous pouvez faire persister toute classe interne <emphasis>static</emphasis>. Vous devez alors spécifier le nom de la classe par la notation habituelle des classes internes c'est à dire <literal>eg.Foo$Bar</literal>."
+
+#: index.docbook:317
+msgid "<literal>entity-name</literal> (optional, defaults to the class name): Hibernate3 allows a class to be mapped multiple times (to different tables, potentially), and allows entity mappings that are represented by Maps or XML at the Java level. In these cases, you should provide an explicit arbitrary name for the entity. See <xref linkend=\"persistent-classes-dynamicmodels\"/> and <xref linkend=\"xml\"/> for more information."
+msgstr "Les classes immuables, <literal>mutable=\"false\"</literal>, ne peuvent pas être modifiées ou supprimées par l'application. Cela permet à Hibernate de faire quelques optimisations mineures sur les performances."
+
+#: index.docbook:327
+msgid "<literal>check</literal> (optional): A SQL expression used to generate a multi-row <emphasis>check</emphasis> constraint for automatic schema generation."
+msgstr "L'attribut optionnnel <literal>proxy</literal> permet les intialisations différées des instances persistantes de la classe. Hibernate retournera initialement des proxies CGLIB qui implémentent l'interface nommée. Le véritable objet persistant ne sera chargé que lorsque une méthode du proxy sera appelée. Voir plus bas le paragraphe abordant les proxies et le chargement différé (lazy initialization)."
+
+#: index.docbook:333
+msgid "<literal>rowid</literal> (optional): Hibernate can use so called ROWIDs on databases which support. E.g. on Oracle, Hibernate can use the <literal>rowid</literal> extra column for fast updates if you set this option to <literal>rowid</literal>. A ROWID is an implementation detail and represents the physical location of a stored tuple."
+msgstr "Le polymorphisme <emphasis>implicite</emphasis> signifie que les instances de la classe seront retournées par une requête qui utilise les noms de la classe ou de chacune de ses superclasses ou encore des interfaces implémentées par cette classe ou ses superclasses. Les instances des classes filles seront retournées par une requête qui utilise le nom de la classe elle même. Le polymorphisme <emphasis>explicite</emphasis> signifie que les instances de la classe ne seront retournées que par une requête qui utilise explicitement son nom et que seules les instances des classes filles déclarées dans les éléments <literal><subclass></literal> ou <literal><joined-subclass></literal> seront retournées. Dans la majorités des cas la valeur par défaut, <literal>polymorphism=\"implicit\"</literal>, est appropriée. Le polymorphisme explicite est utile lorsque deux classes différentes sont mappées à la même table (ceci permet d'écrire une classe \!
"légère\" qui ne contient qu'une partie des colonnes de la table - voir la partie design pattern du site communautaire)."
+
+#: index.docbook:341
+msgid "<literal>subselect</literal> (optional): Maps an immutable and read-only entity to a database subselect. Useful if you want to have a view instead of a base table, but don't. See below for more information."
+msgstr "L'attribut <literal>persister</literal> vous permet de customiser la stratégie utilisée pour la classe. Vous pouvez, par exemple, spécifier votre propre sous-classe de <literal>org.hibernate.persister.EntityPersister</literal> ou vous pourriez aussi créer une nouvelle implémentation de l'interface <literal>org.hibernate.persister.ClassPersister</literal> qui proposerait une persistance via, par exemple, des appels de procédures stockées, de la sérialisation vers des fichiers plats ou un annuaire LDAP. Voir <literal>org.hibernate.test.CustomPersister</literal> pour un exemple simple (d'une \"persistance\" vers une <literal>Hashtable</literal>)."
+
+#: index.docbook:348
+msgid "<literal>abstract</literal> (optional): Used to mark abstract superclasses in <literal><union-subclass></literal> hierarchies."
+msgstr "Notez que les paramètres <literal>dynamic-update</literal> et <literal>dynamic-insert</literal> ne sont pas hérités par les sous-classes et peuvent donc être spécifiés pour les éléments <literal><subclass></literal> ou <literal><joined-subclass></literal> Ces paramètres peuvent améliorer les performances dans certains cas, mais peuvent aussi les amoindrir. A utiliser en connaissance de causes."
+
+#: index.docbook:356
+msgid "It is perfectly acceptable for the named persistent class to be an interface. You would then declare implementing classes of that interface using the <literal><subclass></literal> element. You may persist any <emphasis>static</emphasis> inner class. You should specify the class name using the standard form ie. <literal>eg.Foo$Bar</literal>."
+msgstr "L'utilisation de <literal>select-before-update</literal> va généralement faire baisser les performances. Ce paramètre est pratique pour prévenir l'appel inutile d'un trigger sur modification quand on réattache un graphe d'instances à une <literal>Session</literal>."
+
+#: index.docbook:363
+msgid "Immutable classes, <literal>mutable=\"false\"</literal>, may not be updated or deleted by the application. This allows Hibernate to make some minor performance optimizations."
+msgstr "Si vous utilisez le <literal>dynamic-update</literal>, les différentes stratégies de verrouillage optimiste (optimistic locking) sont les suivantes:"
+
+#: index.docbook:368
+msgid "The optional <literal>proxy</literal> attribute enables lazy initialization of persistent instances of the class. Hibernate will initially return CGLIB proxies which implement the named interface. The actual persistent object will be loaded when a method of the proxy is invoked. See \"Initializing collections and proxies\" below."
+msgstr "<literal>version</literal> vérifie les colonnes version/timestamp"
+
+#: index.docbook:375
+msgid "<emphasis>Implicit</emphasis> polymorphism means that instances of the class will be returned by a query that names any superclass or implemented interface or the class and that instances of any subclass of the class will be returned by a query that names the class itself. <emphasis>Explicit</emphasis> polymorphism means that class instances will be returned only by queries that explicitly name that class and that queries that name the class will return only instances of subclasses mapped inside this <literal><class></literal> declaration as a <literal><subclass></literal> or <literal><joined-subclass></literal>. For most purposes the default, <literal>polymorphism=\"implicit\"</literal>, is appropriate. Explicit polymorphism is useful when two different classes are mapped to the same table (this allows a \"lightweight\" class that contains a subset of the table columns)."
+msgstr "<literal>all</literal> vérifie toutes les colonnes"
+
+#: index.docbook:387
+msgid "The <literal>persister</literal> attribute lets you customize the persistence strategy used for the class. You may, for example, specify your own subclass of <literal>org.hibernate.persister.EntityPersister</literal> or you might even provide a completely new implementation of the interface <literal>org.hibernate.persister.ClassPersister</literal> that implements persistence via, for example, stored procedure calls, serialization to flat files or LDAP. See <literal>org.hibernate.test.CustomPersister</literal> for a simple example (of \"persistence\" to a <literal>Hashtable</literal>)."
+msgstr "<literal>dirty</literal> vérifie les colonnes modifiées, permettant des updates concurrents"
+
+#: index.docbook:398
+msgid "Note that the <literal>dynamic-update</literal> and <literal>dynamic-insert</literal> settings are not inherited by subclasses and so may also be specified on the <literal><subclass></literal> or <literal><joined-subclass></literal> elements. These settings may increase performance in some cases, but might actually decrease performance in others. Use judiciously."
+msgstr "<literal>none</literal> pas de verrouillage optimiste"
+
+#: index.docbook:406
+msgid "Use of <literal>select-before-update</literal> will usually decrease performance. It is very useful to prevent a database update trigger being called unnecessarily if you reattach a graph of detached instances to a <literal>Session</literal>."
+msgstr "Nous encourageons <emphasis>très</emphasis> fortement l'utilisation de colonnes de version/timestamp pour le verrouillage optimiste avec Hibernate. C'est la meilleure stratégie en regard des performances et la seule qui gère correctement les modifications sur les objets détachés (c'est à dire lorsqu'on utilise <literal>Session.merge()</literal>)."
+
+#: index.docbook:412
+msgid "If you enable <literal>dynamic-update</literal>, you will have a choice of optimistic locking strategies:"
+msgstr "Il n'y a pas de différence entre table et vue pour le mapping Hibernate, tant que c'est transparent au niveau base de données (remarquez que certaines BDD ne supportent pas les vues correctement, notamment pour les updates). Vous rencontrerez peut-être des cas où vous souhaitez utiliser une vue mais ne pouvez pas en créer sur votre BDD (par exemple à cause de schémas anciens et figés). Dans ces cas, vous pouvez mapper une entité immuable en lecture seule sur un sous-select SQL donné:"
+
+#: index.docbook:418
+msgid "<literal>version</literal> check the version/timestamp columns"
+msgstr ""
+ "<![CDATA[<class name=\"Summary\">\n"
+ " <subselect>\n"
+ " select item.name, max(bid.amount), count(*)\n"
+ " from item\n"
+ " join bid on bid.item_id = item.id\n"
+ " group by item.name\n"
+ " </subselect>\n"
+ " <synchronize table=\"item\"/>\n"
+ " <synchronize table=\"bid\"/>\n"
+ " <id name=\"name\"/>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:423
+msgid "<literal>all</literal> check all columns"
+msgstr "Déclarez les tables à synchroniser avec cette entité pour assurer que le flush automatique se produise correctement, et pour que les requêtes sur l'entité dérivée ne renvoient pas des données périmées. Le litéral <literal><subselect></literal> est disponible comme attribut ou comme élément de mapping."
+
+#: index.docbook:428
+msgid "<literal>dirty</literal> check the changed columns, allowing some concurrent updates"
+msgstr "<title>id</title>"
+
+#: index.docbook:433
+msgid "<literal>none</literal> do not use optimistic locking"
+msgstr "Les classes mappées <emphasis>doivent</emphasis> déclarer la clef primaire de la table en base de données. La plupart des classes auront aussi une propriété de type javabean présentant l'identifiant unique d'une instance. L'élément <literal><id></literal> sert à définir le mapping entre cette propriété et la clef primaire en base."
+
+#: index.docbook:438
+msgid "We <emphasis>very</emphasis> strongly recommend that you use version/timestamp columns for optimistic locking with Hibernate. This is the optimal strategy with respect to performance and is the only strategy that correctly handles modifications made to detached instances (ie. when <literal>Session.merge()</literal> is used)."
+msgstr ""
+ "<![CDATA[<id\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " column=\"column_name\"\n"
+ " unsaved-value=\"null|any|none|undefined|id_value\"\n"
+ " access=\"field|property|ClassName\">\n"
+ "\n"
+ " <generator class=\"generatorClass\"/>\n"
+ "</id>]]>"
+
+#: index.docbook:445
+msgid "There is no difference between a view and a base table for a Hibernate mapping, as expected this is transparent at the database level (note that some DBMS don't support views properly, especially with updates). Sometimes you want to use a view, but can't create one in the database (ie. with a legacy schema). In this case, you can map an immutable and read-only entity to a given SQL subselect expression:"
+msgstr "<literal>name</literal> (optionnel) : Nom de la propriété qui sert d'identifiant."
+
+#: index.docbook:453
+msgid ""
+ "<![CDATA[<class name=\"Summary\">\n"
+ " <subselect>\n"
+ " select item.name, max(bid.amount), count(*)\n"
+ " from item\n"
+ " join bid on bid.item_id = item.id\n"
+ " group by item.name\n"
+ " </subselect>\n"
+ " <synchronize table=\"item\"/>\n"
+ " <synchronize table=\"bid\"/>\n"
+ " <id name=\"name\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr "<literal>type</literal> (optionnel) : Nom indiquant le type Hibernate."
+
+#: index.docbook:455
+msgid "Declare the tables to synchronize this entity with, ensuring that auto-flush happens correctly, and that queries against the derived entity do not return stale data. The <literal><subselect></literal> is available as both as an attribute and a nested mapping element."
+msgstr "<literal>column</literal> (optionnel - le nom de la propriété est pris par défaut) : Nom de la clef primaire."
+
+#: index.docbook:465
+msgid "<title>id</title>"
+msgstr "<literal>unsaved-value</literal> (optionnel - par défaut une valeur \"bien choisie\") : Une valeur de la propriété d'identifiant qui indique que l'instance est nouvellement instanciée (non sauvegardée), et qui la distingue des instances <literal>transient</literal>s qui ont été sauvegardées ou chargées dans une session précédente."
+
+#: index.docbook:467
+msgid "Mapped classes <emphasis>must</emphasis> declare the primary key column of the database table. Most classes will also have a JavaBeans-style property holding the unique identifier of an instance. The <literal><id></literal> element defines the mapping from that property to the primary key column."
+msgstr "<literal>access</literal> (optionnel - par défaut <literal>property</literal>) : La stratégie que doit utiliser Hibernate pour accéder aux valeurs des propriétés."
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[<id\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " column=\"column_name\"\n"
+ " unsaved-value=\"null|any|none|undefined|id_value\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "\n"
+ " <generator class=\"generatorClass\"/>\n"
+ "</id>]]>"
+msgstr "Si l'attribut <literal>name</literal> est absent, Hibernate considère que la classe ne possède pas de propriété identifiant."
+
+#: index.docbook:485
+msgid "<literal>name</literal> (optional): The name of the identifier property."
+msgstr "L'attribut <literal>unsaved-value</literal> est important ! Si l'identifiant de votre classe n'a pas une valeur par défaut compatible avec le comportement standard de Java (zéro ou null), vous devez alors préciser la valeur par défaut."
+
+#: index.docbook:490
+msgid "<literal>type</literal> (optional): A name that indicates the Hibernate type."
+msgstr "La déclaration alternative <literal><composite-id></literal> permet l'acccès aux données d'anciens systèmes qui utilisent des clefs composées. Son utilisation est fortement déconseillée pour d'autres cas."
+
+#: index.docbook:495
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the primary key column."
+msgstr "Generator"
+
+#: index.docbook:501
+msgid "<literal>unsaved-value</literal> (optional - defaults to a \"sensible\" value): An identifier property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session."
+msgstr "L'élément fils <literal><generator></literal> nomme une classe Java utilisée pour générer les identifiants uniques pour les instances des classes persistantes. Si des paramètres sont requis pour configurer ou initialiser l'instance du générateur, ils sont passés en utilisant l'élément <literal><param></literal>."
+
+#: index.docbook:509, index.docbook:1017, index.docbook:1156, index.docbook:1238, index.docbook:1345, index.docbook:1534, index.docbook:1708, index.docbook:1878, index.docbook:2457
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the property value."
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"org.hibernate.id.TableHiLoGenerator\">\n"
+ " <param name=\"table\">uid_table</param>\n"
+ " <param name=\"column\">next_hi_value_column</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:517
+msgid "If the <literal>name</literal> attribute is missing, it is assumed that the class has no identifier property."
+msgstr "Tous les générateurs doivent implémenter l'interface <literal>org.hibernate.id.IdentifierGenerator</literal>. C'est une interface très simple ; certaines applications peuvent proposer leur propre implémentations spécialisées. Cependant, Hibernate propose une série d'implémentations intégrées. Il existe des noms raccourcis pour les générateurs intégrés :"
+
+#: index.docbook:522
+msgid "The <literal>unsaved-value</literal> attribute is almost never needed in Hibernate3."
+msgstr "increment"
+
+#: index.docbook:526
+msgid "There is an alternative <literal><composite-id></literal> declaration to allow access to legacy data with composite keys. We strongly discourage its use for anything else."
+msgstr "Génère des identifiants de type <literal>long</literal>, <literal>short</literal> ou <literal>int</literal> qui ne sont uniques que si aucun autre processus n'insère de données dans la même table. <emphasis>Ne pas utiliser en environnement clusterisé.</emphasis>"
+
+#: index.docbook:532
+msgid "Generator"
+msgstr "identity"
+
+#: index.docbook:534
+msgid "The optional <literal><generator></literal> child element names a Java class used to generate unique identifiers for instances of the persistent class. If any parameters are required to configure or initialize the generator instance, they are passed using the <literal><param></literal> element."
+msgstr "Utilisation de la colonne identity de DB2, MySQL, MS SQL Server, Sybase et HypersonicSQL. L'identifiant renvoyé est de type <literal>long</literal>, <literal>short</literal> ou <literal>int</literal>."
+
+#: index.docbook:541
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"org.hibernate.id.TableHiLoGenerator\">\n"
+ " <param name=\"table\">uid_table</param>\n"
+ " <param name=\"column\">next_hi_value_column</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "sequence"
+
+#: index.docbook:543
+msgid "All generators implement the interface <literal>org.hibernate.id.IdentifierGenerator</literal>. This is a very simple interface; some applications may choose to provide their own specialized implementations. However, Hibernate provides a range of built-in implementations. There are shortcut names for the built-in generators:"
+msgstr "Utilisation des séquences dans DB2, PostgreSQL, Oracle, SAP DB, McKoi ou d'un générateur dans Interbase. L'identifiant renvoyé est de type <literal>long</literal>, <literal>short</literal> ou <literal>int</literal>"
+
+#: index.docbook:551
+msgid "increment"
+msgstr "hilo"
+
+#: index.docbook:553
+msgid "generates identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal> that are unique only when no other process is inserting data into the same table. <emphasis>Do not use in a cluster.</emphasis>"
+msgstr "Utilise un algorithme hi/lo pour générer de façon efficace des identifiants de type <literal>long</literal>, <literal>short</literal> ou <literal>int</literal>, en prenant comme source de valeur \"hi\" une table et une colonne (par défaut <literal>hibernate_unique_key</literal> et <literal>next_hi</literal> respectivement). L'algorithme hi/lo génère des identifiants uniques pour une base de données particulière seulement."
+
+#: index.docbook:562
+msgid "identity"
+msgstr "seqhilo"
+
+#: index.docbook:564
+msgid "supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>."
+msgstr "Utilise un algorithme hi/lo pour générer efficacement des identifiants de type <literal>long</literal>, <literal>short</literal> ou <literal>int</literal>, étant donné un nom de séquence en base."
+
+#: index.docbook:572
+msgid "sequence"
+msgstr "uuid"
+
+#: index.docbook:574
+msgid "uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>"
+msgstr "Utilise un algorithme de type UUID 128 bits pour générer des identifiants de type string, unique au sein d'un réseau (l'adresse IP est utilisée). Le UUID en codé en une chaîne de nombre héxadécimaux de longueur 32."
+
+#: index.docbook:582
+msgid "hilo"
+msgstr "guid"
+
+#: index.docbook:584
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a table and column (by default <literal>hibernate_unique_key</literal> and <literal>next_hi</literal> respectively) as a source of hi values. The hi/lo algorithm generates identifiers that are unique only for a particular database."
+msgstr "Utilise une chaîne GUID générée par la base pour MS SQL Server et MySQL."
+
+#: index.docbook:594
+msgid "seqhilo"
+msgstr "native"
+
+#: index.docbook:596
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a named database sequence."
+msgstr "Choisit <literal>identity</literal>, <literal>sequence</literal> ou <literal>hilo</literal> selon les possibilités offertes par la base de données sous-jacente."
+
+#: index.docbook:604
+msgid "uuid"
+msgstr "assigned"
+
+#: index.docbook:606
+msgid "uses a 128-bit UUID algorithm to generate identifiers of type string, unique within a network (the IP address is used). The UUID is encoded as a string of hexadecimal digits of length 32."
+msgstr "Laisse l'application affecter un identifiant à l'objet avant que la métode <literal>save()</literal> soit appelée. Il s'agit de la stratégie par défaut si aucun <literal><generator></literal> n'est spécifié."
+
+#: index.docbook:614
+msgid "guid"
+msgstr "select"
+
+#: index.docbook:616
+msgid "uses a database-generated GUID string on MS SQL Server and MySQL."
+msgstr "Récupère une clef primaire assignée par un trigger en sélectionnant la ligne par une clef unique quelconque."
+
+#: index.docbook:622
+msgid "native"
+msgstr "foreign"
+
+#: index.docbook:624
+msgid "picks <literal>identity</literal>, <literal>sequence</literal> or <literal>hilo</literal> depending upon the capabilities of the underlying database."
+msgstr "Utilise l'identifiant d'un objet associé. Habituellement utilisé en conjonction avec une association <literal><one-to-one></literal> sur la clef primaire."
+
+#: index.docbook:632
+msgid "assigned"
+msgstr "algorithme Hi/lo"
+
+#: index.docbook:634
+msgid "lets the application to assign an identifier to the object before <literal>save()</literal> is called. This is the default strategy if no <literal><generator></literal> element is specified."
+msgstr "Les générateurs <literal>hilo</literal> et <literal>seqhilo</literal> proposent deux implémentations alternatives de l'algorithme hi/lo, une approche largement utilisée pour générer des identifiants. La première implémentation nécessite une table \"spéciale\" en base pour héberger la prochaine valeur \"hi\" disponible. La seconde utilise une séquence de type Oracle (quand la base sous-jacente le propose)."
+
+#: index.docbook:642
+msgid "select"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"hilo\">\n"
+ " <param name=\"table\">hi_value</param>\n"
+ " <param name=\"column\">next_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:644
+msgid "retrieves a primary key assigned by a database trigger by selecting the row by some unique key and retrieving the primary key value."
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"seqhilo\">\n"
+ " <param name=\"sequence\">hi_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:651
+msgid "foreign"
+msgstr "Malheureusement, vous ne pouvez pas utilisez <literal>hilo</literal> quand vous apportez votre propre <literal>Connection</literal> Ã Hibernate. Quand Hibernate utilise une datasource du serveur d'application pour obtenir des connexions inscrites avec JTA, vous devez correctement configurer <literal>hibernate.transaction.manager_lookup_class</literal>."
+
+#: index.docbook:653
+msgid "uses the identifier of another associated object. Usually used in conjunction with a <literal><one-to-one></literal> primary key association."
+msgstr "UUID algorithm"
+
+#: index.docbook:660
+msgid "sequence-identity"
+msgstr "Le contenu du UUID est : adresse IP, date de démarrage de la JVM (précis au quart de seconde), l'heure système et un compteur (unique au sein de la JVM). Il n'est pas possible d'obtenir l'adresse MAC ou une adresse mémoire à partir de Java, c'est donc le mieux que l'on puisse faire sans utiliser JNI."
+
+#: index.docbook:662
+msgid "a specialized sequence generation strategy which utilizes a database sequence for the actual value generation, but combines this with JDBC3 getGeneratedKeys to actually return the generated identifier value as part of the insert statement execution. This strategy is only known to be supported on Oracle 10g drivers targetted for JDK 1.4. Note comments on these insert statements are disabled due to a bug in the Oracle drivers."
+msgstr "Colonnes identifiantes et séquences"
+
+#: index.docbook:679
+msgid "Hi/lo algorithm"
+msgstr "Pour les bases qui implémentent les colonnes \"identité\" (DB2, MySQL, Sybase, MS SQL), vous pouvez utiliser la génération de clef par <literal>identity</literal>. Pour les bases qui implémentent les séquences (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) vous pouvez utiliser la génération de clef par <literal>sequence</literal>. Ces deux méthodes nécessitent deux requêtes SQL pour insérer un objet."
+
+#: index.docbook:680
+msgid "The <literal>hilo</literal> and <literal>seqhilo</literal> generators provide two alternate implementations of the hi/lo algorithm, a favorite approach to identifier generation. The first implementation requires a \"special\" database table to hold the next available \"hi\" value. The second uses an Oracle-style sequence (where supported)."
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">person_id_sequence</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:687
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"hilo\">\n"
+ " <param name=\"table\">hi_value</param>\n"
+ " <param name=\"column\">next_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0\">\n"
+ " <generator class=\"identity\"/>\n"
+ "</id>]]>"
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"seqhilo\">\n"
+ " <param name=\"sequence\">hi_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "Pour le développement multi-plateformes, la stratégie <literal>native</literal> choisira entre les méthodes <literal>identity</literal>, <literal>sequence</literal> et <literal>hilo</literal>, selon les possibilités offertes par la base sous-jacente."
+
+#: index.docbook:691
+msgid "Unfortunately, you can't use <literal>hilo</literal> when supplying your own <literal>Connection</literal> to Hibernate. When Hibernate is using an application server datasource to obtain connections enlisted with JTA, you must properly configure the <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr "Identifiants assignés"
+
+#: index.docbook:700
+msgid "UUID algorithm"
+msgstr "Si vous souhaitez que l'application assigne des identifiants (par opposition à la génération par Hibernate), vous pouvez utiliser le générateur <literal>assigned</literal>. Ce générateur spécial utilisera une valeur d'identifiant déjà utilisé par la propriété identifiant l'objet. Ce générateur est utilisé quand la clef primaire est une clef naturelle plutôt qu'une clef secondaire. C'est le comportement par défaut si vous ne précisez pas d'élément <literal><generator></literal>."
+
+#: index.docbook:701
+msgid "The UUID contains: IP address, startup time of the JVM (accurate to a quarter second), system time and a counter value (unique within the JVM). It's not possible to obtain a MAC address or memory address from Java code, so this is the best we can do without using JNI."
+msgstr "Choisir le générateur <literal>assigned</literal> fait utiliser <literal>unsaved-value=\"undefined\"</literal> par Hibernate, le forçant à interroger la base pour déterminer si l'instance est transiente ou détachée, à moins d'utiliser une propriété version ou timestamp, ou alors de définir <literal>Interceptor.isUnsaved()</literal>."
+
+#: index.docbook:710
+msgid "Identity columns and sequences"
+msgstr "Clefs primaires assignées par trigger"
+
+#: index.docbook:711
+msgid "For databases which support identity columns (DB2, MySQL, Sybase, MS SQL), you may use <literal>identity</literal> key generation. For databases that support sequences (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) you may use <literal>sequence</literal> style key generation. Both these strategies require two SQL queries to insert a new object."
+msgstr "Pour les schémas de base hérités d'anciens systèmes uniquement (Hibernate ne génère pas de DDL avec des triggers)"
+
+#: index.docbook:719
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">person_id_sequence</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"select\">\n"
+ " <param name=\"key\">socialSecurityNumber</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:721
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0\">\n"
+ " <generator class=\"identity\"/>\n"
+ "</id>]]>"
+msgstr "Dans l'exemple ci-dessus, <literal>socialSecurityNumber</literal> a une valeur unique définie par la classe en tant que clef naturelle et <literal>person_id</literal> est une clef secondaire dont la valeur est générée par trigger."
+
+#: index.docbook:723
+msgid "For cross-platform development, the <literal>native</literal> strategy will choose from the <literal>identity</literal>, <literal>sequence</literal> and <literal>hilo</literal> strategies, dependant upon the capabilities of the underlying database."
+msgstr "composite-id"
+
+#: index.docbook:732
+msgid "Assigned identifiers"
+msgstr ""
+ "<![CDATA[<composite-id\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " mapped=\"true|false\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|.\"\n"
+ "\n"
+ " <key-property name=\"propertyName\" type=\"typename\" column=\"column_name\"/>\n"
+ " <key-many-to-one name=\"propertyName class=\"ClassName\" column=\"column_name\"/>\n"
+ " ......\n"
+ "</composite-id>]]>"
+
+#: index.docbook:733
+msgid "If you want the application to assign identifiers (as opposed to having Hibernate generate them), you may use the <literal>assigned</literal> generator. This special generator will use the identifier value already assigned to the object's identifier property. This generator is used when the primary key is a natural key instead of a surrogate key. This is the default behavior if you do no specify a <literal><generator></literal> element."
+msgstr "Pour une table avec clef composée, vous pouvez mapper plusieurs attributs de la classe comme propriétés identifiantes. L'élement <literal><composite-id></literal> accepte les mappings de propriétés <literal><key-property></literal> et les mappings <literal><key-many-to-one></literal> comme fils."
+
+#: index.docbook:742
+msgid "Choosing the <literal>assigned</literal> generator makes Hibernate use <literal>unsaved-value=\"undefined\"</literal>, forcing Hibernate to go to the database to determine if an instance is transient or detached, unless there is a version or timestamp property, or you define <literal>Interceptor.isUnsaved()</literal>."
+msgstr ""
+ "<![CDATA[<composite-id>\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+
+#: index.docbook:752
+msgid "Primary keys assigned by triggers"
+msgstr "Vos classes persistantes <emphasis>doivent</emphasis> surcharger les méthodes <literal>equals()</literal> et <literal>hashCode()</literal> pour implémenter l'égalité d'identifiant composé. Elles doivent aussi implenter l'interface <literal>Serializable</literal>."
+
+#: index.docbook:753
+msgid "For legacy schemas only (Hibernate does not generate DDL with triggers)."
+msgstr "Malheureusement cette approche sur les identifiants composés signifie qu'un objet persistant est son propre identifiant. Il n'y a pas d'autre moyen pratique de manipuler l'objet que par l'objet lui-même. Vous devez instancier une instance de la classe persistante elle-même et peupler ses attributs identifiants avant de pouvoir appeler la méthode <literal>load()</literal> pour charger son état persistant associé à une clef composée. Nous appelons cette approche \"identifiant composé <emphasis>embarqué</emphasis>\" et ne la recommandons pas pour des applications complexes."
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"select\">\n"
+ " <param name=\"key\">socialSecurityNumber</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "Une seconde approche, appelée identifiant composé <emphasis>mappé</emphasis>, consiste à encapsuler les propriétés identifiantes (celles contenues dans <literal><composite-id></literal>) dans une classe particulière."
+
+#: index.docbook:759
+msgid "In the above example, there is a unique valued property named <literal>socialSecurityNumber</literal> defined by the class, as a natural key, and a surrogate key named <literal>person_id</literal> whose value is generated by a trigger."
+msgstr ""
+ "<![CDATA[<composite-id class=\"MedicareId\" mapped=\"true\">\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+
+#: index.docbook:771
+msgid "Enhanced identifier generators"
+msgstr "Dans cet exemple, la classe d'identifiant composée,<literal>MedicareId</literal> et la classe mappée elle-même, possèdent les propriétés <literal>medicareNumber</literal> et <literal>dependent</literal>. La classe identifiante doit redéfinir <literal>equals()</literal> et <literal>hashCode()</literal> et implémenter <literal>Serializable</literal>. Le désavantage de cette approche est la duplication du code."
+
+#: index.docbook:773
+msgid "Starting with release 3.2.3, there are 2 new generators which represent a re-thinking of 2 different aspects of identifier generation. The first aspect is database portability; the second is optimization (not having to query the database for every request for a new identifier value). These two new generators are intended to take the place of some of the named generators described above (starting in 3.3.x); however, they are included in the current releases and can be referenced by FQN."
+msgstr "Les attributs suivants servent à configurer un identifiant composé mappé :"
+
+#: index.docbook:781
+msgid "The first of these new generators is <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> which is intended firstly as a replacement for the <literal>sequence</literal> generator and secondly as a better portability generator than <literal>native</literal> (because <literal>native</literal> (generally) chooses between <literal>identity</literal> and <literal>sequence</literal> which have largely different semantics which can cause subtle isssues in applications eyeing portability). <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> however achieves portability in a different manner. It chooses between using a table or a sequence in the database to store its incrementing values depending on the capabilities of the dialect being used. The difference between this and <literal>native</literal> is that table-based and sequence-based storage have the same exact semantic (in fact sequences are exactly what Hibernate tries to emmulate with its!
table-based generators). This generator has a number of configuration parameters:"
+msgstr "<literal>mapped</literal> (optionnel, défaut à <literal>false</literal>) : indique qu'un identifiant composé mappé est utilisé, et que les propriétés contenues font référence aux deux classes (celle mappée et la classe identifiante)."
+
+#: index.docbook:795
+msgid "<literal>sequence_name</literal> (optional, defaults to <literal>hibernate_sequence</literal>): The name of the sequence (or table) to be used."
+msgstr "<literal>class</literal> (optionnel, mais requis pour un identifiant composé mappé) : La classe composant utilisée comme identifiant composé."
+
+#: index.docbook:801
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the sequence/table. In sequence creation terms, this is analogous to the clause typical named \"STARTS WITH\"."
+msgstr "Nous décrirons une troisième approche beaucoup plus efficace ou l'identifiant composé est implémenté comme une classe composant dans <xref linkend=\"components-compositeid\"/>. Les attributs décrits ci dessous, ne s'appliquent que pour cette dernière approche :"
+
+#: index.docbook:808
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the sequence/table should differ. In sequence creation terms, this is analogous to the clause typical named \"INCREMENT BY\"."
+msgstr "<literal>name</literal> (optionnel, requis pour cette approche) : une propriété de type composant qui contient l'identifiant composé (voir chapitre 9)."
+
+#: index.docbook:815
+msgid "<literal>force_table_use</literal> (optional, defaults to <literal>false</literal>): Should we force the use of a table as the backing structure even though the dialect might support sequence?"
+msgstr "<literal>access</literal> (optionnel - défaut à <literal>property</literal>) : La stratégie qu'Hibernate utilisera pour accéder à la valeur de la propriété."
+
+#: index.docbook:822
+msgid "<literal>value_column</literal> (optional, defaults to <literal>next_val</literal>): Only relevant for table structures! The name of the column on the table which is used to hold the value."
+msgstr "<literal>class</literal> (optionnel - défaut au type de la propriété déterminé par réflexion) : La classe composant utilisée comme identifiant (voir prochaine section)."
+
+#: index.docbook:829
+msgid "<literal>optimizer</literal> (optional, defaults to <literal>none</literal>): See"
+msgstr "Cette dernière approche est celle que nous recommandons pour toutes vos applications."
+
+#: index.docbook:836
+msgid "The second of these new generators is <literal>org.hibernate.id.enhanced.TableGenerator</literal> which is intended firstly as a replacement for the <literal>table</literal> generator (although it actually functions much more like <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal>) and secondly as a re-implementation of <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal> utilizing the notion of pluggable optimiziers. Essentially this generator defines a table capable of holding a number of different increment values simultaneously by using multiple distinctly keyed rows. This generator has a number of configuration parameters:"
+msgstr "discriminator"
+
+#: index.docbook:846
+msgid "<literal>table_name</literal> (optional, defaults to <literal>hibernate_sequences</literal>): The name of the table to be used."
+msgstr "L'élément <literal><discriminator></literal> est nécessaire pour la persistance polymorphique qui utilise la stratégie de mapping de table par hiérarchie de classe. La colonne discriminante contient une valeur marqueur qui permet à la couche de persistance de savoir quelle sous-classe instancier pour une ligne particulière de table en base. Un nombre restreint de types peuvent être utilisés : <literal>string</literal>, <literal>character</literal>, <literal>integer</literal>, <literal>byte</literal>, <literal>short</literal>, <literal>boolean</literal>, <literal>yes_no</literal>, <literal>true_false</literal>."
+
+#: index.docbook:852
+msgid "<literal>value_column_name</literal> (optional, defaults to <literal>next_val</literal>): The name of the column on the table which is used to hold the value."
+msgstr ""
+ "<![CDATA[<discriminator\n"
+ " column=\"discriminator_column\"\n"
+ " type=\"discriminator_type\"\n"
+ " force=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary sql expression\"\n"
+ "/>]]>"
+
+#: index.docbook:858
+msgid "<literal>segment_column_name</literal> (optional, defaults to <literal>sequence_name</literal>): The name of the column on the table which is used to hold the \"segement key\". This is the value which distinctly identifies which increment value to use."
+msgstr "<literal>column</literal> (optionnel - par défaut à <literal>class</literal>) le nom de la colonne discriminante."
+
+#: index.docbook:865
+msgid "<literal>segment_value</literal> (optional, defaults to <literal>default</literal>): The \"segment key\" value for the segment from which we want to pull increment values for this generator."
+msgstr "<literal>type</literal> (optionnel - par défaut à <literal>string</literal>) un nom indiquant le type Hibernate."
+
+#: index.docbook:872
+msgid "<literal>segment_value_length</literal> (optional, defaults to <literal>255</literal>): Used for schema generation; the column size to create this segment key column."
+msgstr "<literal>force</literal> (optionnel - par défaut à <literal>false</literal>) \"oblige\" Hibernate à spécifier une valeur discriminante autorisée même quand on récupère toutes les instances de la classe de base."
+
+#: index.docbook:878
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the table."
+msgstr "<literal>insert</literal> (optionnel - par défaut à <literal>true</literal>) à passer à <literal>false</literal> si la colonne discriminante fait aussi partie d'un identifiant composé mappé (Indique à Hibernate de ne pas inclure la colonne dans les <literal>INSERT</literal> SQL)."
+
+#: index.docbook:884
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the table should differ."
+msgstr "<literal>formula</literal> (optionnel) une expression SQL arbitraire qui est exécutée quand un type doit être évalué. Permet la discrimination basée sur le contenu."
+
+#: index.docbook:890
+msgid "<literal>optimizer</literal> (optional, defaults to <literal></literal>): See"
+msgstr "Les véritables valeurs de la colonne discriminante sont spécifiées par l'attribut <literal>discriminator-value</literal> des éléments <literal><class></literal> et <literal><subclass></literal>."
+
+#: index.docbook:900
+msgid "Identifier generator optimization"
+msgstr "L'attribut <literal>force</literal> n'est utile que si la table contient des lignes avec des valeurs \"extra\" discriminantes qui ne sont pas mappées à une classe persistante. Ce ne sera généralement pas le cas."
+
+#: index.docbook:901
+msgid "For identifier generators which store values in the database, it is inefficient for them to hit the database on each and every call to generate a new identifier value. Instead, you'd ideally want to group a bunch of them in memory and only hit the database when you have exhausted your in-memory value group. This is the role of the pluggable optimizers. Currently only the two enhanced generators (<xref linkend=\"mapping-declaration-id-enhanced\"/> support this notion."
+msgstr "En utilisant l'attribut <literal>formula</literal> vous pouvez déclarer une expression SQL arbitraire qui sera utilisée pour évaluer le type d'une ligne :"
+
+#: index.docbook:909
+msgid "<literal>none</literal> (generally this is the default if no optimizer was specified): This says to not perform any optimizations, and hit the database each and every request."
+msgstr ""
+ "<![CDATA[<discriminator\n"
+ " formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"\n"
+ " type=\"integer\"/>]]>"
+
+#: index.docbook:915
+msgid "<literal>hilo</literal>: applies a hi/lo algorithm around the database retrieved values. The values from the database for this optimizer are expected to be sequential. The values retrieved from the database structure for this optimizer indicates the \"group number\"; the <literal>increment_size</literal> is multiplied by that value in memory to define a group \"hi value\"."
+msgstr "version (optionnel)"
+
+#: index.docbook:924
+msgid "<literal>pooled</literal>: like was discussed for <literal>hilo</literal>, this optimizers attempts to minimize the number of hits to the database. Here, however, we simply store the starting value for the \"next group\" into the database structure rather than a sequential value in combination with an in-memory grouping algorithm. <literal>increment_size</literal> here refers to the values coming from the database."
+msgstr "L'élément <literal><version></literal> est optionnel et indique que la table contient des données versionnées. C'est particulièrement utile si vous avez l'intention d'utiliser des <emphasis>transactions longues</emphasis> (voir plus-bas)."
+
+#: index.docbook:937
+msgid "composite-id"
+msgstr ""
+ "<![CDATA[<version\n"
+ " column=\"version_column\"\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|negative|undefined\"\n"
+ " generated=\"never|always\"\n"
+ " insert=\"true|false\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+
+#: index.docbook:939
+msgid ""
+ "<![CDATA[<composite-id\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " mapped=\"true|false\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|.\"\n"
+ "\n"
+ " <key-property name=\"propertyName\" type=\"typename\" column=\"column_name\"/>\n"
+ " <key-many-to-one name=\"propertyName class=\"ClassName\" column=\"column_name\"/>\n"
+ " ......\n"
+ "</composite-id>]]>"
+msgstr "<literal>column</literal> (optionnel - par défaut égal au nom de la propriété) : Le nom de la colonne contenant le numéro de version."
+
+#: index.docbook:941
+msgid "For a table with a composite key, you may map multiple properties of the class as identifier properties. The <literal><composite-id></literal> element accepts <literal><key-property></literal> property mappings and <literal><key-many-to-one></literal> mappings as child elements."
+msgstr "<literal>name</literal> : Le nom d'un attribut de la classe persistante."
+
+#: index.docbook:948
+msgid ""
+ "<![CDATA[<composite-id>\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr "<literal>type</literal> (optionnel - par défaut à <literal>integer</literal>) : Le type du numéro de version."
+
+#: index.docbook:950
+msgid "Your persistent class <emphasis>must</emphasis> override <literal>equals()</literal> and <literal>hashCode()</literal> to implement composite identifier equality. It must also implements <literal>Serializable</literal>."
+msgstr "<literal>access</literal> (optionnel - par défaut à <literal>property</literal>) : La stratégie à utiliser par Hibernate pour accéder à la valeur de la propriété."
+
+#: index.docbook:956
+msgid "Unfortunately, this approach to composite identifiers means that a persistent object is its own identifier. There is no convenient \"handle\" other than the object itself. You must instantiate an instance of the persistent class itself and populate its identifier properties before you can <literal>load()</literal> the persistent state associated with a composite key. We call this approach an <emphasis>embedded</emphasis> composite identifier, and discourage it for serious applications."
+msgstr "<literal>unsaved-value</literal> (optionnel - par défaut à <literal>undefined</literal>) : Une valeur de la propriété d'identifiant qui indique que l'instance est nouvellement instanciée (non sauvegardée), et qui la distingue des instances détachées qui ont été sauvegardées ou chargées dans une session précédente (<literal>undefined</literal> indique que la valeur de l'atribut identifiant devrait être utilisé)."
+
+#: index.docbook:965
+msgid "A second approach is what we call a <emphasis>mapped</emphasis> composite identifier, where the identifier properties named inside the <literal><composite-id></literal> element are duplicated on both the persistent class and a separate identifier class."
+msgstr "<literal>generated</literal> (optional - défaut à <literal>never</literal>) : Indique que la valeur de la propriété version est générée par la base de données cf. <xref linkend=\"mapping-generated\"/>generated properties."
+
+#: index.docbook:971
+msgid ""
+ "<![CDATA[<composite-id class=\"MedicareId\" mapped=\"true\">\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr "<literal>insert</literal> (optionnel - défaut à <literal>true</literal>) : Indique si la colonne de version doit être incluse dans les ordres insert. Peut être à <literal>false</literal> si et seulement si la colonne de la base de données est définie avec une valeur par défaut à <literal>0</literal>."
+
+#: index.docbook:973
+msgid "In this example, both the composite identifier class, <literal>MedicareId</literal>, and the entity class itself have properties named <literal>medicareNumber</literal> and <literal>dependent</literal>. The identifier class must override <literal>equals()</literal> and <literal>hashCode()</literal> and implement. <literal>Serializable</literal>. The disadvantage of this approach is quite obvious—code duplication."
+msgstr "Les numéros de version doivent avoir les types Hibernate <literal>long</literal>, <literal>integer</literal>, <literal>short</literal>, <literal>timestamp</literal> ou <literal>calendar</literal>."
+
+#: index.docbook:982
+msgid "The following attributes are used to specify a mapped composite identifier:"
+msgstr "Une propriété de version ou un timestamp ne doit jamais être null pour une instance détachée, ainsi Hibernate pourra détecter toute instance ayant une version ou un timestamp null comme transient, quelles que soient les stratégies <literal>unsaved-value</literal> spécifiées. <emphasis>Déclarer un numéro de version ou un timestamp \"nullable\" est un moyen pratique d'éviter tout problème avec les réattachements transitifs dans Hibernate, particulièrement utile pour ceux qui utilisent des identifiants assignés ou des clefs composées !</emphasis>"
+
+#: index.docbook:988
+msgid "<literal>mapped</literal> (optional, defaults to <literal>false</literal>): indicates that a mapped composite identifier is used, and that the contained property mappings refer to both the entity class and the composite identifier class."
+msgstr "timestamp (optionnel)"
+
+#: index.docbook:996
+msgid "<literal>class</literal> (optional, but required for a mapped composite identifier): The class used as a composite identifier."
+msgstr "L'élément optionnel <literal><timestamp></literal> indique que la table contient des données horodatées (timestamp). Cela sert d'alternative à l'utilisation de numéros de version. Les timestamps (ou horodatage) sont par nature une implémentation moins fiable pour l'optimistic locking. Cependant, l'application peut parfois utiliser l'horodatage à d'autres fins."
+
+#: index.docbook:1003
+msgid "We will describe a third, even more convenient approach where the composite identifier is implemented as a component class in <xref linkend=\"components-compositeid\"/>. The attributes described below apply only to this alternative approach:"
+msgstr ""
+ "<![CDATA[<timestamp\n"
+ " column=\"timestamp_column\"\n"
+ " name=\"propertyName\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|undefined\"\n"
+ " source=\"vm|db\"\n"
+ " generated=\"never|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+
+#: index.docbook:1011
+msgid "<literal>name</literal> (optional, required for this approach): A property of component type that holds the composite identifier (see chapter 9)."
+msgstr "<literal>column</literal> (optionnel - par défaut à le nom de la propriété) : Le nom d'une colonne contenant le timestamp."
+
+#: index.docbook:1023
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The component class used as a composite identifier (see next section)."
+msgstr "<literal>access</literal> (optionnel - par défaut à <literal>property</literal>) : La stratégie à utiliser par Hibernate pour accéder à la valeur de la propriété."
+
+#: index.docbook:1030
+msgid "This third approach, an <emphasis>identifier component</emphasis> is the one we recommend for almost all applications."
+msgstr "<literal>unsaved-value</literal> (optionnel - par défaut à <literal>null</literal>) : Propriété dont la valeur est un numéro de version qui indique que l'instance est nouvellement instanciée (non sauvegardée), et qui la distingue des instances détachées qui ont été sauvegardées ou chargées dans une session précédente (<literal>undefined</literal> indique que la valeur de l'attribut identifiant devrait être utilisée)."
+
+#: index.docbook:1038
+msgid "discriminator"
+msgstr "<literal>source</literal> (optionnel - par défaut à <literal>vm</literal>) : D'où Hibernate doit-il récupérer la valeur du timestamp? Depuis la base de données ou depuis la JVM d'exécution? Les valeurs de timestamp de la base de données provoquent une surcharge puisque Hibernate doit interroger la base pour déterminer la prochaine valeur mais cela est plus sûr lorsque vous fonctionnez dans un cluster. Remarquez aussi que certains des dialectes ne supportent pas cette fonction, et que d'autres l'implémentent mal, provoquant des erreurs de précision (Oracle 8 par exemple)."
+
+#: index.docbook:1040
+msgid "The <literal><discriminator></literal> element is required for polymorphic persistence using the table-per-class-hierarchy mapping strategy and declares a discriminator column of the table. The discriminator column contains marker values that tell the persistence layer what subclass to instantiate for a particular row. A restricted set of types may be used: <literal>string</literal>, <literal>character</literal>, <literal>integer</literal>, <literal>byte</literal>, <literal>short</literal>, <literal>boolean</literal>, <literal>yes_no</literal>, <literal>true_false</literal>."
+msgstr "<literal>generated</literal> (optional - défaut à <literal>never</literal>) : Indique que la valeur de ce timestamp est générée par la base de données cf. <xref linkend=\"mapping-generated\"/>generated properties."
+
+#: index.docbook:1058
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " column=\"discriminator_column\"\n"
+ " type=\"discriminator_type\"\n"
+ " force=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary sql expression\"\n"
+ "/>]]>"
+msgstr "Notez que <literal><timestamp></literal> est équivalent à <literal><version type=\"timestamp\"></literal>."
+
+#: index.docbook:1061
+msgid "<literal>column</literal> (optional - defaults to <literal>class</literal>) the name of the discriminator column."
+msgstr "property"
+
+#: index.docbook:1067
+msgid "<literal>type</literal> (optional - defaults to <literal>string</literal>) a name that indicates the Hibernate type"
+msgstr "L'élément <literal><property></literal> déclare une propriété de la classe au sens JavaBean."
+
+#: index.docbook:1073
+msgid "<literal>force</literal> (optional - defaults to <literal>false</literal>) \"force\" Hibernate to specify allowed discriminator values even when retrieving all instances of the root class."
+msgstr ""
+ "<![CDATA[<property\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " type=\"typename\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " generated=\"never|insert|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ "/>]]>"
+
+#: index.docbook:1080
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>) set this to <literal>false</literal> if your discriminator column is also part of a mapped composite identifier. (Tells Hibernate to not include the column in SQL <literal>INSERT</literal>s.)"
+msgstr "<literal>name</literal> : nom de la propriété, avec une lettre initiale en minuscule."
+
+#: index.docbook:1088
+msgid "<literal>formula</literal> (optional) an arbitrary SQL expression that is executed when a type has to be evaluated. Allows content-based discrimination."
+msgstr "<literal>column</literal> (optionnel - par défaut au nom de la propriété) : le nom de la colonne mappée. Cela peut aussi être indiqué dans le(s) sous-élément(s) <literal><column></literal>."
+
+#: index.docbook:1096
+msgid "Actual values of the discriminator column are specified by the <literal>discriminator-value</literal> attribute of the <literal><class></literal> and <literal><subclass></literal> elements."
+msgstr "<literal>type</literal> (optionnel) : nom indiquant le type Hibernate."
+
+#: index.docbook:1102
+msgid "The <literal>force</literal> attribute is (only) useful if the table contains rows with \"extra\" discriminator values that are not mapped to a persistent class. This will not usually be the case."
+msgstr "<literal>update, insert</literal> (optionnel - par défaut à <literal>true</literal>) : indique que les colonnes mappées devraient être incluses dans des <literal>UPDATE</literal> SQL et/ou des <literal>INSERT</literal>. Mettre les deux à <literal>false</literal> empêche la propagation en base de données (utile si vous savez qu'un trigger affectera la valeur à la colonne)."
+
+#: index.docbook:1108
+msgid "Using the <literal>formula</literal> attribute you can declare an arbitrary SQL expression that will be used to evaluate the type of a row:"
+msgstr "<literal>formula</literal> (optionnel) : une expression SQL qui définit la valeur pour une propriété <emphasis>calculée</emphasis>. Les propriétés calculées ne possède pas leur propre mapping."
+
+#: index.docbook:1113
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"\n"
+ " type=\"integer\"/>]]>"
+msgstr "<literal>access</literal> (optionnel - par défaut à <literal>property</literal>): Stratégie que Hibernate doit utiliser pour accéder à cette valeur."
+
+#: index.docbook:1118
+msgid "version (optional)"
+msgstr "<literal>lazy</literal> (optionnel - par défaut à <literal>false</literal>): Indique que cette propriété devrait être chargée en différé (lazy loading) quand on accède à la variable d'instance pour la première fois."
+
+#: index.docbook:1120
+msgid "The <literal><version></literal> element is optional and indicates that the table contains versioned data. This is particularly useful if you plan to use <emphasis>long transactions</emphasis> (see below)."
+msgstr "<literal>unique</literal> (optionnel): Génère le DDL d'une contrainte d'unicité pour les colonnes. Permet aussi d'en faire la cible d'un <literal>property-ref</literal>."
+
+#: index.docbook:1136
+msgid ""
+ "<![CDATA[<version\n"
+ " column=\"version_column\"\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|negative|undefined\"\n"
+ " generated=\"never|always\"\n"
+ " insert=\"true|false\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr "<literal>not-null</literal> (optionnel): Génère le DDL d'une contrainte de non nullité pour les colonnes."
+
+#: index.docbook:1139
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the column holding the version number."
+msgstr "<literal>optimistic-lock</literal> (optionnel - par défaut à <literal>true</literal>): Indique que les mises à jour de cette propriété peuvent ou non nécessiter l'acquisition d'un verrou optimiste. En d'autres termes, cela détermine s'il est nécessaire d'incrémenter un numéro de version quand cette propriété est marquée obsolète (dirty)."
+
+#: index.docbook:1145
+msgid "<literal>name</literal>: The name of a property of the persistent class."
+msgstr "<literal>generated</literal> (optional - défaut à <literal>never</literal>): Indique que la valeur de ce timestamp est générée par la base de données cf. <xref linkend=\"mapping-generated\"/>generated properties."
+
+#: index.docbook:1150
+msgid "<literal>type</literal> (optional - defaults to <literal>integer</literal>): The type of the version number."
+msgstr "<emphasis>typename</emphasis> peut être:"
+
+#: index.docbook:1162
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>undefined</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr "Nom d'une classe Java avec un type basique par défaut (ex: <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal>)."
+
+#: index.docbook:1171
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this version property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "Nom d'une classe Java sérialisable."
+
+#: index.docbook:1178
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>): Specifies whether the version column should be included in SQL insert statements. May be set to <literal>false</literal> if and only if the database column is defined with a default value of <literal>0</literal>."
+msgstr "Nom d'une classe ayant un type spécifique (ex: <literal>com.illflow.type.MyCustomType</literal>)."
+
+#: index.docbook:1188
+msgid "Version numbers may be of Hibernate type <literal>long</literal>, <literal>integer</literal>, <literal>short</literal>, <literal>timestamp</literal> or <literal>calendar</literal>."
+msgstr "Si vous n'indiquez pas un type, Hibernate utlisera la réflexion sur le nom de la propriété pour tenter de trouver le type Hibernate correct. Hibernate essayera d'interprêter le nom de la classe retournée par le getter de la propriété en utilisant les régles 2, 3, 4 dans cet ordre. Cependant, ce n'est pas toujours suffisant. Dans certains cas vous aurez encore besoin de l'attribut <literal>type</literal> (Par exemple, pour distinguer <literal>Hibernate.DATE</literal> et <literal>Hibernate.TIMESTAMP</literal>, ou pour préciser un type spécifique)."
+
+#: index.docbook:1193
+msgid "A version or timestamp property should never be null for a detached instance, so Hibernate will detect any instance with a null version or timestamp as transient, no matter what other <literal>unsaved-value</literal> strategies are specified. <emphasis>Declaring a nullable version or timestamp property is an easy way to avoid any problems with transitive reattachment in Hibernate, especially useful for people using assigned identifiers or composite keys!</emphasis>"
+msgstr "L'attribut <literal>access</literal> permet de contrôler comment Hibernate accèdera à la propriété à l'exécution. Par défaut, Hibernate utilisera les méthodes set/get. Si vous indiquez <literal>access=\"field\"</literal>, Hibernate ignorera les getter/setter et accèdera à la propriété directement en utilisant la réflexion. Vous pouvez spécifier votre propre stratégie d'accès aux propriété en donnant une classe qui implémente l'interface <literal>org.hibernate.property.PropertyAccessor</literal>."
+
+#: index.docbook:1204
+msgid "timestamp (optional)"
+msgstr "Une fonctionnalité particulièrement intéressante est les propriétés dérivées. Ces propriétés sont par définition en lecture seule, la valeur de la propriété est calculée au chargement. Le calcul est déclaré comme une expression SQL, qui se traduit par une sous-requête <literal>SELECT</literal> dans la requête SQL qui charge une instance :"
+
+#: index.docbook:1206
+msgid "The optional <literal><timestamp></literal> element indicates that the table contains timestamped data. This is intended as an alternative to versioning. Timestamps are by nature a less safe implementation of optimistic locking. However, sometimes the application might use the timestamps in other ways."
+msgstr ""
+ "<![CDATA[\n"
+ "<property name=\"totalPrice\"\n"
+ " formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p\n"
+ " WHERE li.productId = p.productId\n"
+ " AND li.customerId = customerId\n"
+ " AND li.orderNumber = orderNumber )\"/>]]>"
+
+#: index.docbook:1222
+msgid ""
+ "<![CDATA[<timestamp\n"
+ " column=\"timestamp_column\"\n"
+ " name=\"propertyName\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|undefined\"\n"
+ " source=\"vm|db\"\n"
+ " generated=\"never|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr "Remarquez que vous pouvez référencer la propre table des entités en ne déclarant pas un alias sur une colonne particulière (<literal>customerId</literal> dans l'exemple donné). Notez aussi que vous pouvez utiliser le sous-élément de mapping <literal><formula></literal> plutôt que d'utiliser l'attribut si vous le souhaitez."
+
+#: index.docbook:1225
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of a column holding the timestamp."
+msgstr "many-to-one"
+
+#: index.docbook:1231
+msgid "<literal>name</literal>: The name of a JavaBeans style property of Java type <literal>Date</literal> or <literal>Timestamp</literal> of the persistent class."
+msgstr "Une association ordinaire vers une autre classe persistante est déclarée en utilisant un élément <literal>many-to-one</literal>. Le modèle relationnel est une association de type many-to-one : une clef étrangère dans une table référence la ou les clef(s) primaire(s) dans la table cible."
+
+#: index.docbook:1244
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>null</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr "<literal>name</literal> : Nom de la propriété."
+
+#: index.docbook:1253
+msgid "<literal>source</literal> (optional - defaults to <literal>vm</literal>): From where should Hibernate retrieve the timestamp value? From the database, or from the current JVM? Database-based timestamps incur an overhead because Hibernate must hit the database in order to determine the \"next value\", but will be safer for use in clustered environments. Note also, that not all <literal>Dialect</literal>s are known to support retrieving of the database's current timestamp, while others might be unsafe for usage in locking due to lack of precision (Oracle 8 for example)."
+msgstr "<literal>column</literal> (optionnel) : Le nom de la clef étrangère. Cela peut être aussi indiqué avec le sous-élément <literal><column></literal>."
+
+#: index.docbook:1265
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this timestamp property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "<literal>class</literal> (optionnel - par défaut le type de la propriété déterminé par réflexion) : Le nom de la classe associée."
+
+#: index.docbook:1274
+msgid "Note that <literal><timestamp></literal> is equivalent to <literal><version type=\"timestamp\"></literal>. And <literal><timestamp source=\"db\"></literal> is equivalent to <literal><version type=\"dbtimestamp\"></literal>"
+msgstr "<literal>cascade</literal> (optionnel) : Indique quelles opérations doivent être propagées de l'objet père vers les objets associés."
+
+#: index.docbook:1284
+msgid "property"
+msgstr "<literal>fetch</literal> (optionnel - par défaut à <literal>select</literal>) : Choisit entre le chargement de type outer-join ou le chargement par select successifs."
+
+#: index.docbook:1286
+msgid "The <literal><property></literal> element declares a persistent, JavaBean style property of the class."
+msgstr "<literal>update, insert</literal> (optionnel - par défaut à <literal>true</literal>) : indique que les colonnes mappées devraient être incluses dans des <literal>UPDATE</literal> SQL et/ou des <literal>INSERT</literal>. Mettre les deux à <literal>false</literal> empêche la propagation en base de données (utile si vous savez qu'un trigger affectera la valeur à la colonne)."
+
+#: index.docbook:1308
+msgid ""
+ "<![CDATA[<property\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " type=\"typename\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " generated=\"never|insert|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ "/>]]>"
+msgstr "<literal>property-ref</literal> : (optionnel) Le nom d'une propriété de la classe associée qui est liée à cette clef étrangère. Si ce n'est pas spécifié, la clef primaire de la classe associée est utilisée."
+
+#: index.docbook:1311
+msgid "<literal>name</literal>: the name of the property, with an initial lowercase letter."
+msgstr "<literal>access</literal> (optionnel - par défaut à <literal>property</literal>) : La stratégie à utiliser par Hibernate pour accéder à la valeur de cette propriété."
+
+#: index.docbook:1317
+msgid "<literal>column</literal> (optional - defaults to the property name): the name of the mapped database table column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr "<literal>unique</literal> (optionnel) : Génère le DDL d'une contrainte d'unicité pour la clef étrangère. Permet aussi d'en faire la cible d'un <literal>property-ref</literal>. Cela permet de créer une véritable association one-to-one."
+
+#: index.docbook:1324
+msgid "<literal>type</literal> (optional): a name that indicates the Hibernate type."
+msgstr "<literal>not-null</literal> (optionnel) : Génère le DDL pour une contrainte de non nullité pour la clef étrangère."
+
+#: index.docbook:1329
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) : specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" property whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr "<literal>optimistic-lock</literal> (optionnel - par défaut à <literal>true</literal>) : Indique que les mises à jour de cette propriété requièrent ou non l'acquisition d'un verrou optimiste. En d'autres termes, détermine si un incrément de version doit avoir lieu quand la propriété est marquée obsolète (dirty)."
+
+#: index.docbook:1338
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> property. Computed properties do not have a column mapping of their own."
+msgstr "<literal>lazy</literal> (optionnel - par défaut à <literal>false</literal>) : Indique que cette propriété doit être chargée en différé (lazy loading) au premier accès à la variable d'instance (nécessite une instrumentation du bytecode lors de la phase de construction). Remarquez que cela n'influence pas le comportement du proxy Hibernate - comme l'attribut <literal>lazy</literal> sur des classes ou des mappings de collections, mais utilise l'interception pour le chargement différé. <literal>lazy=\"false\"</literal> indique que l'association sera toujours chargée."
+
+#: index.docbook:1351
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr "<literal>entity-name</literal> (optionnel) : Le nom de l'entité de la classe associée."
+
+#: index.docbook:1358
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the columns. Also, allow this to be the target of a <literal>property-ref</literal>."
+msgstr "<literal>formula</literal> (optionnel) : une expression SQL qui définit la valeur pour une clé étrangère calculée."
+
+#: index.docbook:1365
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the columns."
+msgstr "Donner une valeur significative à l'attribut <literal>cascade</literal> autre que <literal>none</literal> propagera certaines opérations à l'objet associé. Les valeurs significatives sont les noms des opérations Hibernate basiques, <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal>, ainsi que les valeurs spéciales <literal>delete-orphan</literal> et <literal>all</literal> et des combinaisons de noms d'opérations séparées par des virgules, comme par exemple <literal>cascade=\"persist,merge,evict\"</literal> ou <literal>cascade=\"all,delete-orphan\"</literal>. Voir <xref linkend=\"objectstate-transitive\"/> pour une explication complète. Notez que les assocations many-to-one et one-to-one ne supportent pas orphan delete."
+
+#: index.docbook:1371
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr "Une déclaration <literal>many-to-one</literal> typique est aussi simple que :"
+
+#: index.docbook:1379
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "<![CDATA[<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>]]>"
+
+#: index.docbook:1388
+msgid "<emphasis>typename</emphasis> could be:"
+msgstr "L'attribut <literal>property-ref</literal> devrait être utilisé pour mapper seulement des données provenant d'un ancien système où les clefs étrangères font référence à une clef unique de la table associée et qui n'est pas la clef primaire. C'est un cas de mauvaise conception relationnelle. Par exemple, supposez que la classe <literal>Product</literal> a un numéro de série unique qui n'est pas la clef primaire. (L'attribut <literal>unique</literal> contrôle la génération DDL par Hibernate avec l'outil SchemaExport.)"
+
+#: index.docbook:1394
+msgid "The name of a Hibernate basic type (eg. <literal>integer, string, character, date, timestamp, float, binary, serializable, object, blob</literal>)."
+msgstr "<![CDATA[<property name=\"serialNumber\" unique=\"true\" type=\"string\" column=\"SERIAL_NUMBER\"/>]]>"
+
+#: index.docbook:1400
+msgid "The name of a Java class with a default basic type (eg. <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal>)."
+msgstr "Ainsi le mapping pour <literal>OrderItem</literal> peut utiliser :"
+
+#: index.docbook:1406
+msgid "The name of a serializable Java class."
+msgstr "<![CDATA[<many-to-one name=\"product\" property-ref=\"serialNumber\" column=\"PRODUCT_SERIAL_NUMBER\"/>]]>"
+
+#: index.docbook:1411
+msgid "The class name of a custom type (eg. <literal>com.illflow.type.MyCustomType</literal>)."
+msgstr "bien que ce ne soit certainement pas encouragé."
+
+#: index.docbook:1417
+msgid "If you do not specify a type, Hibernate will use reflection upon the named property to take a guess at the correct Hibernate type. Hibernate will try to interpret the name of the return class of the property getter using rules 2, 3, 4 in that order. However, this is not always enough. In certain cases you will still need the <literal>type</literal> attribute. (For example, to distinguish between <literal>Hibernate.DATE</literal> and <literal>Hibernate.TIMESTAMP</literal>, or to specify a custom type.)"
+msgstr "Si la clef unique référencée comprend des propriétés multiples de l'entité associée, vous devez mapper ces propriétés à l'intérieur d'un élément <literal><properties></literal>."
+
+#: index.docbook:1427
+msgid "The <literal>access</literal> attribute lets you control how Hibernate will access the property at runtime. By default, Hibernate will call the property get/set pair. If you specify <literal>access=\"field\"</literal>, Hibernate will bypass the get/set pair and access the field directly, using reflection. You may specify your own strategy for property access by naming a class that implements the interface <literal>org.hibernate.property.PropertyAccessor</literal>."
+msgstr "one-to-one"
+
+#: index.docbook:1436
+msgid "An especially powerful feature are derived properties. These properties are by definition read-only, the property value is computed at load time. You declare the computation as a SQL expression, this translates to a <literal>SELECT</literal> clause subquery in the SQL query that loads an instance:"
+msgstr "Une association one-to-one vers une autre classe persistante est déclarée avec l'élément <literal>one-to-one</literal>."
+
+#: index.docbook:1443
+msgid ""
+ "<![CDATA[\n"
+ "<property name=\"totalPrice\"\n"
+ " formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p\n"
+ " WHERE li.productId = p.productId\n"
+ " AND li.customerId = customerId\n"
+ " AND li.orderNumber = orderNumber )\"/>]]>"
+msgstr ""
+ "<![CDATA[<one-to-one\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " constrained=\"true|false\"\n"
+ " fetch=\"join|select\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " formula=\"any SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ "/>]]>"
+
+#: index.docbook:1445
+msgid "Note that you can reference the entities own table by not declaring an alias on a particular column (<literal>customerId</literal> in the given example). Also note that you can use the nested <literal><formula></literal> mapping element if you don't like to use the attribute."
+msgstr "<literal>name</literal> : Le nom de la propriété."
+
+#: index.docbook:1455
+msgid "many-to-one"
+msgstr "<literal>class</literal> (optionnel - par défaut du type de la propriété déterminé par réflexion) : Le nom de la classe associée."
+
+#: index.docbook:1457
+msgid "An ordinary association to another persistent class is declared using a <literal>many-to-one</literal> element. The relational model is a many-to-one association: a foreign key in one table is referencing the primary key column(s) of the target table."
+msgstr "<literal>cascade</literal> (optionnel) : Indique quelles opérations doivent être cascadées de l'objet père vers l'objet associé."
+
+#: index.docbook:1485
+msgid ""
+ "<![CDATA[<many-to-one\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " fetch=\"join|select\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr "<literal>constrained</literal> (optionnel) : Indique qu'une contrainte de clef étrangère sur la clef primaire de la table mappée référence la table de la classe associée. Cette option affecte l'ordre dans lequel chaque <literal>save()</literal> et chaque <literal>delete()</literal> sont cascadés et détermine si l'association peut utiliser un proxy (aussi utilisé par l'outil d'export de schéma)."
+
+#: index.docbook:1488, index.docbook:1669, index.docbook:1855
+msgid "<literal>name</literal>: The name of the property."
+msgstr "<literal>fetch</literal> (optionnel - par défaut à <literal>select</literal>) : Choisit entre récupération par jointure externe ou select séquentiel."
+
+#: index.docbook:1493, index.docbook:2284
+msgid "<literal>column</literal> (optional): The name of the foreign key column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr "<literal>property-ref</literal> (optionnel) : Le nom de la propriété de la classe associée qui est jointe à la clef primaire de cette classe. Si ce n'est pas spécifié, la clef primaire de la classe associée est utilisée."
+
+#: index.docbook:1500, index.docbook:1674
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the associated class."
+msgstr "<literal>access</literal> (optionnel - par défaut à <literal>property</literal>) : La stratégie à utiliser par Hibernate pour accéder à la valeur de la propriété."
+
+#: index.docbook:1506
+msgid "<literal>cascade</literal> (optional): Specifies which operations should be cascaded from the parent object to the associated object."
+msgstr "<literal>formula</literal> (optionnel) : Presque toutes les associations one-to-one pointent sur la clef primaire de l'entité propriétaire. Dans les rares cas différents, vous devez donner une ou plusieurs autres colonnes ou expression à joindre par une formule SQL (voir <literal>org.hibernate.test.onetooneformula</literal> pour un exemple)."
+
+#: index.docbook:1512, index.docbook:1695
+msgid "<literal>fetch</literal> (optional - defaults to <literal>select</literal>): Chooses between outer-join fetching or sequential select fetching."
+msgstr "<literal>lazy</literal> (optionnel - par défaut <literal>proxy</literal>) : Par défaut, les associations simples sont soumise à proxy. <literal>lazy=\"no-proxy\"</literal> spécifie que la propriété doit être chargée à la demande au premier accès à l'instance. (nécessite l'intrumentation du bytecode à la construction). <literal>lazy=\"false\"</literal> indique que l'association sera toujours chargée agressivement. <emphasis>Notez que si <literal>constrained=\"false\"</literal>, l'utilisation de proxy est impossible et Hibernate chargera automatiquement l'association !</emphasis>"
+
+#: index.docbook:1518
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" association whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr "<literal>entity-name</literal> (optional) : The entity name of the associated class."
+
+#: index.docbook:1527
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class is used."
+msgstr "Il existe deux types d'associations one-to-one :"
+
+#: index.docbook:1540
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. Also, allow this to be the target of a <literal>property-ref</literal>. This makes the association multiplicity effectively one to one."
+msgstr "association par clef étrangère unique"
+
+#: index.docbook:1548
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the foreign key columns."
+msgstr "Les associations par clef primaire ne nécessitent pas une colonne supplémentaire en table ; si deux lignes sont liés par l'association alors les deux lignes de la table partagent la même valeur de clef primaire. Donc si vous voulez que deux objets soient liés par une association par clef primaire, vous devez faire en sorte qu'on leur assigne la même valeur d'identifiant !"
+
+#: index.docbook:1554
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, dertermines if a version increment should occur when this property is dirty."
+msgstr "Pour une association par clef primaire, ajoutez les mappings suivants à <literal>Employee</literal> et <literal>Person</literal>, respectivement."
+
+#: index.docbook:1562
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched."
+msgstr "<![CDATA[<one-to-one name=\"person\" class=\"Person\"/>]]>"
+
+#: index.docbook:1572
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>]]>"
+
+#: index.docbook:1579, index.docbook:1733
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class."
+msgstr "Maintenant, vous devez faire en sorte que les clefs primaires des lignes liées dans les tables PERSON et EMPLOYEE sont égales. On utilise une stratégie Hibernate spéciale de génération d'identifiants appelée <literal>foreign</literal> :"
+
+#: index.docbook:1585
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> foreign key."
+msgstr ""
+ "<![CDATA[<class name=\"person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">employee</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " ...\n"
+ " <one-to-one name=\"employee\"\n"
+ " class=\"Employee\"\n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:1592
+msgid "Setting a value of the <literal>cascade</literal> attribute to any meaningful value other than <literal>none</literal> will propagate certain operations to the associated object. The meaningful values are the names of Hibernate's basic operations, <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal>, as well as the special values <literal>delete-orphan</literal> and <literal>all</literal> and comma-separated combinations of operation names, for example, <literal>cascade=\"persist,merge,evict\"</literal> or <literal>cascade=\"all,delete-orphan\"</literal>. See <xref linkend=\"objectstate-transitive\"/> for a full explanation. Note that single valued associations (many-to-one and one-to-one associations) do not support orphan delete."
+msgstr "Une instance fraîchement enregistrée de <literal>Person</literal> se voit alors assignée la même valeur de clef primaire que l'instance de <literal>Employee</literal> référencée par la propriété <literal>employee</literal> de cette <literal>Person</literal>."
+
+#: index.docbook:1605
+msgid "A typical <literal>many-to-one</literal> declaration looks as simple as this:"
+msgstr "Alternativement, une clef étrangère avec contrainte d'unicité de <literal>Employee</literal> vers <literal>Person</literal> peut être indiquée ainsi :"
+
+#: index.docbook:1609
+msgid "<![CDATA[<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" unique=\"true\"/>]]>"
+
+#: index.docbook:1611
+msgid "The <literal>property-ref</literal> attribute should only be used for mapping legacy data where a foreign key refers to a unique key of the associated table other than the primary key. This is an ugly relational model. For example, suppose the <literal>Product</literal> class had a unique serial number, that is not the primary key. (The <literal>unique</literal> attribute controls Hibernate's DDL generation with the SchemaExport tool.)"
+msgstr "Et cette association peut être rendue bidirectionnelle en ajoutant ceci au mapping de <literal>Person</literal> :"
+
+#: index.docbook:1620
+msgid "<![CDATA[<property name=\"serialNumber\" unique=\"true\" type=\"string\" column=\"SERIAL_NUMBER\"/>]]>"
+msgstr "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" property-ref=\"person\"/>]]>"
+
+#: index.docbook:1622
+msgid "Then the mapping for <literal>OrderItem</literal> might use:"
+msgstr "natural-id"
+
+#: index.docbook:1626
+msgid "<![CDATA[<many-to-one name=\"product\" property-ref=\"serialNumber\" column=\"PRODUCT_SERIAL_NUMBER\"/>]]>"
+msgstr ""
+ "<![CDATA[<natural-id mutable=\"true|false\"/>\n"
+ " <property ... />\n"
+ " <many-to-one ... />\n"
+ " ......\n"
+ "</natural-id>]]>"
+
+#: index.docbook:1628
+msgid "This is certainly not encouraged, however."
+msgstr "Bien que nous recommandions l'utilisation de clé primaire générée, vous devriez toujours essayer d'identifier des clé métier (naturelles) pour toutes vos entités. Une clé naturelle est une propriété ou une combinaison de propriétés uniques et non nulles. Si elle est aussi immuable, c'est encore mieux. Mappez les propriétés de la clé naturelle dans l'élément <literal><natural-id></literal>. Hibernate générera la clé unique nécessaire et les contraintes de non-nullité, et votre mapping s'auto-documentera."
+
+#: index.docbook:1632
+msgid "If the referenced unique key comprises multiple properties of the associated entity, you should map the referenced properties inside a named <literal><properties></literal> element."
+msgstr "Nous vous recommandons fortement d'implémenter <literal>equals()</literal> et <literal>hashCode()</literal> pour comparer les clés naturelles de l'entité."
+
+#: index.docbook:1637
+msgid "If the referenced unique key is the property of a component, you may specify a property path:"
+msgstr "Ce mapping n'est pas destiné à être utilisé avec des entités qui ont des clés naturelles."
+
+#: index.docbook:1641
+msgid "<![CDATA[<many-to-one name=\"owner\" property-ref=\"identity.ssn\" column=\"OWNER_SSN\"/>]]>"
+msgstr "<literal>mutable</literal> (optionel, par défaut à <literal>false</literal>) : Par défaut, les identifiants naturels sont supposés être immuable (constants)."
+
+#: index.docbook:1646
+msgid "one-to-one"
+msgstr "component, dynamic-component"
+
+#: index.docbook:1648
+msgid "A one-to-one association to another persistent class is declared using a <literal>one-to-one</literal> element."
+msgstr "L'élément <literal><component></literal> mappe les propriétés d'un objet fils aux colonnes d'une classe parente. Les composants peuvent en retour déclarer leurs propres propriétés, composants ou collections. Voir \"Components\" plus bas."
+
+#: index.docbook:1666
+msgid ""
+ "<![CDATA[<one-to-one\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " constrained=\"true|false\"\n"
+ " fetch=\"join|select\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " formula=\"any SQL expression\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr ""
+ "<![CDATA[<component \n"
+ " name=\"propertyName\" \n"
+ " class=\"className\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ ">\n"
+ " \n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</component>]]>"
+
+#: index.docbook:1680
+msgid "<literal>cascade</literal> (optional) specifies which operations should be cascaded from the parent object to the associated object."
+msgstr "<literal>insert</literal> : Est ce que les colonnes mappées apparaissent dans les <literal>INSERT</literal>s ?"
+
+#: index.docbook:1686
+msgid "<literal>constrained</literal> (optional) specifies that a foreign key constraint on the primary key of the mapped table references the table of the associated class. This option affects the order in which <literal>save()</literal> and <literal>delete()</literal> are cascaded, and determines whether the association may be proxied (it is also used by the schema export tool)."
+msgstr "<literal>update</literal>: Est ce que les colonnes mappées apparaissent dans les <literal>UPDATE</literal>s ?"
+
+#: index.docbook:1701
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to the primary key of this class. If not specified, the primary key of the associated class is used."
+msgstr "<literal>lazy</literal> (optionnel - par défaut à <literal>false</literal>) : Indique que ce composant doit être chargé au premier accès à la variable d'instance (nécessite une instrumentation du bytecode au moment du build)."
+
+#: index.docbook:1714
+msgid "<literal>formula</literal> (optional): Almost all one to one associations map to the primary key of the owning entity. In the rare case that this is not the case, you may specify a some other column, columns or expression to join on using an SQL formula. (See <literal>org.hibernate.test.onetooneformula</literal> for an example.)"
+msgstr "<literal>unique</literal> (optionnel - par défaut à <literal>false</literal>) : Indique qu'une contrainte d'unicité existe sur toutes les colonnes mappées de ce composant."
+
+#: index.docbook:1722
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched. <emphasis>Note that if <literal>constrained=\"false\"</literal>, proxying is impossible and Hibernate will eager fetch the association!</emphasis>"
+msgstr "Les tags fils <literal><property></literal> mappent les propriétés de la classe fille sur les colonnes de la table."
+
+#: index.docbook:1740
+msgid "There are two varieties of one-to-one association:"
+msgstr "L'élément <literal><dynamic-component></literal> permet à une <literal>Map</literal> d'être mappée comme un composant, quand les noms de la propriété font référence aux clefs de cette Map, voir <xref linkend=\"components-dynamic\"/>."
+
+#: index.docbook:1744
+msgid "primary key associations"
+msgstr "properties"
+
+#: index.docbook:1747
+msgid "unique foreign key associations"
+msgstr "L'élément <literal><properties></literal> permet la définition d'un groupement logique nommé des propriétés d'une classe. L'utilisation la plus importante de cette construction est la possibilité pour une combinaison de propriétés d'être la cible d'un <literal>property-ref</literal>. C'est aussi un moyen pratique de définir une contrainte d'unicité multi-colonnes."
+
+#: index.docbook:1752
+msgid "Primary key associations don't need an extra table column; if two rows are related by the association then the two table rows share the same primary key value. So if you want two objects to be related by a primary key association, you must make sure that they are assigned the same identifier value!"
+msgstr ""
+ "<![CDATA[<properties \n"
+ " name=\"logicalName\" \n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ ">\n"
+ " \n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</properties>]]>"
+
+#: index.docbook:1759
+msgid "For a primary key association, add the following mappings to <literal>Employee</literal> and <literal>Person</literal>, respectively."
+msgstr "<literal>name</literal> : Le nom logique d'un regroupement et <emphasis>non</emphasis> le véritable nom d'une propriété."
+
+#: index.docbook:1764
+msgid "<![CDATA[<one-to-one name=\"person\" class=\"Person\"/>]]>"
+msgstr "<literal>insert</literal> : Est-ce que les colonnes mappées apparaissent dans les <literal>INSERT</literal>s ?"
+
+#: index.docbook:1765
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>]]>"
+msgstr "<literal>update</literal> : Est-ce que les colonnes mappées apparaissent dans les <literal>UPDATE</literal>s ?"
+
+#: index.docbook:1767
+msgid "Now we must ensure that the primary keys of related rows in the PERSON and EMPLOYEE tables are equal. We use a special Hibernate identifier generation strategy called <literal>foreign</literal>:"
+msgstr "<literal>optimistic-lock</literal> (optionnel - par défaut à <literal>true</literal>) : Indique que les mises à jour sur ce composant nécessitent ou non l'acquisition d'un verrou optimiste. En d'autres termes, cela détermine si une incrémentation de version doit avoir lieu quand la propriété est marquée obsolète (dirty)."
+
+#: index.docbook:1773
+msgid ""
+ "<![CDATA[<class name=\"person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">employee</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " ...\n"
+ " <one-to-one name=\"employee\"\n"
+ " class=\"Employee\"\n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr "<literal>unique</literal> (optionnel - par défaut à <literal>false</literal>) : Indique qu'une contrainte d'unicité existe sur toutes les colonnes mappées de ce composant."
+
+#: index.docbook:1775
+msgid "A newly saved instance of <literal>Person</literal> is then assigned the same primary key value as the <literal>Employee</literal> instance refered with the <literal>employee</literal> property of that <literal>Person</literal>."
+msgstr "Par exemple, si nous avons le mapping de <literal><properties></literal> suivant :"
+
+#: index.docbook:1781
+msgid "Alternatively, a foreign key with a unique constraint, from <literal>Employee</literal> to <literal>Person</literal>, may be expressed as:"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"personNumber\"/>\n"
+ " ...\n"
+ " <properties name=\"name\" \n"
+ " unique=\"true\" update=\"false\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </properties>\n"
+ "</class>]]>"
+
+#: index.docbook:1786
+msgid "<![CDATA[<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" unique=\"true\"/>]]>"
+msgstr "Alors nous pourrions avoir une association sur des données d'un ancien système (legacy) qui font référence à cette clef unique de la table <literal>Person</literal> au lieu de la clef primaire :"
+
+#: index.docbook:1788
+msgid "And this association may be made bidirectional by adding the following to the <literal>Person</literal> mapping:"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"person\" \n"
+ " class=\"Person\" property-ref=\"name\">\n"
+ " <column name=\"firstName\"/>\n"
+ " <column name=\"initial\"/>\n"
+ " <column name=\"lastName\"/>\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:1793
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" property-ref=\"person\"/>]]>"
+msgstr "Nous ne recommandons pas l'utilisation de ce genre de chose en dehors du contexte de mapping de données héritées d'anciens systèmes."
+
+#: index.docbook:1798
+msgid "natural-id"
+msgstr "subclass"
+
+#: index.docbook:1800
+msgid ""
+ "<![CDATA[<natural-id mutable=\"true|false\"/>\n"
+ " <property ... />\n"
+ " <many-to-one ... />\n"
+ " ......\n"
+ "</natural-id>]]>"
+msgstr "Pour finir, la persistance polymorphique nécessite la déclaration de chaque sous-classe de la classe persistante de base. pour la stratégie de mapping de type table-per-class-hierarchy, on utilise la déclaration <literal><subclass></literal>."
+
+#: index.docbook:1802
+msgid "Even though we recommend the use of surrogate keys as primary keys, you should still try to identify natural keys for all entities. A natural key is a property or combination of properties that is unique and non-null. If it is also immutable, even better. Map the properties of the natural key inside the <literal><natural-id></literal> element. Hibernate will generate the necessary unique key and nullability constraints, and your mapping will be more self-documenting."
+msgstr ""
+ "<![CDATA[<subclass\n"
+ " name=\"ClassName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " extends=\"SuperclassName\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</subclass>]]>"
+
+#: index.docbook:1811
+msgid "We strongly recommend that you implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the natural key properties of the entity."
+msgstr "<literal>name</literal> : Le nom complet de la sous-classe."
+
+#: index.docbook:1816
+msgid "This mapping is not intended for use with entities with natural primary keys."
+msgstr "<literal>discriminator-value</literal> (optionnel - par défaut le nom de la classe) : une valeur qui distingue les différentes sous-classes."
+
+#: index.docbook:1822
+msgid "<literal>mutable</literal> (optional, defaults to <literal>false</literal>): By default, natural identifier properties as assumed to be immutable (constant)."
+msgstr "<literal>proxy</literal> (optionnel) : Indique une classe ou interface à utiliser pour les chargements à la demande des proxies (lazy)."
+
+#: index.docbook:1832
+msgid "component, dynamic-component"
+msgstr "<literal>lazy</literal> (optionnel, par défaut à <literal>true</literal>) : Spécifier <literal>lazy=\"false\"</literal> désactive l'utilisation du chargement à la demande (lazy)."
+
+#: index.docbook:1834
+msgid "The <literal><component></literal> element maps properties of a child object to columns of the table of a parent class. Components may, in turn, declare their own properties, components or collections. See \"Components\" below."
+msgstr "Chaque sous-classe devrait déclarer ses propres propriétés persistantes et sous-classes. Les propriétés <literal><version></literal> et <literal><id></literal> sont implicitement hérités de la classe de base. Chaque sous-classe dans une hiérarchie doit définir une unique <literal>discriminator-value</literal>. Si aucune n'est spécifiée, le nom complet de la classe Java est utilisé."
+
+#: index.docbook:1852
+msgid ""
+ "<![CDATA[<component\n"
+ " name=\"propertyName\"\n"
+ " class=\"className\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</component>]]>"
+msgstr "Pour plus d'infos sur le mapping d'héritage, voir <xref linkend=\"inheritance\"/>."
+
+#: index.docbook:1860
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the component (child) class."
+msgstr "Pour des informations sur les mappings d'héritage, voir <xref linkend=\"inheritance\"/>."
+
+#: index.docbook:1866, index.docbook:1955
+msgid "<literal>insert</literal>: Do the mapped columns appear in SQL <literal>INSERT</literal>s?"
+msgstr "joined-subclass"
+
+#: index.docbook:1872, index.docbook:1961
+msgid "<literal>update</literal>: Do the mapped columns appear in SQL <literal>UPDATE</literal>s?"
+msgstr "Une autre façon possible de faire est la suivante, chaque sous-classe peut être mappée vers sa propre table (stratégie de mapping de type table-per-subclass). L'état hérité est récupéré en joignant la table de la super-classe. L'élément <literal><joined-subclass></literal> est utilisé."
+
+#: index.docbook:1884
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this component should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr "<literal>name</literal> : Le nom Java complet de la sous-classe."
+
+#: index.docbook:1891
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this component do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr "<literal>table</literal> : Le nom de la table de la sous-classe."
+
+#: index.docbook:1899, index.docbook:1975
+msgid "<literal>unique</literal> (optional - defaults to <literal>false</literal>): Specifies that a unique constraint exists upon all mapped columns of the component."
+msgstr "<literal>proxy</literal> (optionnel) : Indique une classe ou interface pour le chargement différé des proxies."
+
+#: index.docbook:1908
+msgid "The child <literal><property></literal> tags map properties of the child class to table columns."
+msgstr "<literal>lazy</literal> (optionnel, par défaut à <literal>true</literal>) : Indiquer <literal>lazy=\"false\"</literal> désactive l'utilisation du chargement à la demande."
+
+#: index.docbook:1913
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr "Aucune colonne discriminante n'est nécessaire pour cette stratégie de mapping. Cependant, chaque sous-classe doit déclarer une colonne de table contenant l'objet identifiant qui utilise l'élément <literal><key></literal>. Le mapping au début de ce chapitre serait ré-écrit ainsi :"
+
+#: index.docbook:1919
+msgid "The <literal><dynamic-component></literal> element allows a <literal>Map</literal> to be mapped as a component, where the property names refer to keys of the map, see <xref linkend=\"components-dynamic\"/>."
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" table=\"CATS\">\n"
+ " <id name=\"id\" column=\"uid\" type=\"long\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " <property name=\"birthdate\" type=\"date\"/>\n"
+ " <property name=\"color\" not-null=\"true\"/>\n"
+ " <property name=\"sex\" not-null=\"true\"/>\n"
+ " <property name=\"weight\"/>\n"
+ " <many-to-one name=\"mate\"/>\n"
+ " <set name=\"kittens\">\n"
+ " <key column=\"MOTHER\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ " <joined-subclass name=\"DomesticCat\" table=\"DOMESTIC_CATS\">\n"
+ " <key column=\"CAT\"/>\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </joined-subclass>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"eg.Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:1928
+msgid "properties"
+msgstr "Pour des informations sur les mappings d'héritage, voir <xref linkend=\"inheritance\"/>."
+
+#: index.docbook:1930
+msgid "The <literal><properties></literal> element allows the definition of a named, logical grouping of properties of a class. The most important use of the construct is that it allows a combination of properties to be the target of a <literal>property-ref</literal>. It is also a convenient way to define a multi-column unique constraint."
+msgstr "union-subclass"
+
+#: index.docbook:1946
+msgid ""
+ "<![CDATA[<properties\n"
+ " name=\"logicalName\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</properties>]]>"
+msgstr "Une troisième option est de seulement mapper vers des tables les classes concrètes d'une hiérarchie d'héritage, (stratégie de type table-per-concrete-class) où chaque table définit tous les états persistants de la classe, y compris les états hérités. Dans Hibernate il n'est absolument pas nécessaire de mapper explicitement de telles hiérarchies d'héritage. Vous pouvez simplement mapper chaque classe avec une déclaration <literal><class></literal> différente. Cependant, si vous souhaitez utiliser des associations polymorphiques (cà d une association vers la superclasse de la hiérarchie), vous devez utiliser le mapping <literal><union-subclass></literal>."
+
+#: index.docbook:1949
+msgid "<literal>name</literal>: The logical name of the grouping - <emphasis>not</emphasis> an actual property name."
+msgstr ""
+ "<![CDATA[<union-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " abstract=\"true|false\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</union-subclass>]]>"
+
+#: index.docbook:1967
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to these properties do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when these properties are dirty."
+msgstr "<literal>proxy</literal> (optionnel) : Indique une classe ou interface pour le chargement différé des proxies."
+
+#: index.docbook:1984
+msgid "For example, if we have the following <literal><properties></literal> mapping:"
+msgstr "Aucune colonne discriminante ou colonne clef n'est requise pour cette stratégie de mapping."
+
+#: index.docbook:1988
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"personNumber\"/>\n"
+ " ...\n"
+ " <properties name=\"name\"\n"
+ " unique=\"true\" update=\"false\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </properties>\n"
+ "</class>]]>"
+msgstr "Pour des informations sur les mappings d'héritage, voir <xref linkend=\"inheritance\"/>."
+
+#: index.docbook:1990
+msgid "Then we might have some legacy data association which refers to this unique key of the <literal>Person</literal> table, instead of to the primary key:"
+msgstr "join"
+
+#: index.docbook:1995
+msgid ""
+ "<![CDATA[<many-to-one name=\"person\"\n"
+ " class=\"Person\" property-ref=\"name\">\n"
+ " <column name=\"firstName\"/>\n"
+ " <column name=\"initial\"/>\n"
+ " <column name=\"lastName\"/>\n"
+ "</many-to-one>]]>"
+msgstr "En utilisant l'élément <literal><join></literal>, il est possible de mapper des propriétés d'une classe sur plusieurs tables."
+
+#: index.docbook:1997
+msgid "We don't recommend the use of this kind of thing outside the context of mapping legacy data."
+msgstr ""
+ "<![CDATA[<join\n"
+ " table=\"tablename\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " fetch=\"join|select\"\n"
+ " inverse=\"true|false\"\n"
+ " optionnel=\"true|false\">\n"
+ " \n"
+ " <key ... />\n"
+ " \n"
+ " <property ... />\n"
+ " ...\n"
+ "</join>]]>"
+
+#: index.docbook:2005
+msgid "subclass"
+msgstr "<literal>table</literal> : Le nom de la table jointe."
+
+#: index.docbook:2007
+msgid "Finally, polymorphic persistence requires the declaration of each subclass of the root persistent class. For the table-per-class-hierarchy mapping strategy, the <literal><subclass></literal> declaration is used."
+msgstr "<literal>schema</literal> (optionnel) : court-circuite le nom de schéma spécifié par l'élément de base <literal><hibernate-mapping></literal>."
+
+#: index.docbook:2020
+msgid ""
+ "<![CDATA[<subclass\n"
+ " name=\"ClassName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " extends=\"SuperclassName\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</subclass>]]>"
+msgstr "<literal>catalog</literal> (optionnel) : court-circuite le nom de catalogue spécifié par l'élément de base <literal><hibernate-mapping></literal>."
+
+#: index.docbook:2023, index.docbook:2081, index.docbook:2144
+msgid "<literal>name</literal>: The fully qualified class name of the subclass."
+msgstr "<literal>fetch</literal> (optionnel - par défaut à <literal>join</literal>) : Si positionné à <literal>join</literal>, Hibernate utilisera une jointure interne pour charger une <literal>jointure</literal> définie par une classe ou ses super-classes et une jointure externe pour une <literal><jointure></literal> définie par une sous-classe. Si positionné à <literal>select</literal> alors Hibernate utilisera un select séquentiel pour une <literal><jointure></literal> définie sur une sous-classe, qui ne sera délivrée que si une ligne se représente une instance de la sous-classe. Les jointures internes seront quand même utilisées pour charger une <literal><jointure></literal> définie par une classe et ses super-classes."
+
+#: index.docbook:2028
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses."
+msgstr "<literal>inverse</literal> (optionnel - par défaut à <literal>false</literal>) : Si positionné à true, Hibernate n'essaiera pas d'insérer ou de mettre à jour les propriétés définies par cette jointure."
+
+#: index.docbook:2034, index.docbook:2091, index.docbook:2154
+msgid "<literal>proxy</literal> (optional): Specifies a class or interface to use for lazy initializing proxies."
+msgstr "<literal>optionnel</literal> (optionnel - par défaut à <literal>false</literal>) : Si positionné à true, Hibernate insèrera une ligne seulement si les propriétés définies par cette jointure sont non-nulles et utilisera toujours une jointure externe pour charger les propriétés."
+
+#: index.docbook:2040, index.docbook:2097, index.docbook:2160
+msgid "<literal>lazy</literal> (optional, defaults to <literal>true</literal>): Setting <literal>lazy=\"false\"</literal> disables the use of lazy fetching."
+msgstr "Par exemple, les informations d'adresse pour une personne peuvent être mappées vers une table séparée (tout en préservant des sémantiques de type valeur pour toutes ses propriétés) :"
+
+#: index.docbook:2048
+msgid "Each subclass should declare its own persistent properties and subclasses. <literal><version></literal> and <literal><id></literal> properties are assumed to be inherited from the root class. Each subclass in a heirarchy must define a unique <literal>discriminator-value</literal>. If none is specified, the fully qualified Java class name is used."
+msgstr ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " table=\"PERSON\">\n"
+ "\n"
+ " <id name=\"id\" column=\"PERSON_ID\">...</id>\n"
+ "\n"
+ " <join table=\"ADDRESS\">\n"
+ " <key column=\"ADDRESS_ID\"/>\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </join>\n"
+ " ...]]>"
+
+#: index.docbook:2056, index.docbook:2114, index.docbook:2172
+msgid "For information about inheritance mappings, see <xref linkend=\"inheritance\"/>."
+msgstr "Cette fonctionnalité est souvent seulement utile pour les modèles de données hérités d'anciens systèmes (legacy), nous recommandons d'utiliser moins de tables que de classes et un modèle de domaine à granularité fine. Cependant, c'est utile pour passer d'une stratégie de mapping d'héritage à une autre dans une hiérarchie simple ainsi qu'il est expliqué plus tard."
+
+#: index.docbook:2063
+msgid "joined-subclass"
+msgstr "<title>key</title>"
+
+#: index.docbook:2065
+msgid "Alternatively, each subclass may be mapped to its own table (table-per-subclass mapping strategy). Inherited state is retrieved by joining with the table of the superclass. We use the <literal><joined-subclass></literal> element."
+msgstr "Nous avons rencontré l'élément <literal><key></literal> à plusieurs reprises maintenant. Il apparaît partout que l'élément de mapping parent définit une jointure sur une nouvele table, et définit la clef étrangère dans la table jointe, ce qui référence la clef primaire de la table d'origine."
+
+#: index.docbook:2078
+msgid ""
+ "<![CDATA[<joined-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <key .... >\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</joined-subclass>]]>"
+msgstr ""
+ "<![CDATA[<key\n"
+ " column=\"columnname\"\n"
+ " on-delete=\"noaction|cascade\"\n"
+ " property-ref=\"propertyName\"\n"
+ " not-null=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ "/>]]>"
+
+#: index.docbook:2086, index.docbook:2149
+msgid "<literal>table</literal>: The name of the subclass table."
+msgstr "<literal>on-delete</literal> (optionnel, par défaut à <literal>noaction</literal>) : Indique si la contrainte de clef étrangère possède la possibilité au niveau base de données de suppression en cascade."
+
+#: index.docbook:2105
+msgid "No discriminator column is required for this mapping strategy. Each subclass must, however, declare a table column holding the object identifier using the <literal><key></literal> element. The mapping at the start of the chapter would be re-written as:"
+msgstr "<literal>update</literal> (optionnel) : Indique que la clef étrangère ne devrait jamais être mise à jour (implicite si celle-ci fait partie de la clef primaire)."
+
+#: index.docbook:2112
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" table=\"CATS\">\n"
+ " <id name=\"id\" column=\"uid\" type=\"long\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " <property name=\"birthdate\" type=\"date\"/>\n"
+ " <property name=\"color\" not-null=\"true\"/>\n"
+ " <property name=\"sex\" not-null=\"true\"/>\n"
+ " <property name=\"weight\"/>\n"
+ " <many-to-one name=\"mate\"/>\n"
+ " <set name=\"kittens\">\n"
+ " <key column=\"MOTHER\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ " <joined-subclass name=\"DomesticCat\" table=\"DOMESTIC_CATS\">\n"
+ " <key column=\"CAT\"/>\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </joined-subclass>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"eg.Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "<literal>unique</literal> (optionnel) : Indique que la clef étrangère doit posséder une contrainte d'unicité (implicite si la clef étrangère est aussi la clef primaire)."
+
+#: index.docbook:2121
+msgid "union-subclass"
+msgstr "Les attributs <literal>not-null</literal> et <literal>update</literal> sont utiles pour mapper une association one-to-many unidirectionnelle. Si vous mappez un one-to-many unidirectionnel vers une clef étrangère non nulle, vous <emphasis>devez</emphasis> déclarer la colonne de la clef en utilisant <literal><key not-null=\"true\"></literal>."
+
+#: index.docbook:2123
+msgid "A third option is to map only the concrete classes of an inheritance hierarchy to tables, (the table-per-concrete-class strategy) where each table defines all persistent state of the class, including inherited state. In Hibernate, it is not absolutely necessary to explicitly map such inheritance hierarchies. You can simply map each class with a separate <literal><class></literal> declaration. However, if you wish use polymorphic associations (e.g. an association to the superclass of your hierarchy), you need to use the <literal><union-subclass></literal> mapping."
+msgstr "éléments column et formula"
+
+#: index.docbook:2141
+msgid ""
+ "<![CDATA[<union-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " abstract=\"true|false\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</union-subclass>]]>"
+msgstr "Tout élément de mapping qui accepte un attribut <literal>column</literal> acceptera alternativement un sous-élément <literal><column></literal>. De façon identique, <literal><formula></literal> est une alternative à l'attribut <literal>formula</literal>."
+
+#: index.docbook:2168
+msgid "No discriminator column or key column is required for this mapping strategy."
+msgstr "import"
+
+#: index.docbook:2179
+msgid "join"
+msgstr "<![CDATA[<import class=\"java.lang.Object\" rename=\"Universe\"/>]]>"
+
+#: index.docbook:2181
+msgid "Using the <literal><join></literal> element, it is possible to map properties of one class to several tables, when there's a 1-to-1 relationship between the tables."
+msgstr ""
+ "<![CDATA[<import\n"
+ " class=\"ClassName\"\n"
+ " rename=\"ShortName\"\n"
+ "/>]]>"
+
+#: index.docbook:2195
+msgid ""
+ "<![CDATA[<join\n"
+ " table=\"tablename\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " fetch=\"join|select\"\n"
+ " inverse=\"true|false\"\n"
+ " optional=\"true|false\">\n"
+ "\n"
+ " <key ... />\n"
+ "\n"
+ " <property ... />\n"
+ " ...\n"
+ "</join>]]>"
+msgstr "<literal>class</literal> : Nom Java complet de la classe."
+
+#: index.docbook:2199
+msgid "<literal>table</literal>: The name of the joined table."
+msgstr "<literal>rename</literal> (optionnel - par défaut vaut le nom de la classe Java (sans package)) : Nom pouvant être utilisé dans le langage de requête."
+
+#: index.docbook:2216
+msgid "<literal>fetch</literal> (optional - defaults to <literal>join</literal>): If set to <literal>join</literal>, the default, Hibernate will use an inner join to retrieve a <literal><join></literal> defined by a class or its superclasses and an outer join for a <literal><join></literal> defined by a subclass. If set to <literal>select</literal> then Hibernate will use a sequential select for a <literal><join></literal> defined on a subclass, which will be issued only if a row turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a <literal><join></literal> defined by the class and its superclasses."
+msgstr "L'attribut <literal>meta-type</literal> permet à l'application de spécifier un type personnalisé qui mappe des valeurs de colonnes de le base de données sur des classes persistantes qui ont un attribut identifiant du type spécifié par <literal>id-type</literal>. Vous devez spécifier le mapping à partir de valeurs du méta-type sur les noms des classes."
+
+#: index.docbook:2229
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will not try to insert or update the properties defined by this join."
+msgstr ""
+ "<![CDATA[<any name=\"being\" id-type=\"long\" meta-type=\"string\">\n"
+ " <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>\n"
+ " <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>\n"
+ " <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>\n"
+ " <column name=\"table_name\"/>\n"
+ " <column name=\"id\"/>\n"
+ "</any>]]>"
+
+#: index.docbook:2236
+msgid "<literal>optional</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will insert a row only if the properties defined by this join are non-null and will always use an outer join to retrieve the properties."
+msgstr ""
+ "<![CDATA[<any\n"
+ " name=\"propertyName\"\n"
+ " id-type=\"idtypename\"\n"
+ " meta-type=\"metatypename\"\n"
+ " cascade=\"cascade_style\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ ">\n"
+ " <meta-value ... />\n"
+ " <meta-value ... />\n"
+ " .....\n"
+ " <column .... />\n"
+ " <column .... />\n"
+ " .....\n"
+ "</any>]]>"
+
+#: index.docbook:2245
+msgid "For example, the address information for a person can be mapped to a separate table (while preserving value type semantics for all properties):"
+msgstr "<literal>name</literal> : le nom de la propriété."
+
+#: index.docbook:2250
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " table=\"PERSON\">\n"
+ "\n"
+ " <id name=\"id\" column=\"PERSON_ID\">...</id>\n"
+ "\n"
+ " <join table=\"ADDRESS\">\n"
+ " <key column=\"ADDRESS_ID\"/>\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </join>\n"
+ " ...]]>"
+msgstr "<literal>id-type</literal> : le type identifiant."
+
+#: index.docbook:2252
+msgid "This feature is often only useful for legacy data models, we recommend fewer tables than classes and a fine-grained domain model. However, it is useful for switching between inheritance mapping strategies in a single hierarchy, as explained later."
+msgstr "<literal>meta-type</literal> (optionnel - par défaut à <literal>string</literal>) : Tout type permis pour un mapping par discriminateur."
+
+#: index.docbook:2262
+msgid "<title>key</title>"
+msgstr "<literal>cascade</literal> (optionnel - par défaut à <literal>none</literal>) : le style de cascade."
+
+#: index.docbook:2264
+msgid "We've seen the <literal><key></literal> element crop up a few times now. It appears anywhere the parent mapping element defines a join to a new table, and defines the foreign key in the joined table, that references the primary key of the original table."
+msgstr "<literal>access</literal> (optionnel - par défaut à <literal>property</literal>) : La stratégie à utiliser par Hibernate pour accéder à cette propriété."
+
+#: index.docbook:2280
+msgid ""
+ "<![CDATA[<key\n"
+ " column=\"columnname\"\n"
+ " on-delete=\"noaction|cascade\"\n"
+ " property-ref=\"propertyName\"\n"
+ " not-null=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ "/>]]>"
+msgstr "<literal>optimistic-lock</literal> (optionnel - par défaut à <literal>true</literal>) : Indique que les mises à jour sur cette propriété nécessitent ou non l'acquisition d'un verrou optimiste. En d'autres termes, définit si un incrément de version doit avoir lieu quand cette propriété est marquée dirty."
+
+#: index.docbook:2291
+msgid "<literal>on-delete</literal> (optional, defaults to <literal>noaction</literal>): Specifies whether the foreign key constraint has database-level cascade delete enabled."
+msgstr "Entités et valeurs"
+
+#: index.docbook:2298
+msgid "<literal>property-ref</literal> (optional): Specifies that the foreign key refers to columns that are not the primary key of the orginal table. (Provided for legacy data.)"
+msgstr "Pour comprendre le comportement des différents objets Java par rapport au service de persistance, nous avons besoin de les classer en deux groupes :"
+
+#: index.docbook:2305
+msgid "<literal>not-null</literal> (optional): Specifies that the foreign key columns are not nullable (this is implied whenever the foreign key is also part of the primary key)."
+msgstr "Une <emphasis>entité</emphasis> existe indépendamment de tout autre objet possédant une référence vers l'entité. Comparez cela avec le modèle Java habituel où un objet est supprimé par le garbage collector dès qu'il n'est plus référencé. Les entités doivent être explicitement enregistrées et supprimées (sauf dans les cas où sauvegardes et suppressions sont <emphasis>cascadées</emphasis> d'une entité mère vers ses enfants). C'est différent du modèle ODMG de persistance par atteignabilité - et correspond mieux à la façon dont les objets sont habituellement utilisés dans des grands systèmes. Les entités permettent les références circulaires et partagées. Elles peuvent aussi être versionnées."
+
+#: index.docbook:2312
+msgid "<literal>update</literal> (optional): Specifies that the foreign key should never be updated (this is implied whenever the foreign key is also part of the primary key)."
+msgstr "L'état persistant d'une entité consiste en des références vers d'autres entités et instances de types <emphasis>valeurs</emphasis>. Ces valeurs sont des types primitifs, des collections (et non le contenu d'une collection), des composants de certains objets immuables. Contrairement aux entités, les valeurs (et en particulier les collections et composants) <emphasis>sont</emphasis> persistés par atteignabiliité. Comme les valeurs (et types primitifs) sont persistés et supprimés avec l'entité qui les contient, ils ne peuvent pas posséder leurs propres versions. Les valeurs n'ont pas d'identité indépendantes, ainsi elles ne peuvent pas être partagées par deux entités ou collections."
+
+#: index.docbook:2319
+msgid "<literal>unique</literal> (optional): Specifies that the foreign key should have a unique constraint (this is implied whenever the foreign key is also the primary key)."
+msgstr "Jusqu'à présent nous avons utilisé le terme \"classe persistante\" pour parler d'entités. Nous allons continuer à faire ainsi. Cependant, au sens strict, toutes les classes définies par un utilisateur possédant un état persistant ne sont pas des entités. Un <emphasis>composant</emphasis> est une classe définie par un utilisateur avec les caractéristiques d'une valeur. Une propriété Java de type <literal>java.lang.String</literal> a aussi les caractéristiques d'une valeur. Given this definition, we can say that all types (classes) provided by the JDK have value type semantics in Java, while user-defined types may be mapped with entity or value type semantics. This decision is up to the application developer. A good hint for an entity class in a domain model are shared references to a single instance of that class, while composition or aggregation usually translates to a value type."
+
+#: index.docbook:2327
+msgid "We recommend that for systems where delete performance is important, all keys should be defined <literal>on-delete=\"cascade\"</literal>, and Hibernate will use a database-level <literal>ON CASCADE DELETE</literal> constraint, instead of many individual <literal>DELETE</literal> statements. Be aware that this feature bypasses Hibernate's usual optimistic locking strategy for versioned data."
+msgstr "Nous nous pencherons sur ces deux concepts tout au long de la documentation."
+
+#: index.docbook:2335
+msgid "The <literal>not-null</literal> and <literal>update</literal> attributes are useful when mapping a unidirectional one to many association. If you map a unidirectional one to many to a non-nullable foreign key, you <emphasis>must</emphasis> declare the key column using <literal><key not-null=\"true\"></literal>."
+msgstr "Le défi est de mapper les type Javas (et la définition des développeurs des entités et valeurs types) sur les types du SQL ou des bases de données. Le pont entre les deux systèmes est proposé par Hibernate : pour les entités nous utilisons <literal><class></literal>, <literal><subclass></literal> et ainsi de suite. Pour les types valeurs nous utilisons <literal><property></literal>, <literal><component></literal>, etc., habituellement avec un attribut <literal>type</literal>. La valeur de cet attribut est le nom d'un <emphasis>type de mapping</emphasis> Hibernate. Hibernate propose de base de nombreux mappings (pour les types de valeurs standards du JDK). Vous pouvez écrire vos propres types de mappings et implémenter aussi vos propres stratégies de conversion, nous le verrons plus tard."
+
+#: index.docbook:2345
+msgid "column and formula elements"
+msgstr "Tous les types proposés de base par Hibernate à part les collections autorisent la valeur null."
+
+#: index.docbook:2346
+msgid "Any mapping element which accepts a <literal>column</literal> attribute will alternatively accept a <literal><column></literal> subelement. Likewise, <literal><formula></literal> is an alternative to the <literal>formula</literal> attribute."
+msgstr "Basic value types"
+
+#: index.docbook:2352
+msgid ""
+ "<![CDATA[<column\n"
+ " name=\"column_name\"\n"
+ " length=\"N\"\n"
+ " precision=\"N\"\n"
+ " scale=\"N\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " unique-key=\"multicolumn_unique_key_name\"\n"
+ " index=\"index_name\"\n"
+ " sql-type=\"sql_type_name\"\n"
+ " check=\"SQL expression\"\n"
+ " default=\"SQL expression\"/>]]>"
+msgstr "Les <emphasis>types basiques de mapping</emphasis> proposés de base peuvent grossièrement être rangés dans les catégories suivantes :"
+
+#: index.docbook:2354
+msgid "<![CDATA[<formula>SQL expression</formula>]]>"
+msgstr "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+
+#: index.docbook:2356
+msgid "<literal>column</literal> and <literal>formula</literal> attributes may even be combined within the same property or association mapping to express, for example, exotic join conditions."
+msgstr "Les mappings de type des primitives Java ou leurs classes wrappers (ex: Integer pour int) vers les types SQL (propriétaires) appropriés. <literal>boolean, yes_no</literal>et <literal>true_false</literal> sont tous des alternatives pour les types Java <literal>boolean</literal> ou <literal>java.lang.Boolean</literal>."
+
+#: index.docbook:2362
+msgid ""
+ "<![CDATA[<many-to-one name=\"homeAddress\" class=\"Address\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"person_id\" not-null=\"true\" length=\"10\"/>\n"
+ " <formula>'MAILING'</formula>\n"
+ "</many-to-one>]]>"
+msgstr "string"
+
+#: index.docbook:2367
+msgid "import"
+msgstr "Mapping de type de <literal>java.lang.String</literal> vers <literal>VARCHAR</literal> (ou le <literal>VARCHAR2</literal> Oracle)."
+
+#: index.docbook:2369
+msgid "Suppose your application has two persistent classes with the same name, and you don't want to specify the fully qualified (package) name in Hibernate queries. Classes may be \"imported\" explicitly, rather than relying upon <literal>auto-import=\"true\"</literal>. You may even import classes and interfaces that are not explicitly mapped."
+msgstr "date, time, timestamp"
+
+#: index.docbook:2376
+msgid "<![CDATA[<import class=\"java.lang.Object\" rename=\"Universe\"/>]]>"
+msgstr "Mappings de type pour <literal>java.util.Date</literal> et ses sous-classes vers les types SQL <literal>DATE</literal>, <literal>TIME</literal> et <literal>TIMESTAMP</literal> (ou équivalent)."
+
+#: index.docbook:2383
+msgid ""
+ "<![CDATA[<import\n"
+ " class=\"ClassName\"\n"
+ " rename=\"ShortName\"\n"
+ "/>]]>"
+msgstr "calendar, calendar_date"
+
+#: index.docbook:2386
+msgid "<literal>class</literal>: The fully qualified class name of of any Java class."
+msgstr "Mappings de type pour <literal>java.util.Calendar</literal> vers les types SQL <literal>TIMESTAMP</literal> et <literal>DATE</literal> (ou équivalent)."
+
+#: index.docbook:2391
+msgid "<literal>rename</literal> (optional - defaults to the unqualified class name): A name that may be used in the query language."
+msgstr "big_decimal, big_integer"
+
+#: index.docbook:2402
+msgid "<title>any</title>"
+msgstr "Mappings de type pour <literal>java.math.BigDecimal</literal> et <literal>java.math.BigInteger</literal> vers <literal>NUMERIC</literal> (ou le <literal>NUMBER</literal> Oracle)."
+
+#: index.docbook:2404
+msgid "There is one further type of property mapping. The <literal><any></literal> mapping element defines a polymorphic association to classes from multiple tables. This type of mapping always requires more than one column. The first column holds the type of the associated entity. The remaining columns hold the identifier. It is impossible to specify a foreign key constraint for this kind of association, so this is most certainly not meant as the usual way of mapping (polymorphic) associations. You should use this only in very special cases (eg. audit logs, user session data, etc)."
+msgstr "locale, timezone, currency"
+
+#: index.docbook:2414
+msgid "The <literal>meta-type</literal> attribute lets the application specify a custom type that maps database column values to persistent classes which have identifier properties of the type specified by <literal>id-type</literal>. You must specify the mapping from values of the meta-type to class names."
+msgstr "Mappings de type pour <literal>java.util.Locale</literal>, <literal>java.util.TimeZone</literal> et <literal>java.util.Currency</literal> vers <literal>VARCHAR</literal> (ou le <literal>VARCHAR2</literal> Oracle). Les instances de <literal>Locale</literal> et <literal>Currency</literal> sont mappées sur leurs codes ISO. Les instances de <literal>TimeZone</literal> sont mappées sur leur <literal>ID</literal>."
+
+#: index.docbook:2421
+msgid ""
+ "<![CDATA[<any name=\"being\" id-type=\"long\" meta-type=\"string\">\n"
+ " <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>\n"
+ " <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>\n"
+ " <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>\n"
+ " <column name=\"table_name\"/>\n"
+ " <column name=\"id\"/>\n"
+ "</any>]]>"
+msgstr "<literal>class</literal>"
+
+#: index.docbook:2432
+msgid ""
+ "<![CDATA[<any\n"
+ " name=\"propertyName\"\n"
+ " id-type=\"idtypename\"\n"
+ " meta-type=\"metatypename\"\n"
+ " cascade=\"cascade_style\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ ">\n"
+ " <meta-value ... />\n"
+ " <meta-value ... />\n"
+ " .....\n"
+ " <column .... />\n"
+ " <column .... />\n"
+ " .....\n"
+ "</any>]]>"
+msgstr "Un type de mapping pour <literal>java.lang.Class</literal> vers <literal>VARCHAR</literal> (ou le <literal>VARCHAR2</literal> Oracle). Un objet <literal>Class</literal> est mappé sur son nom Java complet."
+
+#: index.docbook:2435
+msgid "<literal>name</literal>: the property name."
+msgstr "binary"
+
+#: index.docbook:2440
+msgid "<literal>id-type</literal>: the identifier type."
+msgstr "Mappe les tableaux de bytes vers le type binaire SQL approprié."
+
+#: index.docbook:2445
+msgid "<literal>meta-type</literal> (optional - defaults to <literal>string</literal>): Any type that is allowed for a discriminator mapping."
+msgstr "text"
+
+#: index.docbook:2451
+msgid "<literal>cascade</literal> (optional- defaults to <literal>none</literal>): the cascade style."
+msgstr "Mappe les longues chaînes de caractères Java vers les types SQL <literal>CLOB</literal> ou <literal>TEXT</literal>."
+
+#: index.docbook:2463
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, define if a version increment should occur if this property is dirty."
+msgstr "Mappe les types Java sérialisables vers le type SQL binaire approprié. Vous pouvez aussi indiquer le type Hibernate <literal>serializable</literal> avec le nom d'une classe Java sérialisable ou une interface qui ne soit pas par défaut un type de base."
+
+#: index.docbook:2478
+msgid "Hibernate Types"
+msgstr "clob, blob"
+
+#: index.docbook:2481
+msgid "Entities and values"
+msgstr "Mappings de type pour les classes JDBC <literal>java.sql.Clob</literal> and <literal>java.sql.Blob</literal>. Ces types peuvent ne pas convenir pour certaines applications car un objet blob ou clob peut ne pas être réutilisable en dehors d'une transaction (de plus l'implémentation par les pilotes est moyennement bonne)."
+
+#: index.docbook:2483
+msgid "To understand the behaviour of various Java language-level objects with respect to the persistence service, we need to classify them into two groups:"
+msgstr "imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary"
+
+#: index.docbook:2488
+msgid "An <emphasis>entity</emphasis> exists independently of any other objects holding references to the entity. Contrast this with the usual Java model where an unreferenced object is garbage collected. Entities must be explicitly saved and deleted (except that saves and deletions may be <emphasis>cascaded</emphasis> from a parent entity to its children). This is different from the ODMG model of object persistence by reachablity - and corresponds more closely to how application objects are usually used in large systems. Entities support circular and shared references. They may also be versioned."
+msgstr "Mappings de type pour ceux qui sont habituellement modifiable, pour lesquels Hibernate effectue certains optimisations convenant seulement aux types Java immuables, et l'application les traite comme immuable. Par exemple, vous ne devriez pas appeler <literal>Date.setTime()</literal> sur une instance mappée sur un <literal>imm_timestamp</literal>. Pour changer la valeur de la propriété, et faire que cette modification soit persistée, l'application doit assigner un nouvel (non identique) objet à la propriété."
+
+#: index.docbook:2499
+msgid "An entity's persistent state consists of references to other entities and instances of <emphasis>value</emphasis> types. Values are primitives, collections (not what's inside a collection), components and certain immutable objects. Unlike entities, values (in particular collections and components) <emphasis>are</emphasis> persisted and deleted by reachability. Since value objects (and primitives) are persisted and deleted along with their containing entity they may not be independently versioned. Values have no independent identity, so they cannot be shared by two entities or collections."
+msgstr "Les identifiants uniques des entités et collections peuvent être de n'importe quel type de base excepté <literal>binary</literal>, <literal>blob</literal> et <literal>clob</literal> (les identifiants composites sont aussi permis, voir plus bas)."
+
+#: index.docbook:2510
+msgid "Up until now, we've been using the term \"persistent class\" to refer to entities. We will continue to do that. Strictly speaking, however, not all user-defined classes with persistent state are entities. A <emphasis>component</emphasis> is a user defined class with value semantics. A Java property of type <literal>java.lang.String</literal> also has value semantics. Given this definition, we can say that all types (classes) provided by the JDK have value type semantics in Java, while user-defined types may be mapped with entity or value type semantics. This decision is up to the application developer. A good hint for an entity class in a domain model are shared references to a single instance of that class, while composition or aggregation usually translates to a value type."
+msgstr "Les types de base des valeurs ont des <literal>Type</literal> constants correspondants définis dans <literal>org.hibernate.Hibernate</literal>. Par exemple, <literal>Hibernate.STRING</literal> représenté le type <literal>string</literal>."
+
+#: index.docbook:2524
+msgid "We'll revisit both concepts throughout the documentation."
+msgstr "Types de valeur définis par l'utilisateur"
+
+#: index.docbook:2528
+msgid "The challenge is to map the Java type system (and the developers' definition of entities and value types) to the SQL/database type system. The bridge between both systems is provided by Hibernate: for entities we use <literal><class></literal>, <literal><subclass></literal> and so on. For value types we use <literal><property></literal>, <literal><component></literal>, etc, usually with a <literal>type</literal> attribute. The value of this attribute is the name of a Hibernate <emphasis>mapping type</emphasis>. Hibernate provides many mappings (for standard JDK value types) out of the box. You can write your own mapping types and implement your custom conversion strategies as well, as you'll see later."
+msgstr "Il est assez facile pour les développeurs de créer leurs propres types de valeurs. Par exemple, vous pourriez vouloir persister des propriétés du type <literal>java.lang.BigInteger</literal> dans des colonnnes <literal>VARCHAR</literal>. Hibernate ne procure pas par défaut un type pour cela. Mais les types que vous pouvez créer ne se limitent pas à mapper des propriétés (ou élément collection) à une simple colonne d'une table. Donc, par exemple, vous pourriez avoir une propriété Java <literal>getName()</literal>/<literal>setName()</literal> de type <literal>java.lang.String</literal> persistée dans les colonnes <literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal>."
+
+#: index.docbook:2541
+msgid "All built-in Hibernate types except collections support null semantics."
+msgstr "Pour implémenter votre propre type, vous pouvez soit implémenter <literal>org.hibernate.UserType</literal> soit <literal>org.hibernate.CompositeUserType</literal> et déclarer des propriétés utilisant des noms de classes complets du type. Regardez <literal>org.hibernate.test.DoubleStringType</literal> pour voir ce qu'il est possible de faire."
+
+#: index.docbook:2548
+msgid "Basic value types"
+msgstr ""
+ "<![CDATA[<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType\">\n"
+ " <column name=\"first_string\"/>\n"
+ " <column name=\"second_string\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:2550
+msgid "The built-in <emphasis>basic mapping types</emphasis> may be roughly categorized into"
+msgstr "Remarquez l'utilisation des tags <literal><column></literal> pour mapper une propriété sur des colonnes multiples."
+
+#: index.docbook:2555
+msgid "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+msgstr "Les interfaces <literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>, <literal>UserCollectionType</literal>, et <literal>UserVersionType</literal> permettent des utilisations plus spécialisées."
+
+#: index.docbook:2558
+msgid "Type mappings from Java primitives or wrapper classes to appropriate (vendor-specific) SQL column types. <literal>boolean, yes_no</literal> and <literal>true_false</literal> are all alternative encodings for a Java <literal>boolean</literal> or <literal>java.lang.Boolean</literal>."
+msgstr "Vous pouvez même donner des paramètres en indiquant <literal>UserType</literal> dans le fichier de mapping ; Pour cela, votre <literal>UserType</literal> doit implémenter l'interface <literal>org.hibernate.usertype.ParameterizedType</literal>. Pour spécifier des paramètres dans votre type propre, vous pouvez utiliser l'élément <literal><type></literal> dans vos fichiers de mapping."
+
+#: index.docbook:2567
+msgid "string"
+msgstr ""
+ "<![CDATA[<property name=\"priority\">\n"
+ " <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
+ " <param name=\"default\">0</param>\n"
+ " </type>\n"
+ "</property>]]>"
+
+#: index.docbook:2569
+msgid "A type mapping from <literal>java.lang.String</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>)."
+msgstr "Le <literal>UserType</literal> permet maintenant de récupérer la valeur pour le paramètre nommé <literal>default</literal> à partir de l'objet <literal>Properties</literal> qui lui est passé."
+
+#: index.docbook:2576
+msgid "date, time, timestamp"
+msgstr "Si vous utilisez fréquemment un <literal>UserType</literal>, cela peut être utile de lui définir un nom plus court. Vous pouvez faire cela en utilisant l'élément <literal><typedef></literal>. Les typedefs permettent d'assigner un nom à votre type propre et peuvent aussi contenir une liste de valeurs de paramètres par défaut si ce type est paramétré."
+
+#: index.docbook:2578
+msgid "Type mappings from <literal>java.util.Date</literal> and its subclasses to SQL types <literal>DATE</literal>, <literal>TIME</literal> and <literal>TIMESTAMP</literal> (or equivalent)."
+msgstr ""
+ "<![CDATA[<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name=\"default_zero\">\n"
+ " <param name=\"default\">0</param>\n"
+ "</typedef>]]>"
+
+#: index.docbook:2586
+msgid "calendar, calendar_date"
+msgstr "<![CDATA[<property name=\"priority\" type=\"default_zero\"/>]]>"
+
+#: index.docbook:2588
+msgid "Type mappings from <literal>java.util.Calendar</literal> to SQL types <literal>TIMESTAMP</literal> and <literal>DATE</literal> (or equivalent)."
+msgstr "Il est aussi possible de redéfinir les paramètres par défaut du typedef au cas par cas en utilisant des paramètres type sur le mapping de la propriété."
+
+#: index.docbook:2596
+msgid "big_decimal, big_integer"
+msgstr "Bien que le fait que Hibernate propose de base une riche variété de types, et qu'il supporte les composants signifie que vous aurez très rarement <emphasis>besoin</emphasis> d'utiliser un nouveau type propre, il est néanmoins de bonne pratique d'utiliser des types propres pour les classes (non entités) qui apparaissent fréquemment dans votre application. Par exemple une classe <literal>MonetaryAmount</literal> est un bon candidat pour un <literal>CompositeUserType</literal> même s'il pourrait facilement être mappé comme un composant. Une motivation pour cela est l'abstraction. Avec un type propre vos documents de mapping sont à l'abri des changements futurs dans votre façon de représenter des valeurs monétaires."
+
+#: index.docbook:2598
+msgid "Type mappings from <literal>java.math.BigDecimal</literal> and <literal>java.math.BigInteger</literal> to <literal>NUMERIC</literal> (or Oracle <literal>NUMBER</literal>)."
+msgstr "Mapper une classe plus d'une fois"
+
+#: index.docbook:2606
+msgid "locale, timezone, currency"
+msgstr "Il est possible de proposer plus d'un mapping par classe persistante. Dans ce cas, vous devez spécifier un <emphasis>nom d'entité</emphasis> pour lever l'ambiguité entre les instances des entités mappées (par défaut, le nom de l'entité est celui de la classe). Hibernate vous permet de spécifier le nom de l'entité lorsque vous utilisez des objets persistants, lorsque vous écrivez des requêtes ou quand vous mappez des associations vers les entités nommées."
+
+#: index.docbook:2608
+msgid "Type mappings from <literal>java.util.Locale</literal>, <literal>java.util.TimeZone</literal> and <literal>java.util.Currency</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). Instances of <literal>Locale</literal> and <literal>Currency</literal> are mapped to their ISO codes. Instances of <literal>TimeZone</literal> are mapped to their <literal>ID</literal>."
+msgstr ""
+ "<![CDATA[<class name=\"Contract\" table=\"Contracts\" \n"
+ " entity-name=\"CurrentContract\">\n"
+ " ...\n"
+ " <set name=\"history\" inverse=\"true\" \n"
+ " order-by=\"effectiveEndDate desc\">\n"
+ " <key column=\"currentContractId\"/>\n"
+ " <one-to-many entity-name=\"HistoricalContract\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Contract\" table=\"ContractHistory\" \n"
+ " entity-name=\"HistoricalContract\">\n"
+ " ...\n"
+ " <many-to-one name=\"currentContract\" \n"
+ " column=\"currentContractId\" \n"
+ " entity-name=\"CurrentContract\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:2620
+msgid "<literal>class</literal>"
+msgstr "Remarquez comment les associations sont désormais spécifiées en utilisant <literal>entity-name</literal> au lieu de <literal>class</literal>."
+
+#: index.docbook:2622
+msgid "A type mapping from <literal>java.lang.Class</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). A <literal>Class</literal> is mapped to its fully qualified name."
+msgstr "SQL quoted identifiers"
+
+#: index.docbook:2630
+msgid "binary"
+msgstr "Vous pouvez forcer Hibernate à mettre un identifiant entre quotes dans le SQL généré en mettant le nom de la table ou de la colonne entre backticks dans le document de mapping. Hibernate utilisera les bons styles de quotes pour le <literal>Dialect</literal> SQL (habituellement des doubles quotes, mais des parenthèses pour SQL server et des backticks pour MySQL)."
+
+#: index.docbook:2632
+msgid "Maps byte arrays to an appropriate SQL binary type."
+msgstr ""
+ "<![CDATA[<class name=\"LineItem\" table=\"`Line Item`\">\n"
+ " <id name=\"id\" column=\"`Item Id`\"/><generator class=\"assigned\"/></id>\n"
+ " <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:2638
+msgid "text"
+msgstr "alternatives Metadata"
+
+#: index.docbook:2640
+msgid "Maps long Java strings to a SQL <literal>CLOB</literal> or <literal>TEXT</literal> type."
+msgstr "XML ne convient pas à tout le monde, il y a donc des moyens alternatifs pour définir des metatda de mappings O/R dans Hibernate."
+
+#: index.docbook:2647
+msgid "serializable"
+msgstr "utilisation de XDoclet"
+
+#: index.docbook:2649
+msgid "Maps serializable Java types to an appropriate SQL binary type. You may also indicate the Hibernate type <literal>serializable</literal> with the name of a serializable Java class or interface that does not default to a basic type."
+msgstr "De nombreux utilisateurs de Hibernate préfèrent embarquer les informations de mappings directement au sein du code source en utilisant les tags XDoclet <literal>@hibernate.tags</literal>. Nous ne couvrons pas cette approche dans ce document cependant, puisque c'est considéré comme faisant partie de XDoclet. Cependant, nous présentons l'exemple suivant de la classe <literal>Cat</literal> avec des mappings XDoclet."
+
+#: index.docbook:2658
+msgid "clob, blob"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "/**\n"
+ " * @hibernate.class\n"
+ " * table=\"CATS\"\n"
+ " */\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ " private Date birthdate;\n"
+ " private Cat mother;\n"
+ " private Set kittens\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " /*\n"
+ " * @hibernate.id\n"
+ " * generator-class=\"native\"\n"
+ " * column=\"CAT_ID\"\n"
+ " */\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.many-to-one\n"
+ " * column=\"PARENT_ID\"\n"
+ " */\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"BIRTH_DATE\"\n"
+ " */\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"WEIGHT\"\n"
+ " */\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"COLOR\"\n"
+ " * not-null=\"true\"\n"
+ " */\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.set\n"
+ " * inverse=\"true\"\n"
+ " * order-by=\"BIRTH_DATE\"\n"
+ " * @hibernate.collection-key\n"
+ " * column=\"PARENT_ID\"\n"
+ " * @hibernate.collection-one-to-many\n"
+ " */\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"SEX\"\n"
+ " * not-null=\"true\"\n"
+ " * update=\"false\"\n"
+ " */\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:2660
+msgid "Type mappings for the JDBC classes <literal>java.sql.Clob</literal> and <literal>java.sql.Blob</literal>. These types may be inconvenient for some applications, since the blob or clob object may not be reused outside of a transaction. (Furthermore, driver support is patchy and inconsistent.)"
+msgstr "Voyez le site web de Hibernate pour plus d'exemples sur XDoclet et Hibernate."
+
+#: index.docbook:2670
+msgid "imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary"
+msgstr "Utilisation des annotations JDK 5.0"
+
+#: index.docbook:2674
+msgid "Type mappings for what are usually considered mutable Java types, where Hibernate makes certain optimizations appropriate only for immutable Java types, and the application treats the object as immutable. For example, you should not call <literal>Date.setTime()</literal> for an instance mapped as <literal>imm_timestamp</literal>. To change the value of the property, and have that change made persistent, the application must assign a new (nonidentical) object to the property."
+msgstr "Le JDK 5.0 introduit des annotations proches de celles de XDoclet au niveau java, qui sont type-safe et vérifiées à la compilation. Ce mécanisme est plus puissant que XDoclet et mieux supporté par les outils et IDE. IntelliJ IDEA, par exemple, supporte l'auto-complétion et le surlignement syntaxique des annotations JDK 5.0. La nouvelle révision des spécifications des EJB (JSR-220) utilise les annotations JDK 5.0 comme mécanisme primaire pour les meta-données des beans entités. Hibernate3 implémente l'<literal>EntityManager</literal> de la JSR-220 (API de persistance), le support du mapping de meta-données est disponible via le package <emphasis>Hibernate Annotations</emphasis>, en tant que module séparé à télécharger. EJB3 (JSR-220) et les métadata Hibernate3 sont supportés."
+
+#: index.docbook:2689
+msgid "Unique identifiers of entities and collections may be of any basic type except <literal>binary</literal>, <literal>blob</literal> and <literal>clob</literal>. (Composite identifiers are also allowed, see below.)"
+msgstr "Ceci est un exemple d'une classe POJO annotée comme un EJB entité :"
+
+#: index.docbook:2695
+msgid "The basic value types have corresponding <literal>Type</literal> constants defined on <literal>org.hibernate.Hibernate</literal>. For example, <literal>Hibernate.STRING</literal> represents the <literal>string</literal> type."
+msgstr ""
+ "<![CDATA[@Entity(access = AccessType.FIELD)\n"
+ "public class Customer implements Serializable {\n"
+ "\n"
+ " @Id;\n"
+ " Long id;\n"
+ "\n"
+ " String firstName;\n"
+ " String lastName;\n"
+ " Date birthday;\n"
+ "\n"
+ " @Transient\n"
+ " Integer age;\n"
+ "\n"
+ " @Embedded\n"
+ " private Address homeAddress;\n"
+ "\n"
+ " @OneToMany(cascade=CascadeType.ALL)\n"
+ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
+ " Set<Order> orders;\n"
+ "\n"
+ " // Getter/setter and business methods\n"
+ "}]]>"
+
+#: index.docbook:2704
+msgid "Custom value types"
+msgstr "Notez que le support des annotations JDK 5.0 (et de la JSR-220) est encore en cours et n'est pas terminé. Référez vous au module Hibernate Annotation pour plus de détails."
+
+#: index.docbook:2706
+msgid "It is relatively easy for developers to create their own value types. For example, you might want to persist properties of type <literal>java.lang.BigInteger</literal> to <literal>VARCHAR</literal> columns. Hibernate does not provide a built-in type for this. But custom types are not limited to mapping a property (or collection element) to a single table column. So, for example, you might have a Java property <literal>getName()</literal>/<literal>setName()</literal> of type <literal>java.lang.String</literal> that is persisted to the columns <literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal>."
+msgstr "Propriétés générées"
+
+#: index.docbook:2717
+msgid "To implement a custom type, implement either <literal>org.hibernate.UserType</literal> or <literal>org.hibernate.CompositeUserType</literal> and declare properties using the fully qualified classname of the type. Check out <literal>org.hibernate.test.DoubleStringType</literal> to see the kind of things that are possible."
+msgstr "Les propriétés générées sont des propriétés dont les valeurs sont générées par la base de données. Typiquement, les applications Hibernate avaient besoin d'invoquer <literal>refresh</literal> sur les instances qui contenaient des propriétés pour lesquelles la base de données générait des valeurs. Marquer les propriétés comme générées permet à l'application de déléguer cette responsabilité à Hibernate. Principalement, à chaque fois qu'Hibernate réalise une insertion ou une mise à jour en base de données pour une entité marquée comme telle, cela provoque immédiatement un select pour récupérer les valeurs générées."
+
+#: index.docbook:2725
+msgid ""
+ "<![CDATA[<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType\">\n"
+ " <column name=\"first_string\"/>\n"
+ " <column name=\"second_string\"/>\n"
+ "</property>]]>"
+msgstr "Les propriétés marquées comme générées doivent de plus ne pas être insérables et modifiables Seuls <xref linkend=\"mapping-declaration-version\"/>versions, <xref linkend=\"mapping-declaration-timestamp\"/>timestamps, et <xref linkend=\"mapping-declaration-property\"/>simple properties peuvent être marqués comme générées."
+
+#: index.docbook:2727
+msgid "Notice the use of <literal><column></literal> tags to map a property to multiple columns."
+msgstr "<literal>never</literal> (par défaut) - indique la valeur de la propriété n'est pas générée dans la base de données."
+
+#: index.docbook:2732
+msgid "The <literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>, <literal>UserCollectionType</literal>, and <literal>UserVersionType</literal> interfaces provide support for more specialized uses."
+msgstr "<literal>insert</literal> - indique que la valeur de la propriété donnée est générée à l'insertion mais pas lors des futures mises à jour de l'enregistrement. Les colonnes de type \"date de création\" sont le cas d'utilisation typique de cette option. Notez que même les propriétés <xref linkend=\"mapping-declaration-version\"/>version et <xref linkend=\"mapping-declaration-timestamp\"/>timestamp peuvent être déclarées comme générées, cette option n'est pas disponible à cet endroit..."
+
+#: index.docbook:2738
+msgid "You may even supply parameters to a <literal>UserType</literal> in the mapping file. To do this, your <literal>UserType</literal> must implement the <literal>org.hibernate.usertype.ParameterizedType</literal> interface. To supply parameters to your custom type, you can use the <literal><type></literal> element in your mapping files."
+msgstr "<literal>always</literal> - indique que la valeur de la propriété est générée à l'insert comme aux updates."
+
+#: index.docbook:2746
+msgid ""
+ "<![CDATA[<property name=\"priority\">\n"
+ " <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
+ " <param name=\"default\">0</param>\n"
+ " </type>\n"
+ "</property>]]>"
+msgstr "Objets auxiliaires de la base de données"
+
+#: index.docbook:2748
+msgid "The <literal>UserType</literal> can now retrieve the value for the parameter named <literal>default</literal> from the <literal>Properties</literal> object passed to it."
+msgstr "Permettent les ordres CREATE et DROP d'objets arbitraire de la base de donnéées, en conjonction avec les outils Hibernate d'évolutions de schéma, pour permettre de définir complètement un schéma utilisateur au sein des fichiers de mapping Hibernate. Bien que conçu spécifiquement pour créer et supprimer des objets tels que des triggers et des procédures stockées, ou toute commande pouvant être exécutée via une méthode de <literal>java.sql.Statement.execute()</literal> (ALTERs, INSERTS, etc). Il y a principalement deux modes pour définir les objets auxiliaires de base de données..."
+
+#: index.docbook:2753
+msgid "If you use a certain <literal>UserType</literal> very often, it may be useful to define a shorter name for it. You can do this using the <literal><typedef></literal> element. Typedefs assign a name to a custom type, and may also contain a list of default parameter values if the type is parameterized."
+msgstr "Le premier mode est de lister explicitement les commandes CREATE et DROP dans le fichier de mapping:"
+
+#: index.docbook:2760
+msgid ""
+ "<![CDATA[<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name=\"default_zero\">\n"
+ " <param name=\"default\">0</param>\n"
+ "</typedef>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <create>CREATE TRIGGER my_trigger ...</create>\n"
+ " <drop>DROP TRIGGER my_trigger</drop>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:2762
+msgid "<![CDATA[<property name=\"priority\" type=\"default_zero\"/>]]>"
+msgstr "Le second mode est de fournir une classe particulière qui connait comment construire les commandes CREATE et DROP. Cette classe particulière doit implémenter l'interface <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal>."
+
+#: index.docbook:2764
+msgid "It is also possible to override the parameters supplied in a typedef on a case-by-case basis by using type parameters on the property mapping."
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:2769
+msgid "Even though Hibernate's rich range of built-in types and support for components means you will very rarely <emphasis>need</emphasis> to use a custom type, it is nevertheless considered good form to use custom types for (non-entity) classes that occur frequently in your application. For example, a <literal>MonetaryAmount</literal> class is a good candidate for a <literal>CompositeUserType</literal>, even though it could easily be mapped as a component. One motivation for this is abstraction. With a custom type, your mapping documents would be future-proofed against possible changes in your way of representing monetary values."
+msgstr "Additionnellement, ces objets de base de données peuvent être optionnellement traités selon l'utilisation de dialectes particuliers.."
+
+#: index.docbook:2785
+msgid "Mapping a class more than once"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.Oracle9Dialect\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.OracleDialect\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:2786
+msgid "It is possible to provide more than one mapping for a particular persistent class. In this case you must specify an <emphasis>entity name</emphasis> do disambiguate between instances of the two mapped entities. (By default, the entity name is the same as the class name.) Hibernate lets you specify the entity name when working with persistent objects, when writing queries, or when mapping associations to the named entity."
+msgstr ""
+
+#: index.docbook:2794
+msgid ""
+ "<![CDATA[<class name=\"Contract\" table=\"Contracts\"\n"
+ " entity-name=\"CurrentContract\">\n"
+ " ...\n"
+ " <set name=\"history\" inverse=\"true\"\n"
+ " order-by=\"effectiveEndDate desc\">\n"
+ " <key column=\"currentContractId\"/>\n"
+ " <one-to-many entity-name=\"HistoricalContract\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Contract\" table=\"ContractHistory\"\n"
+ " entity-name=\"HistoricalContract\">\n"
+ " ...\n"
+ " <many-to-one name=\"currentContract\"\n"
+ " column=\"currentContractId\"\n"
+ " entity-name=\"CurrentContract\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:2796
+msgid "Notice how associations are now specified using <literal>entity-name</literal> instead of <literal>class</literal>."
+msgstr ""
+
+#: index.docbook:2804
+msgid "SQL quoted identifiers"
+msgstr ""
+
+#: index.docbook:2805
+msgid "You may force Hibernate to quote an identifier in the generated SQL by enclosing the table or column name in backticks in the mapping document. Hibernate will use the correct quotation style for the SQL <literal>Dialect</literal> (usually double quotes, but brackets for SQL Server and backticks for MySQL)."
+msgstr ""
+
+#: index.docbook:2812
+msgid ""
+ "<![CDATA[<class name=\"LineItem\" table=\"`Line Item`\">\n"
+ " <id name=\"id\" column=\"`Item Id`\"/><generator class=\"assigned\"/></id>\n"
+ " <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:2818
+msgid "Metadata alternatives"
+msgstr ""
+
+#: index.docbook:2820
+msgid "XML isn't for everyone, and so there are some alternative ways to define O/R mapping metadata in Hibernate."
+msgstr ""
+
+#: index.docbook:2825
+msgid "Using XDoclet markup"
+msgstr ""
+
+#: index.docbook:2827
+msgid "Many Hibernate users prefer to embed mapping information directly in sourcecode using XDoclet <literal>@hibernate.tags</literal>. We will not cover this approach in this document, since strictly it is considered part of XDoclet. However, we include the following example of the <literal>Cat</literal> class with XDoclet mappings."
+msgstr ""
+
+#: index.docbook:2834
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "/**\n"
+ " * @hibernate.class\n"
+ " * table=\"CATS\"\n"
+ " */\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ " private Date birthdate;\n"
+ " private Cat mother;\n"
+ " private Set kittens\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " /*\n"
+ " * @hibernate.id\n"
+ " * generator-class=\"native\"\n"
+ " * column=\"CAT_ID\"\n"
+ " */\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.many-to-one\n"
+ " * column=\"PARENT_ID\"\n"
+ " */\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"BIRTH_DATE\"\n"
+ " */\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"WEIGHT\"\n"
+ " */\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"COLOR\"\n"
+ " * not-null=\"true\"\n"
+ " */\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.set\n"
+ " * inverse=\"true\"\n"
+ " * order-by=\"BIRTH_DATE\"\n"
+ " * @hibernate.collection-key\n"
+ " * column=\"PARENT_ID\"\n"
+ " * @hibernate.collection-one-to-many\n"
+ " */\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"SEX\"\n"
+ " * not-null=\"true\"\n"
+ " * update=\"false\"\n"
+ " */\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2836
+msgid "See the Hibernate web site for more examples of XDoclet and Hibernate."
+msgstr ""
+
+#: index.docbook:2843
+msgid "Using JDK 5.0 Annotations"
+msgstr ""
+
+#: index.docbook:2845
+msgid "JDK 5.0 introduced XDoclet-style annotations at the language level, type-safe and checked at compile time. This mechnism is more powerful than XDoclet annotations and better supported by tools and IDEs. IntelliJ IDEA, for example, supports auto-completion and syntax highlighting of JDK 5.0 annotations. The new revision of the EJB specification (JSR-220) uses JDK 5.0 annotations as the primary metadata mechanism for entity beans. Hibernate3 implements the <literal>EntityManager</literal> of JSR-220 (the persistence API), support for mapping metadata is available via the <emphasis>Hibernate Annotations</emphasis> package, as a separate download. Both EJB3 (JSR-220) and Hibernate3 metadata is supported."
+msgstr ""
+
+#: index.docbook:2856
+msgid "This is an example of a POJO class annotated as an EJB entity bean:"
+msgstr ""
+
+#: index.docbook:2860
+msgid ""
+ "<![CDATA[@Entity(access = AccessType.FIELD)\n"
+ "public class Customer implements Serializable {\n"
+ "\n"
+ " @Id;\n"
+ " Long id;\n"
+ "\n"
+ " String firstName;\n"
+ " String lastName;\n"
+ " Date birthday;\n"
+ "\n"
+ " @Transient\n"
+ " Integer age;\n"
+ "\n"
+ " @Embedded\n"
+ " private Address homeAddress;\n"
+ "\n"
+ " @OneToMany(cascade=CascadeType.ALL)\n"
+ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
+ " Set<Order> orders;\n"
+ "\n"
+ " // Getter/setter and business methods\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2862
+msgid "Note that support for JDK 5.0 Annotations (and JSR-220) is still work in progress and not completed. Please refer to the Hibernate Annotations module for more details."
+msgstr ""
+
+#: index.docbook:2871
+msgid "Generated Properties"
+msgstr ""
+
+#: index.docbook:2872
+msgid "Generated properties are properties which have their values generated by the database. Typically, Hibernate applications needed to <literal>refresh</literal> objects which contain any properties for which the database was generating values. Marking properties as generated, however, lets the application delegate this responsibility to Hibernate. Essentially, whenever Hibernate issues an SQL INSERT or UPDATE for an entity which has defined generated properties, it immediately issues a select afterwards to retrieve the generated values."
+msgstr ""
+
+#: index.docbook:2881
+msgid "Properties marked as generated must additionally be non-insertable and non-updateable. Only <xref linkend=\"mapping-declaration-version\"/>versions, <xref linkend=\"mapping-declaration-timestamp\"/>timestamps, and <xref linkend=\"mapping-declaration-property\"/>simple properties can be marked as generated."
+msgstr ""
+
+#: index.docbook:2888
+msgid "<literal>never</literal> (the default) - means that the given property value is not generated within the database."
+msgstr ""
+
+#: index.docbook:2892
+msgid "<literal>insert</literal> - states that the given property value is generated on insert, but is not regenerated on subsequent updates. Things like created-date would fall into this category. Note that even thought <xref linkend=\"mapping-declaration-version\"/>version and <xref linkend=\"mapping-declaration-timestamp\"/>timestamp properties can be marked as generated, this option is not available there..."
+msgstr ""
+
+#: index.docbook:2900
+msgid "<literal>always</literal> - states that the property value is generated both on insert and on update."
+msgstr ""
+
+#: index.docbook:2907
+msgid "Auxiliary Database Objects"
+msgstr ""
+
+#: index.docbook:2908
+msgid "Allows CREATE and DROP of arbitrary database objects, in conjunction with Hibernate's schema evolution tools, to provide the ability to fully define a user schema within the Hibernate mapping files. Although designed specifically for creating and dropping things like triggers or stored procedures, really any SQL command that can be run via a <literal>java.sql.Statement.execute()</literal> method is valid here (ALTERs, INSERTS, etc). There are essentially two modes for defining auxiliary database objects..."
+msgstr ""
+
+#: index.docbook:2917
+msgid "The first mode is to explicitly list the CREATE and DROP commands out in the mapping file:"
+msgstr ""
+
+#: index.docbook:2921
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <create>CREATE TRIGGER my_trigger ...</create>\n"
+ " <drop>DROP TRIGGER my_trigger</drop>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2922
+msgid "The second mode is to supply a custom class which knows how to construct the CREATE and DROP commands. This custom class must implement the <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> interface."
+msgstr ""
+
+#: index.docbook:2927
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2928
+msgid "Additionally, these database objects can be optionally scoped such that they only apply when certain dialects are used."
+msgstr ""
+
+#: index.docbook:2932
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.Oracle9Dialect\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.OracleDialect\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/batch.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/batch.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/batch.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,365 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Batch processing"
+msgstr "Traitement par paquet"
+
+#: index.docbook:7
+msgid "A naive approach to inserting 100 000 rows in the database using Hibernate might look like this:"
+msgstr "Une approche naïve pour insérer 100 000 lignes dans la base de données en utilisant Hibernate pourrait ressembler à ça :"
+
+#: index.docbook:12
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ "}\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ "}\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:14
+msgid "This would fall over with an <literal>OutOfMemoryException</literal> somewhere around the 50 000th row. That's because Hibernate caches all the newly inserted <literal>Customer</literal> instances in the session-level cache."
+msgstr "Ceci devrait s'écrouler avec une <literal>OutOfMemoryException</literal> quelque part aux alentours de la 50 000ème ligne. C'est parce qu'Hibernate cache toutes les instances de <literal>Customer</literal> nouvellement insérées dans le cache de second niveau."
+
+#: index.docbook:20
+msgid "In this chapter we'll show you how to avoid this problem. First, however, if you are doing batch processing, it is absolutely critical that you enable the use of JDBC batching, if you intend to achieve reasonable performance. Set the JDBC batch size to a reasonable number (say, 10-50):"
+msgstr "Dans ce chapitre nous montrerons comment éviter ce problème. D'abord, cependant, si vous faites des traitements par batch, il est absolument critique que vous activiez l'utilisation ds paquet JDBC (NdT : JDBC batching), si vous avez l'intention d'obtenir des performances raisonnables. Configurez la taille du paquet JDBC avec un nombre raisonnable (disons, 10-50) :"
+
+#: index.docbook:27
+msgid "<![CDATA[hibernate.jdbc.batch_size 20]]>"
+msgstr "<![CDATA[hibernate.jdbc.batch_size 20]]>"
+
+#: index.docbook:29
+msgid "Note that Hibernate disables insert batching at the JDBC level transparently if you use an <literal>identiy</literal> identifier generator."
+msgstr "Vous pourriez aussi vouloir faire cette sorte de travail dans un traitement où l'interaction avec le cache de second niveau est complètement désactivé :"
+
+#: index.docbook:34
+msgid "You also might like to do this kind of work in a process where interaction with the second-level cache is completely disabled:"
+msgstr "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
+
+#: index.docbook:39
+msgid "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
+msgstr "Insertions en paquet"
+
+#: index.docbook:41
+msgid "However, this is not absolutely necessary, since we can explicitly set the <literal>CacheMode</literal> to disable interaction with the second-level cache."
+msgstr "Lorsque vous rendez des nouveaux objets persistants, vous devez régulièrement appeler <literal>flush()</literal> et puis <literal>clear()</literal> sur la session, pour contrôler la taille du cache de premier niveau."
+
+#: index.docbook:47
+msgid "Batch inserts"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ " if ( i % 20 == 0 ) { //20, même taille que la taille du paquet JDBC\n"
+ " //flush un paquet d'insertions et libère la mémoire :\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:49
+msgid "When making new objects persistent, you must <literal>flush()</literal> and then <literal>clear()</literal> the session regularly, to control the size of the first-level cache."
+msgstr "Paquet de mises à jour"
+
+#: index.docbook:55
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ " if ( i % 20 == 0 ) { //20, same as the JDBC batch size\n"
+ " //flush a batch of inserts and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "Pour récupérer et mettre à jour des données les mêmes idées s'appliquent. En plus, vous avez besoin d'utiliser <literal>scroll()</literal> pour tirer partie des curseurs côté serveur pour les requêtes qui retournent beaucoup de lignes de données."
+
+#: index.docbook:60
+msgid "Batch updates"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .setCacheMode(CacheMode.IGNORE)\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "int count=0;\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " if ( ++count % 20 == 0 ) {\n"
+ " //flush un paquet de mises à jour et libère la mémoire :\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:62
+msgid "For retrieving and updating data the same ideas apply. In addition, you need to use <literal>scroll()</literal> to take advantage of server-side cursors for queries that return many rows of data."
+msgstr "L'interface StatelessSession"
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .setCacheMode(CacheMode.IGNORE)\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "int count=0;\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " if ( ++count % 20 == 0 ) {\n"
+ " //flush a batch of updates and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "Alternativement, Hibernate fournit une API orientée commande qui peut être utilisée avec des flux de données pour et en provenance de la base de données sous la forme d'objets détachés. Une <literal>StatelessSession</literal> n'a pas de contexte de persistance associé et ne fournit pas beaucoup de sémantique de durée de vie de haut niveau. En particulier, une session sans état n'implémente pas de cache de premier niveau et n'interagit pas non plus avec un cache de seconde niveau ou un cache de requêtes. Elle n'implémente pas les transactions ou la vérification sale automatique (NdT : automatic dirty checking). Les opérations réalisées avec une session sans état ne sont jamais répercutées en cascade sur les instances associées. Les collections sont ignorées par une session sans état. Les opérations exécutées via une session sans état outrepasse le modèle d'événements d'Hibernate et les intercepteurs. Les sessions sans état sont vulnér!
ables aux effets de modification des données, ceci est dû au manque de cache de premier niveau. Une session sans état est une abstraction bas niveau, plus proche de la couche JDBC sous-jacente."
+
+#: index.docbook:73
+msgid "The StatelessSession interface"
+msgstr ""
+ "<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " session.update(customer);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:74
+msgid "Alternatively, Hibernate provides a command-oriented API that may be used for streaming data to and from the database in the form of detached objects. A <literal>StatelessSession</literal> has no persistence context associated with it and does not provide many of the higher-level life cycle semantics. In particular, a stateless session does not implement a first-level cache nor interact with any second-level or query cache. It does not implement transactional write-behind or automatic dirty checking. Operations performed using a stateless session do not ever cascade to associated instances. Collections are ignored by a stateless session. Operations performed via a stateless session bypass Hibernate's event model and interceptors. Stateless sessions are vulnerable to data aliasing effects, due to the lack of a first-level cache. A stateless session is a lower-level abstraction, much closer to the underlying JDBC."
+msgstr "Notez que dans le code de l'exemple, les intances de <literal>Customer</literal> retournées par la requête sont immédiatement détachées. Elles ne sont jamais associées à un contexte de persistance."
+
+#: index.docbook:89
+msgid ""
+ "<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " session.update(customer);\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "Les opérations <literal>insert()</literal>, <literal>update()</literal> et <literal>delete()</literal> définies par l'interface <literal>StatelessSession</literal> sont considérées comme des opérations d'accès direct aux lignes de la base de données, ce qui résulte en une exécution immédiate du SQL <literal>INSERT</literal>, <literal>UPDATE</literal> ou <literal>DELETE</literal> respectif. De là , elles ont des sémantiques tres différentes des opérations <literal>save()</literal>, <literal>saveOrUpdate()</literal> et <literal>delete()</literal> définies par l'interface <literal>Session</literal>."
+
+#: index.docbook:91
+msgid "Note that in this code example, the <literal>Customer</literal> instances returned by the query are immediately detached. They are never associated with any persistence context."
+msgstr "Opérations de style DML"
+
+#: index.docbook:97
+msgid "The <literal>insert(), update()</literal> and <literal>delete()</literal> operations defined by the <literal>StatelessSession</literal> interface are considered to be direct database row-level operations, which result in immediate execution of a SQL <literal>INSERT, UPDATE</literal> or <literal>DELETE</literal> respectively. Thus, they have very different semantics to the <literal>save(), saveOrUpdate()</literal> and <literal>delete()</literal> operations defined by the <literal>Session</literal> interface."
+msgstr "Comme déjà discuté avant, le mapping objet/relationnel automatique et transparent est intéressé par la gestion de l'état de l'objet. Ceci implique que l'état de l'objet est disponible en mémoire, d'où manipuler (en utilisant des expressions du langage de manipulation de données - <literal>Data Manipulation Language</literal> (DML) - SQL) les données directement dans la base n'affectera pas l'état en mémoire. Pourtant, Hibernate fournit des méthodes pour l'exécution d'expression DML de style SQL lesquelles sont réalisées à travers le langage de requête d'Hibernate (<xref linkend=\"queryhql\"/>HQL)."
+
+#: index.docbook:110
+msgid "DML-style operations"
+msgstr "La pseudo-syntaxe pour les expressions <literal>UPDATE</literal> et <literal>DELETE</literal> est : <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?</literal>. Certains points sont à noter :"
+
+#: index.docbook:112
+msgid "As already discussed, automatic and transparent object/relational mapping is concerned with the management of object state. This implies that the object state is available in memory, hence manipulating (using the SQL <literal>Data Manipulation Language</literal> (DML) statements: <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>) data directly in the database will not affect in-memory state. However, Hibernate provides methods for bulk SQL-style DML statement execution which are performed through the Hibernate Query Language (<xref linkend=\"queryhql\"/>HQL)."
+msgstr "Dans la clause from, le mot-clef FROM est optionnel"
+
+#: index.docbook:122
+msgid "The pseudo-syntax for <literal>UPDATE</literal> and <literal>DELETE</literal> statements is: <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?</literal>. Some points to note:"
+msgstr "Il ne peut y avoir qu'une seule entité nommée dans la clause from ; elle peut optionnellement avoir un alias. Si le nom de l'entité a un alias, alors n'importe quelle référence de propriété doit être qualifiée en ayant un alias ; si le nom de l'entité n'a pas d'alias, alors il est illégal pour n'importe quelle référence de propriété d'être qualifiée."
+
+#: index.docbook:130
+msgid "In the from-clause, the FROM keyword is optional"
+msgstr "Aucune jointure (implicite ou explicite) ne peut être spécifiée dans une requête HQL. Les sous-requêtes peuvent être utilisées dans la clause where ; les sous-requêtes, elles-mêmes, peuvent contenir des jointures."
+
+#: index.docbook:135
+msgid "There can only be a single entity named in the from-clause; it can optionally be aliased. If the entity name is aliased, then any property references must be qualified using that alias; if the entity name is not aliased, then it is illegal for any property references to be qualified."
+msgstr "La clause where est aussi optionnelle."
+
+#: index.docbook:143
+msgid "No <xref linkend=\"queryhql-joins-forms\"/>joins (either implicit or explicit) can be specified in a bulk HQL query. Sub-queries may be used in the where-clause; the subqueries, themselves, may contain joins."
+msgstr "Par exemple, pour exécuter un <literal>UPDATE</literal> HQL, utilisez la méthode <literal>Query.executeUpdate()</literal> (la méthode est données pour ceux qui sont familiers avec <literal>PreparedStatement.executeUpdate()</literal> de JDBC) :"
+
+#: index.docbook:150
+msgid "The where-clause is also optional."
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";\n"
+ "// ou String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:156
+msgid "As an example, to execute an HQL <literal>UPDATE</literal>, use the <literal>Query.executeUpdate()</literal> method (the method is named for those familiar with JDBC's <literal>PreparedStatement.executeUpdate()</literal>):"
+msgstr "Pour exécuter un <literal>DELETE</literal> HQL, utilisez la même méthode <literal>Query.executeUpdate()</literal> :"
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";\n"
+ "// or String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlDelete = \"delete Customer c where c.name = :oldName\";\n"
+ "// or String hqlDelete = \"delete Customer where name = :oldName\";\n"
+ "int deletedEntities = s.createQuery( hqlDelete )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:164
+msgid "HQL <literal>UPDATE</literal> statements, by default do not effect the <xref linkend=\"mapping-declaration-version\"/>version or the <xref linkend=\"mapping-declaration-timestamp\"/>timestamp property values for the affected entities; this is in keeping with the EJB3 specification. However, you can force Hibernate to properly reset the <literal>version</literal> or <literal>timestamp</literal> property values through the use of a <literal>versioned update</literal>. This is achieved by adding the <literal>VERSIONED</literal> keyword after the <literal>UPDATE</literal> keyword."
+msgstr "La valeur du <literal>int</literal> retourné par la méthode <literal>Query.executeUpdate()</literal> indique le nombre d'entités affectées par l'opération. Considérez que cela peut ou pas corréler le nombre de lignes affectés dans la base de données. Une opération HQL pourrait entraîner l'exécution de multiples expressions SQL réelles, pour des classes filles mappées par jointure (NdT: join-subclass), par exemple. Le nombre retourné indique le nombre d'entités réelles affectées par l'expression. Retour à l'exemple de la classe fille mappée par jointure, un effacement d'une des classes filles peut réellement entraîner des suppressions pas seulement dans la table qui mappe la classe fille, mais aussi dans la table \"racine\" et potentillement dans les tables des classes filles plus bas dans la hiérarchie d'héritage."
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "String hqlVersionedUpdate = \"update versioned Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "La pseudo-syntaxe pour l'expression <literal>INSERT</literal> est : <literal>INSERT INTO EntityName properties_list select_statement</literal>. Quelques points sont à noter :"
+
+#: index.docbook:176
+msgid "Note that custom version types (<literal>org.hibernate.usertype.UserVersionType</literal>) are not allowed in conjunction with a <literal>update versioned</literal> statement."
+msgstr "Seule la forme INSERT INTO ... SELECT ... est supportée ; pas la forme INSERT INTO ... VALUES ... ."
+
+#: index.docbook:181
+msgid "To execute an HQL <literal>DELETE</literal>, use the same <literal>Query.executeUpdate()</literal> method:"
+msgstr "La properties_list est analogue à la <literal>spécification de la colonne</literal> The properties_list is analogous to the <literal>column speficiation</literal> dans l'expression SQL <literal>INSERT</literal>. Pour les entités impliquées dans un héritage mappé, seules les propriétés directement définies à ce niveau de classe donné peuvent être utilisées dans properties_list. Les propriétés de la classe mère ne sont pas permises ; et les propriétés des classes filles n'ont pas de sens. En d'autres mots, les expressions <literal>INSERT</literal> par nature non polymorphiques."
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlDelete = \"delete Customer c where c.name = :oldName\";\n"
+ "// or String hqlDelete = \"delete Customer where name = :oldName\";\n"
+ "int deletedEntities = s.createQuery( hqlDelete )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "select_statement peut être n'importe quelle requête de sélection HQl valide, avec l'avertissement que les types de retour doivent correspondre aux types attendus par l'insertion. Actuellement, c'est vérifié durant la compilation de la requête plutôt que la vérification soit reléguée à la base de données. Notez cependant que cela pourrait poser des problèmes entre les <literal>Type</literal>s d'Hibernate qui sont <emphasis>équivalents</emphasis> opposé à <emphasis>égaux</emphasis>. Cela pourrait poser des problèmes avec des disparités entre une propriété définie comme un <literal>org.hibernate.type.DateType</literal> et une propriété définie comme un <literal>org.hibernate.type.TimestampType</literal>, même si la base de données ne ferait pas de distinction ou ne serait pas capable de gérer la conversion."
+
+#: index.docbook:188
+msgid "The <literal>int</literal> value returned by the <literal>Query.executeUpdate()</literal> method indicate the number of entities effected by the operation. Consider this may or may not correlate to the number of rows effected in the database. An HQL bulk operation might result in multiple actual SQL statements being executed, for joined-subclass, for example. The returned number indicates the number of actual entities affected by the statement. Going back to the example of joined-subclass, a delete against one of the subclasses may actually result in deletes against not just the table to which that subclass is mapped, but also the \"root\" table and potentially joined-subclass tables further down the inheritence hierarchy."
+msgstr "Pour la propriéte id, l'expression d'insertion vous donne deux options. Vous pouvez soit spécifier explicitement la propriété id dans properties_list (auquel cas sa valeur est extraite de l'expression de sélection correspondante), soit l'omettre de properties_list (auquel cas une valeur générée est utilisée). Cette dernière option est seulement disponible en utilisant le générateur d'identifiant qui opère dans la base de données ; tenter d'utiliser cette option avec n'importe quel type de générateur \"en mémoire\" causera une exception durant l'analyse. Notez que pour les buts de cette discussion, les générateurs \"en base\" sont considérés être <literal>org.hibernate.id.SequenceGenerator</literal> (et ses classes filles) et n'importe quelles implémentations de <literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>. L'exception la plus notable ici est <literal>org.hibernate.id.TableHiLoGenerator</literal>, qu ne peut pas être utili!
sée parce qu'il ne propose pas un moyen de d'exposer ses valeurs par un select."
+
+#: index.docbook:199
+msgid "The pseudo-syntax for <literal>INSERT</literal> statements is: <literal>INSERT INTO EntityName properties_list select_statement</literal>. Some points to note:"
+msgstr "Pour des propriétés mappées comme <literal>version</literal> ou <literal>timestamp</literal>, l'expression d'insertion vous donne deux options. Vous pouvez soit spécifier la propriété dans properties_list (auquel cas sa valeur est extraite des expressions select correspondantes), soit l'omettre de properties_list (auquel cas la <literal>valeur de graine</literal> (NdT : seed value) définie par le <literal>org.hibernate.type.VersionType</literal> est utilisée)."
+
+#: index.docbook:207
+msgid "Only the INSERT INTO ... SELECT ... form is supported; not the INSERT INTO ... VALUES ... form."
+msgstr "Un exemple d'exécution d'une expression <literal>INSERT</literal> HQL :"
+
+#: index.docbook:210
+msgid "The properties_list is analogous to the <literal>column speficiation</literal> in the SQL <literal>INSERT</literal> statement. For entities involved in mapped inheritence, only properties directly defined on that given class-level can be used in the properties_list. Superclass properties are not allowed; and subclass properties do not make sense. In other words, <literal>INSERT</literal> statements are inherently non-polymorphic."
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";\n"
+ "int createdEntities = s.createQuery( hqlInsert )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:220
+msgid "select_statement can be any valid HQL select query, with the caveat that the return types must match the types expected by the insert. Currently, this is checked during query compilation rather than allowing the check to relegate to the database. Note however that this might cause problems between Hibernate <literal>Type</literal>s which are <emphasis>equivalent</emphasis> as opposed to <emphasis>equal</emphasis>. This might cause issues with mismatches between a property defined as a <literal>org.hibernate.type.DateType</literal> and a property defined as a <literal>org.hibernate.type.TimestampType</literal>, even though the database might not make a distinction or might be able to handle the conversion."
+msgstr ""
+
+#: index.docbook:232
+msgid "For the id property, the insert statement gives you two options. You can either explicitly specify the id property in the properties_list (in which case its value is taken from the corresponding select expression) or omit it from the properties_list (in which case a generated value is used). This later option is only available when using id generators that operate in the database; attempting to use this option with any \"in memory\" type generators will cause an exception during parsing. Note that for the purposes of this discussion, in-database generators are considered to be <literal>org.hibernate.id.SequenceGenerator</literal> (and its subclasses) and any implementors of <literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>. The most notable exception here is <literal>org.hibernate.id.TableHiLoGenerator</literal>, which cannot be used because it does not expose a selectable way to get its values."
+msgstr ""
+
+#: index.docbook:247
+msgid "For properties mapped as either <literal>version</literal> or <literal>timestamp</literal>, the insert statement gives you two options. You can either specify the property in the properties_list (in which case its value is taken from the corresponding select expressions) or omit it from the properties_list (in which case the <literal>seed value</literal> defined by the <literal>org.hibernate.type.VersionType</literal> is used)."
+msgstr ""
+
+#: index.docbook:257
+msgid "An example HQL <literal>INSERT</literal> statement execution:"
+msgstr ""
+
+#: index.docbook:261
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";\n"
+ "int createdEntities = s.createQuery( hqlInsert )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/best_practices.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/best_practices.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/best_practices.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,168 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Best Practices"
+msgstr "Meilleures pratiques"
+
+#: index.docbook:9
+msgid "Write fine-grained classes and map them using <literal><component></literal>."
+msgstr "Découpez finement vos classes et mappez les en utilisant <literal><component></literal>."
+
+#: index.docbook:11
+msgid "Use an <literal>Address</literal> class to encapsulate <literal>street</literal>, <literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>. This encourages code reuse and simplifies refactoring."
+msgstr "Utilisez une classe <literal>Adresse</literal> pour encapsuler <literal>Rue</literal>, <literal>Region</literal>, <literal>CodePostal</literal>. Ceci permet la réutilisation du code et simplifie la maintenance."
+
+#: index.docbook:19
+msgid "Declare identifier properties on persistent classes."
+msgstr "Déclarez des propriétés d'identifiants dans les classes persistantes."
+
+#: index.docbook:21
+msgid "Hibernate makes identifier properties optional. There are all sorts of reasons why you should use them. We recommend that identifiers be 'synthetic' (generated, with no business meaning)."
+msgstr "Hibernate rend les propriétés d'identifiants optionnelles. Il existe beaucoup de raisons pour lesquelles vous devriez les utiliser. Nous recommandons que vous utilisiez des identifiants techniques (générés, et sans connotation métier)."
+
+#: index.docbook:29
+msgid "Identify natural keys."
+msgstr "Identifiez les clefs naturelles."
+
+#: index.docbook:31
+msgid "Identify natural keys for all entities, and map them using <literal><natural-id></literal>. Implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the properties that make up the natural key."
+msgstr "Identifiez les clefs naturelles pour toutes les entités, et mappez les avec <literal><natural-id></literal>. Implémentez <literal>equals()</literal> et <literal>hashCode()</literal> pour comparer les propriétés qui composent la clef naturelle."
+
+#: index.docbook:39
+msgid "Place each class mapping in its own file."
+msgstr "Placez chaque mapping de classe dans son propre fichier."
+
+#: index.docbook:41
+msgid "Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</literal> in the file <literal>com/eg/Foo.hbm.xml</literal>. This makes particularly good sense in a team environment."
+msgstr "N'utilisez pas un unique document de mapping. Mappez <literal>com.eg.Foo</literal> dans le fichier <literal>com/eg/Foo.hbm.xml</literal>. Cela prend tout son sens lors d'un travail en équipe."
+
+#: index.docbook:49
+msgid "Load mappings as resources."
+msgstr "Chargez les mappings comme des ressources."
+
+#: index.docbook:51
+msgid "Deploy the mappings along with the classes they map."
+msgstr "Déployez les mappings en même temps que les classes qu'ils mappent."
+
+#: index.docbook:57
+msgid "Consider externalising query strings."
+msgstr "Pensez à externaliser les chaînes de caractères."
+
+#: index.docbook:59
+msgid "This is a good practice if your queries call non-ANSI-standard SQL functions. Externalising the query strings to mapping files will make the application more portable."
+msgstr "Ceci est une bonne habitude si vos requêtes appellent des fonctions SQL qui ne sont pas au standard ANSI. Cette externalisation dans les fichiers de mapping rendra votre application plus portable."
+
+#: index.docbook:67
+msgid "Use bind variables."
+msgstr "Utilisez les variables \"bindées\"."
+
+#: index.docbook:69
+msgid "As in JDBC, always replace non-constant values by \"?\". Never use string manipulation to bind a non-constant value in a query! Even better, consider using named parameters in queries."
+msgstr "Comme en JDBC, remplacez toujours les valeurs non constantes par \"?\". N'utilisez jamais la manipulation des chaînes de caractères pour remplacer des valeurs non constantes dans une requête ! Encore mieux, utilisez les paramètres nommés dans les requêtes."
+
+#: index.docbook:77
+msgid "Don't manage your own JDBC connections."
+msgstr "Ne gérez pas vous même les connexions JDBC."
+
+#: index.docbook:79
+msgid "Hibernate lets the application manage JDBC connections. This approach should be considered a last-resort. If you can't use the built-in connections providers, consider providing your own implementation of <literal>org.hibernate.connection.ConnectionProvider</literal>."
+msgstr "Hibernate laisse l'application gérer les connexions JDBC. Vous ne devriez gérer vos connexions qu'en dernier recours. Si vous ne pouvez pas utiliser les systèmes de connexions livrés, réfléchissez à l'idée de fournir votre propre implémentation de <literal>org.hibernate.connection.ConnectionProvider</literal>."
+
+#: index.docbook:87
+msgid "Consider using a custom type."
+msgstr "Pensez à utiliser les types utilisateurs."
+
+#: index.docbook:89
+msgid "Suppose you have a Java type, say from some library, that needs to be persisted but doesn't provide the accessors needed to map it as a component. You should consider implementing <literal>org.hibernate.UserType</literal>. This approach frees the application code from implementing transformations to / from a Hibernate type."
+msgstr "Supposez que vous ayez une type Java, de telle bibliothèque, qui a besoin d'être persisté mais qui ne fournit pas les accesseurs nécessaires pour le mapper comme composant. Vous devriez implémenter <literal>org.hibernate.UserType</literal>.Cette approche libère le code de l'application de l'implémentation des transformations vers / depuis les types Hibernate."
+
+#: index.docbook:98
+msgid "Use hand-coded JDBC in bottlenecks."
+msgstr "Utilisez du JDBC pur dans les goulets d'étranglement."
+
+#: index.docbook:100
+msgid "In performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. But please, wait until you <emphasis>know</emphasis> something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If you need to use direct JDBC, it might be worth opening a Hibernate <literal>Session</literal> and using that JDBC connection. That way you can still use the same transaction strategy and underlying connection provider."
+msgstr "Dans certaines parties critiques de votre système d'un point de vue performance, quelques opérations peuvent tirer partie d'un appel JDBC natif. Mais attendez de <emphasis>savoir</emphasis> que c'est un goulet d'étranglement. Ne supposez jamais qu'un appel JDBC sera forcément plus rapide. Si vous avez besoin d'utiliser JDBC directement, ouvrez une <literal>Session</literal> Hibernate et utilisez la connexion SQL sous-jacente. Ainsi vous pourrez utiliser la même stratégie de transation et la même gestion des connexions."
+
+#: index.docbook:110
+msgid "Understand <literal>Session</literal> flushing."
+msgstr "Comprendre le flush de <literal>Session</literal>."
+
+#: index.docbook:112
+msgid "From time to time the Session synchronizes its persistent state with the database. Performance will be affected if this process occurs too often. You may sometimes minimize unnecessary flushing by disabling automatic flushing or even by changing the order of queries and other operations within a particular transaction."
+msgstr "De temps en temps la Session synchronise ses états persistants avec la base de données. Les performances seront affectées si ce processus arrive trop souvent. Vous pouvez parfois minimiser les flush non nécessaires en désactivant le flush automatique ou même en changeant l'ordre des opérations menées dans une transaction particulière."
+
+#: index.docbook:121
+msgid "In a three tiered architecture, consider using detached objects."
+msgstr "Dans une architecture à trois couches, pensez à utiliser <literal>saveOrUpdate()</literal>."
+
+#: index.docbook:123
+msgid "When using a servlet / session bean architecture, you could pass persistent objects loaded in the session bean to and from the servlet / JSP layer. Use a new session to service each request. Use <literal>Session.merge()</literal> or <literal>Session.saveOrUpdate()</literal> to synchronize objects with the database."
+msgstr "Quand vous utilisez une architecture à base de servlet / session bean, vous pourriez passer des objets chargés dans le bean session vers et depuis la couche servlet / JSP. Utilisez une nouvelle session pour traiter chaque requête. Utilisez <literal>Session.merge()</literal> ou <literal>Session.saveOrUpdate()</literal> pour synchroniser les objets avec la base de données."
+
+#: index.docbook:132
+msgid "In a two tiered architecture, consider using long persistence contexts."
+msgstr "Dans une architecture à deux couches, pensez à utiliser la déconnexion de session."
+
+#: index.docbook:134
+msgid "Database Transactions have to be as short as possible for best scalability. However, it is often neccessary to implement long running <emphasis>application transactions</emphasis>, a single unit-of-work from the point of view of a user. An application transaction might span several client request/response cycles. It is common to use detached objects to implement application transactions. An alternative, extremely appropriate in two tiered architecture, is to maintain a single open persistence contact (session) for the whole life cycle of the application transaction and simply disconnect from the JDBC connection at the end of each request and reconnect at the beginning of the subsequent request. Never share a single session across more than one application transaction, or you will be working with stale data."
+msgstr "Les transactions de bases de données doivent être aussi courtes que possible pour une meilleure montée en charge.Cependant, il est souvent nécessaire d'implémenter de longues <emphasis>transactions applicatives</emphasis>, une simple unité de travail du point de vue de l'utilisateur. Une transaction applicative peut s'étaler sur plusieurs cycles de requêtes/réponses du client. Il est commun d'utiliser des objets détachés pour implémenter des transactions applicatives. Une alternative, extrêmement appropriée dans une architecture à 2 couches, est de maintenir un seul contact de persistance ouvert (session) pour toute la durée de vie de la transaction applicative et simplement se déconnecter de la connexion JDBC à la fin de chaque requête, et se reconnecter au début de la requête suivante. Ne partagez jamais une seule session avec plus d'une transaction applicative, ou vous travaillerez avec des données périmées."
+
+#: index.docbook:148
+msgid "Don't treat exceptions as recoverable."
+msgstr "Considérez que les exceptions ne sont pas rattrapables."
+
+#: index.docbook:150
+msgid "This is more of a necessary practice than a \"best\" practice. When an exception occurs, roll back the <literal>Transaction</literal> and close the <literal>Session</literal>. If you don't, Hibernate can't guarantee that in-memory state accurately represents persistent state. As a special case of this, do not use <literal>Session.load()</literal> to determine if an instance with the given identifier exists on the database; use <literal>Session.get()</literal> or a query instead."
+msgstr "Il s'agit plus d'une pratique obligatoire que d'une \"meilleure pratique\". Quand une exception intervient, il faut faire un rollback de la <literal>Transaction</literal> et fermer la <literal>Session</literal>. Sinon, Hibernate ne peut garantir l'intégrité des états persistants en mémoire. En particulier, n'utilisez pas <literal>Session.load()</literal> pour déterminer si une instance avec un identifiant donné existe en base de données, utilisez <literal>Session.get()</literal> ou un requête."
+
+#: index.docbook:160
+msgid "Prefer lazy fetching for associations."
+msgstr "Préférez le chargement tardif des associations."
+
+#: index.docbook:162
+msgid "Use eager fetching sparingly. Use proxies and lazy collections for most associations to classes that are not likely to be completely held in the second-level cache. For associations to cached classes, where there is an a extremely high probability of a cache hit, explicitly disable eager fetching using <literal>lazy=\"false\"</literal>. When an join fetching is appropriate to a particular use case, use a query with a <literal>left join fetch</literal>."
+msgstr "Utilisez le chargement complet avec modération. Utilisez les proxies et les collections chargées tardivement pour la plupart des associations vers des classes qui ne sont pas susceptibles d'être complètement retenues dans le cache de second niveau. Pour les assocations de classes en cache, où il y a une extrêmement forte probabilité que l'élément soit en cache, désactivez explicitement le chargement par jointures ouvertes en utilisant <literal>outer-join=\"false\"</literal>. Lorsqu'un chargement par jointure ouverte est approprié pour un cas d'utilisation particulier, utilisez une requête avec un <literal>left join fetch</literal>."
+
+#: index.docbook:172
+msgid "Use the <emphasis>open session in view</emphasis> pattern, or a disciplined <emphasis>assembly phase</emphasis> to avoid problems with unfetched data."
+msgstr "Utilisez le pattern <emphasis>d'une ouverture de session dans une vue</emphasis>, ou une <emphasis>phase d'assemblage</emphasis> disciplinée pour éviter des problèmes avec des données non rapatriées."
+
+#: index.docbook:177
+msgid "Hibernate frees the developer from writing tedious <emphasis>Data Transfer Objects</emphasis> (DTO). In a traditional EJB architecture, DTOs serve dual purposes: first, they work around the problem that entity beans are not serializable; second, they implicitly define an assembly phase where all data to be used by the view is fetched and marshalled into the DTOs before returning control to the presentation tier. Hibernate eliminates the first purpose. However, you will still need an assembly phase (think of your business methods as having a strict contract with the presentation tier about what data is available in the detached objects) unless you are prepared to hold the persistence context (the session) open across the view rendering process. This is not a limitation of Hibernate! It is a fundamental requirement of safe transactional data access."
+msgstr "Hibernate libère les développeurs de l'écriture fastidieuse des <emphasis>objets de transfert de données (NdT : Data Transfer Objects)</emphasis> (DTO). Dans une architecture EJB traditionnelle, les DTOs ont deux buts : premièrement, ils contournent le problème des \"entity bean\" qui ne sont pas sérialisables ; deuxièmement, ils définissent implicitement une phase d'assemblage où toutes les données utilisées par la vue sont rapatriées et organisées dans les DTOs avant de retourner sous le contrôle de la couche de présentation. Hibernate élimine le premier but. Pourtant, vous aurez encore besoin d'une phase d'assemblage (pensez vos méthodes métier comme ayant un contrat strict avec la couche de présentation à propos de quelles données sont disponibles dans les objets détachés) à moins que vous soyez préparés à garder le contexte de persistance (la session) ouvert à travers tout le processus de rendu de la vue."
+
+#: index.docbook:191
+msgid "Consider abstracting your business logic from Hibernate."
+msgstr "Pensez à abstraite votre logique métier d'Hibernate."
+
+#: index.docbook:193
+msgid "Hide (Hibernate) data-access code behind an interface. Combine the <emphasis>DAO</emphasis> and <emphasis>Thread Local Session</emphasis> patterns. You can even have some classes persisted by handcoded JDBC, associated to Hibernate via a <literal>UserType</literal>. (This advice is intended for \"sufficiently large\" applications; it is not appropriate for an application with five tables!)"
+msgstr "Cachez le mécanisme d'accès aux données (Hibernate) derrière une interface. Combinez les patterns <emphasis>DAO</emphasis> et <emphasis>Thread Local Session</emphasis>. Vous pouvez même avoir quelques classes persistées par du JDBC pur, associées à Hibernate via un <literal>UserType</literal> (ce conseil est valable pour des applications de taille respectables ; il n'est pas valable pour une application avec cinq tables)."
+
+#: index.docbook:203
+msgid "Don't use exotic association mappings."
+msgstr "N'utilisez pas d'associations de mapping exotiques."
+
+#: index.docbook:205
+msgid "Good usecases for a real many-to-many associations are rare. Most of the time you need additional information stored in the \"link table\". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, we think that most associations are one-to-many and many-to-one, you should be careful when using any other association style and ask yourself if it is really neccessary."
+msgstr "De bons cas d'utilisation pour de vraies associations plusieurs-vers-plusieurs sont rares. La plupart du temps vous avez besoin d'informations additionnelles stockées dans la table d'association. Dans ce cas, il est préférable d'utiliser deux associations un-vers-plusieurs vers une classe de liaisons intermédiaire. En fait, nous pensons que la plupart des associations sont de type un-vers-plusieurs ou plusieurs-vers-un, vous devez être très attentifs lorsque vous utilisez autre chose et vous demander si c'est vraiment nécessaire."
+
+#: index.docbook:215
+msgid "Prefer bidirectional associations."
+msgstr "Préférez les associations bidirectionnelles."
+
+#: index.docbook:217
+msgid "Unidirectional associations are more difficult to query. In a large application, almost all associations must be navigable in both directions in queries."
+msgstr "Les associations unidirectionnelles sont plus difficiles à questionner. Dans une grande application, la plupart des associations devraient être navigables dans les deux directions dans les requêtes."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/collection_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/collection_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/collection_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1287 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Collection Mapping"
+msgstr "Mapping des collections"
+
+#: index.docbook:8
+msgid "Persistent collections"
+msgstr "Collections persistantes"
+
+#: index.docbook:10
+msgid "Hibernate requires that persistent collection-valued fields be declared as an interface type, for example:"
+msgstr "Hibernate requiert que les champs contenant des collections persistantes soient déclarés comme des types d'interface, par exemple :"
+
+#: index.docbook:15
+msgid ""
+ "<![CDATA[public class Product {\n"
+ " private String serialNumber;\n"
+ " private Set parts = new HashSet();\n"
+ " \n"
+ " public Set getParts() { return parts; }\n"
+ " void setParts(Set parts) { this.parts = parts; }\n"
+ " public String getSerialNumber() { return serialNumber; }\n"
+ " void setSerialNumber(String sn) { serialNumber = sn; }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Product {\n"
+ " private String serialNumber;\n"
+ " private Set parts = new HashSet();\n"
+ "\n"
+ " public Set getParts() { return parts; }\n"
+ " void setParts(Set parts) { this.parts = parts; }\n"
+ " public String getSerialNumber() { return serialNumber; }\n"
+ " void setSerialNumber(String sn) { serialNumber = sn; }\n"
+ "}]]>"
+
+#: index.docbook:17
+msgid "The actual interface might be <literal>java.util.Set</literal>, <literal>java.util.Collection</literal>, <literal>java.util.List</literal>, <literal>java.util.Map</literal>, <literal>java.util.SortedSet</literal>, <literal>java.util.SortedMap</literal> or ... anything you like! (Where \"anything you like\" means you will have to write an implementation of <literal>org.hibernate.usertype.UserCollectionType</literal>.)"
+msgstr "L'interface réelle devrait être <literal>java.util.Set</literal>, <literal>java.util.Collection</literal>, <literal>java.util.List</literal>, <literal>java.util.Map</literal>, <literal>java.util.SortedSet</literal>, <literal>java.util.SortedMap</literal> ou ... n'importe quoi d'autre ! (Où \"n'importe quoi d'autre\" signifie que vous devrez écrire une implémentation de <literal>org.hibernate.usertype.UserCollectionType</literal>.)"
+
+#: index.docbook:26
+msgid "Notice how we initialized the instance variable with an instance of <literal>HashSet</literal>. This is the best way to initialize collection valued properties of newly instantiated (non-persistent) instances. When you make the instance persistent - by calling <literal>persist()</literal>, for example - Hibernate will actually replace the <literal>HashSet</literal> with an instance of Hibernate's own implementation of <literal>Set</literal>. Watch out for errors like this:"
+msgstr "Notez comment nous avons initialisé les variables d'instance avec une instance de <literal>HashSet</literal>. C'est le meilleur moyen pour initialiser les collections d'instances nouvellement créées (non persistantes). Quand nous fabriquons l'instance persistante - en appelant <literal>persist()</literal>, par exemple - Hibernate remplacera réellement le <literal>HashSet</literal> avec une instance d'une implémentation propre à Hibernate de <literal>Set</literal>. Prenez garde aux erreurs :"
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "Cat kitten = new DomesticCat();\n"
+ "....\n"
+ "Set kittens = new HashSet();\n"
+ "kittens.add(kitten);\n"
+ "cat.setKittens(kittens);\n"
+ "session.persist(cat);\n"
+ "kittens = cat.getKittens(); // Okay, kittens collection is a Set\n"
+ "(HashSet) cat.getKittens(); // Error!]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "Cat kitten = new DomesticCat();\n"
+ "....\n"
+ "Set kittens = new HashSet();\n"
+ "kittens.add(kitten);\n"
+ "cat.setKittens(kittens);\n"
+ "session.persist(cat);\n"
+ "kittens = cat.getKittens(); // Ok, la collection kittens est un Set\n"
+ "(HashSet) cat.getKittens(); // Erreur !]]>"
+
+#: index.docbook:38
+msgid "The persistent collections injected by Hibernate behave like <literal>HashMap</literal>, <literal>HashSet</literal>, <literal>TreeMap</literal>, <literal>TreeSet</literal> or <literal>ArrayList</literal>, depending upon the interface type."
+msgstr "Les collections persistantes injectées par Hibernate se comportent de la même manière que <literal>HashMap</literal>, <literal>HashSet</literal>, <literal>TreeMap</literal>, <literal>TreeSet</literal> ou <literal>ArrayList</literal>, selon le type de l'interface."
+
+#: index.docbook:45
+msgid "Collections instances have the usual behavior of value types. They are automatically persisted when referenced by a persistent object and automatically deleted when unreferenced. If a collection is passed from one persistent object to another, its elements might be moved from one table to another. Two entities may not share a reference to the same collection instance. Due to the underlying relational model, collection-valued properties do not support null value semantics; Hibernate does not distinguish between a null collection reference and an empty collection."
+msgstr "Les instances des collections ont le comportement habituel des types des valeurs. Elles sont automatiquement persistées quand elles sont référencées par un objet persistant et automatiquement effacées quand elles sont déréférencées. Si une collection est passée d'un objet persistant à un autre, ses éléments pourraient être déplacés d'une table à une autre. Deux entités ne peuvent pas partager une référence vers une même instance d'une collection. Dû au modèle relationnel sous-jacent, les propriétés contenant des collections ne supportent pas la sémantique de la valeur null ; Hibernate ne distingue pas une référence vers une collection nulle d'une collection vide."
+
+#: index.docbook:56
+msgid "You shouldn't have to worry much about any of this. Use persistent collections the same way you use ordinary Java collections. Just make sure you understand the semantics of bidirectional associations (discussed later)."
+msgstr "Vous ne devriez pas vous préoccuper trop de ça. Utilisez les collections persistantes de la même manière que vous utilisez des collections Java ordinaires. Assurez-vous de comprendre la sémantique des associations bidirectionnelles (traitée plus loin)."
+
+#: index.docbook:65
+msgid "Collection mappings"
+msgstr "Mapper une collection"
+
+#: index.docbook:67
+msgid "The Hibernate mapping element used for mapping a collection depends upon the type of the interface. For example, a <literal><set></literal> element is used for mapping properties of type <literal>Set</literal>."
+msgstr "L'élément de mapping d'Hibernate utilisé pour mapper une collection dépend du type de l'interface. Par exemple, un élément <literal><set></literal> est utilisé pour mapper des propriétés de type <literal>Set</literal>."
+
+#: index.docbook:73
+msgid ""
+ "<![CDATA[<class name=\"Product\">\n"
+ " <id name=\"serialNumber\" column=\"productSerialNumber\"/>\n"
+ " <set name=\"parts\">\n"
+ " <key column=\"productSerialNumber\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Product\">\n"
+ " <id name=\"serialNumber\" column=\"productSerialNumber\"/>\n"
+ " <set name=\"parts\">\n"
+ " <key column=\"productSerialNumber\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:75
+msgid "Apart from <literal><set></literal>, there is also <literal><list></literal>, <literal><map></literal>, <literal><bag></literal>, <literal><array></literal> and <literal><primitive-array></literal> mapping elements. The <literal><map></literal> element is representative:"
+msgstr "à part <literal><set></literal>, il y aussi les éléments de mapping <literal><list></literal>, <literal><map></literal>, <literal><bag></literal>, <literal><array></literal> et <literal><primitive-array></literal>. L'élément <literal><map></literal> est représentatif :"
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<map\n"
+ " name=\"propertyName\"\n"
+ " table=\"table_name\"\n"
+ " schema=\"schema_name\"\n"
+ " lazy=\"true|extra|false\"\n"
+ " inverse=\"true|false\"\n"
+ " cascade=\"all|none|save-update|delete|all-delete-orphan|delete-orphan\"\n"
+ " sort=\"unsorted|natural|comparatorClass\"\n"
+ " order-by=\"column_name asc|desc\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " fetch=\"join|select|subselect\"\n"
+ " batch-size=\"N\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " mutable=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <key .... />\n"
+ " <map-key .... />\n"
+ " <element .... />\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map\n"
+ " name=\"nomDePropriete\"\n"
+ " table=\"nom_de_table\"\n"
+ " schema=\"nom_du_schema\"\n"
+ " lazy=\"true|extra|false\"\n"
+ " inverse=\"true|false\"\n"
+ " cascade=\"all|none|save-update|delete|all-delete-orphan\"\n"
+ " sort=\"unsorted|natural|ClasseDeComparateur\"\n"
+ " order-by=\"nom_de_column asc|desc\"\n"
+ " where=\"condition sql where quelcconque\"\n"
+ " fetch=\"join|select|subselect\"\n"
+ " batch-size=\"N\"\n"
+ " access=\"field|property|NomDeClasse\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " mutable=\"true|false\"\n"
+ " node=\"nom-d-element|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <key .... />\n"
+ " <map-key .... />\n"
+ " <element .... />\n"
+ "</map>]]>"
+
+#: index.docbook:103
+msgid "<literal>name</literal> the collection property name"
+msgstr "<literal>name</literal> : le nom de la propriété contenant la collection"
+
+#: index.docbook:108
+msgid "<literal>table</literal> (optional - defaults to property name) the name of the collection table (not used for one-to-many associations)"
+msgstr "<literal>table</literal> (optionnel - par défaut = nom de la propriété) : le nom de la table de la collection (non utilisé pour les associations one-to-many)"
+
+#: index.docbook:114
+msgid "<literal>schema</literal> (optional) the name of a table schema to override the schema declared on the root element"
+msgstr "<literal>schema</literal> (optionnel) : le nom du schéma pour surcharger le schéma déclaré dans l'élément racine"
+
+#: index.docbook:120
+msgid "<literal>lazy</literal> (optional - defaults to <literal>true</literal>) may be used to disable lazy fetching and specify that the association is always eagerly fetched, or to enable \"extra-lazy\" fetching where most operations do not initialize the collection (suitable for very large collections)"
+msgstr "<literal>lazy</literal> (optionnel - par défaut = <literal>true</literal>) : peut être utilisé pour désactiver l'initialisation tardive et spécifier que l'association est toujours rapportée, ou pour activer la récupération extra-paresseuse (NdT : extra-lazy) où la plupart des opérations n'initialisent pas la collection (approprié pour de très grosses collections)"
+
+#: index.docbook:129
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>) mark this collection as the \"inverse\" end of a bidirectional association"
+msgstr "<literal>inverse</literal> (optionnel - par défaut = <literal>false</literal>) : définit cette collection comme l'extrêmité \"inverse\" de l'association bidirectionnelle"
+
+#: index.docbook:135
+msgid "<literal>cascade</literal> (optional - defaults to <literal>none</literal>) enable operations to cascade to child entities"
+msgstr "<literal>cascade</literal> (optionnel - par défaut = <literal>none</literal>) : active les opérations de cascade vers les entités filles"
+
+#: index.docbook:141
+msgid "<literal>sort</literal> (optional) specify a sorted collection with <literal>natural</literal> sort order, or a given comparator class"
+msgstr "<literal>sort</literal> (optionnel) : spécifie une collection triée via un ordre de tri <literal>naturel</literal>, ou via une classe comparateur donnée (implémentant Comparator)"
+
+#: index.docbook:147
+msgid "<literal>order-by</literal> (optional, JDK1.4 only) specify a table column (or columns) that define the iteration order of the <literal>Map</literal>, <literal>Set</literal> or bag, together with an optional <literal>asc</literal> or <literal>desc</literal>"
+msgstr "<literal>order-by</literal> (optionnel, seulement à partir du JDK1.4) : spécifie une colonne de table (ou des colonnes) qui définit l'ordre d'itération de <literal>Map</literal>, <literal>Set</literal> ou Bag, avec en option <literal>asc</literal> ou <literal>desc</literal>"
+
+#: index.docbook:154
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving or removing the collection (useful if the collection should contain only a subset of the available data)"
+msgstr "<literal>where</literal> (optionnel) : spécifie une condition SQL arbitraire <literal>WHERE</literal> à utiliser au chargement ou à la suppression d'une collection (utile si la collection ne doit contenir qu'un sous ensemble des données disponibles)"
+
+#: index.docbook:161
+msgid "<literal>fetch</literal> (optional, defaults to <literal>select</literal>) Choose between outer-join fetching, fetching by sequential select, and fetching by sequential subselect."
+msgstr "<literal>fetch</literal> (optionnel, par défaut = <literal>select</literal>) : à choisir entre récupération par jointures externes, récupération par selects séquentiels, et récupération par sous-selects séquentiels"
+
+#: index.docbook:168
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for lazily fetching instances of this collection."
+msgstr "<literal>batch-size</literal> (optionnel, par défaut = <literal>1</literal>) : une taille de batch (batch size) utilisée pour charger plusieurs instances de cette collection en initialisation tardive"
+
+#: index.docbook:174
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the collection property value."
+msgstr "<literal>access</literal> (optionnel - par défaut = <literal>property</literal>) : La stratégie qu'Hibernate doit utiliser pour accéder à la valeur de la propriété"
+
+#: index.docbook:180
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Species that changes to the state of the collection results in increment of the owning entity's version. (For one to many associations, it is often reasonable to disable this setting.)"
+msgstr "<literal>optimistic-lock</literal> (optionnel - par défaut = <literal>true</literal>) : spécifie que changer l'état de la collection entraîne l'incrémentation de la version appartenant à l'entité (Pour une association un vers plusieurs, il est souvent raisonnable de désactiver ce paramètre)"
+
+#: index.docbook:188
+msgid "<literal>mutable</literal> (optional - defaults to <literal>true</literal>): A value of <literal>false</literal> specifies that the elements of the collection never change (a minor performance optimization in some cases)."
+msgstr "<literal>mutable</literal> (optionnel - par défaut = <literal>true</literal>) : une valeur à <literal>false</literal> spécifie que les éléments de la collection ne changent jamais (une optimisation mineure dans certains cas)"
+
+#: index.docbook:198
+msgid "Collection foreign keys"
+msgstr "Les clefs étrangères d'une collection"
+
+#: index.docbook:200
+msgid "Collection instances are distinguished in the database by the foreign key of the entity that owns the collection. This foreign key is referred to as the <emphasis>collection key column</emphasis> (or columns) of the collection table. The collection key column is mapped by the <literal><key></literal> element."
+msgstr "Les instances d'une collection sont distinguées dans la base par la clef étrangère de l'entité qui possède la collection. Cette clef étrangère est référencée comme la(es) <emphasis>colonne(s) de la clef de la collection</emphasis> de la table de la collection. La colonne de la clef de la collection est mappée par l'élément <literal><key></literal>."
+
+#: index.docbook:208
+msgid "There may be a nullability constraint on the foreign key column. For most collections, this is implied. For unidirectional one to many associations, the foreign key column is nullable by default, so you might need to specify <literal>not-null=\"true\"</literal>."
+msgstr "Il peut y avoir une contrainte de nullité sur la colonne de la clef étrangère. Pour les associations unidirectionnelles un vers plusieurs, la colonne de la clef étrangère peut être nulle par défaut, donc vous pourriez avoir besoin de spécifier <literal>not-null=\"true\"</literal>."
+
+#: index.docbook:215
+msgid "<![CDATA[<key column=\"productSerialNumber\" not-null=\"true\"/>]]>"
+msgstr "<![CDATA[<key column=\"productSerialNumber\" not-null=\"true\"/>]]>"
+
+#: index.docbook:217
+msgid "The foreign key constraint may use <literal>ON DELETE CASCADE</literal>."
+msgstr "La contraite de la clef étrangère peut utiliser <literal>ON DELETE CASCADE</literal>."
+
+#: index.docbook:221
+msgid "<![CDATA[<key column=\"productSerialNumber\" on-delete=\"cascade\"/>]]>"
+msgstr "<![CDATA[<key column=\"productSerialNumber\" on-delete=\"cascade\"/>]]>"
+
+#: index.docbook:223
+msgid "See the previous chapter for a full definition of the <literal><key></literal> element."
+msgstr "Voir le chapitre précédent pour une définition complète de l'élément <literal><key></literal>."
+
+#: index.docbook:231
+msgid "Collection elements"
+msgstr "Les éléments d'une collection"
+
+#: index.docbook:233
+msgid "Collections may contain almost any other Hibernate type, including all basic types, custom types, components, and of course, references to other entities. This is an important distinction: an object in a collection might be handled with \"value\" semantics (its life cycle fully depends on the collection owner) or it might be a reference to another entity, with its own life cycle. In the latter case, only the \"link\" between the two objects is considered to be state held by the collection."
+msgstr "Les collections peuvent contenir la plupart des autres types Hibernate, dont tous les types basiques, les types utilisateur, les composants, et bien sûr, les références vers d'autres entités. C'est une distinction importante : un objet dans une collection pourrait être géré avec une sémantique de \"valeur\" (sa durée de vie dépend complètement du propriétaire de la collection) ou il pourrait avoir une référence vers une autre entité, avec sa propre durée de vie. Dans le dernier cas, seul le \"lien\" entre les 2 objets est considéré être l'état retenu par la collection."
+
+#: index.docbook:242
+msgid "The contained type is referred to as the <emphasis>collection element type</emphasis>. Collection elements are mapped by <literal><element></literal> or <literal><composite-element></literal>, or in the case of entity references, with <literal><one-to-many></literal> or <literal><many-to-many></literal>. The first two map elements with value semantics, the next two are used to map entity associations."
+msgstr "Le type contenu est référencé comme le <emphasis>type de l'élément de la collection</emphasis>. Les éléments de la collections sont mappés par <literal><element></literal> ou <literal><composite-element></literal>, ou dans le cas des références d'entité, avec <literal><one-to-many></literal> ou <literal><many-to-many></literal>. Les deux premiers mappent des éléments avec un sémantique de valeur, les deux suivants sont utilisés pour mapper des associations d'entité."
+
+#: index.docbook:254
+msgid "Indexed collections"
+msgstr "Collections indexées"
+
+#: index.docbook:256
+msgid "All collection mappings, except those with set and bag semantics, need an <emphasis>index column</emphasis> in the collection table - a column that maps to an array index, or <literal>List</literal> index, or <literal>Map</literal> key. The index of a <literal>Map</literal> may be of any basic type, mapped with <literal><map-key></literal>, it may be an entity reference mapped with <literal><map-key-many-to-many></literal>, or it may be a composite type, mapped with <literal><composite-map-key></literal>. The index of an array or list is always of type <literal>integer</literal> and is mapped using the <literal><list-index></literal> element. The mapped column contains sequential integers (numbered from zero, by default)."
+msgstr "Tous les mappings de collection, exceptés ceux avec les sémantiques d'ensemble (NdT : set) et de sac (NdT : bag), ont besoin d'une <emphasis>colonne d'index</emphasis> dans la table de la collection - une colonne qui mappe un index de tableau, ou un index de <literal>List</literal>, ou une clef de <literal>Map</literal>. L'index d'une <literal>Map</literal> peut être n'importe quel type basique, mappé avec <literal><map-key></literal>, ça peut être une référence d'entité mappée avec <literal><map-key-many-to-many></literal>, ou ça peut être un type composé, mappé avec <literal><composite-map-key></literal>. L'index d'un tableau ou d'une liste est toujours de type <literal>integer</literal> et est mappé en utilisant l'élément <literal><list-index></literal>. Les colonnes mappées contiennent des entiers séquentiels (numérotés à partir de zéro par défaut)."
+
+#: index.docbook:267
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"index1\" coords=\"2 45\"/> <area id=\"index2\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<list-index \n"
+ " column=\"column_name\"\n"
+ " base=\"0|1|...\"/>]]></programlisting> <calloutlist> <callout arearefs=\"index1\"> <para> <literal>column_name</literal> (required): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"index1\"> <para> <literal>base</literal> (optional, defaults to <literal>0</literal>): The value of the index column that corresponds to the first element of the list or array. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"mapkey1\" coords=\"2 45\"/> <area id=\"mapkey2\" coords=\"3 45\"/> <area id=\"mapkey3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key \n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"type_name\"\n"
+ " node=\"@attribute-name\"\n"
+ " length=\"N\"/>]]></programlisting> <calloutlist> <callout arearefs=\"mapkey1\"> <para> <literal>column</literal> (optional): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"mapkey2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the key of the map. </para> </callout> <callout arearefs=\"mapkey3\"> <para> <literal>type</literal> (reguired): The type of the map keys. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"indexmanytomany1\" coords=\"2 45\"/> <area id=\"indexmanytomany2\" coords=\"3 45\"/> <area id=\"indexmanytomany3\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<map-key-many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"indexmanytomany1\"> <para> <literal>column</literal> (optional): The name of the foreign key column for the collection index values. </para> </callout> <callout arearefs=\"indexmanytomany2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the foreign key of the map key. </para> </callout> <callout arearefs=\"indexmanytomany3\"> <para> <literal>class</literal> (required): The entity class used as the map key. </para> </callout> </calloutlist> </programlistingco>"
+msgstr ""
+ "<programlistingco> <areaspec> <area id=\"index1\" coords=\"2 45\"/> <area id=\"index2\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<list-index\n"
+ " column=\"nom_de_colonne\"\n"
+ " base=\"0|1|...\"/>]]></programlisting> <calloutlist> <callout arearefs=\"index1\"> <para> <literal>nom_de_colonne</literal> (requis) : le nom de la colonne contenant les valeurs de l'index de la collection </para> </callout> <callout arearefs=\"index1\"> <para> <literal>base</literal> (optionnel, par défaut = <literal>0</literal>) : la valeur de la colonne de l'index qui correspond au premier élément de la liste ou du tableau </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"mapkey1\" coords=\"2 45\"/> <area id=\"mapkey2\" coords=\"3 45\"/> <area id=\"mapkey3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key\n"
+ " column=\"nom_de_colonne\"\n"
+ " formula=\"n'importe quelle expression SQL\"\n"
+ " type=\"nom_du_type\"\n"
+ " node=\"@nom-d-attribut\"\n"
+ " length=\"N\"/>]]></programlisting> <calloutlist> <callout arearefs=\"mapkey1\"> <para> <literal>column</literal> (optionnel) : le nom de la colonne contenant les valeurs de l'index de la collection </para> </callout> <callout arearefs=\"mapkey2\"> <para> <literal>formula</literal> (optionnel) : une formule SQL utilisée pour évaluer la clef de la map </para> </callout> <callout arearefs=\"mapkey3\"> <para> <literal>type</literal> (reguis): le type des clefs de la map </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"indexmanytomany1\" coords=\"2 45\"/> <area id=\"indexmanytomany2\" coords=\"3 45\"/> <area id=\"indexmanytomany3\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<map-key-many-to-many\n"
+ " column=\"nom_de_colonne\"\n"
+ " formula=\"n'importe quelle expression SQL\"\n"
+ " class=\"NomDeClasse\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"indexmanytomany1\"> <para> <literal>column</literal> (optionnel) : le nom de la colonne de la clef étrangère pour les valeurs de l'index de la collection </para> </callout> <callout arearefs=\"indexmanytomany2\"> <para> <literal>formula</literal> (optionnel) : une formulre SQL utilisée pour évaluer la clef étrangère de la clef de la map </para> </callout> <callout arearefs=\"indexmanytomany3\"> <para> <literal>class</literal> (requis): la classe de l'entité utilisée comme clef de la map </para> </callout> </calloutlist> </programlistingco>"
+
+#: index.docbook:348
+msgid "If your table doesn't have an index column, and you still wish to use <literal>List</literal> as the property type, you should map the property as a Hibernate <emphasis><bag></emphasis>. A bag does not retain its order when it is retrieved from the database, but it may be optionally sorted or ordered."
+msgstr "Si votre table n'a pas de colonne d'index, et que vous souhaitez tout de même utiliser <literal>List</literal> comme type de propriété, vous devriez mapper la propriété comme un <emphasis><bag></emphasis> Hibernate. Un sac (NdT : bag) ne garde pas son ordre quand il est récupéré de la base de données, mais il peut être optionnellement trié ou ordonné."
+
+#: index.docbook:357
+msgid "There are quite a range of mappings that can be generated for collections, covering many common relational models. We suggest you experiment with the schema generation tool to get a feeling for how various mapping declarations translate to database tables."
+msgstr "Il y a pas mal de variétés de mappings qui peuvent être générés pour les collections, couvrant beaucoup des modèles relationnels communs. Nous vous suggérons d'expérimenter avec l'outil de génération de schéma pour avoir une idée de comment traduire les différentes déclarations de mapping vers des table de la base de données."
+
+#: index.docbook:364
+msgid "Collections of values and many-to-many associations"
+msgstr "Collections de valeurs et associations plusieurs-vers-plusieurs"
+
+#: index.docbook:366
+msgid "Any collection of values or many-to-many association requires a dedicated <emphasis>collection table</emphasis> with a foreign key column or columns, <emphasis>collection element column</emphasis> or columns and possibly an index column or columns."
+msgstr "N'importe quelle collection de valeurs ou association plusieurs-vers-plusieurs requiert une <emphasis>table de collection</emphasis> avec une(des) colonne(s) de clef étrangère, une(des) <emphasis>colonne(s) d'élément de la collection</emphasis> ou des colonnes et possiblement une(des) colonne(s) d'index."
+
+#: index.docbook:373
+msgid "For a collection of values, we use the <literal><element></literal> tag."
+msgstr "Pour une collection de valeurs, nous utilisons la balise <literal><element></literal>."
+
+#: index.docbook:375
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"element1b\" coords=\"2 50\"/> <area id=\"element2b\" coords=\"3 50\"/> <area id=\"element3b\" coords=\"4 50\"/> </areaspec> <programlisting><![CDATA[<element\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"typename\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"element1b\"> <para> <literal>column</literal> (optional): The name of the column holding the collection element values. </para> </callout> <callout arearefs=\"element2b\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element. </para> </callout> <callout arearefs=\"element3b\"> <para> <literal>type</literal> (required): The type of the collection element. </para> </callout> </calloutlist> </programlistingco> <para> A <emphasis>many-to-many association</emphasis> is specified using the <literal><many-to-many></literal> element. </para> <programlistingco> <areaspec> <area id=\"manytomany1\" coords=\"2 60\"/> <area id=\"manytomany2\" coords=\"3 60\"/> <area id=\"manytomany3\" coords=\"4 60\"/> <area id=\"manytomany4\" coords=\"5 60\"/> <area id=\"manytomany5\" coords=\"6 60\"/> <area id=\"manytomany6\" coords=\"7 60\"/> <area id=\"manytomany7\" coords=\"8 60\"/> <area id=\!
"manytomany8\" coords=\"9 60\"/> </areaspec> <programlisting><![CDATA[<many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ " fetch=\"select|join\"\n"
+ " unique=\"true|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]></programlisting> <calloutlist> <callout arearefs=\"manytomany1\"> <para> <literal>column</literal> (optional): The name of the element foreign key column. </para> </callout> <callout arearefs=\"manytomany2\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element foreign key value. </para> </callout> <callout arearefs=\"manytomany3\"> <para> <literal>class</literal> (required): The name of the associated class. </para> </callout> <callout arearefs=\"manytomany4\"> <para> <literal>fetch</literal> (optional - defaults to <literal>join</literal>): enables outer-join or sequential select fetching for this association. This is a special case; for full eager fetching (in a single <literal>SELECT</literal>) of an entity and its many-to-many relationships to other entities, you would enable <literal>join</literal> fetching not only of the collection itself, but also with this attribute on the <literal><many-to-many></literal!
> nested element. </para> </callout> <callout arearefs=\"manytomany5\"> <para> <literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. This makes the association multiplicity effectively one to many. </para> </callout> <callout arearefs=\"manytomany6\"> <para> <literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association. </para> </callout> <callout arearefs=\"manytomany7\"> <para> <literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>. </para> </callout> <callout arearefs=\"manytomany8\"> <para> <literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class !
is used. </para> </callout> </calloutlist> </programlistingco>"
+msgstr ""
+ "<programlistingco> <areaspec> <area id=\"element1b\" coords=\"2 50\"/> <area id=\"element2b\" coords=\"3 50\"/> <area id=\"element3b\" coords=\"4 50\"/> </areaspec> <programlisting><![CDATA[<element\n"
+ " column=\"nom_de_colonne\"\n"
+ " formula=\"n'importe quelle expression SQL\"\n"
+ " type=\"nomDeType\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"nom-d-element\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"element1b\"> <para> <literal>column</literal> (optionnel) : le nom de la colonne contenant les valeurs de l'élément de la collection </para> </callout> <callout arearefs=\"element2b\"> <para> <literal>formula</literal> (optionnel) : une formule SQL utilisée pour évaluer l'élément </para> </callout> <callout arearefs=\"element3b\"> <para> <literal>type</literal> (requis) : le type de l'élément de la collection </para> </callout> </calloutlist> </programlistingco> <para> Une <emphasis>association plusieurs-vers-plusieurs</emphasis> est spécifiée en utilisant l'élément <literal><many-to-many></literal>. </para> <programlistingco> <areaspec> <area id=\"manytomany1\" coords=\"2 60\"/> <area id=\"manytomany2\" coords=\"3 60\"/> <area id=\"manytomany3\" coords=\"4 60\"/> <area id=\"manytomany4\" coords=\"5 60\"/> <area id=\"manytomany5\" coords=\"6 60\"/> <area id=\"manytomany6\" coords=\"7 60\"/> <a!
rea id=\"manytomany7\" coords=\"8 60\"/> <area id=\"manytomany8\" coords=\"9 60\"/> </areaspec> <programlisting><![CDATA[<many-to-many\n"
+ " column=\"nom_de_colonne\"\n"
+ " formula=\"n'importe quelle expression SQL\"\n"
+ " class=\"NomDeClasse\"\n"
+ " fetch=\"select|join\"\n"
+ " unique=\"true|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"NomDEntite\"\n"
+ " property-ref=\"nomDeProprieteDeLaClasseAssociee\"\n"
+ " node=\"nom-d-element\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]></programlisting> <calloutlist> <callout arearefs=\"manytomany1\"> <para> <literal>column</literal> (optionnel) : le nom de la colonne de la clef étrangère de l'élément </para> </callout> <callout arearefs=\"manytomany2\"> <para> <literal>formula</literal> (optionnel) : une formule SQL utilisée pour évaluer la valeur de la clef étrangère de l'élément </para> </callout> <callout arearefs=\"manytomany3\"> <para> <literal>class</literal> (requis) : le nom de la classe associée </para> </callout> <callout arearefs=\"manytomany4\"> <para> <literal>fetch</literal> (optionnel - par défaut <literal>join</literal>) : active les récupérations par jointures externes ou par selects séquentiels pour cette association. C'est un cas spécial ; pour une récupération complète sans attente (dans un seul <literal>SELECT</literal>) d'une entité et de ses relations plusieurs-vers-plusieurs vers d'autres entités, vous devriez activer la récupération <literal!
>join</literal> non seulement sur la collection elle-même, mais aussi avec cet attribut sur l'élément imbriqué <literal><many-to-many></literal>. </para> </callout> <callout arearefs=\"manytomany5\"> <para> <literal>unique</literal> (optionnel) : activer la génération DDL d'une contrainte d'unicité pour la colonne de la clef étrangère. Ãa rend la pluralité de l'association effectivement un-vers-plusieurs. </para> </callout> <callout arearefs=\"manytomany6\"> <para> <literal>not-found</literal> (optionnel - par défaut <literal>exception</literal>) : spécifie comment les clefs étrangères qui référencent la lignes manquantes seront gérées : <literal>ignore</literal> traitera une ligne manquante comme une association nulle. </para> </callout> <callout arearefs=\"manytomany7\"> <para> <literal>entity-name</literal> (optionnel) : le nom de l'entité de la classe associée, comme une alternative à <literal>class</literal> </para> </callout> <callout arear!
efs=\"manytomany8\"> <para> <literal>property-ref</literal> (optionnel
) : le nom d'une propriété de la classe associée qui est jointe à cette clef étrangère. Si non spécifiée, la clef primaire de la classe associée est utilisée. </para> </callout> </calloutlist> </programlistingco>"
+
+#: index.docbook:480
+msgid "Some examples, first, a set of strings:"
+msgstr "Quelques exemples, d'abord, un ensemble de chaînes de caractères :"
+
+#: index.docbook:484
+msgid ""
+ "<![CDATA[<set name=\"names\" table=\"person_names\">\n"
+ " <key column=\"person_id\"/>\n"
+ " <element column=\"person_name\" type=\"string\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"names\" table=\"person_names\">\n"
+ " <key column=\"person_id\"/>\n"
+ " <element column=\"person_name\" type=\"string\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:486
+msgid "A bag containing integers (with an iteration order determined by the <literal>order-by</literal> attribute):"
+msgstr "Un bag contenant des entiers (avec un ordre d'itération déterminé par l'attribut <literal>order-by</literal>) :"
+
+#: index.docbook:491
+msgid ""
+ "<![CDATA[<bag name=\"sizes\" \n"
+ " table=\"item_sizes\" \n"
+ " order-by=\"size asc\">\n"
+ " <key column=\"item_id\"/>\n"
+ " <element column=\"size\" type=\"integer\"/>\n"
+ "</bag>]]>"
+msgstr ""
+ "<![CDATA[<bag name=\"sizes\"\n"
+ " table=\"item_sizes\"\n"
+ " order-by=\"size asc\">\n"
+ " <key column=\"item_id\"/>\n"
+ " <element column=\"size\" type=\"integer\"/>\n"
+ "</bag>]]>"
+
+#: index.docbook:493
+msgid "An array of entities - in this case, a many to many association:"
+msgstr "Un tableau d'entités - dans ce cas, une association plusieurs-vers-plusieurs :"
+
+#: index.docbook:497
+msgid ""
+ "<![CDATA[<array name=\"addresses\" \n"
+ " table=\"PersonAddress\" \n"
+ " cascade=\"persist\">\n"
+ " <key column=\"personId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <many-to-many column=\"addressId\" class=\"Address\"/>\n"
+ "</array>]]>"
+msgstr ""
+ "<![CDATA[<array name=\"addresses\"\n"
+ " table=\"PersonAddress\"\n"
+ " cascade=\"persist\">\n"
+ " <key column=\"personId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <many-to-many column=\"addressId\" class=\"Address\"/>\n"
+ "</array>]]>"
+
+#: index.docbook:499
+msgid "A map from string indices to dates:"
+msgstr "Une map de chaînes de caractères vers des dates :"
+
+#: index.docbook:503
+msgid ""
+ "<![CDATA[<map name=\"holidays\" \n"
+ " table=\"holidays\" \n"
+ " schema=\"dbo\" \n"
+ " order-by=\"hol_name asc\">\n"
+ " <key column=\"id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"holidays\"\n"
+ " table=\"holidays\"\n"
+ " schema=\"dbo\"\n"
+ " order-by=\"hol_name asc\">\n"
+ " <key column=\"id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:505
+msgid "A list of components (discussed in the next chapter):"
+msgstr "Une liste de composants (discute dans le prochain chapitre) :"
+
+#: index.docbook:509
+msgid ""
+ "<![CDATA[<list name=\"carComponents\" \n"
+ " table=\"CarComponents\">\n"
+ " <key column=\"carId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <composite-element class=\"CarComponent\">\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"type\"/>\n"
+ " <property name=\"serialNumber\" column=\"serialNum\"/>\n"
+ " </composite-element>\n"
+ "</list>]]>"
+msgstr ""
+ "<![CDATA[<list name=\"carComponents\"\n"
+ " table=\"CarComponents\">\n"
+ " <key column=\"carId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <composite-element class=\"CarComponent\">\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"type\"/>\n"
+ " <property name=\"serialNumber\" column=\"serialNum\"/>\n"
+ " </composite-element>\n"
+ "</list>]]>"
+
+#: index.docbook:514
+msgid "One-to-many associations"
+msgstr "Association un-vers-plusieurs"
+
+#: index.docbook:516
+msgid "A <emphasis>one to many association</emphasis> links the tables of two classes via a foreign key, with no intervening collection table. This mapping loses certain semantics of normal Java collections:"
+msgstr "Une <emphasis>association un vers plusieurs</emphasis> lie les tables de deux classes par une clef étrangère, sans l'intervention d'une table de collection. Ce mapping perd certaines sémantiques des collections Java normales :"
+
+#: index.docbook:524
+msgid "An instance of the contained entity class may not belong to more than one instance of the collection"
+msgstr "Une instance de la classe de l'entité contenue ne peut pas appartenir à plus d'une instance de la collection"
+
+#: index.docbook:530
+msgid "An instance of the contained entity class may not appear at more than one value of the collection index"
+msgstr "Une instance de la classe de l'entité contenue ne peut pas apparaître plus plus d'une valeur d'index de la collection"
+
+#: index.docbook:537
+msgid "An association from <literal>Product</literal> to <literal>Part</literal> requires existence of a foreign key column and possibly an index column to the <literal>Part</literal> table. A <literal><one-to-many></literal> tag indicates that this is a one to many association."
+msgstr "Une association de <literal>Product</literal> vers <literal>Part</literal> requiert l'existence d'une clef étrangère et possiblement une colonne d'index pour la table <literal>Part</literal>. Une balise <literal><one-to-many></literal> indique que c'est une association un vers plusieurs."
+
+#: index.docbook:550
+msgid ""
+ "<![CDATA[<one-to-many \n"
+ " class=\"ClassName\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]>"
+msgstr ""
+ "<![CDATA[<one-to-many\n"
+ " class=\"NomDeClasse\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"NomDEntite\"\n"
+ " node=\"nom-d-element\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]>"
+
+#: index.docbook:553
+msgid "<literal>class</literal> (required): The name of the associated class."
+msgstr "<literal>class</literal> (requis) : le nom de la classe associée"
+
+#: index.docbook:558
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how cached identifiers that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr "<literal>not-found</literal> (optionnel - par défaut <literal>exception</literal>) : spécifie comment les identifiants cachés qui référencent des lignes manquantes seront gérés : <literal>ignore</literal> traitera une ligne manquante comme une association nulle"
+
+#: index.docbook:565
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>."
+msgstr "<literal>entity-name</literal> (optionnel) : le nom de l'entité de la classe associée, comme une alternative à <literal>class</literal>."
+
+#: index.docbook:573
+msgid "Notice that the <literal><one-to-many></literal> element does not need to declare any columns. Nor is it necessary to specify the <literal>table</literal> name anywhere."
+msgstr "Notez que l'élément <literal><one-to-many></literal> n'a pas besoin de déclarer de colonnes. Il n'est pas non plus nécessaire de spécifier le nom de la table nulle part."
+
+#: index.docbook:579
+msgid "<emphasis>Very important note:</emphasis> If the foreign key column of a <literal><one-to-many></literal> association is declared <literal>NOT NULL</literal>, you must declare the <literal><key></literal> mapping <literal>not-null=\"true\"</literal> or <emphasis>use a bidirectional association</emphasis> with the collection mapping marked <literal>inverse=\"true\"</literal>. See the discussion of bidirectional associations later in this chapter."
+msgstr "<emphasis>Note très importante :</emphasis> si la colonne de la clef d'une association <literal><one-to-many></literal> est déclarée <literal>NOT NULL</literal>, vous devez déclarer le mapping de <literal><key></literal> avec <literal>not-null=\"true\"</literal> ou <emphasis>utiliser une association bidirectionnelle</emphasis> avec le mapping de la collection marqué <literal>inverse=\"true\"</literal>. Voir la discussion sur les associations bidirectionnelles plus tard dans ce chapitre."
+
+#: index.docbook:588
+msgid "This example shows a map of <literal>Part</literal> entities by name (where <literal>partName</literal> is a persistent property of <literal>Part</literal>). Notice the use of a formula-based index."
+msgstr "Cet exemple montre une map d'entités <literal>Part</literal> par nom (où <literal>partName</literal> est une propriété persistante de <literal>Part</literal>). Notez l'utilisation d'un index basé sur une formule."
+
+#: index.docbook:594
+msgid ""
+ "<![CDATA[<map name=\"parts\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"productId\" not-null=\"true\"/>\n"
+ " <map-key formula=\"partName\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"parts\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"productId\" not-null=\"true\"/>\n"
+ " <map-key formula=\"partName\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:600
+msgid "Advanced collection mappings"
+msgstr "Mappings de collection avancés"
+
+#: index.docbook:603
+msgid "Sorted collections"
+msgstr "Collections triées"
+
+#: index.docbook:605
+msgid "Hibernate supports collections implementing <literal>java.util.SortedMap</literal> and <literal>java.util.SortedSet</literal>. You must specify a comparator in the mapping file:"
+msgstr "Hibernate supporte des collections implémentant <literal>java.util.SortedMap</literal> et <literal>java.util.SortedSet</literal>. Vous devez spécifier un comparateur dans le fichier de mapping :"
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<set name=\"aliases\" \n"
+ " table=\"person_aliases\" \n"
+ " sort=\"natural\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" sort=\"my.custom.HolidayComparator\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"aliases\"\n"
+ " table=\"person_aliases\"\n"
+ " sort=\"natural\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" sort=\"my.custom.HolidayComparator\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:612
+msgid "Allowed values of the <literal>sort</literal> attribute are <literal>unsorted</literal>, <literal>natural</literal> and the name of a class implementing <literal>java.util.Comparator</literal>."
+msgstr "Les valeurs permises pour l'attribut <literal>sort</literal> sont <literal>unsorted</literal>, <literal>natural</literal> et le nom d'une classe implémentant <literal>java.util.Comparator</literal>."
+
+#: index.docbook:618
+msgid "Sorted collections actually behave like <literal>java.util.TreeSet</literal> or <literal>java.util.TreeMap</literal>."
+msgstr "Les collections triées se comportent réellement comme <literal>java.util.TreeSet</literal> ou <literal>java.util.TreeMap</literal>."
+
+#: index.docbook:623
+msgid "If you want the database itself to order the collection elements use the <literal>order-by</literal> attribute of <literal>set</literal>, <literal>bag</literal> or <literal>map</literal> mappings. This solution is only available under JDK 1.4 or higher (it is implemented using <literal>LinkedHashSet</literal> or <literal>LinkedHashMap</literal>). This performs the ordering in the SQL query, not in memory."
+msgstr "Si vous voulez que la base de données elle-même ordonne les éléments de la collection, utilisez l'attribut <literal>order-by</literal> des mappings <literal>set</literal>, <literal>bag</literal> ou <literal>map</literal>. Cette solution est seulement disponible à partir du JDK 1.4 (c'est implémenté en utilisant <literal>LinkedHashSet</literal> ou <literal>LinkedHashMap</literal>). Ceci exécute le tri dans la requête SQL, pas en mémoire."
+
+#: index.docbook:632
+msgid ""
+ "<![CDATA[<set name=\"aliases\" table=\"person_aliases\" order-by=\"lower(name) asc\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" order-by=\"hol_date, hol_name\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"aliases\" table=\"person_aliases\" order-by=\"lower(name) asc\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" order-by=\"hol_date, hol_name\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:634
+msgid "Note that the value of the <literal>order-by</literal> attribute is an SQL ordering, not a HQL ordering!"
+msgstr "Notez que la valeur de l'attribut <literal>order-by</literal> est un ordre SQL, pas un ordre HQL !"
+
+#: index.docbook:639
+msgid "Associations may even be sorted by some arbitrary criteria at runtime using a collection <literal>filter()</literal>."
+msgstr "Les associations peuvent même être triées sur des critères arbitraires à l'exécution en utilisant un <literal>filter()</literal> de collection."
+
+#: index.docbook:644
+msgid "<![CDATA[sortedUsers = s.createFilter( group.getUsers(), \"order by this.name\" ).list();]]>"
+msgstr "<![CDATA[sortedUsers = s.createFilter( group.getUsers(), \"order by this.name\" ).list();]]>"
+
+#: index.docbook:649
+msgid "Bidirectional associations"
+msgstr "Associations bidirectionnelles"
+
+#: index.docbook:651
+msgid "A <emphasis>bidirectional association</emphasis> allows navigation from both \"ends\" of the association. Two kinds of bidirectional association are supported:"
+msgstr "Une <emphasis>association bidirectionnelle</emphasis> permet une navigation à partir de la \"fin\" de l'association. Deux sortes d'associations bidirectionnelles sont supportées :"
+
+#: index.docbook:658
+msgid "one-to-many"
+msgstr "un-vers-plusieurs (NdT : one-to-many)"
+
+#: index.docbook:660
+msgid "set or bag valued at one end, single-valued at the other"
+msgstr "ensemble ou sac à une extrémité, une seule valeur à l'autre"
+
+#: index.docbook:666
+msgid "many-to-many"
+msgstr "plusieurs-vers-plusieurs (NdT : many-to-many)"
+
+#: index.docbook:668
+msgid "set or bag valued at both ends"
+msgstr "ensemble ou sac aux deux extrémités"
+
+#: index.docbook:677
+msgid "You may specify a bidirectional many-to-many association simply by mapping two many-to-many associations to the same database table and declaring one end as <emphasis>inverse</emphasis> (which one is your choice, but it can not be an indexed collection)."
+msgstr "Vous pouvez spécifier une association plusieurs-vers-plusieurs bidirectionnelle simplement en mappant deux associations plusieurs-vers-plusieurs vers la même table de base de données et en déclarant une extrémité comme <emphasis>inverse</emphasis> (celle de votre choix, mais ça ne peut pas être une collection indexée)."
+
+#: index.docbook:684
+msgid "Here's an example of a bidirectional many-to-many association; each category can have many items and each item can be in many categories:"
+msgstr "Voici un exemple d'association bidirectionnelle plusieurs-vers-plusieurs ; chaque catégorie peut avoir plusieurs objets et chaque objet peut être dans plusieurs catégories :"
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<class name=\"Category\">\n"
+ " <id name=\"id\" column=\"CATEGORY_ID\"/>\n"
+ " ...\n"
+ " <bag name=\"items\" table=\"CATEGORY_ITEM\">\n"
+ " <key column=\"CATEGORY_ID\"/>\n"
+ " <many-to-many class=\"Item\" column=\"ITEM_ID\"/>\n"
+ " </bag>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Item\">\n"
+ " <id name=\"id\" column=\"ITEM_ID\"/>\n"
+ " ...\n"
+ "\n"
+ " <!-- inverse end -->\n"
+ " <bag name=\"categories\" table=\"CATEGORY_ITEM\" inverse=\"true\">\n"
+ " <key column=\"ITEM_ID\"/>\n"
+ " <many-to-many class=\"Category\" column=\"CATEGORY_ID\"/>\n"
+ " </bag>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Category\">\n"
+ " <id name=\"id\" column=\"CATEGORY_ID\"/>\n"
+ " ...\n"
+ " <bag name=\"items\" table=\"CATEGORY_ITEM\">\n"
+ " <key column=\"CATEGORY_ID\"/>\n"
+ " <many-to-many class=\"Item\" column=\"ITEM_ID\"/>\n"
+ " </bag>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Item\">\n"
+ " <id name=\"id\" column=\"ITEM_ID\"/>
+\n"
+ " ...\n"
+ "\n"
+ " <!-- inverse end -->\n"
+ " <bag name=\"categories\" table=\"CATEGORY_ITEM\" inverse=\"true\">\n"
+ " <key column=\"ITEM_ID\"/>\n"
+ " <many-to-many class=\"Category\" column=\"CATEGORY_ID\"/>\n"
+ " </bag>\n"
+ "</class>]]>"
+
+#: index.docbook:691
+msgid "Changes made only to the inverse end of the association are <emphasis>not</emphasis> persisted. This means that Hibernate has two representations in memory for every bidirectional association, one link from A to B and another link from B to A. This is easier to understand if you think about the Java object model and how we create a many-to-many relationship in Java:"
+msgstr "Les changements faits uniquement sur l'extréminté inverse de l'association <emphasis>ne sont pas</emphasis> persistés. Ceci signifie qu'Hibernate a deux représentations en mémoire pour chaque association bidirectionnelles, un lien de A vers B et un autre de B vers A. C'est plus facile à comprendre si vous pensez au modèle objet de Java et comment nous créons une relation plusieurs-vers-plusieurs en Java :"
+
+#: index.docbook:699
+msgid ""
+ "<![CDATA[\n"
+ "category.getItems().add(item); // The category now \"knows\" about the relationship\n"
+ "item.getCategories().add(category); // The item now \"knows\" about the relationship\n"
+ "\n"
+ "session.persist(item); // The relationship won't be saved!\n"
+ "session.persist(category); // The relationship will be saved]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "category.getItems().add(item); // La catégorie est maintenant \"au courant\" de la relation\n"
+ "item.getCategories().add(category); // L'objet est maintenant \"au courant\" de la relation\n"
+ "\n"
+ "session.persist(item); // La relation ne sera pas sauvegardée !\n"
+ "session.persist(category); // La relation sera sauvegardée]]>"
+
+#: index.docbook:701
+msgid "The non-inverse side is used to save the in-memory representation to the database."
+msgstr "La partie non-inverse est utilisée pour sauvegarder la représentation en mémoire dans la base de données."
+
+#: index.docbook:705
+msgid "You may define a bidirectional one-to-many association by mapping a one-to-many association to the same table column(s) as a many-to-one association and declaring the many-valued end <literal>inverse=\"true\"</literal>."
+msgstr "Vous pouvez définir une association un-vers-plusieurs bidirectionnelle en mappant une association un-vers-plusieurs vers la(es) même(s) colonne(s) de table qu'une association plusieurs-vers-un et en déclarant l'extrémité pluri-valuée <literal>inverse=\"true\"</literal>."
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\"\n"
+ " class=\"Parent\"\n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:713
+msgid "Mapping one end of an association with <literal>inverse=\"true\"</literal> doesn't affect the operation of cascades, these are orthogonal concepts!"
+msgstr "Mapper une extrémité d'une association avec <literal>inverse=\"true\"</literal> n'affecte pas l'opération de cascades, ce sont des concepts orthogonaux !"
+
+#: index.docbook:721
+msgid "Bidirectional associations with indexed collections"
+msgstr "Associations bidirectionnelles avec des collections indexées"
+
+#: index.docbook:722
+msgid "A bidirectional association where one end is represented as a <literal><list></literal> or <literal><map></literal> requires special consideration. If there is a property of the child class which maps to the index column, no problem, we can continue using <literal>inverse=\"true\"</literal> on the collection mapping:"
+msgstr "Une association bidirectionnelle où une extrémité est représentée comme une <literal><list></literal> ou une <literal><map></literal> requiert une considération spéciale. Si il y a une propriété de la classe enfant qui mappe la colonne de l'index, pas de problème, nous pouvons continuer à utiliser <literal>inverse=\"true\"</literal> sur le mapping de la collection :"
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"/>\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <map-key column=\"name\"\n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <property name=\"name\"\n"
+ " not-null=\"true\"/>\n"
+ " <many-to-one name=\"parent\"\n"
+ " class=\"Parent\"\n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:731
+msgid "But, if there is no such property on the child class, we can't think of the association as truly bidirectional (there is information available at one end of the association that is not available at the other end). In this case, we can't map the collection <literal>inverse=\"true\"</literal>. Instead, we could use the following mapping:"
+msgstr "Mais, si il n'y a pas de telle prorpriété sur la classe enfant, nous ne pouvons pas penser à l'association comme vraiment bidirectionnelle (il y a des informations disponibles à une extrémité de l'association qui ne sont pas disponibles à l'autre extrémité). Dans ce cas, nous ne pouvons pas mapper la collection <literal>inverse=\"true\"</literal>. à la place, nous pourrions utiliser le mapping suivant :"
+
+#: index.docbook:738
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\">\n"
+ " <key column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\">\n"
+ " <key column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"name\"\n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\"\n"
+ " class=\"Parent\"\n"
+ " column=\"parent_id\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:740
+msgid "Note that in this mapping, the collection-valued end of the association is responsible for updates to the foreign key. TODO: Does this really result in some unnecessary update statements?"
+msgstr "Notez que dans ce mapping, l'extrémité de l'association contenant la collection est responsable des mises à jour de la clef étrangère. à faire : cela entraîne-t-il réellement des expressions updates inutiles ?"
+
+#: index.docbook:748
+msgid "Ternary associations"
+msgstr "Associations ternaires"
+
+#: index.docbook:750
+msgid "There are three possible approaches to mapping a ternary association. One is to use a <literal>Map</literal> with an association as its index:"
+msgstr "Il y a trois approches possibles pour mapper une association ternaire. L'une est d'utiliser une <literal>Map</literal> avec une association en tant qu'index :"
+
+#: index.docbook:755
+msgid ""
+ "<![CDATA[<map name=\"contracts\">\n"
+ " <key column=\"employer_id\" not-null=\"true\"/>\n"
+ " <map-key-many-to-many column=\"employee_id\" class=\"Employee\"/>\n"
+ " <one-to-many class=\"Contract\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"contracts\">\n"
+ " <key column=\"employer_id\" not-null=\"true\"/>\n"
+ " <map-key-many-to-many column=\"employee_id\" class=\"Employee\"/>\n"
+ " <one-to-many class=\"Contract\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<map name=\"connections\">\n"
+ " <key column=\"incoming_node_id\"/>\n"
+ " <map-key-many-to-many column=\"outgoing_node_id\" class=\"Node\"/>\n"
+ " <many-to-many column=\"connection_id\" class=\"Connection\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"connections\">\n"
+ " <key column=\"incoming_node_id\"/>\n"
+ " <map-key-many-to-many column=\"outgoing_node_id\" class=\"Node\"/>\n"
+ " <many-to-many column=\"connection_id\" class=\"Connection\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:759
+msgid "A second approach is to simply remodel the association as an entity class. This is the approach we use most commonly."
+msgstr "Une seconde approche est simplement de remodeler l'association comme une classe d'entité. C'est l'approche la plus commune."
+
+#: index.docbook:764
+msgid "A final alternative is to use composite elements, which we will discuss later."
+msgstr "Une alternative finale est d'utiliser des éléments composites, dont nous discuterons plus tard."
+
+#: index.docbook:771
+msgid "Using an <idbag>"
+msgstr "Utiliser un <literal><idbag></literal>"
+
+#: index.docbook:773
+msgid "If you've fully embraced our view that composite keys are a bad thing and that entities should have synthetic identifiers (surrogate keys), then you might find it a bit odd that the many to many associations and collections of values that we've shown so far all map to tables with composite keys! Now, this point is quite arguable; a pure association table doesn't seem to benefit much from a surrogate key (though a collection of composite values <emphasis>might</emphasis>). Nevertheless, Hibernate provides a feature that allows you to map many to many associations and collections of values to a table with a surrogate key."
+msgstr "Si vous embrassez pleinement notre vue que les clefs composées sont une mauvaise chose et que des entités devraient avoir des identifiants artificiels (des clefs subrogées), alors vous pourriez trouver un peu curieux que les associations plusieurs-vers-plusieurs et les collections de valeurs que nous avons montré jusqu'ici mappent toutes des tables avec des clefs composées ! Maintenant, ce point est assez discutable ; une table d'association pure ne semble pas beaucoup bénéficier d'une clef subrogée (bien qu'une collection de valeur composées le <emphasis>pourrait</emphasis>). Néanmoins, Hibernate fournit une foncionnalité qui vous permet de mapper des associations plusieurs-vers-plusieurs et des collections de valeurs vers une table avec une clef subrogée."
+
+#: index.docbook:784
+msgid "The <literal><idbag></literal> element lets you map a <literal>List</literal> (or <literal>Collection</literal>) with bag semantics."
+msgstr "L'élément <literal><idbag></literal> vous laisse mapper une <literal>List</literal> (ou une <literal>Collection</literal>) avec une sémantique de sac."
+
+#: index.docbook:789
+msgid ""
+ "<![CDATA[<idbag name=\"lovers\" table=\"LOVERS\">\n"
+ " <collection-id column=\"ID\" type=\"long\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </collection-id>\n"
+ " <key column=\"PERSON1\"/>\n"
+ " <many-to-many column=\"PERSON2\" class=\"Person\" fetch=\"join\"/>\n"
+ "</idbag>]]>"
+msgstr ""
+ "<![CDATA[<idbag name=\"lovers\" table=\"LOVERS\">\n"
+ " <collection-id column=\"ID\" type=\"long\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </collection-id>\n"
+ " <key column=\"PERSON1\"/>\n"
+ " <many-to-many column=\"PERSON2\" class=\"Person\" fetch=\"join\"/>\n"
+ "</idbag>]]>"
+
+#: index.docbook:791
+msgid "As you can see, an <literal><idbag></literal> has a synthetic id generator, just like an entity class! A different surrogate key is assigned to each collection row. Hibernate does not provide any mechanism to discover the surrogate key value of a particular row, however."
+msgstr "Comme vous pouvez voir, un <literal><idbag></literal> a un généréteur d'id artificiel, comme une classe d'entité ! Une clef subrogée différente est assignée à chaque ligne de la collection. Cependant, Hibernate ne fournit pas de mécanisme pour découvrir la valeur d'une clef subrogée d'une ligne particulière."
+
+#: index.docbook:798
+msgid "Note that the update performance of an <literal><idbag></literal> is <emphasis>much</emphasis> better than a regular <literal><bag></literal>! Hibernate can locate individual rows efficiently and update or delete them individually, just like a list, map or set."
+msgstr "Notez que les performances de la mise à jour d'un <literal><idbag></literal> sont <emphasis>bien</emphasis> meilleures qu'un <literal><bag></literal> ordinaire ! Hibernate peut localiser des lignes individuelles efficacement et les mettre à jour ou les effacer individuellement, comme une liste, une map ou un ensemble."
+
+#: index.docbook:805
+msgid "In the current implementation, the <literal>native</literal> identifier generation strategy is not supported for <literal><idbag></literal> collection identifiers."
+msgstr "Dans l'implémentation actuelle, la stratégie de la génération de l'identifiant <literal>native</literal> n'est pas supportée pour les identifiants de collection <literal><idbag></literal>."
+
+#: index.docbook:829
+msgid "Collection examples"
+msgstr "Exemples de collections"
+
+#: index.docbook:831
+msgid "The previous sections are pretty confusing. So lets look at an example. This class:"
+msgstr "Les sections précédentes sont assez confuses. Donc prenons un exemple. Cette classe :"
+
+#: index.docbook:836
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "\n"
+ "public class Parent {\n"
+ " private long id;\n"
+ " private Set children;\n"
+ "\n"
+ " public long getId() { return id; }\n"
+ " private void setId(long id) { this.id=id; }\n"
+ "\n"
+ " private Set getChildren() { return children; }\n"
+ " private void setChildren(Set children) { this.children=children; }\n"
+ "\n"
+ " ....\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "\n"
+ "public class Parent {\n"
+ " private long id;\n"
+ " private Set children;\n"
+ "\n"
+ " public long getId() { return id; }\n"
+ " private void setId(long id) { this.id=id; }\n"
+ "\n"
+ " private Set getChildren() { return children; }\n"
+ " private void setChildren(Set children) { this.children=children; }\n"
+ "\n"
+ " ....\n"
+ " ....\n"
+ "}]]>"
+
+#: index.docbook:838
+msgid "has a collection of <literal>Child</literal> instances. If each child has at most one parent, the most natural mapping is a one-to-many association:"
+msgstr "a une collection d'instances de <literal>Child</literal>. Si chaque enfant a au plus un parent, le mapping le plus naturel est une association un-vers-plusieurs :"
+
+#: index.docbook:844
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:846
+msgid "This maps to the following table definitions:"
+msgstr "Ceci mappe les définitions de tables suivantes :"
+
+#: index.docbook:850
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+
+#: index.docbook:852
+msgid "If the parent is <emphasis>required</emphasis>, use a bidirectional one-to-many association:"
+msgstr "Si le parent est <emphasis>requis</emphasis>, utilisez une association un-vers-plusieurs unidirectionnelle :"
+
+#: index.docbook:857
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <many-to-one name=\"parent\" class=\"Parent\" column=\"parent_id\" not-null=\"true\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <many-to-one name=\"parent\" class=\"Parent\" column=\"parent_id\" not-null=\"true\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:859
+msgid "Notice the <literal>NOT NULL</literal> constraint:"
+msgstr "Notez la contrainte <literal>NOT NULL</literal> :"
+
+#: index.docbook:863
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null\n"
+ " primary key,\n"
+ " name varchar(255),\n"
+ " parent_id bigint not null )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null\n"
+ " primary key,\n"
+ " name varchar(255),\n"
+ " parent_id bigint not null )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+
+#: index.docbook:865
+msgid "Alternatively, if you absolutely insist that this association should be unidirectional, you can declare the <literal>NOT NULL</literal> constraint on the <literal><key></literal> mapping:"
+msgstr "Alternativement, si vous insistez absolument pour que cette association soit unidirectionnelle, vous pouvez déclarer la contrainte <literal>NOT NULL</literal> sur le mapping <literal><key></literal> :"
+
+#: index.docbook:871
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:873
+msgid "On the other hand, if a child might have multiple parents, a many-to-many association is appropriate:"
+msgstr "D'un autre côté, si un enfant pouvait avoir plusieurs parent, une association plusieurs-vers-plusieurs est plus appropriée :"
+
+#: index.docbook:878
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" table=\"childset\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <many-to-many class=\"Child\" column=\"child_id\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" table=\"childset\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <many-to-many class=\"Child\" column=\"child_id\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:880
+msgid "Table definitions:"
+msgstr "Définitions des tables :"
+
+#: index.docbook:884
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255) )\n"
+ "create table childset ( parent_id bigint not null,\n"
+ " child_id bigint not null,\n"
+ " primary key ( parent_id, child_id ) )\n"
+ "alter table childset add constraint childsetfk0 (parent_id) references parent\n"
+ "alter table childset add constraint childsetfk1 (child_id) references child]]>"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255) )\n"
+ "create table childset ( parent_id bigint not null,\n"
+ " child_id bigint not null,\n"
+ " primary key ( parent_id, child_id ) )\n"
+ "alter table childset add constraint childsetfk0 (parent_id) references parent\n"
+ "alter table childset add constraint childsetfk1 (child_id) references child]]>"
+
+#: index.docbook:886
+msgid "For more examples and a complete walk-through a parent/child relationship mapping, see <xref linkend=\"example-parentchild\"/>."
+msgstr "Pour plus d'exemples et une revue complète du mapping de la relation parent/enfant, voir see <xref linkend=\"example-parentchild\"/>."
+
+#: index.docbook:891
+msgid "Even more exotic association mappings are possible, we will catalog all possibilities in the next chapter."
+msgstr "Des mappings d'association plus exotiques sont possibles, nous cataloguerons toutes les possibilités dans le prochain chapitre."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/component_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/component_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/component_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,532 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Component Mapping"
+msgstr "Mapping de composants"
+
+#: index.docbook:7
+msgid "The notion of a <emphasis>component</emphasis> is re-used in several different contexts, for different purposes, throughout Hibernate."
+msgstr "La notion de <emphasis>composants</emphasis> est réutilisé dans différents contextes, avec différents objectifs, à travers Hibernate."
+
+#: index.docbook:13
+msgid "Dependent objects"
+msgstr "Objects dépendants"
+
+#: index.docbook:15
+msgid "A component is a contained object that is persisted as a value type, not an entity reference. The term \"component\" refers to the object-oriented notion of composition (not to architecture-level components). For example, you might model a person like this:"
+msgstr "Le composant est un objet inclu dans un autre qui est sauvegardé comme une valeur, et non pas comme une entité. Le composant fait référence à la notion (au sens objet) de composition (et non pas de composant au sens d'architecture de composants). Par exemple on pourrait modélisé l'objet personne de cette façon:"
+
+#: index.docbook:21
+msgid ""
+ "<![CDATA[public class Person {\n"
+ " private java.util.Date birthday;\n"
+ " private Name name;\n"
+ " private String key;\n"
+ " public String getKey() {\n"
+ " return key;\n"
+ " }\n"
+ " private void setKey(String key) {\n"
+ " this.key=key;\n"
+ " }\n"
+ " public java.util.Date getBirthday() {\n"
+ " return birthday;\n"
+ " }\n"
+ " public void setBirthday(java.util.Date birthday) {\n"
+ " this.birthday = birthday;\n"
+ " }\n"
+ " public Name getName() {\n"
+ " return name;\n"
+ " }\n"
+ " public void setName(Name name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ " ......\n"
+ " ......\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Person {\n"
+ " private java.util.Date birthday;\n"
+ " private Name name;\n"
+ " private String key;\n"
+ " public String getKey() {\n"
+ " return key;\n"
+ " }\n"
+ " private void setKey(String key) {\n"
+ " this.key=key;\n"
+ " }\n"
+ " public java.util.Date getBirthday() {\n"
+ " return birthday;\n"
+ " }\n"
+ " public void setBirthday(java.util.Date birthday) {\n"
+ " this.birthday = birthday;\n"
+ " }\n"
+ " public Name getName() {\n"
+ " return name;\n"
+ " }\n"
+ " public void setName(Name name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ " ......\n"
+ " ......\n"
+ "}]]>"
+
+#: index.docbook:23
+msgid ""
+ "<![CDATA[public class Name {\n"
+ " char initial;\n"
+ " String first;\n"
+ " String last;\n"
+ " public String getFirst() {\n"
+ " return first;\n"
+ " }\n"
+ " void setFirst(String first) {\n"
+ " this.first = first;\n"
+ " }\n"
+ " public String getLast() {\n"
+ " return last;\n"
+ " }\n"
+ " void setLast(String last) {\n"
+ " this.last = last;\n"
+ " }\n"
+ " public char getInitial() {\n"
+ " return initial;\n"
+ " }\n"
+ " void setInitial(char initial) {\n"
+ " this.initial = initial;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Name {\n"
+ " char initial;\n"
+ " String first;\n"
+ " String last;\n"
+ " public String getFirst() {\n"
+ " return first;\n"
+ " }\n"
+ " void setFirst(String first) {\n"
+ " this.first = first;\n"
+ " }\n"
+ " public String getLast() {\n"
+ " return last;\n"
+ " }\n"
+ " void setLast(String last) {\n"
+ " this.last = last;\n"
+ " }\n"
+ " public char getInitial() {\n"
+ " return initial;\n"
+ " }\n"
+ " void setInitial(char initial) {\n"
+ " this.initial = initial;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:25
+msgid "Now <literal>Name</literal> may be persisted as a component of <literal>Person</literal>. Notice that <literal>Name</literal> defines getter and setter methods for its persistent properties, but doesn't need to declare any interfaces or identifier properties."
+msgstr "Maintenant <literal>Name</literal> peut-être sauvegardé comme un composant de <literal>Person</literal>. Remarquer que <literal>Name</literal> définit des methodes d'accès et de modification pour ses propriétés persistantes, mais il n'a pas besoin des interfaces ou des propriétés d'identification ( par exemple getId() ) qui sont propres aux entités."
+
+#: index.docbook:32
+msgid "Our Hibernate mapping would look like:"
+msgstr "Nous serions alors amené à mapper ce composant de cette façon:"
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\"> <!-- class attribute optional -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\"> <!-- class attribute optional -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+
+#: index.docbook:38
+msgid "The person table would have the columns <literal>pid</literal>, <literal>birthday</literal>, <literal>initial</literal>, <literal>first</literal> and <literal>last</literal>."
+msgstr "La table person aurai les colonnes <literal>pid</literal>, <literal>birthday</literal>, <literal>initial</literal>, <literal>first</literal> and <literal>last</literal>."
+
+#: index.docbook:46
+msgid "Like all value types, components do not support shared references. In other words, two persons could have the same name, but the two person objects would contain two independent name ojects, only \"the same\" by value. The null value semantics of a component are <emphasis>ad hoc</emphasis>. When reloading the containing object, Hibernate will assume that if all component columns are null, then the entire component is null. This should be okay for most purposes."
+msgstr "Comme tous les types valeurs, les composants ne supportent pas les références partagés. En d'autres mots, deux instances de person peuvent avoir un même nom, mais ces noms sont indépendants, ils peuvent être identiques si on les compare par valeur mais ils représentent deux objets distincts en mémoire. La notion de nullité pour un composant est <emphasis>ad hoc</emphasis>. Quand il recharge l'objet qui contient le composant, Hibernate supposera que si tous les champs du composants sont nuls alors le composant sera positionné à la valeur null. Ce choix programmatif devrait être satisfaisant dans la plupart des cas."
+
+#: index.docbook:55
+msgid "The properties of a component may be of any Hibernate type (collections, many-to-one associations, other components, etc). Nested components should <emphasis>not</emphasis> be considered an exotic usage. Hibernate is intended to support a very fine-grained object model."
+msgstr "Les propriétés d'un composant peuvent être de tous les types qu'Hibernate supporte habituellement (collections, many-to-one associations, autres composants, etc). Les composants inclus ne doivent <emphasis>pas</emphasis> être vus comme quelque chose d'exotique. Hibernate a été conçu pour supporter un modèle objet très granulaire."
+
+#: index.docbook:62
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr "Le <literal><component></literal> peut inclure dans la liste de ses propriétés une référence au <literal><parent></literal> conteneur."
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\" unique=\"true\">\n"
+ " <parent name=\"namedPerson\"/> <!-- reference back to the Person -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\" unique=\"true\">\n"
+ " <parent name=\"namedPerson\"/> <!-- référence arrière à Person -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+
+#: index.docbook:73
+msgid "Collections of dependent objects"
+msgstr "Collection d'objets dépendants"
+
+#: index.docbook:75
+msgid "Collections of components are supported (eg. an array of type <literal>Name</literal>). Declare your component collection by replacing the <literal><element></literal> tag with a <literal><composite-element></literal> tag."
+msgstr "Les collections d'objets dépendants sont supportés (exemple: un tableau de type <literal>Name</literal>). Déclarer la collection de composants en remplaçant le tag <literal><element></literal> par le tag <literal><composite-element></literal>."
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<set name=\"someNames\" table=\"some_names\" lazy=\"true\">\n"
+ " <key column=\"id\"/>\n"
+ " <composite-element class=\"eg.Name\"> <!-- class attribute required -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </composite-element>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"someNames\" table=\"some_names\" lazy=\"true\">\n"
+ " <key column=\"id\"/>\n"
+ " <composite-element class=\"eg.Name\"> <!-- class attribute required -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </composite-element>\n"
+ "</set>]]>"
+
+#: index.docbook:84
+msgid "Note: if you define a <literal>Set</literal> of composite elements, it is very important to implement <literal>equals()</literal> and <literal>hashCode()</literal> correctly."
+msgstr "Remarque: Si vous définissez un <literal>Set</literal> d'élément composite, il est très important d'implémenter la méthode <literal>equals()</literal> et <literal>hashCode()</literal> correctement."
+
+#: index.docbook:90
+msgid "Composite elements may contain components but not collections. If your composite element itself contains components, use the <literal><nested-composite-element></literal> tag. This is a pretty exotic case - a collection of components which themselves have components. By this stage you should be asking yourself if a one-to-many association is more appropriate. Try remodelling the composite element as an entity - but note that even though the Java model is the same, the relational model and persistence semantics are still slightly different."
+msgstr "Les élements composite peuvent aussi contenir des composants mais pas des collections. Si votre élément composite contient aussi des composants, utilisez l'élément <literal><nested-composite-element></literal> . Une collections de composants qui ccontiennent eux-mêmes des composants est un cas très exotique. A ce stade demandez-vous si une association un-à -plusieurs ne serait pas plus approprié. Essayez de re remodeler votre élément composite comme une entité ( Dans ce cas même si le modèle Java est le même la logique de persitence et de relation sont tout de même différentes)"
+
+#: index.docbook:102
+msgid "Please note that a composite element mapping doesn't support null-able properties if you're using a <literal><set></literal>. Hibernate has to use each columns value to identify a record when deleting objects (there is no separate primary key column in the composite element table), which is not possible with null values. You have to either use only not-null properties in a composite-element or choose a <literal><list></literal>, <literal><map></literal>, <literal><bag></literal> or <literal><idbag></literal>."
+msgstr "Remarque, le mapping d'éléments composites ne supporte pas la nullité des propriétés lorsqu'on utilise un <literal><set></literal>. Hibernate lorsqu'il supprime un objet utilise chaque colonne pour identifier un objet (on ne peut pas utiliser des clés primaires distinctes dans une table d'éléments composites), ce qui n'est pas possible avec des valeurs nulles. Vous devez donc choisir d'interdire la nullité des propriétés d'un élément composite ou choisir un autre type de collection comme : <literal><list></literal>, <literal><map></literal>, <literal><bag></literal> ou <literal><idbag></literal>."
+
+#: index.docbook:113
+msgid "A special case of a composite element is a composite element with a nested <literal><many-to-one></literal> element. A mapping like this allows you to map extra columns of a many-to-many association table to the composite element class. The following is a many-to-many association from <literal>Order</literal> to <literal>Item</literal> where <literal>purchaseDate</literal>, <literal>price</literal> and <literal>quantity</literal> are properties of the association:"
+msgstr "Un cas particulier d'élément composite est un élément composite qui inclut un élément <literal><many-to-one></literal>. Un mapping comme celui-ci vous permet d'associer les colonnes d'une table d'association plusieurs à plusieurs (many-to-many) à la classse de l'élément composite. L'exemple suivant est une association plusieurs à plusieurs de <literal>Order</literal> à <literal>Item</literal> à <literal>purchaseDate</literal>, <literal>price</literal> et <literal>quantity</literal> sont des propriétés de l'association."
+
+#: index.docbook:123
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.Purchase\">\n"
+ " <property name=\"purchaseDate\"/>\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/> <!-- class attribute is optional -->\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.Purchase\">\n"
+ " <property name=\"purchaseDate\"/>\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/> <!-- class attribute is optional -->\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:125
+msgid "Of course, there can't be a reference to the purchae on the other side, for bidirectional association navigation. Remember that components are value types and don't allow shared references. A single <literal>Purchase</literal> can be in the set of an <literal>Order</literal>, but it can't be referenced by the <literal>Item</literal> at the same time."
+msgstr "Bien sûr, il ne peut pas y avoir de référence à l'achat (purchase) depuis l'article (item), pour pouvoir naviguer de façon bidirectionnelle dans l'association. N'oubliez pas que les composants sont de type valeurs et n'autorise pas les références partagées."
+
+#: index.docbook:133
+msgid "Even ternary (or quaternary, etc) associations are possible:"
+msgstr "Même les associations ternaires ou quaternaires sont possibles:"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.OrderLine\">\n"
+ " <many-to-one name=\"purchaseDetails class=\"eg.Purchase\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/>\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.OrderLine\">\n"
+ " <many-to-one name=\"purchaseDetails class=\"eg.Purchase\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/>\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:137
+msgid "Composite elements may appear in queries using the same syntax as associations to other entities."
+msgstr "Les éléments composites peuvent apparaître dans les requêtes en utilisant la même syntaxe que associations"
+
+#: index.docbook:145
+msgid "Components as Map indices"
+msgstr "Utiliser les composants comme index de map"
+
+#: index.docbook:147
+msgid "The <literal><composite-map-key></literal> element lets you map a component class as the key of a <literal>Map</literal>. Make sure you override <literal>hashCode()</literal> and <literal>equals()</literal> correctly on the component class."
+msgstr "l'élément <literal><composite-map-key></literal> vous permet d'utiliser une classe de composant comme indice de <literal>Map</literal>. Assurez-vous d'avoir surdéfini <literal>hashCode()</literal> et <literal>equals()</literal> dans la classe du composant."
+
+#: index.docbook:156
+msgid "Components as composite identifiers"
+msgstr "Utiliser un composant comme identifiant"
+
+#: index.docbook:158
+msgid "You may use a component as an identifier of an entity class. Your component class must satisfy certain requirements:"
+msgstr "Vous pouvez utiliser un composant comme identifiant d'une entité. Mais pour cela la classe du composant doit respecter certaines règles."
+
+#: index.docbook:165
+msgid "It must implement <literal>java.io.Serializable</literal>."
+msgstr "Elle doit implémenter <literal>java.io.Serializable</literal>."
+
+#: index.docbook:170
+msgid "It must re-implement <literal>equals()</literal> and <literal>hashCode()</literal>, consistently with the database's notion of composite key equality."
+msgstr "Elle doit redéfinir <literal>equals()</literal> et <literal>hashCode()</literal>, de façon cohérente avec le fait qu'elle définit une clé composite dans la base de données."
+
+#: index.docbook:179
+msgid "Note: in Hibernate3, the second requirement is not an absolutely hard requirement of Hibernate. But do it anyway."
+msgstr "Remarque: avec hibernate3, la seconde règle n'est plus absolument necessaire mais faîtes le quand même."
+
+#: index.docbook:183
+msgid "You can't use an <literal>IdentifierGenerator</literal> to generate composite keys. Instead the application must assign its own identifiers."
+msgstr "Vous ne pouvez pas utiliser de <literal>IdentifierGenerator</literal> pour générer une clé composite, l'application devra définir elle même ses propres identifiants."
+
+#: index.docbook:188
+msgid "Use the <literal><composite-id></literal> tag (with nested <literal><key-property></literal> elements) in place of the usual <literal><id></literal> declaration. For example, the <literal>OrderLine</literal> class has a primary key that depends upon the (composite) primary key of <literal>Order</literal>."
+msgstr "Utiliser l'élément <literal><composite-id></literal> (en incluant l'élément <literal><key-property></literal>) à la place de l'habituel déclaration <literal><id></literal>. Par exemple la classe <literal>OrderLine</literal> qui dépend de la clé primaire (composite) de <literal>Order</literal>."
+
+#: index.docbook:196
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " \n"
+ " <composite-id name=\"id\" class=\"OrderLineId\">\n"
+ " <key-property name=\"lineId\"/>\n"
+ " <key-property name=\"orderId\"/>\n"
+ " <key-property name=\"customerId\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"name\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\" class=\"Order\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-one>\n"
+ " ....\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " \n"
+ " <composite-id name=\"id\" class=\"OrderLineId\">\n"
+ " <key-property name=\"lineId\"/>\n"
+ " <key-property name=\"orderId\"/>\n"
+ " <key-property name=\"customerId\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"name\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\" class=\"Order\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-one>\n"
+ " ....\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:198
+msgid "Now, any foreign keys referencing the <literal>OrderLine</literal> table are also composite. You must declare this in your mappings for other classes. An association to <literal>OrderLine</literal> would be mapped like this:"
+msgstr "Maintenant toutes clés étrangères référençant la table <literal>OrderLine</literal> devra aussi être composite. Vous devez en tenir compte lorsque vous écrivez vos mapping d'association pour les autres classes. Une association à <literal>OrderLine</literal> devrait être mappé de la façon suivante :"
+
+#: index.docbook:204
+msgid ""
+ "<![CDATA[<many-to-one name=\"orderLine\" class=\"OrderLine\">\n"
+ "<!-- the \"class\" attribute is optional, as usual -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ "</many-to-one>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"orderLine\" class=\"OrderLine\">\n"
+ "<!-- the \"class\" attribute is optional, as usual -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:206
+msgid "(Note that the <literal><column></literal> tag is an alternative to the <literal>column</literal> attribute everywhere.)"
+msgstr "(Remarque: l'élément <literal><column></literal> est une alternative à l'attribut <literal>column</literal> que l'on utilise partout.)"
+
+#: index.docbook:211
+msgid "A <literal>many-to-many</literal> association to <literal>OrderLine</literal> also uses the composite foreign key:"
+msgstr "Une association <literal>plusieurs-à -plusieurs</literal> (many-to-many) à <literal>OrderLine</literal> utilisera aussi une clé étrangère composite:"
+
+#: index.docbook:216
+msgid ""
+ "<![CDATA[<set name=\"undeliveredOrderLines\">\n"
+ " <key column name=\"warehouseId\"/>\n"
+ " <many-to-many class=\"OrderLine\">\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-many>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"undeliveredOrderLines\">\n"
+ " <key column name=\"warehouseId\"/>\n"
+ " <many-to-many class=\"OrderLine\">\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-many>\n"
+ "</set>]]>"
+
+#: index.docbook:218
+msgid "The collection of <literal>OrderLine</literal>s in <literal>Order</literal> would use:"
+msgstr "La collection des <literal>OrderLine</literal>s dans <literal>Order</literal> utilisera:"
+
+#: index.docbook:223
+msgid ""
+ "<![CDATA[<set name=\"orderLines\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"OrderLine\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"orderLines\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"OrderLine\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:225
+msgid "(The <literal><one-to-many></literal> element, as usual, declares no columns.)"
+msgstr "(L'élément <literal><one-to-many></literal>, comme d'habitude, ne déclare pas de colonne.)"
+
+#: index.docbook:229
+msgid "If <literal>OrderLine</literal> itself owns a collection, it also has a composite foreign key."
+msgstr "Si <literal>OrderLine</literal> lui-même possède une collection, celle-ci aura aussi une clé composite étrangère."
+
+#: index.docbook:234
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " ....\n"
+ " ....\n"
+ " <list name=\"deliveryAttempts\">\n"
+ " <key> <!-- a collection inherits the composite key type -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <list-index column=\"attemptId\" base=\"1\"/>\n"
+ " <composite-element class=\"DeliveryAttempt\">\n"
+ " ...\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " ....\n"
+ " ....\n"
+ " <list name=\"deliveryAttempts\">\n"
+ " <key> <!-- a collection inherits the composite key type -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <list-index column=\"attemptId\" base=\"1\"/>\n"
+ " <composite-element class=\"DeliveryAttempt\">\n"
+ " ...\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:239
+msgid "Dynamic components"
+msgstr "Composant Dynamique"
+
+#: index.docbook:241
+msgid "You may even map a property of type <literal>Map</literal>:"
+msgstr "Vous pouvez même mapper une propriété de type <literal>Map</literal>:"
+
+#: index.docbook:245
+msgid ""
+ "<![CDATA[<dynamic-component name=\"userAttributes\">\n"
+ " <property name=\"foo\" column=\"FOO\" type=\"string\"/>\n"
+ " <property name=\"bar\" column=\"BAR\" type=\"integer\"/>\n"
+ " <many-to-one name=\"baz\" class=\"Baz\" column=\"BAZ_ID\"/>\n"
+ "</dynamic-component>]]>"
+msgstr ""
+ "<![CDATA[<dynamic-component name=\"userAttributes\">\n"
+ " <property name=\"foo\" column=\"FOO\"/>\n"
+ " <property name=\"bar\" column=\"BAR\"/>\n"
+ " <many-to-one name=\"baz\" class=\"Baz\" column=\"BAZ_ID\"/>\n"
+ "</dynamic-component>]]>"
+
+#: index.docbook:247
+msgid "The semantics of a <literal><dynamic-component></literal> mapping are identical to <literal><component></literal>. The advantage of this kind of mapping is the ability to determine the actual properties of the bean at deployment time, just by editing the mapping document. Runtime manipulation of the mapping document is also possible, using a DOM parser. Even better, you can access (and change) Hibernate's configuration-time metamodel via the <literal>Configuration</literal> object."
+msgstr "La sémantique de l'association à un <literal><dynamic-component></literal> est identique à celle que l'on utilise pour les composants. L'avantage de ce type de mapping est qu'il pemet de déterminer les véritables propriétés du bean au moment su déploiement en éditant simplement le document de mapping. La manipulation du document de mapping pendant l'execution de l'application est aussi possible en utilisant un parser DOM. Il ya même mieux, vous pouvez accéder (et changer) le metamodel de configuration d'hibernate en utilisant l'objet <literal>Configuration</literal>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/configuration.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/configuration.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/configuration.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1595 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Configuration"
+msgstr "Configuration"
+
+#: index.docbook:7
+msgid "Because Hibernate is designed to operate in many different environments, there are a large number of configuration parameters. Fortunately, most have sensible default values and Hibernate is distributed with an example <literal>hibernate.properties</literal> file in <literal>etc/</literal> that shows the various options. Just put the example file in your classpath and customize it."
+msgstr "Parce qu'Hibernate est conçu pour fonctionner dans différents environnements, il existe beaucoup de paramètres de configuration. Heureusement, la plupart ont des valeurs par défaut appropriées et la distribution d'Hibernate contient un exemple de fichier <literal>hibernate.properties</literal> dans le répertoire <literal>etc/</literal> qui montre les différentes options. Vous n'avez qu'à placer ce fichier dans votre classpath et à l'adapter."
+
+#: index.docbook:16
+msgid "Programmatic configuration"
+msgstr "Configuration par programmation"
+
+#: index.docbook:18
+msgid "An instance of <literal>org.hibernate.cfg.Configuration</literal> represents an entire set of mappings of an application's Java types to an SQL database. The <literal>Configuration</literal> is used to build an (immutable) <literal>SessionFactory</literal>. The mappings are compiled from various XML mapping files."
+msgstr "Une instance de <literal>org.hibernate.cfg.Configuration</literal> représente un ensemble de mappings des classes Java d'une application vers la base de données SQL. La <literal>Configuration</literal> est utilisée pour construire un objet (immuable) <literal>SessionFactory</literal>. Les mappings sont constitués d'un ensemble de fichiers de mapping XML."
+
+#: index.docbook:26
+msgid "You may obtain a <literal>Configuration</literal> instance by instantiating it directly and specifying XML mapping documents. If the mapping files are in the classpath, use <literal>addResource()</literal>:"
+msgstr "Vous pouvez obtenir une instance de <literal>Configuration</literal> en l'instanciant directement et en spécifiant la liste des documents XML de mapping. Si les fichiers de mapping sont dans le classpath, vous pouvez le faire à l'aide de la méthode <literal>addResource()</literal> :"
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addResource(\"Item.hbm.xml\")\n"
+ " .addResource(\"Bid.hbm.xml\");]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addResource(\"Item.hbm.xml\")\n"
+ " .addResource(\"Bid.hbm.xml\");]]>"
+
+#: index.docbook:34
+msgid "An alternative (sometimes better) way is to specify the mapped class, and let Hibernate find the mapping document for you:"
+msgstr "Une alternative (parfois meilleure) est de spécifier les classes mappées et de laisser Hibernate trouver les documents de mapping pour vous :"
+
+#: index.docbook:39
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class);]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class);]]>"
+
+#: index.docbook:41
+msgid "Then Hibernate will look for mapping files named <literal>/org/hibernate/auction/Item.hbm.xml</literal> and <literal>/org/hibernate/auction/Bid.hbm.xml</literal> in the classpath. This approach eliminates any hardcoded filenames."
+msgstr "Hibernate va rechercher les fichiers de mappings <literal>/org/hibernate/auction/Item.hbm.xml</literal> et <literal>/org/hibernate/auction/Bid.hbm.xml</literal> dans le classpath. Cette approche élimine les noms de fichiers en dur."
+
+#: index.docbook:48
+msgid "A <literal>Configuration</literal> also allows you to specify configuration properties:"
+msgstr "Une <literal>Configuration</literal> vous permet également de préciser des propriétés de configuration :"
+
+#: index.docbook:53
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class)\n"
+ " .setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLInnoDBDialect\")\n"
+ " .setProperty(\"hibernate.connection.datasource\", \"java:comp/env/jdbc/test\")\n"
+ " .setProperty(\"hibernate.order_updates\", \"true\");]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class)\n"
+ " .setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLInnoDBDialect\")\n"
+ " .setProperty(\"hibernate.connection.datasource\", \"java:comp/env/jdbc/test\")\n"
+ " .setProperty(\"hibernate.order_updates\", \"true\");]]>"
+
+#: index.docbook:55
+msgid "This is not the only way to pass configuration properties to Hibernate. The various options include:"
+msgstr "Ce n'est pas le seul moyen de passer des propriétés de configuration à Hibernate. Les différentes options sont :"
+
+#: index.docbook:62
+msgid "Pass an instance of <literal>java.util.Properties</literal> to <literal>Configuration.setProperties()</literal>."
+msgstr "Passer une instance de <literal>java.util.Properties</literal> Ã <literal>Configuration.setProperties()</literal>."
+
+#: index.docbook:68
+msgid "Place <literal>hibernate.properties</literal> in a root directory of the classpath."
+msgstr "Placer <literal>hibernate.properties</literal> dans un répertoire racine du classpath"
+
+#: index.docbook:74
+msgid "Set <literal>System</literal> properties using <literal>java -Dproperty=value</literal>."
+msgstr "Positionner les propriétés <literal>System</literal> en utilisant <literal>java -Dproperty=value</literal>."
+
+#: index.docbook:80
+msgid "Include <literal><property></literal> elements in <literal>hibernate.cfg.xml</literal> (discussed later)."
+msgstr "Inclure des éléments <literal><property></literal> dans le fichier <literal>hibernate.cfg.xml</literal> (voir plus loin)."
+
+#: index.docbook:87
+msgid "<literal>hibernate.properties</literal> is the easiest approach if you want to get started quickly."
+msgstr "L'utilisation d'<literal>hibernate.properties</literal> est l'approche la plus simple si vous voulez démarrer rapidement"
+
+#: index.docbook:92
+msgid "The <literal>Configuration</literal> is intended as a startup-time object, to be discarded once a <literal>SessionFactory</literal> is created."
+msgstr "La <literal>Configuration</literal> est un objet de démarrage qui sera supprimé une fois qu'une <literal>SessionFactory</literal> aura été créée."
+
+#: index.docbook:100
+msgid "Obtaining a SessionFactory"
+msgstr "Obtenir une SessionFactory"
+
+#: index.docbook:102
+msgid "When all mappings have been parsed by the <literal>Configuration</literal>, the application must obtain a factory for <literal>Session</literal> instances. This factory is intended to be shared by all application threads:"
+msgstr "Une fois que tous les mappings ont été parsés par la <literal>Configuration</literal>, l'application doit obtenir une fabrique d'instances de <literal>Session</literal>. Cette fabrique sera partagée entre tous les threads de l'application :"
+
+#: index.docbook:108
+msgid "<![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]>"
+msgstr "<![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]>"
+
+#: index.docbook:110
+msgid "Hibernate does allow your application to instantiate more than one <literal>SessionFactory</literal>. This is useful if you are using more than one database."
+msgstr "Hibernate permet à votre application d'instancier plus d'une <literal>SessionFactory</literal>. Cela est pratique lorsque vous utilisez plus d'une base de données."
+
+#: index.docbook:119
+msgid "JDBC connections"
+msgstr "Connexions JDBC"
+
+#: index.docbook:121
+msgid "Usually, you want to have the <literal>SessionFactory</literal> create and pool JDBC connections for you. If you take this approach, opening a <literal>Session</literal> is as simple as:"
+msgstr "Habituellement, vous voulez que la <literal>SessionFactory</literal> crée les connexions JDBC et les mette dans un pool pour vous. Si vous suivez cette approche, ouvrir une <literal>Session</literal> est aussi simple que :"
+
+#: index.docbook:127
+msgid "<![CDATA[Session session = sessions.openSession(); // open a new Session]]>"
+msgstr "<![CDATA[Session session = sessions.openSession(); // open a new Session]]>"
+
+#: index.docbook:129
+msgid "As soon as you do something that requires access to the database, a JDBC connection will be obtained from the pool."
+msgstr "Dès que vous ferez quelquechose qui requiert un accès à la base de données, une connexion JDBC sera récupérée dans le pool."
+
+#: index.docbook:134
+msgid "For this to work, we need to pass some JDBC connection properties to Hibernate. All Hibernate property names and semantics are defined on the class <literal>org.hibernate.cfg.Environment</literal>. We will now describe the most important settings for JDBC connection configuration."
+msgstr "Pour faire cela, il faut passer les propriétés de la connexion JDBC à Hibernate. Tous les noms des propriétés Hibernate et leur signification sont définies dans la classe <literal>org.hibernate.cfg.Environment</literal>. Nous allons maintenant décrire les paramètres de configuration des connexions JDBC les plus importants."
+
+#: index.docbook:141
+msgid "Hibernate will obtain (and pool) connections using <literal>java.sql.DriverManager</literal> if you set the following properties:"
+msgstr "Hibernate obtiendra des connexions (et les mettra dans un pool) en utilisant <literal>java.sql.DriverManager</literal> si vous positionnez les paramètres de la manière suivante :"
+
+#: index.docbook:147
+msgid "Hibernate JDBC Properties"
+msgstr "Propriétés JDBC d'Hibernate"
+
+#: index.docbook:153, index.docbook:241, index.docbook:338, index.docbook:529, index.docbook:725, index.docbook:832, index.docbook:920
+msgid "Property name"
+msgstr "Nom de la propriété"
+
+#: index.docbook:154, index.docbook:242, index.docbook:339, index.docbook:530, index.docbook:726, index.docbook:833, index.docbook:921
+msgid "Purpose"
+msgstr "Fonction"
+
+#: index.docbook:160
+msgid "hibernate.connection.driver_class"
+msgstr "hibernate.connection.driver_class"
+
+#: index.docbook:163
+msgid "JDBC driver class"
+msgstr "Classe du driver jdbc"
+
+#: index.docbook:168
+msgid "hibernate.connection.url"
+msgstr "hibernate.connection.url"
+
+#: index.docbook:171
+msgid "JDBC URL"
+msgstr "URL jdbc"
+
+#: index.docbook:176, index.docbook:272
+msgid "hibernate.connection.username"
+msgstr "hibernate.connection.username"
+
+#: index.docbook:179
+msgid "database user"
+msgstr "utilisateur de la base de données"
+
+#: index.docbook:184, index.docbook:280
+msgid "hibernate.connection.password"
+msgstr "hibernate.connection.password"
+
+#: index.docbook:187
+msgid "database user password"
+msgstr "mot de passe de la base de données"
+
+#: index.docbook:192
+msgid "hibernate.connection.pool_size"
+msgstr "hibernate.connection.pool_size"
+
+#: index.docbook:195
+msgid "maximum number of pooled connections"
+msgstr "nombre maximum de connexions dans le pool"
+
+#: index.docbook:202
+msgid "Hibernate's own connection pooling algorithm is however quite rudimentary. It is intended to help you get started and is <emphasis>not intended for use in a production system</emphasis> or even for performance testing. You should use a third party pool for best performance and stability. Just replace the <literal>hibernate.connection.pool_size</literal> property with connection pool specific settings. This will turn off Hibernate's internal pool. For example, you might like to use C3P0."
+msgstr "L'algorithme natif de pool de connexions d'Hibernate est plutôt rudimentaire. Il a été fait dans le but de vous aider à démarrer et <emphasis>n'est pas prévu pour un système en production</emphasis> ou même pour un test de peformance. Utilisez plutôt un pool tiers pour de meilleures performances et une meilleure stabilité : pour cela, remplacez la propriété <literal>hibernate.connection.pool_size</literal> avec les propriétés spécifique au pool de connexions que vous avez choisi. Cela désactivera le pool de connexions interne d'Hibernate. Vous pouvez par exemple utiliser C3P0."
+
+#: index.docbook:212
+msgid "C3P0 is an open source JDBC connection pool distributed along with Hibernate in the <literal>lib</literal> directory. Hibernate will use its <literal>C3P0ConnectionProvider</literal> for connection pooling if you set <literal>hibernate.c3p0.*</literal> properties. If you'd like to use Proxool refer to the packaged <literal>hibernate.properties</literal> and the Hibernate web site for more information."
+msgstr "C3P0 est un pool de connexions JDBC open source distribué avec Hibernate dans le répertoire <literal>lib</literal>. Hibernate utilisera son provider <literal>C3P0ConnectionProvider</literal> pour le pool de connexions si vous positionnez les propriétés <literal>hibernate.c3p0.*</literal>. Si vous voulez utiliser Proxool, référez vous au groupe de propriétés d'<literal>hibernate.properties</literal> correspondant et regardez sur le site web d'Hibernate pour plus d'informations."
+
+#: index.docbook:221
+msgid "Here is an example <literal>hibernate.properties</literal> file for C3P0:"
+msgstr "Voici un exemple de fichier <literal>hibernate.properties</literal> pour C3P0:"
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[hibernate.connection.driver_class = org.postgresql.Driver\n"
+ "hibernate.connection.url = jdbc:postgresql://localhost/mydatabase\n"
+ "hibernate.connection.username = myuser\n"
+ "hibernate.connection.password = secret\n"
+ "hibernate.c3p0.min_size=5\n"
+ "hibernate.c3p0.max_size=20\n"
+ "hibernate.c3p0.timeout=1800\n"
+ "hibernate.c3p0.max_statements=50\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+ "<![CDATA[hibernate.connection.driver_class = org.postgresql.Driver\n"
+ "hibernate.connection.url = jdbc:postgresql://localhost/mydatabase\n"
+ "hibernate.connection.username = myuser\n"
+ "hibernate.connection.password = secret\n"
+ "hibernate.c3p0.min_size=5\n"
+ "hibernate.c3p0.max_size=20\n"
+ "hibernate.c3p0.timeout=1800\n"
+ "hibernate.c3p0.max_statement=50\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+
+#: index.docbook:227
+msgid "For use inside an application server, you should almost always configure Hibernate to obtain connections from an application server <literal>Datasource</literal> registered in JNDI. You'll need to set at least one of the following properties:"
+msgstr "Dans le cadre de l'utilisation au sein d'un serveur d'applications, vous devriez quasiment toujours configurer Hibernate pour qu'il obtienne ses connexions de la <literal>DataSource</literal> du serveur d'application enregistrée dans le JNDI. Pour cela vous devrez définir au moins une des propriétés suivantes :"
+
+#: index.docbook:235
+msgid "Hibernate Datasource Properties"
+msgstr "Propriété d'une Datasource Hibernate"
+
+#: index.docbook:248
+msgid "hibernate.connection.datasource"
+msgstr "hibernate.connection.datasource"
+
+#: index.docbook:251
+msgid "datasource JNDI name"
+msgstr "Nom JNDI de la datasource"
+
+#: index.docbook:256
+msgid "hibernate.jndi.url"
+msgstr "hibernate.jndi.url"
+
+#: index.docbook:258
+msgid "<emphasis>URL of the JNDI provider</emphasis> (optional)"
+msgstr "<emphasis>URL du fournisseur JNDI</emphasis> (optionnelle)"
+
+#: index.docbook:264
+msgid "hibernate.jndi.class"
+msgstr "hibernate.jndi.class"
+
+#: index.docbook:266
+msgid "<emphasis>class of the JNDI <literal>InitialContextFactory</literal></emphasis> (optional)"
+msgstr "<emphasis>Classe de l'<literal>InitialContextFactory</literal> du JNDI</emphasis> (optionnelle)"
+
+#: index.docbook:274
+msgid "<emphasis>database user</emphasis> (optional)"
+msgstr "<emphasis>utilisateur de la base de données</emphasis> (optionnelle)"
+
+#: index.docbook:282
+msgid "<emphasis>database user password</emphasis> (optional)"
+msgstr "<emphasis>mot de passe de la base de données</emphasis> (optionnelle)"
+
+#: index.docbook:290
+msgid "Here's an example <literal>hibernate.properties</literal> file for an application server provided JNDI datasource:"
+msgstr "Voici un exemple de fichier <literal>hibernate.properties</literal> pour l'utilisation d'une datasource JNDI fournie par un serveur d'applications :"
+
+#: index.docbook:295
+msgid ""
+ "<![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test\n"
+ "hibernate.transaction.factory_class = \\\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ "hibernate.transaction.manager_lookup_class = \\\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+ "<![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test\n"
+ "hibernate.transaction.factory_class = \\\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ "hibernate.transaction.manager_lookup_class = \\\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+
+#: index.docbook:297
+msgid "JDBC connections obtained from a JNDI datasource will automatically participate in the container-managed transactions of the application server."
+msgstr "Les connexions JDBC obtenues à partir d'une datasource JNDI participeront automatiquement aux transactions gérées par le conteneur du serveur d'applications."
+
+#: index.docbook:302
+msgid "Arbitrary connection properties may be given by prepending \"<literal>hibernate.connection</literal>\" to the property name. For example, you may specify a <literal>charSet</literal> using <literal>hibernate.connection.charSet</literal>."
+msgstr "Des propriétés supplémentaires de connexion peuvent être passées en préfixant le nom de la propriété par \"<literal>hibernate.connnection</literal>\". Par exemple, vous pouvez spécifier un jeu de caractères en utilisant <literal>hibernate.connection.charSet</literal>."
+
+#: index.docbook:308
+msgid "You may define your own plugin strategy for obtaining JDBC connections by implementing the interface <literal>org.hibernate.connection.ConnectionProvider</literal>. You may select a custom implementation by setting <literal>hibernate.connection.provider_class</literal>."
+msgstr "Vous pouvez fournir votre propre stratégie d'obtention des connexions JDBC en implémentant l'interface <literal>org.hibernate.connection.ConnectionProvider</literal>. Vous pouvez sélectionner une implémentation spécifique en positionnant <literal>hibernate.connection.provider_class</literal>."
+
+#: index.docbook:317
+msgid "Optional configuration properties"
+msgstr "Propriétés de configuration optionnelles"
+
+#: index.docbook:319
+msgid "There are a number of other properties that control the behaviour of Hibernate at runtime. All are optional and have reasonable default values."
+msgstr "Il y a un certain nombre d'autres propriétés qui contrôlent le fonctionnement d'Hibernate à l'exécution. Toutes sont optionnelles et ont comme valeurs par défaut des valeurs \"raisonnables\" pour un fonctionnement nominal."
+
+#: index.docbook:324
+msgid "<emphasis>Warning: some of these properties are \"system-level\" only.</emphasis> System-level properties can be set only via <literal>java -Dproperty=value</literal> or <literal>hibernate.properties</literal>. They may <emphasis>not</emphasis> be set by the other techniques described above."
+msgstr "<emphasis>Attention : Certaines de ces propriétés sont uniquement de niveau System.</emphasis> Les propriétés de niveau System ne peuvent être positionnées que via la ligne de commande (<literal>java -Dproperty=value</literal>) ou être définies dans <literal>hibernate.properties</literal>. Elle <emphasis>ne peuvent pas</emphasis> l'être via une des autres techniques décrites ci-dessus."
+
+#: index.docbook:332
+msgid "Hibernate Configuration Properties"
+msgstr "Propriétés de configuration d'Hibernate"
+
+#: index.docbook:345
+msgid "hibernate.dialect"
+msgstr "hibernate.dialect"
+
+#: index.docbook:347
+msgid "The classname of a Hibernate <literal>Dialect</literal> which allows Hibernate to generate SQL optimized for a particular relational database."
+msgstr "Le nom de la classe du <literal>Dialect</literal> Hibernate. qui permet à Hibernate de générer du SQL optimisé pour une base de données relationnelle particulière."
+
+#: index.docbook:351
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>full.classname.of.Dialect</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>nom.complet.de.ma.classe.de.Dialect</literal>"
+
+#: index.docbook:359
+msgid "hibernate.show_sql"
+msgstr "hibernate.show_sql"
+
+#: index.docbook:361
+msgid "Write all SQL statements to console. This is an alternative to setting the log category <literal>org.hibernate.SQL</literal> to <literal>debug</literal>."
+msgstr "Ecrit toutes les requêtes SQL sur la console. Il s'agit d'une alternative au positionnement de la catégorie de log <literal>org.hibernate.SQL</literal> au niveau <literal>debug</literal>."
+
+#: index.docbook:365, index.docbook:377, index.docbook:471, index.docbook:484, index.docbook:497, index.docbook:510, index.docbook:564, index.docbook:591, index.docbook:605, index.docbook:660, index.docbook:888, index.docbook:903, index.docbook:993
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true</literal> | <literal>false</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:373
+msgid "hibernate.format_sql"
+msgstr "hibernate.format_sql"
+
+#: index.docbook:375
+msgid "Pretty print the SQL in the log and console."
+msgstr "Formate et indente le sql dans la console et dans le log"
+
+#: index.docbook:385
+msgid "hibernate.default_schema"
+msgstr "hibernate.default_schema"
+
+#: index.docbook:387
+msgid "Qualify unqualified table names with the given schema/tablespace in generated SQL."
+msgstr "Positionne dans le SQL généré un schéma/tablespace par défaut pour les noms de table ne l'ayant pas surchargé."
+
+#: index.docbook:390
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>SCHEMA_NAME</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>MON_SCHEMA</literal>"
+
+#: index.docbook:398
+msgid "hibernate.default_catalog"
+msgstr "hibernate.default_catalog"
+
+#: index.docbook:400
+msgid "Qualify unqualified table names with the given catalog in generated SQL."
+msgstr "Qualifie les noms de tables non qualifiées avec ce catalogue dans le SQL généré."
+
+#: index.docbook:403
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>CATALOG_NAME</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>CATALOG_NAME</literal>"
+
+#: index.docbook:411
+msgid "hibernate.session_factory_name"
+msgstr "hibernate.session_factory_name"
+
+#: index.docbook:413
+msgid "The <literal>SessionFactory</literal> will be automatically bound to this name in JNDI after it has been created."
+msgstr "La <literal>SessionFactory</literal> sera automatiquement liée à ce nom dans le JNDI après sa création."
+
+#: index.docbook:416, index.docbook:859
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jndi/composite/name</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>jndi/nom/hierarchique</literal>"
+
+#: index.docbook:424
+msgid "hibernate.max_fetch_depth"
+msgstr "hibernate.max_fetch_depth"
+
+#: index.docbook:426
+msgid "Set a maximum \"depth\" for the outer join fetch tree for single-ended associations (one-to-one, many-to-one). A <literal>0</literal> disables default outer join fetching."
+msgstr "Définit la profondeur maximale d'un arbre de chargement par jointures ouvertes pour les associations à cardinalité unitaire (un-à -un, plusieurs-à -un). Un <literal>0</literal> désactive le chargement par jointure ouverte."
+
+#: index.docbook:430
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>0</literal> and <literal>3</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> valeurs recommandées entre <literal>0</literal> et <literal>3</literal>"
+
+#: index.docbook:439
+msgid "hibernate.default_batch_fetch_size"
+msgstr "hibernate.default_batch_fetch_size"
+
+#: index.docbook:441
+msgid "Set a default size for Hibernate batch fetching of associations."
+msgstr "Définit une taille par défaut pour le chargement par lot des associations"
+
+#: index.docbook:443
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values <literal>4</literal>, <literal>8</literal>, <literal>16</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> Valeurs recommandées : <literal>4</literal>, <literal>8</literal>, <literal>16</literal>"
+
+#: index.docbook:452
+msgid "hibernate.default_entity_mode"
+msgstr "hibernate.default_entity_mode"
+
+#: index.docbook:454
+msgid "Set a default mode for entity representation for all sessions opened from this <literal>SessionFactory</literal>"
+msgstr "Définit un mode de représentation par défaut des entités pour toutes les sessions ouvertes depuis cette <literal>SessionFactory</literal>"
+
+#: index.docbook:457
+msgid "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+msgstr "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+
+#: index.docbook:465
+msgid "hibernate.order_updates"
+msgstr "hibernate.order_updates"
+
+#: index.docbook:467
+msgid "Force Hibernate to order SQL updates by the primary key value of the items being updated. This will result in fewer transaction deadlocks in highly concurrent systems."
+msgstr "Force Hibernate à trier les updates SQL par la valeur de la clé primaire des éléments qui sont mis à jour. Cela permet de limiter les deadlocks de transaction dans les systèmes hautement concurents."
+
+#: index.docbook:479
+msgid "hibernate.generate_statistics"
+msgstr "hibernate.generate_statistics"
+
+#: index.docbook:481
+msgid "If enabled, Hibernate will collect statistics useful for performance tuning."
+msgstr "Si activé, Hibernate va collecter des statistiques utiles pour le réglage des performances."
+
+#: index.docbook:492
+msgid "hibernate.use_identifier_rollback"
+msgstr "hibernate.use_identifer_rollback"
+
+#: index.docbook:494
+msgid "If enabled, generated identifier properties will be reset to default values when objects are deleted."
+msgstr "Si activé, les propriétés correspondant à l'identifiant des objets vont être remises aux valeurs par défaut lorsque les objets seront supprimés."
+
+#: index.docbook:505
+msgid "hibernate.use_sql_comments"
+msgstr "hibernate.use_sql_comments"
+
+#: index.docbook:507
+msgid "If turned on, Hibernate will generate comments inside the SQL, for easier debugging, defaults to <literal>false</literal>."
+msgstr "Si activé, Hibernate va générer des commentaires à l'intérieur des requêtes SQL pour faciliter le debogage., par défaut à <literal>false</literal>."
+
+#: index.docbook:521
+msgid "Hibernate JDBC and Connection Properties"
+msgstr "Propriétés Hibernate liées à JDBC et aux connexions"
+
+#: index.docbook:536
+msgid "hibernate.jdbc.fetch_size"
+msgstr "hibernate.jdbc.fetch_size"
+
+#: index.docbook:538
+msgid "A non-zero value determines the JDBC fetch size (calls <literal>Statement.setFetchSize()</literal>)."
+msgstr "Une valeur non nulle détermine la taille de chargement des statements JDBC (appelle <literal>Statement.setFetchSize()</literal>)."
+
+#: index.docbook:545
+msgid "hibernate.jdbc.batch_size"
+msgstr "hibernate.jdbc.batch_size"
+
+#: index.docbook:547
+msgid "A non-zero value enables use of JDBC2 batch updates by Hibernate."
+msgstr "Une valeur non nulle active l'utilisation par Hibernate des mises à jour par batch de JDBC2."
+
+#: index.docbook:549
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>5</literal> and <literal>30</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> les valeurs recommandées entre <literal>5</literal> et <literal>30</literal>"
+
+#: index.docbook:557
+msgid "hibernate.jdbc.batch_versioned_data"
+msgstr "hibernate.jdbc.batch_versioned_data"
+
+#: index.docbook:559
+msgid "Set this property to <literal>true</literal> if your JDBC driver returns correct row counts from <literal>executeBatch()</literal> (it is usually safe to turn this option on). Hibernate will then use batched DML for automatically versioned data. Defaults to <literal>false</literal>."
+msgstr "Paramétrez cette propriété à <literal>true</literal> si votre pilote JDBC retourne des row counts corrects depuis <literal>executeBatch()</literal> (il est souvent approprié d'activer cette option). Hibernate utilisera alors le \"batched DML\" pour versionner automatiquement les données. Par défaut = <literal>false</literal>."
+
+#: index.docbook:572
+msgid "hibernate.jdbc.factory_class"
+msgstr "hibernate.jdbc.factory_class"
+
+#: index.docbook:574
+msgid "Select a custom <literal>Batcher</literal>. Most applications will not need this configuration property."
+msgstr "Sélectionne un <literal>Batcher</literal> personnalisé. La plupart des applications n'auront pas besoin de cette propriété de configuration"
+
+#: index.docbook:577
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.BatcherFactory</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>classname.of.BatcherFactory</literal>"
+
+#: index.docbook:585
+msgid "hibernate.jdbc.use_scrollable_resultset"
+msgstr "hibernate.jdbc.use_scrollable_resultset"
+
+#: index.docbook:587
+msgid "Enables use of JDBC2 scrollable resultsets by Hibernate. This property is only necessary when using user supplied JDBC connections, Hibernate uses connection metadata otherwise."
+msgstr "Active l'utilisation par Hibernate des resultsets scrollables de JDBC2. Cette propriété est seulement nécessaire lorsque l'on utilise une connexion JDBC fournie par l'utilisateur. Autrement, Hibernate utilise les métadonnées de la connexion."
+
+#: index.docbook:599
+msgid "hibernate.jdbc.use_streams_for_binary"
+msgstr "hibernate.jdbc.use_streams_for_binary"
+
+#: index.docbook:601
+msgid "Use streams when writing/reading <literal>binary</literal> or <literal>serializable</literal> types to/from JDBC (system-level property)."
+msgstr "Utilise des flux lorsque l'on écrit/lit des types <literal>binary</literal> ou <literal>serializable</literal> vers et à partir de JDBC (propriété de niveau système)."
+
+#: index.docbook:613
+msgid "hibernate.jdbc.use_get_generated_keys"
+msgstr "hibernate.jdbc.use_get_generated_keys"
+
+#: index.docbook:615
+msgid "Enable use of JDBC3 <literal>PreparedStatement.getGeneratedKeys()</literal> to retrieve natively generated keys after insert. Requires JDBC3+ driver and JRE1.4+, set to false if your driver has problems with the Hibernate identifier generators. By default, tries to determine the driver capabilities using connection metadata."
+msgstr "Active l'utilisation de <literal>PreparedStatement.getGeneratedKeys()</literal> de JDBC3 pour récupérer nativement les clés générées après insertion. Nécessite un pilote JDBC3+, le mettre à false si votre pilote a des problèmes avec les générateurs d'identifiant Hibernate. Par défaut, essaie de déterminer les possibilités du pilote en utilisant les meta données de connexion."
+
+#: index.docbook:621, index.docbook:751, index.docbook:763, index.docbook:777, index.docbook:815
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true|false</literal>"
+msgstr "<emphasis role=\"strong\">eg.</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:629
+msgid "hibernate.connection.provider_class"
+msgstr "hibernate.connection.provider_class"
+
+#: index.docbook:631
+msgid "The classname of a custom <literal>ConnectionProvider</literal> which provides JDBC connections to Hibernate."
+msgstr "Le nom de la classe d'un <literal>ConnectionProvider</literal> personnalisé qui fournit des connexions JDBC à Hibernate"
+
+#: index.docbook:634
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.ConnectionProvider</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>classname.of.ConnectionProvider</literal>"
+
+#: index.docbook:642
+msgid "hibernate.connection.isolation"
+msgstr "hibernate.connection.isolation"
+
+#: index.docbook:644
+msgid "Set the JDBC transaction isolation level. Check <literal>java.sql.Connection</literal> for meaningful values but note that most databases do not support all isolation levels."
+msgstr "Définit le niveau d'isolation des transactions JDBC. Regardez <literal>java.sql.Connection</literal> pour connaître le sens des différentes valeurs mais notez également que la plupart des bases de données ne supportent pas tous les niveaux d'isolation."
+
+#: index.docbook:648
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>1, 2, 4, 8</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>1, 2, 4, 8</literal>"
+
+#: index.docbook:656
+msgid "hibernate.connection.autocommit"
+msgstr "hibernate.connection.autocommit"
+
+#: index.docbook:658
+msgid "Enables autocommit for JDBC pooled connections (not recommended)."
+msgstr "Active le mode de commit automatique (autocommit) pour les connexions JDBC du pool (non recommandé)."
+
+#: index.docbook:668
+msgid "hibernate.connection.release_mode"
+msgstr "hibernate.connection.release_mode"
+
+#: index.docbook:670
+msgid "Specify when Hibernate should release JDBC connections. By default, a JDBC connection is held until the session is explicitly closed or disconnected. For an application server JTA datasource, you should use <literal>after_statement</literal> to aggressively release connections after every JDBC call. For a non-JTA connection, it often makes sense to release the connection at the end of each transaction, by using <literal>after_transaction</literal>. <literal>auto</literal> will choose <literal>after_statement</literal> for the JTA and CMT transaction strategies and <literal>after_transaction</literal> for the JDBC transaction strategy."
+msgstr "Spécifie à quel moment Hibernate doit relacher les connexion JDBC. Par défaut une connexion JDBC est conservée jusqu'à ce que la session soit explicitement fermée ou déconnectée. Pour une source de données JTA d'un serveur d'application, vous devriez utiliser <literal>after_statement</literal> pour libérer les connexions de manière plus agressive après chaque appel JDBC. Pour une connexion non JTA, il est souvent préférable de libérer la connexion à la fin de chaque transaction en utilisant <literal>after_transaction</literal>. <literal>auto</literal> choisira <literal>after_statement</literal> pour des transactions JTA et CMT et <literal>after_transaction</literal> pour des transactions JDBC."
+
+#: index.docbook:681
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>auto</literal> (default) | <literal>on_close</literal> | <literal>after_transaction</literal> | <literal>after_statement</literal>"
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>on_close</literal> (default) | <literal>after_transaction</literal> | <literal>after_statement</literal> | <literal>auto</literal>"
+
+#: index.docbook:686
+msgid "Note that this setting only affects <literal>Session</literal>s returned from <literal>SessionFactory.openSession</literal>. For <literal>Session</literal>s obtained through <literal>SessionFactory.getCurrentSession</literal>, the <literal>CurrentSessionContext</literal> implementation configured for use controls the connection release mode for those <literal>Session</literal>s. See"
+msgstr "hibernate.connection.<emphasis><propertyName></emphasis>"
+
+#: index.docbook:698
+msgid "hibernate.connection.<emphasis><propertyName></emphasis>"
+msgstr "Passe la propriété JDBC<literal>propertyName</literal> à <literal>DriverManager.getConnection()</literal>."
+
+#: index.docbook:700
+msgid "Pass the JDBC property <literal>propertyName</literal> to <literal>DriverManager.getConnection()</literal>."
+msgstr "hibernate.jndi.<emphasis><propertyName></emphasis>"
+
+#: index.docbook:707
+msgid "hibernate.jndi.<emphasis><propertyName></emphasis>"
+msgstr "Passe la propriété <literal>propertyName</literal> à l'<literal>InitialContextFactory</literal> de JNDI."
+
+#: index.docbook:709
+msgid "Pass the property <literal>propertyName</literal> to the JNDI <literal>InitialContextFactory</literal>."
+msgstr "Propriétés du Cache d'Hibernate"
+
+#: index.docbook:719
+msgid "Hibernate Cache Properties"
+msgstr "Nom de la propriété"
+
+#: index.docbook:732
+msgid "hibernate.cache.provider_class"
+msgstr "Le nom de classe d'un <literal>CacheProvider</literal> spécifique."
+
+#: index.docbook:734
+msgid "The classname of a custom <literal>CacheProvider</literal>."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>nom.de.classe.du.CacheProvider</literal>"
+
+#: index.docbook:736
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.CacheProvider</literal>"
+msgstr "hibernate.cache.use_minimal_puts"
+
+#: index.docbook:744
+msgid "hibernate.cache.use_minimal_puts"
+msgstr "Optimise le cache de second niveau en minimisant les écritures, au prix de plus de lectures. Ce paramètre est surtout utile pour les caches en cluster et est activé par défaut dans hibernate3 pour les implémentations de cache en cluster."
+
+#: index.docbook:746
+msgid "Optimize second-level cache operation to minimize writes, at the cost of more frequent reads. This setting is most useful for clustered caches and, in Hibernate3, is enabled by default for clustered cache implementations."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:759
+msgid "hibernate.cache.use_query_cache"
+msgstr "Activer le cache de requête, les requêtes individuelles doivent tout de même être déclarées comme pouvant être mise en cache."
+
+#: index.docbook:761
+msgid "Enable the query cache, individual queries still have to be set cachable."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:771
+msgid "hibernate.cache.use_second_level_cache"
+msgstr "Peut être utilisé pour désactiver complètement le cache de second niveau qui est activé par défaut pour les classes qui spécifient un élément <literal><cache></literal> dans leur mapping."
+
+#: index.docbook:773
+msgid "May be used to completely disable the second level cache, which is enabled by default for classes which specify a <literal><cache></literal> mapping."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:785
+msgid "hibernate.cache.query_cache_factory"
+msgstr "Le nom de classe d'une interface <literal>QueryCacheFactory</literal> , par défaut = built-in <literal>StandardQueryCacheFactory</literal>."
+
+#: index.docbook:787
+msgid "The classname of a custom <literal>QueryCache</literal> interface, defaults to the built-in <literal>StandardQueryCache</literal>."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>nom.de.la.classe.de.QueryCacheFactory</literal>"
+
+#: index.docbook:790
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.QueryCache</literal>"
+msgstr "hibernate.cache.region_prefix"
+
+#: index.docbook:798
+msgid "hibernate.cache.region_prefix"
+msgstr "Un préfixe à utiliser pour le nom des régions du cache de second niveau."
+
+#: index.docbook:800
+msgid "A prefix to use for second-level cache region names."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>prefix</literal>"
+
+#: index.docbook:802
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>prefix</literal>"
+msgstr "hibernate.cache.use_structured_entries"
+
+#: index.docbook:810
+msgid "hibernate.cache.use_structured_entries"
+msgstr "Force Hibernate à stocker les données dans le cache de second niveau dans un format plus adapté à la visualisation par un humain."
+
+#: index.docbook:812
+msgid "Forces Hibernate to store data in the second-level cache in a more human-friendly format."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:826
+msgid "Hibernate Transaction Properties"
+msgstr "Nom de la propriété"
+
+#: index.docbook:839
+msgid "hibernate.transaction.factory_class"
+msgstr "Le nom de classe d'une <literal>TransactionFactory</literal> qui sera utilisée par l'API <literal>Transaction</literal> d'Hibernate (la valeur par défaut est <literal>JDBCTransactionFactory</literal>)."
+
+#: index.docbook:841
+msgid "The classname of a <literal>TransactionFactory</literal> to use with Hibernate <literal>Transaction</literal> API (defaults to <literal>JDBCTransactionFactory</literal>)."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>nom.de.classe.d.une.TransactionFactory</literal>"
+
+#: index.docbook:845
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionFactory</literal>"
+msgstr "jta.UserTransaction"
+
+#: index.docbook:853
+msgid "jta.UserTransaction"
+msgstr "Le nom JNDI utilisé par la <literal>JTATransactionFactory</literal> pour obtenir la <literal>UserTransaction</literal> JTA du serveur d'applications."
+
+#: index.docbook:855
+msgid "A JNDI name used by <literal>JTATransactionFactory</literal> to obtain the JTA <literal>UserTransaction</literal> from the application server."
+msgstr "<emphasis role=\"strong\">eg.</emphasis> <literal>jndi/nom/compose</literal>"
+
+#: index.docbook:867
+msgid "hibernate.transaction.manager_lookup_class"
+msgstr "Le nom de la classe du <literal>TransactionManagerLookup</literal> - requis lorsque le cache de niveau JVM est activé ou lorsque l'on utilise un générateur hilo dans un environnement JTA."
+
+#: index.docbook:869
+msgid "The classname of a <literal>TransactionManagerLookup</literal> - required when JVM-level caching is enabled or when using hilo generator in a JTA environment."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>nom.de.classe.du.TransactionManagerLookup</literal>"
+
+#: index.docbook:873
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionManagerLookup</literal>"
+msgstr "hibernate.transaction.flush_before_completion"
+
+#: index.docbook:881
+msgid "hibernate.transaction.flush_before_completion"
+msgstr "Si activé, la session sera automatiquement vidée durant la phase qui précède la fin de la transaction (before completion). La gestion automatique de contexte fourni par Hibernate est recommandée, voir <xref linkend=\"architecture-current-session\"/>."
+
+#: index.docbook:883
+msgid "If enabled, the session will be automatically flushed during the before completion phase of the transaction. Built-in and automatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:896
+msgid "hibernate.transaction.auto_close_session"
+msgstr "Si activé, la session sera automatiquement fermé pendant la phase qui suit la fin de la transaction (after completion). La gestion automatique de contexte fourni par Hibernate est recommandée, voir"
+
+#: index.docbook:898
+msgid "If enabled, the session will be automatically closed during the after completion phase of the transaction. Built-in and utomatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:914
+msgid "Miscellaneous Properties"
+msgstr "Nom de la propriété"
+
+#: index.docbook:927
+msgid "hibernate.current_session_context_class"
+msgstr "Fournit une stratégie particulière pour contextualiser la <literal>Session</literal> courante. Voir <xref linkend=\"architecture-current-session\"/> pour plus d'informations sur les stratégies fournies."
+
+#: index.docbook:929
+msgid "Supply a (custom) strategy for the scoping of the \"current\" <literal>Session</literal>. See <xref linkend=\"architecture-current-session\"/> for more information about the built-in strategies."
+msgstr "<emphasis role=\"strong\">eg.</emphasis> <literal>jta</literal> | <literal>thread</literal> | <literal>custom.Class</literal>"
+
+#: index.docbook:934
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jta</literal> | <literal>thread</literal> | <literal>managed</literal> | <literal>custom.Class</literal>"
+msgstr "hibernate.query.factory_class"
+
+#: index.docbook:943
+msgid "hibernate.query.factory_class"
+msgstr "Choisi l'implémentation du parseur de requête"
+
+#: index.docbook:945
+msgid "Chooses the HQL parser implementation."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> ou <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>"
+
+#: index.docbook:947
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>"
+msgstr "hibernate.query.substitutions"
+
+#: index.docbook:956
+msgid "hibernate.query.substitutions"
+msgstr "Lien entre les tokens de requêtes Hibernate et les tokens SQL (les tokens peuvent être des fonctions ou des noms littéraux par exemple)."
+
+#: index.docbook:958
+msgid "Mapping from tokens in Hibernate queries to SQL tokens (tokens might be function or literal names, for example)."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>"
+
+#: index.docbook:961
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>"
+msgstr "hibernate.hbm2ddl.auto"
+
+#: index.docbook:969
+msgid "hibernate.hbm2ddl.auto"
+msgstr "Valide ou exporte automatiquement le schéma DDL vers la base de données lorsque la <literal>SessionFactory</literal> est créée. La valeur <literal>create-drop</literal> permet de supprimer le schéma de base de données lorsque la <literal>SessionFactory</literal> est fermée explicitement."
+
+#: index.docbook:971
+msgid "Automatically validate or export schema DDL to the database when the <literal>SessionFactory</literal> is created. With <literal>create-drop</literal>, the database schema will be dropped when the <literal>SessionFactory</literal> is closed explicitly."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>validate</literal> | <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+
+#: index.docbook:977
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>validate</literal> | <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+msgstr "hibernate.cglib.use_reflection_optimizer"
+
+#: index.docbook:986
+msgid "hibernate.cglib.use_reflection_optimizer"
+msgstr "Active l'utilisation de CGLIB à la place de la réflexion à l'exécution (Propriété de niveau système). La réflexion peut parfois être utile pour résoudre des problèmes. Notez qu'Hibernate a tout de même toujours besoin de CGLIB même si l'optimiseur est désactivé. Cette optimisation ne peut être définie que dans le fichier <literal>hibernate.cfg.xml</literal>."
+
+#: index.docbook:988
+msgid "Enables use of CGLIB instead of runtime reflection (System-level property). Reflection can sometimes be useful when troubleshooting, note that Hibernate always requires CGLIB even if you turn off the optimizer. You can not set this property in <literal>hibernate.cfg.xml</literal>."
+msgstr "<emphasis role=\"strong\">ex.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:1004
+msgid "SQL Dialects"
+msgstr "Vous devriez toujours positionner la propriété <literal>hibernate.dialect</literal> à la sous-classe de <literal>org.hibernate.dialect.Dialect</literal> appropriée à votre base de données. Si vous spécifiez un dialecte, Hibernate utilisera des valeurs adaptées pour certaines autres propriétés listées ci-dessus, vous évitant l'effort de le faire à la main."
+
+#: index.docbook:1006
+msgid "You should always set the <literal>hibernate.dialect</literal> property to the correct <literal>org.hibernate.dialect.Dialect</literal> subclass for your database. If you specify a dialect, Hibernate will use sensible defaults for some of the other properties listed above, saving you the effort of specifying them manually."
+msgstr "Dialectes SQL d'Hibernate (<literal>hibernate.dialect</literal>)"
+
+#: index.docbook:1014
+msgid "Hibernate SQL Dialects (<literal>hibernate.dialect</literal>)"
+msgstr "SGBD"
+
+#: index.docbook:1022
+msgid "RDBMS"
+msgstr "Dialecte"
+
+#: index.docbook:1023
+msgid "Dialect"
+msgstr "<entry>DB2</entry>"
+
+#: index.docbook:1028
+msgid "<entry>DB2</entry>"
+msgstr "org.hibernate.dialect.DB2Dialect"
+
+#: index.docbook:1028
+msgid "org.hibernate.dialect.DB2Dialect"
+msgstr "DB2 AS/400"
+
+#: index.docbook:1031
+msgid "DB2 AS/400"
+msgstr "org.hibernate.dialect.DB2400Dialect"
+
+#: index.docbook:1031
+msgid "org.hibernate.dialect.DB2400Dialect"
+msgstr "DB2 OS390"
+
+#: index.docbook:1034
+msgid "DB2 OS390"
+msgstr "org.hibernate.dialect.DB2390Dialect"
+
+#: index.docbook:1034
+msgid "org.hibernate.dialect.DB2390Dialect"
+msgstr "PostgreSQL"
+
+#: index.docbook:1037
+msgid "PostgreSQL"
+msgstr "org.hibernate.dialect.PostgreSQLDialect"
+
+#: index.docbook:1037
+msgid "org.hibernate.dialect.PostgreSQLDialect"
+msgstr "MySQL"
+
+#: index.docbook:1040
+msgid "MySQL"
+msgstr "org.hibernate.dialect.MySQLDialect"
+
+#: index.docbook:1040
+msgid "org.hibernate.dialect.MySQLDialect"
+msgstr "MySQL with InnoDB"
+
+#: index.docbook:1043
+msgid "MySQL with InnoDB"
+msgstr "org.hibernate.dialect.MySQLInnoDBDialect"
+
+#: index.docbook:1043
+msgid "org.hibernate.dialect.MySQLInnoDBDialect"
+msgstr "MySQL with MyISAM"
+
+#: index.docbook:1046
+msgid "MySQL with MyISAM"
+msgstr "org.hibernate.dialect.MySQLMyISAMDialect"
+
+#: index.docbook:1046
+msgid "org.hibernate.dialect.MySQLMyISAMDialect"
+msgstr "Oracle (any version)"
+
+#: index.docbook:1049
+msgid "Oracle (any version)"
+msgstr "org.hibernate.dialect.OracleDialect"
+
+#: index.docbook:1049
+msgid "org.hibernate.dialect.OracleDialect"
+msgstr "Oracle 9i/10g"
+
+#: index.docbook:1052
+msgid "Oracle 9i/10g"
+msgstr "org.hibernate.dialect.Oracle9Dialect"
+
+#: index.docbook:1052
+msgid "org.hibernate.dialect.Oracle9Dialect"
+msgstr "Sybase"
+
+#: index.docbook:1055
+msgid "Sybase"
+msgstr "org.hibernate.dialect.SybaseDialect"
+
+#: index.docbook:1055
+msgid "org.hibernate.dialect.SybaseDialect"
+msgstr "Sybase Anywhere"
+
+#: index.docbook:1058
+msgid "Sybase Anywhere"
+msgstr "org.hibernate.dialect.SybaseAnywhereDialect"
+
+#: index.docbook:1058
+msgid "org.hibernate.dialect.SybaseAnywhereDialect"
+msgstr "Microsoft SQL Server"
+
+#: index.docbook:1061
+msgid "Microsoft SQL Server"
+msgstr "org.hibernate.dialect.SQLServerDialect"
+
+#: index.docbook:1061
+msgid "org.hibernate.dialect.SQLServerDialect"
+msgstr "SAP DB"
+
+#: index.docbook:1064
+msgid "SAP DB"
+msgstr "org.hibernate.dialect.SAPDBDialect"
+
+#: index.docbook:1064
+msgid "org.hibernate.dialect.SAPDBDialect"
+msgstr "Informix"
+
+#: index.docbook:1067
+msgid "Informix"
+msgstr "org.hibernate.dialect.InformixDialect"
+
+#: index.docbook:1067
+msgid "org.hibernate.dialect.InformixDialect"
+msgstr "HypersonicSQL"
+
+#: index.docbook:1070
+msgid "HypersonicSQL"
+msgstr "org.hibernate.dialect.HSQLDialect"
+
+#: index.docbook:1070
+msgid "org.hibernate.dialect.HSQLDialect"
+msgstr "Ingres"
+
+#: index.docbook:1073
+msgid "Ingres"
+msgstr "org.hibernate.dialect.IngresDialect"
+
+#: index.docbook:1073
+msgid "org.hibernate.dialect.IngresDialect"
+msgstr "Progress"
+
+#: index.docbook:1076
+msgid "Progress"
+msgstr "org.hibernate.dialect.ProgressDialect"
+
+#: index.docbook:1076
+msgid "org.hibernate.dialect.ProgressDialect"
+msgstr "Mckoi SQL"
+
+#: index.docbook:1079
+msgid "Mckoi SQL"
+msgstr "org.hibernate.dialect.MckoiDialect"
+
+#: index.docbook:1079
+msgid "org.hibernate.dialect.MckoiDialect"
+msgstr "Interbase"
+
+#: index.docbook:1082
+msgid "Interbase"
+msgstr "org.hibernate.dialect.InterbaseDialect"
+
+#: index.docbook:1082
+msgid "org.hibernate.dialect.InterbaseDialect"
+msgstr "Pointbase"
+
+#: index.docbook:1085
+msgid "Pointbase"
+msgstr "org.hibernate.dialect.PointbaseDialect"
+
+#: index.docbook:1085
+msgid "org.hibernate.dialect.PointbaseDialect"
+msgstr "FrontBase"
+
+#: index.docbook:1088
+msgid "FrontBase"
+msgstr "org.hibernate.dialect.FrontbaseDialect"
+
+#: index.docbook:1088
+msgid "org.hibernate.dialect.FrontbaseDialect"
+msgstr "Firebird"
+
+#: index.docbook:1091
+msgid "Firebird"
+msgstr "org.hibernate.dialect.FirebirdDialect"
+
+#: index.docbook:1091
+msgid "org.hibernate.dialect.FirebirdDialect"
+msgstr "Chargement par Jointure Ouverte"
+
+#: index.docbook:1100
+msgid "Outer Join Fetching"
+msgstr "Si votre base de données supporte les outer joins de type ANSI, Oracle ou Sybase, <emphasis>le chargement par jointure ouverte</emphasis> devrait améliorer les performances en limitant le nombre d'aller-retour avec la base de données (la base de données effectuant donc potentiellement plus de travail). Le chargement par jointure ouverte permet à un graphe entier d'objets connectés par une relation plusieurs-à -un, un-à -plusieurs ou un-à -un d'être chargé en un seul <literal>SELECT</literal> SQL."
+
+#: index.docbook:1102
+msgid "If your database supports ANSI, Oracle or Sybase style outer joins, <emphasis>outer join fetching</emphasis> will often increase performance by limiting the number of round trips to and from the database (at the cost of possibly more work performed by the database itself). Outer join fetching allows a whole graph of objects connected by many-to-one, one-to-many, many-to-many and one-to-one associations to be retrieved in a single SQL <literal>SELECT</literal>."
+msgstr "Le chargement par jointure ouverte peut être désactiver <emphasis>globalement</emphasis> en mettant la propriété <literal>hibernate.max_fetch_depth</literal> à <literal>0</literal>. Une valeur de <literal>1</literal> ou plus active le chargement par jointure ouverte pour les associatiosn un-à -un et plusieurs-à -un qui ont été mappée avec <literal>fetch=\"join\"</literal>."
+
+#: index.docbook:1111
+msgid "Outer join fetching may be disabled <emphasis>globally</emphasis> by setting the property <literal>hibernate.max_fetch_depth</literal> to <literal>0</literal>. A setting of <literal>1</literal> or higher enables outer join fetching for one-to-one and many-to-one associations which have been mapped with <literal>fetch=\"join\"</literal>."
+msgstr "Reportez vous à <xref linkend=\"performance-fetching\"/> pour plus d'information."
+
+#: index.docbook:1119
+msgid "See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "Flux binaires"
+
+#: index.docbook:1126
+msgid "Binary Streams"
+msgstr "Oracle limite la taille d'un tableau de <literal>byte</literal> qui peuvent être passées à et vers son pilote JDBC. Si vous souhaitez utiliser des instances larges de type <literal>binary</literal> ou <literal>serializable</literal>, vous devez activer la propriété <literal>hibernate.jdbc.use_streams_for_binary</literal>. <emphasis>C'est une fonctionalité de niveau système uniquement.</emphasis>"
+
+#: index.docbook:1128
+msgid "Oracle limits the size of <literal>byte</literal> arrays that may be passed to/from its JDBC driver. If you wish to use large instances of <literal>binary</literal> or <literal>serializable</literal> type, you should enable <literal>hibernate.jdbc.use_streams_for_binary</literal>. <emphasis>This is a system-level setting only.</emphasis>"
+msgstr "Cache de second niveau et cache de requêtes"
+
+#: index.docbook:1139
+msgid "Second-level and query cache"
+msgstr "Les propriétés préfixées par <literal>hibernate.cache</literal> vous permettent d'utiliser un système de cache de second niveau. Ce cache peut avoir une portée dans le processus ou même être utilisable dans un système distribué. Référez vous au chapitre <xref linkend=\"performance-cache\"/> pour plus de détails."
+
+#: index.docbook:1141
+msgid "The properties prefixed by <literal>hibernate.cache</literal> allow you to use a process or cluster scoped second-level cache system with Hibernate. See the <xref linkend=\"performance-cache\"/> for more details."
+msgstr "Substitution dans le langage de requêtage"
+
+#: index.docbook:1151
+msgid "Query Language Substitution"
+msgstr "Vous pouvez définir de nouveaux tokens dans les requêtes Hibernate en utilisant la propriété <literal>hibernate.query.substitutions</literal>. Par exemple :"
+
+#: index.docbook:1153
+msgid "You may define new Hibernate query tokens using <literal>hibernate.query.substitutions</literal>. For example:"
+msgstr "hibernate.query.substitutions vrai=1, faux=0"
+
+#: index.docbook:1158
+msgid "hibernate.query.substitutions true=1, false=0"
+msgstr "remplacerait les tokens <literal>vrai</literal> et <literal>faux</literal> par des entiers dans le SQL généré."
+
+#: index.docbook:1160
+msgid "would cause the tokens <literal>true</literal> and <literal>false</literal> to be translated to integer literals in the generated SQL."
+msgstr "hibernate.query.substitutions toLowercase=LOWER"
+
+#: index.docbook:1165
+msgid "hibernate.query.substitutions toLowercase=LOWER"
+msgstr "permettrait de renommer la fonction SQL <literal>LOWER</literal> en <literal>toLowercase</literal>"
+
+#: index.docbook:1167
+msgid "would allow you to rename the SQL <literal>LOWER</literal> function."
+msgstr "Statistiques Hibernate"
+
+#: index.docbook:1174
+msgid "Hibernate statistics"
+msgstr "Si vous activez <literal>hibernate.generate_statistics</literal>, Hibernate va fournir un certains nombre de métriques utiles pour régler les performances d'une application qui tourne via <literal>SessionFactory.getStatistics()</literal>. Hibernate peut aussi être configuré pour exposer ces statistiques via JMX. Lisez les Javadoc des interfaces dans le package <literal>org.hibernate.stats</literal> pour plus d'informations."
+
+#: index.docbook:1176
+msgid "If you enable <literal>hibernate.generate_statistics</literal>, Hibernate will expose a number of metrics that are useful when tuning a running system via <literal>SessionFactory.getStatistics()</literal>. Hibernate can even be configured to expose these statistics via JMX. Read the Javadoc of the interfaces in <literal>org.hibernate.stats</literal> for more information."
+msgstr "Tracer"
+
+#: index.docbook:1188
+msgid "Logging"
+msgstr "Hibernate trace divers évènements en utilisant Apache commons-logging."
+
+#: index.docbook:1190
+msgid "Hibernate logs various events using Apache commons-logging."
+msgstr "Le service commons-logging délèguera directement à Apache Log4j (si vous incluez <literal>log4j.jar</literal> dans votre classpath) ou le système de trace du JDK 1.4 (si vous tournez sous le JDK 1.4 et supérieur). Vous pouvez télécharger Log4j à partir de <literal>http://jakarta.apache.org</literal>. Pour utiliser Log4j, vous devrez placer dans votre classpath un fichier <literal>log4j.properties</literal>. Un exemple de fichier est distribué avec Hibernate dans le répertoire <literal>src/</literal>."
+
+#: index.docbook:1194
+msgid "The commons-logging service will direct output to either Apache Log4j (if you include <literal>log4j.jar</literal> in your classpath) or JDK1.4 logging (if running under JDK1.4 or above). You may download Log4j from <literal>http://jakarta.apache.org</literal>. To use Log4j you will need to place a <literal>log4j.properties</literal> file in your classpath, an example properties file is distributed with Hibernate in the <literal>src/</literal> directory."
+msgstr "Nous vous recommandons fortement de vous familiariser avec les messages des traces d'Hibernate. Beaucoup de soins a été apporté pour donner le plus de détails possible sans les rendre illisibles. C'est un outil essentiel en cas de soucis. Les catégories de trace les plus intéressantes sont les suivantes :"
+
+#: index.docbook:1204
+msgid "We strongly recommend that you familiarize yourself with Hibernate's log messages. A lot of work has been put into making the Hibernate log as detailed as possible, without making it unreadable. It is an essential troubleshooting device. The most interesting log categories are the following:"
+msgstr "Catégories de trace d'Hibernate"
+
+#: index.docbook:1213
+msgid "Hibernate Log Categories"
+msgstr "Catégorie"
+
+#: index.docbook:1219
+msgid "Category"
+msgstr "Fonction"
+
+#: index.docbook:1220
+msgid "Function"
+msgstr "org.hibernate.SQL"
+
+#: index.docbook:1225
+msgid "org.hibernate.SQL"
+msgstr "Trace toutes les requêts SQL de type DML (gestion des données) qui sont exécutées"
+
+#: index.docbook:1226
+msgid "Log all SQL DML statements as they are executed"
+msgstr "org.hibernate.type"
+
+#: index.docbook:1229
+msgid "org.hibernate.type"
+msgstr "Trace tous les paramètres JDBC"
+
+#: index.docbook:1230
+msgid "Log all JDBC parameters"
+msgstr "org.hibernate.tool.hbm2ddl"
+
+#: index.docbook:1233
+msgid "org.hibernate.tool.hbm2ddl"
+msgstr "Trace toutes les requêts SQL de type DDL (gestion de la structure de la base) qui sont exécutées"
+
+#: index.docbook:1234
+msgid "Log all SQL DDL statements as they are executed"
+msgstr "org.hibernate.pretty"
+
+#: index.docbook:1237
+msgid "org.hibernate.pretty"
+msgstr "Trace l'état de toutes les entités (20 entités maximum) qui sont associées avec la session hibernate au moment du flush"
+
+#: index.docbook:1238
+msgid "Log the state of all entities (max 20 entities) associated with the session at flush time"
+msgstr "org.hibernate.cache"
+
+#: index.docbook:1244
+msgid "org.hibernate.cache"
+msgstr "Trace toute l'activité du cache de second niveau"
+
+#: index.docbook:1245
+msgid "Log all second-level cache activity"
+msgstr "org.hibernate.transaction"
+
+#: index.docbook:1248
+msgid "org.hibernate.transaction"
+msgstr "Trace toute l'activité relative aux transactions"
+
+#: index.docbook:1249
+msgid "Log transaction related activity"
+msgstr "org.hibernate.jdbc"
+
+#: index.docbook:1252
+msgid "org.hibernate.jdbc"
+msgstr "Trace toute acquisition de ressource JDBC"
+
+#: index.docbook:1253
+msgid "Log all JDBC resource acquisition"
+msgstr "org.hibernate.hql.ast.AST"
+
+#: index.docbook:1256
+msgid "org.hibernate.hql.ast.AST"
+msgstr "Trace l'arbre syntaxique des requêtes HQL et SQL durant l'analyse syntaxique des requêtes"
+
+#: index.docbook:1257
+msgid "Log HQL and SQL ASTs during query parsing"
+msgstr "org.hibernate.secure"
+
+#: index.docbook:1262
+msgid "org.hibernate.secure"
+msgstr "Trace toutes les demandes d'autorisation JAAS"
+
+#: index.docbook:1263
+msgid "Log all JAAS authorization requests"
+msgstr "org.hibernate"
+
+#: index.docbook:1266
+msgid "org.hibernate"
+msgstr "Trace tout (beaucoupe d'informations, mais très utile pour résoudre les problèmes)."
+
+#: index.docbook:1267
+msgid "Log everything (a lot of information, but very useful for troubleshooting)"
+msgstr "Lorsque vous développez des applications avec Hibernate, vous devriez quasiment toujours travailler avec le niveau <literal>debug</literal> activé pour la catégorie <literal>org.hibernate.SQL</literal>, ou sinon avec la propriété <literal>hibernate.show_sql</literal> activée."
+
+#: index.docbook:1276
+msgid "When developing applications with Hibernate, you should almost always work with <literal>debug</literal> enabled for the category <literal>org.hibernate.SQL</literal>, or, alternatively, the property <literal>hibernate.show_sql</literal> enabled."
+msgstr "Implémenter une <literal>NamingStrategy</literal>"
+
+#: index.docbook:1286
+msgid "Implementing a <literal>NamingStrategy</literal>"
+msgstr "L'interface <literal>org.hibernate.cfg.NamingStrategy</literal> vous permet de spécifier une \"stratégie de nommage\" des objets et éléments de la base de données."
+
+#: index.docbook:1288
+msgid "The interface <literal>org.hibernate.cfg.NamingStrategy</literal> allows you to specify a \"naming standard\" for database objects and schema elements."
+msgstr "Vous pouvez fournir des règles pour automatiquement générer les identifiants de base de données à partir des identifiants Java, ou transformer une colonne ou table \"logique\" donnée dans le fichier de mapping en une colonne ou table \"physique\". Cette fonctionnalité aide à réduire la verbosité de documents de mapping, en éliminant le bruit répétitif (les préfixes <literal>TBL_</literal> par exemple). La stratégie par défaut utilisée par Hibernate est minimale."
+
+#: index.docbook:1293
+msgid "You may provide rules for automatically generating database identifiers from Java identifiers or for processing \"logical\" column and table names given in the mapping file into \"physical\" table and column names. This feature helps reduce the verbosity of the mapping document, eliminating repetitive noise (<literal>TBL_</literal> prefixes, for example). The default strategy used by Hibernate is quite minimal."
+msgstr "Vous pouvez définir une stratégie différente en appelant <literal>Configuration.setNamingStrategy()</literal> avant d'ajouter des mappings :"
+
+#: index.docbook:1302
+msgid "You may specify a different strategy by calling <literal>Configuration.setNamingStrategy()</literal> before adding mappings:"
+msgstr ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)\n"
+ " .addFile(\"Item.hbm.xml\")\n"
+ " .addFile(\"Bid.hbm.xml\")\n"
+ " .buildSessionFactory();]]>"
+
+#: index.docbook:1307
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)\n"
+ " .addFile(\"Item.hbm.xml\")\n"
+ " .addFile(\"Bid.hbm.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr "<literal>net.sf.hibernate.cfg.ImprovedNamingStrategy</literal> est une stratégie fournie qui peut être utile comme point de départ de quelques applications."
+
+#: index.docbook:1309
+msgid "<literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> is a built-in strategy that might be a useful starting point for some applications."
+msgstr "Fichier de configuration XML"
+
+#: index.docbook:1317
+msgid "XML configuration file"
+msgstr "Une approche alternative est de spécifier toute la configuration dans un fichier nommé <literal>hibernate.cfg.xml</literal>. Ce fichier peut être utilisé à la place du fichier <literal>hibernate.properties</literal>, voire même peut servir à surcharger les propriétés si les deux fichiers sont présents."
+
+#: index.docbook:1319
+msgid "An alternative approach to configuration is to specify a full configuration in a file named <literal>hibernate.cfg.xml</literal>. This file can be used as a replacement for the <literal>hibernate.properties</literal> file or, if both are present, to override properties."
+msgstr "Le fichier de configuration XML doit par défaut se placer à la racine du <literal>CLASSPATH</literal>. En voici un exemple :"
+
+#: index.docbook:1326
+msgid "The XML configuration file is by default expected to be in the root o your <literal>CLASSPATH</literal>. Here is an example:"
+msgstr ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <!-- a SessionFactory instance listed as /jndi/name -->\n"
+ " <session-factory\n"
+ " name=\"java:hibernate/SessionFactory\">\n"
+ "\n"
+ " <!-- properties -->\n"
+ " <property name=\"connection.datasource\">java:/comp/env/jdbc/MyDB</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.MySQLDialect</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"transaction.factory_class\">\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ " </property>\n"
+ " <property name=\"jta.UserTransaction\">java:comp/UserTransaction</property>\n"
+ "\n"
+ " <!-- mapping files -->\n"
+ " <mapping resource=\"org/hibernate/auction/Item.hbm.xml\"/>\n"
+ " <mapping resource=\"org/hibernate/auction/Bid.hbm.xml\"/>\n"
+ "\n"
+ " <!-- cache settings -->\n"
+ " <class-cache class=\"org.hibernate.auction.Item\" usage=\"read-write\"/>\n"
+ " <class-cache class=\"org.hibernate.auction.Bid\" usage=\"read-only\"/>\n"
+ " <collection-cache collection=\"org.hibernate.auction.Item.bids\" usage=\"read-write\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:1331
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <!-- a SessionFactory instance listed as /jndi/name -->\n"
+ " <session-factory\n"
+ " name=\"java:hibernate/SessionFactory\">\n"
+ "\n"
+ " <!-- properties -->\n"
+ " <property name=\"connection.datasource\">java:/comp/env/jdbc/MyDB</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.MySQLDialect</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"transaction.factory_class\">\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ " </property>\n"
+ " <property name=\"jta.UserTransaction\">java:comp/UserTransaction</property>\n"
+ "\n"
+ " <!-- mapping files -->\n"
+ " <mapping resource=\"org/hibernate/auction/Item.hbm.xml\"/>\n"
+ " <mapping resource=\"org/hibernate/auction/Bid.hbm.xml\"/>\n"
+ "\n"
+ " <!-- cache settings -->\n"
+ " <class-cache class=\"org.hibernate.auction.Item\" usage=\"read-write\"/>\n"
+ " <class-cache class=\"org.hibernate.auction.Bid\" usage=\"read-only\"/>\n"
+ " <collection-cache collection=\"org.hibernate.auction.Item.bids\" usage=\"read-write\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr "Commme vous pouvez le voir, l'avantage de cette approche est l'externalisation des noms des fichiers de mapping de la configuration. Le fichier <literal>hibernate.cfg.xml</literal> est également plus pratique quand on commence à régler le cache d'Hibernate. Notez que vous pouvez choisir entre utiliser <literal>hibernate.properties</literal> ou <literal>hibernate.cfg.xml</literal>, les deux sont équivalents, sauf en ce qui concerne les bénéfices de l'utilisation de la syntaxe XML mentionnés ci-dessus."
+
+#: index.docbook:1333
+msgid "As you can see, the advantage of this approach is the externalization of the mapping file names to configuration. The <literal>hibernate.cfg.xml</literal> is also more convenient once you have to tune the Hibernate cache. Note that is your choice to use either <literal>hibernate.properties</literal> or <literal>hibernate.cfg.xml</literal>, both are equivalent, except for the above mentioned benefits of using the XML syntax."
+msgstr "Avec la configuration XML, démarrer Hibernate devient donc aussi simple que ceci :"
+
+#: index.docbook:1342
+msgid "With the XML configuration, starting Hibernate is then as simple as"
+msgstr "<![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]>"
+
+#: index.docbook:1346
+msgid "<![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]>"
+msgstr "Intégration à un serveur d'application J2EE"
+
+#: index.docbook:1348
+msgid "You can pick a different XML configuration file using"
+msgstr "Hibernate possède les points suivants d'intégration à l'infrastructure J2EE :"
+
+#: index.docbook:1352
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .configure(\"catdb.cfg.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr "<emphasis>Source de données gérée par le conteneur</emphasis> : Hibernate peut utiliser des connexions JDBC gérées par le conteneur et fournie par l'intermédiaire de JNDI. Souvent, un <literal>TransactionManager</literal> compatible JTA et un <literal>ResourceManager</literal> s'occupent de la gestion des transactions (CMT). Ils sont particulièrement prévus pour pouvoir gérer des transactions distribuées sur plusieurs sources de données. Vous pouvez bien sûr également définir vos limites de transaction dans votre programme (BMT) ou vous pouvez sinon aussi utiliser l'API optionnelle <literal>Transaction</literal> d'Hibernate qui vous garantira la portabilité de votre code entre plusieurs serveurs d'application."
+
+#: index.docbook:1357
+msgid "J2EE Application Server integration"
+msgstr "<emphasis>Association JNDI automatique</emphasis>: Hibernate peut associer sa <literal>SessionFactory</literal> à JNDI après le démarrage."
+
+#: index.docbook:1359
+msgid "Hibernate has the following integration points for J2EE infrastructure:"
+msgstr "<emphasis>Association de la Session à JTA:</emphasis> La <literal>Session</literal> Hibernate peut être associée automatiquement à une transaction JTA si vous utilisez les EJBs. Vous avez juste à récupérer la <literal>SessionFactory</literal> depuis JNDI et à récupérer la <literal>Session</literal> courante. Hibernate s'occupe de vider et fermer la <literal>Session</literal> lorsque le transaction JTA se termine. La démarcation des transactions se fait de manière déclarative dans les descripteurs de déploiement."
+
+#: index.docbook:1365
+msgid "<emphasis>Container-managed datasources</emphasis>: Hibernate can use JDBC connections managed by the container and provided through JNDI. Usually, a JTA compatible <literal>TransactionManager</literal> and a <literal>ResourceManager</literal> take care of transaction management (CMT), esp. distributed transaction handling across several datasources. You may of course also demarcate transaction boundaries programmatically (BMT) or you might want to use the optional Hibernate <literal>Transaction</literal> API for this to keep your code portable."
+msgstr "<emphasis>Déploiement JMX :</emphasis>Si vous avez un serveur d'application compatible JMX (JBoss AS par exemple), vous pouvez choisir de déployer Hibernate en temps que MBean géré par le serveur. Cela vous évite de coder la ligne de démarrage qui permet de construire la <literal>SessionFactory</literal> depuis la <literal>Configuration</literal>. Le conteneur va démarrer votre <literal>HibernateService</literal>, et va idéalement s'occuper des dépendances entre les services (la source de données doit être disponible avant qu'Hibernate ne démarre, etc)."
+
+#: index.docbook:1380
+msgid "<emphasis>Automatic JNDI binding</emphasis>: Hibernate can bind its <literal>SessionFactory</literal> to JNDI after startup."
+msgstr "En fonction de votre environnement, vous devrez peut être mettre l'option de configuration <literal>hibernate.connection.aggressive_release</literal> à vrai si le serveur d'application affiche des exceptions de type \"connection containment\"."
+
+#: index.docbook:1389
+msgid "<emphasis>JTA Session binding:</emphasis> The Hibernate <literal>Session</literal> may be automatically bound to the scope of JTA transactions. Simply lookup the <literal>SessionFactory</literal> from JNDI and get the current <literal>Session</literal>. Let Hibernate take care of flushing and closing the <literal>Session</literal> when your JTA transaction completes. Transaction demarcation is either declarative (CMT) or programmatic (BMT/UserTransaction)."
+msgstr "Configuration de la stratégie transactionnelle"
+
+#: index.docbook:1402
+msgid "<emphasis>JMX deployment:</emphasis> If you have a JMX capable application server (e.g. JBoss AS), you can chose to deploy Hibernate as a managed MBean. This saves you the one line startup code to build your <literal>SessionFactory</literal> from a <literal>Configuration</literal>. The container will startup your <literal>HibernateService</literal>, and ideally also take care of service dependencies (Datasource has to be available before Hibernate starts, etc)."
+msgstr "L'API de la <literal>Session</literal> Hibernate est indépendante de tout système de démarcation des transactions qui peut être présent dans votre architecture. Si vous laissez Hibernate utiliser l'API JDBC directement via un pool de connexion, vous devrez commencer et terminer vos transactions en utilisant l'API JDBC. Si votre application tourne à l'intérieur d'un serveur d'application J2EE, vous voudrez peut être utiliser les transactions gérées par les beans (BMT) et appeller l'API JTA et <literal>UserTransaction</literal> lorsque cela est nécessaire."
+
+#: index.docbook:1413
+msgid "Depending on your environment, you might have to set the configuration option <literal>hibernate.connection.aggressive_release</literal> to true if your application server shows \"connection containment\" exceptions."
+msgstr "Pour conserver votre code portable entre ces deux environnements (et d'autres éventuels) nous vous recommandons d'utiliser l'API optionnelle <literal>Transaction</literal> d'Hibernate, qui va encapsuler et masquer le système de transaction sous-jacent. Pour cela, vous devez préciser une classe de fabrique d'instances de <literal>Transaction</literal> en positionnant la propriété <literal>hibernate.transaction.factory_class</literal>."
+
+#: index.docbook:1420
+msgid "Transaction strategy configuration"
+msgstr "Il existe trois choix standards (fournis) :"
+
+#: index.docbook:1422
+msgid "The Hibernate <literal>Session</literal> API is independent of any transaction demarcation system in your architecture. If you let Hibernate use JDBC directly, through a connection pool, you may begin and end your transactions by calling the JDBC API. If you run in a J2EE application server, you might want to use bean-managed transactions and call the JTA API and <literal>UserTransaction</literal> when needed."
+msgstr "net.sf.hibernate.transaction.JDBCTransactionFactory"
+
+#: index.docbook:1430
+msgid "To keep your code portable between these two (and other) environments we recommend the optional Hibernate <literal>Transaction</literal> API, which wraps and hides the underlying system. You have to specify a factory class for <literal>Transaction</literal> instances by setting the Hibernate configuration property <literal>hibernate.transaction.factory_class</literal>."
+msgstr "délègue aux transactions de la base de données (JDBC). Valeur par défaut."
+
+#: index.docbook:1437
+msgid "There are three standard (built-in) choices:"
+msgstr "org.hibernate.transaction.JTATransactionFactory"
+
+#: index.docbook:1443
+msgid "org.hibernate.transaction.JDBCTransactionFactory"
+msgstr "délègue à CMT si une transaction existante est sous ce contexte (ex: méthode d'un EJB session), sinon une nouvelle transaction est entamée et une transaction gérée par le bean est utilisée."
+
+#: index.docbook:1445
+msgid "delegates to database (JDBC) transactions (default)"
+msgstr "org.hibernate.transaction.CMTTransactionFactory"
+
+#: index.docbook:1449
+msgid "org.hibernate.transaction.JTATransactionFactory"
+msgstr "délègue à aux transactions JTA gérées par le conteneur"
+
+#: index.docbook:1451
+msgid "delegates to container-managed transaction if an existing transaction is underway in this context (e.g. EJB session bean method), otherwise a new transaction is started and bean-managed transaction are used."
+msgstr "Vous pouvez également définir votre propre stratégie transactionnelle (pour un service de transaction CORBA par exemple)."
+
+#: index.docbook:1459
+msgid "org.hibernate.transaction.CMTTransactionFactory"
+msgstr "Certaines fonctionnalités d'Hibernate (i.e. le cache de second niveau, l'association automatique des Session à JTA, etc.) nécessitent l'accès au <literal>TransactionManager</literal> JTA dans un environnement \"managé\". Dans un serveur d'application, vous devez indiquer comment Hibernate peut obtenir une référence vers le <literal>TransactionManager</literal>, car J2EE ne fournit pas un seul mécanisme standard."
+
+#: index.docbook:1461
+msgid "delegates to container-managed JTA transactions"
+msgstr "TransactionManagers JTA"
+
+#: index.docbook:1466
+msgid "You may also define your own transaction strategies (for a CORBA transaction service, for example)."
+msgstr "Fabrique de Transaction"
+
+#: index.docbook:1471
+msgid "Some features in Hibernate (i.e. the second level cache, Contextual Sessions with JTA, etc.) require access to the JTA <literal>TransactionManager</literal> in a managed environment. In an application server you have to specify how Hibernate should obtain a reference to the <literal>TransactionManager</literal>, since J2EE does not standardize a single mechanism:"
+msgstr "Serveur d'application"
+
+#: index.docbook:1479
+msgid "JTA TransactionManagers"
+msgstr "org.hibernate.transaction.JBossTransactionManagerLookup"
+
+#: index.docbook:1485
+msgid "Transaction Factory"
+msgstr "JBoss"
+
+#: index.docbook:1486
+msgid "Application Server"
+msgstr "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+
+#: index.docbook:1491
+msgid "org.hibernate.transaction.JBossTransactionManagerLookup"
+msgstr "Weblogic"
+
+#: index.docbook:1492
+msgid "JBoss"
+msgstr "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+
+#: index.docbook:1495
+msgid "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+msgstr "WebSphere"
+
+#: index.docbook:1496
+msgid "Weblogic"
+msgstr "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+
+#: index.docbook:1499
+msgid "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+msgstr "WebSphere 6"
+
+#: index.docbook:1500
+msgid "WebSphere"
+msgstr "org.hibernate.transaction.OrionTransactionManagerLookup"
+
+#: index.docbook:1503
+msgid "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+msgstr "Orion"
+
+#: index.docbook:1504
+msgid "WebSphere 6"
+msgstr "org.hibernate.transaction.ResinTransactionManagerLookup"
+
+#: index.docbook:1507
+msgid "org.hibernate.transaction.OrionTransactionManagerLookup"
+msgstr "Resin"
+
+#: index.docbook:1508
+msgid "Orion"
+msgstr "org.hibernate.transaction.JOTMTransactionManagerLookup"
+
+#: index.docbook:1511
+msgid "org.hibernate.transaction.ResinTransactionManagerLookup"
+msgstr "JOTM"
+
+#: index.docbook:1512
+msgid "Resin"
+msgstr "org.hibernate.transaction.JOnASTransactionManagerLookup"
+
+#: index.docbook:1515
+msgid "org.hibernate.transaction.JOTMTransactionManagerLookup"
+msgstr "JOnAS"
+
+#: index.docbook:1516
+msgid "JOTM"
+msgstr "org.hibernate.transaction.JRun4TransactionManagerLookup"
+
+#: index.docbook:1519
+msgid "org.hibernate.transaction.JOnASTransactionManagerLookup"
+msgstr "JRun4"
+
+#: index.docbook:1520
+msgid "JOnAS"
+msgstr "org.hibernate.transaction.BESTransactionManagerLookup"
+
+#: index.docbook:1523
+msgid "org.hibernate.transaction.JRun4TransactionManagerLookup"
+msgstr "Borland ES"
+
+#: index.docbook:1524
+msgid "JRun4"
+msgstr "<literal>SessionFactory</literal> associée au JNDI"
+
+#: index.docbook:1527
+msgid "org.hibernate.transaction.BESTransactionManagerLookup"
+msgstr "Une <literal>SessionFactory</literal> Hibernate associée au JNDI peut simplifier l'accès à la fabrique et donc la création de nouvelles <literal>Session</literal>s. Notez que cela n'est pas lié avec les <literal>Datasource</literal> associées au JNDI, elles utilisent juste le même registre."
+
+#: index.docbook:1528
+msgid "Borland ES"
+msgstr "Si vous désirez associer la <literal>SessionFactory</literal> à un nom JNDI, spécifiez un nom (ex. <literal>java:hibernate/SessionFactory</literal>) en utilisant la propriété <literal>hibernate.session_factory_name</literal>. Si cette propriété est omise, la <literal>SessionFactory</literal> ne sera pas associée au JNDI (c'est particulièrement pratique dans les environnements ayant une implémentation de JNDI en lecture seule, comme c'est le cas pour Tomcat)."
+
+#: index.docbook:1537
+msgid "JNDI-bound <literal>SessionFactory</literal>"
+msgstr "Lorsqu'il associe la <literal>SessionFactory</literal> au JNDI, Hibernate utilisera les valeurs de <literal>hibernate.jndi.url</literal>, <literal>hibernate.jndi.class</literal> pour instancier un contexte d'initialisation. S'ils ne sont pas spécifiés, l'<literal>InitialContext</literal> par défaut sera utilisé."
+
+#: index.docbook:1539
+msgid "A JNDI bound Hibernate <literal>SessionFactory</literal> can simplify the lookup of the factory and the creation of new <literal>Session</literal>s. Note that this is not related to a JNDI bound <literal>Datasource</literal>, both simply use the same registry!"
+msgstr "Hibernate va automatiquement placer la <literal>SessionFactory</literal> dans JNDI après avoir appelé <literal>cfg.buildSessionFactory()</literal>. Cela signifie que vous devez avoir cet appel dans un code de démarrage (ou dans une classe utilitaire) dans votre application sauf si vous utilisez le déploiement JMX avec le service <literal>HibernateService</literal> présenté plus tard dans ce document."
+
+#: index.docbook:1546
+msgid "If you wish to have the <literal>SessionFactory</literal> bound to a JNDI namespace, specify a name (eg. <literal>java:hibernate/SessionFactory</literal>) using the property <literal>hibernate.session_factory_name</literal>. If this property is omitted, the <literal>SessionFactory</literal> will not be bound to JNDI. (This is especially useful in environments with a read-only JNDI default implementation, e.g. Tomcat.)"
+msgstr "Si vous utilisez <literal>SessionFactory</literal> JNDI, un EJB ou n'importe quelle autre classe peut obtenir la <literal>SessionFactory</literal> en utilisant un lookup JNDI."
+
+#: index.docbook:1554
+msgid "When binding the <literal>SessionFactory</literal> to JNDI, Hibernate will use the values of <literal>hibernate.jndi.url</literal>, <literal>hibernate.jndi.class</literal> to instantiate an initial context. If they are not specified, the default <literal>InitialContext</literal> will be used."
+msgstr "Nous recommandons que vous liiez la <literal>SessionFactory</literal> à JNDI dans les environnements managés et que vous utilisiez un singleton <literal>static</literal> si ce n'est pas le cas. Pour isoler votre application de ces détails, nous vous recommandons aussi de masquer le code de lookup actuel pour une <literal>SessionFactory</literal> dans une classe helper, comme <literal>HibernateUtil.getSessionFactory()</literal>. Notez qu'une telle classe est aussi un moyen efficace de démarrer Hibernate—voir chapitre 1."
+
+#: index.docbook:1561
+msgid "Hibernate will automatically place the <literal>SessionFactory</literal> in JNDI after you call <literal>cfg.buildSessionFactory()</literal>. This means you will at least have this call in some startup code (or utility class) in your application, unless you use JMX deployment with the <literal>HibernateService</literal> (discussed later)."
+msgstr "Association automatique de la Session à JTA"
+
+#: index.docbook:1568
+msgid "If you use a JNDI <literal>SessionFactory</literal>, an EJB or any other class may obtain the <literal>SessionFactory</literal> using a JNDI lookup."
+msgstr "Le moyen le plus simple de gérer les <literal>Session</literal>s et transactions est la gestion automatique de session \"courante\" offerte par Hibernate. Voir détail à <xref linkend=\"architecture-current-session\"/>current sessions. En utilisant le contexte de session <literal>\"jta\"</literal> session context, s'il n'y a pas de <literal>Session</literal> associée à la transaction JTA courante, une session sera démarrée et associée à la transaction JTA courante la première fois que vous appelez <literal>sessionFactory.getCurrentSession()</literal>. Les <literal>Session</literal>s obtenue via <literal>getCurrentSession()</literal> dans une contexte <literal>\"jta\"</literal> seront automatiquement flushées avant la validation de la transaction, fermées une fois la transaction complétée, et libéreront les connexions JDBC de manière aggressive après chaque statement. Ceci permet aux <literal>Session</literal>s d'être gérées par le cycle de vie de !
la transaction JTA à la quelle est sont associées, laissant le code de l'utilisateur propre de ce type de gestion. Votre code peut soit utiliser JTA de manière programmatique via <literal>UserTransaction</literal>, ou (ce qui est recommandé pour la portabilité du code) utiliser l'API <literal>Transaction</literal> API pour marquer les limites. Si vous exécutez sous un conteneur EJB, la démarcation déclarative des transactions avec CMT est recommandée."
+
+#: index.docbook:1573
+msgid "We recommend that you bind the <literal>SessionFactory</literal> to JNDI in a managed environment and use a <literal>static</literal> singleton otherwise. To shield your application code from these details, we also recommend to hide the actual lookup code for a <literal>SessionFactory</literal> in a helper class, such as <literal>HibernateUtil.getSessionFactory()</literal>. Note that such a class is also a convenient way to startup Hibernate—see chapter 1."
+msgstr "Déploiement JMX"
+
+#: index.docbook:1585
+msgid "Current Session context management with JTA"
+msgstr "La ligne <literal>cfg.buildSessionFactory()</literal> doit toujours être exécutée quelque part pour avoir une <literal>SessionFactory</literal> dans JNDI. Vous pouvez faire cela dans un bloc d'initialisation <literal>static</literal> (comme celui qui se trouve dans la classe <literal>HibernateUtil</literal>) ou vous pouvez déployer Hibernate en temps que <emphasis>service managé</emphasis>."
+
+#: index.docbook:1587
+msgid "The easiest way to handle <literal>Session</literal>s and transactions is Hibernates automatic \"current\" <literal>Session</literal> management. See the discussion of <xref linkend=\"architecture-current-session\"/>current sessions. Using the <literal>\"jta\"</literal> session context, if there is no Hibernate <literal>Session</literal> associated with the current JTA transaction, one will be started and associated with that JTA transaction the first time you call <literal>sessionFactory.getCurrentSession()</literal>. The <literal>Session</literal>s retrieved via <literal>getCurrentSession()</literal> in <literal>\"jta\"</literal> context will be set to automatically flush before the transaction completes, close after the transaction completes, and aggressively release JDBC connections after each statement. This allows the <literal>Session</literal>s to be managed by the life cycle of the JTA transaction to which it is associated, keeping user code clean of such man!
agement concerns. Your code can either use JTA programmatically through <literal>UserTransaction</literal>, or (recommended for portable code) use the Hibernate <literal>Transaction</literal> API to set transaction boundaries. If you run in an EJB container, declarative transaction demarcation with CMT is preferred."
+msgstr "Hibernate est distribué avec <literal>org.hibernate.jmx.HibernateService</literal> pour le déploiement sur un serveur d'application avec le support de JMX comme JBoss AS. Le déploiement et la configuration sont spécifiques à chaque vendeur. Voici un fichier <literal>jboss-service.xml</literal> d'exemple pour JBoss 4.0.x:"
+
+#: index.docbook:1610
+msgid "JMX deployment"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<server>\n"
+ "\n"
+ "<mbean code=\"org.hibernate.jmx.HibernateService\"\n"
+ " name=\"jboss.jca:service=HibernateFactory,name=HibernateFactory\">\n"
+ "\n"
+ " <!-- Required services -->\n"
+ " <depends>jboss.jca:service=RARDeployer</depends>\n"
+ " <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>\n"
+ "\n"
+ " <!-- Bind the Hibernate service to JNDI -->\n"
+ " <attribute name=\"JndiName\">java:/hibernate/SessionFactory</attribute>\n"
+ "\n"
+ " <!-- Datasource settings -->\n"
+ " <attribute name=\"Datasource\">java:HsqlDS</attribute>\n"
+ " <attribute name=\"Dialect\">org.hibernate.dialect.HSQLDialect</attribute>\n"
+ "\n"
+ " <!-- Transaction integration -->\n"
+ " <attribute name=\"TransactionStrategy\">\n"
+ " org.hibernate.transaction.JTATransactionFactory</attribute>\n"
+ " <attribute name=\"TransactionManagerLookupStrategy\">\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup</attribute>\n"
+ " <attribute name=\"FlushBeforeCompletionEnabled\">true</attribute>\n"
+ " <attribute name=\"AutoCloseSessionEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Fetching options -->\n"
+ " <attribute name=\"MaximumFetchDepth\">5</attribute>\n"
+ "\n"
+ " <!-- Second-level caching -->\n"
+ " <attribute name=\"SecondLevelCacheEnabled\">true</attribute>\n"
+ " <attribute name=\"CacheProviderClass\">org.hibernate.cache.EhCacheProvider</attribute>\n"
+ " <attribute name=\"QueryCacheEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Logging -->\n"
+ " <attribute name=\"ShowSqlEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <attribute name=\"MapResources\">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>\n"
+ "\n"
+ "</mbean>\n"
+ "\n"
+ "</server>]]>"
+
+#: index.docbook:1612
+msgid "The line <literal>cfg.buildSessionFactory()</literal> still has to be executed somewhere to get a <literal>SessionFactory</literal> into JNDI. You can do this either in a <literal>static</literal> initializer block (like the one in <literal>HibernateUtil</literal>) or you deploy Hibernate as a <emphasis>managed service</emphasis>."
+msgstr "Ce fichier est déployé dans un répertoire <literal>META-INF</literal> et est packagé dans un fichier JAR avec l'extension <literal>.sar</literal> (service archive). Vous devez également packager Hibernate, les librairies tierces requises, vos classes persistantes compilées et vos fichiers de mapping dans la même archive. Vos beans entreprise (souvent des EJBs session) peuvent rester dans leur propre fichier JAR mais vous pouvez inclure ce fichier JAR dans le jar principal du service pour avoir une seule unité déployable à chaud. Vous pouvez consulter la documentation de JBoss AS pour plus d'information sur les services JMX et le déploiement des EJBs."
+
+#: index.docbook:1620
+msgid "Hibernate is distributed with <literal>org.hibernate.jmx.HibernateService</literal> for deployment on an application server with JMX capabilities, such as JBoss AS. The actual deployment and configuration is vendor specific. Here is an example <literal>jboss-service.xml</literal> for JBoss 4.0.x:"
+msgstr ""
+
+#: index.docbook:1627
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<server>\n"
+ "\n"
+ "<mbean code=\"org.hibernate.jmx.HibernateService\"\n"
+ " name=\"jboss.jca:service=HibernateFactory,name=HibernateFactory\">\n"
+ "\n"
+ " <!-- Required services -->\n"
+ " <depends>jboss.jca:service=RARDeployer</depends>\n"
+ " <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>\n"
+ "\n"
+ " <!-- Bind the Hibernate service to JNDI -->\n"
+ " <attribute name=\"JndiName\">java:/hibernate/SessionFactory</attribute>\n"
+ "\n"
+ " <!-- Datasource settings -->\n"
+ " <attribute name=\"Datasource\">java:HsqlDS</attribute>\n"
+ " <attribute name=\"Dialect\">org.hibernate.dialect.HSQLDialect</attribute>\n"
+ "\n"
+ " <!-- Transaction integration -->\n"
+ " <attribute name=\"TransactionStrategy\">\n"
+ " org.hibernate.transaction.JTATransactionFactory</attribute>\n"
+ " <attribute name=\"TransactionManagerLookupStrategy\">\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup</attribute>\n"
+ " <attribute name=\"FlushBeforeCompletionEnabled\">true</attribute>\n"
+ " <attribute name=\"AutoCloseSessionEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Fetching options -->\n"
+ " <attribute name=\"MaximumFetchDepth\">5</attribute>\n"
+ "\n"
+ " <!-- Second-level caching -->\n"
+ " <attribute name=\"SecondLevelCacheEnabled\">true</attribute>\n"
+ " <attribute name=\"CacheProviderClass\">org.hibernate.cache.EhCacheProvider</attribute>\n"
+ " <attribute name=\"QueryCacheEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Logging -->\n"
+ " <attribute name=\"ShowSqlEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <attribute name=\"MapResources\">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>\n"
+ "\n"
+ "</mbean>\n"
+ "\n"
+ "</server>]]>"
+msgstr ""
+
+#: index.docbook:1629
+msgid "This file is deployed in a directory called <literal>META-INF</literal> and packaged in a JAR file with the extension <literal>.sar</literal> (service archive). You also need to package Hibernate, its required third-party libraries, your compiled persistent classes, as well as your mapping files in the same archive. Your enterprise beans (usually session beans) may be kept in their own JAR file, but you may include this EJB JAR file in the main service archive to get a single (hot-)deployable unit. Consult the JBoss AS documentation for more information about JMX service and EJB deployment."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/events.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/events.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/events.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,358 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Interceptors and events"
+msgstr "Les intercepteurs et les événements"
+
+#: index.docbook:7
+msgid "It is often useful for the application to react to certain events that occur inside Hibernate. This allows implementation of certain kinds of generic functionality, and extension of Hibernate functionality."
+msgstr "Il est souvent utile pour l'application de réagir à certains événements qui surviennent dans Hibernate. Cela autorise l'implémentation de certaines sortes de fonctionnalités génériques, et d'extensions de fonctionnalités d'Hibernate."
+
+#: index.docbook:14
+msgid "Interceptors"
+msgstr "Intercepteurs"
+
+#: index.docbook:16
+msgid "The <literal>Interceptor</literal> interface provides callbacks from the session to the application allowing the application to inspect and/or manipulate properties of a persistent object before it is saved, updated, deleted or loaded. One possible use for this is to track auditing information. For example, the following <literal>Interceptor</literal> automatically sets the <literal>createTimestamp</literal> when an <literal>Auditable</literal> is created and updates the <literal>lastUpdateTimestamp</literal> property when an <literal>Auditable</literal> is updated."
+msgstr "L'interface <literal>Interceptor</literal> fournit des \"callbacks\" de la session vers l'application et permettent à l'application de consulter et/ou de manipuler des propriétés d'un objet persistant avant qu'il soit sauvegardé, mis à jour, supprimé ou chargé. Une utilisation possible de cette fonctionnalité est de tracer l'accès à l'information. Par exemple, l'<literal>Interceptor</literal> suivant positionne <literal>createTimestamp</literal> quand un <literal>Auditable</literal> est créé et met à jour la propriété <literal>lastUpdateTimestamp</literal> quand un <literal>Auditable</literal> est mis à jour."
+
+#: index.docbook:27
+msgid "You may either implement <literal>Interceptor</literal> directly or (better) extend <literal>EmptyInterceptor</literal>."
+msgstr "Vous pouvez soit implémenter <literal>Interceptor</literal> directement ou (mieux) étendre <literal>EmptyInterceptor</literal>."
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[package org.hibernate.test;\n"
+ "\n"
+ "import java.io.Serializable;\n"
+ "import java.util.Date;\n"
+ "import java.util.Iterator;\n"
+ "\n"
+ "import org.hibernate.EmptyInterceptor;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.type.Type;\n"
+ "\n"
+ "public class AuditInterceptor extends EmptyInterceptor {\n"
+ "\n"
+ " private int updates;\n"
+ " private int creates;\n"
+ " private int loads;\n"
+ "\n"
+ " public void onDelete(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " // do nothing\n"
+ " }\n"
+ "\n"
+ " public boolean onFlushDirty(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] currentState,\n"
+ " Object[] previousState,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " updates++;\n"
+ " for ( int i=0; i < propertyNames.length; i++ ) {\n"
+ " if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " currentState[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onLoad(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " loads++;\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onSave(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " creates++;\n"
+ " for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " state[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public void afterTransactionCompletion(Transaction tx) {\n"
+ " if ( tx.wasCommitted() ) {\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);\n"
+ " }\n"
+ " updates=0;\n"
+ " creates=0;\n"
+ " loads=0;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package org.hibernate.test;\n"
+ "\n"
+ "import java.io.Serializable;\n"
+ "import java.util.Date;\n"
+ "import java.util.Iterator;\n"
+ "\n"
+ "import org.hibernate.EmptyInterceptor;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.type.Type;\n"
+ "\n"
+ "public class AuditInterceptor extends EmptyInterceptor {\n"
+ "\n"
+ " private int updates;\n"
+ " private int creates;\n"
+ " private int loads;\n"
+ "\n"
+ " public void onDelete(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " // ne fait rien\n"
+ " }\n"
+ "\n"
+ " public boolean onFlushDirty(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] currentState,\n"
+ " Object[] previousState,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " updates++;\n"
+ " for ( int i=0; i < propertyNames.length; i++ ) {\n"
+ " if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " currentState[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onLoad(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " loads++;\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onSave(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " creates++;\n"
+ " for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " state[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public void postFlush(Iterator entities) {\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates);\n"
+ " }\n"
+ "\n"
+ " public void afterTransactionCompletion(Transaction tx) {\n"
+ " if ( tx.wasCommitted() ) {\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);\n"
+ " }\n"
+ " updates=0;\n"
+ " creates=0;\n"
+ " loads=0;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:34
+msgid "Interceptors come in two flavors: <literal>Session</literal>-scoped and <literal>SessionFactory</literal>-scoped."
+msgstr "L'intercepteur doit être spécifié quand une session est créée."
+
+#: index.docbook:39
+msgid "A <literal>Session</literal>-scoped interceptor is specified when a session is opened using one of the overloaded SessionFactory.openSession() methods accepting an <literal>Interceptor</literal>."
+msgstr "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+
+#: index.docbook:45
+msgid "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+msgstr "Vous pouvez aussi mettre un intercepteur au niveau global, en utilisant l'objet <literal>Configuration</literal>. Dans ce cas, l'intercepteur doit être \"threadsafe\"."
+
+#: index.docbook:47
+msgid "A <literal>SessionFactory</literal>-scoped interceptor is registered with the <literal>Configuration</literal> object prior to building the <literal>SessionFactory</literal>. In this case, the supplied interceptor will be applied to all sessions opened from that <literal>SessionFactory</literal>; this is true unless a session is opened explicitly specifying the interceptor to use. <literal>SessionFactory</literal>-scoped interceptors must be thread safe, taking care to not store session-specific state since multiple sessions will use this interceptor (potentially) concurrently."
+msgstr "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
+
+#: index.docbook:56
+msgid "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
+msgstr "Système d'événements"
+
+#: index.docbook:61
+msgid "Event system"
+msgstr "Si vous devez réagir à des événements particuliers dans votre couche de persistance, vous pouvez aussi utiliser l'architecture d'<emphasis>événements</emphasis> d'Hibernate3. Le système d'événements peut être utilisé en supplément ou en remplacement des interceptors."
+
+#: index.docbook:63
+msgid "If you have to react to particular events in your persistence layer, you may also use the Hibernate3 <emphasis>event</emphasis> architecture. The event system can be used in addition or as a replacement for interceptors."
+msgstr "Essentiellement toutes les méthodes de l'interface <literal>Session</literal> sont corrélées à un événement. Vous avez un <literal>LoadEvent</literal>, un <literal>FlushEvent</literal>, etc (consultez la DTD du fichier de configuration XML ou le paquet <literal>org.hibernate.event</literal> pour avoir la liste complète des types d'événement définis). Quand une requête est faite à partir d'une de ces méthodes, la <literal>Session</literal> Hibernate génère un événement approprié et le passe au listener configuré pour ce type. Par défaut, ces listeners implémentent le même traitement dans lequel ces méthodes aboutissent toujours. Cependant, vous êtes libre d'implémenter une version personnalisée d'une de ces interfaces de listener (c'est-à -dire, le <literal>LoadEvent</literal> est traité par l'implémentation de l'interface <literal>LoadEventListener</literal> déclarée), dans quel cas leur implémentation devrait être responsable du trai!
tement des requêtes <literal>load()</literal> faites par la <literal>Session</literal>."
+
+#: index.docbook:69
+msgid "Essentially all of the methods of the <literal>Session</literal> interface correlate to an event. You have a <literal>LoadEvent</literal>, a <literal>FlushEvent</literal>, etc (consult the XML configuration-file DTD or the <literal>org.hibernate.event</literal> package for the full list of defined event types). When a request is made of one of these methods, the Hibernate <literal>Session</literal> generates an appropriate event and passes it to the configured event listeners for that type. Out-of-the-box, these listeners implement the same processing in which those methods always resulted. However, you are free to implement a customization of one of the listener interfaces (i.e., the <literal>LoadEvent</literal> is processed by the registered implemenation of the <literal>LoadEventListener</literal> interface), in which case their implementation would be responsible for processing any <literal>load()</literal> requests made of the <literal>Session</literal>."
+msgstr "Les listeners devraient effectivement être considérés comme des singletons ; dans le sens où ils sont partagés entre des requêtes, et donc ne devraient pas sauvegarder des états de variables d'instance."
+
+#: index.docbook:84
+msgid "The listeners should be considered effectively singletons; meaning, they are shared between requests, and thus should not save any state as instance variables."
+msgstr "Un listener personnalisé devrait implémenter l'interface appropriée pour l'événement qu'il veut traiter et/ou étendre une des classes de base (ou même l'événement prêt à l'emploi utilisé par Hibernate comme ceux déclarés non-finaux à cette intention). Les listeners personnalisés peuvent être soit inscrits par programmation à travers l'objet <literal>Configuration</literal>, ou spécifiés la configuration XML d'Hibernate (la configuration déclarative à travers le fichier de propriétés n'est pas supportée). Voici un exemple de listener personnalisé pour l'événement de chargement :"
+
+#: index.docbook:89
+msgid "A custom listener should implement the appropriate interface for the event it wants to process and/or extend one of the convenience base classes (or even the default event listeners used by Hibernate out-of-the-box as these are declared non-final for this purpose). Custom listeners can either be registered programmatically through the <literal>Configuration</literal> object, or specified in the Hibernate configuration XML (declarative configuration through the properties file is not supported). Here's an example of a custom load event listener:"
+msgstr ""
+ "<![CDATA[public class MyLoadListener implements LoadEventListener {\n"
+ " // C'est une simple méthode définie par l'interface LoadEventListener\n"
+ " public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)\n"
+ " throws HibernateException {\n"
+ " if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {\n"
+ " throw MySecurityException(\"Unauthorized access\");\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:99
+msgid ""
+ "<![CDATA[public class MyLoadListener implements LoadEventListener {\n"
+ " // this is the single method defined by the LoadEventListener interface\n"
+ " public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)\n"
+ " throws HibernateException {\n"
+ " if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {\n"
+ " throw MySecurityException(\"Unauthorized access\");\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr "Vous avez aussi besoin d'une entrée de configuration disant à Hibernate d'utiliser ce listener en plus du listener par défaut :"
+
+#: index.docbook:101
+msgid "You also need a configuration entry telling Hibernate to use the listener in addition to the default listener:"
+msgstr ""
+ "<![CDATA[<hibernate-configuration>\n"
+ " <session-factory>\n"
+ " ...\n"
+ " <event type=\"load\">\n"
+ " <listener class=\"com.eg.MyLoadListener\"/>\n"
+ " <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>\n"
+ " </event>\n"
+ " </session-factory>\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:106
+msgid ""
+ "<![CDATA[<hibernate-configuration>\n"
+ " <session-factory>\n"
+ " ...\n"
+ " <event type=\"load\">\n"
+ " <listener class=\"com.eg.MyLoadListener\"/>\n"
+ " <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>\n"
+ " </event>\n"
+ " </session-factory>\n"
+ "</hibernate-configuration>]]>"
+msgstr "Vous pouvez aussi l'inscrire par programmation :"
+
+#: index.docbook:108
+msgid "Instead, you may register it programmatically:"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration();\n"
+ "LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };\n"
+ "cfg.EventListeners().setLoadEventListeners(stack);]]>"
+
+#: index.docbook:112
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration();\n"
+ "LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };\n"
+ "cfg.EventListeners().setLoadEventListeners(stack);]]>"
+msgstr "Les listeners inscrits déclarativement ne peuvent pas partager d'instances. Si le même nom de classe est utilisée dans plusieurs éléments <literal><listener/></literal>, chaque référence sera une instance distincte de cette classe. Si vous avez besoin de la faculté de partager des instances de listener entre plusieurs types de listener, vous devez utiliser l'approche d'inscription par programmation."
+
+#: index.docbook:114
+msgid "Listeners registered declaratively cannot share instances. If the same class name is used in multiple <literal><listener/></literal> elements, each reference will result in a separate instance of that class. If you need the capability to share listener instances between listener types you must use the programmatic registration approach."
+msgstr "Pourquoi implémenter une interface et définir le type spécifique durant la configuration ? Une implémentation de listener pourrait implémenter plusieurs interfaces de listener d'événements. Avoir en plus le type défini durant l'inscription rend plus facile l'activation ou la désactivation pendant la configuration."
+
+#: index.docbook:122
+msgid "Why implement an interface and define the specific type during configuration? Well, a listener implementation could implement multiple event listener interfaces. Having the type additionally defined during registration makes it easier to turn custom listeners on or off during configuration."
+msgstr "Sécurité déclarative d'Hibernate"
+
+#: index.docbook:132
+msgid "Hibernate declarative security"
+msgstr "Généralement, la sécurité déclarative dans les applications Hibernate est gérée dans la couche de session. Maintenant, Hibernate3 permet à certaines actions d'être approuvées via JACC, et autorisées via JAAS. Cette fonctionnalité optionnelle est construite au dessus de l'architecture d'événements."
+
+#: index.docbook:133
+msgid "Usually, declarative security in Hibernate applications is managed in a session facade layer. Now, Hibernate3 allows certain actions to be permissioned via JACC, and authorized via JAAS. This is optional functionality built on top of the event architecture."
+msgstr "D'abord, vous devez configurer les listeners d'événements appropriés pour permettre l'utilisation d'autorisations JAAS."
+
+#: index.docbook:139
+msgid "First, you must configure the appropriate event listeners, to enable the use of JAAS authorization."
+msgstr ""
+ "<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>\n"
+ "<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>\n"
+ "<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>\n"
+ "<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>\n"
+ "<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>\n"
+ "<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>\n"
+ "<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
+msgstr "Notez que <literal><listener type=\"...\" class=\"...\"/></literal> est juste un raccourci pour <literal><event type=\"...\"><listener class=\"...\"/></event></literal> quand il y a exactement un listener pour un type d'événement particulier."
+
+#: index.docbook:146
+msgid "Note that <literal><listener type=\"...\" class=\"...\"/></literal> is just a shorthand for <literal><event type=\"...\"><listener class=\"...\"/></event></literal> when there is exactly one listener for a particular event type."
+msgstr "Ensuite, toujours dans <literal>hibernate.cfg.xml</literal>, lier les permissions aux rôles :"
+
+#: index.docbook:152
+msgid "Next, still in <literal>hibernate.cfg.xml</literal>, bind the permissions to roles:"
+msgstr ""
+ "<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>\n"
+ "<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>\n"
+ "<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
+msgstr "Les noms de rôle sont les rôles compris par votre fournisseur JAAC."
+
+#: index.docbook:158
+msgid "The role names are the roles understood by your JACC provider."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/example_mappings.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/example_mappings.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/example_mappings.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1162 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Example: Various Mappings"
+msgstr "Exemple : quelques mappings"
+
+#: index.docbook:22
+msgid "This chapters shows off some more complex association mappings."
+msgstr "Ce chapitre montre quelques mappings plus complexes."
+
+#: index.docbook:27
+msgid "Employer/Employee"
+msgstr "Employeur/Employé (Employer/Employee)"
+
+#: index.docbook:29
+msgid "The following model of the relationship between <literal>Employer</literal> and <literal>Employee</literal> uses an actual entity class (<literal>Employment</literal>) to represent the association. This is done because there might be more than one period of employment for the same two parties. Components are used to model monetary values and employee names."
+msgstr "Le modèle suivant de relation entre <literal>Employer</literal> et <literal>Employee</literal> utilise une vraie classe entité (<literal>Employment</literal>) pour représenter l'association. On a fait cela parce qu'il peut y avoir plus d'une période d'emploi pour les deux mêmes parties. Des composants sont utilisés pour modéliser les valeurs monétaires et les noms des employés."
+
+#: index.docbook:46
+msgid "Heres a possible mapping document:"
+msgstr "Voici un document de mapping possible :"
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " \n"
+ " <class name=\"Employer\" table=\"employers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employer_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employment\" table=\"employment_periods\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employment_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"startDate\" column=\"start_date\"/>\n"
+ " <property name=\"endDate\" column=\"end_date\"/>\n"
+ "\n"
+ " <component name=\"hourlyRate\" class=\"MonetaryAmount\">\n"
+ " <property name=\"amount\">\n"
+ " <column name=\"hourly_rate\" sql-type=\"NUMERIC(12, 2)\"/>\n"
+ " </property>\n"
+ " <property name=\"currency\" length=\"12\"/>\n"
+ " </component>\n"
+ "\n"
+ " <many-to-one name=\"employer\" column=\"employer_id\" not-null=\"true\"/>\n"
+ " <many-to-one name=\"employee\" column=\"employee_id\" not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employee\" table=\"employees\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employee_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"taxfileNumber\"/>\n"
+ " <component name=\"name\" class=\"Name\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </component>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Employer\" table=\"employers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employer_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employment\" table=\"employment_periods\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employment_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"startDate\" column=\"start_date\"/>\n"
+ " <property name=\"endDate\" column=\"end_date\"/>\n"
+ "\n"
+ " <component name=\"hourlyRate\" class=\"MonetaryAmount\">\n"
+ " <property name=\"amount\">\n"
+ " <column name=\"hourly_rate\" sql-type=\"NUMERIC(12, 2)\"/>\n"
+ " </property>\n"
+ " <property name=\"currency\" length=\"12\"/>\n"
+ " </component>\n"
+ "\n"
+ " <many-to-one name=\"employer\" column=\"employer_id\" not-null=\"true\"/>\n"
+ " <many-to-one name=\"employee\" column=\"employee_id\" not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employee\" table=\"employees\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employee_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"taxfileNumber\"/>\n"
+ " <component name=\"name\" class=\"Name\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </component>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:52
+msgid "And heres the table schema generated by <literal>SchemaExport</literal>."
+msgstr "Et voici le schéma des tables générées par <literal>SchemaExport</literal>."
+
+#: index.docbook:56
+msgid ""
+ "<![CDATA[create table employers (\n"
+ " id BIGINT not null, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employment_periods (\n"
+ " id BIGINT not null,\n"
+ " hourly_rate NUMERIC(12, 2),\n"
+ " currency VARCHAR(12), \n"
+ " employee_id BIGINT not null, \n"
+ " employer_id BIGINT not null, \n"
+ " end_date TIMESTAMP, \n"
+ " start_date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employees (\n"
+ " id BIGINT not null, \n"
+ " firstName VARCHAR(255), \n"
+ " initial CHAR(1), \n"
+ " lastName VARCHAR(255), \n"
+ " taxfileNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK0 foreign key (employer_id) references employers\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK1 foreign key (employee_id) references employees\n"
+ "create sequence employee_id_seq\n"
+ "create sequence employment_id_seq\n"
+ "create sequence employer_id_seq]]>"
+msgstr ""
+ "<![CDATA[create table employers (\n"
+ " id BIGINT not null,\n"
+ " name VARCHAR(255),\n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employment_periods (\n"
+ " id BIGINT not null,\n"
+ " hourly_rate NUMERIC(12, 2),\n"
+ " currency VARCHAR(12),\n"
+ " employee_id BIGINT not null,\n"
+ " employer_id BIGINT not null,\n"
+ " end_date TIMESTAMP,\n"
+ " start_date TIMESTAMP,\n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employees (\n"
+ " id BIGINT not null,\n"
+ " firstName VARCHAR(255),\n"
+ " initial CHAR(1),\n"
+ " lastName VARCHAR(255),\n"
+ " taxfileNumber VARCHAR(255),\n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table employment_periods\n"
+ " add constraint employment_periodsFK0 foreign key (employer_id) references employers\n"
+ "alter table employment_periods\n"
+ " add constraint employment_periodsFK1 foreign key (employee_id) references employees\n"
+ "create sequence employee_id_seq\n"
+ "create sequence employment_id_seq\n"
+ "create sequence employer_id_seq]]>"
+
+#: index.docbook:61
+msgid "Author/Work"
+msgstr "Auteur/Travail (Author/Work)"
+
+#: index.docbook:63
+msgid "Consider the following model of the relationships between <literal>Work</literal>, <literal>Author</literal> and <literal>Person</literal>. We represent the relationship between <literal>Work</literal> and <literal>Author</literal> as a many-to-many association. We choose to represent the relationship between <literal>Author</literal> and <literal>Person</literal> as one-to-one association. Another possibility would be to have <literal>Author</literal> extend <literal>Person</literal>."
+msgstr "Soit le modèle de la relation entre <literal>Work</literal>, <literal>Author</literal> et <literal>Person</literal>. Nous représentons la relation entre <literal>Work</literal> et <literal>Author</literal> comme une association plusieurs-vers-plusieurs. Nous avons choisi de représenter la relation entre <literal>Author</literal> et <literal>Person</literal> comme une association un-vers-un. Une autre possibilité aurait été que <literal>Author</literal> hérite de <literal>Person</literal>."
+
+#: index.docbook:81
+msgid "The following mapping document correctly represents these relationships:"
+msgstr "Le mapping suivant représente exactement ces relations :"
+
+#: index.docbook:85
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Work\" table=\"works\" discriminator-value=\"W\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"type\" type=\"character\"/>\n"
+ "\n"
+ " <property name=\"title\"/>\n"
+ " <set name=\"authors\" table=\"author_work\">\n"
+ " <key column name=\"work_id\"/>\n"
+ " <many-to-many class=\"Author\" column name=\"author_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"Book\" discriminator-value=\"B\">\n"
+ " <property name=\"text\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " <subclass name=\"Song\" discriminator-value=\"S\">\n"
+ " <property name=\"tempo\"/>\n"
+ " <property name=\"genre\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Author\" table=\"authors\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <!-- The Author must have the same identifier as the Person -->\n"
+ " <generator class=\"assigned\"/> \n"
+ " </id>\n"
+ "\n"
+ " <property name=\"alias\"/>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "\n"
+ " <set name=\"works\" table=\"author_work\" inverse=\"true\">\n"
+ " <key column=\"author_id\"/>\n"
+ " <many-to-many class=\"Work\" column=\"work_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Person\" table=\"persons\">\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Work\" table=\"works\" discriminator-value=\"W\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"type\" type=\"character\"/>\n"
+ "\n"
+ " <property name=\"title\"/>\n"
+ " <set name=\"authors\" table=\"author_work\">\n"
+ " <key column name=\"work_id\"/>\n"
+ " <many-to-many class=\"Author\" column name=\"author_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"Book\" discriminator-value=\"B\">\n"
+ " <property name=\"text\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " <subclass name=\"Song\" discriminator-value=\"S\">\n"
+ " <property name=\"tempo\"/>\n"
+ " <property name=\"genre\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Author\" table=\"authors\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <!-- The Author must have the same identifier as the Person -->\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"alias\"/>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "\n"
+ " <set name=\"works\" table=\"author_work\" inverse=\"true\">\n"
+ " <key column=\"author_id\"/>\n"
+ " <many-to-many class=\"Work\" column=\"work_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Person\" table=\"persons\">\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:87
+msgid "There are four tables in this mapping. <literal>works</literal>, <literal>authors</literal> and <literal>persons</literal> hold work, author and person data respectively. <literal>author_work</literal> is an association table linking authors to works. Heres the table schema, as generated by <literal>SchemaExport</literal>."
+msgstr "Il y a quatre tables dans ce mapping. <literal>works</literal>, <literal>authors</literal> et <literal>persons</literal> qui contiennent respectivement les données de work, author et person. <literal>author_work</literal> est une table d'association qui lie authors à works. Voici le schéma de tables, généré par <literal>SchemaExport</literal>."
+
+#: index.docbook:95
+msgid ""
+ "<![CDATA[create table works (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " tempo FLOAT, \n"
+ " genre VARCHAR(255), \n"
+ " text INTEGER, \n"
+ " title VARCHAR(255), \n"
+ " type CHAR(1) not null, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table author_work (\n"
+ " author_id BIGINT not null, \n"
+ " work_id BIGINT not null, \n"
+ " primary key (work_id, author_id)\n"
+ ")\n"
+ "\n"
+ "create table authors (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " alias VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table persons (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table authors \n"
+ " add constraint authorsFK0 foreign key (id) references persons\n"
+ "alter table author_work \n"
+ " add constraint author_workFK0 foreign key (author_id) references authors\n"
+ "alter table author_work\n"
+ " add constraint author_workFK1 foreign key (work_id) references works]]>"
+msgstr ""
+ "<![CDATA[create table works (\n"
+ " id BIGINT not null generated by default as identity,\n"
+ " tempo FLOAT,\n"
+ " genre VARCHAR(255),\n"
+ " text INTEGER,\n"
+ " title VARCHAR(255),\n"
+ " type CHAR(1) not null,\n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table author_work (\n"
+ " author_id BIGINT not null,\n"
+ " work_id BIGINT not null,\n"
+ " primary key (work_id, author_id)\n"
+ ")\n"
+ "\n"
+ "create table authors (\n"
+ " id BIGINT not null generated by default as identity,\n"
+ " alias VARCHAR(255),\n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table persons (\n"
+ " id BIGINT not null generated by default as identity,\n"
+ " name VARCHAR(255),\n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table authors\n"
+ " add constraint authorsFK0 foreign key (id) references persons\n"
+ "alter table author_work\n"
+ " add constraint author_workFK0 foreign key (author_id) references authors\n"
+ "alter table author_work\n"
+ " add constraint author_workFK1 foreign key (work_id) references works]]>"
+
+#: index.docbook:100
+msgid "Customer/Order/Product"
+msgstr "Client/Commande/Produit (Customer/Order/Product)"
+
+#: index.docbook:102
+msgid "Now consider a model of the relationships between <literal>Customer</literal>, <literal>Order</literal> and <literal>LineItem</literal> and <literal>Product</literal>. There is a one-to-many association between <literal>Customer</literal> and <literal>Order</literal>, but how should we represent <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal>? I've chosen to map <literal>LineItem</literal> as an association class representing the many-to-many association between <literal>Order</literal> and <literal>Product</literal>. In Hibernate, this is called a composite element."
+msgstr "Imaginons maintenant le modèle de relation entre <literal>Customer</literal>, <literal>Order</literal>, <literal>LineItem</literal> et <literal>Product</literal>. Il y a une association un-vers-plusieurs entre <literal>Customer</literal> et <literal>Order</literal>, mais comment devrions nous représenter <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal>? J'ai choisi de mapper <literal>LineItem</literal> comme une classe d'association représentant l'association plusieurs-vers-plusieurs entre <literal>Order</literal> et <literal>Product</literal>. Dans Hibernate, on appelle cela un élément composite."
+
+#: index.docbook:122
+msgid "The mapping document:"
+msgstr "Le document de mapping :"
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Customer\" table=\"customers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <set name=\"orders\" inverse=\"true\">\n"
+ " <key column=\"customer_id\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Order\" table=\"orders\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\"/>\n"
+ " <many-to-one name=\"customer\" column=\"customer_id\"/>\n"
+ " <list name=\"lineItems\" table=\"line_items\">\n"
+ " <key column=\"order_id\"/>\n"
+ " <list-index column=\"line_number\"/>\n"
+ " <composite-element class=\"LineItem\">\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"product\" column=\"product_id\"/>\n"
+ " </composite-element>\n"
+ " </list>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Product\" table=\"products\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"serialNumber\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Customer\" table=\"customers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <set name=\"orders\" inverse=\"true\">\n"
+ " <key column=\"customer_id\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Order\" table=\"orders\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\"/>\n"
+ " <many-to-one name=\"customer\" column=\"customer_id\"/>\n"
+ " <list name=\"lineItems\" table=\"line_items\">\n"
+ " <key column=\"order_id\"/>\n"
+ " <list-index column=\"line_number\"/>\n"
+ " <composite-element class=\"LineItem\">\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"product\" column=\"product_id\"/>\n"
+ " </composite-element>\n"
+ " </list>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Product\" table=\"products\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"serialNumber\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:128
+msgid "<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> and <literal>products</literal> hold customer, order, order line item and product data respectively. <literal>line_items</literal> also acts as an association table linking orders with products."
+msgstr "<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> et <literal>products</literal> contiennent les données de customer, order, order line item et product. <literal>line_items</literal> est aussi la table d'association liant orders à products."
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[create table customers (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table orders (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " customer_id BIGINT, \n"
+ " date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table line_items (\n"
+ " line_number INTEGER not null, \n"
+ " order_id BIGINT not null, \n"
+ " product_id BIGINT, \n"
+ " quantity INTEGER, \n"
+ " primary key (order_id, line_number)\n"
+ ")\n"
+ "\n"
+ "create table products (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " serialNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table orders \n"
+ " add constraint ordersFK0 foreign key (customer_id) references customers\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK0 foreign key (product_id) references products\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK1 foreign key (order_id) references orders]]>"
+msgstr ""
+ "<![CDATA[create table customers (\n"
+ " id BIGINT not null generated by default as identity,\n"
+ " name VARCHAR(255),\n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table orders (\n"
+ " id BIGINT not null generated by default as identity,\n"
+ " customer_id BIGINT,\n"
+ " date TIMESTAMP,\n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table line_items (\n"
+ " line_number INTEGER not null,\n"
+ " order_id BIGINT not null,\n"
+ " product_id BIGINT,\n"
+ " quantity INTEGER,\n"
+ " primary key (order_id, line_number)\n"
+ ")\n"
+ "\n"
+ "create table products (\n"
+ " id BIGINT not null generated by default as identity,\n"
+ " serialNumber VARCHAR(255),\n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table orders\n"
+ " add constraint ordersFK0 foreign key (customer_id) references customers\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK0 foreign key (product_id) references products\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK1 foreign key (order_id) references orders]]>"
+
+#: index.docbook:140
+msgid "Miscellaneous example mappings"
+msgstr "Divers mappings d'exemple"
+
+#: index.docbook:142
+msgid "These examples are all taken from the Hibernate test suite. You will find many other useful example mappings there. Look in the <literal>test</literal> folder of the Hibernate distribution."
+msgstr "Ces exemples sont tous pris de la suite de tests d'Hibernate. Vous en trouverez beaucoup d'autres. Regardez dans le dossier <literal>test</literal> de la distribution d'Hibernate."
+
+#: index.docbook:148
+msgid "TODO: put words around this stuff"
+msgstr "TODO: put words around this stuff"
+
+#: index.docbook:151
+msgid "\"Typed\" one-to-one association"
+msgstr "\"Typed\" one-to-one association"
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"name\"/>\n"
+ " <one-to-one name=\"address\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'HOME'</formula>\n"
+ " </one-to-one>\n"
+ " <one-to-one name=\"mailingAddress\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'MAILING'</formula>\n"
+ " </one-to-one>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\" batch-size=\"2\" \n"
+ " check=\"addressType in ('MAILING', 'HOME', 'BUSINESS')\">\n"
+ " <composite-id>\n"
+ " <key-many-to-one name=\"person\" \n"
+ " column=\"personName\"/>\n"
+ " <key-property name=\"type\" \n"
+ " column=\"addressType\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"street\" type=\"text\"/>\n"
+ " <property name=\"state\"/>\n"
+ " <property name=\"zip\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"name\"/>\n"
+ " <one-to-one name=\"address\"\n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'HOME'</formula>\n"
+ " </one-to-one>\n"
+ " <one-to-one name=\"mailingAddress\"\n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'MAILING'</formula>\n"
+ " </one-to-one>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\" batch-size=\"2\"\n"
+ " check=\"addressType in ('MAILING', 'HOME', 'BUSINESS')\">\n"
+ " <composite-id>\n"
+ " <key-many-to-one name=\"person\"\n"
+ " column=\"personName\"/>\n"
+ " <key-property name=\"type\"\n"
+ " column=\"addressType\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"street\" type=\"text\"/>\n"
+ " <property name=\"state\"/>\n"
+ " <property name=\"zip\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:156
+msgid "Composite key example"
+msgstr "Exemple de clef composée"
+
+#: index.docbook:157
+msgid ""
+ "<![CDATA[<class name=\"Customer\">\n"
+ "\n"
+ " <id name=\"customerId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\" not-null=\"true\" length=\"100\"/>\n"
+ " <property name=\"address\" not-null=\"true\" length=\"200\"/>\n"
+ "\n"
+ " <list name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key column=\"customerId\"/>\n"
+ " <index column=\"orderNumber\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </list>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Order\" table=\"CustomerOrder\" lazy=\"true\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ " <synchronize table=\"Product\"/>\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"Order$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"orderDate\" \n"
+ " type=\"calendar_date\"\n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <property name=\"total\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity*p.price) \n"
+ " from LineItem li, Product p \n"
+ " where li.productId = p.productId \n"
+ " and li.customerId = customerId \n"
+ " and li.orderNumber = orderNumber )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ " <many-to-one name=\"customer\"\n"
+ " column=\"customerId\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <bag name=\"lineItems\"\n"
+ " fetch=\"join\" \n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key>\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"LineItem\"/>\n"
+ " </bag>\n"
+ " \n"
+ "</class>\n"
+ " \n"
+ "<class name=\"LineItem\">\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"LineItem$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " <key-property name=\"productId\" length=\"10\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"quantity\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\">\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </many-to-one>\n"
+ " \n"
+ " <many-to-one name=\"product\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"\n"
+ " column=\"productId\"/>\n"
+ " \n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Product\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ "\n"
+ " <id name=\"productId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"description\" \n"
+ " not-null=\"true\" \n"
+ " length=\"200\"/>\n"
+ " <property name=\"price\" length=\"3\"/>\n"
+ " <property name=\"numberAvailable\"/>\n"
+ " \n"
+ " <property name=\"numberOrdered\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity) \n"
+ " from LineItem li \n"
+ " where li.productId = productId )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\">\n"
+ "\n"
+ " <id name=\"customerId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\" not-null=\"true\" length=\"100\"/>\n"
+ " <property name=\"address\" not-null=\"true\" length=\"200\"/>\n"
+ "\n"
+ " <list name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key column=\"customerId\"/>\n"
+ " <index column=\"orderNumber\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </list>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Order\" table=\"CustomerOrder\" lazy=\"true\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ " <synchronize table=\"Product\"/>\n"
+ "\n"
+ " <composite-id name=\"id\"\n"
+ " class=\"Order$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " </composite-id>\n"
+ "\n"
+ " <property name=\"orderDate\"\n"
+ " type=\"calendar_date\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property name=\"total\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity*p.price)\n"
+ " from LineItem li, Product p\n"
+ " where li.productId = p.productId\n"
+ " and li.customerId = customerId\n"
+ " and li.orderNumber = orderNumber )\n"
+ " </formula>\n"
+ " </property>\n"
+ "\n"
+ " <many-to-one name=\"customer\"\n"
+ " column=\"customerId\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <bag name=\"lineItems\"\n"
+ " fetch=\"join\"\n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key>\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"LineItem\"/>\n"
+ " </bag>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"LineItem\">\n"
+ "\n"
+ " <composite-id name=\"id\"\n"
+ " class=\"LineItem$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " <key-property name=\"productId\" length=\"10\"/>\n"
+ " </composite-id>\n"
+ "\n"
+ " <property name=\"quantity\"/>\n"
+ "\n"
+ " <many-to-one name=\"order\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\">\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </many-to-one>\n"
+ "\n"
+ " <many-to-one name=\"product\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"\n"
+ " column=\"productId\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Product\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ "\n"
+ " <id name=\"productId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"description\"\n"
+ " not-null=\"true\"\n"
+ " length=\"200\"/>\n"
+ " <property name=\"price\" length=\"3\"/>\n"
+ " <property name=\"numberAvailable\"/>\n"
+ "\n"
+ " <property name=\"numberOrdered\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity)\n"
+ " from LineItem li\n"
+ " where li.productId = productId )\n"
+ " </formula>\n"
+ " </property>\n"
+ "\n"
+ "</class>]]>"
+
+#: index.docbook:161
+msgid "Many-to-many with shared composite key attribute"
+msgstr "Many-to-many avec une clef composée partagée"
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[<class name=\"User\" table=\"`User`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <set name=\"groups\" table=\"UserGroup\">\n"
+ " <key>\n"
+ " <column name=\"userName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"Group\">\n"
+ " <column name=\"groupName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ " \n"
+ "<class name=\"Group\" table=\"`Group`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"description\"/>\n"
+ " <set name=\"users\" table=\"UserGroup\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"groupName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"User\">\n"
+ " <column name=\"userName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[<class name=\"User\" table=\"`User`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <set name=\"groups\" table=\"UserGroup\">\n"
+ " <key>\n"
+ " <column name=\"userName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"Group\">\n"
+ " <column name=\"groupName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Group\" table=\"`Group`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"description\"/>\n"
+ " <set name=\"users\" table=\"UserGroup\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"groupName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"User\">\n"
+ " <column name=\"userName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ "]]>"
+
+#: index.docbook:166
+msgid "Content based discrimination"
+msgstr "Contenu basé sur une discrimination"
+
+#: index.docbook:167
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " discriminator-value=\"P\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"person_id\" \n"
+ " unsaved-value=\"0\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " \n"
+ " \n"
+ " <discriminator \n"
+ " type=\"character\">\n"
+ " <formula>\n"
+ " case \n"
+ " when title is not null then 'E' \n"
+ " when salesperson is not null then 'C' \n"
+ " else 'P' \n"
+ " end\n"
+ " </formula>\n"
+ " </discriminator>\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"\n"
+ " length=\"80\"/>\n"
+ " \n"
+ " <property name=\"sex\" \n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ " \n"
+ " <component name=\"address\">\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </component>\n"
+ " \n"
+ " <subclass name=\"Employee\" \n"
+ " discriminator-value=\"E\">\n"
+ " <property name=\"title\"\n"
+ " length=\"20\"/>\n"
+ " <property name=\"salary\"/>\n"
+ " <many-to-one name=\"manager\"/>\n"
+ " </subclass>\n"
+ " \n"
+ " <subclass name=\"Customer\" \n"
+ " discriminator-value=\"C\">\n"
+ " <property name=\"comments\"/>\n"
+ " <many-to-one name=\"salesperson\"/>\n"
+ " </subclass>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " discriminator-value=\"P\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " column=\"person_id\"\n"
+ " unsaved-value=\"0\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "\n"
+ "\n"
+ " <discriminator\n"
+ " type=\"character\">\n"
+ " <formula>\n"
+ " case\n"
+ " when title is not null then 'E'\n"
+ " when salesperson is not null then 'C'\n"
+ " else 'P'\n"
+ " end\n"
+ " </formula>\n"
+ " </discriminator>\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " not-null=\"true\"\n"
+ " length=\"80\"/>\n"
+ "\n"
+ " <property name=\"sex\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <component name=\"address\">\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </component>\n"
+ "\n"
+ " <subclass name=\"Employee\"\n"
+ " discriminator-value=\"E\">\n"
+ " <property name=\"title\"\n"
+ " length=\"20\"/>\n"
+ " <property name=\"salary\"/>\n"
+ " <many-to-one name=\"manager\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " <subclass name=\"Customer\"\n"
+ " discriminator-value=\"C\">\n"
+ " <property name=\"comments\"/>\n"
+ " <many-to-one name=\"salesperson\"/>\n"
+ " </subclass>\n"
+ "\n"
+ "</class>]]>"
+
+#: index.docbook:171
+msgid "Associations on alternate keys"
+msgstr "Associations sur des clefs alternées"
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"name\" length=\"100\"/>\n"
+ " \n"
+ " <one-to-one name=\"address\" \n"
+ " property-ref=\"person\"\n"
+ " cascade=\"all\"\n"
+ " fetch=\"join\"/>\n"
+ " \n"
+ " <set name=\"accounts\" \n"
+ " inverse=\"true\">\n"
+ " <key column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " <one-to-many class=\"Account\"/>\n"
+ " </set>\n"
+ " \n"
+ " <property name=\"userId\" length=\"8\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"address\" length=\"300\"/>\n"
+ " <property name=\"zip\" length=\"5\"/>\n"
+ " <property name=\"country\" length=\"25\"/>\n"
+ " <many-to-one name=\"person\" unique=\"true\" not-null=\"true\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Account\">\n"
+ " <id name=\"accountId\" length=\"32\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " \n"
+ " <many-to-one name=\"user\"\n"
+ " column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " \n"
+ " <property name=\"type\" not-null=\"true\"/>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\" length=\"100\"/>\n"
+ "\n"
+ " <one-to-one name=\"address\"\n"
+ " property-ref=\"person\"\n"
+ " cascade=\"all\"\n"
+ " fetch=\"join\"/>\n"
+ "\n"
+ " <set name=\"accounts\"\n"
+ " inverse=\"true\">\n"
+ " <key column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " <one-to-many class=\"Account\"/>\n"
+ " </set>\n"
+ "\n"
+ " <property name=\"userId\" length=\"8\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"address\" length=\"300\"/>\n"
+ " <property name=\"zip\" length=\"5\"/>\n"
+ " <property name=\"country\" length=\"25\"/>\n"
+ " <many-to-one name=\"person\" unique=\"true\" not-null=\"true\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Account\">\n"
+ " <id name=\"accountId\" length=\"32\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ "\n"
+ " <many-to-one name=\"user\"\n"
+ " column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ "\n"
+ " <property name=\"type\" not-null=\"true\"/>\n"
+ "\n"
+ "</class>]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/example_parentchild.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/example_parentchild.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/example_parentchild.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,350 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Parent/Child"
+msgstr "Exemple : Père/Fils"
+
+#: index.docbook:7
+msgid "One of the very first things that new users try to do with Hibernate is to model a parent / child type relationship. There are two different approaches to this. For various reasons the most convenient approach, especially for new users, is to model both <literal>Parent</literal> and <literal>Child</literal> as entity classes with a <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a <literal><composite-element></literal>.) Now, it turns out that default semantics of a one to many association (in Hibernate) are much less close to the usual semantics of a parent / child relationship than those of a composite element mapping. We will explain how to use a <emphasis>bidirectional one to many association with cascades</emphasis> to model a parent / child relationship efficiently and elegantly. It's not at all difficult!"
+msgstr "L'une des premières choses que les nouveaux utilisateurs essaient de faire avec Hibernate est de modéliser une relation père/fils. Il y a deux approches différentes pour cela. Pour un certain nombre de raisons, la méthode la plus courante, en particulier pour les nouveaux utilisateurs, est de modéliser les deux relations <literal>Père</literal> et <literal>Fils</literal> comme des classes entités liées par une association <literal><one-to-many></literal> du <literal>Père</literal> vers le <literal>Fils</literal> (l'autre approche est de déclarer le <literal>Fils</literal> comme un <literal><composite-element></literal>). Il est évident que le sens de l'association un vers plusieurs (dans Hibernate) est bien moins proche du sens habituel d'une relation père/fils que ne l'est celui d'un élément cmposite. Nous allons vous expliquer comment utiliser une association <emphasis>un vers plusieurs bidirectionnelle avec cascade</emphasis> afin de mo!
déliser efficacement et élégamment une relation père/fils, ce n'est vraiment pas difficile !"
+
+#: index.docbook:21
+msgid "A note about collections"
+msgstr "Une note à propos des collections"
+
+#: index.docbook:23
+msgid "Hibernate collections are considered to be a logical part of their owning entity; never of the contained entities. This is a crucial distinction! It has the following consequences:"
+msgstr "Les collections Hibernate sont considérées comme étant une partie logique de l'entité dans laquelle elles sont contenues ; jamais des entités qu'elle contient. C'est une distinction crutiale ! Les conséquences sont les suivantes :"
+
+#: index.docbook:30
+msgid "When we remove / add an object from / to a collection, the version number of the collection owner is incremented."
+msgstr "Quand nous ajoutons / retirons un objet d'une collection, le numéro de version du propriétaire de la collection est incrémenté."
+
+#: index.docbook:36
+msgid "If an object that was removed from a collection is an instance of a value type (eg, a composite element), that object will cease to be persistent and its state will be completely removed from the database. Likewise, adding a value type instance to the collection will cause its state to be immediately persistent."
+msgstr "Si un objet qui a été enlevé d'une collection est une instance de type valeur (ex : élément composite), cet objet cessera d'être persistant et son état sera complètement effacé de la base de données. Par ailleurs, ajouter une instance de type valeur dans une collection aura pour conséquence que son état sera immédiatement persistant."
+
+#: index.docbook:44
+msgid "On the other hand, if an entity is removed from a collection (a one-to-many or many-to-many association), it will not be deleted, by default. This behaviour is completely consistent - a change to the internal state of another entity should not cause the associated entity to vanish! Likewise, adding an entity to a collection does not cause that entity to become persistent, by default."
+msgstr "Si une entité est enlevée d'une collection (association un-vers-plusieurs ou plusieurs-vers-plusieurs), par défaut, elle ne sera pas effacée. Ce comportement est complètement logique - une modification de l'un des états internes d'une entité ne doit pas causer la disparition de l'entité associée ! De même, l'ajout d'une entité dans une collection n'engendre pas, par défaut, la persistance de cette entité."
+
+#: index.docbook:54
+msgid "Instead, the default behaviour is that adding an entity to a collection merely creates a link between the two entities, while removing it removes the link. This is very appropriate for all sorts of cases. Where it is not appropriate at all is the case of a parent / child relationship, where the life of the child is bound to the life cycle of the parent."
+msgstr "Le comportement par défaut est donc que l'ajout d'une entité dans une collection créé simplement le lien entre les deux entités, et qu'effacer une entité supprime ce lien. C'est le comportement le plus approprié dans la plupart des cas. Ce comportement n'est cependant pas approprié lorsque la vie du fils est liée au cycle de vie du père."
+
+#: index.docbook:64
+msgid "Bidirectional one-to-many"
+msgstr "un-vers-plusieurs bidirectionnel"
+
+#: index.docbook:66
+msgid "Suppose we start with a simple <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>."
+msgstr "Supposons que nous ayons une simple association <literal><one-to-many></literal> de <literal>Parent</literal> vers <literal>Child</literal>."
+
+#: index.docbook:71
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>]]>"
+
+#: index.docbook:73
+msgid "If we were to execute the following code"
+msgstr "Si nous executions le code suivant"
+
+#: index.docbook:77
+msgid ""
+ "<![CDATA[Parent p = .....;\n"
+ "Child c = new Child();\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = .....;\n"
+ "Child c = new Child();\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:79
+msgid "Hibernate would issue two SQL statements:"
+msgstr "Hibernate exécuterait deux ordres SQL:"
+
+#: index.docbook:85
+msgid "an <literal>INSERT</literal> to create the record for <literal>c</literal>"
+msgstr "un <literal>INSERT</literal> pour créer l'enregistrement pour <literal>c</literal>"
+
+#: index.docbook:88
+msgid "an <literal>UPDATE</literal> to create the link from <literal>p</literal> to <literal>c</literal>"
+msgstr "un <literal>UPDATE</literal> pour créer le lien de <literal>p</literal> vers <literal>c</literal>"
+
+#: index.docbook:95
+msgid "This is not only inefficient, but also violates any <literal>NOT NULL</literal> constraint on the <literal>parent_id</literal> column. We can fix the nullability constraint violation by specifying <literal>not-null=\"true\"</literal> in the collection mapping:"
+msgstr "Ceci est non seuleument inefficace, mais viole aussi toute contrainte <literal>NOT NULL</literal> sur la colonne <literal>parent_id</literal>. Nous pouvons réparer la contrainte de nullité en spécifiant <literal>not-null=\"true\"</literal> dans le mapping de la collection :"
+
+#: index.docbook:101
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:103
+msgid "However, this is not the recommended solution."
+msgstr "Cependant ce n'est pas la solution recommandée."
+
+#: index.docbook:106
+msgid "The underlying cause of this behaviour is that the link (the foreign key <literal>parent_id</literal>) from <literal>p</literal> to <literal>c</literal> is not considered part of the state of the <literal>Child</literal> object and is therefore not created in the <literal>INSERT</literal>. So the solution is to make the link part of the <literal>Child</literal> mapping."
+msgstr "La cause sous jacente à ce comportement est que le lien (la clé étrangère <literal>parent_id</literal>) de <literal>p</literal> vers <literal>c</literal> n'est pas considérée comme faisant partie de l'état de l'objet <literal>Child</literal> et n'est donc pas créé par l'<literal>INSERT</literal>. La solution est donc que ce lien fasse partie du mapping de <literal>Child</literal>."
+
+#: index.docbook:113
+msgid "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
+
+#: index.docbook:115
+msgid "(We also need to add the <literal>parent</literal> property to the <literal>Child</literal> class.)"
+msgstr "(Nous avons aussi besoin d'ajouter la propriété <literal>parent</literal> dans la classe <literal>Child</literal>)."
+
+#: index.docbook:119
+msgid "Now that the <literal>Child</literal> entity is managing the state of the link, we tell the collection not to update the link. We use the <literal>inverse</literal> attribute."
+msgstr "Maintenant que l'état du lien est géré par l'entité <literal>Child</literal>, nous spécifions à la collection de ne pas mettre à jour le lien. Nous utilisons l'attribut <literal>inverse</literal>."
+
+#: index.docbook:124
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:126
+msgid "The following code would be used to add a new <literal>Child</literal>"
+msgstr "Le code suivant serait utilisé pour ajouter un nouveau <literal>Child</literal>"
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:132
+msgid "And now, only one SQL <literal>INSERT</literal> would be issued!"
+msgstr "Maintenant, seul un <literal>INSERT</literal> SQL est nécessaire !"
+
+#: index.docbook:136
+msgid "To tighten things up a bit, we could create an <literal>addChild()</literal> method of <literal>Parent</literal>."
+msgstr "Pour alléger encore un peu les choses, nous devrions créer une méthode <literal>addChild()</literal> dans <literal>Parent</literal>."
+
+#: index.docbook:141
+msgid ""
+ "<![CDATA[public void addChild(Child c) {\n"
+ " c.setParent(this);\n"
+ " children.add(c);\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public void addChild(Child c) {\n"
+ " c.setParent(this);\n"
+ " children.add(c);\n"
+ "}]]>"
+
+#: index.docbook:143
+msgid "Now, the code to add a <literal>Child</literal> looks like"
+msgstr "Le code d'ajout d'un <literal>Child</literal> serait alors"
+
+#: index.docbook:147
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:152
+msgid "Cascading life cycle"
+msgstr "Cycle de vie en cascade"
+
+#: index.docbook:154
+msgid "The explicit call to <literal>save()</literal> is still annoying. We will address this by using cascades."
+msgstr "L'appel explicite de <literal>save()</literal> est un peu fastidieux. Nous pouvons simplifier cela en utilisant les cascades."
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:161
+msgid "This simplifies the code above to"
+msgstr "Simplifie le code précédent en"
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:167
+msgid "Similarly, we don't need to iterate over the children when saving or deleting a <literal>Parent</literal>. The following removes <literal>p</literal> and all its children from the database."
+msgstr "De la même manière, nous n'avons pas à itérer sur les fils lorsque nous sauvons ou effacons un <literal>Parent</literal>. Le code suivant efface <literal>p</literal> et tous ses fils de la base de données."
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "session.delete(p);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "session.delete(p);\n"
+ "session.flush();]]>"
+
+#: index.docbook:174
+msgid "However, this code"
+msgstr "Par contre, ce code"
+
+#: index.docbook:178
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "c.setParent(null);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "c.setParent(null);\n"
+ "session.flush();]]>"
+
+#: index.docbook:180
+msgid "will not remove <literal>c</literal> from the database; it will ony remove the link to <literal>p</literal> (and cause a <literal>NOT NULL</literal> constraint violation, in this case). You need to explicitly <literal>delete()</literal> the <literal>Child</literal>."
+msgstr "n'effacera pas <literal>c</literal> de la base de données, il enlèvera seulement le lien vers <literal>p</literal> (et causera une violation de contrainte <literal>NOT NULL</literal>, dans ce cas). Vous devez explicitement utiliser <literal>delete()</literal> sur <literal>Child</literal>."
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "session.delete(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "session.delete(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:188
+msgid "Now, in our case, a <literal>Child</literal> can't really exist without its parent. So if we remove a <literal>Child</literal> from the collection, we really do want it to be deleted. For this, we must use <literal>cascade=\"all-delete-orphan\"</literal>."
+msgstr "Dans notre cas, un <literal>Child</literal> ne peut pas vraiment exister sans son père. Si nous effacons un <literal>Child</literal> de la collection, nous voulons vraiment qu'il soit effacé. Pour cela, nous devons utiliser <literal>cascade=\"all-delete-orphan\"</literal>."
+
+#: index.docbook:194
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:196
+msgid "Note: even though the collection mapping specifies <literal>inverse=\"true\"</literal>, cascades are still processed by iterating the collection elements. So if you require that an object be saved, deleted or updated by cascade, you must add it to the collection. It is not enough to simply call <literal>setParent()</literal>."
+msgstr "A noter : même si le mapping de la collection spécifie <literal>inverse=\"true\"</literal>, les cascades sont toujours assurées par l'itération sur les éléments de la collection. Donc, si vous avez besoin qu'un objet soit enregistré, effacé ou mis à jour par cascade, vous devez l'ajouter dans la colleciton. Il ne suffit pas d'appeler explicitement <literal>setParent()</literal>."
+
+#: index.docbook:206
+msgid "Cascades and <literal>unsaved-value</literal>"
+msgstr "Cascades et <literal>unsaved-value</literal>"
+
+#: index.docbook:208
+msgid "Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</literal>, made some changes in a UI action and wish to persist these changes in a new session by calling <literal>update()</literal>. The <literal>Parent</literal> will contain a collection of childen and, since cascading update is enabled, Hibernate needs to know which children are newly instantiated and which represent existing rows in the database. Lets assume that both <literal>Parent</literal> and <literal>Child</literal> have genenerated identifier properties of type <literal>Long</literal>. Hibernate will use the identifier and version/timestamp property value to determine which of the children are new. (See <xref linkend=\"objectstate-saveorupdate\"/>.) <emphasis>In Hibernate3, it is no longer necessary to specify an <literal>unsaved-value</literal> explicitly.</emphasis>"
+msgstr "Supposons que nous ayons chargé un <literal>Parent</literal> dans une <literal>Session</literal>, que nous l'ayons ensuite modifié et que voulions persiter ces modifications dans une nouvelle session en appelant <literal>update()</literal>. Le <literal>Parent</literal> contiendra une collection de fils et, puisque la cascade est activée, Hibernate a besoin de savoir quels fils viennent d'être instanciés et quels fils proviennent de la base de données. Supposons aussi que <literal>Parent</literal> et <literal>Child</literal> ont tous deux des identifiants du type <literal>Long</literal>. Hibernate utilisera la propriété de l'identifiant et la propriété de la version/horodatage pour déterminer quels fils sont nouveaux (vous pouvez aussi utiliser la propriété version ou timestamp, voir <xref linkend=\"manipulatingdata-updating-detached\"/>). <emphasis>Dans Hibernate3, il n'est plus nécessaire de spécifier une <literal>unsaved-value</literal> explicitemen!
t.</emphasis>"
+
+#: index.docbook:220
+msgid "The following code will update <literal>parent</literal> and <literal>child</literal> and insert <literal>newChild</literal>."
+msgstr "Le code suivant mettra à jour <literal>parent</literal> et <literal>child</literal> et insérera <literal>newChild</literal>."
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[//parent and child were both loaded in a previous session\n"
+ "parent.addChild(child);\n"
+ "Child newChild = new Child();\n"
+ "parent.addChild(newChild);\n"
+ "session.update(parent);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[//parent et child ont été chargés dans une session précédente\n"
+ "parent.addChild(child);\n"
+ "Child newChild = new Child();\n"
+ "parent.addChild(newChild);\n"
+ "session.update(parent);\n"
+ "session.flush();]]>"
+
+#: index.docbook:227
+msgid "Well, that's all very well for the case of a generated identifier, but what about assigned identifiers and composite identifiers? This is more difficult, since Hibernate can't use the identifier property to distinguish between a newly instantiated object (with an identifier assigned by the user) and an object loaded in a previous session. In this case, Hibernate will either use the timestamp or version property, or will actually query the second-level cache or, worst case, the database, to see if the row exists."
+msgstr "Ceci est très bien pour des identifiants générés, mais qu'en est-il des identifiants assignés et des identifiants composés ? C'est plus difficile, puisqu'Hibernate ne peut pas utiliser la propriété de l'identifiant pour distinguer un objet nouvellement instancié (avec un identifiant assigné par l'utilisateur) d'un objet chargé dans une session précédente. Dans ce cas, Hibernate utilisera soit la propriété de version ou d'horodatage, soit effectuera vraiment une requête au cache de second niveau, soit, dans le pire des cas, à la base de données, pour voir si la ligne existe."
+
+#: index.docbook:260
+msgid "Conclusion"
+msgstr "Conclusion"
+
+#: index.docbook:262
+msgid "There is quite a bit to digest here and it might look confusing first time around. However, in practice, it all works out very nicely. Most Hibernate applications use the parent / child pattern in many places."
+msgstr "Il y a quelques principes à maîtriser dans ce chapitre et tout cela peut paraître déroutant la première fois. Cependant, dans la pratique, tout fonctionne parfaitement. La plupart des applications Hibernate utilisent le pattern père / fils."
+
+#: index.docbook:267
+msgid "We mentioned an alternative in the first paragraph. None of the above issues exist in the case of <literal><composite-element></literal> mappings, which have exactly the semantics of a parent / child relationship. Unfortunately, there are two big limitations to composite element classes: composite elements may not own collections, and they should not be the child of any entity other than the unique parent."
+msgstr "Nous avons évoqué une alternative dans le premier paragraphe. Aucun des points traités précédemment n'existe dans le cas d'un mapping <literal><composite-element></literal> qui possède exactement la sémantique d'une relation père / fils. Malheureusement, il y a deux grandes limitations pour les classes éléments composites : les éléments composites ne peuvent contenir de collections, et ils ne peuvent être les fils d'entités autres que l'unique parent."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/example_weblog.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/example_weblog.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/example_weblog.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,840 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Weblog Application"
+msgstr "Exemple : application Weblog"
+
+#: index.docbook:8
+msgid "Persistent Classes"
+msgstr "Classes persistantes"
+
+#: index.docbook:10
+msgid "The persistent classes represent a weblog, and an item posted in a weblog. They are to be modelled as a standard parent/child relationship, but we will use an ordered bag, instead of a set."
+msgstr "Les classes persistantes representent un weblog, et un article posté dans un weblog. Il seront modélisés comme une relation père/fils standard, mais nous allons utiliser un \"bag\" trié au lieu d'un set."
+
+#: index.docbook:16
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.List;\n"
+ "\n"
+ "public class Blog {\n"
+ " private Long _id;\n"
+ " private String _name;\n"
+ " private List _items;\n"
+ "\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public List getItems() {\n"
+ " return _items;\n"
+ " }\n"
+ " public String getName() {\n"
+ " return _name;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setItems(List list) {\n"
+ " _items = list;\n"
+ " }\n"
+ " public void setName(String string) {\n"
+ " _name = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.List;\n"
+ "\n"
+ "public class Blog {\n"
+ " private Long _id;\n"
+ " private String _name;\n"
+ " private List _items;\n"
+ "\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public List getItems() {\n"
+ " return _items;\n"
+ " }\n"
+ " public String getName() {\n"
+ " return _name;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setItems(List list) {\n"
+ " _items = list;\n"
+ " }\n"
+ " public void setName(String string) {\n"
+ " _name = string;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:18
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.text.DateFormat;\n"
+ "import java.util.Calendar;\n"
+ "\n"
+ "public class BlogItem {\n"
+ " private Long _id;\n"
+ " private Calendar _datetime;\n"
+ " private String _text;\n"
+ " private String _title;\n"
+ " private Blog _blog;\n"
+ "\n"
+ " public Blog getBlog() {\n"
+ " return _blog;\n"
+ " }\n"
+ " public Calendar getDatetime() {\n"
+ " return _datetime;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public String getText() {\n"
+ " return _text;\n"
+ " }\n"
+ " public String getTitle() {\n"
+ " return _title;\n"
+ " }\n"
+ " public void setBlog(Blog blog) {\n"
+ " _blog = blog;\n"
+ " }\n"
+ " public void setDatetime(Calendar calendar) {\n"
+ " _datetime = calendar;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setText(String string) {\n"
+ " _text = string;\n"
+ " }\n"
+ " public void setTitle(String string) {\n"
+ " _title = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.text.DateFormat;\n"
+ "import java.util.Calendar;\n"
+ "\n"
+ "public class BlogItem {\n"
+ " private Long _id;\n"
+ " private Calendar _datetime;\n"
+ " private String _text;\n"
+ " private String _title;\n"
+ " private Blog _blog;\n"
+ "\n"
+ " public Blog getBlog() {\n"
+ " return _blog;\n"
+ " }\n"
+ " public Calendar getDatetime() {\n"
+ " return _datetime;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public String getText() {\n"
+ " return _text;\n"
+ " }\n"
+ " public String getTitle() {\n"
+ " return _title;\n"
+ " }\n"
+ " public void setBlog(Blog blog) {\n"
+ " _blog = blog;\n"
+ " }\n"
+ " public void setDatetime(Calendar calendar) {\n"
+ " _datetime = calendar;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setText(String string) {\n"
+ " _text = string;\n"
+ " }\n"
+ " public void setTitle(String string) {\n"
+ " _title = string;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:23
+msgid "Hibernate Mappings"
+msgstr "Mappings Hibernate"
+
+#: index.docbook:25
+msgid "The XML mappings should now be quite straightforward."
+msgstr "Le mapping XML doit maintenant être relativement simple à vos yeux."
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"Blog\"\n"
+ " table=\"BLOGS\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ "\n"
+ " <bag\n"
+ " name=\"items\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"DATE_TIME\"\n"
+ " cascade=\"all\">\n"
+ "\n"
+ " <key column=\"BLOG_ID\"/>\n"
+ " <one-to-many class=\"BlogItem\"/>\n"
+ "\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"Blog\"\n"
+ " table=\"BLOGS\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ "\n"
+ " <bag\n"
+ " name=\"items\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"DATE_TIME\"\n"
+ " cascade=\"all\">\n"
+ "\n"
+ " <key column=\"BLOG_ID\"/>\n"
+ " <one-to-many class=\"BlogItem\"/>\n"
+ "\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:31
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"BlogItem\"\n"
+ " table=\"BLOG_ITEMS\"\n"
+ " dynamic-update=\"true\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ITEM_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"title\"\n"
+ " column=\"TITLE\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"text\"\n"
+ " column=\"TEXT\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"datetime\"\n"
+ " column=\"DATE_TIME\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <many-to-one\n"
+ " name=\"blog\"\n"
+ " column=\"BLOG_ID\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"BlogItem\"\n"
+ " table=\"BLOG_ITEMS\"\n"
+ " dynamic-update=\"true\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ITEM_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"title\"\n"
+ " column=\"TITLE\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"text\"\n"
+ " column=\"TEXT\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"datetime\"\n"
+ " column=\"DATE_TIME\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <many-to-one\n"
+ " name=\"blog\"\n"
+ " column=\"BLOG_ID\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:36
+msgid "Hibernate Code"
+msgstr "Code Hibernate"
+
+#: index.docbook:38
+msgid "The following class demonstrates some of the kinds of things we can do with these classes, using Hibernate."
+msgstr "La classe suivante montre quelques utilisations que nous pouvons faire de ces classes."
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.ArrayList;\n"
+ "import java.util.Calendar;\n"
+ "import java.util.Iterator;\n"
+ "import java.util.List;\n"
+ "\n"
+ "import org.hibernate.HibernateException;\n"
+ "import org.hibernate.Query;\n"
+ "import org.hibernate.Session;\n"
+ "import org.hibernate.SessionFactory;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.cfg.Configuration;\n"
+ "import org.hibernate.tool.hbm2ddl.SchemaExport;\n"
+ "\n"
+ "public class BlogMain {\n"
+ " \n"
+ " private SessionFactory _sessions;\n"
+ " \n"
+ " public void configure() throws HibernateException {\n"
+ " _sessions = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class)\n"
+ " .buildSessionFactory();\n"
+ " }\n"
+ " \n"
+ " public void exportTables() throws HibernateException {\n"
+ " Configuration cfg = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class);\n"
+ " new SchemaExport(cfg).create(true, true);\n"
+ " }\n"
+ " \n"
+ " public Blog createBlog(String name) throws HibernateException {\n"
+ " \n"
+ " Blog blog = new Blog();\n"
+ " blog.setName(name);\n"
+ " blog.setItems( new ArrayList() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.persist(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Blog blog, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setBlog(blog);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " blog.getItems().add(item);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Long blogid, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Blog blog = (Blog) session.load(Blog.class, blogid);\n"
+ " item.setBlog(blog);\n"
+ " blog.getItems().add(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(BlogItem item, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " item.setText(text);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(Long itemid, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);\n"
+ " item.setText(text);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public List listAllBlogNamesAndItemCounts(int max)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"select blog.id, blog.name, count(blogItem) \" +\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join blog.items as blogItem \" +\n"
+ " \"group by blog.name, blog.id \" +\n"
+ " \"order by max(blogItem.datetime)\"\n"
+ " );\n"
+ " q.setMaxResults(max);\n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ " \n"
+ " public Blog getBlogAndAllItems(Long blogid)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " Blog blog = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join fetch blog.items \" +\n"
+ " \"where blog.id = :blogid\"\n"
+ " );\n"
+ " q.setParameter(\"blogid\", blogid);\n"
+ " blog = (Blog) q.uniqueResult();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public List listBlogsAndRecentItems() throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"inner join blog.items as blogItem \" +\n"
+ " \"where blogItem.datetime > :minDate\"\n"
+ " );\n"
+ "\n"
+ " Calendar cal = Calendar.getInstance();\n"
+ " cal.roll(Calendar.MONTH, false);\n"
+ " q.setCalendar(\"minDate\", cal);\n"
+ " \n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.ArrayList;\n"
+ "import java.util.Calendar;\n"
+ "import java.util.Iterator;\n"
+ "import java.util.List;\n"
+ "\n"
+ "import org.hibernate.HibernateException;\n"
+ "import org.hibernate.Query;\n"
+ "import org.hibernate.Session;\n"
+ "import org.hibernate.SessionFactory;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.cfg.Configuration;\n"
+ "import org.hibernate.tool.hbm2ddl.SchemaExport;\n"
+ "\n"
+ "public class BlogMain {\n"
+ "\n"
+ " private SessionFactory _sessions;\n"
+ "\n"
+ " public void configure() throws HibernateException {\n"
+ " _sessions = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class)\n"
+ " .buildSessionFactory();\n"
+ " }\n"
+ "\n"
+ " public void exportTables() throws HibernateException {\n"
+ " Configuration cfg = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class);\n"
+ " new SchemaExport(cfg).create(true, true);\n"
+ " }\n"
+ "\n"
+ " public Blog createBlog(String name) throws HibernateException {\n"
+ "\n"
+ " Blog blog = new Blog();\n"
+ " blog.setName(name);\n"
+ " blog.setItems( new ArrayList() );\n"
+ "\n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.persist(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ "\n"
+ " public BlogItem createBlogItem(Blog blog, String title, String text)\n"
+ " throws HibernateException {\n"
+ "\n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setBlog(blog);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " blog.getItems().add(item);\n"
+ "\n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ "\n"
+ " public BlogItem createBlogItem(Long blogid, String title, String text)\n"
+ " throws HibernateException {\n"
+ "\n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ "\n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Blog blog = (Blog) session.load(Blog.class, blogid);\n"
+ " item.setBlog(blog);\n"
+ " blog.getItems().add(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ "\n"
+ " public void updateBlogItem(BlogItem item, String text)\n"
+ " throws HibernateException {\n"
+ "\n"
+ " item.setText(text);\n"
+ "\n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public void updateBlogItem(Long itemid, String text)\n"
+ " throws HibernateException {\n"
+ "\n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);\n"
+ " item.setText(text);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public List listAllBlogNamesAndItemCounts(int max)\n"
+ " throws HibernateException {\n"
+ "\n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"select blog.id, blog.name, count(blogItem) \" +\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join blog.items as blogItem \" +\n"
+ " \"group by blog.name, blog.id \" +\n"
+ " \"order by max(blogItem.datetime)\"\n"
+ " );\n"
+ " q.setMaxResults(max);\n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ "\n"
+ " public Blog getBlogAndAllItems(Long blogid)\n"
+ " throws HibernateException {\n"
+ "\n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " Blog blog = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join fetch blog.items \" +\n"
+ " \"where blog.id = :blogid\"\n"
+ " );\n"
+ " q.setParameter(\"blogid\", blogid);\n"
+ " blog = (Blog) q.uniqueResult();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ "\n"
+ " public List listBlogsAndRecentItems() throws HibernateException {\n"
+ "\n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"inner join blog.items as blogItem \" +\n"
+ " \"where blogItem.datetime > :minDate\"\n"
+ " );\n"
+ "\n"
+ " Calendar cal = Calendar.getInstance();\n"
+ " cal.roll(Calendar.MONTH, false);\n"
+ " q.setCalendar(\"minDate\", cal);\n"
+ "\n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ "}]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/filters.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/filters.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/filters.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,192 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Filtering data"
+msgstr "Filtrer les données"
+
+#: index.docbook:7
+msgid "Hibernate3 provides an innovative new approach to handling data with \"visibility\" rules. A <emphasis>Hibernate filter</emphasis> is a global, named, parameterized filter that may be enabled or disabled for a particular Hibernate session."
+msgstr "Hibernate3 fournit une nouvelle approche innovatrice pour gérer des données avec des règles de \"visibilité\". Un <emphasis>filtre Hibernate</emphasis> est un filtre global, nommé, paramétré qui peut être activé ou désactivé pour une session Hibernate particulière."
+
+#: index.docbook:14
+msgid "Hibernate filters"
+msgstr "Filtres Hibernate"
+
+#: index.docbook:16
+msgid "Hibernate3 adds the ability to pre-define filter criteria and attach those filters at both a class and a collection level. A filter criteria is the ability to define a restriction clause very similiar to the existing \"where\" attribute available on the class and various collection elements. Except these filter conditions can be parameterized. The application can then make the decision at runtime whether given filters should be enabled and what their parameter values should be. Filters can be used like database views, but parameterized inside the application."
+msgstr "Hibernate3 ajoute la capacité de prédéfinir des critères de filtre et d'attacher ces filtres à une classe ou à une collection. Un critère de filtre est la faculté de définir une clause de restriction très similaire à l'attribut \"where\" existant disponible sur une classe et divers éléments d'une collection. Mis à part que ces conditions de filtre peuvent être paramétrées. L'application peut alors prendre la décision à l'exécution si des filtres donnés devraient être activés et quels devraient être leurs paramètres. Des filtres peuvent être utilisés comme des vues de base de données, mais paramétrées dans l'application."
+
+#: index.docbook:26
+msgid "In order to use filters, they must first be defined and then attached to the appropriate mapping elements. To define a filter, use the <literal><filter-def/></literal> element within a <literal><hibernate-mapping/></literal> element:"
+msgstr "Afin d'utiliser des filtres, ils doivent d'abord être définis, puis attachés aux éléments de mapping appropriés. Pour définir un filtre, utilisez l'élément <literal><filter-def/></literal> dans un élément <literal><hibernate-mapping/></literal> :"
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\">\n"
+ " <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
+ "</filter-def>]]>"
+msgstr ""
+ "<![CDATA[<filter-def name=\"myFilter\">\n"
+ " <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
+ "</filter-def>]]>"
+
+#: index.docbook:34
+msgid "Then, this filter can be attached to a class:"
+msgstr "Puis, ce filtre peut être attaché à une classe :"
+
+#: index.docbook:38
+msgid ""
+ "<![CDATA[<class name=\"myClass\" ...>\n"
+ " ...\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"myClass\" ...>\n"
+ " ...\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:40
+msgid "or, to a collection:"
+msgstr "ou à une collection :"
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<set ...>\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set ...>\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:46
+msgid "or, even to both (or multiples of each) at the same time."
+msgstr "ou même aux deux (ou à plusieurs de chaque) en même temps."
+
+#: index.docbook:50
+msgid "The methods on <literal>Session</literal> are: <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, and <literal>disableFilter(String filterName)</literal>. By default, filters are <emphasis>not</emphasis> enabled for a given session; they must be explcitly enabled through use of the <literal>Session.enabledFilter()</literal> method, which returns an instance of the <literal>Filter</literal> interface. Using the simple filter defined above, this would look like:"
+msgstr "Les méthodes sur <literal>Session</literal> sont : <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, et <literal>disableFilter(String filterName)</literal>. Par défaut, les filtres <emphasis>ne sont pas</emphasis> activés pour une session donnée ; ils doivent être explicitement activés en appelant la méthode <literal>Session.enabledFilter()</literal>, laquelle retourne une instance de l'interface <literal>Filter</literal>. Utiliser le simple filtre défini au-dessus ressemblerait à :"
+
+#: index.docbook:59
+msgid "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
+msgstr "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
+
+#: index.docbook:61
+msgid "Note that methods on the org.hibernate.Filter interface do allow the method-chaining common to much of Hibernate."
+msgstr "Notez que des méthodes sur l'interface org.hibernate.Filter autorisent le chaînage de beaucoup de méthodes communes d'Hibernate."
+
+#: index.docbook:65
+msgid "A full example, using temporal data with an effective record date pattern:"
+msgstr "Un exemple complet, utilisant des données temporelles avec une structure de date d'enregistrement effectif :"
+
+#: index.docbook:69
+msgid ""
+ "<![CDATA[<filter-def name=\"effectiveDate\">\n"
+ " <filter-param name=\"asOfDate\" type=\"date\"/>\n"
+ "</filter-def>\n"
+ "\n"
+ "<class name=\"Employee\" ...>\n"
+ "...\n"
+ " <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>\n"
+ " <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>\n"
+ " <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>\n"
+ "...\n"
+ " <!--\n"
+ " Note that this assumes non-terminal records have an eff_end_dt set to\n"
+ " a max db date for simplicity-sake\n"
+ " -->\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Department\" ...>\n"
+ "...\n"
+ " <set name=\"employees\" lazy=\"true\">\n"
+ " <key column=\"dept_id\"/>\n"
+ " <one-to-many class=\"Employee\"/>\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<filter-def name=\"effectiveDate\">\n"
+ " <filter-param name=\"asOfDate\" type=\"date\"/>\n"
+ "</filter-def>\n"
+ "\n"
+ "<class name=\"Employee\" ...>\n"
+ "...\n"
+ " <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>\n"
+ " <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>\n"
+ " <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>\n"
+ "...\n"
+ " <!--\n"
+ " Note that this assumes non-terminal records have an eff_end_dt set to\n"
+ " a max db date for simplicity-sake\n"
+ " -->\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Department\" ...>\n"
+ "...\n"
+ " <set name=\"employees\" lazy=\"true\">\n"
+ " <key column=\"dept_id\"/>\n"
+ " <one-to-many class=\"Employee\"/>\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:71
+msgid "Then, in order to ensure that you always get back currently effective records, simply enable the filter on the session prior to retrieving employee data:"
+msgstr "Puis, afin de s'assurer que vous pouvez toujours récupérer les enregistrements actuellement effectifs, activez simplement le filtre sur la session avant de récupérer des données des employés :"
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[Session session = ...;\n"
+ "session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());\n"
+ "List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")\n"
+ " .setLong(\"targetSalary\", new Long(1000000))\n"
+ " .list();\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[Session session = ...;\n"
+ "session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());\n"
+ "List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")\n"
+ " .setLong(\"targetSalary\", new Long(1000000))\n"
+ " .list();\n"
+ "]]>"
+
+#: index.docbook:78
+msgid "In the HQL above, even though we only explicitly mentioned a salary constraint on the results, because of the enabled filter the query will return only currently active employees who have a salary greater than a million dollars."
+msgstr "Dans le HQL ci-dessus, bien que nous ayons seulement mentionné une contrainte de salaire sur les resultats, à cause du filtre activé, la requête retournera seulement les employés actuellement actifs qui ont un salaire supérieur à un million de dollars."
+
+#: index.docbook:84
+msgid "Note: if you plan on using filters with outer joining (either through HQL or load fetching) be careful of the direction of the condition expression. Its safest to set this up for left outer joining; in general, place the parameter first followed by the column name(s) after the operator."
+msgstr "A noter : si vous prévoyez d'utiliser des filtres avec des jointures externes (soit à travers HQL, soit par le chargement) faites attention à la direction de l'expression de condition. Il est plus sûr de la positionner pour les jointures externes à gauche ; en général, placez le paramètre d'abord, suivi du(des) nom(s) de colonne après l'opérateur."
+
+#: index.docbook:91
+msgid "After being defined a filter might be attached to multiple entities and/or collections each with its own condition. That can be tedious when the conditions are the same each time. Thus <literal><filter-def/></literal> allows defining a default condition, either as an attribute or CDATA:"
+msgstr ""
+
+#: index.docbook:98
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\" condition=\"abc > xyz\">...</filter-def>\n"
+ "<filter-def name=\"myOtherFilter\">abc=xyz</filter-def>]]>"
+msgstr ""
+
+#: index.docbook:100
+msgid "This default condition will then be used whenever the filter is attached to something without specifying a condition. Note that this means you can give a specific condition as part of the attachment of the filter which overrides the default condition in that particular case."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/inheritance_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/inheritance_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/inheritance_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,642 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Inheritance Mapping"
+msgstr "Mapping d'héritage de classe"
+
+#: index.docbook:8
+msgid "The Three Strategies"
+msgstr "Les trois stratégies"
+
+#: index.docbook:10
+msgid "Hibernate supports the three basic inheritance mapping strategies:"
+msgstr "Hibernate supporte les trois stratégies d'héritage de base :"
+
+#: index.docbook:16
+msgid "table per class hierarchy"
+msgstr "une table par hiérarchie de classe (table per class hierarchy)"
+
+#: index.docbook:21
+msgid "<para>table per subclass</para>"
+msgstr "une table par classe fille (table per subclass)"
+
+#: index.docbook:26
+msgid "table per concrete class"
+msgstr "une table par classe concrète (table per concrete class)"
+
+#: index.docbook:32
+msgid "In addition, Hibernate supports a fourth, slightly different kind of polymorphism:"
+msgstr "Hibernate supporte en plus une quatrièmestratégie, légèrement différente, qui supporte le polymorphisme :"
+
+#: index.docbook:39
+msgid "implicit polymorphism"
+msgstr "le polymorphisme implicite"
+
+#: index.docbook:45
+msgid "It is possible to use different mapping strategies for different branches of the same inheritance hierarchy, and then make use of implicit polymorphism to achieve polymorphism across the whole hierarchy. However, Hibernate does not support mixing <literal><subclass></literal>, and <literal><joined-subclass></literal> and <literal><union-subclass></literal> mappings under the same root <literal><class></literal> element. It is possible to mix together the table per hierarchy and table per subclass strategies, under the the same <literal><class></literal> element, by combining the <literal><subclass></literal> and <literal><join></literal> elements (see below)."
+msgstr "Il est possible d'utiliser différentes stratégies de mapping pour différentes branches d'une même hiérarchie d'héritage, et alors d'employer le polymorphisme implicite pour réaliser le polymorphisme à travers toute la hiérarchie. Pourtant, Hibernate ne supporte pas de mélanger des mappings <literal><subclass></literal> et <literal><joined-subclass></literal> et <literal><union-subclass></literal> pour le même élément <literal><class></literal> racine. Il est possible de mélanger ensemble les stratégies d'une table par hiérarchie et d'une table par sous-classe, pour le même élément <literal><class></literal>, en combinant les éléments <literal><subclass></literal> et <literal><join></literal> (voir dessous)."
+
+#: index.docbook:59
+msgid "It is possible to define <literal>subclass</literal>, <literal>union-subclass</literal>, and <literal>joined-subclass</literal> mappings in separate mapping documents, directly beneath <literal>hibernate-mapping</literal>. This allows you to extend a class hierachy just by adding a new mapping file. You must specify an <literal>extends</literal> attribute in the subclass mapping, naming a previously mapped superclass. Note: Previously this feature made the ordering of the mapping documents important. Since Hibernate3, the ordering of mapping files does not matter when using the extends keyword. The ordering inside a single mapping file still needs to be defined as superclasses before subclasses."
+msgstr "Il est possible de définir des mappings de <literal>subclass</literal>, <literal>union-subclass</literal>, et <literal>joined-subclass</literal> dans des documents de mapping séparés, directement sous <literal>hibernate-mapping</literal>. Ceci vous permet d'étendre une hiérarchie de classe juste en ajoutant un nouveau fichier de mapping. Vous devez spécifier un attribut <literal>extends</literal> dans le mapping de la sous-classe, en nommant une super-classe précédemment mappée. Note : précédemment cette foncionnalité rendait l'ordre des documents de mapping important. Depuis Hibernate3, l'ordre des fichier de mapping n'importe plus lors de l'utilisation du mot-clef \"extends\". L'ordre à l'intérieur d'un simple fichier de mapping impose encore de définir les classes mères avant les classes filles."
+
+#: index.docbook:70
+msgid ""
+ "<![CDATA[\n"
+ " <hibernate-mapping>\n"
+ " <subclass name=\"DomesticCat\" extends=\"Cat\" discriminator-value=\"D\">\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </subclass>\n"
+ " </hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ " <hibernate-mapping>\n"
+ " <subclass name=\"DomesticCat\" extends=\"Cat\" discriminator-value=\"D\">\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </subclass>\n"
+ " </hibernate-mapping>]]>"
+
+#: index.docbook:74
+msgid "Table per class hierarchy"
+msgstr "Une table par hiérarchie de classe"
+
+#: index.docbook:76
+msgid "Suppose we have an interface <literal>Payment</literal>, with implementors <literal>CreditCardPayment</literal>, <literal>CashPayment</literal>, <literal>ChequePayment</literal>. The table per hierarchy mapping would look like:"
+msgstr "Supposons que nous ayons une interface <literal>Payment</literal>, implémentée par <literal>CreditCardPayment</literal>, <literal>CashPayment</literal>, <literal>ChequePayment</literal>. La stratégie une table par hiérarchie serait :"
+
+#: index.docbook:83
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:85
+msgid "Exactly one table is required. There is one big limitation of this mapping strategy: columns declared by the subclasses, such as <literal>CCTYPE</literal>, may not have <literal>NOT NULL</literal> constraints."
+msgstr "Une seule table est requise. Une grande limitation de cette stratégie est que les colonnes déclarées par les classes filles, telles que <literal>CCTYPE</literal>, ne peuvent avoir de contrainte <literal>NOT NULL</literal>."
+
+#: index.docbook:94
+msgid "Table per subclass"
+msgstr "Une table par classe fille"
+
+#: index.docbook:96
+msgid "A table per subclass mapping would look like:"
+msgstr "La stratégie une table par classe fille serait :"
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <joined-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <joined-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:102
+msgid "Four tables are required. The three subclass tables have primary key associations to the superclass table (so the relational model is actually a one-to-one association)."
+msgstr "Quatre tables sont requises. Les trois tables des classes filles ont une clé primaire associée à la table classe mère (le modèle relationnel est une association un-vers-un)."
+
+#: index.docbook:111
+msgid "Table per subclass, using a discriminator"
+msgstr "Une table par classe fille, en utilisant un discriminant"
+
+#: index.docbook:113
+msgid "Note that Hibernate's implementation of table per subclass requires no discriminator column. Other object/relational mappers use a different implementation of table per subclass which requires a type discriminator column in the superclass table. The approach taken by Hibernate is much more difficult to implement but arguably more correct from a relational point of view. If you would like to use a discriminator column with the table per subclass strategy, you may combine the use of <literal><subclass></literal> and <literal><join></literal>, as follow:"
+msgstr "Notez que l'implémentation Hibernate de la stratégie un table par classe fille ne nécessite pas de colonne discriminante dans la table classe mère. D'autres implémentations de mappers Objet/Relationnel utilisent une autre implémentation de la stratégie une table par classe fille qui nécessite une colonne de type discriminant dans la table de la classe mère. L'approche prise par Hibernate est plus difficile à implémenter mais plus correcte d'une point de vue relationnel. Si vous aimeriez utiliser une colonne discriminante avec la stratégie d'une table par classe fille, vous pourriez combiner l'utilisation de <literal><subclass></literal> et <literal><join></literal>, comme suit :"
+
+#: index.docbook:125
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " <join table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " <join table=\"CHEQUE_PAYMENT\" fetch=\"select\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " <join table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " <join table=\"CHEQUE_PAYMENT\" fetch=\"select\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:127
+msgid "The optional <literal>fetch=\"select\"</literal> declaration tells Hibernate not to fetch the <literal>ChequePayment</literal> subclass data using an outer join when querying the superclass."
+msgstr "La déclaration optionnelle <literal>fetch=\"select\"</literal> indique à Hibernate de ne pas récupérer les données de la classe fille <literal>ChequePayment</literal> par une jointure externe lors des requêtes sur la classe mère."
+
+#: index.docbook:136
+msgid "Mixing table per class hierarchy with table per subclass"
+msgstr "Mélange d'une table par hiérarchie de classe avec une table par classe fille"
+
+#: index.docbook:138
+msgid "You may even mix the table per hierarchy and table per subclass strategies using this approach:"
+msgstr "Vous pouvez même mélanger les stratégies d'une table par hiérarchie de classe et d'une table par classe fille en utilisant cette approche :"
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:145
+msgid "For any of these mapping strategies, a polymorphic association to the root <literal>Payment</literal> class is mapped using <literal><many-to-one></literal>."
+msgstr "Pour importe laquelle de ces stratégies, une association polymorphique vers la classe racine <literal>Payment</literal> est mappée en utilisant <literal><many-to-one></literal>."
+
+#: index.docbook:151
+msgid "<![CDATA[<many-to-one name=\"payment\" column=\"PAYMENT_ID\" class=\"Payment\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"payment\" column=\"PAYMENT_ID\" class=\"Payment\"/>]]>"
+
+#: index.docbook:156
+msgid "Table per concrete class"
+msgstr "Une table par classe concrète"
+
+#: index.docbook:158
+msgid "There are two ways we could go about mapping the table per concrete class strategy. The first is to use <literal><union-subclass></literal>."
+msgstr "Il y a deux manières d'utiliser la stratégie d'une table par classe concrète. La première est d'employer <literal><union-subclass></literal>."
+
+#: index.docbook:163
+msgid ""
+ "<![CDATA[<class name=\"Payment\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <union-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <union-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:165
+msgid "Three tables are involved for the subclasses. Each table defines columns for all properties of the class, including inherited properties."
+msgstr "Trois tables sont nécessaires pour les classes filles. Chaque table définit des colonnes pour toutes les propriétés de la classe, incluant les propriétés héritéés."
+
+#: index.docbook:170
+msgid "The limitation of this approach is that if a property is mapped on the superclass, the column name must be the same on all subclass tables. (We might relax this in a future release of Hibernate.) The identity generator strategy is not allowed in union subclass inheritance, indeed the primary key seed has to be shared accross all unioned subclasses of a hierarchy."
+msgstr "La limitation de cette approche est que si une propriété est mappée sur la classe mère, le nom de la colonne doit être le même pour toutes les classes filles. (Nous pourrions être plus souple dans une future version d'Hibernate). La stratégie du générateur d'identifiant n'est pas permise dans l'héritage de classes filles par union, en effet la valeur (NdT : seed) de la clef primaire doit être partagée par toutes les classes filles \"union\" d'une hiérarchie."
+
+#: index.docbook:179
+msgid "If your superclass is abstract, map it with <literal>abstract=\"true\"</literal>. Of course, if it is not abstract, an additional table (defaults to <literal>PAYMENT</literal> in the example above) is needed to hold instances of the superclass."
+msgstr "Si votre classe mère est abstraite, mappez la avec <literal>abstract=\"true\"</literal>. Bien sûr, si elle n'est pas abstraite, une table supplémentaire (par défaut, <literal>PAYMENT</literal> dans l'exemple ci-dessus) est requise pour contenir des instances de la classe mère."
+
+#: index.docbook:189
+msgid "Table per concrete class, using implicit polymorphism"
+msgstr "Une table par classe concrète, en utilisant le polymorphisme implicite"
+
+#: index.docbook:191
+msgid "An alternative approach is to make use of implicit polymorphism:"
+msgstr "Une approche alternative est l'emploi du polymorphisme implicite :"
+
+#: index.docbook:195
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CASH_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CHEQUE_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CASH_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CHEQUE_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:197
+msgid "Notice that nowhere do we mention the <literal>Payment</literal> interface explicitly. Also notice that properties of <literal>Payment</literal> are mapped in each of the subclasses. If you want to avoid duplication, consider using XML entities (e.g. <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal> in the <literal>DOCTYPE</literal> declartion and <literal>&allproperties;</literal> in the mapping)."
+msgstr "Notez que nulle part nous ne mentionnons l'interface <literal>Payment</literal> explicitement. Notez aussi que des propriétés de <literal>Payment</literal> sont mappées dans chaque classe fille. Si vous voulez éviter des duplications, considérez l'utilisation des entités XML (cf. <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal> dans la déclaration du <literal>DOCTYPE</literal> et <literal>&allproperties;</literal> dans le mapping)."
+
+#: index.docbook:207
+msgid "The disadvantage of this approach is that Hibernate does not generate SQL <literal>UNION</literal>s when performing polymorphic queries."
+msgstr "L'inconvénient de cette approche est qu'Hibernate ne génère pas d'<literal>UNION</literal>s SQL lors de l'exécution des requêtes polymorphiques."
+
+#: index.docbook:212
+msgid "For this mapping strategy, a polymorphic association to <literal>Payment</literal> is usually mapped using <literal><any></literal>."
+msgstr "Pour cette stratégie de mapping, une association polymorphique pour <literal>Payment</literal> est habituellement mappée en utilisant <literal><any></literal>."
+
+#: index.docbook:217
+msgid ""
+ "<![CDATA[<any name=\"payment\" meta-type=\"string\" id-type=\"long\">\n"
+ " <meta-value value=\"CREDIT\" class=\"CreditCardPayment\"/>\n"
+ " <meta-value value=\"CASH\" class=\"CashPayment\"/>\n"
+ " <meta-value value=\"CHEQUE\" class=\"ChequePayment\"/>\n"
+ " <column name=\"PAYMENT_CLASS\"/>\n"
+ " <column name=\"PAYMENT_ID\"/>\n"
+ "</any>]]>"
+msgstr ""
+ "<![CDATA[<any name=\"payment\" meta-type=\"string\" id-type=\"long\">\n"
+ " <meta-value value=\"CREDIT\" class=\"CreditCardPayment\"/>\n"
+ " <meta-value value=\"CASH\" class=\"CashPayment\"/>\n"
+ " <meta-value value=\"CHEQUE\" class=\"ChequePayment\"/>\n"
+ " <column name=\"PAYMENT_CLASS\"/>\n"
+ " <column name=\"PAYMENT_ID\"/>\n"
+ "</any>]]>"
+
+#: index.docbook:222
+msgid "Mixing implicit polymorphism with other inheritance mappings"
+msgstr "Mélange du polymorphisme implicite avec d'autres mappings d'héritage"
+
+#: index.docbook:224
+msgid "There is one further thing to notice about this mapping. Since the subclasses are each mapped in their own <literal><class></literal> element (and since <literal>Payment</literal> is just an interface), each of the subclasses could easily be part of another inheritance hierarchy! (And you can still use polymorphic queries against the <literal>Payment</literal> interface.)"
+msgstr "Il y a une chose supplémentaire à noter à propos de ce mapping. Puisque les classes filles sont chacune mappées avec leur propre élément <literal><class></literal> (et puisque <literal>Payment</literal> est juste une interface), chaque classe fille pourrait facilement faire partie d'une autre hiérarchie d'héritage ! (Et vous pouvez encore faire des requêtes polymorphiques pour l'interface <literal>Payment</literal>)."
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"CREDIT_CARD\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"MasterCardPayment\" discriminator-value=\"MDC\"/>\n"
+ " <subclass name=\"VisaPayment\" discriminator-value=\"VISA\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"NonelectronicTransaction\" table=\"NONELECTRONIC_TXN\">\n"
+ " <id name=\"id\" type=\"long\" column=\"TXN_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " ...\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"CREDIT_CARD\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"MasterCardPayment\" discriminator-value=\"MDC\"/>\n"
+ " <subclass name=\"VisaPayment\" discriminator-value=\"VISA\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"NonelectronicTransaction\" table=\"NONELECTRONIC_TXN\">\n"
+ " <id name=\"id\" type=\"long\" column=\"TXN_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " ...\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:234
+msgid "Once again, we don't mention <literal>Payment</literal> explicitly. If we execute a query against the <literal>Payment</literal> interface - for example, <literal>from Payment</literal> - Hibernate automatically returns instances of <literal>CreditCardPayment</literal> (and its subclasses, since they also implement <literal>Payment</literal>), <literal>CashPayment</literal> and <literal>ChequePayment</literal> but not instances of <literal>NonelectronicTransaction</literal>."
+msgstr "Encore une fois, nous ne mentionnons pas explicitement <literal>Payment</literal>. Si nous exécutons une requête sur l'interface <literal>Payment</literal> - par exemple, <literal>from Payment</literal> - Hibernate retournera automatiquement les instances de <literal>CreditCardPayment</literal> (et ses classes filles puisqu'elles implémentent aussi <literal>Payment</literal>), <literal>CashPayment</literal> et <literal>ChequePayment</literal> mais pas les instances de <literal>NonelectronicTransaction</literal>."
+
+#: index.docbook:249
+msgid "Limitations"
+msgstr "Limitations"
+
+#: index.docbook:251
+msgid "There are certain limitations to the \"implicit polymorphism\" approach to the table per concrete-class mapping strategy. There are somewhat less restrictive limitations to <literal><union-subclass></literal> mappings."
+msgstr "Il y a certaines limitations à l'approche du \"polymorphisme implicite\" pour la stratégie de mapping d'une table par classe concrète. Il y a plutôt moins de limitations restrictives aux mappings <literal><union-subclass></literal>."
+
+#: index.docbook:258
+msgid "The following table shows the limitations of table per concrete-class mappings, and of implicit polymorphism, in Hibernate."
+msgstr "La table suivante montre les limitations des mappings d'une table par classe concrète, et du polymorphisme implicite, dans Hibernate."
+
+#: index.docbook:264
+msgid "Features of inheritance mappings"
+msgstr "Caractéristiques du mapping d'héritage"
+
+#: index.docbook:276
+msgid "Inheritance strategy"
+msgstr "Stratégie d'héritage"
+
+#: index.docbook:277
+msgid "Polymorphic many-to-one"
+msgstr "many-to-one polymorphique"
+
+#: index.docbook:278
+msgid "Polymorphic one-to-one"
+msgstr "one-to-one polymorphique"
+
+#: index.docbook:279
+msgid "Polymorphic one-to-many"
+msgstr "one-to-many polymorphique"
+
+#: index.docbook:280
+msgid "Polymorphic many-to-many"
+msgstr "many-to-many polymorphique"
+
+#: index.docbook:281
+msgid "Polymorphic <literal>load()/get()</literal>"
+msgstr "<literal>load()/get()</literal> polymorphique"
+
+#: index.docbook:282
+msgid "Polymorphic queries"
+msgstr "Requêtes polymorphiques"
+
+#: index.docbook:283
+msgid "Polymorphic joins"
+msgstr "Jointures polymorphiques"
+
+#: index.docbook:284
+msgid "Outer join fetching"
+msgstr "Récupération par jointure externe"
+
+#: index.docbook:289
+msgid "table per class-hierarchy"
+msgstr "une table par hiérarchie de classe"
+
+#: index.docbook:290, index.docbook:301, index.docbook:312
+msgid "<many-to-one>"
+msgstr "<many-to-one>"
+
+#: index.docbook:291, index.docbook:302, index.docbook:313
+msgid "<one-to-one>"
+msgstr "<one-to-one>"
+
+#: index.docbook:292, index.docbook:303
+msgid "<one-to-many>"
+msgstr "<one-to-many>"
+
+#: index.docbook:293, index.docbook:304, index.docbook:315
+msgid "<many-to-many>"
+msgstr "<many-to-many>"
+
+#: index.docbook:294, index.docbook:305, index.docbook:316
+msgid "s.get(Payment.class, id)"
+msgstr "s.get(Payment.class, id)"
+
+#: index.docbook:295, index.docbook:306, index.docbook:317, index.docbook:328
+msgid "from Payment p"
+msgstr "from Payment p"
+
+#: index.docbook:296, index.docbook:307, index.docbook:318
+msgid "from Order o join o.payment p"
+msgstr "from Order o join o.payment p"
+
+#: index.docbook:297, index.docbook:308, index.docbook:319
+msgid "supported"
+msgstr "supportée"
+
+#: index.docbook:300
+msgid "<entry>table per subclass</entry>"
+msgstr "une table par classe fille"
+
+#: index.docbook:311
+msgid "table per concrete-class (union-subclass)"
+msgstr "une table par classe concrète (union-subclass)"
+
+#: index.docbook:314
+msgid "<literal><one-to-many></literal> (for <literal>inverse=\"true\"</literal> only)"
+msgstr "<literal><one-to-many></literal> (pour <literal>inverse=\"true\"</literal> seulement)"
+
+#: index.docbook:322
+msgid "table per concrete class (implicit polymorphism)"
+msgstr "une table par classe concrète (polymorphisme implicite)"
+
+#: index.docbook:323
+msgid "<any>"
+msgstr "<any>"
+
+#: index.docbook:324, index.docbook:325, index.docbook:329, index.docbook:330
+msgid "not supported"
+msgstr "non supporté"
+
+#: index.docbook:326
+msgid "<many-to-any>"
+msgstr "<many-to-any>"
+
+#: index.docbook:327
+msgid "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+msgstr "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/performance.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/performance.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/performance.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1220 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Improving performance"
+msgstr "Améliorer les performances"
+
+#: index.docbook:8
+msgid "Fetching strategies"
+msgstr "Stratégies de chargement"
+
+#: index.docbook:10
+msgid "A <emphasis>fetching strategy</emphasis> is the strategy Hibernate will use for retrieving associated objects if the application needs to navigate the association. Fetch strategies may be declared in the O/R mapping metadata, or over-ridden by a particular HQL or <literal>Criteria</literal> query."
+msgstr "Une <emphasis>stratégie de chargement</emphasis> est une stratégie qu'Hibernate va utiliser pour récupérer des objets associés si l'application à besoin de naviguer à travers une association. Les stratégies de chargement peuvent être déclarées dans les méta-données de l'outil de mapping objet relationnel ou surchargées par une requête de type HQL ou <literal>Criteria</literal> particulière."
+
+#: index.docbook:17
+msgid "Hibernate3 defines the following fetching strategies:"
+msgstr "Hibernate3 définit les stratégies de chargement suivantes :"
+
+#: index.docbook:23
+msgid "<emphasis>Join fetching</emphasis> - Hibernate retrieves the associated instance or collection in the same <literal>SELECT</literal>, using an <literal>OUTER JOIN</literal>."
+msgstr "<emphasis>Chargement par jointure</emphasis> - Hibernate récupère l'instance associée ou la collection dans un même <literal>SELECT</literal>, en utilisant un <literal>OUTER JOIN</literal>."
+
+#: index.docbook:30
+msgid "<emphasis>Select fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated entity or collection. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr "<emphasis>Chargement par select</emphasis> - Un second <literal>SELECT</literal> est utilisé pour récupérer l'instance associée ou la collection. A moins que vous ne désactiviez explicitement le chargement tardif en spécifiant <literal>lazy=\"false\"</literal>, ce second select ne sera exécuté que lorsque vous accéderez réellement à l'association."
+
+#: index.docbook:39
+msgid "<emphasis>Subselect fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated collections for all entities retrieved in a previous query or fetch. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr "<emphasis>Chargement par sous-select</emphasis> - Un second <literal>SELECT</literal> est utilisé pour récupérer les associations pour toutes les entités récupérées dans une requête ou un chargement préalable. A moins que vous ne désactiviez explicitement le chargement tardif en spécifiant <literal>lazy=\"false\"</literal>, ce second select ne sera exécuté que lorsque vous accéderez réellement à l'association."
+
+#: index.docbook:48
+msgid "<emphasis>Batch fetching</emphasis> - an optimization strategy for select fetching - Hibernate retrieves a batch of entity instances or collections in a single <literal>SELECT</literal>, by specifying a list of primary keys or foreign keys."
+msgstr "<emphasis>Chargement par lot</emphasis> - Il s'agit d'une stratégie d'optimisation pour le chargement par select - Hibernate récupère un lot d'instances ou de collections en un seul <literal>SELECT</literal> en spécifiant une liste de clé primaire ou de clé étrangère."
+
+#: index.docbook:57
+msgid "Hibernate also distinguishes between:"
+msgstr "Hibernate fait également la distinction entre :"
+
+#: index.docbook:63
+msgid "<emphasis>Immediate fetching</emphasis> - an association, collection or attribute is fetched immediately, when the owner is loaded."
+msgstr "<emphasis>Chargement immédiat</emphasis> - Une association, une collection ou un attribut est chargé immédiatement lorsque l'objet auquel appartient cet élément est chargé."
+
+#: index.docbook:69
+msgid "<emphasis>Lazy collection fetching</emphasis> - a collection is fetched when the application invokes an operation upon that collection. (This is the default for collections.)"
+msgstr "<emphasis>Chargement tardif d'une collection</emphasis> - Une collection est chargée lorque l'application invoque une méthode sur cette collection (il s'agit du mode de chargement par défaut pour les collections)."
+
+#: index.docbook:76
+msgid "<emphasis>\"Extra-lazy\" collection fetching</emphasis> - individual elements of the collection are accessed from the database as needed. Hibernate tries not to fetch the whole collection into memory unless absolutely needed (suitable for very large collections)"
+msgstr "<emphasis>Chargement \"super tardif\" d'une collection</emphasis> - les éléments de la collection sont récupérés individuellement depuis la base de données lorsque nécessaire. Hibernate essaie de ne pas charger toute la collection en mémoire sauf si cela est absolument nécessaire (bien adapté aux très grandes collections)."
+
+#: index.docbook:84
+msgid "<emphasis>Proxy fetching</emphasis> - a single-valued association is fetched when a method other than the identifier getter is invoked upon the associated object."
+msgstr "<emphasis>Chargement par proxy</emphasis> - une association vers un seul objet est chargée lorsqu'une méthode autre que le getter sur l'identifiant est appelée sur l'objet associé."
+
+#: index.docbook:91
+msgid "<emphasis>\"No-proxy\" fetching</emphasis> - a single-valued association is fetched when the instance variable is accessed. Compared to proxy fetching, this approach is less lazy (the association is fetched even when only the identifier is accessed) but more transparent, since no proxy is visible to the application. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr "<emphasis>Chargement \"sans proxy\"</emphasis> - une association vers un seul objet est chargée lorsque l'on accède à cet objet. Par rapport au chargement par proxy, cette approche est moins tardif (l'association est quand même chargée même si on n'accède qu'à l'identifiant) mais plus transparente car il n'y a pas de proxy visible dans l'application. Cette approche requiert une instrumentation du bytecode à la compilation et est rarement nécessaire."
+
+#: index.docbook:101
+msgid "<emphasis>Lazy attribute fetching</emphasis> - an attribute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr "<emphasis>Chargement tardif des attributs</emphasis> - Un attribut ou un objet associé seul est chargé lorsque l'on y accède. Cette approche requiert une instrumentation du bytecode à la compilation et est rarement nécessaire."
+
+#: index.docbook:110
+msgid "We have two orthogonal notions here: <emphasis>when</emphasis> is the association fetched, and <emphasis>how</emphasis> is it fetched (what SQL is used). Don't confuse them! We use <literal>fetch</literal> to tune performance. We may use <literal>lazy</literal> to define a contract for what data is always available in any detached instance of a particular class."
+msgstr "Nous avons ici deux notions orthogonales : <emphasis>quand</emphasis> l'association est chargée et <emphasis>comment</emphasis> (quelle requête SQL est utilisée). Il ne faut pas confondre les deux. Le mode de chargement est utilisé pour améliorer les performances. On peut utiliser le mode tardif pour définir un contrat sur quelles données sont toujours accessibles sur une instance détachée d'une classe particulière."
+
+#: index.docbook:119
+msgid "Working with lazy associations"
+msgstr "Travailler avec des associations chargées tardivement"
+
+#: index.docbook:121
+msgid "By default, Hibernate3 uses lazy select fetching for collections and lazy proxy fetching for single-valued associations. These defaults make sense for almost all associations in almost all applications."
+msgstr "Par défaut, Hibernate3 utilise le chargement tardif par select pour les collections et le chargement tardif par proxy pour les associations vers un seul objet. Ces valeurs par défaut sont valables pour la plupart des associations dans la plupart des applications."
+
+#: index.docbook:127
+msgid "<emphasis>Note:</emphasis> if you set <literal>hibernate.default_batch_fetch_size</literal>, Hibernate will use the batch fetch optimization for lazy fetching (this optimization may also be enabled at a more granular level)."
+msgstr "<emphasis>Note :</emphasis> si vous définissez <literal>hibernate.default_batch_fetch_size</literal>, Hibernate va utiliser l'optimisation du chargement par lot pour le chargement tardif (cette optimisation peut aussi être activée à un niveau de granularité plus fin)."
+
+#: index.docbook:134
+msgid "However, lazy fetching poses one problem that you must be aware of. Access to a lazy association outside of the context of an open Hibernate session will result in an exception. For example:"
+msgstr "Cependant, le chargement tardif pose un problème qu'il faut connaitre. L'accès à une association définie comme \"tardive\", hors du contexte d'une session hibernate ouverte, va conduire à une exception. Par exemple :"
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[s = sessions.openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ " \n"
+ "User u = (User) s.createQuery(\"from User u where u.name=:userName\")\n"
+ " .setString(\"userName\", userName).uniqueResult();\n"
+ "Map permissions = u.getPermissions();\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();\n"
+ "\n"
+ "Integer accessLevel = (Integer) permissions.get(\"accounts\"); // Error!]]>"
+msgstr ""
+ "<![CDATA[s = sessions.openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ " \n"
+ "User u = (User) s.createQuery(\"from User u where u.name=:userName\")\n"
+ " .setString(\"userName\", userName).uniqueResult();\n"
+ "Map permissions = u.getPermissions();\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();\n"
+ "\n"
+ "Integer accessLevel = (Integer) permissions.get(\"accounts\"); // Error!]]>"
+
+#: index.docbook:142
+msgid "Since the permissions collection was not initialized when the <literal>Session</literal> was closed, the collection will not be able to load its state. <emphasis>Hibernate does not support lazy initialization for detached objects</emphasis>. The fix is to move the code that reads from the collection to just before the transaction is committed."
+msgstr "Etant donné que la collection des permissions n'a pas été initialisée avant que la <literal>Session</literal> soit fermée, la collection n'est pas capable de se charger. <emphasis>Hibernate ne supporte pas le chargement tardif pour des objets détachés</emphasis>. La solution à ce problème est de déplacer le code qui lit la collection avant le \"commit\" de la transaction."
+
+#: index.docbook:150
+msgid "Alternatively, we could use a non-lazy collection or association, by specifying <literal>lazy=\"false\"</literal> for the association mapping. However, it is intended that lazy initialization be used for almost all collections and associations. If you define too many non-lazy associations in your object model, Hibernate will end up needing to fetch the entire database into memory in every transaction!"
+msgstr "Une autre alternative est d'utiliser une collection ou une association non \"tardive\" en spécifiant <literal>lazy=\"false\"</literal> dans le mapping de l'association. Cependant il est prévu que le chargement tardif soit utilisé pour quasiment toutes les collections ou associations. Si vous définissez trop d'associtions non \"tardives\" dans votre modèle objet, Hibernate va finir par devoir charger toute la base de données en mémoire à chaque transaction !"
+
+#: index.docbook:159
+msgid "On the other hand, we often want to choose join fetching (which is non-lazy by nature) instead of select fetching in a particular transaction. We'll now see how to customize the fetching strategy. In Hibernate3, the mechanisms for choosing a fetch strategy are identical for single-valued associations and collections."
+msgstr "D'un autre côté, on veut souvent choisir un chargement par jointure (qui est par défaut non tardif) à la place du chargement par select dans une transaction particulière. Nous allons maintenant voir comment adapter les stratégies de chargement. Dans Hibernate3 les mécanismes pour choisir une stratégie de chargement sont identiques que l'on ait une association vers un objet simple ou vers une collection."
+
+#: index.docbook:170
+msgid "Tuning fetch strategies"
+msgstr "Personnalisation des stratégies de chargement"
+
+#: index.docbook:172
+msgid "Select fetching (the default) is extremely vulnerable to N+1 selects problems, so we might want to enable join fetching in the mapping document:"
+msgstr "Le chargement par select (mode par défaut) est très vulnérable au problème du N+1 selects, du coup vous pouvez avoir envie d'activer le chargement par jointure dans les fichiers de mapping :"
+
+#: index.docbook:177
+msgid ""
+ "<![CDATA[<set name=\"permissions\" \n"
+ " fetch=\"join\">\n"
+ " <key column=\"userId\"/>\n"
+ " <one-to-many class=\"Permission\"/>\n"
+ "</set]]>"
+msgstr ""
+ "<![CDATA[<set name=\"permissions\" \n"
+ " fetch=\"join\">\n"
+ " <key column=\"userId\"/>\n"
+ " <one-to-many class=\"Permission\"/>\n"
+ "</set]]>"
+
+#: index.docbook:179
+msgid "<![CDATA[<many-to-one name=\"mother\" class=\"Cat\" fetch=\"join\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"mother\" class=\"Cat\" fetch=\"join\"/>]]>"
+
+#: index.docbook:181
+msgid "The <literal>fetch</literal> strategy defined in the mapping document affects:"
+msgstr "La stratégie de chargement définie à l'aide du mot <literal>fetch</literal> dans les fichiers de mapping affecte :"
+
+#: index.docbook:187
+msgid "retrieval via <literal>get()</literal> or <literal>load()</literal>"
+msgstr "La récupération via <literal>get()</literal> ou <literal>load()</literal>"
+
+#: index.docbook:192
+msgid "retrieval that happens implicitly when an association is navigated"
+msgstr "La récupération implicite lorsque l'on navigue à travers une association"
+
+#: index.docbook:197
+msgid "<literal>Criteria</literal> queries"
+msgstr "Les requêtes de type <literal>Criteria</literal>"
+
+#: index.docbook:202
+msgid "HQL queries if <literal>subselect</literal> fetching is used"
+msgstr "Les requêtes HQL si l'on utilise le chargement par <literal>subselect</literal>"
+
+#: index.docbook:208
+msgid "No matter what fetching strategy you use, the defined non-lazy graph is guaranteed to be loaded into memory. Note that this might result in several immediate selects being used to execute a particular HQL query."
+msgstr "Quelle que soit la stratégie de chargement que vous utilisez, la partie du graphe d'objets qui est définie comme non \"tardive\" sera chargée en mémoire. Cela peut mener à l'exécution de plusieurs selects successifs pour une seule requête HQL."
+
+#: index.docbook:214
+msgid "Usually, we don't use the mapping document to customize fetching. Instead, we keep the default behavior, and override it for a particular transaction, using <literal>left join fetch</literal> in HQL. This tells Hibernate to fetch the association eagerly in the first select, using an outer join. In the <literal>Criteria</literal> query API, you would use <literal>setFetchMode(FetchMode.JOIN)</literal>."
+msgstr "On n'utilise pas souvent les documents de mapping pour adapter le chargement. Au lieu de cela, on conserve le comportement par défaut et on le surcharge pour une transaction particulière en utilisant <literal>left join fetch</literal> dans les requêtes HQL. Cela indique à hibernate à Hibernate de charger l'association de manière agressive lors du premier select en utilisant une jointure externe. Dans l'API Criteria vous pouvez utiliser la méthode <literal>setFetchMode(FetchMode.JOIN)</literal>"
+
+#: index.docbook:223
+msgid "If you ever feel like you wish you could change the fetching strategy used by <literal>get()</literal> or <literal>load()</literal>, simply use a <literal>Criteria</literal> query, for example:"
+msgstr "Si vous ne vous sentez pas prêt à modifier la stratégie de chargement utilisé par <literal>get()</literal> ou <literal>load()</literal>, vous pouvez juste utiliser une requête de type <literal>Criteria</literal> comme par exemple :"
+
+#: index.docbook:229
+msgid ""
+ "<![CDATA[User user = (User) session.createCriteria(User.class)\n"
+ " .setFetchMode(\"permissions\", FetchMode.JOIN)\n"
+ " .add( Restrictions.idEq(userId) )\n"
+ " .uniqueResult();]]>"
+msgstr ""
+ "<![CDATA[User user = (User) session.createCriteria(User.class)\n"
+ " .setFetchMode(\"permissions\", FetchMode.JOIN)\n"
+ " .add( Restrictions.idEq(userId) )\n"
+ " .uniqueResult();]]>"
+
+#: index.docbook:231
+msgid "(This is Hibernate's equivalent of what some ORM solutions call a \"fetch plan\".)"
+msgstr "(Il s'agit de l'équivalent pour Hibernate de ce que d'autres outils de mapping appellent un \"fetch plan\" ou \"plan de chargement\")"
+
+#: index.docbook:235
+msgid "A completely different way to avoid problems with N+1 selects is to use the second-level cache."
+msgstr "Une autre manière complètement différente d'éviter le problème des N+1 selects est d'utiliser le cache de second niveau."
+
+#: index.docbook:243
+msgid "Single-ended association proxies"
+msgstr "Proxys pour des associations vers un seul objet"
+
+#: index.docbook:245
+msgid "Lazy fetching for collections is implemented using Hibernate's own implementation of persistent collections. However, a different mechanism is needed for lazy behavior in single-ended associations. The target entity of the association must be proxied. Hibernate implements lazy initializing proxies for persistent objects using runtime bytecode enhancement (via the excellent CGLIB library)."
+msgstr "Le chargement tardif des collections est implémenté par Hibernate en utilisant ses propres implémentations pour des collections persistantes. Si l'on veut un chargement tardif pour des associations vers un seul objet métier il faut utiliser un autre mécanisme. L'entité qui est pointée par l'association doit être masquée derrière un proxy. Hibernate implémente l'initialisation tardive des proxys sur des objets persistents via une mise à jour à chaud du bytecode (à l'aide de l'excellente librairie CGLIB)."
+
+#: index.docbook:253
+msgid "By default, Hibernate3 generates proxies (at startup) for all persistent classes and uses them to enable lazy fetching of <literal>many-to-one</literal> and <literal>one-to-one</literal> associations."
+msgstr "Par défaut, Hibernate génère des proxys (au démarrage) pour toutes les classes persistantes et les utilise pour activer le chargement tardif des associations <literal>many-to-one</literal> et <literal>one-to-one</literal>."
+
+#: index.docbook:259
+msgid "The mapping file may declare an interface to use as the proxy interface for that class, with the <literal>proxy</literal> attribute. By default, Hibernate uses a subclass of the class. <emphasis>Note that the proxied class must implement a default constructor with at least package visibility. We recommend this constructor for all persistent classes!</emphasis>"
+msgstr "Le fichier de mapping peut déclarer une interface qui sera utilisée par le proxy d'interfaçage pour cette classe à l'aide de l'attribut <literal>proxy</literal>. Par défaut Hibernate utilises une sous classe de la classe persistante. <emphasis>Il faut que les classes pour lesquelles on ajoute un proxy implémentent un constructeur par défaut de visibilité au moins package. Ce constructeur est recommandé pour toutes les classes persistantes !</emphasis>"
+
+#: index.docbook:266
+msgid "There are some gotchas to be aware of when extending this approach to polymorphic classes, eg."
+msgstr "Il y a quelques précautions à prendre lorsque l'on étend cette approche à des classes polymorphiques, exemple :"
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<class name=\"Cat\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Cat\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCat\" proxy=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ " </class>]]>"
+
+#: index.docbook:273
+msgid "Firstly, instances of <literal>Cat</literal> will never be castable to <literal>DomesticCat</literal>, even if the underlying instance is an instance of <literal>DomesticCat</literal>:"
+msgstr "Tout d'abord, les instances de <literal>Cat</literal> ne pourront jamais être \"castées\" en <literal>DomesticCat</literal>, même si l'instance sous jacente est une instance de <literal>DomesticCat</literal> :"
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)\n"
+ "if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy\n"
+ " DomesticCat dc = (DomesticCat) cat; // Error!\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instancie un proxy (n'interroge pas la base de données)\n"
+ "if ( cat.isDomesticCat() ) { // interroge la base de données pour initialiser le proxy\n"
+ " DomesticCat dc = (DomesticCat) cat; // Erreur !\n"
+ " ....\n"
+ "}]]>"
+
+#: index.docbook:281
+msgid "Secondly, it is possible to break proxy <literal>==</literal>."
+msgstr "Deuxièmement, il est possible de casser la notion d'<literal>==</literal> des proxy."
+
+#: index.docbook:285
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy\n"
+ "DomesticCat dc = \n"
+ " (DomesticCat) session.load(DomesticCat.class, id); // acquire new DomesticCat proxy!\n"
+ "System.out.println(cat==dc); // false]]>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instancie un proxy Cat\n"
+ "DomesticCat dc = \n"
+ " (DomesticCat) session.load(DomesticCat.class, id); // acquiert un nouveau proxy DomesticCat\n"
+ "System.out.println(cat==dc); // faux]]>"
+
+#: index.docbook:287
+msgid "However, the situation is not quite as bad as it looks. Even though we now have two references to different proxy objects, the underlying instance will still be the same object:"
+msgstr "Cette situation n'est pas si mauvaise qu'il n'y parait. Même si nous avons deux références à deux objets proxys différents, l'instance de base sera quand même le même objet :"
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy\n"
+ "System.out.println( dc.getWeight() ); // 11.0]]>"
+msgstr ""
+ "<![CDATA[cat.setWeight(11.0); // interroge la base de données pour initialiser le proxy\n"
+ "System.out.println( dc.getWeight() ); // 11.0]]>"
+
+#: index.docbook:294
+msgid "Third, you may not use a CGLIB proxy for a <literal>final</literal> class or a class with any <literal>final</literal> methods."
+msgstr "Troisièmement, vous ne pourrez pas utiliser un proxy CGLIB pour une classe <literal>final</literal> ou pour une classe contenant la moindre méthode <literal>final</literal>."
+
+#: index.docbook:299
+msgid "Finally, if your persistent object acquires any resources upon instantiation (eg. in initializers or default constructor), then those resources will also be acquired by the proxy. The proxy class is an actual subclass of the persistent class."
+msgstr "Enfin, si votre objet persistant obtient une ressource à l'instanciation (par example dans les initialiseurs ou dans le contructeur par défaut), alors ces ressources seront aussi obtenues par le proxy. La classe proxy est vraiment une sous classe de la classe persistante."
+
+#: index.docbook:305
+msgid "These problems are all due to fundamental limitations in Java's single inheritance model. If you wish to avoid these problems your persistent classes must each implement an interface that declares its business methods. You should specify these interfaces in the mapping file. eg."
+msgstr "Ces problèmes sont tous dus aux limitations fondamentales du modèle d'héritage unique de Java. Si vous souhaitez éviter ces problèmes, vos classes persistantes doivent chacune implémenter une interface qui déclare ses méthodes métier. Vous devriez alors spécifier ces interfaces dans le fichier de mapping :"
+
+#: index.docbook:311
+msgid ""
+ "<![CDATA[<class name=\"CatImpl\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCatImpl\" proxy=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CatImpl\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCatImpl\" proxy=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:313
+msgid "where <literal>CatImpl</literal> implements the interface <literal>Cat</literal> and <literal>DomesticCatImpl</literal> implements the interface <literal>DomesticCat</literal>. Then proxies for instances of <literal>Cat</literal> and <literal>DomesticCat</literal> may be returned by <literal>load()</literal> or <literal>iterate()</literal>. (Note that <literal>list()</literal> does not usually return proxies.)"
+msgstr "où <literal>CatImpl</literal> implémente l'interface <literal>Cat</literal> et <literal>DomesticCatImpl</literal> implémente l'interface <literal>DomesticCat</literal>. Ainsi, des proxys pour les instances de <literal>Cat</literal> et <literal>DomesticCat</literal> pourraient être retournées par <literal>load()</literal> ou <literal>iterate()</literal> (Notez que <literal>list()</literal> ne retourne généralement pas de proxy)."
+
+#: index.docbook:321
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);\n"
+ "Iterator iter = session.createQuery(\"from CatImpl as cat where cat.name='fritz'\").iterate();\n"
+ "Cat fritz = (Cat) iter.next();]]>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);\n"
+ "Iterator iter = session.createQuery(\"from CatImpl as cat where cat.name='fritz'\").iterate();\n"
+ "Cat fritz = (Cat) iter.next();]]>"
+
+#: index.docbook:323
+msgid "Relationships are also lazily initialized. This means you must declare any properties to be of type <literal>Cat</literal>, not <literal>CatImpl</literal>."
+msgstr "Les relations sont aussi initialisées tardivement. Ceci signifie que vous devez déclarer chaque propriété comme étant de type <literal>Cat</literal>, et non <literal>CatImpl</literal>."
+
+#: index.docbook:328
+msgid "Certain operations do <emphasis>not</emphasis> require proxy initialization"
+msgstr "Certaines opérations ne nécessitent pas l'initialisation du proxy"
+
+#: index.docbook:334
+msgid "<literal>equals()</literal>, if the persistent class does not override <literal>equals()</literal>"
+msgstr "<literal>equals()</literal>, si la classe persistante ne surcharge pas <literal>equals()</literal>"
+
+#: index.docbook:340
+msgid "<literal>hashCode()</literal>, if the persistent class does not override <literal>hashCode()</literal>"
+msgstr "<literal>hashCode()</literal>, si la classe persistante ne surcharge pas <literal>hashCode()</literal>"
+
+#: index.docbook:346
+msgid "The identifier getter method"
+msgstr "Le getter de l'identifiant"
+
+#: index.docbook:352
+msgid "Hibernate will detect persistent classes that override <literal>equals()</literal> or <literal>hashCode()</literal>."
+msgstr "Hibernate détectera les classes qui surchargent <literal>equals()</literal> ou <literal>hashCode()</literal>."
+
+#: index.docbook:357
+msgid "By choosing <literal>lazy=\"no-proxy\"</literal> instead of the default <literal>lazy=\"proxy\"</literal>, we can avoid the problems associated with typecasting. However, we will require buildtime bytecode instrumentation, and all operations will result in immediate proxy initialization."
+msgstr "Eh choisissant <literal>lazy=\"no-proxy\"</literal> au lieu de <literal>lazy=\"proxy\"</literal> qui est la valeur par défaut, il est possible d'éviter les problèmes liés au transtypage. Il faudra alors une instrumentation du bytecode à la compilation et toutes les opérations résulterons immédiatement en une initialisation du proxy."
+
+#: index.docbook:367
+msgid "Initializing collections and proxies"
+msgstr "Initialisation des collections et des proxys"
+
+#: index.docbook:369
+msgid "A <literal>LazyInitializationException</literal> will be thrown by Hibernate if an uninitialized collection or proxy is accessed outside of the scope of the <literal>Session</literal>, ie. when the entity owning the collection or having the reference to the proxy is in the detached state."
+msgstr "Une exception de type <literal>LazyInitializationException</literal> sera renvoyée par hibernate si une collection ou un proxy non initialisé est accédé en dehors de la portée de la <literal>Session</literal>, e.g. lorsque l'entité à laquelle appartient la collection ou qui a une référence vers le proxy est dans l'état \"détachée\"."
+
+#: index.docbook:375
+msgid "Sometimes we need to ensure that a proxy or collection is initialized before closing the <literal>Session</literal>. Of course, we can alway force initialization by calling <literal>cat.getSex()</literal> or <literal>cat.getKittens().size()</literal>, for example. But that is confusing to readers of the code and is not convenient for generic code."
+msgstr "Parfois, nous devons nous assurer qu'un proxy ou une collection est initialisée avant de fermer la <literal>Session</literal>. Bien sûr, nous pouvons toujours forcer l'initialisation en appelant par exemple <literal>cat.getSex()</literal> ou <literal>cat.getKittens().size()</literal>. Mais ceci n'est pas très lisible pour les personnes parcourant le code et n'est pas très générique."
+
+#: index.docbook:382
+msgid "The static methods <literal>Hibernate.initialize()</literal> and <literal>Hibernate.isInitialized()</literal> provide the application with a convenient way of working with lazily initialized collections or proxies. <literal>Hibernate.initialize(cat)</literal> will force the initialization of a proxy, <literal>cat</literal>, as long as its <literal>Session</literal> is still open. <literal>Hibernate.initialize( cat.getKittens() )</literal> has a similar effect for the collection of kittens."
+msgstr "Les méthodes statiques <literal>Hibernate.initialize()</literal> et <literal>Hibernate.isInitialized()</literal> fournissent à l'application un moyen de travailler avec des proxys ou des collections initialisés. <literal>Hibernate.initialize(cat)</literal> forcera l'initialisation d'un proxy de <literal>cat</literal>, si tant est que sa <literal>Session</literal> est ouverte. <literal>Hibernate.initialize( cat.getKittens() )</literal> a le même effet sur la collection kittens."
+
+#: index.docbook:391
+msgid "Another option is to keep the <literal>Session</literal> open until all needed collections and proxies have been loaded. In some application architectures, particularly where the code that accesses data using Hibernate, and the code that uses it are in different application layers or different physical processes, it can be a problem to ensure that the <literal>Session</literal> is open when a collection is initialized. There are two basic ways to deal with this issue:"
+msgstr "Une autre option est de conserver la <literal>Session</literal> ouverte jusqu'à ce que toutes les collections et tous les proxys aient été chargés. Dans certaines architectures applicatives, particulièrement celles ou le code d'accès aux données via hiberante et le code qui utilise ces données sont dans des couches applicatives différentes ou des processus physiques différents, il peut devenir problématique de garantir que la <literal>Session</literal> est ouverte lorsqu'une collection est initialisée. Il y a deux moyens de traiter ce problème :"
+
+#: index.docbook:402
+msgid "In a web-based application, a servlet filter can be used to close the <literal>Session</literal> only at the very end of a user request, once the rendering of the view is complete (the <emphasis>Open Session in View</emphasis> pattern). Of course, this places heavy demands on the correctness of the exception handling of your application infrastructure. It is vitally important that the <literal>Session</literal> is closed and the transaction ended before returning to the user, even when an exception occurs during rendering of the view. See the Hibernate Wiki for examples of this \"Open Session in View\" pattern."
+msgstr "Dans une application web, un filtre de servlet peut être utilisé pour fermer la <literal>Session</literal> uniquement lorsque la requête a été entièrement traitée, lorsque le rendu de la vue est fini (il s'agit du pattern <emphasis>Open Session in View</emphasis>). Bien sûr, cela demande plus d'attention à la bonne gestion des exceptions de l'application. Il est d'une importance vitale que la <literal>Session</literal> soit fermée et la transaction terminée avant que l'on rende la main à l'utilisateur même si une exception survient durant le traitement de la vue. Voir le wiki Hibernate pour des exemples sur le pattern \"Open Session in View\"."
+
+#: index.docbook:415
+msgid "In an application with a separate business tier, the business logic must \"prepare\" all collections that will be needed by the web tier before returning. This means that the business tier should load all the data and return all the data already initialized to the presentation/web tier that is required for a particular use case. Usually, the application calls <literal>Hibernate.initialize()</literal> for each collection that will be needed in the web tier (this call must occur before the session is closed) or retrieves the collection eagerly using a Hibernate query with a <literal>FETCH</literal> clause or a <literal>FetchMode.JOIN</literal> in <literal>Criteria</literal>. This is usually easier if you adopt the <emphasis>Command</emphasis> pattern instead of a <emphasis>Session Facade</emphasis>."
+msgstr "Dans une application avec une couche métier séparée, la couche contenant la logique métier doit \"préparer\" toutes les collections qui seront nécessaires à la couche web avant de retourner les données. Cela signifie que la couche métier doit charger toutes les données et retourner toutes les données déjà initialisées à la couche de présentation/web pour un cas d'utilisation donné. En général l'application appelle la méthode <literal>Hibernate.initialize()</literal> pour chaque collection nécessaire dans la couche web (cet appel doit être fait avant la fermeture de la session) ou bien récupère les collections de manière agressive à l'aide d'une requête HQL avec une clause <literal>FETCH</literal> ou à l'aide du mode <literal>FetchMode.JOIN</literal> pour une requête de type <literal>Criteria</literal>. Cela est en général plus facile si vous utilisez le pattern <emphasis>Command</emphasis> plutôt que <emphasis>Session Facade</emphasis!
>."
+
+#: index.docbook:430
+msgid "You may also attach a previously loaded object to a new <literal>Session</literal> with <literal>merge()</literal> or <literal>lock()</literal> before accessing uninitialized collections (or other proxies). No, Hibernate does not, and certainly <emphasis>should</emphasis> not do this automatically, since it would introduce ad hoc transaction semantics!"
+msgstr "Vous pouvez également attacher à une <literal>Session</literal> un objet chargé au préalable à l'aide des méthodes <literal>merge()</literal> ou <literal>lock()</literal> avant d'accéder aux collections (ou aux proxys) non initialisés. Non, Hibernate ne fait pas, et ne doit pas faire, cela automatiquement car cela pourrait introduire une sémantique transactionnelle ad hoc."
+
+#: index.docbook:440
+msgid "Sometimes you don't want to initialize a large collection, but still need some information about it (like its size) or a subset of the data."
+msgstr "Parfois, vous ne voulez pas initialiser une grande collection mais vous avez quand même besoin d'informations sur elle (comme sa taille) ou un sous ensemble de ses données"
+
+#: index.docbook:445
+msgid "You can use a collection filter to get the size of a collection without initializing it:"
+msgstr "Vous pouvez utiliser un filtre de collection pour récupérer sa taille sans l'initialiser :"
+
+#: index.docbook:449
+msgid "<![CDATA[( (Integer) s.createFilter( collection, \"select count(*)\" ).list().get(0) ).intValue()]]>"
+msgstr "<![CDATA[( (Integer) s.createFilter( collection, \"select count(*)\" ).list().get(0) ).intValue()]]>"
+
+#: index.docbook:451
+msgid "The <literal>createFilter()</literal> method is also used to efficiently retrieve subsets of a collection without needing to initialize the whole collection:"
+msgstr "La méthode <literal>createFilter()</literal> est également utilisée pour récupérer de manière efficace des sous ensembles d'une collection sans avoir besoin de l'initialiser dans son ensemble."
+
+#: index.docbook:456
+msgid "<![CDATA[s.createFilter( lazyCollection, \"\").setFirstResult(0).setMaxResults(10).list();]]>"
+msgstr "<![CDATA[s.createFilter( lazyCollection, \"\").setFirstResult(0).setMaxResults(10).list();]]>"
+
+#: index.docbook:461
+msgid "Using batch fetching"
+msgstr "Utiliser le chargement par lot"
+
+#: index.docbook:463
+msgid "Hibernate can make efficient use of batch fetching, that is, Hibernate can load several uninitialized proxies if one proxy is accessed (or collections. Batch fetching is an optimization of the lazy select fetching strategy. There are two ways you can tune batch fetching: on the class and the collection level."
+msgstr "Pour améliorer les performances, Hibernate peut utiliser le chargement par lot ce qui veut dire qu'Hibernate peut charger plusieurs proxys (ou collections) non initialisés en une seule requête lorsque l'on accède à l'un de ces proxys. Le chargement par lot est une optimisation intimement liée à la stratégie de chargement tardif par select. Il y a deux moyens d'activer le chargement par lot : au niveau de la classe et au niveau de la collection."
+
+#: index.docbook:469
+msgid "Batch fetching for classes/entities is easier to understand. Imagine you have the following situation at runtime: You have 25 <literal>Cat</literal> instances loaded in a <literal>Session</literal>, each <literal>Cat</literal> has a reference to its <literal>owner</literal>, a <literal>Person</literal>. The <literal>Person</literal> class is mapped with a proxy, <literal>lazy=\"true\"</literal>. If you now iterate through all cats and call <literal>getOwner()</literal> on each, Hibernate will by default execute 25 <literal>SELECT</literal> statements, to retrieve the proxied owners. You can tune this behavior by specifying a <literal>batch-size</literal> in the mapping of <literal>Person</literal>:"
+msgstr "Le chargement par lot pour les classes/entités est plus simple à comprendre. Imaginez que vous ayez la situation suivante à l'exécution : vous avez 25 instances de <literal>Cat</literal> chargées dans une <literal>Session</literal>, chaque <literal>Cat</literal> a une référence à son <literal>owner</literal>, une <literal>Person</literal>. La classe <literal>Person</literal> est mappée avec un proxy, <literal>lazy=\"true\"</literal>. Si vous itérez sur tous les cats et appelez <literal>getOwner()</literal> sur chacun d'eux, Hibernate exécutera par défaut 25 <literal>SELECT</literal>, pour charger les owners (initialiser le proxy). Vous pouvez paramétrer ce comportement en spécifiant une <literal>batch-size</literal> (taille du lot) dans le mapping de <literal>Person</literal> :"
+
+#: index.docbook:479
+msgid "<![CDATA[<class name=\"Person\" batch-size=\"10\">...</class>]]>"
+msgstr "<![CDATA[<class name=\"Person\" batch-size=\"10\">...</class>]]>"
+
+#: index.docbook:481
+msgid "Hibernate will now execute only three queries, the pattern is 10, 10, 5."
+msgstr "Hibernate exécutera désormais trois requêtes, en chargeant respectivement 10, 10, et 5 entités."
+
+#: index.docbook:485
+msgid "You may also enable batch fetching of collections. For example, if each <literal>Person</literal> has a lazy collection of <literal>Cat</literal>s, and 10 persons are currently loaded in the <literal>Sesssion</literal>, iterating through all persons will generate 10 <literal>SELECT</literal>s, one for every call to <literal>getCats()</literal>. If you enable batch fetching for the <literal>cats</literal> collection in the mapping of <literal>Person</literal>, Hibernate can pre-fetch collections:"
+msgstr "Vous pouvez aussi activer le chargement par lot pour les collections. Par exemple, si chaque <literal>Person</literal> a une collection chargée tardivement de <literal>Cat</literal>s, et que 10 personnes sont actuellement chargées dans la <literal>Session</literal>, itérer sur toutes les persons générera 10 <literal>SELECT</literal>s, un pour chaque appel de <literal>getCats()</literal>. Si vous activez le chargement par lot pour la collection <literal>cats</literal> dans le mapping de <literal>Person</literal>, Hibernate pourra précharger les collections :"
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <set name=\"cats\" batch-size=\"3\">\n"
+ " ...\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <set name=\"cats\" batch-size=\"3\">\n"
+ " ...\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:496
+msgid "With a <literal>batch-size</literal> of 3, Hibernate will load 3, 3, 3, 1 collections in four <literal>SELECT</literal>s. Again, the value of the attribute depends on the expected number of uninitialized collections in a particular <literal>Session</literal>."
+msgstr "Avec une taille de lot (<literal>batch-size</literal>) de 3, Hibernate chargera respectivement 3, 3, 3, et 1 collections en quatre <literal>SELECT</literal>s. Encore une fois, la valeur de l'attribut dépend du nombre de collections non initialisées dans une <literal>Session</literal> particulière."
+
+#: index.docbook:502
+msgid "Batch fetching of collections is particularly useful if you have a nested tree of items, ie. the typical bill-of-materials pattern. (Although a <emphasis>nested set</emphasis> or a <emphasis>materialized path</emphasis> might be a better option for read-mostly trees.)"
+msgstr "Le chargement par lot de collections est particulièrement utile si vous avez des arborescenses récursives d'éléments (typiquement, le schéma facture de matériels). (Bien qu'un <emphasis>sous ensemble</emphasis> ou un <emphasis>chemin matérialisé</emphasis> est sans doute une meilleure option pour des arbres principalement en lecture.)"
+
+#: index.docbook:511
+msgid "Using subselect fetching"
+msgstr "Utilisation du chargement par sous select"
+
+#: index.docbook:513
+msgid "If one lazy collection or single-valued proxy has to be fetched, Hibernate loads all of them, re-running the original query in a subselect. This works in the same way as batch-fetching, without the piecemeal loading."
+msgstr "Si une collection ou un proxy vers un objet doit être chargé, Hibernate va tous les charger en ré-exécutant la requête orignial dans un sous select. Cela fonctionne de la même manière que le chargement par lot sans la possibilité de fragmenter le chargement."
+
+#: index.docbook:524
+msgid "Using lazy property fetching"
+msgstr "Utiliser le chargement tardif des propriétés"
+
+#: index.docbook:526
+msgid "Hibernate3 supports the lazy fetching of individual properties. This optimization technique is also known as <emphasis>fetch groups</emphasis>. Please note that this is mostly a marketing feature, as in practice, optimizing row reads is much more important than optimization of column reads. However, only loading some properties of a class might be useful in extreme cases, when legacy tables have hundreds of columns and the data model can not be improved."
+msgstr "Hibernate3 supporte le chargement tardif de propriétés individuelles. La technique d'optimisation est également connue sous le nom de <emphasis>fetch groups</emphasis> (groupes de chargement). Il faut noter qu'il s'agit principalement d'une fonctionnalité marketing car en pratique l'optimisation de la lecture d'un enregistrement est beaucoup plus importante que l'optimisation de la lecture d'une colonne. Cependant, la restriction du chargement à certaines colonnes peut être pratique dans des cas extrèmes, lorsque des tables \"legacy\" possèdent des centaines de colonnes et que le modèle de données ne peut pas être amélioré."
+
+#: index.docbook:535
+msgid "To enable lazy property loading, set the <literal>lazy</literal> attribute on your particular property mappings:"
+msgstr "Pour activer le chargement tardif d'une propriété, il faut mettre l'attribut <literal>lazy</literal> sur une propriété particulière du mapping :"
+
+#: index.docbook:540
+msgid ""
+ "<![CDATA[<class name=\"Document\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\" length=\"50\"/>\n"
+ " <property name=\"summary\" not-null=\"true\" length=\"200\" lazy=\"true\"/>\n"
+ " <property name=\"text\" not-null=\"true\" length=\"2000\" lazy=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Document\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\" length=\"50\"/>\n"
+ " <property name=\"summary\" not-null=\"true\" length=\"200\" lazy=\"true\"/>\n"
+ " <property name=\"text\" not-null=\"true\" length=\"2000\" lazy=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:542
+msgid "Lazy property loading requires buildtime bytecode instrumentation! If your persistent classes are not enhanced, Hibernate will silently ignore lazy property settings and fall back to immediate fetching."
+msgstr "Le chargement tardif des propriétés requiert une instrumentation du bytecode lors de la compilation ! Si les classes persistantes ne sont pas instrumentées, Hibernate ignorera de manière silencieuse le mode tardif et retombera dans le mode de chargement immédiat."
+
+#: index.docbook:548
+msgid "For bytecode instrumentation, use the following Ant task:"
+msgstr "Pour l'instrumentation du bytecode vous pouvez utiliser la tâche Ant suivante :"
+
+#: index.docbook:552
+msgid ""
+ "<![CDATA[<target name=\"instrument\" depends=\"compile\">\n"
+ " <taskdef name=\"instrument\" classname=\"org.hibernate.tool.instrument.InstrumentTask\">\n"
+ " <classpath path=\"${jar.path}\"/>\n"
+ " <classpath path=\"${classes.dir}\"/>\n"
+ " <classpath refid=\"lib.class.path\"/>\n"
+ " </taskdef>\n"
+ "\n"
+ " <instrument verbose=\"true\">\n"
+ " <fileset dir=\"${testclasses.dir}/org/hibernate/auction/model\">\n"
+ " <include name=\"*.class\"/>\n"
+ " </fileset>\n"
+ " </instrument>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"instrument\" depends=\"compile\">\n"
+ " <taskdef name=\"instrument\" classname=\"org.hibernate.tool.instrument.InstrumentTask\">\n"
+ " <classpath path=\"${jar.path}\"/>\n"
+ " <classpath path=\"${classes.dir}\"/>\n"
+ " <classpath refid=\"lib.class.path\"/>\n"
+ " </taskdef>\n"
+ "\n"
+ " <instrument verbose=\"true\">\n"
+ " <fileset dir=\"${testclasses.dir}/org/hibernate/auction/model\">\n"
+ " <include name=\"*.class\"/>\n"
+ " </fileset>\n"
+ " </instrument>\n"
+ "</target>]]>"
+
+#: index.docbook:554
+msgid "A different (better?) way to avoid unnecessary column reads, at least for read-only transactions is to use the projection features of HQL or Criteria queries. This avoids the need for buildtime bytecode processing and is certainly a prefered solution."
+msgstr "Une autre façon (meilleure ?) pour éviter de lire plus de colonnes que nécessaire au moins pour des transactions en lecture seule est d'utiliser les fonctionnalités de projection des requêtes HQL ou Criteria. Cela évite de devoir instrumenter le bytecode à la compilation et est certainement une solution préférable."
+
+#: index.docbook:561
+msgid "You may force the usual eager fetching of properties using <literal>fetch all properties</literal> in HQL."
+msgstr "Vous pouvez forcer le mode de chargement agressif des propriétés en utilisant <literal>fetch all properties</literal> dans les requêts HQL."
+
+#: index.docbook:571
+msgid "The Second Level Cache"
+msgstr "Le cache de second niveau"
+
+#: index.docbook:573
+msgid "A Hibernate <literal>Session</literal> is a transaction-level cache of persistent data. It is possible to configure a cluster or JVM-level (<literal>SessionFactory</literal>-level) cache on a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be careful. Caches are never aware of changes made to the persistent store by another application (though they may be configured to regularly expire cached data)."
+msgstr "Une <literal>Session</literal> Hibernate est un cache de niveau transactionnel des données persistantes. Il est possible de configurer un cache de cluster ou de JVM (de niveau <literal>SessionFactory</literal> pour être exact) défini classe par classe et collection par collection. Vous pouvez même utiliser votr choix de cache en implémentant le pourvoyeur (provider) associé. Faites attention, les caches ne sont jamais avertis des modifications faites dans la base de données par d'autres applications (ils peuvent cependant être configurés pour régulièrement expirer les données en cache)."
+
+#: index.docbook:581
+msgid "You have the option to tell Hibernate which caching implementation to use by specifying the name of a class that implements <literal>org.hibernate.cache.CacheProvider</literal> using the property <literal>hibernate.cache.provider_class</literal>. 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."
+msgstr "Par défaut, Hibernate utilise EHCache comme cache de niveau JVM (le support de JCS est désormais déprécié et sera enlevé des futures versions d'Hibernate). Vous pouvez choisir une autre implémentation en spécifiant le nom de la classe qui implémente <literal>org.hibernate.cache.CacheProvider</literal> en utilisant la propriété <literal>hibernate.cache.provider_class</literal>."
+
+#: index.docbook:592
+msgid "Cache Providers"
+msgstr "Fournisseur de cache"
+
+#: index.docbook:601, index.docbook:774
+msgid "Cache"
+msgstr "Cache"
+
+#: index.docbook:602
+msgid "Provider class"
+msgstr "Classe pourvoyeuse"
+
+#: index.docbook:603
+msgid "Type"
+msgstr "Type"
+
+#: index.docbook:604
+msgid "Cluster Safe"
+msgstr "Support en Cluster"
+
+#: index.docbook:605
+msgid "Query Cache Supported"
+msgstr "Cache de requêtes supporté"
+
+#: index.docbook:610, index.docbook:783
+msgid "Hashtable (not intended for production use)"
+msgstr "Hashtable (ne pas utiliser en production)"
+
+#: index.docbook:611
+msgid "org.hibernate.cache.HashtableCacheProvider"
+msgstr "org.hibernate.cache.HashtableCacheProvider"
+
+#: index.docbook:612
+msgid "memory"
+msgstr "mémoire"
+
+#: index.docbook:614, index.docbook:621, index.docbook:628, index.docbook:784, index.docbook:785, index.docbook:786, index.docbook:791, index.docbook:792, index.docbook:793, index.docbook:798, index.docbook:799, index.docbook:800, index.docbook:805, index.docbook:806, index.docbook:812, index.docbook:815
+msgid "<entry>yes</entry>"
+msgstr "<entry>oui</entry>"
+
+#: index.docbook:617, index.docbook:790
+msgid "EHCache"
+msgstr "EHCache"
+
+#: index.docbook:618
+msgid "org.hibernate.cache.EhCacheProvider"
+msgstr "org.hibernate.cache.EhCacheProvider"
+
+#: index.docbook:619, index.docbook:626
+msgid "memory, disk"
+msgstr "mémoire, disque"
+
+#: index.docbook:624, index.docbook:797
+msgid "OSCache"
+msgstr "OSCache"
+
+#: index.docbook:625
+msgid "org.hibernate.cache.OSCacheProvider"
+msgstr "org.hibernate.cache.OSCacheProvider"
+
+#: index.docbook:631, index.docbook:804
+msgid "SwarmCache"
+msgstr "<entry>oui</entry>"
+
+#: index.docbook:632
+msgid "org.hibernate.cache.SwarmCacheProvider"
+msgstr "SwarmCache"
+
+#: index.docbook:633
+msgid "clustered (ip multicast)"
+msgstr "org.hibernate.cache.SwarmCacheProvider"
+
+#: index.docbook:634
+msgid "yes (clustered invalidation)"
+msgstr "en cluster (multicast ip)"
+
+#: index.docbook:638, index.docbook:811
+msgid "JBoss TreeCache"
+msgstr "oui (invalidation de cluster)"
+
+#: index.docbook:639
+msgid "org.hibernate.cache.TreeCacheProvider"
+msgstr "JBoss TreeCache"
+
+#: index.docbook:640
+msgid "clustered (ip multicast), transactional"
+msgstr "org.hibernate.cache.TreeCacheProvider"
+
+#: index.docbook:641
+msgid "yes (replication)"
+msgstr "en cluster (multicast ip), transactionnel"
+
+#: index.docbook:642
+msgid "yes (clock sync req.)"
+msgstr "oui (replication)"
+
+#: index.docbook:649
+msgid "Cache mappings"
+msgstr "oui (horloge sync. nécessaire)"
+
+#: index.docbook:651
+msgid "The <literal><cache></literal> element of a class or collection mapping has the following form:"
+msgstr "Mapping de Cache"
+
+#: index.docbook:662
+msgid ""
+ "<![CDATA[<cache \n"
+ " usage=\"transactional|read-write|nonstrict-read-write|read-only\"\n"
+ " region=\"RegionName\"\n"
+ " include=\"all|non-lazy\"\n"
+ "/>]]>"
+msgstr "L'élément <literal><cache></literal> d'une classe ou d'une collection à la forme suivante :"
+
+#: index.docbook:665
+msgid "<literal>usage</literal> (required) specifies the caching strategy: <literal>transactional</literal>, <literal>read-write</literal>, <literal>nonstrict-read-write</literal> or <literal>read-only</literal>"
+msgstr ""
+ "<![CDATA[<cache \n"
+ " usage=\"transactional|read-write|nonstrict-read-write|read-only\"\n"
+ " region=\"RegionName\"\n"
+ " include=\"all|non-lazy\"\n"
+ "/>]]>"
+
+#: index.docbook:674
+msgid "<literal>region</literal> (optional, defaults to the class or collection role name) specifies the name of the second level cache region"
+msgstr "<literal>usage</literal> (requis) spécifie la stratégie de cache : <literal>transactionel</literal>, <literal>lecture-écriture</literal>, <literal>lecture-écriture non stricte</literal> ou <literal>lecture seule</literal>"
+
+#: index.docbook:681
+msgid "<literal>include</literal> (optional, defaults to <literal>all</literal>) <literal>non-lazy</literal> specifies that properties of the entity mapped with <literal>lazy=\"true\"</literal> may not be cached when attribute-level lazy fetching is enabled"
+msgstr "<literal>region</literal> (optionnel, par défaut il s'agit du nom de la classe ou du nom de role de la collection) spécifie le nom de la région du cache de second niveau"
+
+#: index.docbook:691
+msgid "Alternatively (preferrably?), you may specify <literal><class-cache></literal> and <literal><collection-cache></literal> elements in <literal>hibernate.cfg.xml</literal>."
+msgstr "<literal>include</literal> (optionnel, par défaut <literal>all</literal>) <literal>non-lazy</literal> spécifie que les propriétés des entités mappées avec <literal>lazy=\"true\"</literal> ne doivent pas être mises en cache lorsque le chargement tardif des attributs est activé."
+
+#: index.docbook:696
+msgid "The <literal>usage</literal> attribute specifies a <emphasis>cache concurrency strategy</emphasis>."
+msgstr "Alternativement (voir préférentiellement), vous pouvez spécifier les éléments <literal><class-cache></literal> et <literal><collection-cache></literal> dans <literal>hibernate.cfg.xml</literal>."
+
+#: index.docbook:703
+msgid "Strategy: read only"
+msgstr "L'attribut <literal>usage</literal> spécifie une <emphasis>stratégie de concurrence d'accès au cache</emphasis>."
+
+#: index.docbook:705
+msgid "If your application needs to read but never modify instances of a persistent class, a <literal>read-only</literal> cache may be used. This is the simplest and best performing strategy. It's even perfectly safe for use in a cluster."
+msgstr "Strategie : lecture seule"
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"eg.Immutable\" mutable=\"false\">\n"
+ " <cache usage=\"read-only\"/>\n"
+ " ....\n"
+ "</class>]]>"
+msgstr "Si votre application a besoin de lire mais ne modifie jamais les instances d'une classe, un cache <literal>read-only</literal> peut être utilisé. C'est la stratégie la plus simple et la plus performante. Elle est même parfaitement sûre dans un cluster."
+
+#: index.docbook:717
+msgid "Strategy: read/write"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Immutable\" mutable=\"false\">\n"
+ " <cache usage=\"read-only\"/>\n"
+ " ....\n"
+ "</class>]]>"
+
+#: index.docbook:719
+msgid "If the application needs to update data, a <literal>read-write</literal> cache might be appropriate. This cache strategy should never be used if serializable transaction isolation level is required. If the cache is used in a JTA environment, you must specify the property <literal>hibernate.transaction.manager_lookup_class</literal>, naming a strategy for obtaining the JTA <literal>TransactionManager</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called. If you wish to use this strategy in a cluster, you should ensure that the underlying cache implementation supports locking. The built-in cache providers do <emphasis>not</emphasis>."
+msgstr "Stratégie : lecture/écriture"
+
+#: index.docbook:730
+msgid ""
+ "<![CDATA[<class name=\"eg.Cat\" .... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " <set name=\"kittens\" ... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr "Si l'application a besoin de mettre à jour des données, un cache <literal>read-write</literal> peut être approprié. Cette stratégie ne devrait jamais être utilisée si votre application nécessite un niveau d'isolation transactionnelle sérialisable. Si le cache est utilisé dans un environnement JTA, vous devez spécifier <literal>hibernate.transaction.manager_lookup_class</literal>, fournissant une stratégie pour obtenir le <literal>TransactionManager</literal> JTA. Dans d'autres environnements, vous devriez vous assurer que la transation est terminée à l'appel de <literal>Session.close()</literal> ou <literal>Session.disconnect()</literal>. Si vous souhaitez utiliser cette stratégie dans un cluster, vous devriez vous assurer que l'implémentation de cache utilisée supporte le vérrouillage. Ce que ne font <emphasis>pas</emphasis> les pourvoyeurs caches fournis."
+
+#: index.docbook:735
+msgid "Strategy: nonstrict read/write"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Cat\" .... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " <set name=\"kittens\" ... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:737
+msgid "If the application only occasionally needs to update data (ie. if it is extremely unlikely that two transactions would try to update the same item simultaneously) and strict transaction isolation is not required, a <literal>nonstrict-read-write</literal> cache might be appropriate. If the cache is used in a JTA environment, you must specify <literal>hibernate.transaction.manager_lookup_class</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called."
+msgstr "Stratégie : lecture/écriture non stricte"
+
+#: index.docbook:749
+msgid "Strategy: transactional"
+msgstr "Si l'application besoin de mettre à jour les données de manière occasionnelle (qu'il est très peu probable que deux transactions essaient de mettre à jour le même élément simultanément) et qu'une isolation transactionnelle stricte n'est pas nécessaire, un cache <literal>nonstrict-read-write</literal> peut être approprié. Si le cache est utilisé dans un environnement JTA, vous devez spécifier <literal>hibernate.transaction.manager_lookup_class</literal>. Dans d'autres environnements, vous devriez vous assurer que la transation est terminée à l'appel de <literal>Session.close()</literal> ou <literal>Session.disconnect()</literal>"
+
+#: index.docbook:751
+msgid "The <literal>transactional</literal> cache strategy provides support for fully transactional cache providers such as JBoss TreeCache. Such a cache may only be used in a JTA environment and you must specify <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr "Stratégie : transactionelle"
+
+#: index.docbook:759
+msgid "None of the cache providers support all of the cache concurrency strategies. The following table shows which providers are compatible with which concurrency strategies."
+msgstr "La stratégie de cache <literal>transactional</literal> supporte un cache complètement transactionnel comme, par exemple, JBoss TreeCache. Un tel cache ne peut être utilisé que dans un environnement JTA et vous devez spécifier <literal>hibernate.transaction.manager_lookup_class</literal>."
+
+#: index.docbook:765
+msgid "Cache Concurrency Strategy Support"
+msgstr "Aucun des caches livrés ne supporte toutes les stratégies de concurrence. Le tableau suivant montre quels caches sont compatibles avec quelles stratégies de concurrence."
+
+#: index.docbook:775
+msgid "read-only"
+msgstr "Cache"
+
+#: index.docbook:776
+msgid "nonstrict-read-write"
+msgstr "read-only (lecture seule)"
+
+#: index.docbook:777
+msgid "read-write"
+msgstr "nonstrict-read-write (lecture-écriture non stricte)"
+
+#: index.docbook:778
+msgid "transactional"
+msgstr "read-write (lecture-ériture)"
+
+#: index.docbook:824
+msgid "Managing the caches"
+msgstr "<entry>oui</entry>"
+
+#: index.docbook:826
+msgid "Whenever you pass an object to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal> and whenever you retrieve an object using <literal>load()</literal>, <literal>get()</literal>, <literal>list()</literal>, <literal>iterate()</literal> or <literal>scroll()</literal>, that object is added to the internal cache of the <literal>Session</literal>."
+msgstr "Gérer les caches"
+
+#: index.docbook:833
+msgid "When <literal>flush()</literal> is subsequently called, the state of that object will be synchronized with the database. If you do not want this synchronization to occur or if you are processing a huge number of objects and need to manage memory efficiently, the <literal>evict()</literal> method may be used to remove the object and its collections from the first-level cache."
+msgstr "A chaque fois que vous passez un objet à la méthode <literal>save()</literal>, <literal>update()</literal> ou <literal>saveOrUpdate()</literal> et à chaque fois que vous récupérez un objet avec <literal>load()</literal>, <literal>get()</literal>, <literal>list()</literal>, <literal>iterate()</literal> or <literal>scroll()</literal>, cet objet est ajouté au cache interne de la <literal>Session</literal>."
+
+#: index.docbook:841
+msgid ""
+ "<![CDATA[ScrollableResult cats = sess.createQuery(\"from Cat as cat\").scroll(); //a huge result set\n"
+ "while ( cats.next() ) {\n"
+ " Cat cat = (Cat) cats.get(0);\n"
+ " doSomethingWithACat(cat);\n"
+ " sess.evict(cat);\n"
+ "}]]>"
+msgstr "Lorsqu'il y a un appel à la méthode <literal>flush()</literal>, l'état de cet objet va être synchronisé avec la base de données. Si vous ne voulez pas que cette synchronisation ait lieu ou si vous traitez un grand nombre d'objets et que vous avez besoin de gérer la mémoire de manière efficace, vous pouvez utiliser la méthode <literal>evict()</literal> pour supprimer l'objet et ses collections dépendantes du cache de la session"
+
+#: index.docbook:843
+msgid "The <literal>Session</literal> also provides a <literal>contains()</literal> method to determine if an instance belongs to the session cache."
+msgstr ""
+ "<![CDATA[ScrollableResult cats = sess.createQuery(\"from Cat as cat\").scroll(); //a huge result set\n"
+ "while ( cats.next() ) {\n"
+ " Cat cat = (Cat) cats.get(0);\n"
+ " doSomethingWithACat(cat);\n"
+ " sess.evict(cat);\n"
+ "}]]>"
+
+#: index.docbook:848
+msgid "To completely evict all objects from the session cache, call <literal>Session.clear()</literal>"
+msgstr "La <literal>Session</literal> dispose aussi de la méthode <literal>contains()</literal> pour déterminer si une instance appartient au cache de la session."
+
+#: index.docbook:852
+msgid "For the second-level cache, there are methods defined on <literal>SessionFactory</literal> for evicting the cached state of an instance, entire class, collection instance or entire collection role."
+msgstr "Pour retirer tous les objets du cache session, appelez <literal>Session.clear()</literal>"
+
+#: index.docbook:858
+msgid ""
+ "<![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat\n"
+ "sessionFactory.evict(Cat.class); //evict all Cats\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\", catId); //evict a particular collection of kittens\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\"); //evict all kitten collections]]>"
+msgstr "Pour le cache de second niveau, il existe des méthodes définies dans <literal>SessionFactory</literal> pour retirer des instances du cache, la classe entière, une instance de collection ou le rôle entier d'une collection."
+
+#: index.docbook:860
+msgid "The <literal>CacheMode</literal> controls how a particular session interacts with the second-level cache."
+msgstr ""
+ "<![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat\n"
+ "sessionFactory.evict(Cat.class); //evict all Cats\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\", catId); //evict a particular collection of kittens\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\"); //evict all kitten collections]]>"
+
+#: index.docbook:867
+msgid "<literal>CacheMode.NORMAL</literal> - read items from and write items to the second-level cache"
+msgstr "Le <literal>CacheMode</literal> contrôle comme une session particulière interragit avec le cache de second niveau"
+
+#: index.docbook:872
+msgid "<literal>CacheMode.GET</literal> - read items from the second-level cache, but don't write to the second-level cache except when updating data"
+msgstr "<literal>CacheMode.NORMAL</literal> - lit et écrit les items dans le cache de second niveau"
+
+#: index.docbook:878
+msgid "<literal>CacheMode.PUT</literal> - write items to the second-level cache, but don't read from the second-level cache"
+msgstr "<literal>CacheMode.GET</literal> - lit les items dans le cache de second niveau mais ne les écrit pas sauf dans le cache d'une mise à jour d'une donnée"
+
+#: index.docbook:884
+msgid "<literal>CacheMode.REFRESH</literal> - write items to the second-level cache, but don't read from the second-level cache, bypass the effect of <literal>hibernate.cache.use_minimal_puts</literal>, forcing a refresh of the second-level cache for all items read from the database"
+msgstr "<literal>CacheMode.PUT</literal> - écrit les items dans le cache de second niveau mais ne les lit pas dans le cache de second niveau"
+
+#: index.docbook:892
+msgid "To browse the contents of a second-level or query cache region, use the <literal>Statistics</literal> API:"
+msgstr "<literal>CacheMode.REFRESH</literal> - écrit les items dans le cache de second niveau mais ne les lit pas dans le cache de second niveau, outrepasse l'effet de<literal>hibernate.cache.use_minimal_puts</literal>, en forçant un rafraîchissement du cache de second niveau pour chaque item lu dans la base"
+
+#: index.docbook:897
+msgid ""
+ "<![CDATA[Map cacheEntries = sessionFactory.getStatistics()\n"
+ " .getSecondLevelCacheStatistics(regionName)\n"
+ " .getEntries();]]>"
+msgstr "Pour parcourir le contenu du cache de second niveau ou la région du cache dédiée au requêtes, vous pouvez utiliser l'API <literal>Statistics</literal> API:"
+
+#: index.docbook:899
+msgid "You'll need to enable statistics, and, optionally, force Hibernate to keep the cache entries in a more human-understandable format:"
+msgstr ""
+ "<![CDATA[Map cacheEntries = sessionFactory.getStatistics()\n"
+ " .getSecondLevelCacheStatistics(regionName)\n"
+ " .getEntries();]]>"
+
+#: index.docbook:904
+msgid ""
+ "<![CDATA[hibernate.generate_statistics true\n"
+ "hibernate.cache.use_structured_entries true]]>"
+msgstr "Vous devez pour cela activer les statistiques et optionnellement forcer Hibernate à conserver les entrées dans le cache sous un format plus compréhensible pour l'utilisateur :"
+
+#: index.docbook:909
+msgid "The Query Cache"
+msgstr ""
+ "<![CDATA[hibernate.generate_statistics true\n"
+ "hibernate.cache.use_structured_entries true]]>"
+
+#: index.docbook:911
+msgid "Query result sets may also be cached. This is only useful for queries that are run frequently with the same parameters. To use the query cache you must first enable it:"
+msgstr "Le cache de requêtes"
+
+#: index.docbook:916
+msgid "<![CDATA[hibernate.cache.use_query_cache true]]>"
+msgstr "Les résultats d'une requête peuvent aussi être placés en cache. Ceci n'est utile que pour les requêtes qui sont exécutées avec les mêmes paramètres. Pour utiliser le cache de requêtes, vous devez d'abord l'activer :"
+
+#: index.docbook:918
+msgid "This setting causes the creation of two new cache regions - one holding cached query result sets (<literal>org.hibernate.cache.StandardQueryCache</literal>), the other holding timestamps of the most recent updates to queryable tables (<literal>org.hibernate.cache.UpdateTimestampsCache</literal>). Note that the query cache does not cache the state of the actual entities in the result set; it caches only identifier values and results of value type. So the query cache should always be used in conjunction with the second-level cache."
+msgstr "<![CDATA[hibernate.cache.use_query_cache true]]>"
+
+#: index.docbook:928
+msgid "Most queries do not benefit from caching, so by default queries are not cached. To enable caching, call <literal>Query.setCacheable(true)</literal>. This call allows the query to look for existing cache results or add its results to the cache when it is executed."
+msgstr "Ce paramètre amène la création de deux nouvelles régions dans le cache, une qui va conserver le résultat des requêtes mises en cache (<literal>org.hibernate.cache.StandardQueryCache</literal>) et l'autre qui va conserver l'horodatage des mises à jour les plus récentes effectuées sur les tables requêtables (<literal>org.hibernate.cache.UpdateTimestampsCache</literal>). Il faut noter que le cache de requête ne conserve pas l'état des entités, il met en cache uniquement les valeurs de l'identifiant et les valeurs de types de base (?). Le cache de requête doit toujours être utilisé avec le cache de second niveau pour être efficace."
+
+#: index.docbook:935
+msgid "If you require fine-grained control over query cache expiration policies, you may specify a named cache region for a particular query by calling <literal>Query.setCacheRegion()</literal>."
+msgstr "La plupart des requêtes ne retirent pas de bénéfice pas du cache, donc par défaut les requêtes ne sont pas mises en cache. Pour activer le cache, appelez <literal>Query.setCacheable(true)</literal>. Cet appel permet de vérifier si les résultats sont en cache ou non, voire d'ajouter ces résultats si la requête est exécutée."
+
+#: index.docbook:941
+msgid ""
+ "<![CDATA[List blogs = sess.createQuery(\"from Blog blog where blog.blogger = :blogger\")\n"
+ " .setEntity(\"blogger\", blogger)\n"
+ " .setMaxResults(15)\n"
+ " .setCacheable(true)\n"
+ " .setCacheRegion(\"frontpages\")\n"
+ " .list();]]>"
+msgstr "Si vous avez besoin de contrôler finement les délais d'expiration du cache, vous pouvez spécifier une région de cache nommée pour une requête particulière en appelant <literal>Query.setCacheRegion()</literal>."
+
+#: index.docbook:943
+msgid "If the query should force a refresh of its query cache region, you should call <literal>Query.setCacheMode(CacheMode.REFRESH)</literal>. This is particularly useful in cases where underlying data may have been updated via a separate process (i.e., not modified through Hibernate) and allows the application to selectively refresh particular query result sets. This is a more efficient alternative to eviction of a query cache region via <literal>SessionFactory.evictQueries()</literal>."
+msgstr ""
+ "<![CDATA[List blogs = sess.createQuery(\"from Blog blog where blog.blogger = :blogger\")\n"
+ " .setEntity(\"blogger\", blogger)\n"
+ " .setMaxResults(15)\n"
+ " .setCacheable(true)\n"
+ " .setCacheRegion(\"frontpages\")\n"
+ " .list();]]>"
+
+#: index.docbook:955
+msgid "Understanding Collection performance"
+msgstr "Si une requête doit forcer le rafraîchissement de sa région de cache, vous devez appeler <literal>Query.setCacheMode(CacheMode.REFRESH)</literal>. C'est particulièrement utile lorsque les données peuvent avoir été mises à jour par un processus séparé (e.g. elles n'ont pas été modifiées par Hibernate). Cela permet à l'application de rafraîchir de manière sélective les résultats d'une requête particulière. Il s'agit d'une alternative plus efficace à l'éviction d'une région du cache à l'aide de la méthode <literal>SessionFactory.evictQueries()</literal>."
+
+#: index.docbook:957
+msgid "We've already spent quite some time talking about collections. In this section we will highlight a couple more issues about how collections behave at runtime."
+msgstr "Comprendre les performances des Collections"
+
+#: index.docbook:964
+msgid "Taxonomy"
+msgstr "Nous avons déjà passé du temps à discuter des collections. Dans cette section, nous allons traiter du comportement des collections à l'exécution."
+
+#: index.docbook:966
+msgid "Hibernate defines three basic kinds of collections:"
+msgstr "Classification"
+
+#: index.docbook:970
+msgid "collections of values"
+msgstr "Hibernate définit trois types de collections :"
+
+#: index.docbook:973
+msgid "one to many associations"
+msgstr "les collections de valeurs"
+
+#: index.docbook:976
+msgid "many to many associations"
+msgstr "les associations un-vers-plusieurs"
+
+#: index.docbook:980
+msgid "This classification distinguishes the various table and foreign key relationships but does not tell us quite everything we need to know about the relational model. To fully understand the relational structure and performance characteristics, we must also consider the structure of the primary key that is used by Hibernate to update or delete collection rows. This suggests the following classification:"
+msgstr "les associations plusieurs-vers-plusieurs"
+
+#: index.docbook:991
+msgid "indexed collections"
+msgstr "Cette classification distingue les différentes relations entre les tables et les clés étrangères mais ne nous apprend rien de ce que nous devons savoir sur le modèle relationnel. Pour comprendre parfaitement la structure relationnelle et les caractéristiques des performances, nous devons considérer la structure de la clé primaire qui est utilisée par Hibernate pour mettre à jour ou supprimer les éléments des collections. Celà nous amène aux classifications suivantes :"
+
+#: index.docbook:994
+msgid "sets"
+msgstr "collections indexées"
+
+#: index.docbook:997
+msgid "bags"
+msgstr "sets"
+
+#: index.docbook:1001
+msgid "All indexed collections (maps, lists, arrays) have a primary key consisting of the <literal><key></literal> and <literal><index></literal> columns. In this case collection updates are usually extremely efficient - the primary key may be efficiently indexed and a particular row may be efficiently located when Hibernate tries to update or delete it."
+msgstr "bags"
+
+#: index.docbook:1009
+msgid "Sets have a primary key consisting of <literal><key></literal> and element columns. This may be less efficient for some types of collection element, particularly composite elements or large text or binary fields; the database may not be able to index a complex primary key as efficently. On the other hand, for one to many or many to many associations, particularly in the case of synthetic identifiers, it is likely to be just as efficient. (Side-note: if you want <literal>SchemaExport</literal> to actually create the primary key of a <literal><set></literal> for you, you must declare all columns as <literal>not-null=\"true\"</literal>.)"
+msgstr "Toutes les collections indexées (maps, lists, arrays) ont une clé primaire constituée des colonnes clé (<literal><key></literal>) et <literal><index></literal>. Avec ce type de clé primaire, la mise à jour de collection est en général très performante - la clé primaire peut être indexées efficacement et un élément particulier peut être localisé efficacement lorsqu'Hibernate essaie de le mettre à jour ou de le supprimer."
+
+#: index.docbook:1020
+msgid "<literal><idbag></literal> mappings define a surrogate key, so they are always very efficient to update. In fact, they are the best case."
+msgstr "Les Sets ont une clé primaire composée de <literal><key></literal> et des colonnes représentant l'élément. Elle est donc moins efficace pour certains types de collections d'éléments, en particulier les éléments composites, les textes volumineux ou les champs binaires ; la base de données peut ne pas être capable d'indexer aussi efficacement une clé primaire aussi complexe. Cependant, pour les associations un-vers-plusieurs ou plusieurs-vers-plusieurs, spécialement lorsque l'on utilise des entités ayant des identifiants techniques, il est probable que cela soit aussi efficace (note : si vous voulez que <literal>SchemaExport</literal> créé effectivement la clé primaire d'un <literal><set></literal> pour vous, vous devez déclarer toutes les colonnes avec <literal>not-null=\"true\"</literal>)."
+
+#: index.docbook:1025
+msgid "Bags are the worst case. Since a bag permits duplicate element values and has no index column, no primary key may be defined. Hibernate has no way of distinguishing between duplicate rows. Hibernate resolves this problem by completely removing (in a single <literal>DELETE</literal>) and recreating the collection whenever it changes. This might be very inefficient."
+msgstr "Le mapping à l'aide d'<literal><idbag></literal> définit une clé de substitution ce qui leur permet d'être très efficaces lors de la mise à jour. En fait il s'agit du meilleur cas de mise à jour d'une collection"
+
+#: index.docbook:1033
+msgid "Note that for a one-to-many association, the \"primary key\" may not be the physical primary key of the database table - but even in this case, the above classification is still useful. (It still reflects how Hibernate \"locates\" individual rows of the collection.)"
+msgstr "Le pire cas intervient pour les Bags. Dans la mesure où un bag permet la duplications des éléments et n'a pas de colonne d'index, aucune clé primaire ne peut être définie. Hibernate n'a aucun moyen de distinguer des enregistrements dupliqués. Hibernate résout ce problème en supprimant complètement les enregistrements (via un simple <literal>DELETE</literal>), puis en recréant la collection chaque fois qu'elle change. Ce qui peut être très inefficace."
+
+#: index.docbook:1043
+msgid "Lists, maps, idbags and sets are the most efficient collections to update"
+msgstr "Notez que pour une relation un-vers-plusieurs, la \"clé primaire\" peut ne pas être la clé primaire de la table en base de données - mais même dans ce cas, la classification ci-dessus reste utile (Elle explique comment Hibernate \"localise\" chaque enregistrement de la collection)."
+
+#: index.docbook:1045
+msgid "From the discussion above, it should be clear that indexed collections and (usually) sets allow the most efficient operation in terms of adding, removing and updating elements."
+msgstr "Les lists, les maps, les idbags et les sets sont les collections les plus efficaces pour la mise à jour"
+
+#: index.docbook:1051
+msgid "There is, arguably, one more advantage that indexed collections have over sets for many to many associations or collections of values. Because of the structure of a <literal>Set</literal>, Hibernate doesn't ever <literal>UPDATE</literal> a row when an element is \"changed\". Changes to a <literal>Set</literal> always work via <literal>INSERT</literal> and <literal>DELETE</literal> (of individual rows). Once again, this consideration does not apply to one to many associations."
+msgstr "La discussion précédente montre clairement que les collections indexées et (la plupart du temps) les sets, permettent de réaliser le plus efficacement les opérations d'ajout, de suppression ou de modification d'éléments."
+
+#: index.docbook:1060
+msgid "After observing that arrays cannot be lazy, we would conclude that lists, maps and idbags are the most performant (non-inverse) collection types, with sets not far behind. Sets are expected to be the most common kind of collection in Hibernate applications. This is because the \"set\" semantics are most natural in the relational model."
+msgstr "Il existe un autre avantage qu'ont les collections indexées sur les Sets dans le cadre d'une association plusieurs vers plusieurs ou d'une collection de valeurs. A cause de la structure inhérente d'un <literal>Set</literal>, Hibernate n'effectue jamais d'<literal>UPDATE</literal> quand un enregistrement est modifié. Les modifications apportées à un <literal>Set</literal> se font via un <literal>INSERT</literal> et <literal>DELETE</literal> (de chaque enregistrement). Une fois de plus, ce cas ne s'applique pas aux associations un vers plusieurs."
+
+#: index.docbook:1068
+msgid "However, in well-designed Hibernate domain models, we usually see that most collections are in fact one-to-many associations with <literal>inverse=\"true\"</literal>. For these associations, the update is handled by the many-to-one end of the association, and so considerations of collection update performance simply do not apply."
+msgstr "Après s'être rappelé que les tableaux ne peuvent pas être chargés tardivement, nous pouvons conclure que les lists, les maps et les idbags sont les types de collections (non inversées) les plus performants, avec les sets pas loin derrières. Les sets son le type de collection le plus courant dans les applications Hibernate. Cela est du au fait que la sémantique des \"set\" est la plus naturelle dans le modèle relationnel."
+
+#: index.docbook:1078
+msgid "Bags and lists are the most efficient inverse collections"
+msgstr "Cependant, dans des modèles objet bien conçus avec Hibernate, on voit souvent que la plupart des collections sont en fait des associations \"un-vers-plusieurs\" avec <literal>inverse=\"true\"</literal>. Pour ces associations, les mises à jour sont gérées au niveau de l'association \"plusieurs-vers-un\" et les considérations de performance de mise à jour des collections ne s'appliquent tout simplement pas dans ces cas là ."
+
+#: index.docbook:1080
+msgid "Just before you ditch bags forever, there is a particular case in which bags (and also lists) are much more performant than sets. For a collection with <literal>inverse=\"true\"</literal> (the standard bidirectional one-to-many relationship idiom, for example) we can add elements to a bag or list without needing to initialize (fetch) the bag elements! This is because <literal>Collection.add()</literal> or <literal>Collection.addAll()</literal> must always return true for a bag or <literal>List</literal> (unlike a <literal>Set</literal>). This can make the following common code much faster."
+msgstr "Les Bags et les lists sont les plus efficaces pour les collections inverse"
+
+#: index.docbook:1090
+msgid ""
+ "<![CDATA[Parent p = (Parent) sess.load(Parent.class, id);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c); //no need to fetch the collection!\n"
+ "sess.flush();]]>"
+msgstr "Avant que vous n'oubliez les bags pour toujours, il y a un cas précis où les bags (et les lists) sont bien plus performants que les sets. Pour une collection marquée comme <literal>inverse=\"true\"</literal> (le choix le plus courant pour un relation un vers plusieurs bidirectionnelle), nous pouvons ajouter des éléments à un bag ou une list sans avoir besoin de l'initialiser (fetch) les éléments du sac! Ceci parce que <literal>Collection.add()</literal> ou <literal>Collection.addAll()</literal> doit toujours retourner vrai pour un bag ou une <literal>List</literal> (contrairement au <literal>Set</literal>). Cela peut rendre le code suivant beaucoup plus rapide."
+
+#: index.docbook:1095
+msgid "One shot delete"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) sess.load(Parent.class, id);\n"
+ " Child c = new Child();\n"
+ " c.setParent(p);\n"
+ " p.getChildren().add(c); //pas besoin de charger la collection !\n"
+ " sess.flush();]]>"
+
+#: index.docbook:1097
+msgid "Occasionally, deleting collection elements one by one can be extremely inefficient. Hibernate isn't completely stupid, so it knows not to do that in the case of an newly-empty collection (if you called <literal>list.clear()</literal>, for example). In this case, Hibernate will issue a single <literal>DELETE</literal> and we are done!"
+msgstr "Suppression en un coup"
+
+#: index.docbook:1104
+msgid "Suppose we add a single element to a collection of size twenty and then remove two elements. Hibernate will issue one <literal>INSERT</literal> statement and two <literal>DELETE</literal> statements (unless the collection is a bag). This is certainly desirable."
+msgstr "Parfois, effacer les éléments d'une collection un par un peut être extrêmement inefficace. Hibernate n'est pas totalement stupide, il sait qu'il ne faut pas le faire dans le cas d'une collection complètement vidée (lorsque vous appellez <literal>list.clear()</literal>, par exemple). Dans ce cas, Hibernate fera un simple <literal>DELETE</literal> et le travail est fait !"
+
+#: index.docbook:1110
+msgid "However, suppose that we remove eighteen elements, leaving two and then add thee new elements. There are two possible ways to proceed"
+msgstr "Supposons que nous ajoutions un élément dans une collection de taille vingt et que nous enlevions ensuite deux éléments. Hibernate effectuera un <literal>INSERT</literal> puis deux <literal>DELETE</literal> (à moins que la collection ne soit un bag). Ce qui est souhaitable."
+
+#: index.docbook:1117
+msgid "delete eighteen rows one by one and then insert three rows"
+msgstr "Cependant, supposons que nous enlevions dix huit éléments, laissant ainsi deux éléments, puis que nous ajoutions trois nouveaux éléments. Il y a deux moyens de procéder."
+
+#: index.docbook:1120
+msgid "remove the whole collection (in one SQL <literal>DELETE</literal>) and insert all five current elements (one by one)"
+msgstr "effacer dix huit enregistrements un à un puis en insérer trois"
+
+#: index.docbook:1125
+msgid "Hibernate isn't smart enough to know that the second option is probably quicker in this case. (And it would probably be undesirable for Hibernate to be that smart; such behaviour might confuse database triggers, etc.)"
+msgstr "effacer la totalité de la collection (en un <literal>DELETE</literal> SQL) puis insérer les cinq éléments restant un à un"
+
+#: index.docbook:1131
+msgid "Fortunately, you can force this behaviour (ie. the second strategy) at any time by discarding (ie. dereferencing) the original collection and returning a newly instantiated collection with all the current elements. This can be very useful and powerful from time to time."
+msgstr "Hibernate n'est pas assez intelligent pour savoir que, dans ce cas, la seconde méthode est plus rapide (Il plutôt heureux qu'Hibernate ne soit pas trop intelligent ; un tel comportement pourrait rendre l'utilisation de triggers de bases de données plutôt aléatoire, etc...)."
+
+#: index.docbook:1137
+msgid "Of course, one-shot-delete does not apply to collections mapped <literal>inverse=\"true\"</literal>."
+msgstr "Heureusement, vous pouvez forcer ce comportement lorsque vous le souhaitez, en liberant (c'est-à -dire en déréférençant) la collection initiale et en retournant une collection nouvellement instanciée avec les éléments restants. Ceci peut être très pratique et très puissant de temps en temps."
+
+#: index.docbook:1146
+msgid "Monitoring performance"
+msgstr "Bien sûr, la suppression en un coup ne s'applique pas pour les collections qui sont mappées avec <literal>inverse=\"true\"</literal>."
+
+#: index.docbook:1148
+msgid "Optimization is not much use without monitoring and access to performance numbers. Hibernate provides a full range of figures about its internal operations. Statistics in Hibernate are available per <literal>SessionFactory</literal>."
+msgstr "Moniteur de performance"
+
+#: index.docbook:1155
+msgid "Monitoring a SessionFactory"
+msgstr "L'optimisation n'est pas d'un grand intérêt sans le suivi et l'accès aux données de performance. Hibernate fournit toute une panoplie de rapport sur ses opérations internes. Les statistiques dans Hibernate sont fournies par <literal>SessionFactory</literal>."
+
+#: index.docbook:1157
+msgid "You can access <literal>SessionFactory</literal> metrics in two ways. Your first option is to call <literal>sessionFactory.getStatistics()</literal> and read or display the <literal>Statistics</literal> yourself."
+msgstr "Suivi d'une SessionFactory"
+
+#: index.docbook:1163
+msgid "Hibernate can also use JMX to publish metrics if you enable the <literal>StatisticsService</literal> MBean. You may enable a single MBean for all your <literal>SessionFactory</literal> or one per factory. See the following code for minimalistic configuration examples:"
+msgstr "Vous pouvez accéder au métriques d'une <literal>SessionFactory</literal> de deux manières. La première option est d'appeler <literal>sessionFactory.getStatistics()</literal> et de lire ou d'afficher les <literal>Statistics</literal> vous même."
+
+#: index.docbook:1170
+msgid ""
+ "<![CDATA[// MBean service registration for a specific SessionFactory\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"myFinancialApp\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory\n"
+ "server.registerMBean(stats, on); // Register the Mbean on the server]]>"
+msgstr "Hibernate peut également utiliser JMX pour publier les métriques si vous activez le MBean <literal>StatisticsService</literal>. Vous pouvez activer un seul MBean pour toutes vos <literal>SessionFactory</literal> ou un par factory. Voici un code qui montre un exemple de configuration minimaliste :"
+
+#: index.docbook:1173
+msgid ""
+ "<![CDATA[// MBean service registration for all SessionFactory's\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"all\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "server.registerMBean(stats, on); // Register the MBean on the server]]>"
+msgstr ""
+ "<![CDATA[// MBean service registration for a specific SessionFactory\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"myFinancialApp\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory\n"
+ "server.registerMBean(stats, on); // Register the Mbean on the server]]>"
+
+#: index.docbook:1175
+msgid "TODO: This doesn't make sense: In the first case, we retrieve and use the MBean directly. In the second one, we must give the JNDI name in which the session factory is held before using it. Use <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal>"
+msgstr ""
+ "<![CDATA[// MBean service registration for all SessionFactory's\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"all\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "server.registerMBean(stats, on); // Register the MBean on the server]]>"
+
+#: index.docbook:1180
+msgid "You can (de)activate the monitoring for a <literal>SessionFactory</literal>"
+msgstr "TODO: Cela n'a pas de sens : dans le premier cs on récupère et on utilise le MBean directement. Dans le second, on doit fournir le nom JNDI sous lequel est retenu la fabrique de session avant de l'utiliser. Pour cela il faut utiliser <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal>"
+
+#: index.docbook:1185
+msgid "at configuration time, set <literal>hibernate.generate_statistics</literal> to <literal>false</literal>"
+msgstr "Vous pouvez (dés)activer le suivi pour une <literal>SessionFactory</literal>"
+
+#: index.docbook:1192
+msgid "at runtime: <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> or <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>"
+msgstr "au moment de la configuration en mettant <literal>hibernate.generate_statistics</literal> Ã <literal>false</literal>"
+
+#: index.docbook:1199
+msgid "Statistics can be reset programatically using the <literal>clear()</literal> method. A summary can be sent to a logger (info level) using the <literal>logSummary()</literal> method."
+msgstr "Ã chaud avec <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> ou <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>"
+
+#: index.docbook:1208
+msgid "Metrics"
+msgstr "Les statistiques peuvent être remises à zéro de manière programmatique à l'aide de la méthode <literal>clear()</literal> Un résumé peut être envoyé à un logger (niveau info) à l'aide de la méthode <literal>logSummary()</literal>"
+
+#: index.docbook:1210
+msgid "Hibernate provides a number of metrics, from very basic to the specialized information only relevant in certain scenarios. All available counters are described in the <literal>Statistics</literal> interface API, in three categories:"
+msgstr "Métriques"
+
+#: index.docbook:1217
+msgid "Metrics related to the general <literal>Session</literal> usage, such as number of open sessions, retrieved JDBC connections, etc."
+msgstr "Hibernate fournit un certain nombre de métriques, qui vont des informations très basiques aux informations très spécialisées qui ne sont appropriées que dans certains scenarii. Tous les compteurs accessibles sont décrits dans l'API de l'interface <literal>Statistics</literal> dans trois catégories :"
+
+#: index.docbook:1223
+msgid "Metrics related to he entities, collections, queries, and caches as a whole (aka global metrics),"
+msgstr "Les métriques relatives à l'usage général de la <literal>Session</literal> comme le nombre de sessions ouvertes, le nombre de connexions JDBC récupérées, etc..."
+
+#: index.docbook:1229
+msgid "Detailed metrics related to a particular entity, collection, query or cache region."
+msgstr "Les métriques relatives aux entités, collections, requêtes et caches dans leur ensemble (métriques globales),"
+
+#: index.docbook:1236
+msgid "For exampl,e you can check the cache hit, miss, and put ratio of entities, collections and queries, and the average time a query needs. Beware that the number of milliseconds is subject to approximation in Java. Hibernate is tied to the JVM precision, on some platforms this might even only be accurate to 10 seconds."
+msgstr "Les métriques détaillées relatives à une entité, une collection, une requête ou une région de cache particulière."
+
+#: index.docbook:1243
+msgid "Simple getters are used to access the global metrics (i.e. not tied to a particular entity, collection, cache region, etc.). You can access the metrics of a particular entity, collection or cache region through its name, and through its HQL or SQL representation for queries. Please refer to the <literal>Statistics</literal>, <literal>EntityStatistics</literal>, <literal>CollectionStatistics</literal>, <literal>SecondLevelCacheStatistics</literal>, and <literal>QueryStatistics</literal> API Javadoc for more information. The following code shows a simple example:"
+msgstr "Par exemple, vous pouvez vérifier l'accès au cache ainsi que le taux d'éléments manquants et de mise à jour des entités, collections et requêtes et le temps moyen que met une requête. Il faut faire attention au fait que le nombre de millisecondes est sujet à approximation en Java. Hibernate est lié à la précision de la machine virtuelle, sur certaines plateformes, cela n'offre qu'une précision de l'ordre de 10 secondes."
+
+#: index.docbook:1253
+msgid ""
+ "<![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();\n"
+ "\n"
+ "double queryCacheHitCount = stats.getQueryCacheHitCount();\n"
+ "double queryCacheMissCount = stats.getQueryCacheMissCount();\n"
+ "double queryCacheHitRatio =\n"
+ " queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);\n"
+ "\n"
+ "log.info(\"Query Hit ratio:\" + queryCacheHitRatio);\n"
+ "\n"
+ "EntityStatistics entityStats =\n"
+ " stats.getEntityStatistics( Cat.class.getName() );\n"
+ "long changes =\n"
+ " entityStats.getInsertCount()\n"
+ " + entityStats.getUpdateCount()\n"
+ " + entityStats.getDeleteCount();\n"
+ "log.info(Cat.class.getName() + \" changed \" + changes + \"times\" );]]>"
+msgstr "Des accesseurs simples sont utilisés pour accéder aux métriques globales (e.g. celles qui ne sont pas liées à une entité, collection ou région de cache particulière). Vous pouvez accéder aux métriques d'une entité, collection, région de cache particulière à l'aide de son nom et à l'aide de sa représentation HQL ou SQL pour une requête. Référez vous à la javadoc des APIS <literal>Statistics</literal>, <literal>EntityStatistics</literal>, <literal>CollectionStatistics</literal>, <literal>SecondLevelCacheStatistics</literal>, and <literal>QueryStatistics</literal> pour plus d'informations. Le code ci-dessous montre un exemple simple :"
+
+#: index.docbook:1255
+msgid "To work on all entities, collections, queries and region caches, you can retrieve the list of names of entities, collections, queries and region caches with the following methods: <literal>getQueries()</literal>, <literal>getEntityNames()</literal>, <literal>getCollectionRoleNames()</literal>, and <literal>getSecondLevelCacheRegionNames()</literal>."
+msgstr ""
+ "<![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();\n"
+ "\n"
+ "double queryCacheHitCount = stats.getQueryCacheHitCount();\n"
+ "double queryCacheMissCount = stats.getQueryCacheMissCount();\n"
+ "double queryCacheHitRatio =\n"
+ " queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);\n"
+ "\n"
+ "log.info(\"Query Hit ratio:\" + queryCacheHitRatio);\n"
+ "\n"
+ "EntityStatistics entityStats =\n"
+ " stats.getEntityStatistics( Cat.class.getName() );\n"
+ "long changes =\n"
+ " entityStats.getInsertCount()\n"
+ " + entityStats.getUpdateCount()\n"
+ " + entityStats.getDeleteCount();\n"
+ "log.info(Cat.class.getName() + \" changed \" + changes + \"times\" );]]>"
+
+#: index.docbook:1317
+msgid "appended paragraph 1"
+msgstr "Pour travailler sur toutes les entités, collections, requêtes et régions de cache, vous pouvez récupérer la liste des noms des entités, collections, requêtes et régions de cache avec les méthodes : <literal>getQueries()</literal>, <literal>getEntityNames()</literal>, <literal>getCollectionRoleNames()</literal>, et <literal>getSecondLevelCacheRegionNames()</literal>."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/persistent_classes.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/persistent_classes.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/persistent_classes.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,660 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Persistent Classes"
+msgstr "Classes persistantes"
+
+#: index.docbook:7
+msgid "Persistent classes are classes in an application that implement the entities of the business problem (e.g. Customer and Order in an E-commerce application). Not all instances of a persistent class are considered to be in the persistent state - an instance may instead be transient or detached."
+msgstr "Les classes persistantes sont les classes d'une application qui implémentent les entités d'un problème métier (ex. Client et Commande dans une application de commerce électronique). Toutes les instances d'une classe persistante ne sont pas forcément dans l'état persistant - au lieu de cela, une instance peut être éphémère (NdT : transient) ou détachée."
+
+#: index.docbook:14
+msgid "Hibernate works best if these classes follow some simple rules, also known as the Plain Old Java Object (POJO) programming model. However, none of these rules are hard requirements. Indeed, Hibernate3 assumes very little about the nature of your persistent objects. You may express a domain model in other ways: using trees of <literal>Map</literal> instances, for example."
+msgstr "Hibernate fonctionne de manière optimale lorsque ces classes suivent quelques règles simples, aussi connues comme le modèle de programmation Plain Old Java Object (POJO). Cependant, aucune de ces règles ne sont des besoins absolus. En effet, Hibernate3 suppose très peu de choses à propos de la nature de vos objets persistants. Vous pouvez exprimer un modèle de domaine par d'autres moyens : utiliser des arbres d'instances de <literal>Map</literal>, par exemple."
+
+#: index.docbook:23
+msgid "A simple POJO example"
+msgstr "Un exemple simple de POJO"
+
+#: index.docbook:25
+msgid "Most Java applications require a persistent class representing felines."
+msgstr "Toute bonne application Java nécessite une classe persistante représentant les félins."
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ "\n"
+ " private Date birthdate;\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ " private int litterId;\n"
+ "\n"
+ " private Cat mother;\n"
+ " private Set kittens = new HashSet();\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ "\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ "\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " void setLitterId(int id) {\n"
+ " this.litterId = id;\n"
+ " }\n"
+ " public int getLitterId() {\n"
+ " return litterId;\n"
+ " }\n"
+ "\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " \n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kitten.setMother(this);\n"
+ " kitten.setLitterId( kittens.size() ); \n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ "\n"
+ " private Date birthdate;\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ " private int litterId;\n"
+ "\n"
+ " private Cat mother;\n"
+ " private Set kittens = new HashSet();\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ "\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ "\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " void setLitterId(int id) {\n"
+ " this.litterId = id;\n"
+ " }\n"
+ " public int getLitterId() {\n"
+ " return litterId;\n"
+ " }\n"
+ "\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ "\n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kitten.setMother(this);\n"
+ " kitten.setLitterId( kittens.size() );\n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:31
+msgid "There are four main rules to follow here:"
+msgstr "Il y a quatre règles à suivre ici :"
+
+#: index.docbook:37
+msgid "Implement a no-argument constructor"
+msgstr "Implémenter un constructeur sans argument"
+
+#: index.docbook:39
+msgid "<literal>Cat</literal> has a no-argument constructor. All persistent classes must have a default constructor (which may be non-public) so that Hibernate can instantiate them using <literal>Constructor.newInstance()</literal>. We strongly recommend having a default constructor with at least <emphasis>package</emphasis> visibility for runtime proxy generation in Hibernate."
+msgstr "<literal>Cat</literal> a un constructeur sans argument. Toutes les classes persistantes doivent avoir un constructeur par défaut (lequel peut ne pas être public) pour qu'Hibernate puissent les instancier en utilisant <literal>Constructor.newInstance()</literal>. Nous recommandons fortement d'avoir un constructeur par défaut avec au moins une visibilité <emphasis>paquet</emphasis> pour la génération du proxy à l'exécution dans Hibernate."
+
+#: index.docbook:49
+msgid "Provide an identifier property (optional)"
+msgstr "Fournir une propriété d'indentifiant (optionnel)"
+
+#: index.docbook:51
+msgid "<literal>Cat</literal> has a property called <literal>id</literal>. This property maps to the primary key column of a database table. The property might have been called anything, and its type might have been any primitive type, any primitive \"wrapper\" type, <literal>java.lang.String</literal> or <literal>java.util.Date</literal>. (If your legacy database table has composite keys, you can even use a user-defined class with properties of these types - see the section on composite identifiers later.)"
+msgstr "<literal>Cat</literal> possède une propriété appelée <literal>id</literal>. Cette propriété mappe la valeur de la colonne de clé primaire de la table d'une base de données.La propriété aurait pu s'appeler complètement autrement, et son type aurait pu être n'importe quel type primitif, n'importe quel \"encapsuleur\" de type primitif, <literal>java.lang.String</literal> ou <literal>java.util.Date</literal>. (Si votre base de données héritée possède des clés composites, elles peuvent être mappées en utilisant une classe définie par l'utilisateur et possédant les propriétés associées aux types de la clé composite - voir la section concernant les identifiants composites plus tard)."
+
+#: index.docbook:60
+msgid "The identifier property is strictly optional. You can leave them off and let Hibernate keep track of object identifiers internally. We do not recommend this, however."
+msgstr "La propriété d'identifiant est strictement optionnelle. Vous pouver l'oublier et laisser Hibernate s'occuper des identifiants de l'objet en interne. Toutefois, nous ne le recommandons pas."
+
+#: index.docbook:65
+msgid "In fact, some functionality is available only to classes which declare an identifier property:"
+msgstr "En fait, quelques fonctionnalités ne sont disponibles que pour les classes déclarant un identifiant de propriété :"
+
+#: index.docbook:72
+msgid "Transitive reattachment for detached objects (cascade update or cascade merge) - see"
+msgstr "Les réattachements transitifs pour les objets détachés (mise à jour en cascade ou fusion en cascade) - voir"
+
+#: index.docbook:79
+msgid "Session.saveOrUpdate()"
+msgstr "Session.saveOrUpdate()"
+
+#: index.docbook:84
+msgid "Session.merge()"
+msgstr "Session.merge()"
+
+#: index.docbook:89
+msgid "We recommend you declare consistently-named identifier properties on persistent classes. We further recommend that you use a nullable (ie. non-primitive) type."
+msgstr "Nous recommandons que vous déclariez les propriétés d'identifiant de manière uniforme. Nous recommandons également que vous utilisiez un type nullable (ie. non primitif)."
+
+#: index.docbook:96
+msgid "Prefer non-final classes (optional)"
+msgstr "Favoriser les classes non finales (optionnel)"
+
+#: index.docbook:97
+msgid "A central feature of Hibernate, <emphasis>proxies</emphasis>, depends upon the persistent class being either non-final, or the implementation of an interface that declares all public methods."
+msgstr "Une fonctionnalité clef d'Hibernate, les <emphasis>proxies</emphasis>, nécessitent que la classe persistente soit non finale ou qu'elle soit l'implémentation d'une interface qui déclare toutes les méthodes publiques."
+
+#: index.docbook:102
+msgid "You can persist <literal>final</literal> classes that do not implement an interface with Hibernate, but you won't be able to use proxies for lazy association fetching - which will limit your options for performance tuning."
+msgstr "Vous pouvez persister, grâce à Hibernate, les classes <literal>final</literal> qui n'implémentent pas d'interface, mais vous ne pourrez pas utiliser les proxies pour les chargements d'associations paresseuses - ce qui limitera vos possibilités d'ajustement des performances."
+
+#: index.docbook:107
+msgid "You should also avoid declaring <literal>public final</literal> methods on the non-final classes. If you want to use a class with a <literal>public final</literal> method, you must explicitly disable proxying by setting <literal>lazy=\"false\"</literal>."
+msgstr "Vous devriez aussi éviter de déclarer des méthodes <literal>public final</literal> sur des classes non-finales. Si vous voulez utiliser une classe avec une méthode <literal>public final</literal>, vous devez explicitement désactiver les proxies en paramétrant <literal>lazy=\"false\"</literal>."
+
+#: index.docbook:115
+msgid "Declare accessors and mutators for persistent fields (optional)"
+msgstr "Déclarer les accesseurs et mutateurs des attributs persistants (optionnel)"
+
+#: index.docbook:117
+msgid "<literal>Cat</literal> declares accessor methods for all its persistent fields. Many other ORM tools directly persist instance variables. We believe it is better to provide an indirection between the relational schema and internal data structures of the class. By default, Hibernate persists JavaBeans style properties, and recognizes method names of the form <literal>getFoo</literal>, <literal>isFoo</literal> and <literal>setFoo</literal>. You may switch to direct field access for particular properties, if needed."
+msgstr "<literal>Cat</literal> déclare des mutateurs pour toutes ses champs persistants. Beaucoup d'autres solutions de mapping Objet/relationnel persistent directement les variables d'instance. Nous pensons qu'il est bien mieux de fournir une indirection entre le schéma relationnel et les structures de données internes de la classe. Par défaut, Hibernate persiste les propriétés suivant le style JavaBean, et reconnaît les noms de méthodes de la forme <literal> getFoo</literal>, <literal>isFoo</literal> et <literal>setFoo</literal>. Nous pouvons changer pour un accès direct aux champs pour des propriétés particulières, si besoin est."
+
+#: index.docbook:127
+msgid "Properties need <emphasis>not</emphasis> be declared public - Hibernate can persist a property with a default, <literal>protected</literal> or <literal>private</literal> get / set pair."
+msgstr "Les propriétés <emphasis>n'ont pas</emphasis> à être déclarées publiques - Hibernate peut persister une propriété avec un paire de getter/setter de visibilité par défault, <literal>protected</literal> ou <literal> private</literal>."
+
+#: index.docbook:138
+msgid "Implementing inheritance"
+msgstr "Implémenter l'héritage"
+
+#: index.docbook:140
+msgid "A subclass must also observe the first and second rules. It inherits its identifier property from the superclass, <literal>Cat</literal>."
+msgstr "Une sous-classe doit également suivre la première et la seconde règle. Elle hérite sa propriété d'identifiant de <literal>Cat</literal>."
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "public class DomesticCat extends Cat {\n"
+ " private String name;\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ " protected void setName(String name) {\n"
+ " this.name=name;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "public class DomesticCat extends Cat {\n"
+ " private String name;\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ " protected void setName(String name) {\n"
+ " this.name=name;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:149
+msgid "Implementing <literal>equals()</literal> and <literal>hashCode()</literal>"
+msgstr "Implémenter <literal>equals()</literal> et <literal>hashCode()</literal>"
+
+#: index.docbook:151
+msgid "You have to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods if you"
+msgstr "Vous devez surcharger les méthodes <literal>equals()</literal> et <literal>hashCode()</literal> si vous"
+
+#: index.docbook:157
+msgid "intend to put instances of persistent classes in a <literal>Set</literal> (the recommended way to represent many-valued associations) <emphasis>and</emphasis>"
+msgstr "avez l'intention de mettre des instances de classes persistantes dans un <literal>Set</literal> (la manière recommandée pour représenter des associations pluri-valuées) <emphasis>et</emphasis>"
+
+#: index.docbook:164
+msgid "intend to use reattachment of detached instances"
+msgstr "avez l'intention d'utiliser le réattachement d'instances détachées"
+
+#: index.docbook:170
+msgid "Hibernate guarantees equivalence of persistent identity (database row) and Java identity only inside a particular session scope. So as soon as we mix instances retrieved in different sessions, we must implement <literal>equals()</literal> and <literal>hashCode()</literal> if we wish to have meaningful semantics for <literal>Set</literal>s."
+msgstr "Hibernate garantit l'équivalence de l'identité persistante (ligne de base de données) et l'identité Java seulement à l'intérieur de la portée d'une session particulière. Donc dès que nous mélangeons des instances venant de différentes sessions, nous devons implémenter <literal>equals()</literal> et <literal>hashCode()</literal> si nous souhaitons avoir une sémantique correcte pour les <literal>Set</literal>s."
+
+#: index.docbook:178
+msgid "The most obvious way is to implement <literal>equals()</literal>/<literal>hashCode()</literal> by comparing the identifier value of both objects. If the value is the same, both must be the same database row, they are therefore equal (if both are added to a <literal>Set</literal>, we will only have one element in the <literal>Set</literal>). Unfortunately, we can't use that approach with generated identifiers! Hibernate will only assign identifier values to objects that are persistent, a newly created instance will not have any identifier value! Furthermore, if an instance is unsaved and currently in a <literal>Set</literal>, saving it will assign an identifier value to the object. If <literal>equals()</literal> and <literal>hashCode()</literal> are based on the identifier value, the hash code would change, breaking the contract of the <literal>Set</literal>. See the Hibernate website for a full discussion of this problem. Note that this is not a Hibernate issue, but !
normal Java semantics of object identity and equality."
+msgstr "La manière la plus évidente est d'implémenter <literal>equals()</literal>/<literal>hashCode()</literal> en comparant la valeur de l'identifiant des deux objets. Si cette valeur est identique, les deux doivent représenter la même ligne de base de données, ils sont donc égaux (si les deux sont ajoutés à un <literal>Set</literal>, nous n'aurons qu'un seul élément dans le <literal>Set</literal>). Malheureusement, nous ne pouvons pas utiliser cette approche avec des identifiants générés ! Hibernate n'assignera de valeur d'identifiant qu'aux objets qui sont persistants, une instance nouvellement créée n'aura donc pas de valeur d'identifiant ! De plus, si une instance est non sauvegardée et actuellement dans un <literal>Set</literal>, le sauvegarder assignera une valeur d'identifiant à l'objet. Si <literal>equals()</literal> et <literal>hashCode()</literal> sont basées sur la valeur de l'identifiant, le code de hachage devrait changer, rompant le contrat!
du <literal>Set</literal>. Regardez sur le site web d'Hibernate pour une discussion complète de ce problème. Notez que ceci n'est pas un problème d'Hibernate, mais la sémantique normale de Java pour l'identité d'un objet et l'égalité."
+
+#: index.docbook:192
+msgid "We recommend implementing <literal>equals()</literal> and <literal>hashCode()</literal> using <emphasis>Business key equality</emphasis>. Business key equality means that the <literal>equals()</literal> method compares only the properties that form the business key, a key that would identify our instance in the real world (a <emphasis>natural</emphasis> candidate key):"
+msgstr "Nous recommandons donc d'implémenter <literal>equals()</literal> et <literal>hashCode()</literal> en utilisant <emphasis> l'égalité par clé métier</emphasis>.L'égalité par clé métier signifie que la méthode <literal>equals()</literal> compare uniquement les propriétés qui forment une clé métier, une clé qui identifierait notre instance dans le monde réel (une clé candidate <emphasis>naturelle</emphasis>) :"
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[public class Cat {\n"
+ "\n"
+ " ...\n"
+ " public boolean equals(Object other) {\n"
+ " if (this == other) return true;\n"
+ " if ( !(other instanceof Cat) ) return false;\n"
+ "\n"
+ " final Cat cat = (Cat) other;\n"
+ "\n"
+ " if ( !cat.getLitterId().equals( getLitterId() ) ) return false;\n"
+ " if ( !cat.getMother().equals( getMother() ) ) return false;\n"
+ "\n"
+ " return true;\n"
+ " }\n"
+ "\n"
+ " public int hashCode() {\n"
+ " int result;\n"
+ " result = getMother().hashCode();\n"
+ " result = 29 * result + getLitterId();\n"
+ " return result;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Cat {\n"
+ "\n"
+ " ...\n"
+ " public boolean equals(Object other) {\n"
+ " if (this == other) return true;\n"
+ " if ( !(other instanceof Cat) ) return false;\n"
+ "\n"
+ " final Cat cat = (Cat) other;\n"
+ "\n"
+ " if ( !cat.getLitterId().equals( getLitterId() ) ) return false;\n"
+ " if ( !cat.getMother().equals( getMother() ) ) return false;\n"
+ "\n"
+ " return true;\n"
+ " }\n"
+ "\n"
+ " public int hashCode() {\n"
+ " int result;\n"
+ " result = getMother().hashCode();\n"
+ " result = 29 * result + getLitterId();\n"
+ " return result;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:202
+msgid "Note that a business key does not have to be as solid as a database primary key candidate (see <xref linkend=\"transactions-basics-identity\"/>). Immutable or unique properties are usually good candidates for a business key."
+msgstr "Notez qu'une clef métier ne doit pas être solide comme une clef primaire de base de données (voir <xref linkend=\"transactions-basics-identity\"/>). Les propriétés immuables ou uniques sont généralement de bonnes candidates pour une clef métier."
+
+#: index.docbook:212
+msgid "Dynamic models"
+msgstr "Modèles dynamiques"
+
+#: index.docbook:215
+msgid "Note that the following features are currently considered experimental and may change in the near future."
+msgstr "Notez que la fonctionnalités suivantes sont actuellement considérées comme expérimentales et peuvent changer dans un futur proche."
+
+#: index.docbook:219
+msgid "Persistent entities don't necessarily have to be represented as POJO classes or as JavaBean objects at runtime. Hibernate also supports dynamic models (using <literal>Map</literal>s of <literal>Map</literal>s at runtime) and the representation of entities as DOM4J trees. With this approach, you don't write persistent classes, only mapping files."
+msgstr "Les entités persistantes ne doivent pas nécessairement être représentées comme des classes POJO ou des objets JavaBean à l'exécution. Hibernate supporte aussi les modèles dynamiques (en utilisant des <literal>Map</literal>s de <literal>Map</literal>s à l'exécution) et la représentation des entités comme des arbres DOM4J. Avec cette approche, vous n'écrivez pas de classes persistantes, seulement des fichiers de mapping."
+
+#: index.docbook:227
+msgid "By default, Hibernate works in normal POJO mode. You may set a default entity representation mode for a particular <literal>SessionFactory</literal> using the <literal>default_entity_mode</literal> configuration option (see <xref linkend=\"configuration-optional-properties\"/>."
+msgstr "Par défaut, Hibernate fonctionne en mode POJO normal. Vous pouvez paramétrer un mode de représentation d'entité par défaut pour une <literal>SessionFactory</literal> particulière en utilisant l'option de configuration <literal>default_entity_mode</literal> (voir <xref linkend=\"configuration-optional-properties\"/>)."
+
+#: index.docbook:234
+msgid "The following examples demonstrates the representation using <literal>Map</literal>s. First, in the mapping file, an <literal>entity-name</literal> has to be declared instead of (or in addition to) a class name:"
+msgstr "Les exemples suivants démontrent la représentation utilisant des <literal>Map</literal>s. D'abord, dans le fichier de mapping, un <literal>entity-name</literal> doit être déclaré au lieu (ou en plus) d'un nom de classe :"
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class entity-name=\"Customer\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " type=\"long\"\n"
+ " column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <property name=\"address\"\n"
+ " column=\"ADDRESS\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <many-to-one name=\"organization\"\n"
+ " column=\"ORGANIZATION_ID\"\n"
+ " class=\"Organization\"/>\n"
+ "\n"
+ " <bag name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " lazy=\"false\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"CUSTOMER_ID\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ " \n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class entity-name=\"Customer\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " type=\"long\"\n"
+ " column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <property name=\"address\"\n"
+ " column=\"ADDRESS\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <many-to-one name=\"organization\"\n"
+ " column=\"ORGANIZATION_ID\"\n"
+ " class=\"Organization\"/>\n"
+ "\n"
+ " <bag name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " lazy=\"false\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"CUSTOMER_ID\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:242
+msgid "Note that even though associations are declared using target class names, the target type of an associations may also be a dynamic entity instead of a POJO."
+msgstr "Notez que même si des associations sont déclarées en utilisant des noms de classe cible, le type de cible d'une association peut aussi être une entité dynamique au lieu d'un POJO."
+
+#: index.docbook:249
+msgid "After setting the default entity mode to <literal>dynamic-map</literal> for the <literal>SessionFactory</literal>, we can at runtime work with <literal>Map</literal>s of <literal>Map</literal>s:"
+msgstr "Après avoir configuré le mode d'entité par défaut à <literal>dynamic-map</literal> pour la <literal>SessionFactory</literal>, nous pouvons lors de l'exécution fonctionner avec des <literal>Map</literal>s de <literal>Map</literal>s :"
+
+#: index.docbook:255
+msgid ""
+ "<![CDATA[Session s = openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ "Session s = openSession();\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "\n"
+ "// Create an organization\n"
+ "Map foobar = new HashMap();\n"
+ "foobar.put(\"name\", \"Foobar Inc.\");\n"
+ "\n"
+ "// Link both\n"
+ "david.put(\"organization\", foobar);\n"
+ "\n"
+ "// Save both\n"
+ "s.save(\"Customer\", david);\n"
+ "s.save(\"Organization\", foobar);\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();]]>"
+msgstr ""
+ "<![CDATA[Session s = openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ "Session s = openSession();\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "\n"
+ "// Create an organization\n"
+ "Map foobar = new HashMap();\n"
+ "foobar.put(\"name\", \"Foobar Inc.\");\n"
+ "\n"
+ "// Link both\n"
+ "david.put(\"organization\", foobar);\n"
+ "\n"
+ "// Save both\n"
+ "s.save(\"Customer\", david);\n"
+ "s.save(\"Organization\", foobar);\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();]]>"
+
+#: index.docbook:257
+msgid "The advantages of a dynamic mapping are quick turnaround time for prototyping without the need for entity class implementation. However, you lose compile-time type checking and will very likely deal with many exceptions at runtime. Thanks to the Hibernate mapping, the database schema can easily be normalized and sound, allowing to add a proper domain model implementation on top later on."
+msgstr "Les avantages d'un mapping dynamique sont un gain de temps pour le prototypage sans la nécessité d'implémenter les classes d'entité. Pourtant, vous perdez la vérification du typage au moment de la compilation et aurez plus d'exceptions à gérer lors de l'exécution. Grâce au mapping d'Hibernate, le schéma de la base de données peut facilement être normalisé et solidifié, permettant de rajouter une implémentation propre du modèle de domaine plus tard."
+
+#: index.docbook:265
+msgid "Entity representation modes can also be set on a per <literal>Session</literal> basis:"
+msgstr "Les modes de représentation d'une entité peut aussi être configuré par <literal>Session</literal> :"
+
+#: index.docbook:270
+msgid ""
+ "<![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "dynamicSession.save(\"Customer\", david);\n"
+ "...\n"
+ "dynamicSession.flush();\n"
+ "dynamicSession.close()\n"
+ "...\n"
+ "// Continue on pojoSession\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "dynamicSession.save(\"Customer\", david);\n"
+ "...\n"
+ "dynamicSession.flush();\n"
+ "dynamicSession.close()\n"
+ "...\n"
+ "// Continue on pojoSession\n"
+ "]]>"
+
+#: index.docbook:273
+msgid "Please note that the call to <literal>getSession()</literal> using an <literal>EntityMode</literal> is on the <literal>Session</literal> API, not the <literal>SessionFactory</literal>. That way, the new <literal>Session</literal> shares the underlying JDBC connection, transaction, and other context information. This means you don't have tocall <literal>flush()</literal> and <literal>close()</literal> on the secondary <literal>Session</literal>, and also leave the transaction and connection handling to the primary unit of work."
+msgstr "Veuillez noter que l'appel à <literal>getSession()</literal> en utilisant un <literal>EntityMode</literal> se fait sur l'API <literal>Session</literal>, pas <literal>SessionFactory</literal>. De cette manière, la nouvelle <literal>Session</literal> partage les connexions JDBC, transactions et autres informations de contexte sous-jacentes. Cela signifie que vous n'avez pas à appeler <literal>flush()</literal> et <literal>close()</literal> sur la <literal>Session</literal> secondaire, et laissez aussi la gestion de la transaction et de la connexion à l'unité de travail primaire."
+
+#: index.docbook:283
+msgid "More information about the XML representation capabilities can be found in <xref linkend=\"xml\"/>."
+msgstr "Plus d'informations à propos de la représentation XML peuvent être trouvées dans <xref linkend=\"xml\"/>."
+
+#: index.docbook:291
+msgid "Tuplizers"
+msgstr "Tuplizers"
+
+#: index.docbook:293
+msgid "<literal>org.hibernate.tuple.Tuplizer</literal>, and its sub-interfaces, are responsible for managing a particular representation of a piece of data, given that representation's <literal>org.hibernate.EntityMode</literal>. If a given piece of data is thought of as a data structure, then a tuplizer is the thing which knows how to create such a data structure and how to extract values from and inject values into such a data structure. For example, for the POJO entity mode, the correpsonding tuplizer knows how create the POJO through its constructor and how to access the POJO properties using the defined property accessors. There are two high-level types of Tuplizers, represented by the <literal>org.hibernate.tuple.entity.EntityTuplizer</literal> and <literal>org.hibernate.tuple.component.ComponentTuplizer</literal> interfaces. <literal>EntityTuplizer</literal>s are responsible for managing the above mentioned contracts in regards to entities, while <literal>ComponentTu!
plizer</literal>s do the same for components."
+msgstr "<literal>org.hibernate.tuple.Tuplizer</literal>, et ses sous-interfaces, sont responsables de la gestion d'une représentation particulière d'un morceau de données, en fonction du <literal>org.hibernate.EntityMode</literal> de réprésentation. Si un morceau donné de données est pensé comme une structure de données, alors un tuplizer est la chose qui sait comment créer une telle structure de données, comment extraire des valeurs et injecter des valeurs dans une telle structure de données. Par exemple, pour le mode d'entité POJO, le tuplizer correspondant sait comment créer le POJO à travers son constructeur et comment accéder aux propriétés du POJO utilisant les accesseurs de la propriété définie. Il y a deux types de Tuplizers haut niveau, représenté par les interfaces <literal>org.hibernate.tuple.EntityTuplizer</literal> et <literal>org.hibernate.tuple.ComponentTuplizer</literal>. Les <literal>EntityTuplizer</literal>s sont responsables de la g!
estion des contrats mentionnés ci-dessus pour les entités, alors que les <literal>ComponentTuplizer</literal>s s'occupent des composants."
+
+#: index.docbook:308
+msgid "Users may also plug in their own tuplizers. Perhaps you require that a <literal>java.util.Map</literal> implementation other than <literal>java.util.HashMap</literal> be used while in the dynamic-map entity-mode; or perhaps you need to define a different proxy generation strategy than the one used by default. Both would be achieved by defining a custom tuplizer implementation. Tuplizers definitions are attached to the entity or component mapping they are meant to manage. Going back to the example of our customer entity:"
+msgstr "Les utilisateurs peuvent aussi brancher leurs propres tuplizers. Peut-être vous est-il nécessaire qu'une implémentation de <literal>java.util.Map</literal> autre que <literal>java.util.HashMap</literal> soit utilisée dans le mode d'entité dynamic-map ; ou peut-être avez-vous besoin de définir une statégie de génération de proxy différente de celle utilisée par défaut. Les deux devraient être effectuées en définissant une implémentation de tuplizer utilisateur. Les définitions de tuplizers sont attachées au mapping de l'entité ou du composant qu'ils sont censés gérer. Retour à l'exemple de notre entité utilisateur :"
+
+#: index.docbook:317
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " <class entity-name=\"Customer\">\n"
+ " <!--\n"
+ " Override the dynamic-map entity-mode\n"
+ " tuplizer for the customer entity\n"
+ " -->\n"
+ " <tuplizer entity-mode=\"dynamic-map\"\n"
+ " class=\"CustomMapTuplizerImpl\"/>\n"
+ "\n"
+ " <id name=\"id\" type=\"long\" column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <!-- other properties -->\n"
+ " ...\n"
+ " </class>\n"
+ "</hibernate-mapping>\n"
+ "\n"
+ "\n"
+ "public class CustomMapTuplizerImpl\n"
+ " extends org.hibernate.tuple.entity.DynamicMapEntityTuplizer {\n"
+ " // override the buildInstantiator() method to plug in our custom map...\n"
+ " protected final Instantiator buildInstantiator(\n"
+ " org.hibernate.mapping.PersistentClass mappingInfo) {\n"
+ " return new CustomMapInstantiator( mappingInfo );\n"
+ " }\n"
+ "\n"
+ " private static final class CustomMapInstantiator\n"
+ " extends org.hibernate.tuple.DynamicMapInstantitor {\n"
+ " // override the generateMap() method to return our custom map...\n"
+ " protected final Map generateMap() {\n"
+ " return new CustomMap();\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " <class entity-name=\"Customer\">\n"
+ " <!--\n"
+ " Override the dynamic-map entity-mode\n"
+ " tuplizer for the customer entity\n"
+ " -->\n"
+ " <tuplizer entity-mode=\"dynamic-map\"\n"
+ " class=\"CustomMapTuplizerImpl\"/>\n"
+ "\n"
+ " <id name=\"id\" type=\"long\" column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <!-- other properties -->\n"
+ " ...\n"
+ " </class>\n"
+ "</hibernate-mapping>\n"
+ "\n"
+ "\n"
+ "public class CustomMapTuplizerImpl\n"
+ " extends org.hibernate.tuple.DynamicMapEntityTuplizer {\n"
+ " // override the buildInstantiator() method to plug in our custom map...\n"
+ " protected final Instantiator buildInstantiator(\n"
+ " org.hibernate.mapping.PersistentClass mappingInfo) {\n"
+ " return new CustomMapInstantiator( mappingInfo );\n"
+ " }\n"
+ "\n"
+ " private static final class CustomMapInstantiator\n"
+ " extends org.hibernate.tuple.DynamicMapInstantitor {\n"
+ " // override the generateMap() method to return our custom map...\n"
+ " protected final Map generateMap() {\n"
+ " return new CustomMap();\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:322
+msgid "TODO: Document user-extension framework in the property and proxy packages"
+msgstr "TODO: Document user-extension framework in the property and proxy packages"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/preface.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/preface.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/preface.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,68 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Preface"
+msgstr "Préface"
+
+#: index.docbook:23
+msgid "Working with object-oriented software and a relational database can be cumbersome and time consuming in today's enterprise environments. Hibernate is an object/relational mapping tool for Java environments. The term object/relational mapping (ORM) refers to the technique of mapping a data representation from an object model to a relational data model with a SQL-based schema."
+msgstr "Travailler dans les deux univers que sont l'orienté objet et la base de données relationnelle peut être lourd et consommateur en temps dans le monde de l'entreprise d'aujourd'hui. Hibernate est un outil de mapping objet/relationnel pour le monde Java. Le terme mapping objet/relationnel (ORM) décrit la technique consistant à faire le lien entre la représentation objet des données et sa représentation relationnelle basée sur un schéma SQL."
+
+#: index.docbook:31
+msgid "Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities and can significantly reduce development time otherwise spent with manual data handling in SQL and JDBC."
+msgstr "Non seulement, Hibernate s'occupe du transfert des classes Java dans les tables de la base de données (et des types de données Java dans les types de données SQL), mais il permet de requêter les données et propose des moyens de les récupérer. Il peut donc réduire de manière significative le temps de développement qui aurait été autrement perdu dans une manipulation manuelle des données via SQL et JDBC."
+
+#: index.docbook:38
+msgid "Hibernates goal is to relieve the developer from 95 percent of common data persistence related programming tasks. Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate vendor-specific SQL code and will help with the common task of result set translation from a tabular representation to a graph of objects."
+msgstr "Le but d'Hibernate est de libérer le développeur de 95 pourcent des tâches de programmation liées à la persistance des données communes. Hibernate n'est probablement pas la meilleure solution pour les applications centrées sur les données qui n'utilisent que les procédures stockées pour implémenter la logique métier dans la base de données, il est le plus utile dans les modèles métier orientés objets dont la logique métier est implémentée dans la couche Java dite intermédiaire. Cependant, Hibernate vous aidera à supprimer ou à encapsuler le code SQL spécifique à votre base de données et vous aidera sur la tâche commune qu'est la transformation des données d'une représentation tabulaire à une représentation sous forme de graphe d'objets."
+
+#: index.docbook:48
+msgid "If you are new to Hibernate and Object/Relational Mapping or even Java, please follow these steps:"
+msgstr "Si vous êtes nouveau dans Hibernate et le mapping Objet/Relationnel voire même en Java, suivez ces quelques étapes :"
+
+#: index.docbook:55
+msgid "Read <xref linkend=\"tutorial\"/> for a tutorial with step-by-step instructions. The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr "Lisez <xref linkend=\"tutorial\"/> pour un didacticiel plus long avec plus d'instructions étape par étape."
+
+#: index.docbook:63
+msgid "Read <xref linkend=\"architecture\"/> to understand the environments where Hibernate can be used."
+msgstr "Lisez <xref linkend=\"architecture\"/> pour comprendre les environnements dans lesquels Hibernate peut être utilisé."
+
+#: index.docbook:69
+msgid "Have a look at the <literal>eg/</literal> directory in the Hibernate distribution, it contains a simple standalone application. Copy your JDBC driver to the <literal>lib/</literal> directory and edit <literal>etc/hibernate.properties</literal>, specifying correct values for your database. From a command prompt in the distribution directory, type <literal>ant eg</literal> (using Ant), or under Windows, type <literal>build eg</literal>."
+msgstr "Regardez le répertoire <literal>eg</literal> de la distribution Hibernate, il contient une application simple et autonome. Copiez votre pilote JDBC dans le répertoire <literal>lib/</literal> et éditez <literal>src/hibernate.properties</literal>, en positionnant correctement les valeurs pour votre base de données. A partir d'une invite de commande dans le répertoire de la distribution, tapez <literal>ant eg</literal> (cela utilise Ant), ou sous Windows tapez <literal>build eg</literal>."
+
+#: index.docbook:80
+msgid "Use this reference documentation as your primary source of information. Consider reading <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2) if you need more help with application design or if you prefer a step-by-step tutorial. Also visit http://caveatemptor.hibernate.org and download the example application for Java Persistence with Hibernate."
+msgstr "Faîtes de cette documentation de référence votre principale source d'information. Pensez à lire <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2) si vous avez besoin de plus d'aide avec le design d'applications ou si vous préférez un tutoriel pas à pas. Visitez aussi http://caveatemptor.hibernate.org et téléchargez l'application exemple pour Java Persistence with Hibernate."
+
+#: index.docbook:90
+msgid "FAQs are answered on the Hibernate website."
+msgstr "Les questions les plus fréquemment posées (FAQs) trouvent leur réponse sur le site web Hibernate."
+
+#: index.docbook:95
+msgid "Third party demos, examples, and tutorials are linked on the Hibernate website."
+msgstr "Des démos, exemples et tutoriaux de tierces personnes sont référencés sur le site web Hibernate."
+
+#: index.docbook:101
+msgid "The Community Area on the Hibernate website is a good resource for design patterns and various integration solutions (Tomcat, JBoss AS, Struts, EJB, etc.)."
+msgstr "La zone communautaire (Community Area) du site web Hibernate est une bonne source d'information sur les design patterns et sur différentes solutions d'intégration d'Hibernate (Tomcat, JBoss, Spring Framework, Struts, EJB, etc)."
+
+#: index.docbook:109
+msgid "If you have questions, use the user forum linked on the Hibernate website. We also provide a JIRA issue trackings system for bug reports and feature requests. If you are interested in the development of Hibernate, join the developer mailing list. If you are interested in translating this documentation into your language, contact us on the developer mailing list."
+msgstr "Si vous avez des questions, utilisez le forum utilisateurs du site web Hibernate. Nous utilisons également l'outil de gestion des incidents JIRA pour tout ce qui est rapports de bogue et demandes d'évolution. Si vous êtes intéressé par le développement d'Hibernate, joignez-vous à la liste de diffusion de développement."
+
+#: index.docbook:117
+msgid "Commercial development support, production support, and training for Hibernate is available through JBoss Inc. (see http://www.hibernate.org/SupportTraining/). Hibernate is a Professional Open Source project and a critical component of the JBoss Enterprise Middleware System (JEMS) suite of products."
+msgstr "Le développement commercial, le support de production et les formations à Hibernate sont proposés par JBoss Inc (voir http://www.hibernate.org/SupportTraining/). Hibernate est un projet Open Source professionnel et un composant critique de la suite de produits JBoss Enterprise Middleware System (JEMS)."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/query_criteria.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/query_criteria.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/query_criteria.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,672 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Criteria Queries"
+msgstr "Requêtes par critères"
+
+#: index.docbook:7
+msgid "Hibernate features an intuitive, extensible criteria query API."
+msgstr "Hibernate offre une API d'interrogation par critères intuitive et extensible."
+
+#: index.docbook:12
+msgid "Creating a <literal>Criteria</literal> instance"
+msgstr "Créer une instance de <literal>Criteria</literal>"
+
+#: index.docbook:14
+msgid "The interface <literal>org.hibernate.Criteria</literal> represents a query against a particular persistent class. The <literal>Session</literal> is a factory for <literal>Criteria</literal> instances."
+msgstr "L'interface <literal>net.sf.hibernate.Criteria</literal> représente une requête sur une classe persistente donnée. La <literal>Session</literal> fournit les instances de <literal>Criteria</literal>."
+
+#: index.docbook:20
+msgid ""
+ "<![CDATA[Criteria crit = sess.createCriteria(Cat.class);\n"
+ "crit.setMaxResults(50);\n"
+ "List cats = crit.list();]]>"
+msgstr ""
+ "<![CDATA[Criteria crit = sess.createCriteria(Cat.class);\n"
+ "crit.setMaxResults(50);\n"
+ "List cats = crit.list();]]>"
+
+#: index.docbook:25
+msgid "Narrowing the result set"
+msgstr "Restriction du résultat"
+
+#: index.docbook:27
+msgid "An individual query criterion is an instance of the interface <literal>org.hibernate.criterion.Criterion</literal>. The class <literal>org.hibernate.criterion.Restrictions</literal> defines factory methods for obtaining certain built-in <literal>Criterion</literal> types."
+msgstr "Un criterion (critère de recherche) est une instance de l'interface <literal>org.hibernate.criterion.Criterion</literal>. La classe <literal>org.hibernate.criterion.Restrictions</literal> définit des méthodes pour obtenir des types de <literal>Criterion</literal> pré-définis."
+
+#: index.docbook:35
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.between(\"weight\", minWeight, maxWeight) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.between(\"weight\", minWeight, maxWeight) )\n"
+ " .list();]]>"
+
+#: index.docbook:37
+msgid "Restrictions may be grouped logically."
+msgstr "Les restrictions peuvent être goupées de manière logique."
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.or(\n"
+ " Restrictions.eq( \"age\", new Integer(0) ),\n"
+ " Restrictions.isNull(\"age\")\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.or(\n"
+ " Restrictions.eq( \"age\", new Integer(0) ),\n"
+ " Restrictions.isNull(\"age\")\n"
+ " ) )\n"
+ " .list();]]>"
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.in( \"name\", new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( Restrictions.isNull(\"age\") )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(0) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(1) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(2) ) )\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.in( \"name\", new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( Restrictions.isNull(\"age\") )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(0) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(1) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(2) ) )\n"
+ " ) )\n"
+ " .list();]]>"
+
+#: index.docbook:45
+msgid "There are quite a range of built-in criterion types (<literal>Restrictions</literal> subclasses), but one that is especially useful lets you specify SQL directly."
+msgstr "Il y a plusieurs types de criterion pré-définis (sous classes de <literal>Restriction</literal>), mais l'une d'entre elle particulièrement utile vous permet de spécifier directement du SQL."
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.sqlRestriction(\"lower({alias}.name) like lower(?)\", \"Fritz%\", Hibernate.STRING) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.sql(\"lower({alias}.name) like lower(?)\", \"Fritz%\", Hibernate.STRING) )\n"
+ " .list();]]>"
+
+#: index.docbook:52
+msgid "The <literal>{alias}</literal> placeholder with be replaced by the row alias of the queried entity."
+msgstr "La zone <literal>{alias}</literal> sera remplacée par l'alias de colonne de l'entité que l'on souhaite intérroger."
+
+#: index.docbook:57
+msgid "An alternative approach to obtaining a criterion is to get it from a <literal>Property</literal> instance. You can create a <literal>Property</literal> by calling <literal>Property.forName()</literal>."
+msgstr "Une autre approche pour obtenir un criterion est de le récupérer d'une instance de <literal>Property</literal>. Vous pouvez créer une <literal>Property</literal> en appelant <literal>Property.forName()</literal>."
+
+#: index.docbook:63
+msgid ""
+ "<![CDATA[\n"
+ "Property age = Property.forName(\"age\");\n"
+ "List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( age.isNull() )\n"
+ " .add( age.eq( new Integer(0) ) )\n"
+ " .add( age.eq( new Integer(1) ) )\n"
+ " .add( age.eq( new Integer(2) ) )\n"
+ " ) )\n"
+ " .add( Property.forName(\"name\").in( new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "Property age = Property.forName(\"age\");\n"
+ "List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( age.isNull() )\n"
+ " .add( age.eq( new Integer(0) ) )\n"
+ " .add( age.eq( new Integer(1) ) )\n"
+ " .add( age.eq( new Integer(2) ) )\n"
+ " ) )\n"
+ " .add( Property.forName(\"name\").in( new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .list();]]>"
+
+#: index.docbook:68
+msgid "Ordering the results"
+msgstr "Trier les résultats"
+
+#: index.docbook:70
+msgid "You may order the results using <literal>org.hibernate.criterion.Order</literal>."
+msgstr "Vous pouvez trier les résultats en utilisant <literal>org.hibernate.criterion.Order</literal>."
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .addOrder( Order.asc(\"name\") )\n"
+ " .addOrder( Order.desc(\"age\") )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .addOrder( Order.asc(\"name\") )\n"
+ " .addOrder( Order.desc(\"age\") )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"name\").like(\"F%\") )\n"
+ " .addOrder( Property.forName(\"name\").asc() )\n"
+ " .addOrder( Property.forName(\"age\").desc() )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"name\").like(\"F%\") )\n"
+ " .addOrder( Property.forName(\"name\").asc() )\n"
+ " .addOrder( Property.forName(\"age\").desc() )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:81
+msgid "Associations"
+msgstr "Associations"
+
+#: index.docbook:83
+msgid "You may easily specify constraints upon related entities by navigating associations using <literal>createCriteria()</literal>."
+msgstr "Vous pouvez facilement spécifier des contraintes sur des entités liées, par des associations en utilisant <literal>createCriteria()</literal>."
+
+#: index.docbook:88
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .createCriteria(\"kittens\")\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .createCriteria(\"kittens\")\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .list();]]>"
+
+#: index.docbook:90
+msgid "note that the second <literal>createCriteria()</literal> returns a new instance of <literal>Criteria</literal>, which refers to the elements of the <literal>kittens</literal> collection."
+msgstr "Notez que la seconde <literal>createCriteria()</literal> retourne une nouvelle instance de <literal>Criteria</literal>, qui se rapporte aux éléments de la collection <literal>kittens</literal>."
+
+#: index.docbook:96
+msgid "The following, alternate form is useful in certain circumstances."
+msgstr "La forme alternative suivante est utile dans certains cas."
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createAlias(\"kittens\", \"kt\")\n"
+ " .createAlias(\"mate\", \"mt\")\n"
+ " .add( Restrictions.eqProperty(\"kt.name\", \"mt.name\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createAlias(\"kittens\", \"kt\")\n"
+ " .createAlias(\"mate\", \"mt\")\n"
+ " .add( Restrictions.eqProperty(\"kt.name\", \"mt.name\") )\n"
+ " .list();]]>"
+
+#: index.docbook:102
+msgid "(<literal>createAlias()</literal> does not create a new instance of <literal>Criteria</literal>.)"
+msgstr "(<literal>createAlias()</literal> ne crée pas de nouvelle instance de <literal>Criteria</literal>.)"
+
+#: index.docbook:107
+msgid "Note that the kittens collections held by the <literal>Cat</literal> instances returned by the previous two queries are <emphasis>not</emphasis> pre-filtered by the criteria! If you wish to retrieve just the kittens that match the criteria, you must use a <literal>ResultTransformer</literal>."
+msgstr "Notez que les collections kittens contenues dans les instances de <literal>Cat</literal> retournées par les deux précédentes requêtes ne sont <emphasis>pas</emphasis> pré-filtrées par les critères ! Si vous souhaitez récupérer uniquement les kittens qui correspondent à la criteria, vous devez utiliser <literal>ResultTransformer</literal>."
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createCriteria(\"kittens\", \"kt\")\n"
+ " .add( Restrictions.eq(\"name\", \"F%\") )\n"
+ " .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)\n"
+ " .list();\n"
+ "Iterator iter = cats.iterator();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Map map = (Map) iter.next();\n"
+ " Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);\n"
+ " Cat kitten = (Cat) map.get(\"kt\");\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createCriteria(\"kittens\", \"kt\")\n"
+ " .add( Restrictions.eq(\"name\", \"F%\") )\n"
+ " .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)\n"
+ " .list();\n"
+ "Iterator iter = cats.iterator();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Map map = (Map) iter.next();\n"
+ " Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);\n"
+ " Cat kitten = (Cat) map.get(\"kt\");\n"
+ "}]]>"
+
+#: index.docbook:119
+msgid "Dynamic association fetching"
+msgstr "Peuplement d'associations de manière dynamique"
+
+#: index.docbook:121
+msgid "You may specify association fetching semantics at runtime using <literal>setFetchMode()</literal>."
+msgstr "Vous pouvez spéficier au moment de l'exécution le peuplement d'une association en utilisant <literal>setFetchMode()</literal> (c'est-à -dire le chargement de celle-ci). Cela permet de surcharger les valeurs \"lazy\" et \"outer-join\" du mapping."
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .setFetchMode(\"mate\", FetchMode.EAGER)\n"
+ " .setFetchMode(\"kittens\", FetchMode.EAGER)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .setFetchMode(\"mate\", FetchMode.EAGER)\n"
+ " .setFetchMode(\"kittens\", FetchMode.EAGER)\n"
+ " .list();]]>"
+
+#: index.docbook:128
+msgid "This query will fetch both <literal>mate</literal> and <literal>kittens</literal> by outer join. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "Cette requête recherchera <literal>mate</literal> et <literal>kittens</literal> via les jointures externes. Voir <xref linkend=\"performance-fetching\"/> pour plus d'informations."
+
+#: index.docbook:136
+msgid "Example queries"
+msgstr "Requêtes par l'exemple"
+
+#: index.docbook:138
+msgid "The class <literal>org.hibernate.criterion.Example</literal> allows you to construct a query criterion from a given instance."
+msgstr "La classe <literal>org.hibernate.criterion.Example</literal> vous permet de construire un critère suivant une instance d'objet donnée."
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[Cat cat = new Cat();\n"
+ "cat.setSex('F');\n"
+ "cat.setColor(Color.BLACK);\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new Cat();\n"
+ "cat.setSex('F');\n"
+ "cat.setColor(Color.BLACK);\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .list();]]>"
+
+#: index.docbook:145
+msgid "Version properties, identifiers and associations are ignored. By default, null valued properties are excluded."
+msgstr "Les propriétés de type version, identifiant et association sont ignorées. Par défaut, les valeurs null sont exclues."
+
+#: index.docbook:150
+msgid "You can adjust how the <literal>Example</literal> is applied."
+msgstr "Vous pouvez ajuster la stratégie d'utilisation de valeurs de l'<literal>Exemple</literal>."
+
+#: index.docbook:154
+msgid ""
+ "<![CDATA[Example example = Example.create(cat)\n"
+ " .excludeZeroes() //exclude zero valued properties\n"
+ " .excludeProperty(\"color\") //exclude the property named \"color\"\n"
+ " .ignoreCase() //perform case insensitive string comparisons\n"
+ " .enableLike(); //use like for string comparisons\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add(example)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Example example = Example.create(cat)\n"
+ " .excludeZeroes() //exclude zero valued properties\n"
+ " .excludeProperty(\"color\") //exclude the property named \"color\"\n"
+ " .ignoreCase() //perform case insensitive string comparisons\n"
+ " .enableLike(); //use like for string comparisons\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add(example)\n"
+ " .list();]]>"
+
+#: index.docbook:156
+msgid "You can even use examples to place criteria upon associated objects."
+msgstr "Vous pouvez utiliser les \"exemples\" pour des critères sur les objets associés."
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .createCriteria(\"mate\")\n"
+ " .add( Example.create( cat.getMate() ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .createCriteria(\"mate\")\n"
+ " .add( Example.create( cat.getMate() ) )\n"
+ " .list();]]>"
+
+#: index.docbook:165
+msgid "Projections, aggregation and grouping"
+msgstr "Projections, agrégation et regroupement"
+
+#: index.docbook:166
+msgid "The class <literal>org.hibernate.criterion.Projections</literal> is a factory for <literal>Projection</literal> instances. We apply a projection to a query by calling <literal>setProjection()</literal>."
+msgstr "La classe <literal>org.hibernate.criterion.Projections</literal> est une fabrique d'instances de <literal>Projection</literal>. Nous appliquons une projection sur une requête en appelant <literal>setProjection()</literal>."
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.rowCount() )\n"
+ " .add( Restrictions.eq(\"color\", Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.rowCount() )\n"
+ " .add( Restrictions.eq(\"color\", Color.BLACK) )\n"
+ " .list();]]>"
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount() )\n"
+ " .add( Projections.avg(\"weight\") )\n"
+ " .add( Projections.max(\"weight\") )\n"
+ " .add( Projections.groupProperty(\"color\") )\n"
+ " )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount() )\n"
+ " .add( Projections.avg(\"weight\") )\n"
+ " .add( Projections.max(\"weight\") )\n"
+ " .add( Projections.groupProperty(\"color\") )\n"
+ " )\n"
+ " .list();]]>"
+
+#: index.docbook:176
+msgid "There is no explicit \"group by\" necessary in a criteria query. Certain projection types are defined to be <emphasis>grouping projections</emphasis>, which also appear in the SQL <literal>group by</literal> clause."
+msgstr "Il n'y a pas besoin de \"group by\" explicite dans une requête par critère. Certains types de projection sont définis pour être des <emphasis>projections de regroupement</emphasis>, lesquels apparaissent aussi dans la clause <literal>group by</literal> SQL."
+
+#: index.docbook:182
+msgid "An alias may optionally be assigned to a projection, so that the projected value may be referred to in restrictions or orderings. Here are two different ways to do this:"
+msgstr "Un alias peut optionnellement être assigné à une projection, ainsi la valeur projetée peut être référencée dans des restrictions ou des tris. Voici deux façons différentes de faire ça :"
+
+#: index.docbook:188
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.alias( Projections.groupProperty(\"color\"), \"colr\" ) )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.alias( Projections.groupProperty(\"color\"), \"colr\" ) )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+
+#: index.docbook:190
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.groupProperty(\"color\").as(\"colr\") )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.groupProperty(\"color\").as(\"colr\") )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+
+#: index.docbook:192
+msgid "The <literal>alias()</literal> and <literal>as()</literal> methods simply wrap a projection instance in another, aliased, instance of <literal>Projection</literal>. As a shortcut, you can assign an alias when you add the projection to a projection list:"
+msgstr "Les méthodes <literal>alias()</literal> et <literal>as()</literal> enveloppe simplement une instance de projection dans une autre instance (aliasée) de <literal>Projection</literal>. Comme un raccourci, vous pouvez assignez un alias lorsque vous ajoutez la projection à la liste de projections :"
+
+#: index.docbook:199
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount(), \"catCountByColor\" )\n"
+ " .add( Projections.avg(\"weight\"), \"avgWeight\" )\n"
+ " .add( Projections.max(\"weight\"), \"maxWeight\" )\n"
+ " .add( Projections.groupProperty(\"color\"), \"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount(), \"catCountByColor\" )\n"
+ " .add( Projections.avg(\"weight\"), \"avgWeight\" )\n"
+ " .add( Projections.max(\"weight\"), \"maxWeight\" )\n"
+ " .add( Projections.groupProperty(\"color\"), \"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+
+#: index.docbook:201
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Domestic.class, \"cat\")\n"
+ " .createAlias(\"kittens\", \"kit\")\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.property(\"cat.name\"), \"catName\" )\n"
+ " .add( Projections.property(\"kit.name\"), \"kitName\" )\n"
+ " )\n"
+ " .addOrder( Order.asc(\"catName\") )\n"
+ " .addOrder( Order.asc(\"kitName\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Domestic.class, \"cat\")\n"
+ " .createAlias(\"kittens\", \"kit\")\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.property(\"cat.name\"), \"catName\" )\n"
+ " .add( Projections.property(\"kit.name\"), \"kitName\" )\n"
+ " )\n"
+ " .addOrder( Order.asc(\"catName\") )\n"
+ " .addOrder( Order.asc(\"kitName\") )\n"
+ " .list();]]>"
+
+#: index.docbook:203
+msgid "You can also use <literal>Property.forName()</literal> to express projections:"
+msgstr "Vous pouvez aussi utiliser <literal>Property.forName()</literal> pour formuler des projections :"
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Property.forName(\"name\") )\n"
+ " .add( Property.forName(\"color\").eq(Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Property.forName(\"name\") )\n"
+ " .add( Property.forName(\"color\").eq(Color.BLACK) )\n"
+ " .list();]]>"
+
+#: index.docbook:209
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount().as(\"catCountByColor\") )\n"
+ " .add( Property.forName(\"weight\").avg().as(\"avgWeight\") )\n"
+ " .add( Property.forName(\"weight\").max().as(\"maxWeight\") )\n"
+ " .add( Property.forName(\"color\").group().as(\"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount().as(\"catCountByColor\") )\n"
+ " .add( Property.forName(\"weight\").avg().as(\"avgWeight\") )\n"
+ " .add( Property.forName(\"weight\").max().as(\"maxWeight\") )\n"
+ " .add( Property.forName(\"color\").group().as(\"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+
+#: index.docbook:214
+msgid "Detached queries and subqueries"
+msgstr "Requêtes et sous-requêtes détachées"
+
+#: index.docbook:215
+msgid "The <literal>DetachedCriteria</literal> class lets you create a query outside the scope of a session, and then later execute it using some arbitrary <literal>Session</literal>."
+msgstr "La classe <literal>DetachedCriteria</literal> vous laisse créer une requête en dehors de la portée de la session, et puis l'exécuter plus tard en utilisant n'importe quelle <literal>Session</literal> arbitraire."
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)\n"
+ " .add( Property.forName(\"sex\").eq('F') );\n"
+ " \n"
+ "Session session = ....;\n"
+ "Transaction txn = session.beginTransaction();\n"
+ "List results = query.getExecutableCriteria(session).setMaxResults(100).list();\n"
+ "txn.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)\n"
+ " .add( Property.forName(\"sex\").eq('F') );\n"
+ "\n"
+ "Session session = ....;\n"
+ "Transaction txn = session.beginTransaction();\n"
+ "List results = query.getExecutableCriteria(session).setMaxResults(100).list();\n"
+ "txn.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:222
+msgid "A <literal>DetachedCriteria</literal> may also be used to express a subquery. Criterion instances involving subqueries may be obtained via <literal>Subqueries</literal> or <literal>Property</literal>."
+msgstr "Une <literal>DetachedCriteria</literal> peut aussi être utilisée pour exprimer une sous-requête. Des instances de criterion impliquant des sous-requêtes peuvent être obtenues via <literal>Subqueries</literal> ou <literal>Property</literal>."
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\").avg() );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"weight\").gt(avgWeight) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\").avg() );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"weight\").gt(avgWeight) )\n"
+ " .list();]]>"
+
+#: index.docbook:230
+msgid ""
+ "<![CDATA[DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\") );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Subqueries.geAll(\"weight\", weights) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\") );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Subqueries.geAll(\"weight\", weights) )\n"
+ " .list();]]>"
+
+#: index.docbook:232
+msgid "Even correlated subqueries are possible:"
+msgstr "Même des requêtes corrélées sont possibles :"
+
+#: index.docbook:236
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, \"cat2\")\n"
+ " .setProjection( Property.forName(\"weight\").avg() )\n"
+ " .add( Property.forName(\"cat2.sex\").eqProperty(\"cat.sex\") );\n"
+ "session.createCriteria(Cat.class, \"cat\")\n"
+ " .add( Property.forName(\"weight\").gt(avgWeightForSex) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, \"cat2\")\n"
+ " .setProjection( Property.forName(\"weight\").avg() )\n"
+ " .add( Property.forName(\"cat2.sex\").eqProperty(\"cat.sex\") );\n"
+ "session.createCriteria(Cat.class, \"cat\")\n"
+ " .add( Property.forName(\"weight\").gt(avgWeightForSex) )\n"
+ " .list();]]>"
+
+#: index.docbook:245
+msgid "Queries by natural identifier"
+msgstr "Requêtes par identifiant naturel"
+
+#: index.docbook:247
+msgid "For most queries, including criteria queries, the query cache is not very efficient, because query cache invalidation occurs too frequently. However, there is one special kind of query where we can optimize the cache invalidation algorithm: lookups by a constant natural key. In some applications, this kind of query occurs frequently. The criteria API provides special provision for this use case."
+msgstr "Pour la plupart des requêtes, incluant les requêtes par critère, le cache de requêtes n'est pas très efficace, parce que l'invalidation du cache de requêtes arrive trop souvent. Cependant, il y a une sorte spéciale de requête où nous pouvons optimiser l'algorithme d'invalidation du cache : les recherches sur une clef naturelle constante. Dans certaines applications, cette sorte de requête se produit fréquemment. L'API de critère fournit une provision spéciale pour ce cas d'utilisation."
+
+#: index.docbook:255
+msgid "First, you should map the natural key of your entity using <literal><natural-id></literal>, and enable use of the second-level cache."
+msgstr "D'abord vous devriez mapper la clef naturelle de votre entité en utilisant <literal><natural-id></literal>, et activer l'utilisation du cache de second niveau."
+
+#: index.docbook:260
+msgid ""
+ "<![CDATA[<class name=\"User\">\n"
+ " <cache usage=\"read-write\"/>\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <natural-id>\n"
+ " <property name=\"name\"/>\n"
+ " <property name=\"org\"/>\n"
+ " </natural-id>\n"
+ " <property name=\"password\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"User\">\n"
+ " <cache usage=\"read-write\"/>\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <natural-id>\n"
+ " <property name=\"name\"/>\n"
+ " <property name=\"org\"/>\n"
+ " </natural-id>\n"
+ " <property name=\"password\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:262
+msgid "Note that this functionality is not intended for use with entities with <emphasis>mutable</emphasis> natural keys."
+msgstr "Notez que cette fonctionnalité n'est pas prévue pour l'utilisation avec des entités avec des clefs naturelles <emphasis>mutables</emphasis>."
+
+#: index.docbook:267
+msgid "Next, enable the Hibernate query cache."
+msgstr "Ensuite, activez le cache de requête d'Hibernate."
+
+#: index.docbook:271
+msgid "Now, <literal>Restrictions.naturalId()</literal> allows us to make use of the more efficient cache algorithm."
+msgstr "Maintenant <literal>Restrictions.naturalId()</literal> nous permet de rendre l'utilisation de l'algorithme de cache plus efficace."
+
+#: index.docbook:276
+msgid ""
+ "<![CDATA[session.createCriteria(User.class)\n"
+ " .add( Restrictions.naturalId()\n"
+ " .set(\"name\", \"gavin\")\n"
+ " .set(\"org\", \"hb\") \n"
+ " ).setCacheable(true)\n"
+ " .uniqueResult();]]>"
+msgstr ""
+ "<![CDATA[session.createCriteria(User.class)\n"
+ " .add( Restrictions.naturalId()\n"
+ " .set(\"name\", \"gavin\")\n"
+ " .set(\"org\", \"hb\")\n"
+ " ).setCacheable(true)\n"
+ " .uniqueResult();]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/query_hql.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/query_hql.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/query_hql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1512 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "HQL: The Hibernate Query Language"
+msgstr "HQL: Langage de requêtage d'Hibernate"
+
+#: index.docbook:7
+msgid "Hibernate is equipped with an extremely powerful query language that (quite intentionally) looks very much like SQL. But don't be fooled by the syntax; HQL is fully object-oriented, understanding notions like inheritence, polymorphism and association."
+msgstr "Hibernate fourni un langage d'interrogation extrêmement puissant qui ressemble (et c'est voulu) au SQL. Mais ne soyez pas distraits par la syntaxe ; HQL est totalement orienté objet, comprenant des notions d'héritage, de polymorphisme et d'association."
+
+#: index.docbook:14
+msgid "Case Sensitivity"
+msgstr "Sensibilité à la casse"
+
+#: index.docbook:16
+msgid "Queries are case-insensitive, except for names of Java classes and properties. So <literal>SeLeCT</literal> is the same as <literal>sELEct</literal> is the same as <literal>SELECT</literal> but <literal>org.hibernate.eg.FOO</literal> is not <literal>org.hibernate.eg.Foo</literal> and <literal>foo.barSet</literal> is not <literal>foo.BARSET</literal>."
+msgstr "Les requêtes sont insensibles à la casse, à l'exception des noms des classes Java et des propriétés. Ainsi, <literal>SeLeCT</literal> est identique à <literal>sELEct</literal> et à <literal>SELECT</literal> mais <literal>net.sf.hibernate.eg.FOO</literal> n'est pas identique <literal>net.sf.hibernate.eg.Foo</literal> et <literal>foo.barSet</literal> n'est pas identique à <literal>foo.BARSET</literal>."
+
+#: index.docbook:27
+msgid "This manual uses lowercase HQL keywords. Some users find queries with uppercase keywords more readable, but we find this convention ugly when embedded in Java code."
+msgstr "Ce guide utilise les mots clés HQL en minuscule. Certains utilisateurs trouvent les requêtes écrites avec les mots clés en majuscule plus lisibles, mais nous trouvons cette convention pénible lorsqu'elle est lue dans du code Java."
+
+#: index.docbook:35
+msgid "The from clause"
+msgstr "La clause from"
+
+#: index.docbook:37
+msgid "The simplest possible Hibernate query is of the form:"
+msgstr "La requête Hibernate la plus simple est de la forme :"
+
+#: index.docbook:41
+msgid "<![CDATA[from eg.Cat]]>"
+msgstr "<![CDATA[from eg.Cat]]>"
+
+#: index.docbook:43
+msgid "which simply returns all instances of the class <literal>eg.Cat</literal>. We don't usually need to qualify the class name, since <literal>auto-import</literal> is the default. So we almost always just write:"
+msgstr "qui retourne simplement toutes les instances de la classe <literal>eg.Cat</literal>. Nous n'avons pas besoin d'habitude de qualifier le nom de la classe, puisque <literal>auto-import</literal> est la valeur par défaut. Donc nous écrivons presque toujours :"
+
+#: index.docbook:49
+msgid "<![CDATA[from Cat]]>"
+msgstr "<![CDATA[from Cat]]>"
+
+#: index.docbook:51
+msgid "Most of the time, you will need to assign an <emphasis>alias</emphasis>, since you will want to refer to the <literal>Cat</literal> in other parts of the query."
+msgstr "La plupart du temps, vous devrez assigner un <emphasis>alias</emphasis> puisque vous voudrez faire référence à <literal>Cat</literal> dans d'autres parties de la requête."
+
+#: index.docbook:57, index.docbook:372
+msgid "<![CDATA[from Cat as cat]]>"
+msgstr "<![CDATA[from Cat as cat]]>"
+
+#: index.docbook:59
+msgid "This query assigns the alias <literal>cat</literal> to <literal>Cat</literal> instances, so we could use that alias later in the query. The <literal>as</literal> keyword is optional; we could also write:"
+msgstr "Cette requête assigne l'alias <literal>cat</literal> à l'instance <literal>Cat</literal>, nous pouvons donc utiliser cet alias ailleurs dans la requête. Le mot clé <literal>as</literal> est optionnel ; nous aurions pu écrire :"
+
+#: index.docbook:65
+msgid "<![CDATA[from Cat cat]]>"
+msgstr "<![CDATA[from Cat cat]]>"
+
+#: index.docbook:67
+msgid "Multiple classes may appear, resulting in a cartesian product or \"cross\" join."
+msgstr "Plusieurs classes peuvent apparaître, ce qui conduira à un produit cartésien (encore appelé jointures croisées)."
+
+#: index.docbook:71
+msgid "<![CDATA[from Formula, Parameter]]>"
+msgstr "<![CDATA[from Formula, Parameter]]>"
+
+#: index.docbook:72
+msgid "<![CDATA[from Formula as form, Parameter as param]]>"
+msgstr "<![CDATA[from Formula as form, Parameter as param]]>"
+
+#: index.docbook:74
+msgid "It is considered good practice to name query aliases using an initial lowercase, consistent with Java naming standards for local variables (eg. <literal>domesticCat</literal>)."
+msgstr "C'est une bonne pratique que de nommer les alias dans les requêtes en utilisant l'initiale en miniscule, ce qui a le mérite d'être en phase avec les standards de nommage Java pour les variables locales (<literal>domesticCat</literal>)."
+
+#: index.docbook:83
+msgid "Associations and joins"
+msgstr "Associations et jointures"
+
+#: index.docbook:85
+msgid "We may also assign aliases to associated entities, or even to elements of a collection of values, using a <literal>join</literal>."
+msgstr "On peut aussi assigner des alias à des entités associées, ou même aux éléments d'une collection de valeurs, en utilisant un <literal>join</literal> (jointure)."
+
+#: index.docbook:90
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join cat.mate as mate\n"
+ " left outer join cat.kittens as kitten]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join cat.mate as mate\n"
+ " left outer join cat.kittens as kitten]]>"
+
+#: index.docbook:92
+msgid "<![CDATA[from Cat as cat left join cat.mate.kittens as kittens]]>"
+msgstr "<![CDATA[from Cat as cat left join cat.mate.kittens as kittens]]>"
+
+#: index.docbook:94
+msgid "<![CDATA[from Formula form full join form.parameter param]]>"
+msgstr "<![CDATA[from Formula form full join form.parameter param]]>"
+
+#: index.docbook:96
+msgid "The supported join types are borrowed from ANSI SQL"
+msgstr "Les types de jointures supportées sont celles de ANSI SQL"
+
+#: index.docbook:103
+msgid "inner join"
+msgstr "<literal>inner join</literal> (jointure fermée)"
+
+#: index.docbook:108
+msgid "left outer join"
+msgstr "<literal>left outer join</literal> (jointure ouverte par la gauche)"
+
+#: index.docbook:113
+msgid "right outer join"
+msgstr "<literal>right outer join</literal> (jointure ouverte par la droite)"
+
+#: index.docbook:117
+msgid "<literal>full join</literal> (not usually useful)"
+msgstr "<literal>full join</literal> (jointure ouverte totalement - généralement inutile)"
+
+#: index.docbook:123
+msgid "The <literal>inner join</literal>, <literal>left outer join</literal> and <literal>right outer join</literal> constructs may be abbreviated."
+msgstr "Les constructions des jointures <literal>inner join</literal>, <literal>left outer join</literal> et <literal>right outer join</literal> peuvent être abbrégées."
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " join cat.mate as mate\n"
+ " left join cat.kittens as kitten]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat\n"
+ " join cat.mate as mate\n"
+ " left join cat.kittens as kitten]]>"
+
+#: index.docbook:130
+msgid "You may supply extra join conditions using the HQL <literal>with</literal> keyword."
+msgstr "Nous pouvons soumettre des conditions de jointure supplémentaires en utilisant le mot-clef HQL <literal>with</literal>."
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " left join cat.kittens as kitten\n"
+ " with kitten.bodyWeight > 10.0]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat\n"
+ " left join cat.kittens as kitten\n"
+ " with kitten.bodyWeight > 10.0]]>"
+
+#: index.docbook:137
+msgid "In addition, a \"fetch\" join allows associations or collections of values to be initialized along with their parent objects, using a single select. This is particularly useful in the case of a collection. It effectively overrides the outer join and lazy declarations of the mapping file for associations and collections. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "Par ailleurs, une jointure \"fetchée\" (rapportée) permet d'initialiser les associations ou collections de valeurs en même temps que leur objet parent, le tout n'utilisant qu'un seul Select. Ceci est particulièrement utile dans le cas des collections. Ce système permet de surcharger les déclarations \"lazy\" et \"outer-join\" des fichiers de mapping pour les associations et collections. Voir <xref linkend=\"performance-fetching\"/> pour plus d'informations."
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens]]>"
+
+#: index.docbook:147
+msgid "A fetch join does not usually need to assign an alias, because the associated objects should not be used in the <literal>where</literal> clause (or any other clause). Also, the associated objects are not returned directly in the query results. Instead, they may be accessed via the parent object. The only reason we might need an alias is if we are recursively join fetching a further collection:"
+msgstr "Une jointure \"fetchée\" (rapportée) n'a généralement pas besoin de se voir assigner un alias puisque les objets associés n'ont pas à être utilisés dans les autres clauses. Notez aussi que les objets associés ne sont pas retournés directement dans le résultat de la requête mais l'on peut y accéder via l'objet parent. La seule raison pour laquelle nous pourrions avoir besoin d'un alias est si nous récupérions récursivement une collection supplémentaire :"
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens child\n"
+ " left join fetch child.kittens]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens child\n"
+ " left join fetch child.kittens]]>"
+
+#: index.docbook:157
+msgid "Note that the <literal>fetch</literal> construct may not be used in queries called using <literal>iterate()</literal> (though <literal>scroll()</literal> can be used). Nor should <literal>fetch</literal> be used together with <literal>setMaxResults()</literal> or <literal>setFirstResult()</literal> as these operations are based on the result rows, which usually contain duplicates for eager collection fetching, hence, the number of rows is not what you'd expect. Nor may <literal>fetch</literal> be used together with an ad hoc <literal>with</literal> condition. It is possible to create a cartesian product by join fetching more than one collection in a query, so take care in this case. Join fetching multiple collection roles also sometimes gives unexpected results for bag mappings, so be careful about how you formulate your queries in this case. Finally, note that <literal>full join fetch</literal> and <literal>right join fetch</literal> are not meaningful."
+msgstr "Notez que la construction de <literal>fetch</literal> ne peut pas être utilisée dans les requêtes appelées par <literal>scroll()</literal> ou <literal>iterate()</literal>. <literal>fetch</literal> ne devrait pas non plus être utilisé avec <literal>setMaxResults()</literal> ou <literal>setFirstResult()</literal>. <literal>fetch</literal> ne peut pas non plus être utilisé avec une condition <literal>with</literal> ad hoc. Il est possible de créer un produit cartésien par jointure en récupérant plus d'une collection dans une requête, donc faites attention dans ce cas. Récupérer par jointure de multiples collections donne aussi parfois des résultats inattendus pour des mappings de bag, donc soyez prudent lorsque vous formulez vos requêtes dans de tels cas. Finalement, notez que <literal>full join fetch</literal> et <literal>right join fetch</literal> ne sont pas utiles en général."
+
+#: index.docbook:172
+msgid "If you are using property-level lazy fetching (with bytecode instrumentation), it is possible to force Hibernate to fetch the lazy properties immediately (in the first query) using <literal>fetch all properties</literal>."
+msgstr "Si vous utilisez un chargement retardé pour les propriétés (avec une instrumentation par bytecode), il est possible de forcer Hibernate à récupérer les propriétés non encore chargées immédiatement (dans la première requête) en utilisant <literal>fetch all properties</literal>."
+
+#: index.docbook:178
+msgid "<![CDATA[from Document fetch all properties order by name]]>"
+msgstr "<![CDATA[from Document fetch all properties order by name]]>"
+
+#: index.docbook:179
+msgid "<![CDATA[from Document doc fetch all properties where lower(doc.name) like '%cats%']]>"
+msgstr "<![CDATA[from Document doc fetch all properties where lower(doc.name) like '%cats%']]>"
+
+#: index.docbook:184
+msgid "Forms of join syntax"
+msgstr "Formes de syntaxes pour les jointures"
+
+#: index.docbook:186
+msgid "HQL supports two forms of association joining: <literal>implicit</literal> and <literal>explicit</literal>."
+msgstr "HQL supporte deux formes pour joindre les associations: <literal>implicite</literal> et <literal>explicite</literal>."
+
+#: index.docbook:190
+msgid "The queries shown in the previous section all use the <literal>explicit</literal> form where the join keyword is explicitly used in the from clause. This is the recommended form."
+msgstr "Les requêtes présentes dans la section précédente utilisent la forme <literal>explicite</literal> où le mode clé join est explicitement utilisé dans la clause from. C'est la forme recommandée."
+
+#: index.docbook:195
+msgid "The <literal>implicit</literal> form does not use the join keyword. Instead, the associations are \"dereferenced\" using dot-notation. <literal>implicit</literal> joins can appear in any of the HQL clauses. <literal>implicit</literal> join result in inner joins in the resulting SQL statement."
+msgstr "La forme <literal>implicite</literal> n'utilise pas le mot clé join. A la place, les associations sont \"déréférencées\" en utilisant le notation '.'. Ces jointures peuvent apparaitre dans toutes les clauses. Les jointures <literal>implicites</literal> résultent en des inner join dans le SQL généré."
+
+#: index.docbook:202
+msgid "<![CDATA[from Cat as cat where cat.mate.name like '%s%']]>"
+msgstr "<![CDATA[from Cat as cat where cat.mate.name like '%s%']]>"
+
+#: index.docbook:206
+msgid "Refering to identifier property"
+msgstr "La clause select"
+
+#: index.docbook:208
+msgid "There are, generally speaking, 2 ways to refer to an entity's identifier property:"
+msgstr "La clause <literal>select</literal> sélectionne les objets et propriétés qui doivent être retournés dans le résultat de la requête. Soit :"
+
+#: index.docbook:213
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the identifier property of an entity <emphasis>provided that entity does not define a non-identifier property named id</emphasis>."
+msgstr ""
+ "<![CDATA[select mate\n"
+ "from Cat as cat\n"
+ " inner join cat.mate as mate]]>"
+
+#: index.docbook:220
+msgid "If the entity defines a named identifier property, you may use that property name."
+msgstr "La requête recherchera les <literal>mate</literal>s liés aux <literal>Cat</literal>s. Vous pouvez explimer la requête d'une manière plus compacte :"
+
+#: index.docbook:226
+msgid "References to composite identifier properties follow the same naming rules. If the entity has a non-identifier property named id, the composite identifier property can only be referenced by its defined named; otherwise, the special <literal>id</literal> property can be used to rerference the identifier property."
+msgstr "<![CDATA[select cat.mate from Cat cat]]>"
+
+#: index.docbook:233
+msgid "Note: this has changed significantly starting in version 3.2.2. In previous versions, <literal>id</literal> <emphasis>always</emphasis> referred to the identifier property no matter what its actual name. A ramification of that decision was that non-identifier properties named <literal>id</literal> could never be referenced in Hibernate queries."
+msgstr "Les requêtes peuvent retourner des propriétés de n'importe quel type, même celles de type composant (component) :"
+
+#: index.docbook:242
+msgid "The select clause"
+msgstr ""
+ "<![CDATA[select cat.name from DomesticCat cat\n"
+ "where cat.name like 'fri%']]>"
+
+#: index.docbook:244
+msgid "The <literal>select</literal> clause picks which objects and properties to return in the query result set. Consider:"
+msgstr "<![CDATA[select cust.name.firstName from Customer as cust]]>"
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[select mate\n"
+ "from Cat as cat\n"
+ " inner join cat.mate as mate]]>"
+msgstr "Les requêtes peuvent retourner plusieurs objets et/ou propriétés sous la forme d'un tableau du type <literal>Object[]</literal>,"
+
+#: index.docbook:251
+msgid "The query will select <literal>mate</literal>s of other <literal>Cat</literal>s. Actually, you may express this query more compactly as:"
+msgstr ""
+ "<![CDATA[select mother, offspr, mate.name\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+
+#: index.docbook:256
+msgid "<![CDATA[select cat.mate from Cat cat]]>"
+msgstr "ou sous la forme d'une <literal>List</literal>,"
+
+#: index.docbook:258
+msgid "Queries may return properties of any value type including properties of component type:"
+msgstr ""
+ "<![CDATA[select new list(mother, offspr, mate.name)\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+
+#: index.docbook:262
+msgid ""
+ "<![CDATA[select cat.name from DomesticCat cat\n"
+ "where cat.name like 'fri%']]>"
+msgstr "ou sous la forme d'un objet Java typé,"
+
+#: index.docbook:264
+msgid "<![CDATA[select cust.name.firstName from Customer as cust]]>"
+msgstr ""
+ "<![CDATA[select new Family(mother, mate, offspr)\n"
+ "from DomesticCat as mother\n"
+ " join mother.mate as mate\n"
+ " left join mother.kittens as offspr]]>"
+
+#: index.docbook:266
+msgid "Queries may return multiple objects and/or properties as an array of type <literal>Object[]</literal>,"
+msgstr "à condition que la classe <literal>Family</literal> possède le constructeur approprié."
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[select mother, offspr, mate.name\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr "Vous pouvez assigner des alias aux expressions sélectionnées en utilisant <literal>as</literal> :"
+
+#: index.docbook:273
+msgid "or as a <literal>List</literal>,"
+msgstr ""
+ "<![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n\n"
+ "from Cat cat]]>"
+
+#: index.docbook:277
+msgid ""
+ "<![CDATA[select new list(mother, offspr, mate.name)\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr "C'est surtout utile lorsque c'est utilisé avec <literal>select new map</literal> :"
+
+#: index.docbook:279
+msgid "or as an actual typesafe Java object,"
+msgstr ""
+ "<![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )\n"
+ "from Cat cat]]>"
+
+#: index.docbook:283
+msgid ""
+ "<![CDATA[select new Family(mother, mate, offspr)\n"
+ "from DomesticCat as mother\n"
+ " join mother.mate as mate\n"
+ " left join mother.kittens as offspr]]>"
+msgstr "Cette requête retourne une <literal>Map</literal> à partir des alias vers les valeurs sélectionnées."
+
+#: index.docbook:285
+msgid "assuming that the class <literal>Family</literal> has an appropriate constructor."
+msgstr "Fonctions d'aggrégation"
+
+#: index.docbook:289
+msgid "You may assign aliases to selected expressions using <literal>as</literal>:"
+msgstr "Les requêtes HQL peuvent aussi retourner le résultat de fonctions d'aggrégation sur les propriétés :"
+
+#: index.docbook:293
+msgid ""
+ "<![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n\n"
+ "from Cat cat]]>"
+msgstr ""
+ "<![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)\n"
+ "from Cat cat]]>"
+
+#: index.docbook:295
+msgid "This is most useful when used together with <literal>select new map</literal>:"
+msgstr "Les fonctions supportées sont"
+
+#: index.docbook:299
+msgid ""
+ "<![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )\n"
+ "from Cat cat]]>"
+msgstr "avg(...), sum(...), min(...), max(...)"
+
+#: index.docbook:301
+msgid "This query returns a <literal>Map</literal> from aliases to selected values."
+msgstr "count(*)"
+
+#: index.docbook:308
+msgid "Aggregate functions"
+msgstr "count(...), count(distinct ...), count(all...)"
+
+#: index.docbook:310
+msgid "HQL queries may even return the results of aggregate functions on properties:"
+msgstr "Vous pouvez utiliser des opérateurs arithmétiques, la concaténation, et des fonctions SQL reconnues dans la clause select :"
+
+#: index.docbook:314
+msgid ""
+ "<![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)\n"
+ "from Cat cat]]>"
+msgstr ""
+ "<![CDATA[select cat.weight + sum(kitten.weight)\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.weight]]>"
+
+#: index.docbook:325
+msgid "The supported aggregate functions are"
+msgstr "<![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]>"
+
+#: index.docbook:332
+msgid "avg(...), sum(...), min(...), max(...)"
+msgstr "Les mots clé <literal>distinct</literal> et <literal>all</literal> peuvent être utilisés et ont la même signification qu'en SQL."
+
+#: index.docbook:337
+msgid "count(*)"
+msgstr ""
+ "<![CDATA[select distinct cat.name from Cat cat\n"
+ "\n"
+ "select count(distinct cat.name), count(cat) from Cat cat]]>"
+
+#: index.docbook:342
+msgid "count(...), count(distinct ...), count(all...)"
+msgstr "Requêtes polymorphiques"
+
+#: index.docbook:347
+msgid "You may use arithmetic operators, concatenation, and recognized SQL functions in the select clause:"
+msgstr "Une requête comme:"
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[select cat.weight + sum(kitten.weight)\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.weight]]>"
+msgstr "<![CDATA[from Cat as cat]]>"
+
+#: index.docbook:354
+msgid "<![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]>"
+msgstr "retourne non seuleument les instances de <literal>Cat</literal>, mais aussi celles des sous classes comme <literal>DomesticCat</literal>. Les requêtes Hibernate peuvent nommer n'importe quelle classe ou interface Java dans la clause <literal>from</literal>. La requête retournera les instances de toutes les classes persistantes qui étendent cette classe ou implémente cette interface. La requête suivante retournera tous les objets persistants :"
+
+#: index.docbook:356
+msgid "The <literal>distinct</literal> and <literal>all</literal> keywords may be used and have the same semantics as in SQL."
+msgstr "<![CDATA[from java.lang.Object o]]>"
+
+#: index.docbook:361
+msgid ""
+ "<![CDATA[select distinct cat.name from Cat cat\n"
+ "\n"
+ "select count(distinct cat.name), count(cat) from Cat cat]]>"
+msgstr "L'interface <literal>Named</literal> peut être implémentée par plusieurs classes persistantes :"
+
+#: index.docbook:366
+msgid "Polymorphic queries"
+msgstr "<![CDATA[from Named n, Named m where n.name = m.name]]>"
+
+#: index.docbook:368
+msgid "A query like:"
+msgstr "Notez que ces deux dernières requêtes nécessitent plus d'un <literal>SELECT</literal> SQL. Ce qui signifie que la clause <literal>order by</literal> ne trie pas correctement la totalité des résultats (cela signifie aussi que vous ne pouvez exécuter ces requêtes en appelant <literal>Query.scroll()</literal>)."
+
+#: index.docbook:374
+msgid "returns instances not only of <literal>Cat</literal>, but also of subclasses like <literal>DomesticCat</literal>. Hibernate queries may name <emphasis>any</emphasis> Java class or interface in the <literal>from</literal> clause. The query will return instances of all persistent classes that extend that class or implement the interface. The following query would return all persistent objects:"
+msgstr "La clause <literal>where</literal> vous permet de réduire la liste des instances retournées. Si aucun alias n'existe, vous pouvez vous référer aux propriétés par leur nom :"
+
+#: index.docbook:382
+msgid "<![CDATA[from java.lang.Object o]]>"
+msgstr "<![CDATA[from Cat where name='Fritz']]>"
+
+#: index.docbook:384
+msgid "The interface <literal>Named</literal> might be implemented by various persistent classes:"
+msgstr "S'il y a un alias, utilisez un nom de propriété qualifié :"
+
+#: index.docbook:389
+msgid "<![CDATA[from Named n, Named m where n.name = m.name]]>"
+msgstr "<![CDATA[from Cat as cat where cat.name='Fritz']]>"
+
+#: index.docbook:391
+msgid "Note that these last two queries will require more than one SQL <literal>SELECT</literal>. This means that the <literal>order by</literal> clause does not correctly order the whole result set. (It also means you can't call these queries using <literal>Query.scroll()</literal>.)"
+msgstr "retourne les instances de <literal>Cat</literal> dont name est égale à 'Fritz'."
+
+#: index.docbook:400
+msgid "The where clause"
+msgstr ""
+ "<![CDATA[select foo\n"
+ "from Foo foo, Bar bar\n"
+ "where foo.startDate = bar.date]]>"
+
+#: index.docbook:402
+msgid "The <literal>where</literal> clause allows you to narrow the list of instances returned. If no alias exists, you may refer to properties by name:"
+msgstr "retournera les instances de <literal>Foo</literal> pour lesquelles il existe une instance de <literal>bar</literal> avec la propriété <literal>date</literal> est égale à la propriété <literal>startDate</literal> de <literal>Foo</literal>. Les expressions utilisant la navigation rendent la clause <literal>where</literal> extrêmement puissante. Soit :"
+
+#: index.docbook:407
+msgid "<![CDATA[from Cat where name='Fritz']]>"
+msgstr "<![CDATA[from Cat cat where cat.mate.name is not null]]>"
+
+#: index.docbook:409
+msgid "If there is an alias, use a qualified property name:"
+msgstr "Cette requête se traduit en SQL par une jointure interne à une table. Si vous souhaitez écrire quelque chose comme :"
+
+#: index.docbook:413
+msgid "<![CDATA[from Cat as cat where cat.name='Fritz']]>"
+msgstr ""
+ "<![CDATA[from Foo foo\n"
+ "where foo.bar.baz.customer.address.city is not null]]>"
+
+#: index.docbook:415
+msgid "returns instances of <literal>Cat</literal> named 'Fritz'."
+msgstr "vous finiriez avec une requête qui nécessiterait quatre jointures en SQL."
+
+#: index.docbook:419
+msgid ""
+ "<![CDATA[select foo\n"
+ "from Foo foo, Bar bar\n"
+ "where foo.startDate = bar.date]]>"
+msgstr "L'opérateur <literal>=</literal> peut être utilisé pour comparer aussi bien des propriétés que des instances :"
+
+#: index.docbook:421
+msgid "will return all instances of <literal>Foo</literal> for which there exists an instance of <literal>bar</literal> with a <literal>date</literal> property equal to the <literal>startDate</literal> property of the <literal>Foo</literal>. Compound path expressions make the <literal>where</literal> clause extremely powerful. Consider:"
+msgstr "<![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]>"
+
+#: index.docbook:430
+msgid "<![CDATA[from Cat cat where cat.mate.name is not null]]>"
+msgstr ""
+ "<![CDATA[select cat, mate\n"
+ "from Cat cat, Cat mate\n"
+ "where cat.mate = mate]]>"
+
+#: index.docbook:432
+msgid "This query translates to an SQL query with a table (inner) join. If you were to write something like"
+msgstr "La propriété spéciale (en minuscule) <literal>id</literal> peut être utilisée pour faire référence à l'identifiant d'un objet (vous pouvez aussi utiliser le nom de cette propriété)."
+
+#: index.docbook:437
+msgid ""
+ "<![CDATA[from Foo foo\n"
+ "where foo.bar.baz.customer.address.city is not null]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat where cat.id = 123\n"
+ "\n"
+ "from Cat as cat where cat.mate.id = 69]]>"
+
+#: index.docbook:439
+msgid "you would end up with a query that would require four table joins in SQL."
+msgstr "La seconde requête est particulièrement efficace. Aucune jointure n'est nécessaire !"
+
+#: index.docbook:443
+msgid "The <literal>=</literal> operator may be used to compare not only properties, but also instances:"
+msgstr "Les propriétés d'un identifiant composé peuvent aussi être utilisées. Supposez que <literal>Person</literal> ait un identifiant composé de <literal>country</literal> et <literal>medicareNumber</literal>."
+
+#: index.docbook:448
+msgid "<![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]>"
+msgstr ""
+ "<![CDATA[from bank.Person person\n"
+ "where person.id.country = 'AU'\n"
+ " and person.id.medicareNumber = 123456]]>"
+
+#: index.docbook:450
+msgid ""
+ "<![CDATA[select cat, mate\n"
+ "from Cat cat, Cat mate\n"
+ "where cat.mate = mate]]>"
+msgstr ""
+ "<![CDATA[from bank.Account account\n"
+ "where account.owner.id.country = 'AU'\n"
+ " and account.owner.id.medicareNumber = 123456]]>"
+
+#: index.docbook:452
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the unique identifier of an object. See <xref linkend=\"queryhql-identifier-property\"/> for more information."
+msgstr "Une fois de plus, la seconde requête ne nécessite pas de jointure."
+
+#: index.docbook:458
+msgid ""
+ "<![CDATA[from Cat as cat where cat.id = 123\n"
+ "\n"
+ "from Cat as cat where cat.mate.id = 69]]>"
+msgstr "De même, la propriété spéciale <literal>class</literal> interroge la valeur discriminante d'une instance dans le cas d'une persistance polymorphique. Le nom d'une classe Java incorporée dans la clause where sera traduite par sa valeur discriminante."
+
+#: index.docbook:460
+msgid "The second query is efficient. No table join is required!"
+msgstr "<![CDATA[from Cat cat where cat.class = DomesticCat]]>"
+
+#: index.docbook:464
+msgid "Properties of composite identifiers may also be used. Suppose <literal>Person</literal> has a composite identifier consisting of <literal>country</literal> and <literal>medicareNumber</literal>. Again, see <xref linkend=\"queryhql-identifier-property\"/> for more information regarding referencing identifier properties."
+msgstr "Vous pouvez aussi spécifier les propriétés des composants ou types utilisateurs composés (components, composite user types etc). N'essayez jamais d'utiliser un expression de navigation qui se terminerait par une propriété de type composant (qui est différent d'une propriété d'un composant). Par exemple, si <literal>store.owner</literal> est une entité avec un composant <literal>address</literal>"
+
+#: index.docbook:471
+msgid ""
+ "<![CDATA[from bank.Person person\n"
+ "where person.id.country = 'AU'\n"
+ " and person.id.medicareNumber = 123456]]>"
+msgstr ""
+ "<![CDATA[store.owner.address.city // okay\n"
+ "store.owner.address // error!]]>"
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[from bank.Account account\n"
+ "where account.owner.id.country = 'AU'\n"
+ " and account.owner.id.medicareNumber = 123456]]>"
+msgstr "Un type \"any\" possède les propriétés spéciales <literal>id</literal> et <literal>class</literal>, qui nous permettent d'exprimer une jointure de la manière suivante (où <literal>AuditLog.item</literal> est une propriété mappée avec <literal><any></literal>)."
+
+#: index.docbook:475
+msgid "Once again, the second query requires no table join."
+msgstr ""
+ "<![CDATA[from AuditLog log, Payment payment\n"
+ "where log.item.class = 'Payment' and log.item.id = payment.id]]>"
+
+#: index.docbook:479
+msgid "Likewise, the special property <literal>class</literal> accesses the discriminator value of an instance in the case of polymorphic persistence. A Java class name embedded in the where clause will be translated to its discriminator value."
+msgstr "Dans la requête précédente, notez que <literal>log.item.class</literal> et <literal>payment.class</literal> feraient référence à des valeurs de colonnes de la base de données complètement différentes."
+
+#: index.docbook:485
+msgid "<![CDATA[from Cat cat where cat.class = DomesticCat]]>"
+msgstr "Expressions"
+
+#: index.docbook:487
+msgid "You may also use components or composite user types, or properties of said component types. See <xref linkend=\"queryhql-coomponents\"/> for more details."
+msgstr "Les expressions permises dans la clause <literal>where</literal> incluent la plupart des choses que vous pouvez utiliser en SQL :"
+
+#: index.docbook:492
+msgid "An \"any\" type has the special properties <literal>id</literal> and <literal>class</literal>, allowing us to express a join in the following way (where <literal>AuditLog.item</literal> is a property mapped with <literal><any></literal>)."
+msgstr "opérateurs mathématiques <literal>+, -, *, /</literal>"
+
+#: index.docbook:498
+msgid ""
+ "<![CDATA[from AuditLog log, Payment payment\n"
+ "where log.item.class = 'Payment' and log.item.id = payment.id]]>"
+msgstr "opérateur de comparaison binaire <literal>=, >=, <=, <>, !=, like</literal>"
+
+#: index.docbook:500
+msgid "Notice that <literal>log.item.class</literal> and <literal>payment.class</literal> would refer to the values of completely different database columns in the above query."
+msgstr "opérateurs logiques <literal>and, or, not</literal>"
+
+#: index.docbook:508
+msgid "Expressions"
+msgstr "Parenthèses <literal>( )</literal>, indiquant un regroupement"
+
+#: index.docbook:510
+msgid "Expressions allowed in the <literal>where</literal> clause include most of the kind of things you could write in SQL:"
+msgstr "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> and <literal>not member of</literal>"
+
+#: index.docbook:517
+msgid "mathematical operators <literal>+, -, *, /</literal>"
+msgstr "\"Simple\" case, <literal>case ... when ... then ... else ... end</literal>, and \"searched\" case, <literal>case when ... then ... else ... end</literal>"
+
+#: index.docbook:522
+msgid "binary comparison operators <literal>=, >=, <=, <>, !=, like</literal>"
+msgstr "concatenation de chaîne de caractères <literal>...||...</literal> ou <literal>concat(...,...)</literal>"
+
+#: index.docbook:527
+msgid "logical operations <literal>and, or, not</literal>"
+msgstr "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+
+#: index.docbook:532
+msgid "Parentheses <literal>( )</literal>, indicating grouping"
+msgstr "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+
+#: index.docbook:537
+msgid "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> and <literal>not member of</literal>"
+msgstr "N'importe quel fonction ou opérateur défini par EJB-QL 3.0 : <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()</literal>"
+
+#: index.docbook:550
+msgid "\"Simple\" case, <literal>case ... when ... then ... else ... end</literal>, and \"searched\" case, <literal>case when ... then ... else ... end</literal>"
+msgstr "<literal>coalesce()</literal> et <literal>nullif()</literal>"
+
+#: index.docbook:556
+msgid "string concatenation <literal>...||...</literal> or <literal>concat(...,...)</literal>"
+msgstr "<literal>str()</literal> pour convertir des valeurs numériques ou temporelles vers une chaîne de caractères lisible"
+
+#: index.docbook:561
+msgid "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+msgstr "<literal>cast(... as ...)</literal>, où le second argument est le nom d'un type Hibernate, et <literal>extract(... from ...)</literal> si le <literal>cast()</literal> ANSI et <literal>extract()</literal> sont supportés par la base de données sous-jacente"
+
+#: index.docbook:567
+msgid "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+msgstr "La fonction HQL <literal>index()</literal>, qui s'applique aux alias d'une collection indexée jointe"
+
+#: index.docbook:574
+msgid "Any function or operator defined by EJB-QL 3.0: <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()</literal>"
+msgstr "Les fonctions HQL qui s'appliquent expressions représentant des collections : <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal>, ainsi que les fonctions spéciales <literal>elements()</literal> et <literal>indices</literal> qui peuvent être quantifiées en utilisant <literal>some, all, exists, any, in</literal>."
+
+#: index.docbook:580
+msgid "<literal>coalesce()</literal> and <literal>nullif()</literal>"
+msgstr "N'importe quelle fonction scalaire supportée par la base de données comme <literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>"
+
+#: index.docbook:585
+msgid "<literal>str()</literal> for converting numeric or temporal values to a readable string"
+msgstr "Les paramètres positionnels de JDBC <literal>?</literal>"
+
+#: index.docbook:591
+msgid "<literal>cast(... as ...)</literal>, where the second argument is the name of a Hibernate type, and <literal>extract(... from ...)</literal> if ANSI <literal>cast()</literal> and <literal>extract()</literal> is supported by the underlying database"
+msgstr "paramètres nommés <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+
+#: index.docbook:599
+msgid "the HQL <literal>index()</literal> function, that applies to aliases of a joined indexed collection"
+msgstr "littéral SQL <literal>'foo'</literal>, <literal>69</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+
+#: index.docbook:605
+msgid "HQL functions that take collection-valued path expressions: <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal>, along with the special <literal>elements()</literal> and <literal>indices</literal> functions which may be quantified using <literal>some, all, exists, any, in</literal>."
+msgstr "Constantes Java <literal>public static final</literal> <literal>eg.Color.TABBY</literal>"
+
+#: index.docbook:613
+msgid "Any database-supported SQL scalar function like <literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>"
+msgstr "<literal>in</literal> et <literal>between</literal> peuvent être utilisés comme suit :"
+
+#: index.docbook:619
+msgid "JDBC-style positional parameters <literal>?</literal>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]>"
+
+#: index.docbook:624
+msgid "named parameters <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]>"
+
+#: index.docbook:629
+msgid "SQL literals <literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+msgstr "et la forme négative peut être écrite"
+
+#: index.docbook:635
+msgid "Java <literal>public static final</literal> constants <literal>eg.Color.TABBY</literal>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]>"
+
+#: index.docbook:641
+msgid "<literal>in</literal> and <literal>between</literal> may be used as follows:"
+msgstr "<![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]>"
+
+#: index.docbook:645
+msgid "<![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]>"
+msgstr "De même, <literal>is null</literal> et <literal>is not null</literal> peuvent être utilisés pour tester les valeurs nulle."
+
+#: index.docbook:647
+msgid "<![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr "Les booléens peuvent être facilement utilisés en déclarant les substitutions de requêtes dans la configuration Hibernate :"
+
+#: index.docbook:649
+msgid "and the negated forms may be written"
+msgstr "<![CDATA[<property name=\"hibernate.query.substitutions\">true 1, false 0</property>]]>"
+
+#: index.docbook:653
+msgid "<![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]>"
+msgstr "Ce qui remplacera les mots clés <literal>true</literal> et <literal>false</literal> par <literal>1</literal> et <literal>0</literal> dans la traduction SQL du HQL suivant :"
+
+#: index.docbook:655
+msgid "<![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr "<![CDATA[from Cat cat where cat.alive = true]]>"
+
+#: index.docbook:657
+msgid "Likewise, <literal>is null</literal> and <literal>is not null</literal> may be used to test for null values."
+msgstr "Vous pouvez tester la taille d'une collection par la propriété spéciale <literal>size</literal>, ou la fonction spéciale <literal>size()</literal>."
+
+#: index.docbook:662
+msgid "Booleans may be easily used in expressions by declaring HQL query substitutions in Hibernate configuration:"
+msgstr "<![CDATA[from Cat cat where cat.kittens.size > 0]]>"
+
+#: index.docbook:667
+msgid "<![CDATA[<property name=\"hibernate.query.substitutions\">true 1, false 0</property>]]>"
+msgstr "<![CDATA[from Cat cat where size(cat.kittens) > 0]]>"
+
+#: index.docbook:669
+msgid "This will replace the keywords <literal>true</literal> and <literal>false</literal> with the literals <literal>1</literal> and <literal>0</literal> in the translated SQL from this HQL:"
+msgstr "Pour les collections indexées, vous pouvez faire référence aux indices minimum et maximum en utilisant les fonctions <literal>minindex</literal> and <literal>maxindex</literal>. De manière similaire, vous pouvez faire référence aux éléments minimum et maximum d'une collection de type basiques en utilisant les fonctions <literal>minelement</literal> et <literal>maxelement</literal>."
+
+#: index.docbook:674
+msgid "<![CDATA[from Cat cat where cat.alive = true]]>"
+msgstr "<![CDATA[from Calendar cal where maxelement(cal.holidays) > current date]]>"
+
+#: index.docbook:676
+msgid "You may test the size of a collection with the special property <literal>size</literal>, or the special <literal>size()</literal> function."
+msgstr "<![CDATA[from Order order where maxindex(order.items) > 100]]>"
+
+#: index.docbook:681
+msgid "<![CDATA[from Cat cat where cat.kittens.size > 0]]>"
+msgstr "<![CDATA[from Order order where minelement(order.items) > 10000]]>"
+
+#: index.docbook:683
+msgid "<![CDATA[from Cat cat where size(cat.kittens) > 0]]>"
+msgstr "Les fonctions SQL <literal>any, some, all, exists, in</literal> supportent que leur soient passées l'élément, l'index d'une collection (fonctions <literal>elements</literal> et <literal>indices</literal>) ou le résultat d'une sous requête (voir ci dessous)."
+
+#: index.docbook:685
+msgid "For indexed collections, you may refer to the minimum and maximum indices using <literal>minindex</literal> and <literal>maxindex</literal> functions. Similarly, you may refer to the minimum and maximum elements of a collection of basic type using the <literal>minelement</literal> and <literal>maxelement</literal> functions."
+msgstr ""
+ "<![CDATA[select mother from Cat as mother, Cat as kit\n"
+ "where kit in elements(foo.kittens)]]>"
+
+#: index.docbook:693
+msgid "<![CDATA[from Calendar cal where maxelement(cal.holidays) > current_date]]>"
+msgstr ""
+ "<![CDATA[select p from NameList list, Person p\n"
+ "where p.name = some elements(list.names)]]>"
+
+#: index.docbook:695
+msgid "<![CDATA[from Order order where maxindex(order.items) > 100]]>"
+msgstr "<![CDATA[from Cat cat where exists elements(cat.kittens)]]>"
+
+#: index.docbook:697
+msgid "<![CDATA[from Order order where minelement(order.items) > 10000]]>"
+msgstr "<![CDATA[from Player p where 3 > all elements(p.scores)]]>"
+
+#: index.docbook:699
+msgid "The SQL functions <literal>any, some, all, exists, in</literal> are supported when passed the element or index set of a collection (<literal>elements</literal> and <literal>indices</literal> functions) or the result of a subquery (see below)."
+msgstr "<![CDATA[from Show show where 'fizard' in indices(show.acts)]]>"
+
+#: index.docbook:705
+msgid ""
+ "<![CDATA[select mother from Cat as mother, Cat as kit\n"
+ "where kit in elements(foo.kittens)]]>"
+msgstr "Notez que l'écriture de - <literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal> - peuvent seulement être utilisée dans la clause where dans Hibernate3."
+
+#: index.docbook:707
+msgid ""
+ "<![CDATA[select p from NameList list, Person p\n"
+ "where p.name = some elements(list.names)]]>"
+msgstr "Les éléments de collections indexées (arrays, lists, maps) peuvent être référencés via index (dans une clause where seulement) :"
+
+#: index.docbook:709
+msgid "<![CDATA[from Cat cat where exists elements(cat.kittens)]]>"
+msgstr "<![CDATA[from Order order where order.items[0].id = 1234]]>"
+
+#: index.docbook:711
+msgid "<![CDATA[from Player p where 3 > all elements(p.scores)]]>"
+msgstr ""
+ "<![CDATA[select person from Person person, Calendar calendar\n"
+ "where calendar.holidays['national day'] = person.birthDay\n"
+ " and person.nationality.calendar = calendar]]>"
+
+#: index.docbook:713
+msgid "<![CDATA[from Show show where 'fizard' in indices(show.acts)]]>"
+msgstr ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11]]>"
+
+#: index.docbook:715
+msgid "Note that these constructs - <literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal> - may only be used in the where clause in Hibernate3."
+msgstr ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ maxindex(order.items) ] = item and order.id = 11]]>"
+
+#: index.docbook:722
+msgid "Elements of indexed collections (arrays, lists, maps) may be referred to by index (in a where clause only):"
+msgstr "L'expression entre <literal>[]</literal> peut même être une expression arithmétique."
+
+#: index.docbook:727
+msgid "<![CDATA[from Order order where order.items[0].id = 1234]]>"
+msgstr ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ size(order.items) - 1 ] = item]]>"
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[select person from Person person, Calendar calendar\n"
+ "where calendar.holidays['national day'] = person.birthDay\n"
+ " and person.nationality.calendar = calendar]]>"
+msgstr "HQL propose aussi une fonction <literal>index()</literal> interne, pour les éléments d'une association one-to-many ou d'une collections de valeurs."
+
+#: index.docbook:731
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11]]>"
+msgstr ""
+ "<![CDATA[select item, index(item) from Order order\n"
+ " join order.items item\n"
+ "where index(item) < 5]]>"
+
+#: index.docbook:733
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ maxindex(order.items) ] = item and order.id = 11]]>"
+msgstr "Les fonctions SQL scalaires supportées par la base de données utilisée peuvent être utilisées"
+
+#: index.docbook:735
+msgid "The expression inside <literal>[]</literal> may even be an arithmetic expression."
+msgstr "<![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]>"
+
+#: index.docbook:739
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ size(order.items) - 1 ] = item]]>"
+msgstr "Si vous n'êtes pas encore convaincu par tout cela, imaginez la taille et l'illisibilité qui caractériseraient la transformation SQL de la requête HQL suivante :"
+
+#: index.docbook:741
+msgid "HQL also provides the built-in <literal>index()</literal> function, for elements of a one-to-many association or collection of values."
+msgstr ""
+ "<![CDATA[select cust\n"
+ "from Product prod,\n"
+ " Store store\n"
+ " inner join store.customers cust\n"
+ "where prod.name = 'widget'\n"
+ " and store.location.name in ( 'Melbourne', 'Sydney' )\n"
+ " and prod = all elements(cust.currentOrder.lineItems)]]>"
+
+#: index.docbook:746
+msgid ""
+ "<![CDATA[select item, index(item) from Order order\n"
+ " join order.items item\n"
+ "where index(item) < 5]]>"
+msgstr "<emphasis>Un indice :</emphasis> cela donnerait quelque chose comme"
+
+#: index.docbook:748
+msgid "Scalar SQL functions supported by the underlying database may be used"
+msgstr ""
+ "<![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order\n"
+ "FROM customers cust,\n"
+ " stores store,\n"
+ " locations loc,\n"
+ " store_customers sc,\n"
+ " product prod\n"
+ "WHERE prod.name = 'widget'\n"
+ " AND store.loc_id = loc.id\n"
+ " AND loc.name IN ( 'Melbourne', 'Sydney' )\n"
+ " AND sc.store_id = store.id\n"
+ " AND sc.cust_id = cust.id\n"
+ " AND prod.id = ALL(\n"
+ " SELECT item.prod_id\n"
+ " FROM line_items item, orders o\n"
+ " WHERE item.order_id = o.id\n"
+ " AND cust.current_order = o.id\n"
+ " )]]>"
+
+#: index.docbook:752
+msgid "<![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]>"
+msgstr "La clause order by"
+
+#: index.docbook:754
+msgid "If you are not yet convinced by all this, think how much longer and less readable the following query would be in SQL:"
+msgstr "La liste retounée par la requête peut être triée par n'importe quelle propriété de la classe ou du composant retourné :"
+
+#: index.docbook:759
+msgid ""
+ "<![CDATA[select cust\n"
+ "from Product prod,\n"
+ " Store store\n"
+ " inner join store.customers cust\n"
+ "where prod.name = 'widget'\n"
+ " and store.location.name in ( 'Melbourne', 'Sydney' )\n"
+ " and prod = all elements(cust.currentOrder.lineItems)]]>"
+msgstr ""
+ "<![CDATA[from DomesticCat cat\n"
+ "order by cat.name asc, cat.weight desc, cat.birthdate]]>"
+
+#: index.docbook:761
+msgid "<emphasis>Hint:</emphasis> something like"
+msgstr "Le mot optionnel <literal>asc</literal> ou <literal>desc</literal> indique respectivement si le tri doit être croissant ou décroissant."
+
+#: index.docbook:765
+msgid ""
+ "<![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order\n"
+ "FROM customers cust,\n"
+ " stores store,\n"
+ " locations loc,\n"
+ " store_customers sc,\n"
+ " product prod\n"
+ "WHERE prod.name = 'widget'\n"
+ " AND store.loc_id = loc.id\n"
+ " AND loc.name IN ( 'Melbourne', 'Sydney' )\n"
+ " AND sc.store_id = store.id\n"
+ " AND sc.cust_id = cust.id\n"
+ " AND prod.id = ALL(\n"
+ " SELECT item.prod_id\n"
+ " FROM line_items item, orders o\n"
+ " WHERE item.order_id = o.id\n"
+ " AND cust.current_order = o.id\n"
+ " )]]>"
+msgstr "La clause group by"
+
+#: index.docbook:770
+msgid "The order by clause"
+msgstr "Si la requête retourne des valeurs aggrégées, celles ci peuvent être groupées par propriété ou composant :"
+
+#: index.docbook:772
+msgid "The list returned by a query may be ordered by any property of a returned class or components:"
+msgstr ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color]]>"
+
+#: index.docbook:776
+msgid ""
+ "<![CDATA[from DomesticCat cat\n"
+ "order by cat.name asc, cat.weight desc, cat.birthdate]]>"
+msgstr ""
+ "<![CDATA[select foo.id, avg(name), max(name)\n"
+ "from Foo foo join foo.names name\n"
+ "group by foo.id]]>"
+
+#: index.docbook:778
+msgid "The optional <literal>asc</literal> or <literal>desc</literal> indicate ascending or descending order respectively."
+msgstr "Une clause <literal>having</literal> est aussi permise."
+
+#: index.docbook:785
+msgid "The group by clause"
+msgstr ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color\n"
+ "having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]>"
+
+#: index.docbook:787
+msgid "A query that returns aggregate values may be grouped by any property of a returned class or components:"
+msgstr "Les fonctions SQL et les fonctions d'aggrégations sont permises dans les clauses <literal>having</literal> et <literal>order by</literal>, si elles sont supportées par la base de données (ce que ne fait pas MySQL par exemple)."
+
+#: index.docbook:791
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color]]>"
+msgstr ""
+ "<![CDATA[select cat\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat\n"
+ "having avg(kitten.weight) > 100\n"
+ "order by count(kitten) asc, sum(kitten.weight) desc]]>"
+
+#: index.docbook:793
+msgid ""
+ "<![CDATA[select foo.id, avg(name), max(name)\n"
+ "from Foo foo join foo.names name\n"
+ "group by foo.id]]>"
+msgstr "Notez que ni la clause <literal>group by</literal> ni la clause <literal>order by</literal> ne peuvent contenir d'expressions arithmétiques."
+
+#: index.docbook:795
+msgid "A <literal>having</literal> clause is also allowed."
+msgstr "Sous-requêtes"
+
+#: index.docbook:799
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color\n"
+ "having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]>"
+msgstr "Pour les bases de données le supportant, Hibernate supporte les sous requêtes dans les requêtes. Une sous requête doit être entre parenthèses (souvent pour un appel à une fonction d'agrégation SQL) Même les sous requêtes corrélées (celles qui font référence à un alias de la requête principale) sont supportées."
+
+#: index.docbook:801
+msgid "SQL functions and aggregate functions are allowed in the <literal>having</literal> and <literal>order by</literal> clauses, if supported by the underlying database (eg. not in MySQL)."
+msgstr ""
+ "<![CDATA[from Cat as fatcat\n"
+ "where fatcat.weight > (\n"
+ " select avg(cat.weight) from DomesticCat cat\n"
+ ")]]>"
+
+#: index.docbook:807
+msgid ""
+ "<![CDATA[select cat\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.name, cat.other, cat.properties\n"
+ "having avg(kitten.weight) > 100\n"
+ "order by count(kitten) asc, sum(kitten.weight) desc]]>"
+msgstr ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name = some (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+
+#: index.docbook:809
+msgid "Note that neither the <literal>group by</literal> clause nor the <literal>order by</literal> clause may contain arithmetic expressions. Also note that Hibernate currently does not expand a grouped entity, so you can't write <literal>group by cat</literal> if all properties of <literal>cat</literal> are non-aggregated. You have to list all non-aggregated properties explicitly."
+msgstr ""
+ "<![CDATA[from Cat as cat\n"
+ "where not exists (\n"
+ " from Cat as mate where mate.mate = cat\n"
+ ")]]>"
+
+#: index.docbook:821
+msgid "Subqueries"
+msgstr ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name not in (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+
+#: index.docbook:823
+msgid "For databases that support subselects, Hibernate supports subqueries within queries. A subquery must be surrounded by parentheses (often by an SQL aggregate function call). Even correlated subqueries (subqueries that refer to an alias in the outer query) are allowed."
+msgstr ""
+ "<![CDATA[select cat.id, (select max(kit.weight) from cat.kitten kit)\n"
+ "from Cat as cat]]>"
+
+#: index.docbook:829
+msgid ""
+ "<![CDATA[from Cat as fatcat\n"
+ "where fatcat.weight > (\n"
+ " select avg(cat.weight) from DomesticCat cat\n"
+ ")]]>"
+msgstr "Notez que les sous-requêtes HQL peuvent arriver seulememnt dans les clauses select ou where."
+
+#: index.docbook:831
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name = some (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr "Pour des sous-requêtes avec plus d'une expression dans le select, vous pouvez utiliser un constructeur de tuples :"
+
+#: index.docbook:833
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not exists (\n"
+ " from Cat as mate where mate.mate = cat\n"
+ ")]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat\n"
+ "where not ( cat.name, cat.color ) in (\n"
+ " select cat.name, cat.color from DomesticCat cat\n"
+ ")]]>"
+
+#: index.docbook:835
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name not in (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr "Notez que sur certaines bases de données (mais par Oracle ou HSQL), vous pouvez utiliser des constructeurs de tuples dans d'autres contextes, par exemple lors du requêtage de composants ou de types utilisateur composites :"
+
+#: index.docbook:837
+msgid ""
+ "<![CDATA[select cat.id, (select max(kit.weight) from cat.kitten kit)\n"
+ "from Cat as cat]]>"
+msgstr "<![CDATA[from Person where name = ('Gavin', 'A', 'King')]]>"
+
+#: index.docbook:839
+msgid "Note that HQL subqueries may occur only in the select or where clauses."
+msgstr "Ce qui est équivalent à la forme plus verbeuse suivante :"
+
+#: index.docbook:843
+msgid "Note that subqueries can also utilize <literal>row value constructor</literal> syntax. See <xref linkend=\"queryhql-tuple\"/> for more details."
+msgstr "<![CDATA[from Person where name.first = 'Gavin' and name.initial = 'A' and name.last = 'King')]]>"
+
+#: index.docbook:851
+msgid "HQL examples"
+msgstr "Il y a deux bonnes raisons que vous ne puissiez ne pas vouloir faire cette sorte de choses : d'abord, ce n'est pas complètement portable entre les plateformes de base de données ; deuxièmement, la requête est maintenant dépendante de l'ordre des propriétés dans le document de mapping."
+
+#: index.docbook:853
+msgid "Hibernate queries can be quite powerful and complex. In fact, the power of the query language is one of Hibernate's main selling points. Here are some example queries very similar to queries that I used on a recent project. Note that most queries you will write are much simpler than these!"
+msgstr "Exemples HQL"
+
+#: index.docbook:859
+msgid "The following query returns the order id, number of items and total value of the order for all unpaid orders for a particular customer and given minimum total value, ordering the results by total value. In determining the prices, it uses the current catalog. The resulting SQL query, against the <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal> and <literal>PRICE</literal> tables has four inner joins and an (uncorrelated) subselect."
+msgstr "Les requêtes Hibernate peuvent être relativement puissantes et complexes. En fait, la puissance du langage de requêtage est l'un des avantages principaux d'Hibernate. Voici quelques exemples très similaires aux requêtes que nous avons utilisées lors d'un récent projet. Notez que la plupart des requêtes que vous écrirez seront plus simples que les exemples suivantes !"
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog.effectiveDate < sysdate\n"
+ " and catalog.effectiveDate >= all (\n"
+ " select cat.effectiveDate\n"
+ " from Catalog as cat\n"
+ " where cat.effectiveDate < sysdate\n"
+ " )\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr "La requête suivante retourne l'id de commande (order), le nombre d'articles (items) et la valeur totale de la commande (order) pour toutes les commandes non payées d'un client (customer) particulier pour un total minimum donné, le tout trié par la valeur totale. La requête SQL générée sur les tables <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal> et <literal>PRICE</literal> est composée de quatre jointures interne ainsi que d'une sous-requête (non corrélée)."
+
+#: index.docbook:870
+msgid "What a monster! Actually, in real life, I'm not very keen on subqueries, so my query was really more like this:"
+msgstr ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog.effectiveDate < sysdate\n"
+ " and catalog.effectiveDate >= all (\n"
+ " select cat.effectiveDate\n"
+ " from Catalog as cat\n"
+ " where cat.effectiveDate < sysdate\n"
+ " )\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+
+#: index.docbook:875
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog = :currentCatalog\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr "Quel monstre ! En principe, nous ne sommes pas très fan des sous-requêtes, la requête ressemblait donc plutôt à cela :"
+
+#: index.docbook:877
+msgid "The next query counts the number of payments in each status, excluding all payments in the <literal>AWAITING_APPROVAL</literal> status where the most recent status change was made by the current user. It translates to an SQL query with two inner joins and a correlated subselect against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> and <literal>PAYMENT_STATUS_CHANGE</literal> tables."
+msgstr ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog = :currentCatalog\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+
+#: index.docbook:885
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ " join payment.statusChanges as statusChange\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or (\n"
+ " statusChange.timeStamp = (\n"
+ " select max(change.timeStamp)\n"
+ " from PaymentStatusChange change\n"
+ " where change.payment = payment\n"
+ " )\n"
+ " and statusChange.user <> :currentUser\n"
+ " )\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr "La requête suivante compte le nombre de paiements (payments) pour chaque status, en excluant les paiements dans le status <literal>AWAITING_APPROVAL</literal> où le changement de status le plus récent à été fait par l'utilisateur courant. En SQL, cette requête effectue deux jointures internes et des sous requêtes corrélées sur les tables <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> et <literal>PAYMENT_STATUS_CHANGE</literal>."
+
+#: index.docbook:887
+msgid "If I would have mapped the <literal>statusChanges</literal> collection as a list, instead of a set, the query would have been much simpler to write."
+msgstr ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ " join payment.statusChanges as statusChange\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or (\n"
+ " statusChange.timeStamp = (\n"
+ " select max(change.timeStamp)\n"
+ " from PaymentStatusChange change\n"
+ " where change.payment = payment\n"
+ " )\n"
+ " and statusChange.user <> :currentUser\n"
+ " )\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+
+#: index.docbook:892
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr "Si nous avions mappé la collection <literal>statusChanges</literal> comme une liste, au lieu d'un ensemble, la requête aurait été plus facile à écrire."
+
+#: index.docbook:894
+msgid "The next query uses the MS SQL Server <literal>isNull()</literal> function to return all the accounts and unpaid payments for the organization to which the current user belongs. It translates to an SQL query with three inner joins, an outer join and a subselect against the <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> and <literal>ORG_USER</literal> tables."
+msgstr ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+
+#: index.docbook:903
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser in elements(account.holder.users)\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr "La requête qui suit utilise la fonction de MS SQL <literal>isNull()</literal> pour retourner tous les comptes (accounts) et paiements (payments) impayés pour l'organisation à laquelle l'uilisateur (user) courant appartient. Elle est traduite en SQL par trois jointures internes, une jointure externe ainsi qu'une sous requête sur les tables <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> et <literal>ORG_USER</literal>."
+
+#: index.docbook:905
+msgid "For some databases, we would need to do away with the (correlated) subselect."
+msgstr ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser in elements(account.holder.users)\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+
+#: index.docbook:909
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " join account.holder.users as user\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser = user\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr "Pour d'autres base de données, nous aurions dû faire sans la sous-requête (corrélée)."
+
+#: index.docbook:914
+msgid "Bulk update and delete"
+msgstr ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " join account.holder.users as user\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser = user\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+
+#: index.docbook:916
+msgid "HQL now supports <literal>update</literal>, <literal>delete</literal> and <literal>insert ... select ...</literal> statements. See <xref linkend=\"batch-direct\"/> for details."
+msgstr "Mise à jour et suppression"
+
+#: index.docbook:924
+msgid "Tips & Tricks"
+msgstr "HQL supporte maintenant les expressions <literal>update</literal>, <literal>delete</literal> et <literal>insert ... select ...</literal>. Voir <xref linkend=\"batch-direct\"/> pour les détails."
+
+#: index.docbook:926
+msgid "You can count the number of query results without actually returning them:"
+msgstr "Trucs & Astuces"
+
+#: index.docbook:930
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue()]]>"
+msgstr "Vous pouvez compter le nombre de résultats d'une requête sans les retourner :"
+
+#: index.docbook:932
+msgid "To order a result by the size of a collection, use the following query:"
+msgstr "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue()]]>"
+
+#: index.docbook:936
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "order by count(msg)]]>"
+msgstr "Pour trier les résultats par la taille d'une collection, utilisez la requête suivante :"
+
+#: index.docbook:938
+msgid "If your database supports subselects, you can place a condition upon selection size in the where clause of your query:"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "order by count(msg)]]>"
+
+#: index.docbook:943
+msgid "<![CDATA[from User usr where size(usr.messages) >= 1]]>"
+msgstr "Si votre base de données supporte les sous-requêtes, vous pouvez placer des conditions sur la taille de la sélection dans la clause where de votre requête:"
+
+#: index.docbook:945
+msgid "If your database doesn't support subselects, use the following query:"
+msgstr "<![CDATA[from User usr where size(usr.messages) >= 1]]>"
+
+#: index.docbook:949
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User usr.name\n"
+ " join usr.messages msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) >= 1]]>"
+msgstr "Si votre base de données ne supporte pas les sous-requêtes, utilisez la requête suivante :"
+
+#: index.docbook:951
+msgid "As this solution can't return a <literal>User</literal> with zero messages because of the inner join, the following form is also useful:"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User usr.name\n"
+ " join usr.messages msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) >= 1]]>"
+
+#: index.docbook:956
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) = 0]]>"
+msgstr "Cette solution ne peut pas retourner un <literal>User</literal> avec zéro message à cause de la jointure interne, la forme suivante peut donc être utile :"
+
+#: index.docbook:958
+msgid "Properties of a JavaBean can be bound to named query parameters:"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) = 0]]>"
+
+#: index.docbook:962
+msgid ""
+ "<![CDATA[Query q = s.createQuery(\"from foo Foo as foo where foo.name=:name and foo.size=:size\");\n"
+ "q.setProperties(fooBean); // fooBean has getName() and getSize()\n"
+ "List foos = q.list();]]>"
+msgstr "Les propriétés d'un JavaBean peuvent être injectées dans les paramètres nommés d'un requête :"
+
+#: index.docbook:964
+msgid "Collections are pageable by using the <literal>Query</literal> interface with a filter:"
+msgstr ""
+ "<![CDATA[Query q = s.createQuery(\"from foo Foo as foo where foo.name=:name and foo.size=:size\");\n"
+ "q.setProperties(fooBean); // fooBean has getName() and getSize()\n"
+ "List foos = q.list();]]>"
+
+#: index.docbook:968
+msgid ""
+ "<![CDATA[Query q = s.createFilter( collection, \"\" ); // the trivial filter\n"
+ "q.setMaxResults(PAGE_SIZE);\n"
+ "q.setFirstResult(PAGE_SIZE * pageNumber);\n"
+ "List page = q.list();]]>"
+msgstr "Les collections sont paginables via l'utilisation de l'interface <literal>Query</literal> avec un filtre :"
+
+#: index.docbook:970
+msgid "Collection elements may be ordered or grouped using a query filter:"
+msgstr ""
+ "<![CDATA[Query q = s.createFilter( collection, \"\" ); // the trivial filter\n"
+ "q.setMaxResults(PAGE_SIZE);\n"
+ "q.setFirstResult(PAGE_SIZE * pageNumber);\n"
+ "List page = q.list();]]>"
+
+#: index.docbook:974
+msgid ""
+ "<![CDATA[Collection orderedCollection = s.filter( collection, \"order by this.amount\" );\n"
+ "Collection counts = s.filter( collection, \"select this.type, count(this) group by this.type\" );]]>"
+msgstr "Les éléments d'une collection peuvent être triés ou groupés en utilisant un filtre de requête :"
+
+#: index.docbook:976
+msgid "You can find the size of a collection without initializing it:"
+msgstr ""
+ "<![CDATA[Collection orderedCollection = s.filter( collection, \"order by this.amount\" );\n"
+ "Collection counts = s.filter( collection, \"select this.type, count(this) group by this.type\" );]]>"
+
+#: index.docbook:980
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue();]]>"
+msgstr "Vous pouvez récupérer la taille d'une collection sans l'initialiser :"
+
+#: index.docbook:985
+msgid "Components"
+msgstr "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue();]]>"
+
+#: index.docbook:987
+msgid "Components might be used in just about every way that simple value types can be used in HQL queries. They can appear in the <literal>select</literal> clause:"
+msgstr ""
+
+#: index.docbook:992, index.docbook:1038
+msgid "<![CDATA[select p.name from from Person p]]>"
+msgstr ""
+
+#: index.docbook:993
+msgid "<![CDATA[select p.name.first from from Person p]]>"
+msgstr ""
+
+#: index.docbook:995
+msgid "where the Person's name property is a component. Components can also be used in the <literal>where</literal> clause:"
+msgstr ""
+
+#: index.docbook:1000
+msgid "<![CDATA[from from Person p where p.name = :name]]>"
+msgstr ""
+
+#: index.docbook:1001
+msgid "<![CDATA[from from Person p where p.name.first = :firstName]]>"
+msgstr ""
+
+#: index.docbook:1003
+msgid "Components can also be used in the <literal>order by</literal> clause:"
+msgstr ""
+
+#: index.docbook:1007
+msgid "<![CDATA[from from Person p order by p.name]]>"
+msgstr ""
+
+#: index.docbook:1008
+msgid "<![CDATA[from from Person p order by p.name.first]]>"
+msgstr ""
+
+#: index.docbook:1010
+msgid "Another common use of components is in <xref linkend=\"queryhql-tuple\"/>row value constructors."
+msgstr ""
+
+#: index.docbook:1016
+msgid "Row value constructor syntax"
+msgstr ""
+
+#: index.docbook:1018
+msgid "HQL supports the use of ANSI SQL <literal>row value constructor</literal> syntax (sometimes called <literal>tuple</literal> syntax), even though the underlying database may not support that notion. Here we are generally referring to multi-valued comparisons, typically associated with components. Consider an entity Person which defines a name component:"
+msgstr ""
+
+#: index.docbook:1025
+msgid "<![CDATA[from Person p where p.name.first='John' and p.name.last='Jingleheimer-Schmidt']]>"
+msgstr ""
+
+#: index.docbook:1027
+msgid "That's valid syntax, although a little verbose. It be nice to make this a bit more concise and use <literal>row value constructor</literal> syntax:"
+msgstr ""
+
+#: index.docbook:1032
+msgid "<![CDATA[from Person p where p.name=('John', 'Jingleheimer-Schmidt')]]>"
+msgstr ""
+
+#: index.docbook:1034
+msgid "It can also be useful to specify this in the <literal>select</literal> clause:"
+msgstr ""
+
+#: index.docbook:1040
+msgid "Another time using <literal>row value constructor</literal> syntax can be beneficial is when using subqueries needing to compare against multiple values:"
+msgstr ""
+
+#: index.docbook:1045
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not ( cat.name, cat.color ) in (\n"
+ " select cat.name, cat.color from DomesticCat cat\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:1047
+msgid "One thing to consider when deciding if you want to use this syntax is that the query will be dependent upon the ordering of the component sub-properties in the metadata."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/query_sql.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/query_sql.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/query_sql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1003 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Native SQL"
+msgstr "SQL natif"
+
+#: index.docbook:7
+msgid "You may also express queries in the native SQL dialect of your database. This is useful if you want to utilize database specific features such as query hints or the <literal>CONNECT</literal> keyword in Oracle. It also provides a clean migration path from a direct SQL/JDBC based application to Hibernate."
+msgstr "Vous pouvez aussi écrire vos requêtes dans le dialecte SQL natif de votre base de données. Ceci est utile si vous souhaitez utiliser les fonctionnalités spécifiques de votre base de données comme le mot clé <literal>CONNECT</literal> d'Oracle. Cette fonctionnalité offre par ailleurs un moyen de migration plus propre et doux d'une application basée sur SQL/JDBC vers une application Hibernate."
+
+#: index.docbook:13
+msgid "Hibernate3 allows you to specify handwritten SQL (including stored procedures) for all create, update, delete, and load operations."
+msgstr "Hibernate3 vous permet de spécifier du SQL écrit à la main (incluant les procédures stockées) pour toutes les opérations de création, mise à jour, suppression et chargement."
+
+#: index.docbook:17
+msgid "Using a <literal>SQLQuery</literal>"
+msgstr "Utiliser une <literal>SQLQuery</literal>"
+
+#: index.docbook:19
+msgid "Execution of native SQL queries is controlled via the <literal>SQLQuery</literal> interface, which is obtained by calling <literal>Session.createSQLQuery()</literal>. The following describes how to use this API for querying."
+msgstr "L'exécution des requêtes en SQL natif est contrôlée par l'interface <literal>SQLQuery</literal>, laquelle est obtenue en appelant <literal>Session.createSQLQuery()</literal>. Dans des cas extrêmement simples, nous pouvons utiliser la forme suivante :"
+
+#: index.docbook:25
+msgid "Scalar queries"
+msgstr ""
+ "List cats = sess.createSQLQuery(\"select * from cats\")\n"
+ " .addEntity(Cat.class)\n"
+ " .list();"
+
+#: index.docbook:27
+msgid "The most basic SQL query is to get a list of scalars (values)."
+msgstr "Cette requête a spécifié :"
+
+#: index.docbook:30
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").list();\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").list();\n"
+ "]]>"
+msgstr "la requête SQL"
+
+#: index.docbook:32
+msgid "These will both return a List of Object arrays (Object[]) with scalar values for each column in the CATS table. Hibernate will use ResultSetMetadata to deduce the actual order and types of the returned scalar values."
+msgstr "l'entité retournée par la requête"
+
+#: index.docbook:37
+msgid "To avoid the overhead of using <literal>ResultSetMetadata</literal> or simply to be more explicit in what is returned one can use <literal>addScalar()</literal>."
+msgstr "Ici, les noms de colonne des résultats sont supposés être les mêmes que les noms de colonne spécifiés dans le document de mapping. Cela peut être problématique pour des requêtes SQL qui joignent de multiple tables, puisque les mêmes noms de colonne peuvent apparaître dans plus d'une table. La forme suivante n'est pas vulnérable à la duplication des noms de colonne :"
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\", Hibernate.STRING)\n"
+ " .addScalar(\"BIRTHDATE\", Hibernate.DATE)\n"
+ "]]>"
+msgstr ""
+ "List cats = sess.createSQLQuery(\"select {cat.*} from cats cat\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .list();"
+
+#: index.docbook:43, index.docbook:89, index.docbook:170, index.docbook:321
+msgid "This query specified:"
+msgstr "Cette requête a spécifié :"
+
+#: index.docbook:47, index.docbook:93, index.docbook:325
+msgid "the SQL query string"
+msgstr "la requête SQL, avec un paramètre fictif pour Hibernate pour injecter les alias de colonne"
+
+#: index.docbook:51
+msgid "the columns and types to return"
+msgstr "l'entité retournée par la requête, et son alias de table SQL"
+
+#: index.docbook:55
+msgid "This will still return Object arrays, but now it will not use <literal>ResultSetMetdata</literal> but will instead explicitly get the ID, NAME and BIRTHDATE column as respectively a Long, String and a Short from the underlying resultset. This also means that only these three columns will be returned, even though the query is using <literal>*</literal> and could return more than the three listed columns."
+msgstr "La méthode <literal>addEntity()</literal> associe l'alias de la table SQL avec la classe de l'entité retournée, et détermine la forme de l'ensemble des résultats de la requête."
+
+#: index.docbook:63
+msgid "It is possible to leave out the type information for all or some of the scalars."
+msgstr "La méthode <literal>addJoin()</literal> peut être utilisée pour charger des associations vers d'autres entités et collections."
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\")\n"
+ " .addScalar(\"BIRTHDATE\")\n"
+ "]]>"
+msgstr ""
+ "List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"kitten\", \"cat.kittens\")\n"
+ " .list();"
+
+#: index.docbook:68
+msgid "This is essentially the same query as before, but now <literal>ResultSetMetaData</literal> is used to decide the type of NAME and BIRTHDATE where as the type of ID is explicitly specified."
+msgstr "Une requête SQL native pourrait retourner une simple valeur scalaire ou une combinaison de scalaires et d'entités."
+
+#: index.docbook:72
+msgid "How the java.sql.Types returned from ResultSetMetaData is mapped to Hibernate types is controlled by the Dialect. If a specific type is not mapped or does not result in the expected type it is possible to customize it via calls to <literal>registerHibernateType</literal> in the Dialect."
+msgstr ""
+ "Double max = (Double) sess.createSQLQuery(\"select max(cat.weight) as maxWeight from cats cat\")\n"
+ " .addScalar(\"maxWeight\", Hibernate.DOUBLE);\n"
+ " .uniqueResult();"
+
+#: index.docbook:80
+msgid "Entity queries"
+msgstr "Vous pouvez alternativement décrire les informations de mapping des résultats dans vos fichiers hbm et les utiliser pour vos requêtes."
+
+#: index.docbook:82
+msgid "The above queries were all about returning scalar values, basically returning the \"raw\" values from the resultset. The following shows how to get entity objects from a native sql query via <literal>addEntity()</literal>."
+msgstr ""
+ "List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .setResultSetMapping(\"catAndKitten\")\n"
+ " .list();"
+
+#: index.docbook:87
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").addEntity(Cat.class);\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr "Alias et références de propriété"
+
+#: index.docbook:97
+msgid "the entity returned by the query"
+msgstr ""
+ "String sql = \"select cat.originalId as {cat.id}, \" +\n"
+ " \"cat.mateid as {cat.mate}, cat.sex as {cat.sex}, \" +\n"
+ " \"cat.weight*10 as {cat.weight}, cat.name as {cat.name} \" +\n"
+ " \"from cat_log cat where {cat.mate} = :catId\"\n"
+ "\n"
+ "List loggedCats = sess.createSQLQuery(sql)\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .setLong(\"catId\", catId)\n"
+ " .list();"
+
+#: index.docbook:101
+msgid "Assuming that Cat is mapped as a class with the columns ID, NAME and BIRTHDATE the above queries will both return a List where each element is a Cat entity."
+msgstr "<emphasis>à noter :</emphasis> si vous listez chaque propriété explicitement, vous devez inclure toutes les propriétés de la classe <emphasis>et ses sous-classes</emphasis> !"
+
+#: index.docbook:105
+msgid "If the entity is mapped with a <literal>many-to-one</literal> to another entity it is required to also return this when performing the native query, otherwise a database specific \"column not found\" error will occur. The additional columns will automatically be returned when using the * notation, but we prefer to be explicit as in the following example for a <literal>many-to-one</literal> to a <literal>Dog</literal>:"
+msgstr "La table suivante montre les différentes possibilités d'utilisation de l'injection d'alias. à noter : les noms des alias dans le résultat sont des exemples, chaque alias aura un nom unique et probablement différent lors de l'utilisation."
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr "Noms d'injection d'alias"
+
+#: index.docbook:115
+msgid "This will allow cat.getDog() to function properly."
+msgstr "Description"
+
+#: index.docbook:119
+msgid "Handling associations and collections"
+msgstr "Syntaxe"
+
+#: index.docbook:121
+msgid "It is possible to eagerly join in the <literal>Dog</literal> to avoid the possible extra roundtrip for initializing the proxy. This is done via the <literal>addJoin()</literal> method, which allows you to join in an association or collection."
+msgstr "Exemple"
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.ID, NAME, BIRTHDATE, DOG_ID, D_ID, D_NAME FROM CATS c, DOGS d WHERE c.DOG_ID = d.D_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dog\");\n"
+ "]]>"
+msgstr "Une simple propriété"
+
+#: index.docbook:128
+msgid "In this example the returned <literal>Cat</literal>'s will have their <literal>dog</literal> property fully initialized without any extra roundtrip to the database. Notice that we added a alias name (\"cat\") to be able to specify the target property path of the join. It is possible to do the same eager joining for collections, e.g. if the <literal>Cat</literal> had a one-to-many to <literal>Dog</literal> instead."
+msgstr "{[aliasname].[propertyname]}"
+
+#: index.docbook:136
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, D_ID, D_NAME, CAT_ID FROM CATS c, DOGS d WHERE c.ID = d.CAT_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dogs\");\n"
+ "]]>"
+msgstr "A_NAME as {item.name}"
+
+#: index.docbook:138
+msgid "At this stage we are reaching the limits of what is possible with native queries without starting to enhance the sql queries to make them usable in Hibernate; the problems starts to arise when returning multiple entities of the same type or when the default alias/column names are not enough."
+msgstr "Une propriété composée"
+
+#: index.docbook:146
+msgid "Returning multiple entities"
+msgstr "{[aliasname].[componentname].[propertyname]}"
+
+#: index.docbook:148
+msgid "Until now the result set column names are assumed to be the same as the column names specified in the mapping document. This can be problematic for SQL queries which join multiple tables, since the same column names may appear in more than one table."
+msgstr "CURRENCY as {item.amount.currency}, VALUE as {item.amount.value}"
+
+#: index.docbook:153
+msgid "Column alias injection is needed in the following query (which most likely will fail):"
+msgstr "Discriminant d'une entité"
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.*, m.* FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr "{[aliasname].class}"
+
+#: index.docbook:158
+msgid "The intention for this query is to return two Cat instances per row, a cat and its mother. This will fail since there is a conflict of names since they are mapped to the same column names and on some databases the returned column aliases will most likely be on the form \"c.ID\", \"c.NAME\", etc. which are not equal to the columns specificed in the mappings (\"ID\" and \"NAME\")."
+msgstr "DISC as {item.class}"
+
+#: index.docbook:165
+msgid "The following form is not vulnerable to column name duplication:"
+msgstr "Toutes les propriétés d'une entité"
+
+#: index.docbook:168
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr "{[aliasname].*}"
+
+#: index.docbook:174
+msgid "the SQL query string, with placeholders for Hibernate to inject column aliases"
+msgstr "Une clef de collection"
+
+#: index.docbook:179
+msgid "the entities returned by the query"
+msgstr "{[aliasname].key}"
+
+#: index.docbook:183
+msgid "The {cat.*} and {mother.*} notation used above is a shorthand for \"all properties\". Alternatively, you may list the columns explicity, but even in this case we let Hibernate inject the SQL column aliases for each property. The placeholder for a column alias is just the property name qualified by the table alias. In the following example, we retrieve Cats and their mothers from a different table (cat_log) to the one declared in the mapping metadata. Notice that we may even use the property aliases in the where clause if we like."
+msgstr "ORGID as {coll.key}"
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[String sql = \"SELECT ID as {c.id}, NAME as {c.name}, \" + \n"
+ " \"BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} \" +\n"
+ " \"FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID\";\n"
+ "\n"
+ "List loggedCats = sess.createSQLQuery(sql)\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class).list()\n"
+ "]]>"
+msgstr "L'identifiant d'une collection"
+
+#: index.docbook:195
+msgid "Alias and property references"
+msgstr "{[aliasname].id}"
+
+#: index.docbook:197
+msgid "For most cases the above alias injection is needed, but for queries relating to more complex mappings like composite properties, inheritance discriminators, collections etc. there are some specific aliases to use to allow Hibernate to inject the proper aliases."
+msgstr "EMPID as {coll.id}"
+
+#: index.docbook:202
+msgid "The following table shows the different possibilities of using the alias injection. Note: the alias names in the result are examples, each alias will have a unique and probably different name when used."
+msgstr "L'élément d'une collection"
+
+#: index.docbook:208
+msgid "Alias injection names"
+msgstr "{[aliasname].element}"
+
+#: index.docbook:219
+msgid "Description"
+msgstr "XID as {coll.element}"
+
+#: index.docbook:221
+msgid "Syntax"
+msgstr "Propriété de l'élément dans la collection"
+
+#: index.docbook:223
+msgid "Example"
+msgstr "{[aliasname].element.[propertyname]}"
+
+#: index.docbook:229
+msgid "A simple property"
+msgstr "NAME as {coll.element.name}"
+
+#: index.docbook:231
+msgid "{[aliasname].[propertyname]"
+msgstr "Toutes les propriétés de l'élément dans la collection"
+
+#: index.docbook:233
+msgid "A_NAME as {item.name}"
+msgstr "{[aliasname].element.*}"
+
+#: index.docbook:237
+msgid "A composite property"
+msgstr "{coll.element.*}"
+
+#: index.docbook:239
+msgid "{[aliasname].[componentname].[propertyname]}"
+msgstr "Toutes les propriétés de la collection"
+
+#: index.docbook:241
+msgid "CURRENCY as {item.amount.currency}, VALUE as {item.amount.value}"
+msgstr "{[aliasname].*}"
+
+#: index.docbook:246
+msgid "Discriminator of an entity"
+msgstr "{coll.*}"
+
+#: index.docbook:248
+msgid "{[aliasname].class}"
+msgstr "Requêtes SQL nommées"
+
+#: index.docbook:250
+msgid "DISC as {item.class}"
+msgstr "Les requêtes SQL nommées peuvent être définies dans le document de mapping et appelées exactement de la même manière qu'un requête HQL nommée. Dans ce cas, nous <emphasis>n'avons pas besoin</emphasis> d'appeler <literal>addEntity()</literal>."
+
+#: index.docbook:254
+msgid "All properties of an entity"
+msgstr ""
+ "<sql-query name=\"persons\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex}\n"
+ " FROM PERSON person\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>"
+
+#: index.docbook:256, index.docbook:304
+msgid "{[aliasname].*}"
+msgstr ""
+ "List people = sess.getNamedQuery(\"persons\")\n"
+ " .setString(\"namePattern\", namePattern)\n"
+ " .setMaxResults(50)\n"
+ " .list();"
+
+#: index.docbook:258
+msgid "{item.*}"
+msgstr "Les éléments <literal><return-join></literal> et <literal><load-collection></literal> sont respectivement utilisés pour lier des associations et définir des requêtes qui initialisent des collections."
+
+#: index.docbook:262
+msgid "A collection key"
+msgstr ""
+ "<sql-query name=\"personsWith\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>"
+
+#: index.docbook:264
+msgid "{[aliasname].key}"
+msgstr "Une requête SQL nommée peut retourner une valeur scalaire. Vous devez spécifier l'alias de colonne et le type Hibernate utilisant l'élément <literal><return-scalar></literal> :"
+
+#: index.docbook:266
+msgid "ORGID as {coll.key}"
+msgstr ""
+ "<sql-query name=\"mySqlQuery\">\n"
+ " <return-scalar column=\"name\" type=\"string\"/>\n"
+ " <return-scalar column=\"age\" type=\"long\"/>\n"
+ " SELECT p.NAME AS name,\n"
+ " p.AGE AS age,\n"
+ " FROM PERSON p WHERE p.NAME LIKE 'Hiber%'\n"
+ "</sql-query>"
+
+#: index.docbook:270
+msgid "The id of an collection"
+msgstr "Vous pouvez externaliser les informations de mapping des résultats dans un élément <literal><resultset></literal> pour soit les réutiliser dans différentes requêtes nommées, soit à travers l'API <literal>setResultSetMapping()</literal>."
+
+#: index.docbook:272
+msgid "{[aliasname].id}"
+msgstr ""
+ "<resultset name=\"personAddress\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ "</resultset>\n"
+ "\n"
+ "<sql-query name=\"personsWith\" resultset-ref=\"personAddress\">\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>"
+
+#: index.docbook:274
+msgid "EMPID as {coll.id}"
+msgstr "Utilisation de return-property pour spécifier explicitement les noms des colonnes/alias"
+
+#: index.docbook:278
+msgid "The element of an collection"
+msgstr "Avec <literal><return-property></literal> vous pouvez explicitement dire à Hibernate quels alias de colonne utiliser, plutot que d'employer la syntaxe <literal>{}</literal> pour laisser Hibernate injecter ses propres alias."
+
+#: index.docbook:280
+msgid "{[aliasname].element}"
+msgstr ""
+ "<sql-query name=\"mySqlQuery\">\n"
+ " <return alias=\"person\" class=\"eg.Person\">\n"
+ " <return-property name=\"name\" column=\"myName\"/>\n"
+ " <return-property name=\"age\" column=\"myAge\"/>\n"
+ " <return-property name=\"sex\" column=\"mySex\"/>\n"
+ " </return>\n"
+ " SELECT person.NAME AS myName,\n"
+ " person.AGE AS myAge,\n"
+ " person.SEX AS mySex,\n"
+ " FROM PERSON person WHERE person.NAME LIKE :name\n"
+ "</sql-query>"
+
+#: index.docbook:282
+msgid "XID as {coll.element}"
+msgstr "<literal><return-property></literal> fonctionne aussi avec de multiple colonnes. Cela résout une limitation de la syntaxe <literal>{}</literal> qui ne peut pas permettre une bonne granularité des propriétés multi-colonnes."
+
+#: index.docbook:286
+msgid "roperty of the element in the collection"
+msgstr ""
+ "<sql-query name=\"organizationCurrentEmployments\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " <return-property name=\"endDate\" column=\"myEndDate\"/>\n"
+ " </return>\n"
+ " SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},\n"
+ " STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},\n"
+ " REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT\n"
+ " WHERE EMPLOYER = :id AND ENDDATE IS NULL\n"
+ " ORDER BY STARTDATE ASC\n"
+ "</sql-query>"
+
+#: index.docbook:288
+msgid "{[aliasname].element.[propertyname]}"
+msgstr "Notez que dans cet exemple nous avons utilisé <literal><return-property></literal> en combinaison avec la syntaxe <literal>{}</literal> pour l'injection. Cela autorise les utilisateurs à choisir comment ils veulent référencer les colonnes et les propriétés."
+
+#: index.docbook:290
+msgid "NAME as {coll.element.name}"
+msgstr "Si votre mapping a un discriminant vous devez utiliser <literal><return-discriminator></literal> pour spécifier la colonne discriminante."
+
+#: index.docbook:294
+msgid "All properties of the element in the collection"
+msgstr "Utilisation de procédures stockées pour les requêtes"
+
+#: index.docbook:296
+msgid "{[aliasname].element.*}"
+msgstr "Hibernate 3 introduit le support des requêtes via procédures stockées et les fonctions. La documentation suivante est valable pour les deux. Les procédures stockées/fonctions doivent retourner l'ensemble de résultats en tant que premier paramètre sortant (NdT: \"out-parameter\") pour être capable de fonctionner avec Hibernate. Un exemple d'une telle procédure stockée en Oracle 9 et version supérieure :"
+
+#: index.docbook:298
+msgid "{coll.element.*}"
+msgstr ""
+ "CREATE OR REPLACE FUNCTION selectAllEmployments\n"
+ " RETURN SYS_REFCURSOR\n"
+ "AS\n"
+ " st_cursor SYS_REFCURSOR;\n"
+ "BEGIN\n"
+ " OPEN st_cursor FOR\n"
+ " SELECT EMPLOYEE, EMPLOYER,\n"
+ " STARTDATE, ENDDATE,\n"
+ " REGIONCODE, EID, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT;\n"
+ " RETURN st_cursor;\n"
+ " END;"
+
+#: index.docbook:302
+msgid "All properties of the the collection"
+msgstr "Pour utiliser cette requête dans Hibernate vous avez besoin de la mapper via une requête nommée."
+
+#: index.docbook:306
+msgid "{coll.*}"
+msgstr "Notez que les procédures stockées retournent, pour le moment, seulement des scalaires et des entités. <literal><return-join></literal> et <literal><load-collection></literal> ne sont pas supportés."
+
+#: index.docbook:315
+msgid "Returning non-managed entities"
+msgstr "Règles/limitations lors de l'utilisation des procédures stockées"
+
+#: index.docbook:317
+msgid "It is possible to apply a ResultTransformer to native sql queries. Allowing it to e.g. return non-managed entities."
+msgstr "Pur utiliser des procédures stockées avec Hibernate, les procédures doivent suivre certaines règles. Si elles ne suivent pas ces règles, elles ne sont pas utilisables avec Hibernate. Si vous voulez encore utiliser ces procédures vous devez les exécuter via <literal>session.connection()</literal>. Les règles sont différentes pour chaque base de données, puisque les vendeurs de base de données ont des sémantiques/syntaxes différentes pour les procédures stockées."
+
+#: index.docbook:319
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT NAME, BIRTHDATE FROM CATS\")\n"
+ " .setResultTransformer(Transformers.aliasToBean(CatDTO.class))]]>"
+msgstr "Les requêtes de procédures stockées ne peuvent pas être paginées avec <literal>setFirstResult()/setMaxResults()</literal>."
+
+#: index.docbook:329
+msgid "a result transformer"
+msgstr "Pour Sybase ou MS SQL server les règles suivantes s'appliquent :"
+
+#: index.docbook:333
+msgid "The above query will return a list of <literal>CatDTO</literal> which has been instantiated and injected the values of NAME and BIRTHNAME into its corresponding properties or fields."
+msgstr "La procédure doit retourner un ensemble de résultats. Notez que comme ces serveurs peuvent retourner de multiples ensembles de résultats et mettre à jour des compteurs, Hibernate itérera les résultats et prendra le premier résultat qui est un ensemble de résultat comme valeur de retour. Tout le reste sera ignoré."
+
+#: index.docbook:340
+msgid "Handling inheritance"
+msgstr "Si vous pouvez activer <literal>SET NOCOUNT ON</literal> dans votre procédure, elle sera probablement plus efficace, mais ce n'est pas une obligation."
+
+#: index.docbook:342
+msgid "Native sql queries which query for entities that is mapped as part of an inheritance must include all properties for the baseclass and all it subclasses."
+msgstr "SQL personnalisé pour créer, mettre à jour et effacer"
+
+#: index.docbook:348
+msgid "Parameters"
+msgstr "Hibernate3 peut utiliser des expression SQL personnalisées pour des opérations de création, de mise à jour, et de suppression. Les objets persistants les classes et les collections dans Hibernate contiennent déjà un ensemble de chaînes de caractères générées lors de la configuration (insertsql, deletesql, updatesql, etc). Les tages de mapping <literal><sql-insert></literal>, <literal><sql-delete></literal>, et <literal><sql-update></literal> surchargent ces chaînes de caractères :"
+
+#: index.docbook:350
+msgid "Native sql queries support positional as well as named parameters:"
+msgstr ""
+ "<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>\n"
+ " <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>\n"
+ " <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>\n"
+ "</class>"
+
+#: index.docbook:353
+msgid ""
+ "<![CDATA[Query query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like ?\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(0, \"Pus%\").list();\n"
+ " \n"
+ "query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like :name\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(\"name\", \"Pus%\").list(); ]]>"
+msgstr "Le SQL est directement exécuté dans votre base de données, donc vous êtes libre d'utiliser le dialecte que vous souhaitez. Cela réduira bien sûr la portabilité de votre mapping si vous utilisez du SQL spécifique à votre base de données."
+
+#: index.docbook:361
+msgid "Named SQL queries"
+msgstr "Les procédures stockées sont supportées si l'attribut <literal>callable</literal> est paramétré :"
+
+#: index.docbook:363
+msgid "Named SQL queries may be defined in the mapping document and called in exactly the same way as a named HQL query. In this case, we do <emphasis>not</emphasis> need to call <literal>addEntity()</literal>."
+msgstr ""
+ "<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert callable=\"true\">{call createPerson (?, ?)}</sql-insert>\n"
+ " <sql-delete callable=\"true\">{? = call deletePerson (?)}</sql-delete>\n"
+ " <sql-update callable=\"true\">{? = call updatePerson (?, ?)}</sql-update>\n"
+ "</class>"
+
+#: index.docbook:368
+msgid ""
+ "<![CDATA[<sql-query name=\"persons\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex}\n"
+ " FROM PERSON person\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr "L'ordre des paramètres positionnels est actuellement vital, car ils doivent être dans la même séquence qu'Hibernate les attend."
+
+#: index.docbook:370
+msgid ""
+ "<![CDATA[List people = sess.getNamedQuery(\"persons\")\n"
+ " .setString(\"namePattern\", namePattern)\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr "Vous pouvez voir l'ordre attendu en activant les journaux de debug pour le niveau <literal>org.hibernate.persister.entity</literal> level. Avec ce niveau activé, Hibernate imprimera le SQL statique qui est utilisé pour créer, mettre à jour, supprimer, etc. des entités. (Pour voir la séquence attendue, rappelez-vous de ne pas inclure votre SQL personnalisé dans les fichiers de mapping de manière à surcharger le SQL statique généré par Hibernate.)"
+
+#: index.docbook:372
+msgid "The <literal><return-join></literal> and <literal><load-collection></literal> elements are used to join associations and define queries which initialize collections, respectively."
+msgstr "Les procédures stockées sont dans la plupart des cas (lire : il vaut mieux le faire) requises pour retourner le nombre de lignes insérées/mises à jour/supprimées, puisque Hibernate fait quelques vérifications de succès lors de l'exécution de l'expression. Hibernate inscrit toujours la première expression comme un paramètre de sortie numérique pour les opérations CUD :"
+
+#: index.docbook:377
+msgid ""
+ "<![CDATA[<sql-query name=\"personsWith\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+ "CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)\n"
+ " RETURN NUMBER IS\n"
+ "BEGIN\n"
+ "\n"
+ " update PERSON\n"
+ " set\n"
+ " NAME = uname,\n"
+ " where\n"
+ " ID = uid;\n"
+ "\n"
+ " return SQL%ROWCOUNT;\n"
+ "\n"
+ "END updatePerson;"
+
+#: index.docbook:379
+msgid "A named SQL query may return a scalar value. You must declare the column alias and Hibernate type using the <literal><return-scalar></literal> element:"
+msgstr "SQL personnalisé pour le chargement"
+
+#: index.docbook:383
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return-scalar column=\"name\" type=\"string\"/>\n"
+ " <return-scalar column=\"age\" type=\"long\"/>\n"
+ " SELECT p.NAME AS name,\n"
+ " p.AGE AS age,\n"
+ " FROM PERSON p WHERE p.NAME LIKE 'Hiber%'\n"
+ "</sql-query>]]>"
+msgstr "Vous pouvez aussi déclarer vos propres requêtes SQL (ou HQL) pour le chargement d'entité :"
+
+#: index.docbook:385
+msgid "You can externalize the resultset mapping informations in a <literal><resultset></literal> element to either reuse them accross several named queries or through the <literal>setResultSetMapping()</literal> API."
+msgstr ""
+ "<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\" lock-mode=\"upgrade\"/>\n"
+ " SELECT NAME AS {pers.name}, ID AS {pers.id}\n"
+ " FROM PERSON\n"
+ " WHERE ID=?\n"
+ " FOR UPDATE\n"
+ "</sql-query>"
+
+#: index.docbook:390
+msgid ""
+ "<![CDATA[<resultset name=\"personAddress\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ "</resultset>\n"
+ "\n"
+ "<sql-query name=\"personsWith\" resultset-ref=\"personAddress\">\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr "Ceci est juste une déclaration de requête nommée, comme vu plus tôt. Vous pouvez référencer cette requête nommée dans un mapping de classe :"
+
+#: index.docbook:392
+msgid "You can alternatively use the resultset mapping information in your hbm files directly in java code."
+msgstr ""
+ "<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <loader query-ref=\"person\"/>\n"
+ "</class>"
+
+#: index.docbook:395
+msgid ""
+ "<![CDATA[List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .setResultSetMapping(\"catAndKitten\")\n"
+ " .list();]]>"
+msgstr "Ceci fonctionne même avec des procédures stockées."
+
+#: index.docbook:398
+msgid "Using return-property to explicitly specify column/alias names"
+msgstr "Vous pouvez même définir une requête pour le chargement d'une collection :"
+
+#: index.docbook:401
+msgid "With <literal><return-property></literal> you can explicitly tell Hibernate what column aliases to use, instead of using the <literal>{}</literal>-syntax to let Hibernate inject its own aliases."
+msgstr ""
+ "<set name=\"employments\" inverse=\"true\">\n"
+ " <key/>\n"
+ " <one-to-many class=\"Employment\"/>\n"
+ " <loader query-ref=\"employments\"/>\n"
+ "</set>"
+
+#: index.docbook:406
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return alias=\"person\" class=\"eg.Person\">\n"
+ " <return-property name=\"name\" column=\"myName\"/>\n"
+ " <return-property name=\"age\" column=\"myAge\"/>\n"
+ " <return-property name=\"sex\" column=\"mySex\"/>\n"
+ " </return>\n"
+ " SELECT person.NAME AS myName,\n"
+ " person.AGE AS myAge,\n"
+ " person.SEX AS mySex,\n"
+ " FROM PERSON person WHERE person.NAME LIKE :name\n"
+ "</sql-query>\n"
+ "]]>"
+msgstr ""
+ "<sql-query name=\"employments\">\n"
+ " <load-collection alias=\"emp\" role=\"Person.employments\"/>\n"
+ " SELECT {emp.*}\n"
+ " FROM EMPLOYMENT emp\n"
+ " WHERE EMPLOYER = :id\n"
+ " ORDER BY STARTDATE ASC, EMPLOYEE ASC\n"
+ "</sql-query>"
+
+#: index.docbook:408
+msgid "<literal><return-property></literal> also works with multiple columns. This solves a limitation with the <literal>{}</literal>-syntax which can not allow fine grained control of multi-column properties."
+msgstr "Vous pourriez même définir un chargeur d'entité qui charge une collection par jointure :"
+
+#: index.docbook:413
+msgid ""
+ "<![CDATA[<sql-query name=\"organizationCurrentEmployments\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " <return-property name=\"endDate\" column=\"myEndDate\"/>\n"
+ " </return>\n"
+ " SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},\n"
+ " STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},\n"
+ " REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT\n"
+ " WHERE EMPLOYER = :id AND ENDDATE IS NULL\n"
+ " ORDER BY STARTDATE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\"/>\n"
+ " <return-join alias=\"emp\" property=\"pers.employments\"/>\n"
+ " SELECT NAME AS {pers.*}, {emp.*}\n"
+ " FROM PERSON pers\n"
+ " LEFT OUTER JOIN EMPLOYMENT emp\n"
+ " ON pers.ID = emp.PERSON_ID\n"
+ " WHERE ID=?\n"
+ "</sql-query>"
+
+#: index.docbook:415
+msgid "Notice that in this example we used <literal><return-property></literal> in combination with the <literal>{}</literal>-syntax for injection. Allowing users to choose how they want to refer column and properties."
+msgstr ""
+
+#: index.docbook:420
+msgid "If your mapping has a discriminator you must use <literal><return-discriminator></literal> to specify the discriminator column."
+msgstr ""
+
+#: index.docbook:426
+msgid "Using stored procedures for querying"
+msgstr ""
+
+#: index.docbook:428
+msgid "Hibernate 3 introduces support for queries via stored procedures and functions. Most of the following documentation is equivalent for both. The stored procedure/function must return a resultset as the first out-parameter to be able to work with Hibernate. An example of such a stored function in Oracle 9 and higher is as follows:"
+msgstr ""
+
+#: index.docbook:434
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION selectAllEmployments\n"
+ " RETURN SYS_REFCURSOR\n"
+ "AS\n"
+ " st_cursor SYS_REFCURSOR;\n"
+ "BEGIN\n"
+ " OPEN st_cursor FOR\n"
+ " SELECT EMPLOYEE, EMPLOYER,\n"
+ " STARTDATE, ENDDATE,\n"
+ " REGIONCODE, EID, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT;\n"
+ " RETURN st_cursor;\n"
+ " END;]]>"
+msgstr ""
+
+#: index.docbook:436
+msgid "To use this query in Hibernate you need to map it via a named query."
+msgstr ""
+
+#: index.docbook:439
+msgid ""
+ "<![CDATA[<sql-query name=\"selectAllEmployees_SP\" callable=\"true\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"employee\" column=\"EMPLOYEE\"/>\n"
+ " <return-property name=\"employer\" column=\"EMPLOYER\"/>\n"
+ " <return-property name=\"startDate\" column=\"STARTDATE\"/>\n"
+ " <return-property name=\"endDate\" column=\"ENDDATE\"/>\n"
+ " <return-property name=\"regionCode\" column=\"REGIONCODE\"/>\n"
+ " <return-property name=\"id\" column=\"EID\"/>\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " </return>\n"
+ " { ? = call selectAllEmployments() }\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:441
+msgid "Notice stored procedures currently only return scalars and entities. <literal><return-join></literal> and <literal><load-collection></literal> are not supported."
+msgstr ""
+
+#: index.docbook:446
+msgid "Rules/limitations for using stored procedures"
+msgstr ""
+
+#: index.docbook:448
+msgid "To use stored procedures with Hibernate the procedures/functions have to follow some rules. If they do not follow those rules they are not usable with Hibernate. If you still want to use these procedures you have to execute them via <literal>session.connection()</literal>. The rules are different for each database, since database vendors have different stored procedure semantics/syntax."
+msgstr ""
+
+#: index.docbook:455
+msgid "Stored procedure queries can't be paged with <literal>setFirstResult()/setMaxResults()</literal>."
+msgstr ""
+
+#: index.docbook:458
+msgid "Recommended call form is standard SQL92: <literal>{ ? = call functionName(<parameters>) }</literal> or <literal>{ ? = call procedureName(<parameters>}</literal>. Native call syntax is not supported."
+msgstr ""
+
+#: index.docbook:463
+msgid "For Oracle the following rules apply:"
+msgstr ""
+
+#: index.docbook:467
+msgid "A function must return a result set. The first parameter of a procedure must be an <literal>OUT</literal> that returns a result set. This is done by using a <literal>SYS_REFCURSOR</literal> type in Oracle 9 or 10. In Oracle you need to define a <literal>REF CURSOR</literal> type, see Oracle literature."
+msgstr ""
+
+#: index.docbook:476
+msgid "For Sybase or MS SQL server the following rules apply:"
+msgstr ""
+
+#: index.docbook:480
+msgid "The procedure must return a result set. Note that since these servers can/will return multiple result sets and update counts, Hibernate will iterate the results and take the first result that is a result set as its return value. Everything else will be discarded."
+msgstr ""
+
+#: index.docbook:488
+msgid "If you can enable <literal>SET NOCOUNT ON</literal> in your procedure it will probably be more efficient, but this is not a requirement."
+msgstr ""
+
+#: index.docbook:498
+msgid "Custom SQL for create, update and delete"
+msgstr ""
+
+#: index.docbook:500
+msgid "Hibernate3 can use custom SQL statements for create, update, and delete operations. The class and collection persisters in Hibernate already contain a set of configuration time generated strings (insertsql, deletesql, updatesql etc.). The mapping tags <literal><sql-insert></literal>, <literal><sql-delete></literal>, and <literal><sql-update></literal> override these strings:"
+msgstr ""
+
+#: index.docbook:508
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>\n"
+ " <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>\n"
+ " <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:510
+msgid "The SQL is directly executed in your database, so you are free to use any dialect you like. This will of course reduce the portability of your mapping if you use database specific SQL."
+msgstr ""
+
+#: index.docbook:514
+msgid "Stored procedures are supported if the <literal>callable</literal> attribute is set:"
+msgstr ""
+
+#: index.docbook:517
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert callable=\"true\">{call createPerson (?, ?)}</sql-insert>\n"
+ " <sql-delete callable=\"true\">{? = call deletePerson (?)}</sql-delete>\n"
+ " <sql-update callable=\"true\">{? = call updatePerson (?, ?)}</sql-update>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:519
+msgid "The order of the positional parameters are currently vital, as they must be in the same sequence as Hibernate expects them."
+msgstr ""
+
+#: index.docbook:522
+msgid "You can see the expected order by enabling debug logging for the <literal>org.hibernate.persister.entity</literal> level. With this level enabled Hibernate will print out the static SQL that is used to create, update, delete etc. entities. (To see the expected sequence, remember to not include your custom SQL in the mapping files as that will override the Hibernate generated static sql.)"
+msgstr ""
+
+#: index.docbook:529
+msgid "The stored procedures are in most cases (read: better do it than not) required to return the number of rows inserted/updated/deleted, as Hibernate has some runtime checks for the success of the statement. Hibernate always registers the first statement parameter as a numeric output parameter for the CUD operations:"
+msgstr ""
+
+#: index.docbook:535
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)\n"
+ " RETURN NUMBER IS\n"
+ "BEGIN\n"
+ "\n"
+ " update PERSON\n"
+ " set\n"
+ " NAME = uname,\n"
+ " where\n"
+ " ID = uid;\n"
+ "\n"
+ " return SQL%ROWCOUNT;\n"
+ "\n"
+ "END updatePerson;]]>"
+msgstr ""
+
+#: index.docbook:539
+msgid "Custom SQL for loading"
+msgstr ""
+
+#: index.docbook:541
+msgid "You may also declare your own SQL (or HQL) queries for entity loading:"
+msgstr ""
+
+#: index.docbook:544
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\" lock-mode=\"upgrade\"/>\n"
+ " SELECT NAME AS {pers.name}, ID AS {pers.id}\n"
+ " FROM PERSON\n"
+ " WHERE ID=?\n"
+ " FOR UPDATE\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:546
+msgid "This is just a named query declaration, as discussed earlier. You may reference this named query in a class mapping:"
+msgstr ""
+
+#: index.docbook:549
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <loader query-ref=\"person\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:551
+msgid "This even works with stored procedures."
+msgstr ""
+
+#: index.docbook:553
+msgid "You may even define a query for collection loading:"
+msgstr ""
+
+#: index.docbook:555
+msgid ""
+ "<![CDATA[<set name=\"employments\" inverse=\"true\">\n"
+ " <key/>\n"
+ " <one-to-many class=\"Employment\"/>\n"
+ " <loader query-ref=\"employments\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:557
+msgid ""
+ "<![CDATA[<sql-query name=\"employments\">\n"
+ " <load-collection alias=\"emp\" role=\"Person.employments\"/>\n"
+ " SELECT {emp.*}\n"
+ " FROM EMPLOYMENT emp\n"
+ " WHERE EMPLOYER = :id\n"
+ " ORDER BY STARTDATE ASC, EMPLOYEE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:559
+msgid "You could even define an entity loader that loads a collection by join fetching:"
+msgstr ""
+
+#: index.docbook:562
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\"/>\n"
+ " <return-join alias=\"emp\" property=\"pers.employments\"/>\n"
+ " SELECT NAME AS {pers.*}, {emp.*}\n"
+ " FROM PERSON pers\n"
+ " LEFT OUTER JOIN EMPLOYMENT emp\n"
+ " ON pers.ID = emp.PERSON_ID\n"
+ " WHERE ID=?\n"
+ "</sql-query>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/quickstart.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/quickstart.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/quickstart.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,12 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/session_api.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/session_api.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/session_api.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1220 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Working with objects"
+msgstr "Travailler avec des objets"
+
+#: index.docbook:7
+msgid "Hibernate is a full object/relational mapping solution that not only shields the developer from the details of the underlying database management system, but also offers <emphasis>state management</emphasis> of objects. This is, contrary to the management of SQL <literal>statements</literal> in common JDBC/SQL persistence layers, a very natural object-oriented view of persistence in Java applications."
+msgstr "Hibernate est une solution de mapping objet/relationnel complète qui ne masque pas seulement au développpeur les détails du système de gestion de base de données sous-jacent, mais offre aussi <emphasis>la gestion d'état</emphasis> des objets. C'est, contrairement à la gestion de <literal>statements</literal> SQL dans les couches de persistance habituelles JDBC/SQL, une vue orientée objet très naturelle de la persistance dans les applications Java."
+
+#: index.docbook:16
+msgid "In other words, Hibernate application developers should always think about the <emphasis>state</emphasis> of their objects, and not necessarily about the execution of SQL statements. This part is taken care of by Hibernate and is only relevant for the application developer when tuning the performance of the system."
+msgstr "En d'autres mots, les développeurs d'applications Hibernate devrait toujours réfléchir à <emphasis>l'état</emphasis> de leurs objets, et pas nécessairement à l'exécution des expressions SQL. Cette part est prise en charge pas Hibernate et seulement importante pour les développeurs d'applications lors du réglage de la performance de leur système."
+
+#: index.docbook:24
+msgid "Hibernate object states"
+msgstr "Ãtats des objets Hibernate"
+
+#: index.docbook:26
+msgid "Hibernate defines and supports the following object states:"
+msgstr "Hibernate définit et comprend les états suivants :"
+
+#: index.docbook:32
+msgid "<emphasis>Transient</emphasis> - an object is transient if it has just been instantiated using the <literal>new</literal> operator, and it is not associated with a Hibernate <literal>Session</literal>. It has no persistent representation in the database and no identifier value has been assigned. Transient instances will be destroyed by the garbage collector if the application doesn't hold a reference anymore. Use the Hibernate <literal>Session</literal> to make an object persistent (and let Hibernate take care of the SQL statements that need to be executed for this transition)."
+msgstr "<emphasis>Ãphémère</emphasis> (NdT : transient) - un objet est éphémère s'il a juste été instancié en utilisant l'opérateur <literal>new</literal>. Il n'a aucune représentation persistante dans la base de données et aucune valeur d'identifiant n'a été assignée. Les instances éphémères seront détruites par le ramasse-miettes si l'application n'en conserve aucune référence. Utilisez la <literal>Session</literal> d'Hibernate pour rendre un objet persistant (et laisser Hibernate s'occuper des expressions SQL qui ont besoin d'être exécutées pour cette transistion)."
+
+#: index.docbook:44
+msgid "<emphasis>Persistent</emphasis> - a persistent instance has a representation in the database and an identifier value. It might just have been saved or loaded, however, it is by definition in the scope of a <literal>Session</literal>. Hibernate will detect any changes made to an object in persistent state and synchronize the state with the database when the unit of work completes. Developers don't execute manual <literal>UPDATE</literal> statements, or <literal>DELETE</literal> statements when an object should be made transient."
+msgstr "<emphasis>Persistant</emphasis> - une instance persistante a une représentation dans la base de données et une valeur d'identifiant. Elle pourrait avoir juste été sauvegardée ou chargée, pourtant, elle est par définition dans la portée d'une <literal>Session</literal>. Hibernate détectera n'importe quels changements effectués sur un objet dans l'état persistant et synchronisera l'état avec la base de données lors de la fin l'unité de travail. Les développeurs n'exécutent pas d'expressions <literal>UPDATE</literal> ou <literal>DELETE</literal> manuelles lorsqu'un objet devrait être rendu éphémère."
+
+#: index.docbook:55
+msgid "<emphasis>Detached</emphasis> - a detached instance is an object that has been persistent, but its <literal>Session</literal> has been closed. The reference to the object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be reattached to a new <literal>Session</literal> at a later point in time, making it (and all the modifications) persistent again. This feature enables a programming model for long running units of work that require user think-time. We call them <emphasis>application transactions</emphasis>, i.e. a unit of work from the point of view of the user."
+msgstr "<emphasis>Détaché</emphasis> - une instance détachée est un objet qui a été persistant, mais dont sa <literal>Session</literal> a été fermée. La référence à l'objet est encore valide, bien sûr, et l'instance détachée pourrait même être modifiée dans cet état. Une instance détachée peut être réattachée à une nouvelle <literal>Session</literal> plus tard dans le temps, la rendant (et toutes les modifications avec) de nouveau persistante. Cette fonctionnalité rend possible un modèle de programmation pour de longues unités de travail qui requièrent un temps de réflexion de l'utilisateur. Nous les appelons des <emphasis>conversations</emphasis>, c'est-à -dire une unité de travail du point de vue de l'utilisateur."
+
+#: index.docbook:69
+msgid "We'll now discuss the states and state transitions (and the Hibernate methods that trigger a transition) in more detail."
+msgstr "Nous alons maintenant dicuster des états et des transitions d'état (et des méthodes d'Hibernate qui déclenchent une transition) plus en détails."
+
+#: index.docbook:77
+msgid "Making objects persistent"
+msgstr "Rendre des objets persistants"
+
+#: index.docbook:79
+msgid "Newly instantiated instances of a a persistent class are considered <emphasis>transient</emphasis> by Hibernate. We can make a transient instance <emphasis>persistent</emphasis> by associating it with a session:"
+msgstr "Les instances nouvellement instanciées d'une classe persistante sont considérées <emphasis>éphémères</emphasis> par Hibernate. Nous pouvons rendre une instance éphémère <emphasis>persistante</emphasis> en l'associant avec une session :"
+
+#: index.docbook:86
+msgid ""
+ "<![CDATA[DomesticCat fritz = new DomesticCat();\n"
+ "fritz.setColor(Color.GINGER);\n"
+ "fritz.setSex('M');\n"
+ "fritz.setName(\"Fritz\");\n"
+ "Long generatedId = (Long) sess.save(fritz);]]>"
+msgstr ""
+ "<![CDATA[DomesticCat fritz = new DomesticCat();\n"
+ "fritz.setColor(Color.GINGER);\n"
+ "fritz.setSex('M');\n"
+ "fritz.setName(\"Fritz\");\n"
+ "Long generatedId = (Long) sess.save(fritz);]]>"
+
+#: index.docbook:88
+msgid "If <literal>Cat</literal> has a generated identifier, the identifier is generated and assigned to the <literal>cat</literal> when <literal>save()</literal> is called. If <literal>Cat</literal> has an <literal>assigned</literal> identifier, or a composite key, the identifier should be assigned to the <literal>cat</literal> instance before calling <literal>save()</literal>. You may also use <literal>persist()</literal> instead of <literal>save()</literal>, with the semantics defined in the EJB3 early draft."
+msgstr "Si <literal>Cat</literal> a un identifiant généré, l'identifiant est généré et assigné au <literal>cat</literal> lorsque <literal>save()</literal> est appelée. Si <literal>Cat</literal> a un identifiant <literal>assigned</literal>, ou une clef composée, l'identifiant devrait être assigné à l'instance de <literal>cat</literal> avant d'appeler <literal>save()</literal>. Vous pouvez aussi utiliser <literal>persist()</literal> à la place de<literal>save()</literal>, avec la sémantique définie plus tôt dans le brouillon d'EJB3."
+
+#: index.docbook:100
+msgid "<literal>persist()</literal> makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. <literal>persist()</literal> also guarantees that it will not execute an <literal>INSERT</literal> statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context."
+msgstr "Alternativement, vous pouvez assigner l'identifiant en utilisant une version surchargée de <literal>save()</literal>."
+
+#: index.docbook:111
+msgid "<literal>save()</literal> does guarantee to return an identifier. If an INSERT has to be executed to get the identifier ( e.g. \"identity\" generator, not \"sequence\"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is problematic in a long-running conversation with an extended Session/persistence context."
+msgstr ""
+ "<![CDATA[DomesticCat pk = new DomesticCat();\n"
+ "pk.setColor(Color.TABBY);\n"
+ "pk.setSex('F');\n"
+ "pk.setName(\"PK\");\n"
+ "pk.setKittens( new HashSet() );\n"
+ "pk.addKitten(fritz);\n"
+ "sess.save( pk, new Long(1234) );]]>"
+
+#: index.docbook:121
+msgid "Alternatively, you may assign the identifier using an overloaded version of <literal>save()</literal>."
+msgstr "Si l'objet que vous rendez persistant a des objets associés (par exemple, la collection <literal>kittens</literal> dans l'exemple précédent), ces objets peuvent être rendus persistants dans n'importe quel ordre que vous souhaitez à moins que vous ayez une contrainte <literal>NOT NULL</literal> sur la colonne de la clef étrangère. Il n'y a jamais de risque de violer une contrainte de clef étrangère. Cependant, vous pourriez violer une contrainte <literal>NOT NULL</literal> si vous appeliez <literal>save()</literal> sur les objets dans le mauvais ordre."
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[DomesticCat pk = new DomesticCat();\n"
+ "pk.setColor(Color.TABBY);\n"
+ "pk.setSex('F');\n"
+ "pk.setName(\"PK\");\n"
+ "pk.setKittens( new HashSet() );\n"
+ "pk.addKitten(fritz);\n"
+ "sess.save( pk, new Long(1234) );]]>"
+msgstr "Habituellement, vous ne vous préoccupez pas de ce détail, puisque vous utiliserez très probablement la fonctionnalité de <emphasis>persistance transitive</emphasis> d'Hibernate pour sauvegarder les objets associés automatiquement. Alors, même les violations de contrainte <literal>NOT NULL</literal> n'ont plus lieu - Hibernate prendra soin de tout. La persistance transitive est traitée plus loin dans ce chapitre."
+
+#: index.docbook:128
+msgid "If the object you make persistent has associated objects (e.g. the <literal>kittens</literal> collection in the previous example), these objects may be made persistent in any order you like unless you have a <literal>NOT NULL</literal> constraint upon a foreign key column. There is never a risk of violating foreign key constraints. However, you might violate a <literal>NOT NULL</literal> constraint if you <literal>save()</literal> the objects in the wrong order."
+msgstr "Chargement d'un objet"
+
+#: index.docbook:138
+msgid "Usually you don't bother with this detail, as you'll very likely use Hibernate's <emphasis>transitive persistence</emphasis> feature to save the associated objects automatically. Then, even <literal>NOT NULL</literal> constraint violations don't occur - Hibernate will take care of everything. Transitive persistence is discussed later in this chapter."
+msgstr "Les méthodes <literal>load()</literal> de <literal>Session</literal> vous donnent un moyen de récupérer une instance persistante si vous connaissez déjà son identifiant. <literal>load()</literal> prend un objet de classe et chargera l'état dans une instance nouvellement instanciée de cette classe, dans un état persistant."
+
+#: index.docbook:149
+msgid "Loading an object"
+msgstr "<![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]>"
+
+#: index.docbook:151
+msgid "The <literal>load()</literal> methods of <literal>Session</literal> gives you a way to retrieve a persistent instance if you already know its identifier. <literal>load()</literal> takes a class object and will load the state into a newly instantiated instance of that class, in persistent state."
+msgstr ""
+ "<![CDATA[// vous avez besoin d'envelopper les identiants primitifs\n"
+ "long pkId = 1234;\n"
+ "DomesticCat pk = (DomesticCat) sess.load( Cat.class, new Long(pkId) );]]>"
+
+#: index.docbook:158
+msgid "<![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]>"
+msgstr "Alternativement, vous pouvez charger un état dans une instance donnée :"
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[// you need to wrap primitive identifiers\n"
+ "long id = 1234;\n"
+ "DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "// load pk's state into cat\n"
+ "sess.load( cat, new Long(pkId) );\n"
+ "Set kittens = cat.getKittens();]]>"
+
+#: index.docbook:162
+msgid "Alternatively, you can load state into a given instance:"
+msgstr "Notez que <literal>load()</literal> lèvera une exception irrécupérable s'il n'y a pas de ligne correspondante dans la base de données. Si la classe est mappée avec un proxy, <literal>load()</literal> retourne juste un proxy non initialisé et n'accède en fait pas à la base de données jusqu'à ce que vous invoquiez une méthode du proxy. Ce comportement est très utile si vous souhaitez créer une association vers un objet sans réellement le charger à partir de la base de données. Cela permet aussi à de multiples instances d'être chargées comme un lot si <literal>batch-size</literal> est défini pour le mapping de la classe."
+
+#: index.docbook:166
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "// load pk's state into cat\n"
+ "sess.load( cat, new Long(pkId) );\n"
+ "Set kittens = cat.getKittens();]]>"
+msgstr "Si vous n'êtes pas certain qu'une ligne correspondante existe, vous devriez utiliser la méthode <literal>get()</literal>, laquelle accède à la base de données immédiatement et retourne null s'il n'y a pas de ligne correspondante."
+
+#: index.docbook:168
+msgid "Note that <literal>load()</literal> will throw an unrecoverable exception if there is no matching database row. If the class is mapped with a proxy, <literal>load()</literal> just returns an uninitialized proxy and does not actually hit the database until you invoke a method of the proxy. This behaviour is very useful if you wish to create an association to an object without actually loading it from the database. It also allows multiple instances to be loaded as a batch if <literal>batch-size</literal> is defined for the class mapping."
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);\n"
+ "if (cat==null) {\n"
+ " cat = new Cat();\n"
+ " sess.save(cat, id);\n"
+ "}\n"
+ "return cat;]]>"
+
+#: index.docbook:179
+msgid "If you are not certain that a matching row exists, you should use the <literal>get()</literal> method, which hits the database immediately and returns null if there is no matching row."
+msgstr "Vous pouvez même charger un objet en employant un <literal>SELECT ... FOR UPDATE</literal> SQL, en utilisant un <literal>LockMode</literal>. Voir la documentation de l'API pour plus d'informations."
+
+#: index.docbook:185
+msgid ""
+ "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);\n"
+ "if (cat==null) {\n"
+ " cat = new Cat();\n"
+ " sess.save(cat, id);\n"
+ "}\n"
+ "return cat;]]>"
+msgstr "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]>"
+
+#: index.docbook:187
+msgid "You may even load an object using an SQL <literal>SELECT ... FOR UPDATE</literal>, using a <literal>LockMode</literal>. See the API documentation for more information."
+msgstr "Notez que n'importe quelles instances associées ou collections contenues <emphasis>ne sont pas</emphasis> sélectionnées par <literal>FOR UPDATE</literal>, à moins que vous ne décidiez de spécifier <literal>lock</literal> ou <literal>all</literal> en tant que style de cascade pour l'association."
+
+#: index.docbook:192
+msgid "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]>"
+msgstr "Il est possible de re-charger un objet et toutes ses collections à n'importe quel moment, en utilisant la méthode <literal>refresh()</literal>. C'est utile lorsque des \"triggers\" de base de données sont utilisés pour initiliser certains propriétés de l'objet."
+
+#: index.docbook:194
+msgid "Note that any associated instances or contained collections are <emphasis>not</emphasis> selected <literal>FOR UPDATE</literal>, unless you decide to specify <literal>lock</literal> or <literal>all</literal> as a cascade style for the association."
+msgstr ""
+ "<![CDATA[sess.save(cat);\n"
+ "sess.flush(); //force the SQL INSERT\n"
+ "sess.refresh(cat); //re-read the state (after the trigger executes)]]>"
+
+#: index.docbook:201
+msgid "It is possible to re-load an object and all its collections at any time, using the <literal>refresh()</literal> method. This is useful when database triggers are used to initialize some of the properties of the object."
+msgstr "Une question importante apparaît généralement à ce point : combien (NdT : de données) Hibernate charge-t-il de la base de données et combient de <literal>SELECT</literal>s utilisera-t-il ? Cela dépent de la <emphasis>stratégie de récupération</emphasis> et cela est expliqué dans <xref linkend=\"performance-fetching\"/>."
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[sess.save(cat);\n"
+ "sess.flush(); //force the SQL INSERT\n"
+ "sess.refresh(cat); //re-read the state (after the trigger executes)]]>"
+msgstr "Requêtage"
+
+#: index.docbook:209
+msgid "An important question usually appears at this point: How much does Hibernate load from the database and how many SQL <literal>SELECT</literal>s will it use? This depends on the <emphasis>fetching strategy</emphasis> and is explained in <xref linkend=\"performance-fetching\"/>."
+msgstr "Si vous ne connaissez par les identifiants des objets que vous recherchez, vous avez besoin d'une requête. Hibernate supporte un langage de requêtes orientées objet facile à utiliser mais puissant. Pour la création de requêtes par programmation, Hibernate supporte une fonction de requêtage sophistiqué Criteria et Example (QBC et QBE). Vous pouvez aussi exprimez votre requête dans le SQL natif de votre base de données, avec un support optionnel d'Hibernate pour la conversion des ensembles de résultats en objets."
+
+#: index.docbook:219
+msgid "Querying"
+msgstr "Exécution de requêtes"
+
+#: index.docbook:221
+msgid "If you don't know the identifiers of the objects you are looking for, you need a query. Hibernate supports an easy-to-use but powerful object oriented query language (HQL). For programmatic query creation, Hibernate supports a sophisticated Criteria and Example query feature (QBC and QBE). You may also express your query in the native SQL of your database, with optional support from Hibernate for result set conversion into objects."
+msgstr "Les requêtes HQL et SQL natives sont représentées avec une instance de <literal>org.hibernate.Query</literal>. L'interface offre des méthodes pour la liaison des paramètres, la gestion des ensembles de resultats, et pour l'exécution de la requête réelle. Vous obtenez toujours une <literal>Query</literal> en utilisant la <literal>Session</literal> courante :"
+
+#: index.docbook:231
+msgid "Executing queries"
+msgstr ""
+ "<![CDATA[List cats = session.createQuery(\n"
+ " \"from Cat as cat where cat.birthdate < ?\")\n"
+ " .setDate(0, date)\n"
+ " .list();\n"
+ "\n"
+ "List mothers = session.createQuery(\n"
+ " \"select mother from Cat as cat join cat.mother as mother where cat.name = ?\")\n"
+ " .setString(0, name)\n"
+ " .list();\n"
+ "\n"
+ "List kittens = session.createQuery(\n"
+ " \"from Cat as cat where cat.mother = ?\")\n"
+ " .setEntity(0, pk)\n"
+ " .list();\n"
+ "\n"
+ "Cat mother = (Cat) session.createQuery(\n"
+ " \"select cat.mother from Cat as cat where cat = ?\")\n"
+ " .setEntity(0, izi)\n"
+ " .uniqueResult();]]>"
+
+#: index.docbook:233
+msgid "HQL and native SQL queries are represented with an instance of <literal>org.hibernate.Query</literal>. This interface offers methods for parameter binding, result set handling, and for the execution of the actual query. You always obtain a <literal>Query</literal> using the current <literal>Session</literal>:"
+msgstr "Une requête est généralement exécutée en invoquant <literal>list()</literal>, le résultat de la requête sera chargée complètement dans une collection en mémoire. Les intances d'entités recupérées par une requête sont dans un état persistant. La méthode <literal>uniqueResult()</literal> offre un raccourci si vous savez que votre requête retournera seulement un seul objet."
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[List cats = session.createQuery(\n"
+ " \"from Cat as cat where cat.birthdate < ?\")\n"
+ " .setDate(0, date)\n"
+ " .list();\n"
+ "\n"
+ "List mothers = session.createQuery(\n"
+ " \"select mother from Cat as cat join cat.mother as mother where cat.name = ?\")\n"
+ " .setString(0, name)\n"
+ " .list();\n"
+ "\n"
+ "List kittens = session.createQuery(\n"
+ " \"from Cat as cat where cat.mother = ?\")\n"
+ " .setEntity(0, pk)\n"
+ " .list();\n"
+ "\n"
+ "Cat mother = (Cat) session.createQuery(\n"
+ " \"select cat.mother from Cat as cat where cat = ?\")\n"
+ " .setEntity(0, izi)\n"
+ " .uniqueResult();]]\n"
+ "\n"
+ "Query mothersWithKittens = (Cat) session.createQuery(\n"
+ " \"select mother from Cat as mother left join fetch mother.kittens\");\n"
+ "Set uniqueMothers = new HashSet(mothersWithKittens.list());]]>"
+msgstr "Itération de résultats"
+
+#: index.docbook:242
+msgid "A query is usually executed by invoking <literal>list()</literal>, the result of the query will be loaded completely into a collection in memory. Entity instances retrieved by a query are in persistent state. The <literal>uniqueResult()</literal> method offers a shortcut if you know your query will only return a single object. Note that queries that make use of eager fetching of collections usually return duplicates of the root objects (but with their collections initialized). You can filter these duplicates simply through a <literal>Set</literal>."
+msgstr "Occasionnellement, vous pourriez être capable d'obtenir de meilleures performances en exécutant la requête avec la méthode <literal>iterate()</literal>. Ce sera généralement seulement le cas si vous espérez que les intances réelles d'entité retournées par la requête soient déjà chargées dans la session ou le cache de second niveau. Si elles ne sont pas cachées, <literal>iterate()</literal> sera plus lent que <literal>list()</literal> et pourrait nécessiter plusieurs accès à la base de données pour une simple requête, généralement <emphasis>1</emphasis> pour le select initial qui retourne seulement les identifiants, et <emphasis>n</emphasis> selects supplémentaires pour initialiser les instances réelles."
+
+#: index.docbook:254
+msgid "Iterating results"
+msgstr ""
+ "<![CDATA[// fetch ids\n"
+ "Iterator iter = sess.createQuery(\"from eg.Qux q order by q.likeliness\").iterate();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Qux qux = (Qux) iter.next(); // fetch the object\n"
+ " // something we couldnt express in the query\n"
+ " if ( qux.calculateComplicatedAlgorithm() ) {\n"
+ " // delete the current instance\n"
+ " iter.remove();\n"
+ " // dont need to process the rest\n"
+ " break;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:256
+msgid "Occasionally, you might be able to achieve better performance by executing the query using the <literal>iterate()</literal> method. This will only usually be the case if you expect that the actual entity instances returned by the query will already be in the session or second-level cache. If they are not already cached, <literal>iterate()</literal> will be slower than <literal>list()</literal> and might require many database hits for a simple query, usually <emphasis>1</emphasis> for the initial select which only returns identifiers, and <emphasis>n</emphasis> additional selects to initialize the actual instances."
+msgstr "Requêtes qui retournent des tuples"
+
+#: index.docbook:268
+msgid ""
+ "<![CDATA[// fetch ids\n"
+ "Iterator iter = sess.createQuery(\"from eg.Qux q order by q.likeliness\").iterate();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Qux qux = (Qux) iter.next(); // fetch the object\n"
+ " // something we couldnt express in the query\n"
+ " if ( qux.calculateComplicatedAlgorithm() ) {\n"
+ " // delete the current instance\n"
+ " iter.remove();\n"
+ " // dont need to process the rest\n"
+ " break;\n"
+ " }\n"
+ "}]]>"
+msgstr "Les requêtes d'Hibernate retournent parfois des tuples d'objets, auquel cas chaque tuple est retourné comme un tableau :"
+
+#: index.docbook:272
+msgid "Queries that return tuples"
+msgstr ""
+ "<![CDATA[Iterator kittensAndMothers = sess.createQuery(\n"
+ " \"select kitten, mother from Cat kitten join kitten.mother mother\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( kittensAndMothers.hasNext() ) {\n"
+ " Object[] tuple = (Object[]) kittensAndMothers.next();\n"
+ " Cat kitten = (Cat) tuple[0];
+\n"
+ " Cat mother = (Cat) tuple[1];
+\n"
+ " ....\n"
+ "}]]>"
+
+#: index.docbook:274
+msgid "Hibernate queries sometimes return tuples of objects, in which case each tuple is returned as an array:"
+msgstr "Résultats scalaires"
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Iterator kittensAndMothers = sess.createQuery(\n"
+ " \"select kitten, mother from Cat kitten join kitten.mother mother\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( kittensAndMothers.hasNext() ) {\n"
+ " Object[] tuple = (Object[]) kittensAndMothers.next();\n"
+ " Cat kitten = (Cat) tuple[0];\n"
+ " Cat mother = (Cat) tuple[1];\n"
+ " ....\n"
+ "}]]>"
+msgstr "Des requêtes peuvent spécifier une propriété d'une classe dans la clause <literal>select</literal>. Elles peuvent même appeler des fonctions d'aggrégat SQL. Les propriétés ou les aggrégats sont considérés comme des résultats \"scalaires\" (et pas des entités dans un état persistant)."
+
+#: index.docbook:284
+msgid "Scalar results"
+msgstr ""
+ "<![CDATA[Iterator results = sess.createQuery(\n"
+ " \"select cat.color, min(cat.birthdate), count(cat) from Cat cat \" +\n"
+ " \"group by cat.color\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( results.hasNext() ) {\n"
+ " Object[] row = (Object[]) results.next();\n"
+ " Color type = (Color) row[0];\n"
+ " Date oldest = (Date) row[1];\n"
+ " Integer count = (Integer) row[2];\n"
+ " .....\n"
+ "}]]>"
+
+#: index.docbook:286
+msgid "Queries may specify a property of a class in the <literal>select</literal> clause. They may even call SQL aggregate functions. Properties or aggregates are considered \"scalar\" results (and not entities in persistent state)."
+msgstr "Lier des paramètres"
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[Iterator results = sess.createQuery(\n"
+ " \"select cat.color, min(cat.birthdate), count(cat) from Cat cat \" +\n"
+ " \"group by cat.color\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( results.hasNext() ) {\n"
+ " Object[] row = (Object[]) results.next();\n"
+ " Color type = (Color) row[0];\n"
+ " Date oldest = (Date) row[1];\n"
+ " Integer count = (Integer) row[2];\n"
+ " .....\n"
+ "}]]>"
+msgstr "Des méthodes de <literal>Query</literal> sont fournies pour lier des valeurs à des paramètres nommés ou à des paramètres de style JDBC <literal>?</literal>. <emphasis>Contrairement à JDBC, les numéros des paramètres d'Hibernate commencent à zéro.</emphasis> Les paramètres nommés sont des identifiants de la forme <literal>:nom</literal> dans la chaîne de caractères de la requête. Les avantages des paramètres nommés sont :"
+
+#: index.docbook:297
+msgid "Bind parameters"
+msgstr "les paramètres nommés sont insensibles à l'ordre de leur place dans la chaîne de la requête"
+
+#: index.docbook:299
+msgid "Methods on <literal>Query</literal> are provided for binding values to named parameters or JDBC-style <literal>?</literal> parameters. <emphasis>Contrary to JDBC, Hibernate numbers parameters from zero.</emphasis> Named parameters are identifiers of the form <literal>:name</literal> in the query string. The advantages of named parameters are:"
+msgstr "ils peuvent apparaître plusieurs fois dans la même requête"
+
+#: index.docbook:309
+msgid "named parameters are insensitive to the order they occur in the query string"
+msgstr "ils sont auto-documentés"
+
+#: index.docbook:315
+msgid "they may occur multiple times in the same query"
+msgstr ""
+ "<![CDATA[//paramètre nomme (préféré)\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = :name\");\n"
+ "q.setString(\"name\", \"Fritz\");\n"
+ "Iterator cats = q.iterate();]]>"
+
+#: index.docbook:320
+msgid "they are self-documenting"
+msgstr ""
+ "<![CDATA[//paramètre positionnel\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = ?\");\n"
+ "q.setString(0, \"Izi\");\n"
+ "Iterator cats = q.iterate();]]>"
+
+#: index.docbook:326
+msgid ""
+ "<![CDATA[//named parameter (preferred)\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = :name\");\n"
+ "q.setString(\"name\", \"Fritz\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr ""
+ "<![CDATA[//liste de paramètres nommés\n"
+ "List names = new ArrayList();\n"
+ "names.add(\"Izi\");\n"
+ "names.add(\"Fritz\");\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name in (:namesList)\");\n"
+ "q.setParameterList(\"namesList\", names);\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:328
+msgid ""
+ "<![CDATA[//positional parameter\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = ?\");\n"
+ "q.setString(0, \"Izi\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr "Pagination"
+
+#: index.docbook:330
+msgid ""
+ "<![CDATA[//named parameter list\n"
+ "List names = new ArrayList();\n"
+ "names.add(\"Izi\");\n"
+ "names.add(\"Fritz\");\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name in (:namesList)\");\n"
+ "q.setParameterList(\"namesList\", names);\n"
+ "List cats = q.list();]]>"
+msgstr "Si vous avez besoin de spécifier des liens sur votre ensemble de résultats (le nombre maximum de lignes que vous voulez récupérez et/ou la première ligne que vous voulez récupérer) vous devriez utiliser des méthodes de l'interface <literal>Query</literal> :"
+
+#: index.docbook:335
+msgid "Pagination"
+msgstr ""
+ "<![CDATA[Query q = sess.createQuery(\"from DomesticCat cat\");\n"
+ "q.setFirstResult(20);\n"
+ "q.setMaxResults(10);\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:337
+msgid "If you need to specify bounds upon your result set (the maximum number of rows you want to retrieve and / or the first row you want to retrieve) you should use methods of the <literal>Query</literal> interface:"
+msgstr "Hibernate sait comment traduite cette requête de limite en SQL natif pour votre SGBD."
+
+#: index.docbook:343
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"from DomesticCat cat\");\n"
+ "q.setFirstResult(20);\n"
+ "q.setMaxResults(10);\n"
+ "List cats = q.list();]]>"
+msgstr "Itération \"scrollable\""
+
+#: index.docbook:345
+msgid "Hibernate knows how to translate this limit query into the native SQL of your DBMS."
+msgstr "Si votre connecteur JDBC supporte les <literal>ResultSet</literal>s \"scrollables\", l'interface <literal>Query</literal> peut être utilisée pour obtenir un objet <literal>ScrollableResults</literal>, lequel permet une navigation flexible dans les résultats de la requête."
+
+#: index.docbook:353
+msgid "Scrollable iteration"
+msgstr ""
+ "<![CDATA[Query q = sess.createQuery(\"select cat.name, cat from DomesticCat cat \" +\n"
+ " \"order by cat.name\");\n"
+ "ScrollableResults cats = q.scroll();\n"
+ "if ( cats.first() ) {\n"
+ "\n"
+ " // trouve le premier nom sur chaque page d'une liste alphabétique de noms de chats\n"
+ " firstNamesOfPages = new ArrayList();\n"
+ " do {\n"
+ " String name = cats.getString(0);\n"
+ " firstNamesOfPages.add(name);\n"
+ " }\n"
+ " while ( cats.scroll(PAGE_SIZE) );\n"
+ "\n"
+ " // Maintenant, obtiens la première page de chats\n"
+ " pageOfCats = new ArrayList();\n"
+ " cats.beforeFirst();\n"
+ " int i=0;\n"
+ " while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );\n"
+ "\n"
+ "}\n"
+ "cats.close()]]>"
+
+#: index.docbook:355
+msgid "If your JDBC driver supports scrollable <literal>ResultSet</literal>s, the <literal>Query</literal> interface may be used to obtain a <literal>ScrollableResults</literal> object, which allows flexible navigation of the query results."
+msgstr "Notez qu'une connexion ouverte (et un curseur) est requise pour cette fonctionnalité, utilisez <literal>setMaxResult()</literal>/<literal>setFirstResult()</literal> si vous avez besoin d'une fonctionnalité de pagination hors ligne."
+
+#: index.docbook:362
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"select cat.name, cat from DomesticCat cat \" +\n"
+ " \"order by cat.name\");\n"
+ "ScrollableResults cats = q.scroll();\n"
+ "if ( cats.first() ) {\n"
+ "\n"
+ " // find the first name on each page of an alphabetical list of cats by name\n"
+ " firstNamesOfPages = new ArrayList();\n"
+ " do {\n"
+ " String name = cats.getString(0);\n"
+ " firstNamesOfPages.add(name);\n"
+ " }\n"
+ " while ( cats.scroll(PAGE_SIZE) );\n"
+ "\n"
+ " // Now get the first page of cats\n"
+ " pageOfCats = new ArrayList();\n"
+ " cats.beforeFirst();\n"
+ " int i=0;\n"
+ " while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );\n"
+ "\n"
+ "}\n"
+ "cats.close()]]>"
+msgstr "Externaliser des requêtes nommées"
+
+#: index.docbook:364
+msgid "Note that an open database connection (and cursor) is required for this functionality, use <literal>setMaxResult()</literal>/<literal>setFirstResult()</literal> if you need offline pagination functionality."
+msgstr "Vous pouvez aussi définir des requêtes nommées dans le document de mapping. (Souvenez-vous d'utiliser une section <literal>CDATA</literal> si votre requête contient des caractères qui pourraient être interprétés comme des éléments XML.)"
+
+#: index.docbook:373
+msgid "Externalizing named queries"
+msgstr ""
+ "<![CDATA[<query name=\"eg.DomesticCat.by.name.and.minimum.weight\"><![CDATA[\n"
+ " from eg.DomesticCat as cat\n"
+ " where cat.name = ?\n"
+ " and cat.weight > ?\n"
+ "] ]></query>]]>"
+
+#: index.docbook:375
+msgid "You may also define named queries in the mapping document. (Remember to use a <literal>CDATA</literal> section if your query contains characters that could be interpreted as markup.)"
+msgstr "La liaison de paramètres et l'exécution sont fait par programmation :"
+
+#: index.docbook:381
+msgid ""
+ "<![CDATA[<query name=\"ByNameAndMaximumWeight\"><![CDATA[\n"
+ " from eg.DomesticCat as cat\n"
+ " where cat.name = ?\n"
+ " and cat.weight > ?\n"
+ "] ]></query>]]>"
+msgstr ""
+ "<![CDATA[Query q = sess.getNamedQuery(\"eg.DomesticCat.by.name.and.minimum.weight\");\n"
+ "q.setString(0, name);\n"
+ "q.setInt(1, minWeight);\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:383
+msgid "Parameter binding and executing is done programatically:"
+msgstr "Notez que le code réel du programme est indépendant du langage de requête qui est utilisé, vous pouvez aussi définir des requêtes SQL nativez dans les méta-données, ou migrer des requêtes existantes vers Hibernate en les plaçant dans les fichiers de mapping."
+
+#: index.docbook:387
+msgid ""
+ "<![CDATA[Query q = sess.getNamedQuery(\"ByNameAndMaximumWeight\");\n"
+ "q.setString(0, name);\n"
+ "q.setInt(1, minWeight);\n"
+ "List cats = q.list();]]>"
+msgstr "Filtrer des collections"
+
+#: index.docbook:389
+msgid "Note that the actual program code is independent of the query language that is used, you may also define native SQL queries in metadata, or migrate existing queries to Hibernate by placing them in mapping files."
+msgstr "Un <emphasis>filtre</emphasis> de collection est un type spécial de requête qui peut être appliqué à une collection persistante ou à un tableau. La chaîne de requête peut se référer à <literal>this</literal>, correspondant à l'élément de la collection courant."
+
+#: index.docbook:395
+msgid "Also note that a query declaration inside a <literal><hibernate-mapping></literal> element requires a global unique name for the query, while a query declaration inside a <literal><class></literal> element is made unique automatically by prepending the fully qualified name of the class, for example <literal>eg.Cat.ByNameAndMaximumWeight</literal>."
+msgstr ""
+ "<![CDATA[Collection blackKittens = session.createFilter(\n"
+ " pk.getKittens(),\n"
+ " \"where this.color = ?\")\n"
+ " .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )\n"
+ " .list()\n"
+ ");]]>"
+
+#: index.docbook:408
+msgid "Filtering collections"
+msgstr "La collection retournée est considérée comme un bag, et c'est une copie de la collection donnée. La collection originale n'est pas modifiée (c'est contraire à l'implication du nom \"filtre\"; mais cohérent avec le comportement attendu)."
+
+#: index.docbook:409
+msgid "A collection <emphasis>filter</emphasis> is a special type of query that may be applied to a persistent collection or array. The query string may refer to <literal>this</literal>, meaning the current collection element."
+msgstr "Observez que les filtres ne nécessitent pas une clause <literal>from</literal> (bien qu'ils puissent en avoir une si besoin est). Les filtres ne sont pas limités à retourner des éléments de la collection eux-mêmes."
+
+#: index.docbook:415
+msgid ""
+ "<![CDATA[Collection blackKittens = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"where this.color = ?\")\n"
+ " .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )\n"
+ " .list()\n"
+ ");]]>"
+msgstr ""
+ "<![CDATA[Collection blackKittenMates = session.createFilter(\n"
+ " pk.getKittens(),\n"
+ " \"select this.mate where this.color = eg.Color.BLACK.intValue\")\n"
+ " .list();]]>"
+
+#: index.docbook:417
+msgid "The returned collection is considered a bag, and it's a copy of the given collection. The original collection is not modified (this is contrary to the implication of the name \"filter\", but consistent with expected behavior)."
+msgstr "Même une requête de filtre vide est utile, par exemple pour charger un sous-ensemble d'éléments dans une énorme collection :"
+
+#: index.docbook:423
+msgid "Observe that filters do not require a <literal>from</literal> clause (though they may have one if required). Filters are not limited to returning the collection elements themselves."
+msgstr ""
+ "<![CDATA[Collection tenKittens = session.createFilter(\n"
+ " mother.getKittens(), \"\")\n"
+ " .setFirstResult(0).setMaxResults(10)\n"
+ " .list();]]>"
+
+#: index.docbook:428
+msgid ""
+ "<![CDATA[Collection blackKittenMates = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"select this.mate where this.color = eg.Color.BLACK.intValue\")\n"
+ " .list();]]>"
+msgstr "Requêtes Criteria"
+
+#: index.docbook:430
+msgid "Even an empty filter query is useful, e.g. to load a subset of elements in a huge collection:"
+msgstr "HQL est extrêmement puissant mais certains développeurs préfèrent construire des requêtes dynamiquement, en utilisant l'API orientée objet, plutôt que construire des chaînes de requêtes. Hibernate fournit une API intuitive de requête <literal>Criteria</literal> pour ces cas :"
+
+#: index.docbook:435
+msgid ""
+ "<![CDATA[Collection tenKittens = session.createFilter(\n"
+ " mother.getKittens(), \"\")\n"
+ " .setFirstResult(0).setMaxResults(10)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Criteria crit = session.createCriteria(Cat.class);\n"
+ "crit.add( Restrictions.eq( \"color\", eg.Color.BLACK ) );\n"
+ "crit.setMaxResults(10);\n"
+ "List cats = crit.list();]]>"
+
+#: index.docbook:440
+msgid "Criteria queries"
+msgstr "Les APIs <literal>Criteria</literal> et <literal>Example</literal> associé sont traitées plus en détail dans <xref linkend=\"querycriteria\"/>."
+
+#: index.docbook:442
+msgid "HQL is extremely powerful but some developers prefer to build queries dynamically, using an object-oriented API, rather than building query strings. Hibernate provides an intuitive <literal>Criteria</literal> query API for these cases:"
+msgstr "Requêtes en SQL natif"
+
+#: index.docbook:448
+msgid ""
+ "<![CDATA[Criteria crit = session.createCriteria(Cat.class);\n"
+ "crit.add( Restrictions.eq( \"color\", eg.Color.BLACK ) );\n"
+ "crit.setMaxResults(10);\n"
+ "List cats = crit.list();]]>"
+msgstr "Vous pouvez exprimer une requête en SQL, en utilisant <literal>createSQLQuery()</literal> et laisser Hibernate s'occuper du mapping des résultats vers des objets. Notez que vous pouvez n'importe quand appeler <literal>session.connection()</literal> et utiliser directement la <literal>Connection</literal> JDBC. Si vous choisissez d'utiliser l'API Hibernate, vous devez mettre les alias SQL entre accolades :"
+
+#: index.docbook:450
+msgid "The <literal>Criteria</literal> and the associated <literal>Example</literal> API are discussed in more detail in <xref linkend=\"querycriteria\"/>."
+msgstr ""
+ "<![CDATA[List cats = session.createSQLQuery(\"SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10\")
+\n"
+ " .addEntity(\"cat\", Cat.class)
+\n"
+ ".list();]]>"
+
+#: index.docbook:458
+msgid "Queries in native SQL"
+msgstr ""
+ "<![CDATA[List cats = session.createSQLQuery(
+\n"
+ " \"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, \" +
+\n"
+ " \"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... \" +
+\n"
+ " \"FROM CAT {cat} WHERE ROWNUM<10\")
+\n"
+ " .addEntity(\"cat\", Cat.class)
+\n"
+ ".list()]]>"
+
+#: index.docbook:460
+msgid "You may express a query in SQL, using <literal>createSQLQuery()</literal> and let Hibernate take care of the mapping from result sets to objects. Note that you may at any time call <literal>session.connection()</literal> and use the JDBC <literal>Connection</literal> directly. If you chose to use the Hibernate API, you must enclose SQL aliases in braces:"
+msgstr "Les requêtes SQL peuvent contenir des paramètres nommés et positionnels, comme des requêtes Hibernate. Plus d'informations à propos des requêtes SQL natives dans Hibernate peuvent être trouvées dans <xref linkend=\"querysql\"/>."
+
+#: index.docbook:468
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\"SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list();]]>"
+msgstr "Modifier des objets persistants"
+
+#: index.docbook:470
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\n"
+ " \"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, \" +\n"
+ " \"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... \" +\n"
+ " \"FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list()]]>"
+msgstr "Les <emphasis>instances persistantes transactionnelles</emphasis> (c'est-à -dire des objets chargés, sauvegardés, créés ou requêtés par la <literal>Session</literal>) peuvent être manipulées par l'application et n'importe quel changement vers l'état persistant sera persisté lorsque la <literal>Session</literal> est <emphasis>\"flushée\"</emphasis> (traité plus tard dans ce chapitre). Il n'y a pas besoin d'appeler une méthode particulière (comme <literal>update()</literal>, qui a un but différent) pour rendre vos modifications persistantes. Donc la manière la plus directe de mettre à jour l'état d'un objet est de le charger avec <literal>load()</literal>, et puis le manipuler directement, tant que la <literal>Session</literal> est ouverte :"
+
+#: index.docbook:472
+msgid "SQL queries may contain named and positional parameters, just like Hibernate queries. More information about native SQL queries in Hibernate can be found in <xref linkend=\"querysql\"/>."
+msgstr ""
+ "<![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );\n"
+ "cat.setName(\"PK\");\n"
+ "sess.flush(); // changes to cat are automatically detected and persisted]]>"
+
+#: index.docbook:483
+msgid "Modifying persistent objects"
+msgstr "Parfois ce modèle de programmation est inefficace puisqu'il nécessiterait un <literal>SELECT</literal> SQL (pour charger l'objet) et un <literal>UPDATE</literal> SQL (pour persister son état mis à jour) dans la même session. Aussi Hibernate offre une autre approche, en utilisant des instances détachées."
+
+#: index.docbook:485
+msgid "<emphasis>Transactional persistent instances</emphasis> (ie. objects loaded, saved, created or queried by the <literal>Session</literal>) may be manipulated by the application and any changes to persistent state will be persisted when the <literal>Session</literal> is <emphasis>flushed</emphasis> (discussed later in this chapter). There is no need to call a particular method (like <literal>update()</literal>, which has a different purpose) to make your modifications persistent. So the most straightforward way to update the state of an object is to <literal>load()</literal> it, and then manipulate it directly, while the <literal>Session</literal> is open:"
+msgstr "Notez que Hibernate n'offre par sa propre API pour l'exécution directe d'expressions <literal>UPDATE</literal> ou <literal>DELETE</literal>. Hibernate est un service de <emphasis>gestion d'état</emphasis>, vous n'avez pas à penser aux <emphasis>expressions</emphasis> pour l'utiliser. JDBC est une API parfaite pour exécuter des expressions SQL, vous pouvez obtenir une <literal>Connection</literal> JDBC n'importe quand en appelant <literal>session.connection()</literal>. En outre, la notion d'opérations de masse entre en conflit avec le mapping objet/relationnel pour les applications orientées processus de transactions en ligne. Les futures versions d'Hibernate peuvent cependant fournir des fonctions d'opération de masse. Voir <xref linkend=\"batch\"/> pour les astuces possibles d'opérations groupées."
+
+#: index.docbook:496
+msgid ""
+ "<![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );\n"
+ "cat.setName(\"PK\");\n"
+ "sess.flush(); // changes to cat are automatically detected and persisted]]>"
+msgstr "Modifier des objets détachés"
+
+#: index.docbook:498
+msgid "Sometimes this programming model is inefficient since it would require both an SQL <literal>SELECT</literal> (to load an object) and an SQL <literal>UPDATE</literal> (to persist its updated state) in the same session. Therefore Hibernate offers an alternate approach, using detached instances."
+msgstr "Beaucoup d'applications ont besoin de récupérer un objet dans une transaction, l'envoyer à la couche interfacée avec l'utilisateur pour les manipulations, puis sauvegarder les changements dans une nouvelle transaction. Les applications qui utilisent cette approche dans un environnement à haute concurrence utilisent généralement des données versionnées pour assurer l'isolation pour les \"longues\" unités de travail."
+
+#: index.docbook:506
+msgid "Note that Hibernate does not offer its own API for direct execution of <literal>UPDATE</literal> or <literal>DELETE</literal> statements. Hibernate is a <emphasis>state management</emphasis> service, you don't have to think in <emphasis>statements</emphasis> to use it. JDBC is a perfect API for executing SQL statements, you can get a JDBC <literal>Connection</literal> at any time by calling <literal>session.connection()</literal>. Furthermore, the notion of mass operations conflicts with object/relational mapping for online transaction processing-oriented applications. Future versions of Hibernate may however provide special mass operation functions. See <xref linkend=\"batch\"/> for some possible batch operation tricks."
+msgstr "Hibernate supporte ce modèle en permettant pour le réattachement d'instances détachées l'utilisation des méthodes <literal>Session.update()</literal> ou <literal>Session.merge()</literal> :"
+
+#: index.docbook:521
+msgid "Modifying detached objects"
+msgstr ""
+ "<![CDATA[// dans la première session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catId);\n"
+ "Cat potentialMate = new Cat();\n"
+ "firstSession.save(potentialMate);\n"
+ "\n"
+ "// dans une couche plus haute de l'application\n"
+ "cat.setMate(potentialMate);\n"
+ "\n"
+ "// plus tard, dans une nouvelle session\n"
+ "secondSession.update(cat); // update cat\n"
+ "secondSession.update(mate); // update mate]]>"
+
+#: index.docbook:523
+msgid "Many applications need to retrieve an object in one transaction, send it to the UI layer for manipulation, then save the changes in a new transaction. Applications that use this kind of approach in a high-concurrency environment usually use versioned data to ensure isolation for the \"long\" unit of work."
+msgstr "Si le <literal>Cat</literal> avec l'identifiant <literal>catId</literal> avait déjà été chargé par <literal>secondSession</literal> lorsque l'application a essayé de le réattacher, une exception aurait été levée."
+
+#: index.docbook:530
+msgid "Hibernate supports this model by providing for reattachment of detached instances using the <literal>Session.update()</literal> or <literal>Session.merge()</literal> methods:"
+msgstr "Utilisez <literal>update()</literal> si vous êtes sure que la session ne contient pas déjà une instance persistante avec le même identifiant, et <literal>merge()</literal> si vous voulez fusionner vos modifications n'importe quand sans considérer l'état de la session. En d'autres mots, <literal>update()</literal> est généralement la première méthode que vous devriez appeler dans une session fraîche, pour s'assurer que le réattachement de vos instances détachées est la première opération qui est exécutée."
+
+#: index.docbook:536
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catId);\n"
+ "Cat potentialMate = new Cat();\n"
+ "firstSession.save(potentialMate);\n"
+ "\n"
+ "// in a higher layer of the application\n"
+ "cat.setMate(potentialMate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.update(cat); // update cat\n"
+ "secondSession.update(mate); // update mate]]>"
+msgstr "L'application devrait individuellement <literal>update()</literal> (NdT : mettre à jour) les instances détachées accessibles depuis l'instance détachée donnée si et <emphasis>seulement</emphasis> si elle veut que leur état soit aussi mis à jour. Ceci peut être automatisé bien sûr, en utilisant la <emphasis>persistance transitive</emphasis>, voir <xref linkend=\"objectstate-transitive\"/>."
+
+#: index.docbook:538
+msgid "If the <literal>Cat</literal> with identifier <literal>catId</literal> had already been loaded by <literal>secondSession</literal> when the application tried to reattach it, an exception would have been thrown."
+msgstr "La méthode <literal>lock()</literal> permet aussi à une application de réassocier un objet avec une nouvelle session. Pourtant, l'instance détachée doit être non modifiée !"
+
+#: index.docbook:544
+msgid "Use <literal>update()</literal> if you are sure that the session does not contain an already persistent instance with the same identifier, and <literal>merge()</literal> if you want to merge your modifications at any time without consideration of the state of the session. In other words, <literal>update()</literal> is usually the first method you would call in a fresh session, ensuring that reattachment of your detached instances is the first operation that is executed."
+msgstr ""
+ "<![CDATA[//réassocie :\n"
+ "sess.lock(fritz, LockMode.NONE);\n"
+ "//fait une vérification de version, puis réassocie :\n"
+ "sess.lock(izi, LockMode.READ);\n"
+ "//fait une vérification de version, en utilisant SELECT ... FOR UPDATE, puis réassocie :\n"
+ "sess.lock(pk, LockMode.UPGRADE);]]>"
+
+#: index.docbook:553
+msgid "The application should individually <literal>update()</literal> detached instances reachable from the given detached instance if and <emphasis>only</emphasis> if it wants their state also updated. This can be automated of course, using <emphasis>transitive persistence</emphasis>, see <xref linkend=\"objectstate-transitive\"/>."
+msgstr "Notez que <literal>lock()</literal> peut être utilisé avec différents <literal>LockMode</literal>s, voir la documentation de l'API documentation et le chapitre sur la gestion des transactions pour plus d'informations. Le réattachement n'est pas le seul cas d'utilisation pour <literal>lock()</literal>."
+
+#: index.docbook:560
+msgid "The <literal>lock()</literal> method also allows an application to reassociate an object with a new session. However, the detached instance has to be unmodified!"
+msgstr "D'autres modèles pour de longues unités de travail sont traités dans <xref linkend=\"transactions-optimistic\"/>."
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[//just reassociate:\n"
+ "sess.lock(fritz, LockMode.NONE);\n"
+ "//do a version check, then reassociate:\n"
+ "sess.lock(izi, LockMode.READ);\n"
+ "//do a version check, using SELECT ... FOR UPDATE, then reassociate:\n"
+ "sess.lock(pk, LockMode.UPGRADE);]]>"
+msgstr "Détection automatique d'un état"
+
+#: index.docbook:567
+msgid "Note that <literal>lock()</literal> can be used with various <literal>LockMode</literal>s, see the API documentation and the chapter on transaction handling for more information. Reattachment is not the only usecase for <literal>lock()</literal>."
+msgstr "Les utilisateurs d'Hibernate ont demandé une méthode dont l'intention générale serait soit de sauvegarder une instance éphémère en générant un nouvel identifiant, soit mettre à jour/réattacher les instances détachées associées à l'identifiant courant. La méthode <literal>saveOrUpdate()</literal> implémente cette fonctionnalité."
+
+#: index.docbook:574
+msgid "Other models for long units of work are discussed in <xref linkend=\"transactions-optimistic\"/>."
+msgstr ""
+ "<![CDATA[// dans la première session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catID);\n"
+ "\n"
+ "// dans une partie plus haute de l'application\n"
+ "Cat mate = new Cat();\n"
+ "cat.setMate(mate);\n"
+ "\n"
+ "// plus tard, dans une nouvelle session\n"
+ "secondSession.saveOrUpdate(cat); // met à jour un état existant (cat a un identifiant non-null)\n"
+ "secondSession.saveOrUpdate(mate); // sauvegarde les nouvelles instances (mate a un identiant null)]]>"
+
+#: index.docbook:581
+msgid "Automatic state detection"
+msgstr "L'usage et la sémantique de <literal>saveOrUpdate()</literal> semble être confuse pour les nouveaux utilisateurs. Premièrement, aussi longtemps que vous n'essayez pas d'utiliser des instances d'une session dans une autre, vous ne devriez pas avoir besoin d'utiliser <literal>update()</literal>, <literal>saveOrUpdate()</literal>, ou <literal>merge()</literal>. Certaines applications n'utiliseront jamais ces méthodes."
+
+#: index.docbook:583
+msgid "Hibernate users have requested a general purpose method that either saves a transient instance by generating a new identifier or updates/reattaches the detached instances associated with its current identifier. The <literal>saveOrUpdate()</literal> method implements this functionality."
+msgstr "Généralement <literal>update()</literal> ou <literal>saveOrUpdate()</literal> sont utilisées dans le scénario suivant :"
+
+#: index.docbook:590
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catID);\n"
+ "\n"
+ "// in a higher tier of the application\n"
+ "Cat mate = new Cat();\n"
+ "cat.setMate(mate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.saveOrUpdate(cat); // update existing state (cat has a non-null id)\n"
+ "secondSession.saveOrUpdate(mate); // save the new instance (mate has a null id)]]>"
+msgstr "l'application charge un objet dans la première session"
+
+#: index.docbook:592
+msgid "The usage and semantics of <literal>saveOrUpdate()</literal> seems to be confusing for new users. Firstly, so long as you are not trying to use instances from one session in another new session, you should not need to use <literal>update()</literal>, <literal>saveOrUpdate()</literal>, or <literal>merge()</literal>. Some whole applications will never use either of these methods."
+msgstr "l'objet est passé à la couche utilisateur"
+
+#: index.docbook:600
+msgid "Usually <literal>update()</literal> or <literal>saveOrUpdate()</literal> are used in the following scenario:"
+msgstr "certaines modifications sont effectuées sur l'objet"
+
+#: index.docbook:607
+msgid "the application loads an object in the first session"
+msgstr "l'objet est retourné à la couche logique métier"
+
+#: index.docbook:612
+msgid "the object is passed up to the UI tier"
+msgstr "l'application persiste ces modifications en appelant <literal>update()</literal> dans une seconde sessin"
+
+#: index.docbook:617
+msgid "some modifications are made to the object"
+msgstr "<literal>saveOrUpdate()</literal> s'utilise dans le cas suivant :"
+
+#: index.docbook:622
+msgid "the object is passed back down to the business logic tier"
+msgstr "si l'objet est déjà persistant dans cette session, ne rien faire"
+
+#: index.docbook:627
+msgid "the application persists these modifications by calling <literal>update()</literal> in a second session"
+msgstr "si un autre objet associé à la session a le même identifiant, lever une exception"
+
+#: index.docbook:634
+msgid "<literal>saveOrUpdate()</literal> does the following:"
+msgstr "si l'objet n'a pas de propriété d'identifiant, appeler <literal>save()</literal>"
+
+#: index.docbook:640
+msgid "if the object is already persistent in this session, do nothing"
+msgstr "si l'identifiant de l'objet a une valeur assignée à un objet nouvellement instancié, appeler <literal>save()</literal>"
+
+#: index.docbook:645
+msgid "if another object associated with the session has the same identifier, throw an exception"
+msgstr "si l'objet est versionné (par <literal><version></literal> ou <literal><timestamp></literal>), et la valeur de la propriété de version est la même valeur que celle assignée à un objet nouvellement instancié, appeler <literal>save()</literal>"
+
+#: index.docbook:651
+msgid "if the object has no identifier property, <literal>save()</literal> it"
+msgstr "sinon mettre à jour l'objet avec <literal>update()</literal>"
+
+#: index.docbook:656
+msgid "if the object's identifier has the value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr "et <literal>merge()</literal> est très différent :"
+
+#: index.docbook:662
+msgid "if the object is versioned (by a <literal><version></literal> or <literal><timestamp></literal>), and the version property value is the same value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr "s'il y a une instance persistante avec le même identifiant couramment associée à la session, copier l'état de l'objet donné dans l'instance persistante"
+
+#: index.docbook:670
+msgid "otherwise <literal>update()</literal> the object"
+msgstr "s'il n'y a pas d'instance persistante associée à cette session, essayer de le charger à partir de la base de données, ou créer une nouvelle instance persistante"
+
+#: index.docbook:676
+msgid "and <literal>merge()</literal> is very different:"
+msgstr "l'instance persistante est retournée"
+
+#: index.docbook:682
+msgid "if there is a persistent instance with the same identifier currently associated with the session, copy the state of the given object onto the persistent instance"
+msgstr "l'instance donnée ne devient pas associée à la session, elle reste détachée"
+
+#: index.docbook:689
+msgid "if there is no persistent instance currently associated with the session, try to load it from the database, or create a new persistent instance"
+msgstr "Suppression d'objets persistants"
+
+#: index.docbook:695
+msgid "the persistent instance is returned"
+msgstr "<literal>Session.delete()</literal> supprimera l'état d'un objet de la base de données. Bien sûr, votre application pourrait encore conserver une référence vers un objet effacé. Il est mieux de penser à <literal>delete()</literal> comme rendant une instance persistante éphémère."
+
+#: index.docbook:700
+msgid "the given instance does not become associated with the session, it remains detached"
+msgstr "<![CDATA[sess.delete(cat);]]>"
+
+#: index.docbook:710
+msgid "Deleting persistent objects"
+msgstr "Vous pouvez effacer des objets dans l'ordre que vous voulez, sans risque de violations de contrainte de clef étrangère. Il est encore possible de violer une contrainte <literal>NOT NULL</literal> sur une colonne de clef étrangère en effaçant des objets dans le mauvais ordre, par exemple si vous effacer le parent, mais oubliez d'effacer les enfants."
+
+#: index.docbook:712
+msgid "<literal>Session.delete()</literal> will remove an object's state from the database. Of course, your application might still hold a reference to a deleted object. It's best to think of <literal>delete()</literal> as making a persistent instance transient."
+msgstr "Réplication d'objets entre deux entrepôts de données"
+
+#: index.docbook:719
+msgid "<![CDATA[sess.delete(cat);]]>"
+msgstr "Il est occasionnellement utile de pouvoir prendre un graphe d'instances persistantes et de les rendre persistantes dans un entrepôt différent, sans regénérer les valeurs des identifiants."
+
+#: index.docbook:721
+msgid "You may delete objects in any order you like, without risk of foreign key constraint violations. It is still possible to violate a <literal>NOT NULL</literal> constraint on a foreign key column by deleting objects in the wrong order, e.g. if you delete the parent, but forget to delete the children."
+msgstr ""
+ "<![CDATA[//récupère un cat de la base de données\n"
+ "Session session1 = factory1.openSession();\n"
+ "Transaction tx1 = session1.beginTransaction();\n"
+ "Cat cat = session1.get(Cat.class, catId);\n"
+ "tx1.commit();\n"
+ "session1.close();\n"
+ "\n"
+ "// réconcilie la seconde base de données\n"
+ "Session session2 = factory2.openSession();\n"
+ "Transaction tx2 = session2.beginTransaction();\n"
+ "session2.replicate(cat, ReplicationMode.LATEST_VERSION);\n"
+ "tx2.commit();\n"
+ "session2.close();]]>"
+
+#: index.docbook:732
+msgid "Replicating object between two different datastores"
+msgstr "Le <literal>ReplicationMode</literal> détermine comment <literal>replicate()</literal> traitera les conflits avec les lignes existantes dans la base de données."
+
+#: index.docbook:734
+msgid "It is occasionally useful to be able to take a graph of persistent instances and make them persistent in a different datastore, without regenerating identifier values."
+msgstr "<literal>ReplicationMode.IGNORE</literal> - ignore l'objet s'il y a une ligne existante dans la base de données avec le même identifiant"
+
+#: index.docbook:740
+msgid ""
+ "<![CDATA[//retrieve a cat from one database\n"
+ "Session session1 = factory1.openSession();\n"
+ "Transaction tx1 = session1.beginTransaction();\n"
+ "Cat cat = session1.get(Cat.class, catId);\n"
+ "tx1.commit();\n"
+ "session1.close();\n"
+ "\n"
+ "//reconcile with a second database\n"
+ "Session session2 = factory2.openSession();\n"
+ "Transaction tx2 = session2.beginTransaction();\n"
+ "session2.replicate(cat, ReplicationMode.LATEST_VERSION);\n"
+ "tx2.commit();\n"
+ "session2.close();]]>"
+msgstr "<literal>ReplicationMode.OVERWRITE</literal> - écrase n'importe quelle ligne existante dans la base de données avec le même identifiant"
+
+#: index.docbook:742
+msgid "The <literal>ReplicationMode</literal> determines how <literal>replicate()</literal> will deal with conflicts with existing rows in the database."
+msgstr "<literal>ReplicationMode.EXCEPTION</literal> - lève une exception s'il y une ligne dans la base de données avec le même identifiant"
+
+#: index.docbook:749
+msgid "<literal>ReplicationMode.IGNORE</literal> - ignore the object when there is an existing database row with the same identifier"
+msgstr "<literal>ReplicationMode.LATEST_VERSION</literal> - écrase la ligne si son numéro de version est plus petit que le numéro de version de l'objet, ou ignore l'objet sinon"
+
+#: index.docbook:755
+msgid "<literal>ReplicationMode.OVERWRITE</literal> - overwrite any existing database row with the same identifier"
+msgstr "Les cas d'utilisation de cette fonctionnalité incluent la réconciliation de données entrées dans différentes base de données, l'extension des informations de configuration du système durant une mise à jour du produit, retour en arrière sur les changements effectués durant des transactions non-ACID, et plus."
+
+#: index.docbook:761
+msgid "<literal>ReplicationMode.EXCEPTION</literal> - throw an exception if there is an existing database row with the same identifier"
+msgstr "Flush de la session"
+
+#: index.docbook:767
+msgid "<literal>ReplicationMode.LATEST_VERSION</literal> - overwrite the row if its version number is earlier than the version number of the object, or ignore the object otherwise"
+msgstr "De temps en temps la <literal>Session</literal> exécutera les expressions SQL requises pour syncrhoniser l'état de la connexion JDBC avec l'état des objets retenus en mémoire. Ce processus, <emphasis>flush</emphasis>, arrive par défaut aux points suivants :"
+
+#: index.docbook:775
+msgid "Usecases for this feature include reconciling data entered into different database instances, upgrading system configuration information during product upgrades, rolling back changes made during non-ACID transactions and more."
+msgstr "lors de certaines exécutions de requête"
+
+#: index.docbook:784
+msgid "Flushing the Session"
+msgstr "lors d'un appel à <literal>org.hibernate.Transaction.commit()</literal>"
+
+#: index.docbook:786
+msgid "From time to time the <literal>Session</literal> will execute the SQL statements needed to synchronize the JDBC connection's state with the state of objects held in memory. This process, <emphasis>flush</emphasis>, occurs by default at the following points"
+msgstr "lors d'un appel à <literal>Session.flush()</literal>"
+
+#: index.docbook:795
+msgid "before some query executions"
+msgstr "Les expressions SQL sont effectuées dans l'ordre suivant :"
+
+#: index.docbook:800
+msgid "from <literal>org.hibernate.Transaction.commit()</literal>"
+msgstr "insertion des entités, dans le même ordre que celui des objets correspondants sauvegardés par l'appel à <literal>Session.save()</literal>"
+
+#: index.docbook:805
+msgid "from <literal>Session.flush()</literal>"
+msgstr "mise à jours des entités"
+
+#: index.docbook:811
+msgid "The SQL statements are issued in the following order"
+msgstr "suppression des collections"
+
+#: index.docbook:817
+msgid "all entity insertions, in the same order the corresponding objects were saved using <literal>Session.save()</literal>"
+msgstr "suppression, mise à jour et insertion des éléments des collections"
+
+#: index.docbook:823
+msgid "all entity updates"
+msgstr "insertion des collections"
+
+#: index.docbook:828
+msgid "all collection deletions"
+msgstr "suppression des entités, dans le même ordre que celui des objets correspondants qui ont été supprimés par l'appel à <literal>Session.delete()</literal>"
+
+#: index.docbook:833
+msgid "all collection element deletions, updates and insertions"
+msgstr "(Une exception est que des objets utilisant la génération <literal>native</literal> d'identifiants sont insérés lorsqu'ils sont sauvegardés.)"
+
+#: index.docbook:838
+msgid "all collection insertions"
+msgstr "Excepté lorsque vous appelez <literal>flush()</literal> explicitement, il n'y absolument aucune garantie à propos de <emphasis>quand</emphasis> la <literal>Session</literal> exécute les appels JDBC, seulement sur l'<emphasis>ordre</emphasis> dans lequel ils sont exécutés. Cependant, Hibernate garantit que <literal>Query.list(..)</literal> ne retournera jamais de données périmées, ni des données fausses."
+
+#: index.docbook:843
+msgid "all entity deletions, in the same order the corresponding objects were deleted using <literal>Session.delete()</literal>"
+msgstr "Il est possible de changer le comportement par défaut, donc que le flush se produise moins fréquemment. La classe <literal>FlushMode</literal> définit trois modes différents : flush seulement lors du commit (et seulement quand l'API <literal>Transaction</literal> d'Hibernate est utilisée), flush automatiquement en utilisant la procédure expliquée, ou jamais de flush à moins que <literal>flush()</literal> soit appelée explicitement. Le dernier mode est utile pour l'exécution de longues unités de travail, où une <literal>Session</literal> est gardée ouverte et déconnectée pour un long moment (voir <xref linkend=\"transactions-optimistic-longsession\"/>)."
+
+#: index.docbook:850
+msgid "(An exception is that objects using <literal>native</literal> ID generation are inserted when they are saved.)"
+msgstr ""
+ "<![CDATA[sess = sf.openSession();\n"
+ "Transaction tx = sess.beginTransaction();\n"
+ "sess.setFlushMode(FlushMode.COMMIT); // permet aux requêtes de retourner un état périmé\n"
+ "\n"
+ "Cat izi = (Cat) sess.load(Cat.class, id);\n"
+ "izi.setName(iznizi);\n"
+ "\n"
+ "// pourrait retourner des données périmées\n"
+ "sess.find(\"from Cat as cat left outer join cat.kittens kitten\");\n"
+ "\n"
+ "// le changement pour izi n'est pas flushé !\n"
+ "...\n"
+ "tx.commit(); // le flush se produit]]>"
+
+#: index.docbook:855
+msgid "Except when you explicity <literal>flush()</literal>, there are absolutely no guarantees about <emphasis>when</emphasis> the <literal>Session</literal> executes the JDBC calls, only the <emphasis>order</emphasis> in which they are executed. However, Hibernate does guarantee that the <literal>Query.list(..)</literal> will never return stale data; nor will they return the wrong data."
+msgstr "Durant le flush, une exception peut se produire (par exemple, si une opération de la DML viole une contrainte). Puisque les exceptions de gestion impliquent une certaine compréhension du comportement transactionnel d'Hibernate, nous le traitons dans <xref linkend=\"transactions\"/>."
+
+#: index.docbook:863
+msgid "It is possible to change the default behavior so that flush occurs less frequently. The <literal>FlushMode</literal> class defines three different modes: only flush at commit time (and only when the Hibernate <literal>Transaction</literal> API is used), flush automatically using the explained routine, or never flush unless <literal>flush()</literal> is called explicitly. The last mode is useful for long running units of work, where a <literal>Session</literal> is kept open and disconnected for a long time (see <xref linkend=\"transactions-optimistic-longsession\"/>)."
+msgstr "Persistance transitive"
+
+#: index.docbook:873
+msgid ""
+ "<![CDATA[sess = sf.openSession();\n"
+ "Transaction tx = sess.beginTransaction();\n"
+ "sess.setFlushMode(FlushMode.COMMIT); // allow queries to return stale state\n"
+ "\n"
+ "Cat izi = (Cat) sess.load(Cat.class, id);\n"
+ "izi.setName(iznizi);\n"
+ "\n"
+ "// might return stale data\n"
+ "sess.find(\"from Cat as cat left outer join cat.kittens kitten\");\n"
+ "\n"
+ "// change to izi is not flushed!\n"
+ "...\n"
+ "tx.commit(); // flush occurs\n"
+ "sess.close();]]>"
+msgstr "Il est assez pénible de sauvegarder, supprimer, ou réattacher des objets un par un, surtout si vous traitez un graphe d'objets associés. Un cas habituel est une relation parent/enfant. Considérez l'exemple suivant :"
+
+#: index.docbook:875
+msgid "During flush, an exception might occur (e.g. if a DML operation violates a constraint). Since handling exceptions involves some understanding of Hibernate's transactional behavior, we discuss it in <xref linkend=\"transactions\"/>."
+msgstr "Si les enfants de la relation parent/enfant étaient des types de valeur (par exemple, une collection d'adresses ou de chaînes de caractères), leur cycle de vie dépendraient du parent et aucune action ne serait requise pour \"cascader\" facilement les changements d'état. Si le parent est sauvegardé, les objets enfants de type de valeur sont sauvegardés également, si le parent est supprimé, les enfants sont supprimés, etc. Ceci fonctionne même pour des opérations telles que la suppression d'un enfant de la collection ; Hibernate détectera cela et, puisque les objets de type de valeur ne peuvent pas avoir des références partagées, supprimera l'enfant de la base de données."
+
+#: index.docbook:884
+msgid "Transitive persistence"
+msgstr "Maintenant considérez le même scénario avec un parent et dont les objets enfants sont des entités, et non des types de valeur (par exemple, des catégories et des objets, ou un parent et des chatons). Les entités ont leur propre cycle de vie, supportent les références partagées (donc supprimer une entité de la collection ne signifie pas qu'elle peut être supprimée), et il n'y a par défaut pas de cascade d'état d'une entité vers n'importe quelle entité associée. Hibernate n'implémente pas la <emphasis>persistance par accessibilité</emphasis> par défaut."
+
+#: index.docbook:886
+msgid "It is quite cumbersome to save, delete, or reattach individual objects, especially if you deal with a graph of associated objects. A common case is a parent/child relationship. Consider the following example:"
+msgstr "Pour chaque opération basique de la session d'Hibernate - incluant <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal> - il y a un style de cascade correspondant. Respectivement, les styles de cascade s'appellent <literal>persist, merge, save-update, delete, lock, refresh, evict, replicate</literal>. Si vous voulez qu'une opération soit cascadée le long d'une association, vous devez l'indiquer dans le document de mapping. Par exemple :"
+
+#: index.docbook:892
+msgid "If the children in a parent/child relationship would be value typed (e.g. a collection of addresses or strings), their life cycle would depend on the parent and no further action would be required for convenient \"cascading\" of state changes. When the parent is saved, the value-typed child objects are saved as well, when the parent is deleted, the children will be deleted, etc. This even works for operations such as the removal of a child from the collection; Hibernate will detect this and, since value-typed objects can't have shared references, delete the child from the database."
+msgstr "<![CDATA[<one-to-one name=\"person\" cascade=\"persist\"/>]]>"
+
+#: index.docbook:903
+msgid "Now consider the same scenario with parent and child objects being entities, not value-types (e.g. categories and items, or parent and child cats). Entities have their own life cycle, support shared references (so removing an entity from the collection does not mean it can be deleted), and there is by default no cascading of state from one entity to any other associated entities. Hibernate does not implement <emphasis>persistence by reachability</emphasis> by default."
+msgstr "Les styles de cascade peuvent être combinés :"
+
+#: index.docbook:912
+msgid "For each basic operation of the Hibernate session - including <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal> - there is a corresponding cascade style. Respectively, the cascade styles are named <literal>create, merge, save-update, delete, lock, refresh, evict, replicate</literal>. If you want an operation to be cascaded along an association, you must indicate that in the mapping document. For example:"
+msgstr "<![CDATA[<one-to-one name=\"person\" cascade=\"persist,delete,lock\"/>]]>"
+
+#: index.docbook:921
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist\"/>]]>"
+msgstr "Vous pouvez même utiliser <literal>cascade=\"all\"</literal> pour spécifier que <emphasis>toutes</emphasis> les opérations devraient être cascadées le long de l'association. La valeur par défaut <literal>cascade=\"none\"</literal> spécifie qu'aucune opération ne sera cascadée."
+
+#: index.docbook:923
+msgid "Cascade styles my be combined:"
+msgstr "Une style de cascade spécial, <literal>delete-orphan</literal>, s'applique seulement aux associations un-vers-plusieurs, et indique que l'opération <literal>delete()</literal> devrait être appliquée à n'importe quel enfant qui est supprimé de l'association."
+
+#: index.docbook:927
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist,delete,lock\"/>]]>"
+msgstr "Recommandations :"
+
+#: index.docbook:929
+msgid "You may even use <literal>cascade=\"all\"</literal> to specify that <emphasis>all</emphasis> operations should be cascaded along the association. The default <literal>cascade=\"none\"</literal> specifies that no operations are to be cascaded."
+msgstr "Cela n'a généralement aucun sens d'activer la cascade sur une association <literal><many-to-one></literal> ou <literal><many-to-many></literal>. Les cascades sont souvent utiles pour des associations <literal><one-to-one></literal> et <literal><one-to-many></literal>."
+
+#: index.docbook:935
+msgid "A special cascade style, <literal>delete-orphan</literal>, applies only to one-to-many associations, and indicates that the <literal>delete()</literal> operation should be applied to any child object that is removed from the association."
+msgstr "Si la durée de vie de l'objet enfant est liée à la durée de vie de l'objet parent, faites en un <emphasis>objet du cycle de vie</emphasis> en spécifiant <literal>cascade=\"all,delete-orphan\"</literal>."
+
+#: index.docbook:942
+msgid "Recommendations:"
+msgstr "Sinon, vous pourriez ne pas avoir besoin de cascade du tout. Mais si vous pensez que vous travaillerez souvent avec le parent et les enfants ensemble dans la même transaction, et que vous voulez vous éviter quelques frappes, considérez l'utilisation de <literal>cascade=\"persist,merge,save-update\"</literal>."
+
+#: index.docbook:948
+msgid "It doesn't usually make sense to enable cascade on a <literal><many-to-one></literal> or <literal><many-to-many></literal> association. Cascade is often useful for <literal><one-to-one></literal> and <literal><one-to-many></literal> associations."
+msgstr "Mapper une association (soit une simple association valuée, soit une collection) avec <literal>cascade=\"all\"</literal> marque l'association comme une relation de style <emphasis>parent/enfant</emphasis> où la sauvegarde/mise à jour/suppression du parent entraîne la sauvegarde/mise à jour/suppression de l'enfant ou des enfants."
+
+#: index.docbook:956
+msgid "If the child object's lifespan is bounded by the lifespan of the parent object, make it a <emphasis>life cycle object</emphasis> by specifying <literal>cascade=\"all,delete-orphan\"</literal>."
+msgstr "En outre, une simple référence à un enfant d'un parent persistant aura pour conséquence la sauvegarde/mise à jour de l'enfant. Cette métaphore est cependant incomplète. Un enfant qui devient non référencé par son parent <emphasis>n'est pas</emphasis> automatiquement supprimée, excepté dans le cas d'une association <literal><one-to-many></literal> mappée avec <literal>cascade=\"delete-orphan\"</literal>. La sémantique précise des opérations de cascade pour une relation parent/enfant est la suivante :"
+
+#: index.docbook:963
+msgid "Otherwise, you might not need cascade at all. But if you think that you will often be working with the parent and children together in the same transaction, and you want to save yourself some typing, consider using <literal>cascade=\"persist,merge,save-update\"</literal>."
+msgstr "Si un parent est passé à <literal>persist()</literal>, tous les enfant sont passés à <literal>persist()</literal>"
+
+#: index.docbook:971
+msgid "Mapping an association (either a single valued association, or a collection) with <literal>cascade=\"all\"</literal> marks the association as a <emphasis>parent/child</emphasis> style relationship where save/update/delete of the parent results in save/update/delete of the child or children."
+msgstr "Si un parent est passé à <literal>merge()</literal>, tous les enfants sont passés à <literal>merge()</literal>"
+
+#: index.docbook:977
+msgid "Futhermore, a mere reference to a child from a persistent parent will result in save/update of the child. This metaphor is incomplete, however. A child which becomes unreferenced by its parent is <emphasis>not</emphasis> automatically deleted, except in the case of a <literal><one-to-many></literal> association mapped with <literal>cascade=\"delete-orphan\"</literal>. The precise semantics of cascading operations for a parent/child relationship are as follows:"
+msgstr "Si un parent est passé à <literal>save()</literal>, <literal>update()</literal> ou <literal>saveOrUpdate()</literal>, tous les enfants sont passés à <literal>saveOrUpdate()</literal>"
+
+#: index.docbook:988
+msgid "If a parent is passed to <literal>persist()</literal>, all children are passed to <literal>persist()</literal>"
+msgstr "Si un enfant détaché ou éphémère devient référencé par un parent persistant, il est passé à <literal>saveOrUpdate()</literal>"
+
+#: index.docbook:994
+msgid "If a parent is passed to <literal>merge()</literal>, all children are passed to <literal>merge()</literal>"
+msgstr "Si un parent est supprimé, tous les enfants sont passés à <literal>delete()</literal>"
+
+#: index.docbook:1000
+msgid "If a parent is passed to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal>, all children are passed to <literal>saveOrUpdate()</literal>"
+msgstr "Si un enfant est déréférencé par un parent persistant, <emphasis>rien de spécial n'arrive</emphasis> - l'application devrait explicitement supprimer l'enfant si nécessaire - à moins que <literal>cascade=\"delete-orphan\"</literal> soit paramétré, au quel cas l'enfant \"orphelin\" est supprimé."
+
+#: index.docbook:1006
+msgid "If a transient or detached child becomes referenced by a persistent parent, it is passed to <literal>saveOrUpdate()</literal>"
+msgstr "Enfin, la cascade des opérations peut être effectuée sur un graphe donné lors de l'<emphasis>appel de l'opération</emphasis> or lors du <emphasis>flush</emphasis> suivant. Toutes les opérations, lorsque cascadées, le sont sur toutes les entités associées atteignables lorsque l'opétation est exécutée. Cependant <literal>save-upate</literal> et <literal>delete-orphan</literal> sont cascadées à toutes les entités associées atteignables lors du flush de la <literal>Session</literal>."
+
+#: index.docbook:1012
+msgid "If a parent is deleted, all children are passed to <literal>delete()</literal>"
+msgstr "Utilisation des méta-données"
+
+#: index.docbook:1017
+msgid "If a child is dereferenced by a persistent parent, <emphasis>nothing special happens</emphasis> - the application should explicitly delete the child if necessary - unless <literal>cascade=\"delete-orphan\"</literal>, in which case the \"orphaned\" child is deleted."
+msgstr "Hibernate requiert un modèle de méta-niveau très riche de toutes les entités et types valués. De temps en temps, ce modèle est très utile à l'application elle même. Par exemple, l'application pourrait utiliser les méta-données d'Hibernate pour implémenter un algorithme de copie en profondeur \"intelligent\" qui comprendrait quels objets devraient copiés (par exemple les types de valeur mutables) et lesquels ne devraient pas l'être (par exemple les types de valeurs immutables et, possiblement, les entités associées)."
+
+#: index.docbook:1026
+msgid "Finally, note that cascading of operations can be applied to an object graph at <emphasis>call time</emphasis> or at <emphasis>flush time</emphasis>. All operations, if enabled, are cascaded to associated entities reachable when the operation is executed. However, <literal>save-upate</literal> and <literal>delete-orphan</literal> are transitive for all associated entities reachable during flush of the <literal>Session</literal>."
+msgstr "Hibernate expose les méta-données via les interfaces <literal>ClassMetadata</literal> et <literal>CollectionMetadata</literal> et la hiérarchie <literal>Type</literal>. Les instances des interfaces de méta-données peuvent être obtenues à partir de la <literal>SessionFactory</literal>."
+
+#: index.docbook:1038
+msgid "Using metadata"
+msgstr ""
+ "<![CDATA[Cat fritz = ......;\n"
+ "ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);\n"
+ "\n"
+ "Object[] propertyValues = catMeta.getPropertyValues(fritz);\n"
+ "String[] propertyNames = catMeta.getPropertyNames();\n"
+ "Type[] propertyTypes = catMeta.getPropertyTypes();\n"
+ "\n"
+ "// récupère une Map de toutes les propriétés qui ne sont pas des collections ou des associations\n"
+ "Map namedValues = new HashMap();\n"
+ "for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {\n"
+ " namedValues.put( propertyNames[i], propertyValues[i] );\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:1040
+msgid "Hibernate requires a very rich meta-level model of all entity and value types. From time to time, this model is very useful to the application itself. For example, the application might use Hibernate's metadata to implement a \"smart\" deep-copy algorithm that understands which objects should be copied (eg. mutable value types) and which should not (eg. immutable value types and, possibly, associated entities)."
+msgstr ""
+
+#: index.docbook:1047
+msgid "Hibernate exposes metadata via the <literal>ClassMetadata</literal> and <literal>CollectionMetadata</literal> interfaces and the <literal>Type</literal> hierarchy. Instances of the metadata interfaces may be obtained from the <literal>SessionFactory</literal>."
+msgstr ""
+
+#: index.docbook:1054
+msgid ""
+ "<![CDATA[Cat fritz = ......;\n"
+ "ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);\n"
+ "\n"
+ "Object[] propertyValues = catMeta.getPropertyValues(fritz);\n"
+ "String[] propertyNames = catMeta.getPropertyNames();\n"
+ "Type[] propertyTypes = catMeta.getPropertyTypes();\n"
+ "\n"
+ "// get a Map of all properties which are not collections or associations\n"
+ "Map namedValues = new HashMap();\n"
+ "for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {\n"
+ " namedValues.put( propertyNames[i], propertyValues[i] );\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/toolset_guide.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/toolset_guide.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/toolset_guide.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,742 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Toolset Guide"
+msgstr "Guide des outils"
+
+#: index.docbook:7
+msgid "Roundtrip engineering with Hibernate is possible using a set of Eclipse plugins, commandline tools, as well as Ant tasks."
+msgstr "Des outils en ligne de commande, des plugins Eclipse ainsu que des tâches Ant permettent de gérer de cycles de développement complet de projets utilisant Hibernate."
+
+#: index.docbook:12
+msgid "The <emphasis>Hibernate Tools</emphasis> currently include plugins for the Eclipse IDE as well as Ant tasks for reverse engineering of existing databases:"
+msgstr "Les <emphasis>outils Hibernate</emphasis> actuels incluent des plugins pour l'IDE Eclipse ainsi que des tâches Ant pour l'ingénierie inverse de bases de données existantes :"
+
+#: index.docbook:18
+msgid "<emphasis>Mapping Editor:</emphasis> An editor for Hibernate XML mapping files, supporting auto-completion and syntax highlighting. It also supports semantic auto-completion for class names and property/field names, making it much more versatile than a normal XML editor."
+msgstr "<emphasis>Mapping Editor :</emphasis> un éditeur pour les fichiers de mapping XML Hibernate, supportant l'auto-complétion et la mise en valeur de la syntaxe. Il supporte aussi l'auto-complétion automatique pour les noms de classes et les noms de propriété/champ, le rendant beaucoup plus polyvalent qu'un éditeurXML normal."
+
+#: index.docbook:23
+msgid "<emphasis>Console:</emphasis> The console is a new view in Eclipse. In addition to a tree overview of your console configurations, you also get an interactive view of your persistent classes and their relationships. The console allows you to execute HQL queries against your database and browse the result directly in Eclipse."
+msgstr "<emphasis>Console :</emphasis> la console est une nouvelle vue d'Eclipse. En plus de la vue d'ensemble arborescente de vos configurations de console, vous obtenez aussi une vue interactive de vos classes persistantes et de leurs relations. La console vous permet d'exécuter des requête HQL dans votre base de données et de parcourir les résultats directement dans Eclipse."
+
+#: index.docbook:30
+msgid "<emphasis>Development Wizards:</emphasis> Several wizards are provided with the Hibernate Eclipse tools; you can use a wizard to quickly generate Hibernate configuration (cfg.xml) files, or you may even completely reverse engineer an existing database schema into POJO source files and Hibernate mapping files. The reverse engineering wizard supports customizable templates."
+msgstr "<emphasis>Development Wizards :</emphasis> plusieurs assistants sont fournis avec les outils d'Hibernate pour Eclipse ; vous pouvez utiliser un assistant pour générer rapidement les fichiers de configuration d'Hibernate (cfg.xml), ou vous pouvez même complètement générer les fichiers de mapping Hibernate et les sources des POJOs à partir d'un schéma de base de données existant. L'assistant d'ingénierie inverse supporte les modèles utilisateur."
+
+#: index.docbook:38
+msgid "Ant Tasks:"
+msgstr "Tâches Ant :"
+
+#: index.docbook:43
+msgid "Please refer to the <emphasis>Hibernate Tools</emphasis> package and it's documentation for more information."
+msgstr "Veuillez-vous référer au paquet <emphasis>outils Hibernate</emphasis> et sa documentation pour plus d'informations."
+
+#: index.docbook:48
+msgid "However, the Hibernate main package comes bundled with an integrated tool (it can even be used from \"inside\" Hibernate on-the-fly): <emphasis>SchemaExport</emphasis> aka <literal>hbm2ddl</literal>."
+msgstr "Pourtant, le paquet principal d'Hibernate arrive avec un lot d'outils intégrés (il peut même être utilisé de \"l'intérieur\" d'Hibernate à la volée) : <emphasis>SchemaExport</emphasis> aussi connu comme <literal>hbm2ddl</literal>."
+
+#: index.docbook:55
+msgid "Automatic schema generation"
+msgstr "Génération automatique du schéma"
+
+#: index.docbook:57
+msgid "DDL may be generated from your mapping files by a Hibernate utility. The generated schema includes referential integrity constraints (primary and foreign keys) for entity and collection tables. Tables and sequences are also created for mapped identifier generators."
+msgstr "La DDL peut être générée à partir de vos fichiers de mapping par un utilitaire d'Hibernate. Le schéma généré inclut les contraintes d'intégrité référentielle (clefs primaires et étrangères) pour les tables d'entités et de collections. Les tables et les séquences sont aussi créées pour les générateurs d'identifiant mappés."
+
+#: index.docbook:64
+msgid "You <emphasis>must</emphasis> specify a SQL <literal>Dialect</literal> via the <literal>hibernate.dialect</literal> property when using this tool, as DDL is highly vendor specific."
+msgstr "Vous <emphasis>devez</emphasis> spécifier un <literal>Dialect</literal> SQL via la propriété <literal>hibernate.dialect</literal> lors de l'utilisation de cet outils, puisque la DDL est fortement dépendante de la base de données."
+
+#: index.docbook:70
+msgid "First, customize your mapping files to improve the generated schema."
+msgstr "D'abord, personnalisez vos fichiers de mapping pour améliorer le schéma généré."
+
+#: index.docbook:75
+msgid "Customizing the schema"
+msgstr "Personnaliser le schéma"
+
+#: index.docbook:77
+msgid "Many Hibernate mapping elements define optional attributes named <literal>length</literal>, <literal>precision</literal> and <literal>scale</literal>. You may set the length, precision and scale of a column with this attribute."
+msgstr "Plusieurs éléments du mapping hibernate définissent des attributs optionnels nommés <literal>length</literal>, <literal>precision</literal> et <literal>scale</literal>. Vous pouvez paramétrer la longueur, la précision,... d'une colonne avec ces attributs."
+
+#: index.docbook:84
+msgid "<![CDATA[<property name=\"zip\" length=\"5\"/>]]>"
+msgstr "<![CDATA[<property name=\"zip\" length=\"5\"/>]]>"
+
+#: index.docbook:85
+msgid "<![CDATA[<property name=\"balance\" precision=\"12\" scale=\"2\"/>]]>"
+msgstr "<![CDATA[<property name=\"balance\" precision=\"12\" scale=\"2\"/>]]>"
+
+#: index.docbook:87
+msgid "Some tags also accept a <literal>not-null</literal> attribute (for generating a <literal>NOT NULL</literal> constraint on table columns) and a <literal>unique</literal> attribute (for generating <literal>UNIQUE</literal> constraint on table columns)."
+msgstr "Certains éléments acceptent aussi un attribut <literal>not-null</literal> (utilisé pour générer les contraintes de colonnes <literal>NOT NULL</literal>) et un attribut <literal>unique</literal> (pour générer une contrainte de colonne <literal>UNIQUE</literal>)."
+
+#: index.docbook:93
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" not-null=\"true\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" not-null=\"true\"/>]]>"
+
+#: index.docbook:95
+msgid "<![CDATA[<element column=\"serialNumber\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+msgstr "<![CDATA[<element column=\"serialNumber\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+
+#: index.docbook:97
+msgid "A <literal>unique-key</literal> attribute may be used to group columns in a single unique key constraint. Currently, the specified value of the <literal>unique-key</literal> attribute is <emphasis>not</emphasis> used to name the constraint in the generated DDL, only to group the columns in the mapping file."
+msgstr "Un attribut <literal>unique-key</literal> peut être utilisé pour grouper les colonnes en une seule contrainte d'unicité. Actuellement, la valeur spécifiée par l'attribut <literal>unique-key</literal> n'est <emphasis>pas</emphasis> utilisée pour nommer la contrainte dans le DDL généré, elle sert juste à grouper les colonnes dans le fichier de mapping."
+
+#: index.docbook:105
+msgid ""
+ "<![CDATA[<many-to-one name=\"org\" column=\"orgId\" unique-key=\"OrgEmployeeId\"/>\n"
+ "<property name=\"employeeId\" unique-key=\"OrgEmployee\"/>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"org\" column=\"orgId\" unique-key=\"OrgEmployeeId\"/>\n"
+ " <property name=\"employeeId\" unique-key=\"OrgEmployeeId\"/>]]>"
+
+#: index.docbook:107
+msgid "An <literal>index</literal> attribute specifies the name of an index that will be created using the mapped column or columns. Multiple columns may be grouped into the same index, simply by specifying the same index name."
+msgstr "Un attribut <literal>index</literal> indique le nom d'un index qui sera créé en utilisant la ou les colonnes mappées. Plusieurs colonnes peuvent être groupées dans un même index, en spécifiant le même nom d'index."
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[<property name=\"lastName\" index=\"CustName\"/>\n"
+ "<property name=\"firstName\" index=\"CustName\"/>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"lastName\" index=\"CustName\"/>\n"
+ "<property name=\"firstName\" index=\"CustName\"/>]]>"
+
+#: index.docbook:115
+msgid "A <literal>foreign-key</literal> attribute may be used to override the name of any generated foreign key constraint."
+msgstr "Un attribut <literal>foreign-key</literal> peut être utilisé pour surcharger le nom des clés étrangères générées."
+
+#: index.docbook:120
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" foreign-key=\"FKFooBar\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" foreign-key=\"FKFooBar\"/>]]>"
+
+#: index.docbook:122
+msgid "Many mapping elements also accept a child <literal><column></literal> element. This is particularly useful for mapping multi-column types:"
+msgstr "Plusieurs éléments de mapping acceptent aussi un élément fils <literal><column></literal>. Ceci est utile pour les type multi-colonnes:"
+
+#: index.docbook:127
+msgid ""
+ "<![CDATA[<property name=\"name\" type=\"my.customtypes.Name\"/>\n"
+ " <column name=\"last\" not-null=\"true\" index=\"bar_idx\" length=\"30\"/>\n"
+ " <column name=\"first\" not-null=\"true\" index=\"bar_idx\" length=\"20\"/>\n"
+ " <column name=\"initial\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"name\" type=\"my.customtypes.Name\"/>\n"
+ " <column name=\"last\" not-null=\"true\" index=\"bar_idx\" length=\"30\"/>\n"
+ " <column name=\"first\" not-null=\"true\" index=\"bar_idx\" length=\"20\"/>\n"
+ " <column name=\"initial\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:129
+msgid "The <literal>default</literal> attribute lets you specify a default value for a column (you should assign the same value to the mapped property before saving a new instance of the mapped class)."
+msgstr "L'attribut <literal>default</literal> vous laisse spécifier une valeur par défaut pour une colonnes (vous devriez assigner la même valeur à la propriété mappée avant de sauvegarder une nouvelle instance de la classe mappée)."
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<property name=\"credits\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"credits\" default=\"10\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"credits\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"credits\" default=\"10\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:137
+msgid ""
+ "<![CDATA[<version name=\"version\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"version\" default=\"0\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<version name=\"version\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"version\" default=\"0\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:139
+msgid "The <literal>sql-type</literal> attribute allows the user to override the default mapping of a Hibernate type to SQL datatype."
+msgstr "L'attribut <literal>sql-type</literal> laisse l'utilisateur surcharger le mapping par défaut du type Hibernate vers un type SQL."
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<property name=\"balance\" type=\"float\">\n"
+ " <column name=\"balance\" sql-type=\"decimal(13,3)\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"balance\" type=\"float\">\n"
+ " <column name=\"balance\" sql-type=\"decimal(13,3)\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:146
+msgid "The <literal>check</literal> attribute allows you to specify a check constraint."
+msgstr "L'attribut <literal>check</literal> permet de spécifier une contrainte de vérification."
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">\n"
+ " ...\n"
+ " <property name=\"bar\" type=\"float\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">\n"
+ " ...\n"
+ " <property name=\"bar\" type=\"float\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:156
+msgid "Summary"
+msgstr "Summary"
+
+#: index.docbook:163
+msgid "Attribute"
+msgstr "Attribut"
+
+#: index.docbook:164
+msgid "Values"
+msgstr "Valeur"
+
+#: index.docbook:165
+msgid "Interpretation"
+msgstr "Interprétation"
+
+#: index.docbook:170
+msgid "length"
+msgstr "length"
+
+#: index.docbook:171, index.docbook:176, index.docbook:181
+msgid "number"
+msgstr "numérique"
+
+#: index.docbook:172
+msgid "column length"
+msgstr "taille d'une colonne"
+
+#: index.docbook:175
+msgid "precision"
+msgstr "precision"
+
+#: index.docbook:177
+msgid "column decimal precision"
+msgstr "précision décimale de la colonne"
+
+#: index.docbook:180
+msgid "scale"
+msgstr "scale"
+
+#: index.docbook:182
+msgid "column decimal scale"
+msgstr "scale décimale de la colonne"
+
+#: index.docbook:185
+msgid "not-null"
+msgstr "not-null"
+
+#: index.docbook:186, index.docbook:191
+msgid "true|false"
+msgstr "true|false"
+
+#: index.docbook:187
+msgid "specfies that the column should be non-nullable"
+msgstr "spécifie que la colonne doit être non-nulle"
+
+#: index.docbook:190
+msgid "unique"
+msgstr "unique"
+
+#: index.docbook:192
+msgid "specifies that the column should have a unique constraint"
+msgstr "spécifie que la colonne doit avoir une contrainte d'unicité"
+
+#: index.docbook:195
+msgid "index"
+msgstr "index"
+
+#: index.docbook:196
+msgid "index_name"
+msgstr "index_name"
+
+#: index.docbook:197
+msgid "specifies the name of a (multi-column) index"
+msgstr "spécifie le nom d'un index (multi-colonnes)"
+
+#: index.docbook:200
+msgid "unique-key"
+msgstr "unique-key"
+
+#: index.docbook:201
+msgid "unique_key_name"
+msgstr "unique_key_name"
+
+#: index.docbook:202
+msgid "specifies the name of a multi-column unique constraint"
+msgstr "spécifie le nom d'une contrainte d'unicité multi-colonnes"
+
+#: index.docbook:205
+msgid "foreign-key"
+msgstr "foreign-key"
+
+#: index.docbook:206
+msgid "foreign_key_name"
+msgstr "foreign_key_name"
+
+#: index.docbook:207
+msgid "specifies the name of the foreign key constraint generated for an association, for a <literal><one-to-one></literal>, <literal><many-to-one></literal>, <literal><key></literal>, or <literal><many-to-many></literal> mapping element. Note that <literal>inverse=\"true\"</literal> sides will not be considered by <literal>SchemaExport</literal>."
+msgstr "spécifie le nom d'une contrainte de clé étrangère générée pour une association, utilisez-la avec les éléments de mapping <one-to-one>, <many-to-one>, <key>, et <many-to-many> Notez que les extrêmités <literal>inverse=\"true\"</literal> se seront pas prises en compte par <literal>SchemaExport</literal>."
+
+#: index.docbook:217
+msgid "sql-type"
+msgstr "sql-type"
+
+#: index.docbook:218
+msgid "SQL column type"
+msgstr "SQL column_type"
+
+#: index.docbook:219
+msgid "overrides the default column type (attribute of <literal><column></literal> element only)"
+msgstr "surcharge le type par défaut (attribut de l'élément <literal><column></literal> uniquement)"
+
+#: index.docbook:225
+msgid "default"
+msgstr "default"
+
+#: index.docbook:226, index.docbook:233
+msgid "SQL expression"
+msgstr "expression SQL"
+
+#: index.docbook:227
+msgid "specify a default value for the column"
+msgstr "spécifie une valeur par défaut pour la colonne"
+
+#: index.docbook:232
+msgid "check"
+msgstr "check"
+
+#: index.docbook:234
+msgid "create an SQL check constraint on either column or table"
+msgstr "crée une contrainte de vérification sur la table ou la colonne"
+
+#: index.docbook:242
+msgid "The <literal><comment></literal> element allows you to specify comments for the generated schema."
+msgstr "L'élément <literal><comment></literal> vous permet de spécifier un commentaire pour le schéma généré."
+
+#: index.docbook:247
+msgid ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">\n"
+ " <comment>Current customers only</comment>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">\n"
+ " <comment>Current customers only</comment>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[<property name=\"balance\">\n"
+ " <column name=\"bal\">\n"
+ " <comment>Balance in USD</comment>\n"
+ " </column>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"balance\">\n"
+ " <column name=\"bal\">\n"
+ " <comment>Balance in USD</comment>\n"
+ " </column>\n"
+ "</property>]]>"
+
+#: index.docbook:251
+msgid "This results in a <literal>comment on table</literal> or <literal>comment on column</literal> statement in the generated DDL (where supported)."
+msgstr "Ceci a pour résultat une expression <literal>comment on table</literal> ou <literal>comment on column</literal> dans la DDL générée (où supportée)."
+
+#: index.docbook:260
+msgid "Running the tool"
+msgstr "Exécuter l'outil"
+
+#: index.docbook:262
+msgid "The <literal>SchemaExport</literal> tool writes a DDL script to standard out and/or executes the DDL statements."
+msgstr "L'outil <literal>SchemaExport</literal> génère un script DDL vers la sortie standard et/ou exécute les ordres DDL."
+
+#: index.docbook:267
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "<literal>java -cp </literal><emphasis>classpath_hibernate</emphasis> <literal>net.sf.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>options fichiers_de_mapping</emphasis>"
+
+#: index.docbook:273
+msgid "<literal>SchemaExport</literal> Command Line Options"
+msgstr "<literal>SchemaExport</literal> Options de la ligne de commande"
+
+#: index.docbook:279, index.docbook:429, index.docbook:498
+msgid "Option"
+msgstr "Option"
+
+#: index.docbook:280, index.docbook:367, index.docbook:430, index.docbook:499
+msgid "Description"
+msgstr "Description"
+
+#: index.docbook:285, index.docbook:435
+msgid "--quiet"
+msgstr "--quiet"
+
+#: index.docbook:286, index.docbook:436
+msgid "don't output the script to stdout"
+msgstr "ne pas écrire le script vers la sortie standard"
+
+#: index.docbook:289
+msgid "--drop"
+msgstr "--drop"
+
+#: index.docbook:290
+msgid "only drop the tables"
+msgstr "supprime seuleument les tables"
+
+#: index.docbook:293
+msgid "--create"
+msgstr "--create"
+
+#: index.docbook:294
+msgid "only create the tables"
+msgstr "ne créé que les tables"
+
+#: index.docbook:297, index.docbook:439
+msgid "--text"
+msgstr "--text"
+
+#: index.docbook:298
+msgid "don't export to the database"
+msgstr "ne pas exécuter sur la base de données"
+
+#: index.docbook:301
+msgid "--output=my_schema.ddl"
+msgstr "--output=my_schema.ddl"
+
+#: index.docbook:302
+msgid "output the ddl script to a file"
+msgstr "écrit le script ddl vers un fichier"
+
+#: index.docbook:305, index.docbook:443, index.docbook:504
+msgid "--naming=eg.MyNamingStrategy"
+msgstr "--naming=eg.MyNamingStrategy"
+
+#: index.docbook:306, index.docbook:444, index.docbook:505
+msgid "select a <literal>NamingStrategy</literal>"
+msgstr "sélectionne une <literal>NamingStrategy</literal>"
+
+#: index.docbook:309, index.docbook:451, index.docbook:512
+msgid "--config=hibernate.cfg.xml"
+msgstr "--config=hibernate.cfg.xml"
+
+#: index.docbook:310
+msgid "read Hibernate configuration from an XML file"
+msgstr "lit la configuration Hibernate à partir d'un fichier XML"
+
+#: index.docbook:313, index.docbook:447, index.docbook:508
+msgid "--properties=hibernate.properties"
+msgstr "--properties=hibernate.properties"
+
+#: index.docbook:314, index.docbook:448, index.docbook:509
+msgid "read database properties from a file"
+msgstr "lit les propriétés de la base de données à partir d'un fichier"
+
+#: index.docbook:317
+msgid "--format"
+msgstr "--format"
+
+#: index.docbook:318
+msgid "format the generated SQL nicely in the script"
+msgstr "formatte proprement le SQL généré dans le script"
+
+#: index.docbook:321
+msgid "--delimiter=;"
+msgstr "--delimiter=x"
+
+#: index.docbook:322
+msgid "set an end of line delimiter for the script"
+msgstr "paramètre un délimiteur de fin de ligne pour le script"
+
+#: index.docbook:328
+msgid "You may even embed <literal>SchemaExport</literal> in your application:"
+msgstr "Vous pouvez même intégrer <literal>SchemaExport</literal> dans votre application :"
+
+#: index.docbook:332
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+
+#: index.docbook:337
+msgid "Properties"
+msgstr "Propriétés"
+
+#: index.docbook:339
+msgid "Database properties may be specified"
+msgstr "Les propriétés de la base de données peuvent être spécifiées"
+
+#: index.docbook:345
+msgid "as system properties with <literal>-D</literal><emphasis><property></emphasis>"
+msgstr "comme propriétés système avec <literal>-D</literal><emphasis><property></emphasis>"
+
+#: index.docbook:348
+msgid "in <literal>hibernate.properties</literal>"
+msgstr "dans <literal>hibernate.properties</literal>"
+
+#: index.docbook:351
+msgid "in a named properties file with <literal>--properties</literal>"
+msgstr "dans un fichier de propriétés déclaré avec <literal>--properties</literal>"
+
+#: index.docbook:355
+msgid "The needed properties are:"
+msgstr "Les propriétés nécessaires sont :"
+
+#: index.docbook:360
+msgid "SchemaExport Connection Properties"
+msgstr "SchemaExport Connection Properties"
+
+#: index.docbook:366
+msgid "Property Name"
+msgstr "Nom de la propriété"
+
+#: index.docbook:372
+msgid "hibernate.connection.driver_class"
+msgstr "hibernate.connection.driver_class"
+
+#: index.docbook:373
+msgid "jdbc driver class"
+msgstr "classe du driver JDBC"
+
+#: index.docbook:376
+msgid "hibernate.connection.url"
+msgstr "hibernate.connection.url"
+
+#: index.docbook:377
+msgid "jdbc url"
+msgstr "URL JDBC"
+
+#: index.docbook:380
+msgid "hibernate.connection.username"
+msgstr "hibernate.connection.username"
+
+#: index.docbook:381
+msgid "database user"
+msgstr "utilisateur de la base de données"
+
+#: index.docbook:384
+msgid "hibernate.connection.password"
+msgstr "hibernate.connection.password"
+
+#: index.docbook:385
+msgid "user password"
+msgstr "mot de passe de l'utilisateur"
+
+#: index.docbook:388
+msgid "hibernate.dialect"
+msgstr "hibernate.dialect"
+
+#: index.docbook:389
+msgid "dialect"
+msgstr "dialecte"
+
+#: index.docbook:398
+msgid "Using Ant"
+msgstr "Utiliser Ant"
+
+#: index.docbook:400
+msgid "You can call <literal>SchemaExport</literal> from your Ant build script:"
+msgstr "Vous pouvez appeler <literal>SchemaExport</literal> depuis votre script de construction Ant :"
+
+#: index.docbook:404
+msgid ""
+ "<![CDATA[<target name=\"schemaexport\">\n"
+ " <taskdef name=\"schemaexport\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaexport\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\"\n"
+ " text=\"no\"\n"
+ " drop=\"no\"\n"
+ " delimiter=\";\"\n"
+ " output=\"schema-export.sql\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaexport>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"schemaexport\">\n"
+ " <taskdef name=\"schemaexport\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ "\n"
+ " <schemaexport\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\"\n"
+ " text=\"no\"\n"
+ " drop=\"no\"\n"
+ " delimiter=\";\"\n"
+ " output=\"schema-export.sql\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaexport>\n"
+ "</target>]]>"
+
+#: index.docbook:409
+msgid "Incremental schema updates"
+msgstr "Mises à jour incrémentales du schéma"
+
+#: index.docbook:411
+msgid "The <literal>SchemaUpdate</literal> tool will update an existing schema with \"incremental\" changes. Note that <literal>SchemaUpdate</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers."
+msgstr "L'outil <literal>SchemaUpdate</literal> mettra à jour un schéma existant en effectuant les changement par \"incrément\". Notez que <literal>SchemaUpdate</literal> dépends beaucoup de l'API JDBC metadata, il ne fonctionnera donc pas avec tous les drivers JDBC."
+
+#: index.docbook:417
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "<literal>java -cp </literal><emphasis>classpath_hibernate</emphasis> <literal>net.sf.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>options fichiers_de_mapping</emphasis>"
+
+#: index.docbook:423
+msgid "<literal>SchemaUpdate</literal> Command Line Options"
+msgstr "<literal>SchemaUpdate</literal> Options de ligne de commande"
+
+#: index.docbook:440
+msgid "don't export the script to the database"
+msgstr "ne pas exporter vers la base de données"
+
+#: index.docbook:452, index.docbook:513
+msgid "specify a <literal>.cfg.xml</literal> file"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+
+#: index.docbook:458
+msgid "You may embed <literal>SchemaUpdate</literal> in your application:"
+msgstr "Utiliser Ant pour des mises à jour de schéma par incrément"
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+msgstr "Vous pouvez appeler <literal>SchemaUpdate</literal> depuis le script Ant :"
+
+#: index.docbook:467
+msgid "Using Ant for incremental schema updates"
+msgstr ""
+ "<![CDATA[<target name=\"schemaupdate\">\n"
+ " <taskdef name=\"schemaupdate\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ "\n"
+ " <schemaupdate\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaupdate>\n"
+ "</target>]]>"
+
+#: index.docbook:469
+msgid "You can call <literal>SchemaUpdate</literal> from the Ant script:"
+msgstr "Validation du schéma"
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[<target name=\"schemaupdate\">\n"
+ " <taskdef name=\"schemaupdate\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaupdate\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaupdate>\n"
+ "</target>]]>"
+msgstr "L'outil <literal>SchemaValidator</literal> validera que le schéma existant correspond à vos documents de mapping. Notez que le <literal>SchemaValidator</literal> dépends de l'API metadata de JDBC, il ne fonctionnera donc pas avec tous les drivers JDBC. Cet outil est extrêmement utile pour tester."
+
+#: index.docbook:478
+msgid "Schema validation"
+msgstr "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaValidator</literal> <emphasis>options mapping_files</emphasis>"
+
+#: index.docbook:480
+msgid "The <literal>SchemaValidator</literal> tool will validate that the existing database schema \"matches\" your mapping documents. Note that <literal>SchemaValidator</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers. This tool is extremely useful for testing."
+msgstr "<literal>SchemaValidator</literal> Options de ligne de commande"
+
+#: index.docbook:486
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaValidator</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "Option"
+
+#: index.docbook:492
+msgid "<literal>SchemaValidator</literal> Command Line Options"
+msgstr "Description"
+
+#: index.docbook:519
+msgid "You may embed <literal>SchemaValidator</literal> in your application:"
+msgstr "Utiliser Ant pour la validation du Schéma"
+
+#: index.docbook:523
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaValidator(cfg).validate();]]>"
+msgstr "Vous pouvez appeler <literal>SchemaValidator</literal> depuis le script Ant:"
+
+#: index.docbook:528
+msgid "Using Ant for schema validation"
+msgstr ""
+ "<![CDATA[<target name=\"schemavalidate\">\n"
+ " <taskdef name=\"schemavalidator\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaValidatorTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemavalidator\n"
+ " properties=\"hibernate.properties\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemavalidator>\n"
+ "</target>]]>"
+
+#: index.docbook:530
+msgid "You can call <literal>SchemaValidator</literal> from the Ant script:"
+msgstr ""
+
+#: index.docbook:534
+msgid ""
+ "<![CDATA[<target name=\"schemavalidate\">\n"
+ " <taskdef name=\"schemavalidator\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaValidatorTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemavalidator\n"
+ " properties=\"hibernate.properties\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemavalidator>\n"
+ "</target>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/transactions.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/transactions.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/transactions.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,791 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Transactions And Concurrency"
+msgstr "Transactions et accès concurrents"
+
+#: index.docbook:7
+msgid "The most important point about Hibernate and concurrency control is that it is very easy to understand. Hibernate directly uses JDBC connections and JTA resources without adding any additional locking behavior. We highly recommend you spend some time with the JDBC, ANSI, and transaction isolation specification of your database management system."
+msgstr "L'un des principaux avantages du mécanisme de contrôle des accès concurrents d'Hibernate est qu'il est très facile à comprendre. Hibernate utilise directement les connexions JDBC ainsi que les ressources JTA sans y ajouter davantage de mécanisme de blocage. Nous vous recommandons de vous familiariser avec les spécifications JDBC, ANSI et d'isolement de transaction de la base de données que vous utilisez."
+
+#: index.docbook:14
+msgid "Hibernate does not lock objects in memory. Your application can expect the behavior as defined by the isolation level of your database transactions. Note that thanks to the <literal>Session</literal>, which is also a transaction-scoped cache, Hibernate provides repeatable reads for lookup by identifier and entity queries (not reporting queries that return scalar values)."
+msgstr "Hibernate ne vérouille pas vos objets en mémoire. Votre application peut suivre le comportement défini par le niveau d'isolation de vos transactions de base de données. Notez que grâce à la <literal>Session</literal>, qui est aussi un cache de scope transaction, Hibernate fournit des lectures répétées pour les récupération par identifiants et les requêtes d'entités (pas celle de valeurs scalaires)."
+
+#: index.docbook:22
+msgid "In addition to versioning for automatic optimistic concurrency control, Hibernate also offers a (minor) API for pessimistic locking of rows, using the <literal>SELECT FOR UPDATE</literal> syntax. Optimistic concurrency control and this API are discussed later in this chapter."
+msgstr "En addition au versionning pour le controle automatique de concurrence, Hibernate fournit une API (mineure) pour le verrouillage perssimiste des enregistrements, en générant une syntaxe <literal>SELECT FOR UPDATE</literal>. Le controle de concurrence optimiste et cette API seront détaillés plus tard dans ce chapitre."
+
+#: index.docbook:29
+msgid "We start the discussion of concurrency control in Hibernate with the granularity of <literal>Configuration</literal>, <literal>SessionFactory</literal>, and <literal>Session</literal>, as well as database transactions and long conversations."
+msgstr "Nous aborderons la gestion des accès concurrents en discutant de la granularité des objets <literal>Configuration</literal>, <literal>SessionFactory</literal>, et <literal>Session</literal>, ainsi que de certains concepts relatifs à la base de données et aux longues transactions applicatives."
+
+#: index.docbook:36
+msgid "Session and transaction scopes"
+msgstr "Gestion de session et délimitation de transactions"
+
+#: index.docbook:38
+msgid "A <literal>SessionFactory</literal> 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</literal> instance."
+msgstr "Il est important de savoir qu'un objet <literal>SessionFactory</literal> est un objet complexe et optimisé pour fonctionner avec les threads(thread- safe). Il est coûteux à créer et est ainsi prévu pour n'être instancié qu?une seule fois via un objet <literal>Configuration</literal> au démarrage de l'application, et être partagé par tous les threads d'une application."
+
+#: index.docbook:44
+msgid "A <literal>Session</literal> is an inexpensive, non-threadsafe object that should be used once, for a single request, a conversation, single unit of work, and then discarded. A <literal>Session</literal> will not obtain a JDBC <literal>Connection</literal> (or a <literal>Datasource</literal>) unless it is needed, hence consume no resources until used."
+msgstr "Un objet <literal>Session</literal> est relativement simple et n'est threadsafe. Il est également peu coûteux à créer. Il devrait n'être utilisé qu'une seule fois, pour un processus d'affaire ou une unité de travail ou une conversation et ensuite être relâché. Un objet <literal>Session</literal> ne tentera pas d'obtenir de connexion ( <literal>Connection</literal> ) JDBC (ou de <literal>Datasource</literal> ) si ce n'est pas nécessaire."
+
+#: index.docbook:52
+msgid "To complete this picture you also have to think about database transactions. A database transaction has to be as short as possible, to reduce lock contention in the database. Long database transactions will prevent your application from scaling to highly concurrent load. Hence, it is almost never good design to hold a database transaction open during user think time, until the unit of work is complete."
+msgstr "Afin de compléter ce tableau, vous devez également penser aux transactions de base de données. Une transaction de base de données se doit d'être la plus courte possible afin de réduire les risques de collision sur des enregistrements verrouillés. De longues transactions à la base de données nuiront à l'extensibilité de vos applications lorsque confrontées à de hauts niveaux de charge. Par conséquent, il n'est jamais bon de maintenir une transaction ouverte pendant la durée de reflexion de l'utilisateur, jusqu'a ce que l'unité de travail soit achevée."
+
+#: index.docbook:61
+msgid "What is the scope of a unit of work? Can a single Hibernate <literal>Session</literal> span several database transactions or is this a one-to-one relationship of scopes? When should you open and close a <literal>Session</literal> and how do you demarcate the database transaction boundaries?"
+msgstr "Maintenant, comment délimiter une unité de travail? Est-ce qu'une instance de <literal>Session</literal> peut avoir une durée de vie dépassant plusieurs transactions à la base de données, ou bien est-ce que celles-ci doivent être liées une à une? Quand faut-il ouvrir et fermer une <literal>Session</literal> ? Comment définir la démarcation de vos transactions à la base de données?"
+
+#: index.docbook:69
+msgid "Unit of work"
+msgstr "Unité de travail"
+
+#: index.docbook:71
+msgid "First, don't use the <emphasis>session-per-operation</emphasis> antipattern, that is, don't open and close a <literal>Session</literal> for every simple database call in a single thread! Of course, 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. (Note that this also means that auto-commit after every single SQL statement is useless in an application, this mode is intended for ad-hoc SQL console work. Hibernate disables, or expects the application server to do so, auto-commit mode immediately.) Database transactions are never optional, all communication with a database has to occur inside a transaction, no matter if you read or write data. As explained, 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 much more maintainable and extensible."
+msgstr "Il est important de mentionner que d'utiliser un paradigme <emphasis>session-par-operation</emphasis> est un anti-pattern. Autrement dit: n'ouvrez et ne fermez pas la <literal>Session</literal> à chacun de vos accès simples à la base de données dans un même thread! Bien sûr, le même raisonnement s'applique sur la gestion des transactions à la base de données. Les appels à la base de données devraient être faits en ordre et selon une séquence définie. Ils devraient également être regroupés en des unités de travail atomiques. (Notez que l?utilisation d?une connexion auto-commit constitue le même anti-pattern. Ce mode de fonctionnement existe pour les applications émettant des commandes SQL à partir d?une console. Hibernate désengage le mode auto-commit et s'attend à ce qu'un serveur d'applications le fasse également.) Les transactions avec la base de données ne sont jamais optionnelles, toute communication avec une base de données doit se dé!
rouler dans une transaction, peu importe si vous lisez ou écrivez des données. Comme évoqué, le comportement auto-commit pour lire les données devrait être évité, puisque plusieurs petites transactions ne seront jamais aussi efficaces qu'une seule plus grosse clairement définie comme unité de travail. Ce dernier choix et en plus beaucoup plus facile a maintenir et à faire évoluer."
+
+#: index.docbook:87
+msgid "The most common pattern in a multi-user client/server application is <emphasis>session-per-request</emphasis>. In this model, a request from the client is send to the server (where the Hibernate persistence layer runs), a new Hibernate <literal>Session</literal> is opened, and all database operations are executed in this unit of work. Once the work has been completed (and the response for the client has been prepared), the session is flushed and closed. You would also use a single database transaction to serve the clients request, starting and committing it when you open and close the <literal>Session</literal>. The relationship between the two is one-to-one and this model is a perfect fit for many applications."
+msgstr "Le pattern d'utilisation le plus fréquemment rencontré dans des applications clients serveur multi-usagers est le <emphasis>session-per-request</emphasis> (littéralement : Session par requête). Dans ce modèle, la requête d'un client est envoyée à un serveur (Où la couche de persistance est implémentée via Hibernate), une nouvelle <literal>Session</literal> est ouverte et toutes les opérations d'accès à la base de données sont exécutées à l'intérieur de celle-ci. Lorsque le travail est terminé (et que les réponses à envoyer au client ont été préparées), la session est flushée et fermée. Une seule transaction à la base de données peut être utilisée pour répondre à la requête du client. La transaction est démarrée et validée au même moment où la Session est ouverte et fermée. La relation entre la <literal>Session</literal> et la <literal>Transaction</literal> est donc one-to-one. Ce modèle permet de répondre parfaitement aux a!
ttentes de la grande majorité des applications."
+
+#: index.docbook:99
+msgid "The challenge lies in the implementation. Hibernate provides built-in management of the \"current session\" to simplify this pattern. All you have to do is start a transaction when a server request has to be processed, and end the transaction before the response is send to the client. You can do this in any way you like, common solutions are <literal>ServletFilter</literal>, 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 decide to use programmatic transaction demarcation, prefer the Hibernate <literal>Transaction</literal> API shown later in this chapter, for ease of use and code portability."
+msgstr "Le défi réside dans l'implémentation. Hibernate fournit une fonction de gestion de la \"session courante\" pour simplifier ce pattern. Tout ce que vous devez faire est démarrer une transaction lorsqu'une requête est traitée par le serveur, et la terminer avant que la réponse ne soit envoyée au client. Vous pouvez le faire de la manière que vous voulez, les solutions communes sont un <literal>ServletFilter</literal>, l'interception via AOP avec une pointcut sur les méthodes de type \"service\", ou un conteneur avec interception/proxy. Un conteneur EJB est un moyen standard d'implémenter ce genre d'acpect tranverse comme la démarcation des transactions sur les EJBs session, de manière déclarative avec CMT. Si vous décidez d'utiliser la démarcation programmatique des transactions, préferrez l'API Hibernate <literal>Transaction</literal> détaillée plus tard dans ce chapitre, afin de facilité l'utilisation et la portabilité du code."
+
+#: index.docbook:112
+msgid "Your application code can access a \"current session\" to process the request by simply calling <literal>sessionFactory.getCurrentSession()</literal> anywhere and as often as needed. You will always get a <literal>Session</literal> 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 "Votre application peut accéder la \"session courante\" pour exécuter une requête en invoquant simplement <literal>sessionFactory.getCurrentSession()</literal> n'importe où et autant de fois que souhaité. Vous obtiendrez toujours une <literal>Session</literal> dont le scope est la transaction courante avec la base de données. Ceci doit être configuré soit dans les ressources local ou dans l'environnement JTA, voir <xref linkend=\"architecture-current-session\"/>."
+
+#: index.docbook:120
+msgid "Sometimes it is convenient to extend the scope of a <literal>Session</literal> 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 complete is easy to do if you implement your own interceptor. However, it is not easily doable if you rely on EJBs with container-managed transactions, as 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 around this <emphasis>Open Session in View</emphasis> pattern."
+msgstr "Il est parfois utile d'étendre le scope d'une <literal>Session</literal> et d'une transaction à la base de données jusqu'à ce que \"la vue soit rendue\". Ceci est particulièrement utile dans des applications à base de servlet qui utilisent une phase de rendue séparée une fois que la réponse a été préparée. Etendre la transaction avec la base de données jusqu'à la fin du rendering de la vue est aisé si vous implémentez votre propre intercepteur. Cependant, ce n'est pas facile si vous vous appuyez sur les EJBs avec CMT, puisqu'une transaction sera achevée au retour de la méthode EJB, avant le rendu de la vue. Rendez vous sur le site Hibernate et sur le forum pour des astuces et des exemples sur le pattern <emphasis>Open Session in View</emphasis> pattern.."
+
+#: index.docbook:135
+msgid "Long conversations"
+msgstr "Longue conversation"
+
+#: index.docbook:137
+msgid "The session-per-request pattern is not the only useful concept you can use to design units of work. Many business processes require a whole series of interactions with the user interleaved with database accesses. In web and enterprise applications it is not acceptable for a database transaction to span a user interaction. Consider the following example:"
+msgstr "Le paradigme <emphasis>session-per-request</emphasis> n'est pas le seul élément à utiliser dans le design de vos unités de travail. Plusieurs processus d'affaire requièrent toute une série d'interactions avec l'utilisateur, entrelacées d'accès à la base de donnée. Dans une application Web ou une application d'entreprise, il serait inacceptable que la durée de vie d'une transaction s'étale sur plusieurs interactions avec l'usager. Considérez l'exemple suivant:"
+
+#: index.docbook:147
+msgid "The first screen of a dialog opens, the data seen by the user has been loaded in a particular <literal>Session</literal> and database transaction. The user is free to modify the objects."
+msgstr "Un écran s'affiche. Les données vues par l'usager ont été chargées dans l'instance d'un objet <literal>Session</literal> , dans le cadre d'une transaction de base de données. L'usager est libre de modifier ces objets."
+
+#: index.docbook:154
+msgid "The user clicks \"Save\" after 5 minutes and expects his modifications to be made persistent; he also expects that he was the only person editing this information and that no conflicting modification can occur."
+msgstr "L'usager clique \"Sauvegarder\" après 5 minutes et souhaite persister les modifications qu'il a apportées. Il s'attend à être la seule personne a avoir modifié ces données et qu'aucune modification conflictuelle ne se soit produite durant ce laps de temps."
+
+#: index.docbook:162
+msgid "We call this unit of work, from the point of view of the user, a long running <emphasis>conversation</emphasis> (or <emphasis>application transaction</emphasis>). There are many ways how you can implement this in your application."
+msgstr "Ceci s'appelle une unité de travail. Du point de vue de l'utilisateur: une <emphasis>conversation</emphasis> (ou <emphasis>transaction d'application</emphasis>). Il y a plusieurs façon de mettre ceci en place dans votre application."
+
+#: index.docbook:168
+msgid "A first naive implementation might keep the <literal>Session</literal> 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 of course an anti-pattern, since lock contention would not allow the application to scale with the number of concurrent users."
+msgstr "Une première implémentation naïve pourrait consister à garder la <literal>Session</literal> et la transaction à la base de données ouvertes durant le temps de travail de l'usager, à maintenir les enregistrements verrouillés dans la base de données afin d'éviter des modifications concurrentes et de maintenir l'isolation et l'atomicité de la transaction de l'usager. Ceci est un anti-pattern à éviter, puisque le verrouillage des enregistrements dans la base de données ne permettrait pas à l'application de gérer un grand nombre d'usagers concurrents."
+
+#: index.docbook:176
+msgid "Clearly, we have to use several database transactions to implement the converastion. 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 (e.g. in a wizard-style dialog spanning several request/response cycles). This is easier to implement than it might sound, especially if you use Hibernate's features:"
+msgstr "Il apparaît donc évident qu'il faille utiliser plusieurs transactions BDD afin d'implémenter la conversation. Dans ce cas, maintenir l'isolation des processus d'affaire devient partiellement la responsabilité de la couche applicative. Ainsi, la durée de vie d'une conversation devrait englober celle d'une ou de plusieurs transactions de base de données. Celle-ci sera atomique seulement si l'écriture des données mises à jour est faite exclusivement par la dernière transaction BDD la composant. Toutes les autres sous transactions BD ne doivent faire que la lecture de données. Ceci est relativement facile à mettre en place, surtout avec l'utilisation de certaines fonctionnalités d'Hibernate:"
+
+#: index.docbook:189
+msgid "<emphasis>Automatic Versioning</emphasis> - Hibernate can do automatic optimistic concurrency control for you, it can automatically detect if a concurrent modification occured during user think time. Usually we only check at the end of the conversation."
+msgstr "<emphasis>Versionnage Automatique</emphasis> - Hibernate peut gérer automatiquement les accès concurrents de manière optimiste et détecter si une modification concurrente s'est produite durant le temps de réflexion d'un usager."
+
+#: index.docbook:197
+msgid "<emphasis>Detached Objects</emphasis> - If you decide to use the already discussed <emphasis>session-per-request</emphasis> pattern, all loaded instances will be in 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</emphasis>. Automatic versioning is used to isolate concurrent modifications."
+msgstr "<emphasis>Objets Détachés</emphasis> - Si vous décidez d'utiliser le paradigme <emphasis>session-par-requête</emphasis> discuté plus haut, toutes les entités chargées en mémoire deviendront des objets détachés durant le temps de réflexion de l'usager. Hibernate vous permet de rattacher ces objets et de persister les modifications y ayant été apportées. Ce pattern est appelé: <emphasis>session-per- request-with-detached-objects</emphasis> (littéralement: session- par-requête-avec-objets-détachés). Le versionnage automatique est utilisé afin d'isoler les modifications concurrentes."
+
+#: index.docbook:207
+msgid "<emphasis>Extended (or Long) Session</emphasis> - The Hibernate <literal>Session</literal> may 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</literal> is usually not allowed to be flushed automatically, but explicitely."
+msgstr "<emphasis>Session Longues (conversation)</emphasis> - Une <literal>Session</literal> Hibernate peut être déconnectée de la couche JDBC sous-jacente après que commit() ait été appelé sur une transaction à la base de données et reconnectée lors d'une nouvelle requête-client. Ce pattern s'appelle: <emphasis>session-per-conversation</emphasis> (Littéralement: session-par- conversation) et rend superflu le rattachement des objets. Le versionnage automatique est utilisé afin d'isoler les modifications concurrentes."
+
+#: index.docbook:220
+msgid "Both <emphasis>session-per-request-with-detached-objects</emphasis> and <emphasis>session-per-conversation</emphasis> have advantages and disadvantages, we discuss them later in this chapter in the context of optimistic concurrency control."
+msgstr "Les deux patterns <emphasis>session-per-request-with- detached- objects</emphasis> (session-par-requête-avec-objets- détachés) et <emphasis>session-per-conversation</emphasis> (session-par-conversation) ont chacun leurs avantages et désavantages qui seront exposés dans ce même chapitre, dans la section au sujet du contrôle optimiste de concurrence."
+
+#: index.docbook:229
+msgid "Considering object identity"
+msgstr "L'identité des objets"
+
+#: index.docbook:231
+msgid "An application may concurrently access the same persistent state in two different <literal>Session</literal>s. However, an instance of a persistent class is never shared between two <literal>Session</literal> instances. Hence there are two different notions of identity:"
+msgstr "Une application peut accéder à la même entité persistante de manière concurrente dans deux <literal>Session</literal> s différentes. Toutefois, une instance d'une classe persistante n'est jamais partagée par deux instances distinctes de la classe <literal>Session</literal> . Il existe donc deux notions de l'identité d'un objet:"
+
+#: index.docbook:240
+msgid "Database Identity"
+msgstr "Identité BD"
+
+#: index.docbook:243
+msgid "foo.getId().equals( bar.getId() )"
+msgstr "foo.getId().equals( bar.getId() )"
+
+#: index.docbook:248
+msgid "JVM Identity"
+msgstr "Identité JVM"
+
+#: index.docbook:251
+msgid "foo==bar"
+msgstr "foo==bar"
+
+#: index.docbook:257
+msgid "Then for objects attached to a <emphasis>particular</emphasis> <literal>Session</literal> (i.e. in the scope of a <literal>Session</literal>) the two notions are equivalent, and JVM identity for database identity is guaranteed by Hibernate. However, 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 (automatic versioning) at flush/commit time, using an optimistic approach."
+msgstr "Ainsi, pour des objets attachés à une <literal>Session</literal> <emphasis>précise</emphasis> (dans la cadre d'exécution (scope) d'une instance de <literal>Session</literal> ), ces deux notions d'identité sont équivalentes et garanties par Hibernate. Par contre, si une application peut accéder de manière concurrente à la même entité persistante dans deux sessions différentes, les deux instances seront en fait différentes (en ce qui a trait à l'identité JVM). Les conflits sont résolus automatiquement par approche optimiste grâce au système de versionnage automatique lorsque <literal>Session.flush()</literal> ou <literal>Transaction.commit()</literal> est appelé."
+
+#: index.docbook:266
+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 only doesn't need expensive locking or other means of synchronization. The application never needs to synchronize on any business object, as long as it sticks to a single thread per <literal>Session</literal>. Within a <literal>Session</literal> the application may safely use <literal>==</literal> to compare objects."
+msgstr "Cette approche permet de reléguer à Hibernate et à la base de données sous-jacente le soin de gérer les problèmes d'accès concurrents. Cette manière de faire assure également une meilleure extensibilité de l'application puisque assurer l'identité JVM dans un thread ne nécessite pas de mécanismes de verrouillage coûteux ou d'autres dispositifs de synchronisation. Une application n'aura jamais le besoin de synchroniser des objets d'affaire tant qu'elle peut garantir qu'un seul thread aura accès à une instance de <literal>Session</literal> . Dans le cadre d'exécution d'un objet <literal>Session</literal> , l'application peut utiliser en toute sécurité <literal>== </literal> pour comparer des objets."
+
+#: index.docbook:275
+msgid "However, an application that uses <literal>==</literal> outside of a <literal>Session</literal>, might see unexpected results. This might occur even in some unexpected places, for example, if you put two detached instances into the same <literal>Set</literal>. Both might have the same database identity (i.e. they represent the same row), but JVM identity is by definition not guaranteed for instances in detached state. The developer has to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods in persistent classes and implement his own notion of object equality. There is one caveat: Never use the database identifier to implement equality, use a business key, 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</literal>, changing the hashcode breaks the contract of t!
he <literal>Set</literal>. Attributes for business keys don't 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</literal>. See the Hibernate website for a more thorough discussion of this issue. Also note that this is not a Hibernate issue, but simply how Java object identity and equality has to be implemented."
+msgstr "Une application qui utiliserait <literal>==</literal> à l'extérieur du cadre d'exécution d'une <literal>Session</literal> pourrait obtenir des résultats inattendus et causer certains effets de bords. Par exemple, si vous mettez 2 objets dans le même <literal>Set</literal> , ceux-ci pourraient avoir la même identité BD (i.e. ils représentent le même enregistrement), mais leur identité JVM pourrait être différente (elle ne peut, par définition, pas être garantie sur deux objets détachés). Le développeur doit donc redéfinir l'implémentation des méthodes <literal>equals()</literal> et <literal>hashcode()</literal> dans les classes persistantes et y adjoindre sa propre notion d'identité. Il existe toutefois une restriction: Il ne faut jamais utiliser uniquement l'identifiant de la base de données dans l'implémentation de l'égalité; Il faut utiliser une clé d'affaire, généralement une combinaison de plusieurs attributs uniques, si possible immu!
ables. Les identifiants de base de données vont changer si un objet transitoire (transient) devient persistant. Si une instance transitoire est contenue dans un <literal>Set</literal> , changer le hashcode brisera le contrat du <literal>Set</literal> . Les attributs pour les clés d'affaire n'ont pas à être aussi stables que des clés primaires de bases de données. Il suffit simplement qu'elles soient stables tant et aussi longtemps que les objets sont dans le même <literal>Set</literal> . Veuillez consulter le site web Hibernate pour des discussions plus pointues à ce sujet. Notez que ce concept n'est pas propre à Hibernate mais bien général à l'implémentation de l'identité et de l'égalité en Java."
+
+#: index.docbook:296
+msgid "Common issues"
+msgstr "Problèmes communs"
+
+#: index.docbook:298
+msgid "Never use the anti-patterns <emphasis>session-per-user-session</emphasis> or <emphasis>session-per-application</emphasis> (of course, there are rare exceptions to this rule). Note that some of the following issues might also appear with the recommended patterns, make sure you understand the implications before making a design decision:"
+msgstr "Bien qu'il puisse y avoir quelques rares exceptions à cette règle, il est recommandé de ne jamais utiliser les anti-patterns <emphasis>session-per- user-session</emphasis> et <emphasis>session-per-application</emphasis> . Vous trouverez ici- bas quelques problèmes que vous risquez de rencontrer si vous en faite l?utilisation. (Ces problèmes pourraient quand même survenir avec des patterns recommandés) Assurez-vous de bien comprendre les implications de chacun des patterns avant de prendre votre décision."
+
+#: index.docbook:307
+msgid "A <literal>Session</literal> is not thread-safe. Things which are supposed to work concurrently, like HTTP requests, session beans, or Swing workers, will cause race conditions if a <literal>Session</literal> instance would be shared. If you keep your Hibernate <literal>Session</literal> in your <literal>HttpSession</literal> (discussed later), you should consider synchronizing access to your Http session. Otherwise, a user that clicks reload fast enough may use the same <literal>Session</literal> in two concurrently running threads."
+msgstr "L'objet <literal>Session</literal> n?est pas conçu pour être utilisé par de multiples threads. En conséquence, les objets potentiellement multi-thread comme les requêtes HTTP, les EJB Session et Swing Worker, risquent de provoquer des conditions de course dans la <literal>Session</literal> si celle-ci est partagée. Dans un environnement web classique, il serait préférable de synchroniser les accès à la session http afin d?éviter qu?un usager ne recharge une page assez rapidement pour que deux requêtes s?exécutant dans des threads concurrents n?utilisent la même <literal>Session</literal> ."
+
+#: index.docbook:318
+msgid "An exception thrown by Hibernate means you have to rollback your database transaction and close the <literal>Session</literal> immediately (discussed later in more detail). If your <literal>Session</literal> is bound to the application, you have to stop the application. Rolling back the database transaction doesn't put your business objects back into the state they were at the start of the transaction. This means the database state and the business objects do get out of sync. Usually this is not a problem, because exceptions are not recoverable and you have to start over after rollback anyway."
+msgstr "Lorsque Hibernate lance une exception, le roll back de la transaction en cours doit être effectué et la <literal>Session</literal> doit être immédiatement fermée. (Ceci sera exploré plus tard dans le chapitre.) Si la <literal>Session</literal> est directement associée à une application, il faut arrêter l?application. Le roll back de la transaction ne remettra pas les objets dans leur état du début de la transaction. Ainsi, ceux-ci pourraient être désynchronisés d?avec les enregistrements. (Généralement, cela ne cause pas de réels problèmes puisque la plupart des exceptions sont non traitables et requièrent la reprise du processus d?affaire ayant échoué.)"
+
+#: index.docbook:330
+msgid "The <literal>Session</literal> caches every object that is in persistent state (watched and checked for dirty state by Hibernate). This means it grows endlessly until you get an OutOfMemoryException, if you keep it open for a long time or simply load too much data. One solution for this is to call <literal>clear()</literal> and <literal>evict()</literal> to manage the <literal>Session</literal> cache, but you most likely should consider a Stored Procedure if you need mass data operations. Some solutions are shown in <xref linkend=\"batch\"/>. Keeping a <literal>Session</literal> open for the duration of a user session also means a high probability of stale data."
+msgstr "La <literal>Session</literal> met en mémoire cache tous les objets persistants (les objets surveillés et dont l'état est géré par Hibernate.) Si la <literal>Session</literal> est ouverte indéfiniment ou si une trop grande quantité d'objets y est chargée, l?utilisation de la mémoire peut potentiellement croître jusqu?à atteindre le maximum allouable à l?application (java.lang.OutOfMemoryError.) Une solution à ce problème est d?appeler les méthodes <literal>Session.clear()</literal> et <literal>Session.evict()</literal> pour gérer la mémoire cache de la <literal>Session</literal> . Vous pouvez également utiliser des stored procedures si vous devez lancer des traitements sur de grandes quantités d?informations. Certaines solutions sont décrites ici : <xref linkend=\"batch\"/> . Garder une <literal>Session</literal> ouverte pour toute la durée d?une session usager augmente également considérablement le risque de travailler avec de l?information pÃ!
©rimée."
+
+#: index.docbook:348
+msgid "Database transaction demarcation"
+msgstr "Démarcation des transactions"
+
+#: index.docbook:350
+msgid "Datatabase (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 "La démarcation des transactions est importante dans le design d?une application. Aucune communication avec la base de données ne peut être effectuée à l?extérieur du cadre d?une transaction. (Il semble que ce concept soit mal compris par plusieurs développeurs trop habitués à utiliser le mode auto-commit.) Même si certains niveaux d'isolation et certaines possibilités offertes par les bases de données permettent de l?éviter, il n'est jamais désavantageux de toujours explicitement indiquer les bornes de transaction pour les opérations complexes comme pour les opérations simples de lecture."
+
+#: index.docbook:360
+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, in other words, begin, commit, or rollback database transactions himself. 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 "Une application utilisant Hibernate peut s'exécuter dans un environnement léger n?offrant pas la gestion automatique des transactions (application autonome, application web simple ou applications Swing) ou dans un environnement J2EE offrant des services de gestion automatique des transactions JTA. Dans un environnement simple, Hibernate a généralement la responsabilité de la gestion de son propre pool de connexions à la base de données. Le développeur de l'application doit manuellement délimiter les transactions. En d'autres mots, il appartient au développeur de gérer les appels à <literal>Transaction.begin()</literal> , <literal>Transaction.commit()</literal> et <literal>Transaction.rollback()</literal> . Un environnement transactionnel J2EE (serveur d'application J2EE) doit offrir la gestion des transactions au niveau du container J2EE. Les bornes de transaction peuvent normalement être définies de manière déclarative dans les descripteurs de dépl!
oiement d'EJB Session, par exemple. La gestion programmatique des transactions n'y est donc pas nécessaire. Même les appels à <literal>Session.flush()</literal> sont faits automatiquement."
+
+#: index.docbook:370
+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 you'd use programmatic transaction demaracation. Hibernate offers a wrapper API called <literal>Transaction</literal> 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 "Il peut être requis d'avoir une couche de persistance portable. Hibernate offre donc une API appelée <literal>Transaction</literal> qui sert d'enveloppe pour le système de transaction natif de l'environnement de déploiement. Il n'est pas obligatoire d'utiliser cette API mais il est fortement conseillé de le faire, sauf lors de l'utilisation de CMT Session Bean (EJB avec transactions gérées automatiquement par le container EJB)."
+
+#: index.docbook:379
+msgid "Usually, ending a <literal>Session</literal> involves four distinct phases:"
+msgstr "Il existe quatre étapes disctinctes lors de la fermeture d'une <literal>Session</literal>"
+
+#: index.docbook:385
+msgid "flush the session"
+msgstr "flush de la session"
+
+#: index.docbook:390
+msgid "commit the transaction"
+msgstr "commit de la transaction"
+
+#: index.docbook:395
+msgid "close the session"
+msgstr "Fermeture de la session (Close)"
+
+#: index.docbook:400
+msgid "handle exceptions"
+msgstr "<para>Gestion des exceptions</para>"
+
+#: index.docbook:406
+msgid "Flushing the session has been discussed earlier, we'll now have a closer look at transaction demarcation and exception handling in both managed- and non-managed environments."
+msgstr "La synchronisation de bdd depuis la session (flush) a déjà été expliqué, nous nous attarderons maintenant à la démarcation des transactions et à la gestion des exceptions dans les environnements légers et les environnements J2EE."
+
+#: index.docbook:413
+msgid "Non-managed environment"
+msgstr "Environnement non managé"
+
+#: index.docbook:415
+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 "Si la couche de persistance Hibernate s'exécute dans un environnement non managé, les connexions à la base de données seront généralement prises en charge par le mécanisme de pool d'Hibernate. La gestion de la session et de la transaction se fera donc de la manière suivante:"
+
+#: index.docbook:422
+msgid ""
+ "<![CDATA[// Non-managed environment idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[// Non-managed environment idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+
+#: index.docbook:424
+msgid "You don't have to <literal>flush()</literal> the <literal>Session</literal> explicitly - the call to <literal>commit()</literal> automatically triggers the synchronization (depending upon the <xref linkend=\"objectstate-flushing\"/>FlushMode for the session. A call to <literal>close()</literal> marks the end of a session. The main implication of <literal>close()</literal> is that the JDBC connection will be relinquished by the session. This Java code is portable and runs in both non-managed and JTA environments."
+msgstr "Vous n'avez pas à invoquer <literal>flush()</literal> explicitement sur la <literal>Session</literal> - l'appel de <literal>commit()</literal> déclenchera automatiquement la synchronisation (selon le <xref linkend=\"objectstate-flushing\"/>FlushMode de la session. Un appel à <literal>close()</literal> marque la fin de la session. La conséquence directe est que la connexion à la base de données sera relachée par la session. Ce code est portable est fonctionne dans les environnements non managé ET les environnements JTA."
+
+#: index.docbook:433
+msgid "A much more flexible solution is Hibernate's built-in \"current session\" context management, as described earlier:"
+msgstr "Une solution plus flexible est la gestion par contexte fourni par Hibernate que nous avons déjà rencontré:"
+
+#: index.docbook:438
+msgid ""
+ "<![CDATA[// Non-managed environment idiom with getCurrentSession()\n"
+ "try {\n"
+ " factory.getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " factory.getCurrentSession().getTransaction().commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " factory.getCurrentSession().getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[// Non-managed environment idiom with getCurrentSession()\n"
+ "try {\n"
+ " factory.getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " factory.getCurrentSession().getTransaction().commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " factory.getCurrentSession().getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+
+#: index.docbook:440
+msgid "You will very likely never 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</literal> (and usually can only clean up and exit) are in different layers. The current context management by Hibernate can significantly simplify this design, as all you need is access to a <literal>SessionFactory</literal>. Exception handling is discussed later in this chapter."
+msgstr "Vous ne verrez probablement jamais ces exemples de code dans les applications; les exceptions fatales (exceptions du système) ne devraient être traitées que dans la couche la plus \"haute\". En d'autres termes, le code qui exécute les appels à Hibernate (à la couche de persistance) et le code qui gère les <literal>RuntimeException</literal> (qui ne peut généralement effectuer qu'un nettoyage et une sortie) sont dans des couches différentes. La gestion du contexte courant par Hibernate peut simplifier notablement ce design, puisque vous devez accéder à la gestion des exceptions de la <literal>SessionFactory</literal>, ce qui est décrit plus tard dans ce chapitre."
+
+#: index.docbook:450
+msgid "Note that you should select <literal>org.hibernate.transaction.JDBCTransactionFactory</literal> (which is the default), and for the second example <literal>\"thread\"</literal> as your <literal>hibernate.current_session_context_class</literal>."
+msgstr "Notez que vous devriez sélectionner <literal>org.hibernate.transaction.JDBCTransactionFactory</literal> (le défaut), pour le second exemple <literal>\"thread\"</literal> comme <literal>hibernate.current_session_context_class</literal>."
+
+#: index.docbook:459
+msgid "Using JTA"
+msgstr "Utilisation de JTA"
+
+#: index.docbook:461
+msgid "If your persistence layer runs in an application server (e.g. 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 "Si votre couche de persistance s'exécute dans un serveur d'application (par exemple, derrière un EJB Session Bean), toutes les datasource utilisées par Hibernate feront automatiquement partie de transactions JTA globales. Hibernate propose deux stratégies pour réussir cette intégration."
+
+#: index.docbook:468
+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</literal> API. So, the transaction management code is identical to the non-managed environment."
+msgstr "Si vous utilisez des transactions gérées par un EJB (bean managed transactions - BMT), Hibernate informera le serveur d'application du début et de la fin des transactions si vous utilisez l'API <literal>Transaction</literal> . Ainsi, le code de gestion des transactions sera identique dans les deux types d'environnements."
+
+#: index.docbook:474
+msgid ""
+ "<![CDATA[// BMT idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[// BMT idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+
+#: index.docbook:476
+msgid "If you want to use a transaction-bound <literal>Session</literal>, that is, the <literal>getCurrentSession()</literal> functionality for easy context propagation, you will have to use the JTA <literal>UserTransaction</literal> API directly:"
+msgstr "Ou encore, avec la gestion automatique de contexte:"
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[// BMT idiom with getCurrentSession()\n"
+ "try {\n"
+ " UserTransaction tx = (UserTransaction)new InitialContext()\n"
+ " .lookup(\"java:comp/UserTransaction\");\n"
+ "\n"
+ " tx.begin();\n"
+ "\n"
+ " // Do some work on Session bound to transaction\n"
+ " factory.getCurrentSession().load(...);\n"
+ " factory.getCurrentSession().persist(...);\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[// BMT idiom with getCurrentSession()\n"
+ "try {\n"
+ " factory.getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " factory.getCurrentSession().getTransaction().commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " factory.getCurrentSession().getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+
+#: index.docbook:484
+msgid "With CMT, transaction demarcation is done in session bean deployment descriptors, not programatically, hence, the code is reduced to:"
+msgstr "Avec CMT, la démarcation des transactions est faite dans les descripteurs de déploiement des Beans Sessions et non de manière programmmatique, ceci réduit le code:"
+
+#: index.docbook:489
+msgid ""
+ "<![CDATA[// CMT idiom\n"
+ " Session sess = factory.getCurrentSession();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[// CMT idiom\n"
+ " Session sess = factory.getCurrentSession();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "]]>"
+
+#: index.docbook:491
+msgid "In a CMT/EJB even rollback happens automatically, since an unhandled <literal>RuntimeException</literal> thrown by a session bean method tells the container to set the global transaction to rollback. <emphasis>This means you do not need to use the Hibernate <literal>Transaction</literal> API at all with BMT or CMT, and you get automatic propagation of the \"current\" Session bound to the transaction.</emphasis>"
+msgstr "Dans un EJB CMT même le rollback intervient automatiquement, puisqu'une <literal>RuntimeException</literal> non traitée et soulevée par une méthode d'un bean session indique au conteneur d'annuler la transaction globale. <emphasis>Ceci veut donc dire que vous n'avez pas à utiliser l'API <literal>Transaction</literal> d'Hibernate dans CMT.</emphasis>"
+
+#: index.docbook:499
+msgid "Note that you should 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, when you configure Hibernate's transaction factory. Remember to also set <literal>hibernate.transaction.manager_lookup_class</literal>. Furthermore, make sure that your <literal>hibernate.current_session_context_class</literal> is either unset (backwards compatiblity), or set to <literal>\"jta\"</literal>."
+msgstr "Notez que le fichier de configuration Hibernate devrait contenir les valeurs <literal>org.hibernate.transaction.JTATransactionFactory</literal> dans un environnement BMT ou <literal>org.hibernate.transaction.CMTTransactionFactory</literal> dans un environnement CMT là où vous configurez votre transaction factory Hibernate. N'oubliez pas non plus de spécifier le paramètre <literal>org.hibernate.transaction.manager_lookup_class</literal> . De plus, assurez vous de fixez votre <literal>hibernate.current_session_context_class</literal> soit à <literal>\"jta\"</literal> ou de ne pas le configurer (compatibilité avec les versions précédentes)."
+
+#: index.docbook:508
+msgid "The <literal>getCurrentSession()</literal> operation has one downside in a JTA environment. There is one caveat to the use of <literal>after_statement</literal> connection release mode, which is then used by default. Due to a silly limitation of the JTA spec, it is not possible for Hibernate to automatically clean up any unclosed <literal>ScrollableResults</literal> or <literal>Iterator</literal> instances returned by <literal>scroll()</literal> or <literal>iterate()</literal>. You <emphasis>must</emphasis> release the underlying database cursor by calling <literal>ScrollableResults.close()</literal> or <literal>Hibernate.close(Iterator)</literal> explicity from a <literal>finally</literal> block. (Of course, most applications can easily avoid using <literal>scroll()</literal> or <literal>iterate()</literal> at all from the JTA or CMT code.)"
+msgstr "La méthode <literal>getCurrentSession()</literal> a un inconvénient dans les environnement JTA. Il y a une astuce qui est d'utiliser un mode de libération de connexion <literal>after_statement</literal> , qui est alors utilisé par défaut. Du à une étrange limitation de la spec JTA, il n'est pas possible pour Hibernate de nettoyer et ferme automatiquement un <literal>ScrollableResults</literal> ouvert ou une instance d'<literal>Iterator</literal> retournés <literal>scroll()</literal> ou <literal>iterate()</literal>. Vous <emphasis>devez</emphasis> libérer le curseur base de données sous jacent ou invoquer <literal>Hibernate.close(Iterator)</literal> explicitement depuis un bloc <literal>finally</literal>. (Bien sur, la plupart des applications peuvent éviter d'uiliser <literal>scroll()</literal> ou <literal>iterate()</literal> dans un code CMT.)"
+
+#: index.docbook:524
+msgid "Exception handling"
+msgstr "<title>Gestion des exceptions</title>"
+
+#: index.docbook:526
+msgid "If the <literal>Session</literal> throws an exception (including any <literal>SQLException</literal>), you should immediately rollback the database transaction, call <literal>Session.close()</literal> and discard the <literal>Session</literal> instance. Certain methods of <literal>Session</literal> will <emphasis>not</emphasis> leave the session in a consistent state. No exception thrown by Hibernate can be treated as recoverable. Ensure that the <literal>Session</literal> will be closed by calling <literal>close()</literal> in a <literal>finally</literal> block."
+msgstr "Si une <literal>Session</literal> lance une exception (incluant les exceptions du type <literal>SQLException</literal> ou d'un sous-type), vous devez immédiatement faire le rollback de la transaction, appeler <literal>Session.close()</literal> et relâcher les références sur l'objet <literal>Session</literal> . La <literal>Session</literal> contient des méthodes pouvant la mettre dans un état inutilisable. Vous devez considérer qu'<emphasis>aucune</emphasis> exception lancée par Hibernate n'est traitable. Assurez-vous de fermer la session en faisant l'appel à <literal>close()</literal> dans un bloc <literal>finally</literal> ."
+
+#: index.docbook:537
+msgid "The <literal>HibernateException</literal>, which wraps most of the errors that can occur in a Hibernate persistence layer, is an unchecked exception (it wasn't in older versions of Hibernate). In our opinion, we shouldn't 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 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 which are not a <literal>HibernateException</literal>. These are, again, not recoverable and appropriate action should be taken."
+msgstr "L'exception <literal>HibernateException</literal> , qui englobe la plupart des exceptions pouvant survenir dans la couche de persistance Hibernate, est une exception non vérifiée (Ceci n'était pas le cas dans certaines versions antérieures de Hibernate.) Il est de notre avis que nous ne devrions pas forcer un développeur à gérer une exception qu'il ne peut de toute façon pas traiter dans une couche technique. Dans la plupart des applications, les exceptions non vérifiées et les exceptions fatales sont gérées en amont du processus (dans les couches hautes) et un message d'erreur est alors affiché à l'usager (ou un traitement alternatif est invoqué.) Veuillez noter qu'Hibernate peut également lancer des exceptions non vérifiées d'un autre type que <literal>HibernateException</literal> . Celles-ci sont également non traitables et vous devez les traiter comme telles."
+
+#: index.docbook:549
+msgid "Hibernate wraps <literal>SQLException</literal>s thrown while interacting with the database in a <literal>JDBCException</literal>. In fact, Hibernate will attempt to convert the eexception into a more meningful subclass of <literal>JDBCException</literal>. The underlying <literal>SQLException</literal> is always available via <literal>JDBCException.getCause()</literal>. Hibernate converts the <literal>SQLException</literal> into an appropriate <literal>JDBCException</literal> subclass using the <literal>SQLExceptionConverter</literal> attached to the <literal>SessionFactory</literal>. By default, the <literal>SQLExceptionConverter</literal> is defined by the configured dialect; however, it is also possible to plug in a custom implementation (see the javadocs for the <literal>SQLExceptionConverterFactory</literal> class for details). The standard <literal>JDBCException</literal> subtypes are:"
+msgstr "Hibernate englobe les <literal>SQLException</literal> s lancées lors des interactions directes avec la base de données dans des exceptions de type: <literal>JDBCException</literal> . En fait, Hibernate essaiera de convertir l'exception dans un sous-type plus significatif de <literal>JDBCException</literal> . L'exception <literal>SQLException</literal> sous-jacente est toujours disponible via la méthode <literal>JDBCException.getCause()</literal> . Cette conversion est faite par un objet de type <literal>SQLExceptionConverter</literal> , qui est rattaché à l'objet <literal>SessionFactory</literal> . Par défaut, le <literal>SQLExceptionConverter</literal> est associé au dialecte de BD configuré dans Hibernate. Toutefois, il est possible de fournir sa propre implémentation de l'interface. (Veuillez vous référer à la javadoc sur la classe <literal>SQLExceptionConverterFactory</literal> pour plus de détails. Les sous-types standard de <literal>JDBCException<!
/literal> sont:"
+
+#: index.docbook:565
+msgid "<literal>JDBCConnectionException</literal> - indicates an error with the underlying JDBC communication."
+msgstr "<literal>JDBCConnectionException</literal> - Indique une erreur de communication avec la couche JDBC sous-jacente."
+
+#: index.docbook:571
+msgid "<literal>SQLGrammarException</literal> - indicates a grammar or syntax problem with the issued SQL."
+msgstr "<literal>SQLGrammarException</literal> - Indique un problème de grammaire ou de syntaxe avec la requête SQL envoyée."
+
+#: index.docbook:577
+msgid "<literal>ConstraintViolationException</literal> - indicates some form of integrity constraint violation."
+msgstr "<literal>ConstraintViolationException</literal> - Indique une violation de contrainte d'intégrité."
+
+#: index.docbook:583
+msgid "<literal>LockAcquisitionException</literal> - indicates an error acquiring a lock level necessary to perform the requested operation."
+msgstr "<literal>LockAcquisitionException</literal> - Indique une erreur de verrouillage lors de l'éxécution de la requête."
+
+#: index.docbook:589
+msgid "<literal>GenericJDBCException</literal> - a generic exception which did not fall into any of the other categories."
+msgstr "<literal>GenericJDBCException</literal> - Indique une erreur générique JDBC d'une autre catégorie."
+
+#: index.docbook:599
+msgid "Transaction timeout"
+msgstr "Timeout de transaction"
+
+#: index.docbook:601
+msgid "One extremely 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 functioanlity is abstracted by the Hibernate <literal>Transaction</literal> object."
+msgstr "L'un des avantages fournis par les environnements transactionnels JTA (tels les containers EJB) est la gestion du timeout de transaction. La gestion des dépassements de temps de transaction vise à s'assurer qu'une transaction agissant incorrectement ne viendra pas bloquer indéfiniment les ressources de l'application. Hibernate ne peut fournir cette fonctionnalité dans un environnement transactionnel non-JTA. Par contre, Hibernate gère les opérations d'accès aux données en allouant un temps maximal aux requêtes pour s'exécuter. Ainsi, une requête créant de l'inter blocage ou retournant de très grandes quantités d'information pourrait être interrompue. Dans un environnement transactionnel JTA, Hibernate peut déléguer au gestionnaire de transaction le soin de gérer les dépassements de temps. Cette fonctionnalité est abstraite par l'objet <literal>Transaction</literal> ."
+
+#: index.docbook:614
+msgid ""
+ "<![CDATA[\n"
+ "Session sess = factory.openSession();\n"
+ "try {\n"
+ " //set transaction timeout to 3 seconds\n"
+ " sess.getTransaction().setTimeout(3);\n"
+ " sess.getTransaction().begin();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " sess.getTransaction().commit()\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " sess.getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[\n"
+ " Session sess = factory.openSession();\n"
+ " try {\n"
+ " //mettre le timeout à 3 secondes.\n"
+ " sess.getTransaction().setTimeout(3);\n"
+ " sess.getTransaction().begin();\n"
+ "\n"
+ " // Effectuer le travail ...\n"
+ "\n"
+ " sess.getTransaction().commit()\n"
+ " }\n"
+ " catch (RuntimeException e) {\n"
+ " if ( sess.getTransaction().isActive() ) {\n"
+ " sess.getTransaction().rollback();\n"
+ " }\n"
+ " throw e;\n"
+ " // ou afficher le message d'erreur.\n"
+ " }\n"
+ " finally {\n"
+ " sess.close();\n"
+ " }]]>"
+
+#: index.docbook:616
+msgid "Note that <literal>setTimeout()</literal> may not be called in a CMT bean, where transaction timeouts must be defined declaratively."
+msgstr "Notez que <literal>setTimeout()</literal> ne peut pas être appelé d'un EJB CMT, puisque le timeout des transaction doit être spécifié de manière déclarative."
+
+#: index.docbook:626
+msgid "Optimistic concurrency control"
+msgstr "Contrôle de consurrence optimiste"
+
+#: index.docbook:628
+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 for three possible approaches to writing application code that uses optimistic concurrency. The use cases we show are in the context of long conversations, but version checking also has the benefit of preventing lost updates in single database transactions."
+msgstr "La gestion optimiste des accès concurrents avec versionnage est la seule approche pouvant garantir l'extensibilité des applications à haut niveau de charge. Le système de versionnage utilise des numéros de version ou l'horodatage pour détecter les mises à jour causant des conflits avec d'autres actualisations antérieures. Hibernate propose trois approches pour l'écriture de code applicatif utilisant la gestion optimiste d'accès concurrents. Le cas d'utilisation décrit plus bas fait mention de conversation, mais le versionnage peut également améliorer la qualité d'une application en prévenant la perte de mises à jour."
+
+#: index.docbook:639
+msgid "Application version checking"
+msgstr "Gestion du versionnage au niveau applicatif"
+
+#: index.docbook:641
+msgid "In an implementation without much help from Hibernate, each interaction with the database occurs in a new <literal>Session</literal> and the developer is responsible for reloading all persistent instances from the database before manipulating them. This approach forces the application 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 "Dans cet exemple d'implémentation utilisant peu les fonctionnalités d'Hibernate, chaque interaction avec la base de données se fait en utilisant une nouvelle <literal>Session</literal> et le développeur doit recharger les données persistantes à partir de la BD avant de les manipuler. Cette implémentation force l'application à vérifier la version des objets afin de maintenir l'isolation transactionnelle. Cette approche, semblable à celle retrouvée pour les EJB, est la moins efficace de celles présentées dans ce chapitre."
+
+#: index.docbook:650
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "\n"
+ "int oldVersion = foo.getVersion();\n"
+ "session.load( foo, foo.getKey() ); // load the current state\n"
+ "if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[// foo est une instance chargée antérieurement par une autre\n"
+ " Session session = factory.openSession();\n"
+ " Transaction t = session.beginTransaction();\n"
+ "\n"
+ " int oldVersion = foo.getVersion();\n"
+ " session.load( foo, foo.getKey() ); // Charger l'état courant\n"
+ "\n"
+ " if ( oldVersion != foo.getVersion() )\n"
+ " throw new StaleObjectStateException();\n"
+ "\n"
+ " foo.setProperty(\"bar\");\n"
+ " t.commit();\n"
+ " session.close();]]>"
+
+#: index.docbook:652
+msgid "The <literal>version</literal> property is mapped using <literal><version></literal>, and Hibernate will automatically increment it during flush if the entity is dirty."
+msgstr "Le mapping de la propriété <literal>version</literal> est fait via <literal><version></literal> et Hibernate l'incrémentera automatiquement à chaque flush() si l'entité doit être mise à jour."
+
+#: index.docbook:658
+msgid "Of course, if you are operating in a low-data-concurrency environment and don't require version checking, you may use this approach and just skip the version check. In that case, <emphasis>last commit wins</emphasis> will be the default strategy for your long conversations. Keep in mind 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 "Bien sûr, si votre application ne fait pas face à beaucoup d'accès concurrents et ne nécessite pas l'utilisation du versionnage, cette approche peut également être utilisée, il n'y a qu'à ignorer le code relié au versionnage. Dans ce cas, la stratégie du <emphasis>last commit wins</emphasis> (littéralement: le dernier commit l'emporte) sera utilisée pour les conversations (longues transactions applicatives). Gardez à l'esprit que cette approche pourrait rendre perplexe les utilisateurs de l'application car ils pourraient perdre des données mises à jour sans qu'aucun message d'erreur ne leur soit présenté et sans avoir la possibilité de fusionner les données."
+
+#: index.docbook:667
+msgid "Clearly, manual version checking is only feasible in very trivial circumstances and not practical for most applications. Often not only single instances, but complete graphs of modified ojects have to be checked. Hibernate offers automatic version checking with either an extended <literal>Session</literal> or detached instances as the design paradigm."
+msgstr "Il est clair que la gestion manuelle de la vérification du versionnage des objets ne peut être effectuée que dans certains cas triviaux et que cette approche n'est pas valable pour la plupart des applications. De manière générale, les applications ne cherchent pas à actualiser de simples objets sans relations, elles le font généralement pour de larges graphes d'objets. Pour toute application utilisant le paradigme des conversations ou des objets détachés, Hibernate peut gérer automatiquement la vérification des versions d'objets."
+
+#: index.docbook:678
+msgid "Extended session and automatic versioning"
+msgstr "Les sessions longues et le versionnage automatique."
+
+#: index.docbook:680
+msgid "A single <literal>Session</literal> instance and its persistent instances are used for the whole conversation, known as <emphasis>session-per-conversation</emphasis>. Hibernate checks instance versions at flush time, throwing an exception if concurrent modification is detected. It's 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 "Dans ce scénario, une seule instance de <literal>Session</literal> et des objets persistants est utilisée pour toute l'application. Hibernate vérifie la version des objets persistants avant d'effectuer le flush() et lance une exception si une modification concurrente est détectée. Il appartient alors au développeur de gérer l'exception. Les traitements alternatifs généralement proposés sont alors de permettre à l'usager de faire la fusion des données ou de lui offrir de recommencer son travail à partie des données les plus récentes dans la BD."
+
+#: index.docbook:689
+msgid "The <literal>Session</literal> 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 need not concern itself with version checking or with reattaching detached instances, nor does it have to reload instances in every database transaction."
+msgstr "Il est à noter que lorsqu'une application est en attente d'une action de la part de l?usager, La <literal>Session</literal> n'est pas connectée à la couche JDBC sous-jacente. C'est la manière la plus efficace de gérer les accès à la base de données. L'application ne devrait pas se préoccuper du versionnage des objets, de la réassociation des objets détachés, ni du rechargement de tous les objets à chaque transaction."
+
+#: index.docbook:697
+msgid ""
+ "<![CDATA[// foo is an instance loaded earlier by the old session\n"
+ "Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction\n"
+ "\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "session.flush(); // Only for last transaction in conversation\n"
+ "t.commit(); // Also return JDBC connection\n"
+ "session.close(); // Only for last transaction in conversation]]>"
+msgstr ""
+ "<![CDATA[// foo est une instance chargée antérieurement par une autre session\n"
+ "\n"
+ " session.reconnect();// Obtention d'une nouvelle connexion JDBC\n"
+ " Transaction t = session.beginTransaction();\n"
+ " foo.setProperty(\"bar\");\n"
+ " t.commit(); //Terminer la transaction, propager les changements et vérifier les versions.\n"
+ " session.disconnect(); // Retourner la connexion JDBC\n"
+ " ]]>"
+
+#: index.docbook:698
+msgid "The <literal>foo</literal> object still knows which <literal>Session</literal> 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 aren't updating, you may call <literal>Session.lock()</literal> with <literal>LockMode.READ</literal> on any objects that might have been updated by another transaction. You don't need to lock any data that you <emphasis>are</emphasis> updating. Usually you would set <literal>FlushMode.MANUAL</literal> on an extended <literal>Session</literal>, so that only the last database transaction cycle is allowed to actually persist all modifications made in this conversation. Hence, only this last database transaction would include the <literal>flush()</literal> operation, and then also <literal>close()!
</literal> the session to end the conversation."
+msgstr "L'objet <literal>foo</literal> sait quel objet <literal>Session</literal> l'a chargé. <literal>Session.reconnect()</literal> obtient une nouvelle connexion (celle-ci peut être également fournie) et permet à la session de continuer son travail. La méthode <literal>Session.disconnect()</literal> déconnecte la session de la connexion JDBC et retourne celle-ci au pool de connexion (à moins que vous ne lui ayez fourni vous même la connexion.) Après la reconnexion, afin de forcer la vérification du versionnage de certaines entités que vous ne cherchez pas à actualiser, vous pouvez faire un appel à <literal>Session.lock()</literal> en mode <literal>LockMode.READ</literal> pour tout objet ayant pu être modifié par une autre transaction. Il n'est pas nécessaire de verrouiller les données que vous désirez mettre à jour."
+
+#: index.docbook:713
+msgid "This pattern is problematic if the <literal>Session</literal> is too big to be stored during user think time, e.g. an <literal>HttpSession</literal> should be kept as small as possible. As the <literal>Session</literal> is also the (mandatory) first-level cache and contains all loaded objects, we can probably use this strategy only for a few request/response cycles. You should use a <literal>Session</literal> only for a single conversation, as it will soon also have stale data."
+msgstr "Si des appels implicites aux méthodes <literal>disconnect()</literal> et <literal>reconnect()</literal> sont trop coûteux, vous pouvez les éviter en utilisant <literal>hibernate.connection.release_mode</literal> ."
+
+#: index.docbook:723
+msgid "(Note that earlier Hibernate versions required explicit disconnection and reconnection of a <literal>Session</literal>. These methods are deprecated, as beginning and ending a transaction has the same effect.)"
+msgstr "Ce pattern peut présenter des problèmes si la <literal>Session</literal> est trop volumineuse pour être stockée entre les actions de l'usager. Plus spécifiquement, une session <literal>HttpSession</literal> se doit d'être la plus petite possible. Puisque la <literal>Session</literal> joue obligatoirement le rôle de mémoire cache de premier niveau et contient à ce titre tous les objets chargés, il est préférable de n'utiliser cette stratégie que pour quelques cycles de requêtes car les objets risquent d'y être rapidement périmés."
+
+#: index.docbook:729
+msgid "Also note that you should keep the disconnected <literal>Session</literal> close to the persistence layer. In other words, use an EJB stateful session bean to hold the <literal>Session</literal> in a three-tier environment, and don't transfer it to the web layer (or even serialize it to a separate tier) to store it in the <literal>HttpSession</literal>."
+msgstr "Notez que la <literal>Session</literal> déconnectée devrait être conservée près de la couche de persistance. Autrement dit, utilisez un EJB stateful pour conserver la <literal>Session</literal> et évitez de la sérialiser et de la transférer à la couche de présentation (i.e. Il est préférable de ne pas la conserver dans la session <literal>HttpSession</literal> .)"
+
+#: index.docbook:737
+msgid "The extended session pattern, or <emphasis>session-per-conversation</emphasis>, is more difficult to implement with automatic current session context management. You need to supply your own implementation of the <literal>CurrentSessionContext</literal> for this, see the Hibernate Wiki for examples."
+msgstr "Les objets détachés et le versionnage automatique"
+
+#: index.docbook:747
+msgid "Detached objects and automatic versioning"
+msgstr "Chaque interaction avec le système de persistance se fait via une nouvelle <literal>Session</literal> . Toutefois, les mêmes instances d'objets persistants sont réutilisées pour chacune de ces interactions. L'application doit pouvoir manipuler l'état des instances détachées ayant été chargées antérieurement via une autre session. Pour ce faire, ces objets persistants doivent être rattachés à la <literal>Session</literal> courante en utilisant <literal>Session.update()</literal> , <literal>Session.saveOrUpdate()</literal> , ou <literal>Session.merge()</literal> ."
+
+#: index.docbook:749
+msgid "Each interaction with the persistent store occurs in a new <literal>Session</literal>. However, the same persistent instances are reused for each interaction with the database. The application manipulates the state of detached instances originally loaded in another <literal>Session</literal> and then reattaches them using <literal>Session.update()</literal>, <literal>Session.saveOrUpdate()</literal>, or <literal>Session.merge()</literal>."
+msgstr ""
+ "<![CDATA[// foo est une instance chargée antérieurement par une autre session\n"
+ "\n"
+ " foo.setProperty(\"bar\");\n"
+ " session = factory.openSession();\n"
+ " Transaction t = session.beginTransaction();\n"
+ " session.saveOrUpdate(foo); //Utiliser merge() si \"foo\" pourrait avoir été chargé précédement\n"
+ " t.commit();\n"
+ " session.close();]]>"
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "foo.setProperty(\"bar\");\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "session.saveOrUpdate(foo); // Use merge() if \"foo\" might have been loaded already\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr "Encore une fois, Hibernate vérifiera la version des instances devant être actualisées durant le flush(). Une exception sera lancée si des conflits sont détectés."
+
+#: index.docbook:759
+msgid "Again, Hibernate will check instance versions during flush, throwing an exception if conflicting updates occured."
+msgstr "Vous pouvez également utiliser <literal>lock()</literal> au lieu de <literal>update()</literal> et utiliser le mode <literal>LockMode.READ</literal> (qui lancera une vérification de version, en ignorant tous les niveaux de mémoire cache) si vous êtes certain que l'objet n'a pas été modifié."
+
+#: index.docbook:764
+msgid "You may also call <literal>lock()</literal> instead of <literal>update()</literal> and use <literal>LockMode.READ</literal> (performing a version check, bypassing all caches) if you are sure that the object has not been modified."
+msgstr "Personnaliser le versionnage automatique"
+
+#: index.docbook:773
+msgid "Customizing automatic versioning"
+msgstr "Vous pouvez désactiver l'incrémentation automatique du numéro de version de certains attributs et collections en mettant la valeur du paramètre de mapping <literal>optimistic-lock</literal> à false. Hibernate cessera ainsi d'incrémenter leur numéro de version s'ils sont mis à jour."
+
+#: index.docbook:775
+msgid "You may disable Hibernate's automatic version increment for particular properties and collections by setting the <literal>optimistic-lock</literal> mapping attribute to <literal>false</literal>. Hibernate will then no longer increment versions if the property is dirty."
+msgstr "Certaines entreprises possèdent de vieux systèmes dont les schémas de bases de données sont statiques et ne peuvent être modifiés. Il existe aussi des cas où plusieurs applications doivent accéder à la même base de données, mais certaines d'entre elles ne peuvent gérer les numéros de version ou les champs horodatés. Dans les deux cas, le versionnage ne peut être implanté par le rajout d'une colonne dans la base de données. Afin de forcer la vérification de version dans un système sans en faire le mapping, mais en forçant une comparaison des états de tous les attributs d'une entité, vous pouvez utiliser l'attribut <literal>optimistic- lock=\"all\"</literal> sous l'élément <literal><class></literal> . Veuillez noter que cette manière de gérer le versionnage ne peut être utilisée que si l'application utilises de longues sessions, lui permettant de comparer l'ancien état et le nouvel état d'une entité. L'utilisation d'un pattern <lit!
eral>session-per-request-with-detached- objects</literal> devient alors impossible."
+
+#: index.docbook:782
+msgid "Legacy database schemas are often static and can't be modified. Or, other applications might also access the same database and don't know how to handle version numbers or even timestamps. In both cases, versioning can't rely on a particular column in a table. To force a version check without a version or timestamp property mapping, with a comparison of the state of all fields in a row, turn on <literal>optimistic-lock=\"all\"</literal> in the <literal><class></literal> mapping. Note that this concepetually only works if Hibernate can compare the old and new state, i.e. if you use a single long <literal>Session</literal> and not session-per-request-with-detached-objects."
+msgstr "Il peut être souhaitable de permettre les modifications concurrentes lorsque des champs distincts sont modifiés. En mettant la propriété <literal>optimistic-lock=\"dirty\"</literal> dans l'élément <literal><class></literal> , Hibernate ne fera la comparaison que des champs devant être actualisés lors du flush()."
+
+#: index.docbook:793
+msgid "Sometimes concurrent modification can be permitted as long as the changes that have been made don't overlap. If you set <literal>optimistic-lock=\"dirty\"</literal> when mapping the <literal><class></literal>, Hibernate will only compare dirty fields during flush."
+msgstr "Dans les deux cas: en utilisant une colonne de version/horodatée ou via la comparaison de l'état complet de l'objet ou de ses champs modifiés, Hibernate ne créera qu'une seule commande d'UPDATE par entité avec la clause WHERE appropriée pour mettre à jour l'entité <emphasis>ET</emphasis> en vérifier la version. Si vous utilisez la persistance transitive pour propager l'évènement de rattachement à des entités associées, il est possible qu'Hibernate génère des commandes d'UPDATE inutiles. Ceci n'est généralement pas un problème, mais certains déclencheurs <emphasis>on update</emphasis> dans la base de données pourraient être activés même si aucun changement n'était réellement persisté sur des objets associés. Vous pouvez personnaliser ce comportement en indiquant <literal>select-before- update=\"true\"</literal> dans l'élément de mapping <literal><class></literal> . Ceci forcera Hibernate à faire le SELECT de l'instance afin de s'a!
ssurer que l'entité doit réellement être actualisée avant de lancer la commande d'UPDATE."
+
+#: index.docbook:799
+msgid "In both cases, with dedicated version/timestamp columns or with full/dirty field comparison, Hibernate uses a single <literal>UPDATE</literal> statement (with an appropriate <literal>WHERE</literal> clause) per entity to execute the version check and update the information. If you use transitive persistence to cascade reattachment to associated entities, Hibernate might execute uneccessary updates. This is usually not a problem, but <emphasis>on update</emphasis> 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\"</literal> in the <literal><class></literal> mapping, forcing Hibernate to <literal>SELECT</literal> the instance to ensure that changes did actually occur, before updating the row."
+msgstr "Verouillage pessimiste"
+
+#: index.docbook:817
+msgid "Pessimistic Locking"
+msgstr "Il n'est nécessaire de s'attarder à la stratégie de verrouillage des entités dans une application utilisant Hibernate. Il est généralement suffisant de définir le niveau d'isolation pour les connexions JDBC et de laisser ensuite la base de donnée effectuer son travail. Toutefois, certains utilisateurs avancés peuvent vouloir obtenir un verrouillage pessimiste exclusif sur un enregistrement et le réobtenir au lancement d'une nouvelle transaction."
+
+#: index.docbook:819
+msgid "It is not intended that users spend much time worring about locking strategies. Its 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 sometimes wish to obtain exclusive pessimistic locks, or re-obtain locks at the start of a new transaction."
+msgstr "Hibernate utilisera toujours le mécanisme de verrouillage de la base de données et ne verrouillera jamais les objets en mémoire!"
+
+#: index.docbook:826
+msgid "Hibernate will always use the locking mechanism of the database, never lock objects in memory!"
+msgstr "La classe <literal>LockMode</literal> définit les différents niveaux de verrouillage pouvant être obtenus par Hibernate. Le verrouillage est obtenu par les mécanismes suivants:"
+
+#: index.docbook:831
+msgid "The <literal>LockMode</literal> class defines the different lock levels that may be acquired by Hibernate. A lock is obtained by the following mechanisms:"
+msgstr "<literal>LockMode.WRITE</literal> est obtenu automatiquement quand Hibernate actualise ou insert un enregistrement."
+
+#: index.docbook:838
+msgid "<literal>LockMode.WRITE</literal> is acquired automatically when Hibernate updates or inserts a row."
+msgstr "<literal>LockMode.UPGRADE</literal> peut être obtenu de manière explicite via la requête en utilisant <literal>SELECT ... FOR UPDATE</literal> sur une base de données supportant cette syntaxe."
+
+#: index.docbook:844
+msgid "<literal>LockMode.UPGRADE</literal> may be acquired upon explicit user request using <literal>SELECT ... FOR UPDATE</literal> on databases which support that syntax."
+msgstr "<literal>LockMode.UPGRADE_NOWAIT</literal> peut être obtenu de manière explicite en utilisant <literal>SELECT ... FOR UPDATE NOWAIT</literal> sur Oracle."
+
+#: index.docbook:850
+msgid "<literal>LockMode.UPGRADE_NOWAIT</literal> may be acquired upon explicit user request using a <literal>SELECT ... FOR UPDATE NOWAIT</literal> under Oracle."
+msgstr "<literal>LockMode.READ</literal> est obtenu automatiquement quand Hibernate lit des données dans un contexte d'isolation <literal>Repeatable Read</literal> ou <literal>Serializable</literal> . Peut être réobtenu explicitement via une requête."
+
+#: index.docbook:856
+msgid "<literal>LockMode.READ</literal> is acquired automatically when Hibernate reads data under Repeatable Read or Serializable isolation level. May be re-acquired by explicit user request."
+msgstr "<literal>LockMode.NONE</literal> représente l'absence de verouillage. Tous les objets migrent vers ce mode a la fin d'une <literal>Transaction</literal> . Les objets associés à une session via un appel à <literal>saveOrUpdate()</literal> commencent également leur cycle de vie dans cet état."
+
+#: index.docbook:863
+msgid "<literal>LockMode.NONE</literal> represents the absence of a lock. All objects switch to this lock mode at the end of a <literal>Transaction</literal>. Objects associated with the session via a call to <literal>update()</literal> or <literal>saveOrUpdate()</literal> also start out in this lock mode."
+msgstr "Les niveaux de verrouillage peuvent être explicitement obtenus de l'une des manières suivantes:"
+
+#: index.docbook:872
+msgid "The \"explicit user request\" is expressed in one of the following ways:"
+msgstr "Un appel à <literal>Session.load()</literal> , en spécifiant un niveau verrouillage <literal>LockMode</literal> ."
+
+#: index.docbook:878
+msgid "A call to <literal>Session.load()</literal>, specifying a <literal>LockMode</literal>."
+msgstr "Un appel à <literal>Session.lock()</literal> ."
+
+#: index.docbook:883
+msgid "A call to <literal>Session.lock()</literal>."
+msgstr "Une appel à <literal>Query.setLockMode()</literal> ."
+
+#: index.docbook:888
+msgid "A call to <literal>Query.setLockMode()</literal>."
+msgstr "Si <literal>Session.load()</literal> est appelé avec le paramètre de niveau de verouillage <literal>UPGRADE</literal> ou <literal>UPGRADE_NOWAIT</literal> et que l'objet demandé n'est pas présent dans la session, celui-ci sera chargé à l'aide d'une requête <literal>SELECT ... FOR UPDATE</literal> . Si la méthode <literal>load()</literal> est appelée pour un objet déjà en session avec un verrouillage moindre que celui demandé, Hibernate appellera la méthode <literal>lock()</literal> pour cet objet."
+
+#: index.docbook:894
+msgid "If <literal>Session.load()</literal> is called with <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, and the requested object was not yet loaded by the session, the object is loaded using <literal>SELECT ... FOR UPDATE</literal>. If <literal>load()</literal> is called for an object that is already loaded with a less restrictive lock than the one requested, Hibernate calls <literal>lock()</literal> for that object."
+msgstr "<literal>Session.lock()</literal> effectue une vérification de version si le niveau de verrouillage est <literal>READ</literal> , <literal>UPGRADE</literal> ou <literal>UPGRADE_NOWAIT</literal> . (Dans le cas des niveaux <literal>UPGRADE</literal> ou <literal>UPGRADE_NOWAIT</literal> , une requête <literal>SELECT ... FOR UPDATE</literal> sera utilisée.)"
+
+#: index.docbook:903
+msgid "<literal>Session.lock()</literal> performs a version number check if the specified lock mode is <literal>READ</literal>, <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>. (In the case of <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, <literal>SELECT ... FOR UPDATE</literal> is used.)"
+msgstr "Si une base de données ne supporte pas le niveau de verrouillage demandé, Hibernate utilisera un niveau alternatif convenable au lieux de lancer une exception. Ceci assurera la portabilité de votre application."
+
+#: index.docbook:910
+msgid "If the database does not support the requested lock mode, Hibernate will use an appropriate alternate mode (instead of throwing an exception). This ensures that applications will be portable."
+msgstr "Mode de libération de Connection"
+
+#: index.docbook:919
+msgid "Connection Release Modes"
+msgstr "Le comportement original (2.x) d'Hibernate pour la gestion des connexions JDBC était que la <literal>Session</literal> obtenait une connexion dès qu'elle en avait besoin et la libérait une fois la session fermée. Hibernate 3 a introduit les modes de libération de connexion pour indiquer à la session comment gérer les transactions JDBC. Notez que la discussion suivante n'est pertinente que pour des connexions fournies par un <literal>ConnectionProvider</literal>, celles gérées par l'utilisateur sont en dehors du scope de cette discussion. Les différents modes sont définies par <literal>org.hibernate.ConnectionReleaseMode</literal>:"
+
+#: index.docbook:921
+msgid "The legacy (2.x) behavior of Hibernate in regards to JDBC connection management was that a <literal>Session</literal> would obtain a connection when it was first needed and then hold unto that connection until the session was closed. Hibernate 3.x introduced the notion of connection release modes to tell a session how to handle its JDBC connections. Note that the following discussion is pertinent only to connections provided through a configured <literal>ConnectionProvider</literal>; 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</literal>:"
+msgstr "<literal>ON_CLOSE</literal> - est essentiellement le comportement passé. La session Hibernate obtient une connexion lorsqu'elle en a besoin et la garde jusqu'à ce que la session se ferme."
+
+#: index.docbook:935
+msgid "<literal>ON_CLOSE</literal> - is essentially the legacy behavior described above. The Hibernate session obatins a connection when it first needs to perform some JDBC access and holds unto that connection until the session is closed."
+msgstr "<literal>AFTER_TRANSACTION</literal> - indique de relacher la connexion après qu'une <literal>org.hibernate.Transaction</literal> se soit achevée."
+
+#: index.docbook:942
+msgid "<literal>AFTER_TRANSACTION</literal> - says to release connections after a <literal>org.hibernate.Transaction</literal> has completed."
+msgstr "<literal>AFTER_STATEMENT</literal> (aussi appelé libération brutale) - indique de relacher les connexions après chaque exécution d'un statement. Ce relachement aggressif est annulé si ce statement laisse des ressources associées à une session donnée ouvertes, actuellement ceci n'arrive que lors de l'utilisation de <literal>org.hibernate.ScrollableResults</literal>."
+
+#: index.docbook:948
+msgid "<literal>AFTER_STATEMENT</literal> (also referred to as aggressive release) - says to release connections after each and 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</literal>."
+msgstr "Le paramètre de configuration <literal>hibernate.connection.release_mode</literal> est utilisé pour spécifier quel mode de libération doit être utiliser. Les valeurs possibles sont:"
+
+#: index.docbook:958
+msgid "The configuration parameter <literal>hibernate.connection.release_mode</literal> is used to specify which release mode to use. The possible values:"
+msgstr "<literal>auto</literal> (valeur par défaut) - ce choix délègue le choix de libération à la méthode <literal>org.hibernate.transaction.TransactionFactory.getDefaultReleaseMode()</literal> Pour la JTATransactionFactory, elle retourne ConnectionReleaseMode.AFTER_STATEMENT; pour JDBCTransactionFactory, elle retourne ConnectionReleaseMode.AFTER_TRANSACTION. C'est rarement une bonne idée de changer ce comportement par défaut puisque les erreurs soulevées par ce paramétrage tend à prouver une erreur dans le code de l'utilisateur."
+
+#: index.docbook:965
+msgid "<literal>auto</literal> (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. It is rarely a good idea to 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>on_close</literal> - indique d'utiliser ConnectionReleaseMode.ON_CLOSE. Ce paramétrage existe pour garantir la compatibilité avec les versions précédentes, mais ne devrait plus être utilisé."
+
+#: index.docbook:975
+msgid "<literal>on_close</literal> - says to use ConnectionReleaseMode.ON_CLOSE. This setting is left for backwards compatibility, but its use is highly discouraged."
+msgstr "<literal>after_transaction</literal> - indique d'utiliser ConnectionReleaseMode.AFTER_TRANSACTION. Ne devrait pas être utilisé dans les environnements JTA. Notez aussi qu'avec ConnectionReleaseMode.AFTER_TRANSACTION, si une session est considérée comme étant en mode auto-commit les connexions seront relachées comme si le mode était AFTER_STATEMENT."
+
+#: index.docbook:981
+msgid "<literal>after_transaction</literal> - says to use 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_statement</literal> - indique d'utiliser ConnectionReleaseMode.AFTER_STATEMENT. Additonnellement, le <literal>ConnectionProvider</literal> utilisé est consulté pour savoir s'il supporte ce paramétrage (<literal>supportsAggressiveRelease()</literal>). Si ce n'est pas le cas, le mode de libération est ré initialisé à ConnectionReleaseMode.AFTER_TRANSACTION. Ce paramétrage n'est sûr que dans les environnements où il est possible d'obtenir à nouveau la même connexion JDBC à chaque fois que l'on fait un appel de <literal>ConnectionProvider.getConnection()</literal> ou dans les envrionnements auto-commit où il n'est pas important d'obtenir plusieurs fois la même connexion."
+
+#: index.docbook:989
+msgid "<literal>after_statement</literal> - says to use ConnectionReleaseMode.AFTER_STATEMENT. Additionally, the configured <literal>ConnectionProvider</literal> is consulted to see if it supports this setting (<literal>supportsAggressiveRelease()</literal>). 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 we make a call into <literal>ConnectionProvider.getConnection()</literal> or in auto-commit environments where it does not matter whether we get back the same connection."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/tutorial.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/tutorial.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/tutorial.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1891 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:7
+msgid "Introduction to Hibernate"
+msgstr "Introduction à Hibernate"
+
+#: index.docbook:10
+msgid "Preface"
+msgstr "Préface"
+
+#: index.docbook:12
+msgid "This chapter is an introductory tutorial for new users of Hibernate. We start with a simple command line application using an in-memory database and develop it in easy to understand steps."
+msgstr "Ce chapitre est un didacticiel introductif destiné aux nouveaux utilisateurs d'Hibernate. Nous commençons avec une simple application en ligne de commande utilisant une base de données en mémoire, et la développons en étapes faciles à comprendre."
+
+#: index.docbook:18
+msgid "This tutorial is intended for new users of Hibernate but requires Java and SQL knowledge. It is based on a tutorial by Michael Gloegl, the third-party libraries we name are for JDK 1.4 and 5.0. You might need others for JDK 1.3."
+msgstr "Ce didacticiel est destiné aux nouveaux utilisateurs d'Hibernate mais requiert des connaissances Java et SQL. Il est basé sur un didacticiel de Michael Gloegl, les bibliothèques tierces que nous nommons sont pour les JDK 1.4 et 5.0. Vous pourriez avoir besoin d'autres bibliothèques pour le JDK 1.3."
+
+#: index.docbook:24
+msgid "The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr "Le code source de ce tutoriel est inclus dans la distribution dans le répertoire <literal>doc/reference/tutorial/</literal>."
+
+#: index.docbook:32
+msgid "Part 1 - The first Hibernate Application"
+msgstr "Partie 1 - Première application Hibernate"
+
+#: index.docbook:34
+msgid "First, we'll create a simple console-based Hibernate application. We use an Java database (HSQL DB), so we do not have to install any database server."
+msgstr "D'abord, nous créerons une simple application Hibernate en console. Nous utilisons une base de données en mémoire (HSQL DB), donc nous n'avons pas à installer de serveur de base de données."
+
+#: index.docbook:39
+msgid "Let's assume we need a small database application that can store events we want to attend, and information about the hosts of these events."
+msgstr "Supposons que nous ayons besoin d'une petite application de base de données qui puisse stocker des événements que nous voulons suivre, et des informations à propos des hôtes de ces événements."
+
+#: index.docbook:44
+msgid "The first thing we do, is set up our development directory and put all the Java libraries we need into it. Download the Hibernate distribution from the Hibernate website. Extract the package and place all required libraries found in <literal>/lib</literal> into into the <literal>/lib</literal> directory of your new development working directory. It should look like this:"
+msgstr "La première chose que nous faisons est de configurer notre répertoire de développement et de mettre toutes les bibliothèques dont nous avons besoin dedans. Téléchargez la distribution Hibernate à partir du site web d'Hibernate. Extrayez le paquet et placez toutes les bibliothèques requises trouvées dans <literal>/lib</literal> dans le répertoire <literal>/lib</literal> de votre nouveau répertoire de travail. Il devrait ressembler à ça :"
+
+#: index.docbook:52
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " antlr.jar\n"
+ " cglib.jar\n"
+ " asm.jar\n"
+ " asm-attrs.jars\n"
+ " commons-collections.jar\n"
+ " commons-logging.jar\n"
+ " hibernate3.jar\n"
+ " jta.jar\n"
+ " dom4j.jar\n"
+ " log4j.jar ]]>"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " antlr.jar\n"
+ " cglib-full.jar\n"
+ " asm.jar\n"
+ " asm-attrs.jars\n"
+ " commons-collections.jar\n"
+ " commons-logging.jar\n"
+ " ehcache.jar\n"
+ " hibernate3.jar\n"
+ " jta.jar\n"
+ " dom4j.jar\n"
+ " log4j.jar ]]>"
+
+#: index.docbook:54
+msgid "This is the minimum set of required libraries (note that we also copied hibernate3.jar, the main archive) for Hibernate <emphasis>at the time of writing</emphasis>. The Hibernate release you are using might require more or less libraries. See the <literal>README.txt</literal> file in the <literal>lib/</literal> directory of the Hibernate distribution for more information about required and optional third-party libraries. (Actually, Log4j is not required but preferred by many developers.)"
+msgstr "Ceci est l'ensemble minimum de bibliothèques requises (notez que nous avons aussi copié hibernate3.jar, l'archive principale) pour Hibernate. Lisez le fichier <literal>README.txt</literal> dans le répertoire <literal>lib/</literal> de la distribution Hibernate pour plus d'informations à propos des biliothèques tierces requises et optionnelles. (En fait, log4j n'est pas requis mais préféré par beaucoup de développeurs.)"
+
+#: index.docbook:63
+msgid "Next we create a class that represents the event we want to store in database."
+msgstr "Ensuite, nous créons une classe qui réprésente l'événement que nous voulons stocker dans notre base de données."
+
+#: index.docbook:68
+msgid "The first class"
+msgstr "La première classe"
+
+#: index.docbook:70
+msgid "Our first persistent class is a simple JavaBean class with some properties:"
+msgstr "Notre première classe persistante est une simple classe JavaBean avec quelques propriétés :"
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Event {\n"
+ " private Long id;\n"
+ "\n"
+ " private String title;\n"
+ " private Date date;\n"
+ "\n"
+ " public Event() {}\n"
+ "\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public Date getDate() {\n"
+ " return date;\n"
+ " }\n"
+ "\n"
+ " public void setDate(Date date) {\n"
+ " this.date = date;\n"
+ " }\n"
+ "\n"
+ " public String getTitle() {\n"
+ " return title;\n"
+ " }\n"
+ "\n"
+ " public void setTitle(String title) {\n"
+ " this.title = title;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Event {\n"
+ " private Long id;\n"
+ "\n"
+ " private String title;\n"
+ " private Date date;\n"
+ "\n"
+ " public Event() {}\n"
+ "\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public Date getDate() {\n"
+ " return date;\n"
+ " }\n"
+ "\n"
+ " public void setDate(Date date) {\n"
+ " this.date = date;\n"
+ " }\n"
+ "\n"
+ " public String getTitle() {\n"
+ " return title;\n"
+ " }\n"
+ "\n"
+ " public void setTitle(String title) {\n"
+ " this.title = title;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:76
+msgid "You can see that this class uses standard JavaBean naming conventions for property getter and setter methods, as well as private visibility for the fields. This is a recommended design - but not required. Hibernate can also access fields directly, the benefit of accessor methods is robustness for refactoring. The no-argument constructor is required to instantiate an object of this class through reflection."
+msgstr "Vous pouvez voir que cette classe utilise les conventions de nommage standard JavaBean pour les méthodes getter/setter des propriétés, ainsi qu'une visibilité privée pour les champs. Ceci est la conception recommandée - mais pas obligatoire. Hibernate peut aussi accéder aux champs directement, le bénéfice des méthodes d'accès est la robustesse pour la refonte de code. Le constructeur sans argument est requis pour instancier un objet de cette classe via reflexion."
+
+#: index.docbook:84
+msgid "The <literal>id</literal> property holds a unique identifier value for a particular event. All persistent entity classes (there are less important dependent classes as well) will need such an identifier property if we want to use the full feature set of Hibernate. In fact, most applications (esp. web applications) need to distinguish objects by identifier, so you should consider this a feature rather than a limitation. However, we usually don't manipulate the identity of an object, hence the setter method should be private. Only Hibernate will assign identifiers when an object is saved. You can see that Hibernate can access public, private, and protected accessor methods, as well as (public, private, protected) fields directly. The choice is up to you and you can match it to fit your application design."
+msgstr "La propriété <literal>id</literal> contient la valeur d'un identifiant unique pour un événement particulier. Toutes les classes d'entités persistantes (ainsi que les classes dépendantes de moindre importance) auront besoin d'une telle propriété identifiante si nous voulons utiliser l'ensemble complet des fonctionnalités d'Hibernate. En fait, la plupart des applications (surtout les applications web) ont besoin de distinguer des objets par des identifiants, donc vous devriez considérer ça comme une fonctionnalité plutôt que comme une limitation. Cependant, nous ne manipulons généralement pas l'identité d'un objet, dorénavant la méthode setter devrait être privée. Seul Hibernate assignera les identifiants lorsqu'un objet est sauvegardé. Vous pouvez voir qu'Hibernate peut accéder aux méthodes publiques, privées et protégées, ainsi qu'aux champs (publics, privés, protégés) directement. Le choix vous est laissé, et vous pouvez l'ajuster à l!
a conception de votre application."
+
+#: index.docbook:96
+msgid "The no-argument constructor is a requirement for all persistent classes; Hibernate has to create objects for you, using Java Reflection. The constructor can be private, however, package visibility is required for runtime proxy generation and efficient data retrieval without bytecode instrumentation."
+msgstr "Le constructeur sans argument est requis pour toutes les classes persistantes ; Hibernate doit créer des objets pour vous en utilisant la réflexion Java. Le constructeur peut être privé, cependant, la visibilité du paquet est requise pour la génération de proxy à l'exécution et une récupération des données efficaces sans instrumentation du bytecode."
+
+#: index.docbook:103
+msgid "Place this Java source file in a directory called <literal>src</literal> in the development folder, and in its correct package. The directory should now look like this:"
+msgstr "Placez ce fichier source Java dans un répertoire appelé <literal>src</literal> dans le dossier de développement. Ce répertoire devrait maintenant ressembler à ça :"
+
+#: index.docbook:108
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java]]>"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate et bibliothèques tierces>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java]]>"
+
+#: index.docbook:110
+msgid "In the next step, we tell Hibernate about this persistent class."
+msgstr "Dans la prochaine étape, nous informons Hibernate de cette classe persistante."
+
+#: index.docbook:117
+msgid "The mapping file"
+msgstr "Le fichier de mapping"
+
+#: index.docbook:119
+msgid "Hibernate needs to know how to load and store objects of the persistent class. This is where the Hibernate mapping file comes into play. The mapping file tells Hibernate what table in the database it has to access, and what columns in that table it should use."
+msgstr "Hibernate a besoin de savoir comment charger et stocker des objets d'une classe persistante. C'est là qu'intervient le fichier de mapping Hibernate. Le fichier de mapping indique à Hibernate à quelle table dans la base de données il doit accéder, et quelles colonnes de cette table il devra utiliser."
+
+#: index.docbook:126
+msgid "The basic structure of a mapping file looks like this:"
+msgstr "La structure basique de ce fichier de mapping ressemble à ça :"
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "[...]\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "[...]\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:132
+msgid "Note that the Hibernate DTD is very sophisticated. You can use it for auto-completion of XML mapping elements and attributes in your editor or IDE. You also should open up the DTD file in your text editor - it's the easiest way to get an overview of all elements and attributes and to see the defaults, as well as some comments. Note that Hibernate will not load the DTD file from the web, but first look it up from the classpath of the application. The DTD file is included in <literal>hibernate3.jar</literal> as well as in the <literal>src/</literal> directory of the Hibernate distribution."
+msgstr "Notez que la DTD Hibernate est très sophistiquée. Vous pouvez l'utiliser pour l'auto-complétement des éléments et des attributs de mapping XML dans votre éditeur ou votre IDE. Vous devriez aussi ouvrir le fichier DTD dans votre éditeur de texte - c'est le moyen le plus facile d'obtenir une vue d'ensemble de tous les éléments et attributs, et de voir les valeurs par défaut, ainsi que quelques commentaires. Notez qu'Hibernate ne chargera pas le fichier DTD à partir du web, mais regardera d'abord dans le classpath de l'application. Le fichier DTD est inclus dans <literal>hibernate3.jar</literal> ainsi que dans le répertoire <literal>src</literal> de la distribution Hibernate."
+
+#: index.docbook:143
+msgid "We will omit the DTD declaration in future examples to shorten the code. It is of course not optional."
+msgstr "Nous omettrons la déclaration de la DTD dans les exemples futurs pour raccourcir le code. Bien sûr il n'est pas optionnel."
+
+#: index.docbook:148
+msgid "Between the two <literal>hibernate-mapping</literal> tags, include a <literal>class</literal> element. All persistent entity classes (again, there might be dependent classes later on, which are not first-class entities) need such a mapping, to a table in the SQL database:"
+msgstr "Entre les deux balises <literal>hibernate-mapping</literal>, incluez un élément <literal>class</literal>. Toutes les classes d'entités persistantes (encore une fois, il pourrait y avoir des classes dépendantes plus tard, qui ne sont pas des entités mère) ont besoin d'un mapping vers une table de la base de données SQL :"
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Event\" table=\"EVENTS\">\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:157
+msgid "So far we told Hibernate how to persist and load object of class <literal>Event</literal> to the table <literal>EVENTS</literal>, each instance represented by a row in that table. Now we continue with a mapping of the unique identifier property to the tables primary key. In addition, as we don't want to care about handling this identifier, we configure Hibernate's identifier generation strategy for a surrogate primary key column:"
+msgstr "Plus loin, nous disons à Hibernate comment persister et charger un objet de la classe <literal>Event</literal> dans la table <literal>EVENTS</literal>, chaque instance est représentée par une ligne dans cette table. Maintenant nous continuons avec le mapping de la propriété de l'identifiant unique vers la clef primaire de la table. De plus, comme nous ne voulons pas nous occuper de la gestion de cet identifiant, nous utilisons une stratégie de génération d'identifiant d'Hibernate pour la colonne de la clef primaire subrogée :"
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:167
+msgid "The <literal>id</literal> element is the declaration of the identifer property, <literal>name=\"id\"</literal> declares the name of the Java property - Hibernate will use the getter and setter methods to access the property. The column attribute tells Hibernate which column of the <literal>EVENTS</literal> table we use for this primary key. The nested <literal>generator</literal> element specifies the identifier generation strategy, in this case we used <literal>native</literal>, which picks the best strategy depending on the configured database (dialect). Hibernate supports database generated, globally unique, as well as application assigned identifiers (or any strategy you have written an extension for)."
+msgstr "L'élément <literal>id</literal> est la déclaration de la propriété de l'identifiant, <literal>name=\"id\"</literal> déclare le nom de la propriété Java - Hibernate utilisera les méthodes getter et setter pour accéder à la propriété. L'attribut <literal>column</literal> indique à Hibernate quelle colonne de la table <literal>EVENTS</literal> nous utilisons pour cette clef primaire. L'élément <literal>generator</literal> imbriqué spécifie la stratégie de génération de l'identifiant, dans ce cas nous avons utilisé <literal>increment</literal>, laquelle est une méthode très simple utile surtout pour les tests (et didacticiels). Hibernate supporte aussi les identifiants générés par les bases de données, globalement uniques, ainsi que les identifiants assignés par l'application (ou n'importe quelle stratégie que vous avez écrit en extension)."
+
+#: index.docbook:180
+msgid "Finally we include declarations for the persistent properties of the class in the mapping file. By default, no properties of the class are considered persistent:"
+msgstr "Finalement nous incluons des déclarations pour les propriétés persistantes de la classe dans le fichier de mapping. Par défaut, aucune propriété de la classe n'est considérée comme persistante :"
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\" type=\"timestamp\" column=\"EVENT_DATE\"/>\n"
+ " <property name=\"title\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"date\" type=\"timestamp\" column=\"EVENT_DATE\"/>\n"
+ " <property name=\"title\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:188
+msgid "Just as with the <literal>id</literal> element, the <literal>name</literal> attribute of the <literal>property</literal> element tells Hibernate which getter and setter methods to use. So, in this case, Hibernate will look for <literal>getDate()/setDate()</literal>, as well as <literal>getTitle()/setTitle()</literal>."
+msgstr "Comme avec l'élément <literal>id</literal>, l'attribut <literal>name</literal> de l'élément <literal>property</literal> indique à Hibernate quels getters/setters utiliser."
+
+#: index.docbook:195
+msgid "Why does the <literal>date</literal> property mapping include the <literal>column</literal> attribute, but the <literal>title</literal> doesn't? Without the <literal>column</literal> attribute Hibernate by default uses the property name as the column name. This works fine for <literal>title</literal>. However, <literal>date</literal> is a reserved keyword in most database, so we better map it to a different name."
+msgstr "Pourquoi le mapping de la propriété <literal>date</literal> inclut l'attribut <literal>column</literal>, mais pas <literal>title</literal> ? Sans l'attribut <literal>column</literal> Hibernate utilise par défaut le nom de la propriété comme nom de colonne. Ca fonctionne bien pour <literal>title</literal>. Cependant, <literal>date</literal> est un mot clef réservé dans la plupart des bases de données, donc nous utilisons un nom différent pour le mapping."
+
+#: index.docbook:204
+msgid "The next interesting thing is that the <literal>title</literal> mapping also lacks a <literal>type</literal> attribute. The types we declare and use in the mapping files are not, as you might expect, Java data types. They are also not SQL database types. These types are so called <emphasis>Hibernate mapping types</emphasis>, converters which can translate from Java to SQL data types and vice versa. Again, Hibernate will try to determine the correct conversion and mapping type itself if the <literal>type</literal> attribute is not present in the mapping. In some cases this automatic detection (using Reflection on the Java class) might not have the default you expect or need. This is the case with the <literal>date</literal> property. Hibernate can't know if the property (which is of <literal>java.util.Date</literal>) should map to a SQL <literal>date</literal>, <literal>timestamp</literal>, or <literal>time</literal> column. We preserve full date and time information !
by mapping the property with a <literal>timestamp</literal> converter."
+msgstr "La prochaine chose intéressante est que le mapping de <literal>title</literal> manque aussi d'un attribut <literal>type</literal>. Les types que nous déclarons et utilisons dans les fichiers de mapping ne sont pas, comme vous pourriez vous y attendre, des types de données Java. Ce ne sont pas, non plus, des types de base de données SQL. Ces types sont donc appelés des <emphasis>types de mapping Hibernate</emphasis>, des convertisseurs qui peuvent traduire des types Java en types SQL et vice versa. De plus, Hibernate tentera de déterminer la bonne conversion et le type de mapping lui-même si l'attribut <literal>type</literal> n'est pas présent dans le mapping. Dans certains cas, cette détection automatique (utilisant la réflexion sur la classe Java) pourrait ne pas donner la valeur attendue ou dont vous avez besoin. C'est le cas avec la propriété <literal>date</literal>. Hibernate ne peut pas savoir si la propriété \"mappera\" une colonne SQL de type <l!
iteral>date</literal>, <literal>timestamp</literal> ou <literal>time</literal>. Nous déclarons que nous voulons conserver des informations avec une date complète et l'heure en mappant la propriété avec un <literal>timestamp</literal>."
+
+#: index.docbook:220
+msgid "This mapping file should be saved as <literal>Event.hbm.xml</literal>, right in the directory next to the <literal>Event</literal> Java class source file. The naming of mapping files can be arbitrary, however the <literal>hbm.xml</literal> suffix is a convention in the Hibernate developer community. The directory structure should now look like this:"
+msgstr "Ce fichier de mapping devrait être sauvegardé en tant que <literal>Event.hbm.xml</literal>, juste dans le répertoire à côté du fichier source de la classe Java <literal>Event</literal>. Le nommage des fichiers de mapping peut être arbitraire, cependant le suffixe <literal>hbm.xml</literal> est devenu une convention dans la communauté des développeurs Hibernate. La structure du répertoire devrait ressembler à ça :"
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml]]>"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate et bibliothèques tierces>\n"
+ "+src\n"
+ " Event.java\n"
+ " Event.hbm.xml]]>"
+
+#: index.docbook:230
+msgid "We continue with the main configuration of Hibernate."
+msgstr "Nous poursuivons avec la configuration principale d'Hibernate."
+
+#: index.docbook:237
+msgid "Hibernate configuration"
+msgstr "Configuration d'Hibernate"
+
+#: index.docbook:239
+msgid "We now have a persistent class and its mapping file in place. It is time to configure Hibernate. Before we do this, we will need a database. HSQL DB, a java-based SQL DBMS, can be downloaded from the HSQL DB website(http://hsqldb.org/). Actually, you only need the <literal>hsqldb.jar</literal> from this download. Place this file in the <literal>lib/</literal> directory of the development folder."
+msgstr "Nous avons maintenant une classe persistante et son fichier de mapping. Il est temps de configurer Hibernate. Avant ça, nous avons besoin d'une base de données. HSQL DB, un SGBD SQL basé sur Java et travaillant en mémoire, peut être téléchargé à partir du site web de HSQL. En fait, vous avez seulement besoin de <literal>hsqldb.jar</literal>. Placez ce fichier dans le répertoire <literal>lib/</literal> du dossier de développement."
+
+#: index.docbook:247
+msgid "Create a directory called <literal>data</literal> in the root of the development directory - this is where HSQL DB will store its data files. Now start the database by running <literal>java -classpath ../lib/hsqldb.jar org.hsqldb.Server</literal> in this data directory. You can see it start up and bind to a TCP/IP socket, this is where our application will connect later. If you want to start with a fresh database during this tutorial, shutdown HSQL DB (press <literal>CTRL + C</literal> in the window), delete all files in the <literal>data/</literal> directory, and start HSQL DB again."
+msgstr "Créez un répertoire appelé <literal>data</literal> à la racine du répertoire de développement - c'est là que HSQL DB stockera ses fichiers de données. Démarrez maintenant votre base de données en exécutant <literal>java -classpath lib/hsqldb.jar org.hsqldb.Server</literal> dans votre répertoire de travail. Vous observez qu'elle démarre et ouvre une socket TCP/IP, c'est là que notre application se connectera plus tard. Si vous souhaitez démarrez à partir d'une nouvelle base de données pour ce tutoriel (faites <literal>CTRL + C</literal> dans la fenêtre the window), effacez le répertoire <literal>data/</literal> et redémarrez HSQL DB à nouveau."
+
+#: index.docbook:257
+msgid "Hibernate is the layer in your application which connects to this database, so it needs connection information. The connections are made through a JDBC connection pool, which we also have to configure. The Hibernate distribution contains several open source JDBC connection pooling tools, but will use the Hibernate built-in connection pool for this tutorial. Note that you have to copy the required library into your classpath and use different connection pooling settings if you want to use a production-quality third party JDBC pooling software."
+msgstr "Hibernate est la couche de votre application qui se connecte à cette base de données, donc il a besoin des informations de connexion. Les connexions sont établies à travers un pool de connexions JDBC, que nous devons aussi configurer. La distribution Hibernate contient différents outils de gestion de pools de connexions JDBC open source, mais pour ce didacticiel nous utiliserons le pool de connexions intégré à Hibernate. Notez que vous devez copier les bibliothèques requises dans votre classpath et utiliser une configuration de pool de connexions différente si vous voulez utiliser un logiciel de gestion de pools JDBC tiers avec une qualité de production."
+
+#: index.docbook:267
+msgid "For Hibernate's configuration, we can use a simple <literal>hibernate.properties</literal> file, a slightly more sophisticated <literal>hibernate.cfg.xml</literal> file, or even complete programmatic setup. Most users prefer the XML configuration file:"
+msgstr "Pour la configuration d'Hibernate, nous pouvons utiliser un simple fichier <literal>hibernate.properties</literal>, un fichier <literal>hibernate.cfg.xml</literal> légèrement plus sophistiqué, ou même une configuration complète par programmation. La plupart des utilisateurs préfèrent le fichier de configuration XML :"
+
+#: index.docbook:273
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <!-- Database connection settings -->\n"
+ " <property name=\"connection.driver_class\">org.hsqldb.jdbcDriver</property>\n"
+ " <property name=\"connection.url\">jdbc:hsqldb:hsql://localhost</property>\n"
+ " <property name=\"connection.username\">sa</property>\n"
+ " <property name=\"connection.password\"></property>\n"
+ "\n"
+ " <!-- JDBC connection pool (use the built-in) -->\n"
+ " <property name=\"connection.pool_size\">1</property>\n"
+ "\n"
+ " <!-- SQL dialect -->\n"
+ " <property name=\"dialect\">org.hibernate.dialect.HSQLDialect</property>\n"
+ "\n"
+ " <!-- Enable Hibernate's automatic session context management -->\n"
+ " <property name=\"current_session_context_class\">thread</property>\n"
+ "\n"
+ " <!-- Disable the second-level cache -->\n"
+ " <property name=\"cache.provider_class\">org.hibernate.cache.NoCacheProvider</property>\n"
+ "\n"
+ " <!-- Echo all executed SQL to stdout -->\n"
+ " <property name=\"show_sql\">true</property>\n"
+ "\n"
+ " <!-- Drop and re-create the database schema on startup -->\n"
+ " <property name=\"hbm2ddl.auto\">create</property>\n"
+ "\n"
+ " <mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <!-- Database connection settings -->\n"
+ " <property name=\"connection.driver_class\">org.hsqldb.jdbcDriver</property>\n"
+ " <property name=\"connection.url\">jdbc:hsqldb:hsql://localhost</property>\n"
+ " <property name=\"connection.username\">sa</property>\n"
+ " <property name=\"connection.password\"></property>\n"
+ "\n"
+ " <!-- JDBC connection pool (use the built-in) -->\n"
+ " <property name=\"connection.pool_size\">1</property>\n"
+ "\n"
+ " <!-- SQL dialect -->\n"
+ " <property name=\"dialect\">org.hibernate.dialect.HSQLDialect</property>\n"
+ "\n"
+ " <!-- Enable Hibernate's automatic session context management -->\n"
+ " <property name=\"current_session_context_class\">thread</property>\n"
+ "\n"
+ " <!-- Disable the second-level cache -->\n"
+ " <property name=\"cache.provider_class\">org.hibernate.cache.NoCacheProvider</property>\n"
+ "\n"
+ " <!-- Echo all executed SQL to stdout -->\n"
+ " <property name=\"show_sql\">true</property>\n"
+ "\n"
+ " <!-- Drop and re-create the database schema on startup -->\n"
+ " <property name=\"hbm2ddl.auto\">create</property>\n"
+ "\n"
+ " <mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:275
+msgid "Note that this XML configuration uses a different DTD. We configure Hibernate's <literal>SessionFactory</literal> - a global factory responsible for a particular database. If you have several databases, use several <literal><session-factory></literal> configurations, usually in several configuration files (for easier startup)."
+msgstr "Notez que cette configuration XML utilise une DTD différente. Nous configurons une <literal>SessionFactory</literal> d'Hibernate - une fabrique globale responsable d'une base de données particulière. Si vous avez plusieurs base de données, utilisez plusieurs configurations <literal><session-factory></literal>, généralement dans des fichiers de configuration différents (pour un démarrage plus facile)."
+
+#: index.docbook:283
+msgid "The first four <literal>property</literal> elements contain the necessary configuration for the JDBC connection. The dialect <literal>property</literal> element specifies the particular SQL variant Hibernate generates. Hibernate's automatic session management for persistence contexts will come in handy as you will soon see. The <literal>hbm2ddl.auto</literal> option turns on automatic generation of database schemas - directly into the database. This can of course also be turned off (by removing the config option) or redirected to a file with the help of the <literal>SchemaExport</literal> Ant task. Finally, we add the mapping file(s) for persistent classes to the configuration."
+msgstr "Les quatre premiers éléments <literal>property</literal> contiennent la configuration nécessaire pour la connexion JDBC. L'élément <literal>property</literal> du dialecte spécifie quelle variante du SQL Hibernate va générer. La gestion automatique des sessions d'Hibernate pour les contextes de persistance sera détaillée très vite. L'option <literal>hbm2ddl.auto</literal> active la génération automatique des schémas de base de données - directement dans la base de données. Cela peut bien sûr aussi être désactivé (en supprimant l'option de configuration) ou redirigé vers un fichier avec l'aide de la tâche Ant <literal>SchemaExport</literal>. Finalement, nous ajoutons le(s) fichier(s) de mapping pour les classes persistantes."
+
+#: index.docbook:296
+msgid "Copy this file into the source directory, so it will end up in the root of the classpath. Hibernate automatically looks for a file called <literal>hibernate.cfg.xml</literal> in the root of the classpath, on startup."
+msgstr "Copiez ce fichier dans le répertoire source, il terminera dans la racine du classpath. Hibernate cherchera automatiquement, au démarrage, un fichier appelé <literal>hibernate.cfg.xml</literal> dans la racine du classpath."
+
+#: index.docbook:305
+msgid "Building with Ant"
+msgstr "Construction avec Ant"
+
+#: index.docbook:307
+msgid "We'll now build the tutorial with Ant. You will need to have Ant installed - get it from the <ulink url=\"http://ant.apache.org/bindownload.cgi\">Ant download page</ulink>. How to install Ant will not be covered here. Please refer to the <ulink url=\"http://ant.apache.org/manual/index.html\">Ant manual</ulink>. After you have installed Ant, we can start to create the buildfile. It will be called <literal>build.xml</literal> and placed directly in the development directory."
+msgstr "Nous allons maintenant construire le didacticiel avec Ant. Vous aurez besoin d'avoir Ant d'installé - récupérez-le à partir de <ulink url=\"http://ant.apache.org/bindownload.cgi\"> la page de téléchargement de Ant</ulink>. Comment installer Ant ne sera pas couvert ici. Référez-vous au <ulink url=\"http://ant.apache.org/manual/index.html\">manuel d'Ant</ulink>. Après que vous aurez installé Ant, nous pourrons commencer à créer le fichier de construction. Il s'appellera <literal>build.xml</literal> et sera placé directement dans le répertoire de développement."
+
+#: index.docbook:316
+msgid "A basic build file looks like this:"
+msgstr "Un fichier de construction basique ressemble à ça :"
+
+#: index.docbook:320
+msgid ""
+ "<![CDATA[<project name=\"hibernate-tutorial\" default=\"compile\">\n"
+ "\n"
+ " <property name=\"sourcedir\" value=\"${basedir}/src\"/>\n"
+ " <property name=\"targetdir\" value=\"${basedir}/bin\"/>\n"
+ " <property name=\"librarydir\" value=\"${basedir}/lib\"/>\n"
+ "\n"
+ " <path id=\"libraries\">\n"
+ " <fileset dir=\"${librarydir}\">\n"
+ " <include name=\"*.jar\"/>\n"
+ " </fileset>\n"
+ " </path>\n"
+ "\n"
+ " <target name=\"clean\">\n"
+ " <delete dir=\"${targetdir}\"/>\n"
+ " <mkdir dir=\"${targetdir}\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"compile\" depends=\"clean, copy-resources\">\n"
+ " <javac srcdir=\"${sourcedir}\"\n"
+ " destdir=\"${targetdir}\"\n"
+ " classpathref=\"libraries\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"copy-resources\">\n"
+ " <copy todir=\"${targetdir}\">\n"
+ " <fileset dir=\"${sourcedir}\">\n"
+ " <exclude name=\"**/*.java\"/>\n"
+ " </fileset>\n"
+ " </copy>\n"
+ " </target>\n"
+ "\n"
+ "</project>]]>"
+msgstr ""
+ "<![CDATA[<project name=\"hibernate-tutorial\" default=\"compile\">\n"
+ "\n"
+ " <property name=\"sourcedir\" value=\"${basedir}/src\"/>\n"
+ " <property name=\"targetdir\" value=\"${basedir}/bin\"/>\n"
+ " <property name=\"librarydir\" value=\"${basedir}/lib\"/>\n"
+ "\n"
+ " <path id=\"libraries\">\n"
+ " <fileset dir=\"${librarydir}\">\n"
+ " <include name=\"*.jar\"/>\n"
+ " </fileset>\n"
+ " </path>\n"
+ "\n"
+ " <target name=\"clean\">\n"
+ " <delete dir=\"${targetdir}\"/>\n"
+ " <mkdir dir=\"${targetdir}\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"compile\" depends=\"clean, copy-resources\">\n"
+ " <javac srcdir=\"${sourcedir}\"\n"
+ " destdir=\"${targetdir}\"\n"
+ " classpathref=\"libraries\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"copy-resources\">\n"
+ " <copy todir=\"${targetdir}\">\n"
+ " <fileset dir=\"${sourcedir}\">\n"
+ " <exclude name=\"**/*.java\"/>\n"
+ " </fileset>\n"
+ " </copy>\n"
+ " </target>\n"
+ "\n"
+ "</project>]]>"
+
+#: index.docbook:322
+msgid "This will tell Ant to add all files in the lib directory ending with <literal>.jar</literal> to the classpath used for compilation. It will also copy all non-Java source files to the target directory, e.g. configuration and Hibernate mapping files. If you now run Ant, you should get this output:"
+msgstr "Cela dira à Ant d'ajouter tous les fichiers du répertoire lib finissant par <literal>.jar</literal> dans le classpath utilisé pour la compilation. Cela copiera aussi tous les fichiers source non Java dans le répertoire cible, par exemple les fichiers de configuration et de mapping d'Hibernate. Si vous lancez Ant maintenant, vous devriez obtenir cette sortie :"
+
+#: index.docbook:329
+msgid ""
+ "<![CDATA[C:\\hibernateTutorial\\>ant\n"
+ "Buildfile: build.xml\n"
+ "\n"
+ "copy-resources:\n"
+ " [copy] Copying 2 files to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "compile:\n"
+ " [javac] Compiling 1 source file to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "BUILD SUCCESSFUL\n"
+ "Total time: 1 second ]]>"
+msgstr ""
+ "<![CDATA[C:\\hibernateTutorial\\>ant\n"
+ "Buildfile: build.xml\n"
+ "\n"
+ "copy-resources:\n"
+ " [copy] Copying 2 files to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "compile:\n"
+ " [javac] Compiling 1 source file to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "BUILD SUCCESSFUL\n"
+ "Total time: 1 second ]]>"
+
+#: index.docbook:334
+msgid "Startup and helpers"
+msgstr "Démarrage et aides"
+
+#: index.docbook:336
+msgid "It's time to load and store some <literal>Event</literal> objects, but first we have to complete the setup with some infrastructure code. We have to startup Hibernate. This startup includes building a global <literal>SessionFactory</literal> object and to store it somewhere for easy access in application code. A <literal>SessionFactory</literal> can open up new <literal>Session</literal>'s. A <literal>Session</literal> represents a single-threaded unit of work, the <literal>SessionFactory</literal> is a thread-safe global object, instantiated once."
+msgstr "Il est temps de charger et de stocker quelques objets <literal>Event</literal>, mais d'abord nous devons compléter la configuration avec du code d'infrastructure. Nous devons démarrer Hibernate. Ce démarrage inclut la construction d'un objet <literal>SessionFactory</literal> global et le stocker quelque part facile d'accès dans le code de l'application. Une <literal>SessionFactory</literal> peut ouvrir des nouvelles <literal>Session</literal>s. Une <literal>Session</literal> représente une unité de travail simplement \"threadée\", la <literal>SessionFactory</literal> est un objet global \"thread-safe\", instancié une seule fois."
+
+#: index.docbook:346
+msgid "We'll create a <literal>HibernateUtil</literal> helper class which takes care of startup and makes accessing a <literal>SessionFactory</literal> convenient. Let's have a look at the implementation:"
+msgstr "Nous créerons une classe d'aide <literal>HibernateUtil</literal> qui s'occupe du démarrage et rend la gestion des <literal>Session</literal>s plus facile. Regardons l'implémentation :"
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[package util;\n"
+ "\n"
+ "import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ "\n"
+ " private static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Create the SessionFactory from hibernate.cfg.xml\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " System.err.println(\"Initial SessionFactory creation failed.\" + ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static SessionFactory getSessionFactory() {\n"
+ " return sessionFactory;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package util;\n"
+ "\n"
+ "import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ " public static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Création de la SessionFactory à partir de hibernate.cfg.xml\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " System.err.println(\"Initial SessionFactory creation failed.\" + ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static final ThreadLocal session = new ThreadLocal();\n"
+ "\n"
+ " public static SessionFactory getSessionFactory() {\n"
+ " return sessionFactory;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:354
+msgid "This class does not only produce the global <literal>SessionFactory</literal> in its static initializer (called once by the JVM when the class is loaded), but also hides the fact that it uses a static singleton. It might as well lookup the <literal>SessionFactory</literal> from JNDI in an application server."
+msgstr "Cette classe ne produit pas seulement la <literal>SessionFactory</literal> globale dans un initialiseur statique (appelé une seule fois par la JVM lorsque la classe est chargée), elle masque le fait qu'elle exploite un singleton. Elle pourrait aussi obtenir la <literal>SessionFactory</literal> depuis JNDI dans un serveur d'applications."
+
+#: index.docbook:361
+msgid "If you give the <literal>SessionFactory</literal> a name in your configuration file, Hibernate will in fact try to bind it to JNDI after it has been built. To avoid this code completely you could also use JMX deployment and let the JMX-capable container instantiate and bind a <literal>HibernateService</literal> to JNDI. These advanced options are discussed in the Hibernate reference documentation."
+msgstr "Si vous nommez la <literal>SessionFactory</literal> dans votre fichier de configuration, Hibernate tentera la récupération depuis JNDI. Pour éviter ce code, vous pouvez aussi utiliser un déploiement JMX et laisser le conteneur (compatible JMX) instancier et lier un <literal>HibernateService</literal> à JNDI. Ces options avancées sont détaillées dans la documentation de référence Hibernate."
+
+#: index.docbook:370
+msgid "Place <literal>HibernateUtil.java</literal> in the development source directory, in a package next to <literal>events</literal>:"
+msgstr "Placez <literal>HibernateUtil.java</literal> dans le répertoire source de développement, et ensuite <literal>Event.java</literal> :"
+
+#: index.docbook:375
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml\n"
+ " +util\n"
+ " HibernateUtil.java\n"
+ " hibernate.cfg.xml\n"
+ "+data\n"
+ "build.xml]]>"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml\n"
+ " +util\n"
+ " HibernateUtil.java\n"
+ " hibernate.cfg.xml\n"
+ "+data\n"
+ "build.xml]]>"
+
+#: index.docbook:377
+msgid "This should again compile without problems. We finally need to configure a logging system - Hibernate uses commons logging and leaves you the choice between Log4j and JDK 1.4 logging. Most developers prefer Log4j: copy <literal>log4j.properties</literal> from the Hibernate distribution (it's in the <literal>etc/</literal> directory) to your <literal>src</literal> directory, next to <literal>hibernate.cfg.xml</literal>. Have a look at the example configuration and change the settings if you like to have more verbose output. By default, only Hibernate startup message are shown on stdout."
+msgstr "Cela devrait encore compiler sans problème. Nous avons finalement besoin de configurer le système de \"logs\" - Hibernate utilise commons-logging et vous laisse le choix entre log4j et le système de logs du JDK 1.4. La plupart des développeurs préfèrent log4j : copiez <literal>log4j.properties</literal> de la distribution d'Hibernate (il est dans le répertoire <literal>etc/</literal>) dans votre répertoire <literal>src</literal>, puis faites de même avec <literal>hibernate.cfg.xml</literal>. Regardez la configuration d'exemple et changez les paramètres si vous voulez une sortie plus verbeuse. Par défaut, seul le message de démarrage d'Hibernate est affiché sur la sortie standard."
+
+#: index.docbook:387
+msgid "The tutorial infrastructure is complete - and we are ready to do some real work with Hibernate."
+msgstr "L'infrastructure de ce didacticiel est complète - et nous sommes prêts à effectuer un travail réel avec Hibernate."
+
+#: index.docbook:395
+msgid "Loading and storing objects"
+msgstr "Charger et stocker des objets"
+
+#: index.docbook:397
+msgid "Finally, we can use Hibernate to load and store objects. We write an <literal>EventManager</literal> class with a <literal>main()</literal> method:"
+msgstr "Finalement nous pouvons utiliser Hibernate pour charger et stocker des objets. Nous écrivons une classe <literal>EventManager</literal> avec une méthode <literal>main()</literal> :"
+
+#: index.docbook:402
+msgid ""
+ "<![CDATA[package events;\n"
+ "import org.hibernate.Session;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "import util.HibernateUtil;\n"
+ "\n"
+ "public class EventManager {\n"
+ "\n"
+ " public static void main(String[] args) {\n"
+ " EventManager mgr = new EventManager();\n"
+ "\n"
+ " if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " }\n"
+ "\n"
+ " HibernateUtil.getSessionFactory().close();\n"
+ " }\n"
+ "\n"
+ " private void createAndStoreEvent(String title, Date theDate) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " session.save(theEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package events;\n"
+ "import org.hibernate.Session;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "import util.HibernateUtil;\n"
+ "\n"
+ "public class EventManager {\n"
+ "\n"
+ " public static void main(String[] args) {\n"
+ " EventManager mgr = new EventManager();\n"
+ "\n"
+ " if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " }\n"
+ "\n"
+ " HibernateUtil.getSessionFactory().close();\n"
+ " }\n"
+ "\n"
+ " private void createAndStoreEvent(String title, Date theDate) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " session.save(theEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ " }]]>"
+
+#: index.docbook:404
+msgid "We create a new <literal>Event</literal> object, and hand it over to Hibernate. Hibernate now takes care of the SQL and executes <literal>INSERT</literal>s on the database. Let's have a look at the <literal>Session</literal> and <literal>Transaction</literal>-handling code before we run this."
+msgstr "Nous créons un nouvel objet <literal>Event</literal>, et le remettons à Hibernate. Hibernate s'occupe maintenant du SQL et exécute les <literal>INSERT</literal>s dans la base de données. Regardons le code de gestion de la <literal>Session</literal> et de la <literal>Transaction</literal> avant de lancer ça."
+
+#: index.docbook:411
+msgid "A <literal>Session</literal> is a single unit of work. For now we'll keep things simple and assume a one-to-one granularity between a Hibernate <literal>Session</literal> and a database transaction. To shield our code from the actual underlying transaction system (in this case plain JDBC, but it could also run with JTA) we use the <literal>Transaction</literal> API that is available on the Hibernate <literal>Session</literal>."
+msgstr "Une <literal>Session</literal> est une unité de travail. Pour le moment, nous allons faire les choses simplement et assumer une granularité un-un entre une <literal>Session</literal> hibernate et une transaction à la base de données. Pour isoler notre code du système de transaction sous-jacent (dans notre cas, du pure JDBC, mais cela pourrait être JTA), nous utilisons l'API <literal>Transaction</literal> qui est disponible depuis la <literal>Session</literal> Hibernate."
+
+#: index.docbook:419
+msgid "What does <literal>sessionFactory.getCurrentSession()</literal> do? First, you can call it as many times and anywhere you like, once you get hold of your <literal>SessionFactory</literal> (easy thanks to <literal>HibernateUtil</literal>). The <literal>getCurrentSession()</literal> method always returns the \"current\" unit of work. Remember that we switched the configuration option for this mechanism to \"thread\" in <literal>hibernate.cfg.xml</literal>? Hence, the current unit of work is bound to the current Java thread that executes our application. However, this is not the full picture, you also have to consider scope, when a unit of work begins and when it ends."
+msgstr "Que fait <literal>sessionFactory.getCurrentSession()</literal> ? Premièrement, vous pouvez l'invoquer autant de fois que vous le voulez et n'importe où du moment que vous avez votre <literal>SessionFactory</literal> (facile grâce à <literal>HibernateUtil</literal>). La méthode <literal>getCurrentSession()</literal> renvoie toujours l'unité de travail courante. Souvenez vous que nous avons basculé notre option de configuration au mécanisme basé sur le \"thread\" dans <literal>hibernate.cfg.xml</literal>. Par conséquent, le scope de l'unité de travail courante est le thread java courant d'exécution. Ceci n'est pas totalement vrai. Une <literal>Session</literal> commence lorsqu'elle est vraiment utilisée la première fois, Lorsque nous appelons pour la première fois <literal>getCurrentSession()</literal>. Ensuite, elle est liée, par Hibernate, au thread courant. Lorsque la transaction s'achève (commit ou rollback), Hibernate délie la <literal>Session</!
literal> du thread et la ferme pour vous. Si vous invoquez <literal>getCurrentSession()</literal> une autre fois, vous obtenez une nouvelle <literal>Session</literal> et pouvez entamer une nouvelle unité de travail. Ce modèle de programmation \"<emphasis>thread-bound</emphasis>\" est le moyen le plus populaire d'utiliser Hibernate."
+
+#: index.docbook:430
+msgid "A <literal>Session</literal> begins when it is first needed, when the first call to <literal>getCurrentSession()</literal> is made. It is then bound by Hibernate to the current thread. When the transaction ends, either through commit or rollback, Hibernate automatically unbinds the <literal>Session</literal> from the thread and closes it for you. If you call <literal>getCurrentSession()</literal> again, you get a new <literal>Session</literal> and can start a new unit of work. This <emphasis>thread-bound</emphasis> programming model is the most popular way of using Hibernate, as it allows flexible layering of your code (transaction demarcation code can be separated from data access code, we'll do this later in this tutorial)."
+msgstr "Lisez <xref linkend=\"transactions\"/> pour plus d'informations sur la gestion des transactions et leur démarcations. Nous n'avons pas géré les erreurs et rollback sur l'exemple précédent."
+
+#: index.docbook:441
+msgid "Related to the unit of work scope, should the Hibernate <literal>Session</literal> be used to execute one or several database operations? The above example uses one <literal>Session</literal> for one operation. This is pure coincidence, the example is just not complex enough to show any other approach. The scope of a Hibernate <literal>Session</literal> is flexible but you should never design your application to use a new Hibernate <literal>Session</literal> for <emphasis>every</emphasis> database operation. So even if you see it a few more times in the following (very trivial) examples, consider <emphasis>session-per-operation</emphasis> an anti-pattern. A real (web) application is shown later in this tutorial."
+msgstr "Pour lancer cette première routine, nous devons ajouter une cible appelable dans le fichier de construction de Ant :"
+
+#: index.docbook:452
+msgid "Have a look at <xref linkend=\"transactions\"/> for more information about transaction handling and demarcation. We also skipped any error handling and rollback in the previous example."
+msgstr ""
+ "<![CDATA[<target name=\"run\" depends=\"compile\">\n"
+ " <java fork=\"true\" classname=\"events.EventManager\" classpathref=\"libraries\">\n"
+ " <classpath path=\"${targetdir}\"/>\n"
+ " <arg value=\"${action}\"/>\n"
+ " </java>\n"
+ "</target>]]>"
+
+#: index.docbook:458
+msgid "To run this first routine we have to add a callable target to the Ant build file:"
+msgstr "La valeur de l'argument <literal>action</literal> correspond à la ligne de commande qui appelle la cible :"
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[<target name=\"run\" depends=\"compile\">\n"
+ " <java fork=\"true\" classname=\"events.EventManager\" classpathref=\"libraries\">\n"
+ " <classpath path=\"${targetdir}\"/>\n"
+ " <arg value=\"${action}\"/>\n"
+ " </java>\n"
+ "</target>]]>"
+msgstr "<![CDATA[C:\\hibernateTutorial\\>ant run -Daction=store]]>"
+
+#: index.docbook:464
+msgid "The value of the <literal>action</literal> argument is set on the command line when calling the target:"
+msgstr "Vous devriez voir, après la compilation, Hibernate démarrer et, en fonction de votre configuration, beaucoup de traces sur la sortie. à la fin vous trouverez la ligne suivante :"
+
+#: index.docbook:469
+msgid "<![CDATA[C:\\hibernateTutorial\\>ant run -Daction=store]]>"
+msgstr "<![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]>"
+
+#: index.docbook:471
+msgid "You should see, after compilation, Hibernate starting up and, depending on your configuration, lots of log output. At the end you will find the following line:"
+msgstr "C'est l'<literal>INSERT</literal> exécuté par Hibernate, les points d'interrogation représentent les paramètres JDBC liés. Pour voir les valeurs liées aux arguments, ou pour réduire la verbosité des traces, vérifier votre <literal>log4j.properties</literal>."
+
+#: index.docbook:476
+msgid "<![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]>"
+msgstr "Maintenant nous aimerions aussi lister les événements stockés, donc nous ajoutons une option à la méthode principale :"
+
+#: index.docbook:478
+msgid "This is the <literal>INSERT</literal> executed by Hibernate, the question marks represent JDBC bind parameters. To see the values bound as arguments, or to reduce the verbosity of the log, check your <literal>log4j.properties</literal>."
+msgstr ""
+ "<![CDATA[if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ "}\n"
+ "else if (args[0].equals(\"list\")) {\n"
+ " List events = mgr.listEvents();\n"
+ " for (int i = 0; i < events.size(); i++) {\n"
+ " Event theEvent = (Event) events.get(i);\n"
+ " System.out.println(\"Event: \" + theEvent.getTitle() +\n"
+ " \" Time: \" + theEvent.getDate());\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:484
+msgid "Now we'd like to list stored events as well, so we add an option to the main method:"
+msgstr "Nous ajoutons aussi une nouvelle méthode <literal>listEvents()</literal> :"
+
+#: index.docbook:488
+msgid ""
+ "<![CDATA[if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ "}\n"
+ "else if (args[0].equals(\"list\")) {\n"
+ " List events = mgr.listEvents();\n"
+ " for (int i = 0; i < events.size(); i++) {\n"
+ " Event theEvent = (Event) events.get(i);\n"
+ " System.out.println(\"Event: \" + theEvent.getTitle() +\n"
+ " \" Time: \" + theEvent.getDate());\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private List listEvents() {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " List result = session.createQuery(\"from Event\").list();\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " return result;\n"
+ "}]]>"
+
+#: index.docbook:490
+msgid "We also add a new <literal>listEvents() method</literal>:"
+msgstr "Ce que nous faisons ici c'est utiliser une requête HQL (Hibernate Query Language) pour charger tous les objets <literal>Event</literal> existants de la base de données. Hibernate générera le SQL approprié, l'enverra à la base de données et peuplera des objets <literal>Event</literal> avec les données. Vous pouvez créer des requêtes plus complexes avec HQL, bien sûr."
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[private List listEvents() {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " List result = session.createQuery(\"from Event\").list();\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " return result;\n"
+ "}]]>"
+msgstr "Maintenant, pour exécuter et tester tout ça, suivez ces étapes :"
+
+#: index.docbook:496
+msgid "What we do here is use an HQL (Hibernate Query Language) query to load all existing <literal>Event</literal> objects from the database. Hibernate will generate the appropriate SQL, send it to the database and populate <literal>Event</literal> objects with the data. You can create more complex queries with HQL, of course."
+msgstr "Exécutez <literal>ant run -Daction=store</literal> pour stocker quelque chose dans la base de données et, bien sûr, pour générer, avant, le schéma de la base de données grâce à hbm2ddl."
+
+#: index.docbook:503
+msgid "Now, to execute and test all of this, follow these steps:"
+msgstr "Maintenant désactivez hbm2ddl en commentant la propriété dans votre fichier <literal>hibernate.cfg.xml</literal>. Généralement vous la laissez seulement activée dans des tests unitaires en continu, mais une autre exécution de hbm2ddl <emphasis>effacerait</emphasis> tout ce que vous avez stocké - le paramètre de configuration <literal>create</literal> se traduit en fait par \"supprimer toutes les tables du schéma, puis re-créer toutes les tables, lorsque la SessionFactory est construite\"."
+
+#: index.docbook:509
+msgid "Run <literal>ant run -Daction=store</literal> to store something into the database and, of course, to generate the database schema before through hbm2ddl."
+msgstr "Si maintenant vous appelez Ant avec <literal>-Daction=list</literal>, vous devriez voir les événements que vous avez stockés jusque là . Vous pouvez bien sûr aussi appeler l'action <literal>store</literal> plusieurs fois."
+
+#: index.docbook:515
+msgid "Now disable hbm2ddl by commenting out the property in your <literal>hibernate.cfg.xml</literal> file. Usually you only leave it turned on in continous unit testing, but another run of hbm2ddl would <emphasis>drop</emphasis> everything you have stored - the <literal>create</literal> configuration setting actually translates into \"drop all tables from the schema, then re-create all tables, when the SessionFactory is build\"."
+msgstr "Partie 2 - Mapper des associations"
+
+#: index.docbook:525
+msgid "If you now call Ant with <literal>-Daction=list</literal>, you should see the events you have stored so far. You can of course also call the <literal>store</literal> action a few times more."
+msgstr "Nous avons mappé une classe d'une entité persistante vers une table. Partons de là et ajoutons quelques associations de classe. D'abord nous ajouterons des gens à notre application, et stockerons une liste d'événements auxquels ils participent."
+
+#: index.docbook:531
+msgid "Note: Most new Hibernate users fail at this point and we see questions about <emphasis>Table not found</emphasis> error messages regularly. However, if you follow the steps outlined above you will not have this problem, as hbm2ddl creates the database schema on the first run, and subsequent application restarts will use this schema. If you change the mapping and/or database schema, you have to re-enable hbm2ddl once again."
+msgstr "Mapper la classe Person"
+
+#: index.docbook:544
+msgid "Part 2 - Mapping associations"
+msgstr "La première version de la classe <literal>Person</literal> est simple :"
+
+#: index.docbook:546
+msgid "We mapped a persistent entity class to a table. Let's build on this and add some class associations. First we'll add people to our application, and store a list of events they participate in."
+msgstr ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "public class Person {\n"
+ "\n"
+ " private Long id;\n"
+ " private int age;\n"
+ " private String firstname;\n"
+ " private String lastname;\n"
+ "\n"
+ " public Person() {}\n"
+ "\n"
+ " // Accessor methods for all properties, private setter for 'id'\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:552
+msgid "Mapping the Person class"
+msgstr "Créez un nouveau fichier de mapping appelé <literal>Person.hbm.xml</literal> (n'oubliez pas la référence à la DTD)"
+
+#: index.docbook:554
+msgid "The first cut of the <literal>Person</literal> class is simple:"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:558
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "public class Person {\n"
+ "\n"
+ " private Long id;\n"
+ " private int age;\n"
+ " private String firstname;\n"
+ " private String lastname;\n"
+ "\n"
+ " public Person() {}\n"
+ "\n"
+ " // Accessor methods for all properties, private setter for 'id'\n"
+ "\n"
+ "}]]>"
+msgstr "Finalement, ajoutez la nouveau mapping à la configuration d'Hibernate :"
+
+#: index.docbook:560
+msgid "Create a new mapping file called <literal>Person.hbm.xml</literal> (don't forget the DTD reference at the top):"
+msgstr ""
+ "<![CDATA[<mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "<mapping resource=\"events/Person.hbm.xml\"/>]]>"
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "Nous allons maintenant créer une association entre ces deux entités. Ãvidemment, des personnes peuvent participer aux événements, et des événements ont des participants. Les questions de conception que nous devons traiter sont : direction, cardinalité et comportement de la collection."
+
+#: index.docbook:567
+msgid "Finally, add the new mapping to Hibernate's configuration:"
+msgstr "Une association unidirectionnelle basée sur Set"
+
+#: index.docbook:571
+msgid ""
+ "<![CDATA[<mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "<mapping resource=\"events/Person.hbm.xml\"/>]]>"
+msgstr "Nous allons ajouter une collection d'événements à la classe <literal>Person</literal>. De cette manière nous pouvons facilement naviguer dans les événements d'une personne particulière, sans exécuter une requête explicite - en appelant <literal>aPerson.getEvents()</literal>. Nous utilisons une collection Java, un <literal>Set</literal>, parce que la collection ne contiendra pas d'éléments dupliqués et l'ordre ne nous importe pas."
+
+#: index.docbook:573
+msgid "We'll now create an association between these two entities. Obviously, persons can participate in events, and events have participants. The design questions we have to deal with are: directionality, multiplicity, and collection behavior."
+msgstr "Nous avons besoin d'une association unidirectionnelle, pluri-valuée, implémentée avec un <literal>Set</literal>. Ãcrivons le code pour ça dans les classes Java et mappons les :"
+
+#: index.docbook:583
+msgid "A unidirectional Set-based association"
+msgstr ""
+ "<![CDATA[public class Person {\n"
+ "\n"
+ " private Set events = new HashSet();\n"
+ "\n"
+ " public Set getEvents() {\n"
+ " return events;\n"
+ " }\n"
+ "\n"
+ " public void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:585
+msgid "We'll add a collection of events to the <literal>Person</literal> class. That way we can easily navigate to the events for a particular person, without executing an explicit query - by calling <literal>aPerson.getEvents()</literal>. We use a Java collection, a <literal>Set</literal>, because the collection will not contain duplicate elements and the ordering is not relevant for us."
+msgstr "D'abord nous mappons cette association, mais pensez à l'autre côté. Clairement, nous pouvons la laisser unidirectionnelle. Ou alors, nous pourrions créer une autre collection sur <literal>Event</literal>, si nous voulons être capable de la parcourir de manière bidirectionnelle, c'est-à -dire avoir <literal>anEvent.getParticipants()</literal>. Ce n'est pas nécessaire d'un point de vue fonctionnel. Vous pourrez toujours exécuter une requête explicite pour récupérer les participants d'un \"event\" particulier. Ce choix de conception vous est laissé, mais ce qui reste certains est la cardinalité de l'association: \"plusieurs\" des deux côtés, nous appelons cela une association <emphasis>many-to-many</emphasis>. Par conséquent nous utilisons un mapping Hibernate many-to-many:"
+
+#: index.docbook:592
+msgid "We need a unidirectional, many-valued associations, implemented with a <literal>Set</literal>. Let's write the code for this in the Java classes and then map it:"
+msgstr ""
+ "<![CDATA[<class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ "\n"
+ " <set name=\"events\" table=\"PERSON_EVENT\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <many-to-many column=\"EVENT_ID\" class=\"Event\"/>\n"
+ " </set>\n"
+ "\n"
+ "</class>]]>"
+
+#: index.docbook:597
+msgid ""
+ "<![CDATA[public class Person {\n"
+ "\n"
+ " private Set events = new HashSet();\n"
+ "\n"
+ " public Set getEvents() {\n"
+ " return events;\n"
+ " }\n"
+ "\n"
+ " public void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ " }\n"
+ "}]]>"
+msgstr "Hibernate supporte toutes sortes de mapping de collection, un <literal><set></literal> étant le plus commun. Pour une association many-to-many (ou une relation d'entité <emphasis>n:m</emphasis>), une table d'association est requise. Chaque ligne dans cette table représente un lien entre une personne et un événement. Le nom de la table est configuré avec l'attribut <literal>table</literal> de l'élément <literal>set</literal>. Le nom de la colonne identifiant dans l'association, du côté de la personne, est défini avec l'élément <literal><key></literal>, et le nom de la colonne pour l'événement dans l'attribut <literal>column</literal> de <literal><many-to-many></literal>. Vous devez aussi donner à Hibernate la classe des objets de votre collection (c'est-à -dire : la classe de l'autre côté de la collection)."
+
+#: index.docbook:599
+msgid "Before we map this association, think about the other side. Clearly, we could just keep this unidirectional. Or, we could create another collection on the <literal>Event</literal>, if we want to be able to navigate it bi-directional, i.e. <literal>anEvent.getParticipants()</literal>. This is not necessary, from a functional perspective. You could always execute an explicit query to retrieve the participants for a particular event. This is a design choice left to you, but what is clear from this discussion is the multiplicity of the association: \"many\" valued on both sides, we call this a <emphasis>many-to-many</emphasis> association. Hence, we use Hibernate's many-to-many mapping:"
+msgstr "Le schéma de base de données pour ce mapping est donc :"
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ "\n"
+ " <set name=\"events\" table=\"PERSON_EVENT\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <many-to-many column=\"EVENT_ID\" class=\"events.Event\"/>\n"
+ " </set>\n"
+ "\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | |\n"
+ " |_____________| |__________________| | PERSON |\n"
+ " | | | | |_____________|\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | |\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE |\n"
+ " |_____________| | FIRSTNAME |\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+
+#: index.docbook:612
+msgid "Hibernate supports all kinds of collection mappings, a <literal><set></literal> being most common. For a many-to-many association (or <emphasis>n:m</emphasis> entity relationship), an association table is needed. Each row in this table represents a link between a person and an event. The table name is configured with the <literal>table</literal> attribute of the <literal>set</literal> element. The identifier column name in the association, for the person's side, is defined with the <literal><key></literal> element, the column name for the event's side with the <literal>column</literal> attribute of the <literal><many-to-many></literal>. You also have to tell Hibernate the class of the objects in your collection (correct: the class on the other side of the collection of references)."
+msgstr "Travailler avec l'association"
+
+#: index.docbook:624
+msgid "The database schema for this mapping is therefore:"
+msgstr "Réunissons quelques personnes et quelques événements dans une nouvelle méthode dans <literal>EventManager</literal> :"
+
+#: index.docbook:628
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | |\n"
+ " |_____________| |__________________| | PERSON |\n"
+ " | | | | |_____________|\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | |\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE |\n"
+ " |_____________| | FIRSTNAME |\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+
+#: index.docbook:633
+msgid "Working the association"
+msgstr "Après le chargement d'une <literal>Person</literal> et d'un <literal>Event</literal>, modifiez simplement la collection en utilisant les méthodes normales de la collection. Comme vous pouvez le voir, il n'y a pas d'appel explicite à <literal>update()</literal> ou <literal>save()</literal>, Hibernate détecte automatiquement que la collection a été modifiée et a besoin d'être mise à jour. Ceci est appelé <emphasis>la vérification sale automatique</emphasis> (NdT : \"automatic dirty checking\"), et vous pouvez aussi l'essayer en modifiant le nom ou la propriété date de n'importe lequel de vos objets. Tant qu'ils sont dans un état <emphasis>persistant</emphasis>, c'est-à -dire, liés à une <literal>Session</literal> Hibernate particulière (c-à -d qu'ils ont juste été chargés ou sauvegardés dans une unité de travail), Hibernate surveille les changements et exécute le SQL correspondant. Le processus de synchronisation de l'état de la mémoire avec l!
a base de données, généralement seulement à la fin d'une unité de travail, est appelé <emphasis>flushing</emphasis>. Dans notre code, l'unité de travail s'achève par un commit (ou rollback) de la transaction avec la base de données - comme défini par notre option <literal>thread</literal> de configuration pour la classe <literal>CurrentSessionContext</literal>."
+
+#: index.docbook:635
+msgid "Let's bring some people and events together in a new method in <literal>EventManager</literal>:"
+msgstr "Vous pourriez bien sûr charger une personne et un événement dans différentes unités de travail. Ou vous modifiez un objet à l'extérieur d'une <literal>Session</literal>, s'il n'est pas dans un état persistant (s'il était persistant avant, nous appelons cet état <emphasis>détaché</emphasis>). Vous pouvez même modifier une collection lorsqu'elle est détachée:"
+
+#: index.docbook:639
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session\n"
+ " .createQuery(\"select p from Person p left join fetch p.events where p.id = :pid\")\n"
+ " .setParameter(\"pid\", personId)\n"
+ " .uniqueResult(); // Eager fetch the collection so we can use it detached\n"
+ "\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " // End of first unit of work\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent); // aPerson (and its collection) is detached\n"
+ "\n"
+ " // Begin second unit of work\n"
+ "\n"
+ " Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session2.beginTransaction();\n"
+ "\n"
+ " session2.update(aPerson); // Reattachment of aPerson\n"
+ "\n"
+ " session2.getTransaction().commit();\n"
+ "}]]>"
+
+#: index.docbook:641
+msgid "After loading a <literal>Person</literal> and an <literal>Event</literal>, simply modify the collection using the normal collection methods. As you can see, there is no explicit call to <literal>update()</literal> or <literal>save()</literal>, Hibernate automatically detects that the collection has been modified and needs to be updated. This is called <emphasis>automatic dirty checking</emphasis>, and you can also try it by modifying the name or the date property of any of your objects. As long as they are in <emphasis>persistent</emphasis> state, that is, bound to a particular Hibernate <literal>Session</literal> (i.e. they have been just loaded or saved in a unit of work), Hibernate monitors any changes and executes SQL in a write-behind fashion. The process of synchronizing the memory state with the database, usually only at the end of a unit of work, is called <emphasis>flushing</emphasis>. In our code, the unit of work ends with a commit (or rollback) of the dat!
abase transaction - as defined by the <literal>thread</literal> configuration option for the <literal>CurrentSessionContext</literal> class."
+msgstr "L'appel à <literal>update</literal> rend un objet détaché à nouveau persistant, vous pourriez dire qu'il le lie à une unité de travail, ainsi toutes les modifications (ajout, suppression) que vous avez faites pendant qu'il était détaché peuvent être sauvegardées dans la base de données (il se peut que vous ayez besoin de modifier quelques unes des méthodes précédentes pour retourner cet identifiant)."
+
+#: index.docbook:656
+msgid "You might of course load person and event in different units of work. Or you modify an object outside of a <literal>Session</literal>, when it is not in persistent state (if it was persistent before, we call this state <emphasis>detached</emphasis>). You can even modify a collection when it is detached:"
+msgstr ""
+ "<![CDATA[else if (args[0].equals(\"addpersontoevent\")) {\n"
+ " Long eventId = mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " Long personId = mgr.createAndStorePerson(\"Foo\", \"Bar\");\n"
+ " mgr.addPersonToEvent(personId, eventId);\n"
+ " System.out.println(\"Added person \" + personId + \" to event \" + eventId);]]>"
+
+#: index.docbook:663
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session\n"
+ " .createQuery(\"select p from Person p left join fetch p.events where p.id = :pid\")\n"
+ " .setParameter(\"pid\", personId)\n"
+ " .uniqueResult(); // Eager fetch the collection so we can use it detached\n"
+ "\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " // End of first unit of work\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent); // aPerson (and its collection) is detached\n"
+ "\n"
+ " // Begin second unit of work\n"
+ "\n"
+ " Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session2.beginTransaction();\n"
+ "\n"
+ " session2.update(aPerson); // Reattachment of aPerson\n"
+ "\n"
+ " session2.getTransaction().commit();\n"
+ "}]]>"
+msgstr "Ce n'est pas très utile dans notre situation actuelle, mais c'est un concept important que vous pouvez mettre dans votre propre application. Pour le moment, complétez cet exercice en ajoutant une nouvelle action à la méthode principale des <literal>EventManager</literal>s et appelez la à partir de la ligne de commande. Si vous avez besoin des identifiants d'une personne et d'un événement - la méthode <literal>save()</literal> les retourne."
+
+#: index.docbook:665
+msgid "The call to <literal>update</literal> makes a detached object persistent again, you could say it binds it to a new unit of work, so any modifications you made to it while detached can be saved to the database. This includes any modifications (additions/deletions) you made to a collection of that entity object."
+msgstr "C'était un exemple d'une association entre deux classes de même importance, deux entités. Comme mentionné plus tôt, il y a d'autres classes et d'autres types dans un modèle typique, généralement \"moins importants\". Vous en avez déjà vu certains, comme un <literal>int</literal> ou une <literal>String</literal>. Nous appelons ces classes des <emphasis>types de valeur</emphasis>, et leurs instances <emphasis>dépendent</emphasis> d'une entité particulière. Des instances de ces types n'ont pas leur propre identité, elles ne sont pas non plus partagées entre des entités (deux personnes ne référencent pas le même objet <literal>firstname</literal>, même si elles ont le même prénom). Bien sûr, des types de valeur ne peuvent pas seulement être trouvés dans le JDK (en fait, dans une application Hibernate toutes les classes du JDK sont considérées comme des types de valeur), vous pouvez aussi écrire vous-même des classes dépendantes, <literal>Ad!
dress</literal> ou <literal>MonetaryAmount</literal>, par exemple."
+
+#: index.docbook:672
+msgid "Well, this is not much use in our current situation, but it's an important concept you can design into your own application. For now, complete this exercise by adding a new action to the <literal>EventManager</literal>'s main method and call it from the command line. If you need the identifiers of a person and an event - the <literal>save()</literal> method returns it (you might have to modify some of the previous methods to return that identifier):"
+msgstr "Vous pouvez aussi concevoir une collection de types de valeur. C'est conceptuellement très différent d'une collection de références vers d'autres entités, mais très ressemblant en Java."
+
+#: index.docbook:680
+msgid ""
+ "<![CDATA[else if (args[0].equals(\"addpersontoevent\")) {\n"
+ " Long eventId = mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " Long personId = mgr.createAndStorePerson(\"Foo\", \"Bar\");\n"
+ " mgr.addPersonToEvent(personId, eventId);\n"
+ " System.out.println(\"Added person \" + personId + \" to event \" + eventId);\n"
+ "}]]>"
+msgstr "Collection de valeurs"
+
+#: index.docbook:682
+msgid "This was an example of an association between two equally important classes, two entities. As mentioned earlier, there are other classes and types in a typical model, usually \"less important\". Some you have already seen, like an <literal>int</literal> or a <literal>String</literal>. We call these classes <emphasis>value types</emphasis>, and their instances <emphasis>depend</emphasis> on a particular entity. Instances of these types don't have their own identity, nor are they shared between entities (two persons don't reference the same <literal>firstname</literal> object, even if they have the same first name). Of course, value types can not only be found in the JDK (in fact, in a Hibernate application all JDK classes are considered value types), but you can also write dependent classes yourself, <literal>Address</literal> or <literal>MonetaryAmount</literal>, for example."
+msgstr "Nous ajoutons une collection d'objets de type de valeur à l'entité <literal>Person</literal>. Nous voulons stocker des adresses email, donc le type que nous utilisons est <literal>String</literal>, et la collection est encore un <literal>Set</literal> :"
+
+#: index.docbook:695
+msgid "You can also design a collection of value types. This is conceptually very different from a collection of references to other entities, but looks almost the same in Java."
+msgstr ""
+ "<![CDATA[private Set emailAddresses = new HashSet();\n"
+ "\n"
+ "public Set getEmailAddresses() {\n"
+ " return emailAddresses;\n"
+ "}\n"
+ "\n"
+ "public void setEmailAddresses(Set emailAddresses) {\n"
+ " this.emailAddresses = emailAddresses;\n"
+ "}]]>"
+
+#: index.docbook:703
+msgid "Collection of values"
+msgstr "Le mapping de ce <literal>Set</literal> :"
+
+#: index.docbook:705
+msgid "We add a collection of value typed objects to the <literal>Person</literal> entity. We want to store email addresses, so the type we use is <literal>String</literal>, and the collection is again a <literal>Set</literal>:"
+msgstr ""
+ "<![CDATA[<set name=\"emailAddresses\" table=\"PERSON_EMAIL_ADDR\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <element type=\"string\" column=\"EMAIL_ADDR\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:710
+msgid ""
+ "<![CDATA[private Set emailAddresses = new HashSet();\n"
+ "\n"
+ "public Set getEmailAddresses() {\n"
+ " return emailAddresses;\n"
+ "}\n"
+ "\n"
+ "public void setEmailAddresses(Set emailAddresses) {\n"
+ " this.emailAddresses = emailAddresses;\n"
+ "}]]>"
+msgstr "La différence comparée au mapping vu plus tôt est la partie <literal>element</literal>, laquelle dit à Hibernate que la collection ne contient pas de références vers une autre entité, mais une collection d'éléments de type <literal>String</literal> (le nom en minuscule vous indique que c'est un type/convertisseur du mapping Hibernate). Une fois encore, l'attribut <literal>table</literal> de l'élément <literal>set</literal> détermine le nom de la table pour la collection. L'élément <literal>key</literal> définit le nom de la colonne de la clef étrangère dans la table de la collection. L'attribut <literal>column</literal> dans l'élément <literal>element</literal> définit le nom de la colonne où les valeurs de <literal>String</literal> seront réellement stockées."
+
+#: index.docbook:712
+msgid "The mapping of this <literal>Set</literal>:"
+msgstr "Regardons le schéma mis à jour :"
+
+#: index.docbook:716
+msgid ""
+ "<![CDATA[<set name=\"emailAddresses\" table=\"PERSON_EMAIL_ADDR\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <element type=\"string\" column=\"EMAIL_ADDR\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | | ___________________\n"
+ " |_____________| |__________________| | PERSON | | |\n"
+ " | | | | |_____________| | PERSON_EMAIL_ADDR |\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | | |___________________|\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE | | *EMAIL_ADDR |\n"
+ " |_____________| | FIRSTNAME | |___________________|\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+
+#: index.docbook:718
+msgid "The difference compared with the earlier mapping is the <literal>element</literal> part, which tells Hibernate that the collection does not contain references to another entity, but a collection of elements of type <literal>String</literal> (the lowercase name tells you it's a Hibernate mapping type/converter). Once again, the <literal>table</literal> attribute of the <literal>set</literal> element determines the table name for the collection. The <literal>key</literal> element defines the foreign-key column name in the collection table. The <literal>column</literal> attribute in the <literal>element</literal> element defines the column name where the <literal>String</literal> values will actually be stored."
+msgstr "Vous pouvez voir que la clef primaire de la table de la collection est en fait une clef composée, utilisant deux colonnes. Ceci implique aussi qu'il ne peut pas y avoir d'adresses email dupliquées par personne, ce qui est exactement la sémantique dont nous avons besoin pour un ensemble en Java."
+
+#: index.docbook:728
+msgid "Have a look at the updated schema:"
+msgstr "Vous pouvez maintenant tester et ajouter des éléments à cette collection, juste comme nous l'avons fait avant en liant des personnes et des événements. C'est le même code en Java."
+
+#: index.docbook:732
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | | ___________________\n"
+ " |_____________| |__________________| | PERSON | | |\n"
+ " | | | | |_____________| | PERSON_EMAIL_ADDR |\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | | |___________________|\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE | | *EMAIL_ADDR |\n"
+ " |_____________| | FIRSTNAME | |___________________|\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[private void addEmailToPerson(Long personId, String emailAddress) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ "\n"
+ " // The getEmailAddresses() might trigger a lazy load of the collection\n"
+ " aPerson.getEmailAddresses().add(emailAddress);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+
+#: index.docbook:734
+msgid "You can see that the primary key of the collection table is in fact a composite key, using both columns. This also implies that there can't be duplicate email addresses per person, which is exactly the semantics we need for a set in Java."
+msgstr "Cette fois ci, nous n'avons pas utilisé une requête de chargement agressif (<emphasis>fetch</emphasis>) pour initialiser la collection. Par conséquent, l'invocation du getter déclenchera un select supplémentaire pour l'initialiser. Traquez les logs SQL et tentez d'optimiser ce cas avec un chargement aggressif."
+
+#: index.docbook:740
+msgid "You can now try and add elements to this collection, just like we did before by linking persons and events. It's the same code in Java:"
+msgstr "Associations bidirectionnelles"
+
+#: index.docbook:745
+msgid ""
+ "<![CDATA[private void addEmailToPerson(Long personId, String emailAddress) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ "\n"
+ " // The getEmailAddresses() might trigger a lazy load of the collection\n"
+ " aPerson.getEmailAddresses().add(emailAddress);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr "Ensuite nous allons mapper une association bidirectionnelle - faire fonctionner l'association entre une personne et un événement à partir des deux côtés en Java. Bien sûr, le schéma de la base de données ne change pas, nous avons toujours une pluralité many-to-many. Une base de données relationnelle est plus flexible qu'un langage de programmation réseau, donc elle n'a pas besoin de direction de navigation - les données peuvent être vues et récupérées de toutes les manières possibles."
+
+#: index.docbook:747
+msgid "This time we didnt' use a <emphasis>fetch</emphasis> query to initialize the collection. Hence, the call to its getter method will trigger an additional select to initialize it, so we can add an element to it. Monitor the SQL log and try to optimize this with an eager fetch."
+msgstr "D'abord, ajouter une collection de participants à la classe <literal>Event</literal> :"
+
+#: index.docbook:757
+msgid "Bi-directional associations"
+msgstr ""
+ "<![CDATA[private Set participants = new HashSet();\n"
+ "\n"
+ "public Set getParticipants() {\n"
+ " return participants;\n"
+ "}\n"
+ "\n"
+ "public void setParticipants(Set participants) {\n"
+ " this.participants = participants;\n"
+ "}]]>"
+
+#: index.docbook:759
+msgid "Next we are going to map a bi-directional association - making the association between person and event work from both sides in Java. Of course, the database schema doesn't change, we still have many-to-many multiplicity. A relational database is more flexible than a network programming language, so it doesn't need anything like a navigation direction - data can be viewed and retrieved in any possible way."
+msgstr "Maintenant mapper ce côté de l'association aussi, dans <literal>Event.hbm.xml</literal>."
+
+#: index.docbook:767
+msgid "First, add a collection of participants to the <literal>Event</literal> Event class:"
+msgstr ""
+ "<![CDATA[<set name=\"participants\" table=\"PERSON_EVENT\" inverse=\"true\">\n"
+ " <key column=\"EVENT_ID\"/>\n"
+ " <many-to-many column=\"PERSON_ID\" class=\"events.Person\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:771
+msgid ""
+ "<![CDATA[private Set participants = new HashSet();\n"
+ "\n"
+ "public Set getParticipants() {\n"
+ " return participants;\n"
+ "}\n"
+ "\n"
+ "public void setParticipants(Set participants) {\n"
+ " this.participants = participants;\n"
+ "}]]>"
+msgstr "Comme vous le voyez, ce sont des mappings de <literal>set</literal>s normaux dans les deux documents de mapping. Notez que les noms de colonne dans <literal>key</literal> et <literal>many-to-many</literal> sont inversés dans les 2 documents de mapping. L'ajout le plus important ici est l'attribut <literal>inverse=\"true\"</literal> dans l'élément <literal>set</literal> du mapping de la collection des <literal>Event</literal>s."
+
+#: index.docbook:773
+msgid "Now map this side of the association too, in <literal>Event.hbm.xml</literal>."
+msgstr "Ce que signifie qu'Hibernate devrait prendre l'autre côté - la classe <literal>Person</literal> - s'il a besoin de renseigner des informations à propos du lien entre les deux. Ce sera beaucoup plus facile à comprendre une fois que vous verrez comment le lien bidirectionnel entre les deux entités est créé."
+
+#: index.docbook:777
+msgid ""
+ "<![CDATA[<set name=\"participants\" table=\"PERSON_EVENT\" inverse=\"true\">\n"
+ " <key column=\"EVENT_ID\"/>\n"
+ " <many-to-many column=\"PERSON_ID\" class=\"events.Person\"/>\n"
+ "</set>]]>"
+msgstr "Travailler avec des liens bidirectionnels"
+
+#: index.docbook:779
+msgid "As you see, these are normal <literal>set</literal> mappings in both mapping documents. Notice that the column names in <literal>key</literal> and <literal>many-to-many</literal> are swapped in both mapping documents. The most important addition here is the <literal>inverse=\"true\"</literal> attribute in the <literal>set</literal> element of the <literal>Event</literal>'s collection mapping."
+msgstr "Premièrement, gardez à l'esprit qu'Hibernate n'affecte pas la sémantique normale de Java. Comment avons-nous créé un lien entre une <literal>Person</literal> et un <literal>Event</literal> dans l'exemple unidirectionnel ? Nous avons ajouté une instance de <literal>Event</literal> à la collection des références d'événement d'une instance de <literal>Person</literal>. Donc, évidemment, si vous voulons rendre ce lien bidirectionnel, nous devons faire la même chose de l'autre côté - ajouter une référence de <literal>Person</literal> à la collection d'un <literal>Event</literal>. Cette \"configuration du lien des deux côtés\" est absolument nécessaire et vous ne devriez jamais oublier de le faire."
+
+#: index.docbook:787
+msgid "What this means is that Hibernate should take the other side - the <literal>Person</literal> class - when it needs to find out information about the link between the two. This will be a lot easier to understand once you see how the bi-directional link between our two entities is created ."
+msgstr "Beaucoup de développeurs programment de manière défensive et créent des méthodes de gestion de lien pour affecter correctement les deux côtés, par exemple dans <literal>Person</literal> :"
+
+#: index.docbook:796
+msgid "Working bi-directional links"
+msgstr ""
+ "<![CDATA[protected Set getEvents() {\n"
+ " return events;\n"
+ "}\n"
+ "\n"
+ "protected void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ "}\n"
+ "\n"
+ "public void addToEvent(Event event) {\n"
+ " this.getEvents().add(event);\n"
+ " event.getParticipants().add(this);\n"
+ "}\n"
+ "\n"
+ "public void removeFromEvent(Event event) {\n"
+ " this.getEvents().remove(event);\n"
+ " event.getParticipants().remove(this);\n"
+ "}]]>"
+
+#: index.docbook:798
+msgid "First, keep in mind that Hibernate does not affect normal Java semantics. How did we create a link between a <literal>Person</literal> and an <literal>Event</literal> in the unidirectional example? We added an instance of <literal>Event</literal> to the collection of event references, of an instance of <literal>Person</literal>. So, obviously, if we want to make this link working bi-directional, we have to do the same on the other side - adding a <literal>Person</literal> reference to the collection in an <literal>Event</literal>. This \"setting the link on both sides\" is absolutely necessary and you should never forget doing it."
+msgstr "Notez que les méthodes get et set pour la collection sont maintenant protégées - ceci permet à des classes du même paquet et aux sous-classes d'accéder encore aux méthodes, mais empêche n'importe qui d'autre de mettre le désordre directement dans les collections (enfin, presque). Vous devriez probablement faire de même avec la collection de l'autre côté."
+
+#: index.docbook:808
+msgid "Many developers program defensive and create link management methods to correctly set both sides, e.g. in <literal>Person</literal>:"
+msgstr "Et à propos de l'attribut de mapping <literal>inverse</literal> ? Pour vous, et pour Java, un lien bidirectionnel est simplement une manière de configurer correctement les références des deux côtés. Hibernate n'a cependant pas assez d'informations pour ordonner correctement les expressions SQL <literal>INSERT</literal> et <literal>UPDATE</literal> (pour éviter les violations de contrainte), et a besoin d'aide pour gérer proprement les associations bidirectionnelles. Rendre <literal>inverse</literal> un côté d'une assocation dit à Hibernate de l'ignorer essentiellement, pour le considérer comme un <emphasis>miroir</emphasis> de l'autre côté. C'est tout ce qui est nécessaire à Hibernate pour découvrir tout des problèmes de transformation d'un modèle de navigation directionnelle vers un schéma SQL de base de données. Les règles dont vous devez vous souvenir sont : toutes les associations bidirectionnelles ont besoin d'un côté marqué <literal>in!
verse</literal>. Dans une association un-vers-plusieurs vous pouvez choisir n'importe quel côté, il n'y a pas de différence."
+
+#: index.docbook:813
+msgid ""
+ "<![CDATA[protected Set getEvents() {\n"
+ " return events;\n"
+ "}\n"
+ "\n"
+ "protected void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ "}\n"
+ "\n"
+ "public void addToEvent(Event event) {\n"
+ " this.getEvents().add(event);\n"
+ " event.getParticipants().add(this);\n"
+ "}\n"
+ "\n"
+ "public void removeFromEvent(Event event) {\n"
+ " this.getEvents().remove(event);\n"
+ " event.getParticipants().remove(this);\n"
+ "}]]>"
+msgstr "Part 3 - L'application web EventManager"
+
+#: index.docbook:815
+msgid "Notice that the get and set methods for the collection are now protected - this allows classes in the same package and subclasses to still access the methods, but prevents everybody else from messing with the collections directly (well, almost). You should probably do the same with the collection on the other side."
+msgstr "Une application web Hibernate utilise la <literal>Session</literal> et <literal>Transaction</literal> comme une application standalone. Cependant, quelques patterns sont utiles. Nous allons coder une <literal>EventManagerServlet</literal>. Cette servlet peut lister tous les évènements stockés dans la base de données, et fournir une formulaire HTML pour saisir d'autres évènements."
+
+#: index.docbook:822
+msgid "What about the <literal>inverse</literal> mapping attribute? For you, and for Java, a bi-directional link is simply a matter of setting the references on both sides correctly. Hibernate however doesn't have enough information to correctly arrange SQL <literal>INSERT</literal> and <literal>UPDATE</literal> statements (to avoid constraint violations), and needs some help to handle bi-directional associations properly. Making one side of the association <literal>inverse</literal> tells Hibernate to basically ignore it, to consider it a <emphasis>mirror</emphasis> of the other side. That's all that is necessary for Hibernate to work out all of the issues when transformation a directional navigation model to a SQL database schema. The rules you have to remember are straightforward: All bi-directional associations need one side as <literal>inverse</literal>. In a one-to-many association it has to be the many-side, in many-to-many association you can pick either side, there!
is no difference."
+msgstr "Ecrire la servlet de base"
+
+#: index.docbook:837
+msgid "Let's turn this into a small web application."
+msgstr "Créons une nouvelle classe dans notre répertoire source, dans le package <literal>events</literal>:"
+
+#: index.docbook:844
+msgid "Part 3 - The EventManager web application"
+msgstr ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "// Imports\n"
+ "\n"
+ "public class EventManagerServlet extends HttpServlet {\n"
+ "\n"
+ " private final SimpleDateFormat dateFormatter =\n"
+ " new SimpleDateFormat(\"dd.MM.yyyy\");\n"
+ "\n"
+ " // Servlet code\n"
+ "}]]>"
+
+#: index.docbook:846
+msgid "A Hibernate web application uses <literal>Session</literal> and <literal>Transaction</literal> almost like a standalone application. However, some common patterns are useful. We now write an <literal>EventManagerServlet</literal>. This servlet can list all events stored in the database, and it provides an HTML form to enter new events."
+msgstr "Le <literal>dateFormatter</literal> est un outil que nous utiliserons plus tard pour convertir les objets <literal>Date</literal> depuis et vers des chaines de caractères. Il est propice de n'avoir qu'un formatter comme membre de la servlet."
+
+#: index.docbook:854
+msgid "Writing the basic servlet"
+msgstr "La servlet n'accepte que les requêtes HTTP <literal>GET</literal>, la méthode à implémenter est donc <literal>doGet()</literal>:"
+
+#: index.docbook:856
+msgid "Create a new class in your source directory, in the <literal>events</literal> package:"
+msgstr ""
+ "<![CDATA[protected void doGet(HttpServletRequest request,\n"
+ " HttpServletResponse response)\n"
+ " throws ServletException, IOException {\n"
+ "\n"
+ " try {\n"
+ " // Begin unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // Process request and render page...\n"
+ "\n"
+ " // End unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().commit();\n"
+ "\n"
+ " } catch (Exception ex) {\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().rollback();\n"
+ " throw new ServletException(ex);\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:861
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "// Imports\n"
+ "\n"
+ "public class EventManagerServlet extends HttpServlet {\n"
+ "\n"
+ " // Servlet code\n"
+ "}]]>"
+msgstr "La pattern que nous utilisons ici est appelé <emphasis>session-per-request</emphasis>. Lorsqu'une requête touche la servlet, une nouvelle <literal>Session</literal> hibernate est ouverte à l'invocationde <literal>getCurrentSession()</literal> sur la <literal>SessionFactory</literal>. Ensuite, une transaction avec la base de données est démarrée— tous les accès à la base de données interviennent au sein de la transactiton, peu importe que les données soient lues ou écrites (nous n'utilisons pas le mode auto-commit dans les applications)."
+
+#: index.docbook:863
+msgid "The servlet handles HTTP <literal>GET</literal> requests only, hence, the method we implement is <literal>doGet()</literal>:"
+msgstr "Ensuite, les actions possibles de la requêtes sont exécutées et la réponse HTML est rendue. Nous en parlerons plus tard."
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[protected void doGet(HttpServletRequest request,\n"
+ " HttpServletResponse response)\n"
+ " throws ServletException, IOException {\n"
+ "\n"
+ " SimpleDateFormat dateFormatter = new SimpleDateFormat(\"dd.MM.yyyy\");\n"
+ "\n"
+ " try {\n"
+ " // Begin unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // Process request and render page...\n"
+ "\n"
+ " // End unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().commit();\n"
+ "\n"
+ " } catch (Exception ex) {\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().rollback();\n"
+ " throw new ServletException(ex);\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr "Enfin, l'unité de travail s'achève lorsque l'exécution et le rendu sont achevés. Si un problème survient lors de ces deux phases, une exception est soulevée et la transaction avec la base de données subit un rollback. Voila pour le pattern <literal>session-per-request</literal>. Au lieu d'un code de démarcation de transaction au sein de chaque servlet, vous pouvez écrire un filtre de servlet. Voir le site Hibernate et le Wiki pour plus d'information sur ce pattern, appelé <emphasis>Open Session in View</emphasis>— vous en aurez besoin dès que vous utiliserez des JSPs et non plus des servlets pour le rendu de vos vues."
+
+#: index.docbook:870
+msgid "The pattern we are applying here is called <emphasis>session-per-request</emphasis>. When a request hits the servlet, a new Hibernate <literal>Session</literal> is opened through the first call to <literal>getCurrentSession()</literal> on the <literal>SessionFactory</literal>. Then a database transaction is started—all data access as to occur inside a transaction, no matter if data is read or written (we don't use the auto-commit mode in applications)."
+msgstr "Procéder et rendre"
+
+#: index.docbook:879
+msgid "Do <emphasis>not</emphasis> use a new Hibernate <literal>Session</literal> for every database operation. Use one Hibernate <literal>Session</literal> that is scoped to the whole request. Use <literal>getCurrentSession()</literal>, so that it is automatically bound to the current Java thread."
+msgstr "Implémentons l'exécution de la requête et le rendu de la page."
+
+#: index.docbook:886
+msgid "Next, the possible actions of the request are processed and the response HTML is rendered. We'll get to that part soon."
+msgstr ""
+ "<![CDATA[// Write HTML header\n"
+ "PrintWriter out = response.getWriter();\n"
+ "out.println(\"<html><head><title>Event Manager</title></head><body>\");\n"
+ "\n"
+ "// Handle actions\n"
+ "if ( \"store\".equals(request.getParameter(\"action\")) ) {\n"
+ "\n"
+ " String eventTitle = request.getParameter(\"eventTitle\");\n"
+ " String eventDate = request.getParameter(\"eventDate\");\n"
+ "\n"
+ " if ( \"\".equals(eventTitle) || \"\".equals(eventDate) ) {\n"
+ " out.println(\"<b><i>Please enter event title and date.</i></b>\");\n"
+ " } else {\n"
+ " createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));\n"
+ " out.println(\"<b><i>Added event.</i></b>\");\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "// Print page\n"
+ "printEventForm(out);\n"
+ "listEvents(out);\n"
+ "\n"
+ "// Write HTML footer\n"
+ "out.println(\"</body></html>\");\n"
+ "out.flush();\n"
+ "out.close();]]>"
+
+#: index.docbook:891
+msgid "Finally, the unit of work ends when processing and rendering is complete. If any problem occured during processing or rendering, an exception will be thrown and the database transaction rolled back. This completes the <literal>session-per-request</literal> pattern. Instead of the transaction demarcation code in every servlet you could also write a servlet filter. See the Hibernate website and Wiki for more information about this pattern, called <emphasis>Open Session in View</emphasis>—you'll need it as soon as you consider rendering your view in JSP, not in a servlet."
+msgstr "Ce style de code avec un mix de Java et d'HTML ne serait pas scalable dans une application plus complexe—gardez à l'esprit que nous ne faisons qu'illustrer les concepts basiques d'Hibernate dans ce tutoriel. Ce code affiche une en tête et un pied de page HTML. Dans cette page, sont affichés un formulaire pour la saisie d'évènements ainsi qu'une liste de tous les évènements de la base de données. La première méthode est triviale est ne fait que sortir de l'HTML:"
+
+#: index.docbook:905
+msgid "Processing and rendering"
+msgstr ""
+ "<![CDATA[private void printEventForm(PrintWriter out) {\n"
+ " out.println(\"<h2>Add new event:</h2>\");\n"
+ " out.println(\"<form>\");\n"
+ " out.println(\"Title: <input name='eventTitle' length='50'/><br/>\");\n"
+ " out.println(\"Date (e.g. 24.12.2009): <input name='eventDate' length='10'/><br/>\");\n"
+ " out.println(\"<input type='submit' name='action' value='store'/>\");\n"
+ " out.println(\"</form>\");\n"
+ "}]]>"
+
+#: index.docbook:907
+msgid "Let's implement the processing of the request and rendering of the page."
+msgstr "La méthode <literal>listEvents()</literal> utilise la <literal>Session</literal> Hibernate liée au thread courant pour exécuter la requête:"
+
+#: index.docbook:911
+msgid ""
+ "<![CDATA[// Write HTML header\n"
+ "PrintWriter out = response.getWriter();\n"
+ "out.println(\"<html><head><title>Event Manager</title></head><body>\");\n"
+ "\n"
+ "// Handle actions\n"
+ "if ( \"store\".equals(request.getParameter(\"action\")) ) {\n"
+ "\n"
+ " String eventTitle = request.getParameter(\"eventTitle\");\n"
+ " String eventDate = request.getParameter(\"eventDate\");\n"
+ "\n"
+ " if ( \"\".equals(eventTitle) || \"\".equals(eventDate) ) {\n"
+ " out.println(\"<b><i>Please enter event title and date.</i></b>\");\n"
+ " } else {\n"
+ " createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));\n"
+ " out.println(\"<b><i>Added event.</i></b>\");\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "// Print page\n"
+ "printEventForm(out);\n"
+ "listEvents(out, dateFormatter);\n"
+ "\n"
+ "// Write HTML footer\n"
+ "out.println(\"</body></html>\");\n"
+ "out.flush();\n"
+ "out.close();]]>"
+msgstr ""
+ "<![CDATA[private void listEvents(PrintWriter out) {\n"
+ " List result = HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().createCriteria(Event.class).list();\n"
+ " if (result.size() > 0) {\n"
+ " out.println(\"<h2>Events in database:</h2>\");\n"
+ " out.println(\"<table border='1'>\");\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<th>Event title</th>\");\n"
+ " out.println(\"<th>Event date</th>\");\n"
+ " out.println(\"</tr>\");\n"
+ " for (Iterator it = result.iterator(); it.hasNext();) {\n"
+ " Event event = (Event) it.next();\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<td>\" + event.getTitle() + \"</td>\");\n"
+ " out.println(\"<td>\" + dateFormatter.format(event.getDate()) + \"</td>\");\n"
+ " out.println(\"</tr>\");\n"
+ " }\n"
+ " out.println(\"</table>\");\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:913
+msgid "Granted, this coding style with a mix of Java and HTML would not scale in a more complex application—keep in mind that we are only illustrating basic Hibernate concepts in this tutorial. The code prints an HTML header and a footer. Inside this page, an HTML form for event entry and a list of all events in the database are printed. The first method is trivial and only outputs HTML:"
+msgstr "FEnfin, l'action <literal>store</literal> renvoie à la méthode <literal>createAndStoreEvent()</literal>, qui utilise aussi la <literal>Session</literal> du thread courant:"
+
+#: index.docbook:922
+msgid ""
+ "<![CDATA[private void printEventForm(PrintWriter out) {\n"
+ " out.println(\"<h2>Add new event:</h2>\");\n"
+ " out.println(\"<form>\");\n"
+ " out.println(\"Title: <input name='eventTitle' length='50'/><br/>\");\n"
+ " out.println(\"Date (e.g. 24.12.2009): <input name='eventDate' length='10'/><br/>\");\n"
+ " out.println(\"<input type='submit' name='action' value='store'/>\");\n"
+ " out.println(\"</form>\");\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[protected void createAndStoreEvent(String title, Date theDate) {\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().save(theEvent);\n"
+ "}]]>"
+
+#: index.docbook:924
+msgid "The <literal>listEvents()</literal> method uses the Hibernate <literal>Session</literal> bound to the current thread to execute a query:"
+msgstr "La servlet est faite. Une requête à la servlet sera exécutée par une seule <literal>Session</literal> et <literal>Transaction</literal>. Comme pour une application standalone, Hibernate peut automatiquement lier ces objets au thread courant d'exécution. Cela vous laisse la liberté de séparer votre code en couches et d'accéder à la <literal>SessionFactory</literal> par le moyen que vous voulez. Généralement, vous utiliserez des conceptions plus sophistiquées et déplacerez le code d'accès aux données dans une couche DAO. Voir le wiki Hibernate pour plus d'exemples."
+
+#: index.docbook:930
+msgid ""
+ "<![CDATA[private void listEvents(PrintWriter out, SimpleDateFormat dateFormatter) {\n"
+ "\n"
+ " List result = HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().createCriteria(Event.class).list();\n"
+ " if (result.size() > 0) {\n"
+ " out.println(\"<h2>Events in database:</h2>\");\n"
+ " out.println(\"<table border='1'>\");\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<th>Event title</th>\");\n"
+ " out.println(\"<th>Event date</th>\");\n"
+ " out.println(\"</tr>\");\n"
+ " for (Iterator it = result.iterator(); it.hasNext();) {\n"
+ " Event event = (Event) it.next();\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<td>\" + event.getTitle() + \"</td>\");\n"
+ " out.println(\"<td>\" + dateFormatter.format(event.getDate()) + \"</td>\");\n"
+ " out.println(\"</tr>\");\n"
+ " }\n"
+ " out.println(\"</table>\");\n"
+ " }\n"
+ "}]]>"
+msgstr "Déployer et tester"
+
+#: index.docbook:932
+msgid "Finally, the <literal>store</literal> action is dispatched to the <literal>createAndStoreEvent()</literal> method, which also uses the <literal>Session</literal> of the current thread:"
+msgstr "Pour déployer cette application, vous devez créer une archive Web, un War. Ajoutez la cible Ant suivante dans votre <literal>build.xml</literal>:"
+
+#: index.docbook:938
+msgid ""
+ "<![CDATA[protected void createAndStoreEvent(String title, Date theDate) {\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().save(theEvent);\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[<target name=\"war\" depends=\"compile\">\n"
+ " <war destfile=\"hibernate-tutorial.war\" webxml=\"web.xml\">\n"
+ " <lib dir=\"${librarydir}\">\n"
+ " <exclude name=\"servlet.jar\"/>\n"
+ " </lib>\n"
+ "\n"
+ " <classes dir=\"${targetdir}\"/>\n"
+ " </war>\n"
+ "</target>]]>"
+
+#: index.docbook:940
+msgid "That's it, the servlet is complete. A request to the servlet will be processed in a single <literal>Session</literal> and <literal>Transaction</literal>. As earlier in the standalone application, Hibernate can automatically bind these ojects to the current thread of execution. This gives you the freedom to layer your code and access the <literal>SessionFactory</literal> in any way you like. Usually you'd use a more sophisticated design and move the data access code into data access objects (the DAO pattern). See the Hibernate Wiki for more examples."
+msgstr "Cette cible créé un fichier nommé <literal>hibernate-tutorial.war</literal> dans le répertoire de votre projet. Elle package les bibliothèques et le descripteur <literal>web.xml</literal> qui est attendu dans le répertoire racine de votre projet:"
+
+#: index.docbook:954
+msgid "Deploying and testing"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<web-app version=\"2.4\"\n"
+ " xmlns=\"http://java.sun.com/xml/ns/j2ee\"\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ " xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">\n"
+ "\n"
+ " <servlet>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <servlet-class>events.EventManagerServlet</servlet-class>\n"
+ " </servlet>\n"
+ "\n"
+ " <servlet-mapping>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <url-pattern>/eventmanager</url-pattern>\n"
+ " </servlet-mapping>\n"
+ "</web-app>]]>"
+
+#: index.docbook:956
+msgid "To deploy this application you have to create a web archive, a WAR. Add the following Ant target to your <literal>build.xml</literal>:"
+msgstr "Avant de compiler et déployer l'application web, notez qu'une bibliothèque supplémentaire est requise: <literal>servlet.jar</literal>. C'est le kit de développement de Servlet Java, si vous ne disposez pas de cette bibliothèque, prenez la sur le <ulink url=\"http://java.sun.com/products/servlet/archive.html\">site de Sun</ulink> et copiez la dans votre répertoire des bibliothèques. Cependant, elle ne sera utilisée uniquement pour la compilation et sera exclue du paackage WAR."
+
+#: index.docbook:961
+msgid ""
+ "<![CDATA[<target name=\"war\" depends=\"compile\">\n"
+ " <war destfile=\"hibernate-tutorial.war\" webxml=\"web.xml\">\n"
+ " <lib dir=\"${librarydir}\">\n"
+ " <exclude name=\"jsdk*.jar\"/>\n"
+ " </lib>\n"
+ "\n"
+ " <classes dir=\"${targetdir}\"/>\n"
+ " </war>\n"
+ "</target>]]>"
+msgstr "Pour construire et déployer, appelez <literal>ant war</literal> dans votre projet et copier le fichier <literal>hibernate-tutorial.war</literal> dans le répertoire <literal>webapp</literal> de tomcat Si vous n'avez pas installé Tomcat, téléchargez le et suivez la notice d'installation. Vous n'avez pas à modifier la configuration Tomcat pour déployer cette application."
+
+#: index.docbook:963
+msgid "This target creates a file called <literal>hibernate-tutorial.war</literal> in your project directory. It packages all libraries and the <literal>web.xml</literal> descriptor, which is expected in the base directory of your project:"
+msgstr "Une fois l'application déployée et Tomcat lancé, accédez à l'application via <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal>. Assurez vous de consulter les traces tomcat pour observer l'initialisation d'Hibernate à la première requête touchant votre servlet (l'initialisation statique dans <literal>HibernateUtil</literal> est invoquée) et pour vérifier qu'aucune exception ne survienne."
+
+#: index.docbook:969
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<web-app version=\"2.4\"\n"
+ " xmlns=\"http://java.sun.com/xml/ns/j2ee\"\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ " xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">\n"
+ "\n"
+ " <servlet>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <servlet-class>events.EventManagerServlet</servlet-class>\n"
+ " </servlet>\n"
+ "\n"
+ " <servlet-mapping>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <url-pattern>/eventmanager</url-pattern>\n"
+ " </servlet-mapping>\n"
+ "</web-app>]]>"
+msgstr "Résumé"
+
+#: index.docbook:971
+msgid "Before you compile and deploy the web application, note that an additional library is required: <literal>jsdk.jar</literal>. This is the Java servlet development kit, if you don't have this library already, get it from the Sun website and copy it to your library directory. However, it will be only used for compliation and excluded from the WAR package."
+msgstr "Ce didacticiel a couvert les bases de l'écriture d'une simple application Hibernate ainsi qu'une petite application web."
+
+#: index.docbook:979
+msgid "To build and deploy call <literal>ant war</literal> in your project directory and copy the <literal>hibernate-tutorial.war</literal> file into your Tomcat <literal>webapp</literal> directory. If you don't have Tomcat installed, download it and follow the installation instructions. You don't have to change any Tomcat configuration to deploy this application though."
+msgstr "Si vous êtes déjà confiants avec Hibernate, continuez à parcourir les sujets que vous trouvez intéressants à travers la table des matières de la documentation de référence - les plus demandés sont le traitement transactionnel (<xref linkend=\"transactions\"/>), la performance des récupérations d'information (<xref linkend=\"performance\"/>), ou l'utilisation de l'API (<xref linkend=\"objectstate\"/>) et les fonctionnalités des requêtes (<xref linkend=\"objectstate-querying\"/>)."
+
+#: index.docbook:987
+msgid "Once deployed and Tomcat is running, access the application at <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal>. Make sure you watch the Tomcat log to see Hibernate initialize when the first request hits your servlet (the static initializer in <literal>HibernateUtil</literal> is called) and to get the detailed output if any exceptions occurs."
+msgstr "N'oubliez pas de vérifier le site web d'Hibernate pour d'autres didacticiels (plus spécialisés)."
+
+#: index.docbook:1000
+msgid "Summary"
+msgstr ""
+
+#: index.docbook:1002
+msgid "This tutorial covered the basics of writing a simple standalone Hibernate application and a small web application."
+msgstr ""
+
+#: index.docbook:1007
+msgid "If you already feel confident with Hibernate, continue browsing through the reference documentation table of contents for topics you find interesting - most asked are transactional processing (<xref linkend=\"transactions\"/>), fetch performance (<xref linkend=\"performance\"/>), or the usage of the API (<xref linkend=\"objectstate\"/>) and the query features (<xref linkend=\"objectstate-querying\"/>)."
+msgstr ""
+
+#: index.docbook:1015
+msgid "Don't forget to check the Hibernate website for more (specialized) tutorials."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/content/xml.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/content/xml.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/content/xml.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,420 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "XML Mapping"
+msgstr "Mapping XML"
+
+#: index.docbook:7
+msgid "Note that this is an experimental feature in Hibernate 3.0 and is under extremely active development."
+msgstr "Notez que cette fonctionnalité est expérimentale dans Hibernate 3.0 et est en développement extrêmement actif."
+
+#: index.docbook:13
+msgid "Working with XML data"
+msgstr "Travailler avec des données XML"
+
+#: index.docbook:15
+msgid "Hibernate lets you work with persistent XML data in much the same way you work with persistent POJOs. A parsed XML tree can be thought of as just another way to represent the relational data at the object level, instead of POJOs."
+msgstr "Hibernate vous laisse travailler avec des données XML persistantes de la même manière que vous travaillez avec des POJOs persistants. Un arbre XML peut être vu comme une autre manière de représenter les données relationnelles au niveau objet, à la place des POJOs."
+
+#: index.docbook:22
+msgid "Hibernate supports dom4j as API for manipulating XML trees. You can write queries that retrieve dom4j trees from the database and have any modification you make to the tree automatically synchronized to the database. You can even take an XML document, parse it using dom4j, and write it to the database with any of Hibernate's basic operations: <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> (merging is not yet supported)."
+msgstr "Hibernate supporte dom4j en tant qu'API pour la manipulation des arbres XML. Vous pouvez écrire des requêtes qui récupèrent des arbres dom4j à partie de la base de données, et avoir toutes les modifications que vous faites sur l'arbre automatiquement synchronisées dans la base de données. Vous pouvez même prendre un document XML, l'analyser en utilisant dom4j, et l'écrire dans la base de données via les opérations basiques d'Hibernate : <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> (merge() n'est pas encore supporté)."
+
+#: index.docbook:32
+msgid "This feature has many applications including data import/export, externalization of entity data via JMS or SOAP and XSLT-based reporting."
+msgstr "Cette fonctionnalité a plusieurs applications dont l'import/export de données, l'externalisation d'entités via JMS ou SOAP et les rapports XSLT."
+
+#: index.docbook:37
+msgid "A single mapping may be used to simultaneously map properties of a class and nodes of an XML document to the database, or, if there is no class to map, it may be used to map just the XML."
+msgstr "Un simple mapping peut être utilisé pour simultanément mapper les propriétés d'une classe et les noeuds d'un document XML vers la base de données, ou, si il n'y a pas de classe à mapper, il peut être utilisé juste pour mapper le XML."
+
+#: index.docbook:44
+msgid "Specifying XML and class mapping together"
+msgstr "Spécifier le mapping XML et le mapping d'une classe ensemble"
+
+#: index.docbook:46
+msgid "Here is an example of mapping a POJO and XML simultaneously:"
+msgstr "Voici un exemple de mapping d'un POJO et du XML simultanément :"
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<class name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"accountId\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <many-to-one name=\"customer\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Account\"\n"
+ " table=\"ACCOUNTS\"\n"
+ " node=\"account\">\n"
+ "\n"
+ " <id name=\"accountId\"\n"
+ " column=\"ACCOUNT_ID\"\n"
+ " node=\"@id\"/>\n"
+ "\n"
+ " <many-to-one name=\"customer\"\n"
+ " column=\"CUSTOMER_ID\"\n"
+ " node=\"customer/@id\"\n"
+ " embed-xml=\"false\"/>\n"
+ "\n"
+ " <property name=\"balance\"\n"
+ " column=\"BALANCE\"\n"
+ " node=\"balance\"/>\n"
+ "\n"
+ " ...\n"
+ "\n"
+ "</class>]]>"
+
+#: index.docbook:54
+msgid "Specifying only an XML mapping"
+msgstr "Spécifier seulement un mapping XML"
+
+#: index.docbook:56
+msgid "Here is an example where there is no POJO class:"
+msgstr "Voici un exemple dans lequel il n'y a pas de class POJO :"
+
+#: index.docbook:60
+msgid ""
+ "<![CDATA[<class entity-name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\" \n"
+ " type=\"string\"/>\n"
+ " \n"
+ " <many-to-one name=\"customerId\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\" \n"
+ " entity-name=\"Customer\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\" \n"
+ " type=\"big_decimal\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class entity-name=\"Account\"\n"
+ " table=\"ACCOUNTS\"\n"
+ " node=\"account\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " column=\"ACCOUNT_ID\"\n"
+ " node=\"@id\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <many-to-one name=\"customerId\"\n"
+ " column=\"CUSTOMER_ID\"\n"
+ " node=\"customer/@id\"\n"
+ " embed-xml=\"false\"\n"
+ " entity-name=\"Customer\"/>\n"
+ "\n"
+ " <property name=\"balance\"\n"
+ " column=\"BALANCE\"\n"
+ " node=\"balance\"\n"
+ " type=\"big_decimal\"/>\n"
+ "\n"
+ " ...\n"
+ "\n"
+ "</class>]]>"
+
+#: index.docbook:62
+msgid "This mapping allows you to access the data as a dom4j tree, or as a graph of property name/value pairs (java <literal>Map</literal>s). The property names are purely logical constructs that may be referred to in HQL queries."
+msgstr "Ce mapping vous permet d'accéder aux données comme un arbre dom4j, ou comme un graphe de paire nom de propriété/valeur (<literal>Map</literal>s java). Les noms des propriétés sont des constructions purement logiques qui peuvent être référées des dans requêtes HQL."
+
+#: index.docbook:73
+msgid "XML mapping metadata"
+msgstr "Métadonnées du mapping XML"
+
+#: index.docbook:75
+msgid "Many Hibernate mapping elements accept the <literal>node</literal> attribute. This let's you specify the name of an XML attribute or element that holds the property or entity data. The format of the <literal>node</literal> attribute must be one of the following:"
+msgstr "Plusieurs éléments du mapping Hibernate acceptent l'attribut <literal>node</literal>. Ceci vous permet de spécifier le nom d'un attribut XML ou d'un élément qui contient la propriété ou les données de l'entité. Le format de l'attribut <literal>node</literal> doit être un des suivants :"
+
+#: index.docbook:84
+msgid "<literal>\"element-name\"</literal> - map to the named XML element"
+msgstr "<literal>\"element-name\"</literal> - mappe vers l'élément XML nommé"
+
+#: index.docbook:87
+msgid "<literal>\"@attribute-name\"</literal> - map to the named XML attribute"
+msgstr "<literal>\"@attribute-name\"</literal> - mappe vers l'attribut XML nommé"
+
+#: index.docbook:90
+msgid "<literal>\".\"</literal> - map to the parent element"
+msgstr "<literal>\".\"</literal> - mappe vers le parent de l'élément"
+
+#: index.docbook:93
+msgid "<literal>\"element-name/@attribute-name\"</literal> - map to the named attribute of the named element"
+msgstr "<literal>\"element-name/@attribute-name\"</literal> - mappe vers l'élément nommé de l'attribut nommé"
+
+#: index.docbook:100
+msgid "For collections and single valued associations, there is an additional <literal>embed-xml</literal> attribute. If <literal>embed-xml=\"true\"</literal>, the default, the XML tree for the associated entity (or collection of value type) will be embedded directly in the XML tree for the entity that owns the association. Otherwise, if <literal>embed-xml=\"false\"</literal>, then only the referenced identifier value will appear in the XML for single point associations and collections will simply not appear at all."
+msgstr "Pour des collections et de simples associations valuées, il y a un attribut <literal>embed-xml</literal> supplémentaire. Si <literal>embed-xml=\"true\"</literal>, qui est la valeur par défaut, l'arbre XML pour l'entité associée (ou la collection des types de valeurs) sera embarquée directement dans l'arbre XML pour l'entité qui possède l'association. Sinon, si <literal>embed-xml=\"false\"</literal>, alors seule la valeur de l'identifiant référencé apparaîtra dans le XML pour de simples associations de points, et les collections n'appraîtront simplement pas."
+
+#: index.docbook:110
+msgid "You should be careful not to leave <literal>embed-xml=\"true\"</literal> for too many associations, since XML does not deal well with circularity!"
+msgstr "Vous devriez faire attention à ne pas laisser <literal>embed-xml=\"true\"</literal> pour trop d'associations, puisque XML ne traite pas bien les liens circurlaires."
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Customer\" \n"
+ " table=\"CUSTOMER\" \n"
+ " node=\"customer\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"CUST_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <map name=\"accounts\" \n"
+ " node=\".\" \n"
+ " embed-xml=\"true\">\n"
+ " <key column=\"CUSTOMER_ID\" \n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"SHORT_DESC\" \n"
+ " node=\"@short-desc\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many entity-name=\"Account\"\n"
+ " embed-xml=\"false\" \n"
+ " node=\"account\"/>\n"
+ " </map>\n"
+ " \n"
+ " <component name=\"name\" \n"
+ " node=\"name\">\n"
+ " <property name=\"firstName\" \n"
+ " node=\"first-name\"/>\n"
+ " <property name=\"initial\" \n"
+ " node=\"initial\"/>\n"
+ " <property name=\"lastName\" \n"
+ " node=\"last-name\"/>\n"
+ " </component>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\"\n"
+ " table=\"CUSTOMER\"\n"
+ " node=\"customer\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " column=\"CUST_ID\"\n"
+ " node=\"@id\"/>\n"
+ "\n"
+ " <map name=\"accounts\"\n"
+ " node=\".\"\n"
+ " embed-xml=\"true\">\n"
+ " <key column=\"CUSTOMER_ID\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"SHORT_DESC\"\n"
+ " node=\"@short-desc\"\n"
+ " type=\"string\"/>\n"
+ " <one-to-many entity-name=\"Account\"\n"
+ " embed-xml=\"false\"\n"
+ " node=\"account\"/>\n"
+ " </map>\n"
+ "\n"
+ " <component name=\"name\"\n"
+ " node=\"name\">\n"
+ " <property name=\"firstName\"\n"
+ " node=\"first-name\"/>\n"
+ " <property name=\"initial\"\n"
+ " node=\"initial\"/>\n"
+ " <property name=\"lastName\"\n"
+ " node=\"last-name\"/>\n"
+ " </component>\n"
+ "\n"
+ " ...\n"
+ "\n"
+ "</class>]]>"
+
+#: index.docbook:117
+msgid "in this case, we have decided to embed the collection of account ids, but not the actual account data. The following HQL query:"
+msgstr "dans ce cas, nous avons décidé d'embarquer la collection d'identifiants de compte, mais pas les données actuelles du compte. La requête HQL suivante :"
+
+#: index.docbook:122
+msgid "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
+msgstr "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
+
+#: index.docbook:124
+msgid "Would return datasets such as this:"
+msgstr "devrait retourner l'ensemble de données suivant :"
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account short-desc=\"Savings\">987632567</account>\n"
+ " <account short-desc=\"Credit Card\">985612323</account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account short-desc=\"Savings\">987632567</account>\n"
+ " <account short-desc=\"Credit Card\">985612323</account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+
+#: index.docbook:130
+msgid "If you set <literal>embed-xml=\"true\"</literal> on the <literal><one-to-many></literal> mapping, the data might look more like this:"
+msgstr "Si vous positionnez <literal>embed-xml=\"true\"</literal> sur le mapping <literal><one-to-many></literal>, les données pourraient ressembler plus à ça :"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account id=\"987632567\" short-desc=\"Savings\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>100.29</balance>\n"
+ " </account>\n"
+ " <account id=\"985612323\" short-desc=\"Credit Card\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>-2370.34</balance>\n"
+ " </account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account id=\"987632567\" short-desc=\"Savings\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>100.29</balance>\n"
+ " </account>\n"
+ " <account id=\"985612323\" short-desc=\"Credit Card\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>-2370.34</balance>\n"
+ " </account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+
+#: index.docbook:141
+msgid "Manipulating XML data"
+msgstr "Manipuler des données XML"
+
+#: index.docbook:143
+msgid "Let's rearead and update XML documents in the application. We do this by obtaining a dom4j session:"
+msgstr "Relisons et mettons à jour des documents XML dans l'application. Nous faisons ça en obtenant une session dom4j :"
+
+#: index.docbook:148
+msgid ""
+ "<![CDATA[Document doc = ....;\n"
+ " \n"
+ "Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "List results = dom4jSession\n"
+ " .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")\n"
+ " .list();\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " //add the customer data to the XML document\n"
+ " Element customer = (Element) results.get(i);\n"
+ " doc.add(customer);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Document doc = ....;\n"
+ "\n"
+ "Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "List results = dom4jSession\n"
+ " .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")\n"
+ " .list();\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " //add the customer data to the XML document\n"
+ " Element customer = (Element) results.get(i);\n"
+ " doc.getRootElement().add(customer);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " Element customer = (Element) results.get(i);\n"
+ " //change the customer name in the XML and database\n"
+ " Element name = customer.element(\"name\");\n"
+ " name.element(\"first-name\").setText(firstName);\n"
+ " name.element(\"initial\").setText(initial);\n"
+ " name.element(\"last-name\").setText(lastName);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " Element customer = (Element) results.get(i);\n"
+ " //change the customer name in the XML and database\n"
+ " Element name = customer.element(\"name\");\n"
+ " name.element(\"first-name\").setText(firstName);\n"
+ " name.element(\"initial\").setText(initial);\n"
+ " name.element(\"last-name\").setText(lastName);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:152
+msgid "It is extremely useful to combine this feature with Hibernate's <literal>replicate()</literal> operation to implement XML-based data import/export."
+msgstr "Il est extrêmement utile de combiner cette fonctionnalité avec l'opération <literal>replicate()</literal> d'Hibernate pour implémenter des imports/exports de données XML."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/fr-FR/legal_notice.po
===================================================================
--- core/trunk/documentation/manual/translations/fr-FR/legal_notice.po (rev 0)
+++ core/trunk/documentation/manual/translations/fr-FR/legal_notice.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,48 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Legal Notice"
+msgstr "Legal Notice"
+
+#: index.docbook:22
+msgid "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+msgstr "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+
+#: index.docbook:31
+msgid "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+msgstr "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+
+#: index.docbook:34
+msgid "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+msgstr "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+
+#: index.docbook:37
+msgid "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+msgstr "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+
+#: index.docbook:40
+msgid "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+msgstr "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+
+#: index.docbook:43
+msgid "All other trademarks referenced herein are the property of their respective owners."
+msgstr "All other trademarks referenced herein are the property of their respective owners."
+
+#: index.docbook:46
+msgid "The GPG fingerprint of the security at redhat.com key is:"
+msgstr "The GPG fingerprint of the security at redhat.com key is:"
+
+#: index.docbook:49
+msgid "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+msgstr "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/Hibernate_Reference.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/Hibernate_Reference.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/Hibernate_Reference.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,24 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:26
+msgid "HIBERNATE - Relational Persistence for Idiomatic Java"
+msgstr "HIBERNATE - Relational Persistence for Idiomatic Java"
+
+#: index.docbook:27
+msgid "Hibernate Reference Documentation"
+msgstr "Hibernate Reference Documentation"
+
+#: index.docbook:41
+msgid "©rightHolder;"
+msgstr "©rightHolder;"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/architecture.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/architecture.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/architecture.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,216 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Architecture"
+msgstr ""
+
+#: index.docbook:24
+msgid "Overview"
+msgstr ""
+
+#: index.docbook:26
+msgid "A (very) high-level view of the Hibernate architecture:"
+msgstr ""
+
+#: index.docbook:39
+msgid "This diagram shows Hibernate using the database and configuration data to provide persistence services (and persistent objects) to the application."
+msgstr ""
+
+#: index.docbook:44
+msgid "We would like to show a more detailed view of the runtime architecture. Unfortunately, Hibernate is flexible and supports several approaches. We will show the two extremes. The \"lite\" architecture has the application provide its own JDBC connections and manage its own transactions. This approach uses a minimal subset of Hibernate's APIs:"
+msgstr ""
+
+#: index.docbook:61
+msgid "The \"full cream\" architecture abstracts the application away from the underlying JDBC/JTA APIs and lets Hibernate take care of the details."
+msgstr ""
+
+#: index.docbook:75
+msgid "Heres some definitions of the objects in the diagrams:"
+msgstr ""
+
+#: index.docbook:80
+msgid "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+msgstr ""
+
+#: index.docbook:82
+msgid "A threadsafe (immutable) cache of compiled mappings for a single database. A factory for <literal>Session</literal> and a client of <literal>ConnectionProvider</literal>. Might hold an optional (second-level) cache of data that is reusable between transactions, at a process- or cluster-level."
+msgstr ""
+
+#: index.docbook:92
+msgid "Session (<literal>org.hibernate.Session</literal>)"
+msgstr ""
+
+#: index.docbook:94
+msgid "A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC connection. Factory for <literal>Transaction</literal>. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier."
+msgstr ""
+
+#: index.docbook:104
+msgid "Persistent objects and collections"
+msgstr ""
+
+#: index.docbook:106
+msgid "Short-lived, single threaded objects containing persistent state and business function. These might be ordinary JavaBeans/POJOs, the only special thing about them is that they are currently associated with (exactly one) <literal>Session</literal>. As soon as the <literal>Session</literal> is closed, they will be detached and free to use in any application layer (e.g. directly as data transfer objects to and from presentation)."
+msgstr ""
+
+#: index.docbook:117
+msgid "Transient and detached objects and collections"
+msgstr ""
+
+#: index.docbook:119
+msgid "Instances of persistent classes that are not currently associated with a <literal>Session</literal>. They may have been instantiated by the application and not (yet) persisted or they may have been instantiated by a closed <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:128
+msgid "Transaction (<literal>org.hibernate.Transaction</literal>)"
+msgstr ""
+
+#: index.docbook:130
+msgid "(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. Abstracts application from underlying JDBC, JTA or CORBA transaction. A <literal>Session</literal> might span several <literal>Transaction</literal>s in some cases. However, transaction demarcation, either using the underlying API or <literal>Transaction</literal>, is never optional!"
+msgstr ""
+
+#: index.docbook:141
+msgid "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+msgstr ""
+
+#: index.docbook:143
+msgid "(Optional) A factory for (and pool of) JDBC connections. Abstracts application from underlying <literal>Datasource</literal> or <literal>DriverManager</literal>. Not exposed to application, but can be extended/implemented by the developer."
+msgstr ""
+
+#: index.docbook:151
+msgid "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+msgstr ""
+
+#: index.docbook:153
+msgid "(Optional) A factory for <literal>Transaction</literal> instances. Not exposed to the application, but can be extended/implemented by the developer."
+msgstr ""
+
+#: index.docbook:160
+msgid "Extension Interfaces"
+msgstr ""
+
+#: index.docbook:162
+msgid "Hibernate offers many optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details."
+msgstr ""
+
+#: index.docbook:171
+msgid "Given a \"lite\" architecture, the application bypasses the <literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or <literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly."
+msgstr ""
+
+#: index.docbook:179
+msgid "Instance states"
+msgstr ""
+
+#: index.docbook:180
+msgid "An instance of a persistent classes may be in one of three different states, which are defined with respect to a <emphasis>persistence context</emphasis>. The Hibernate <literal>Session</literal> object is the persistence context:"
+msgstr ""
+
+#: index.docbook:188
+msgid "transient"
+msgstr ""
+
+#: index.docbook:190
+msgid "The instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value)."
+msgstr ""
+
+#: index.docbook:198
+msgid "persistent"
+msgstr ""
+
+#: index.docbook:200
+msgid "The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, Hibernate <emphasis>guarantees</emphasis> that persistent identity is equivalent to Java identity (in-memory location of the object)."
+msgstr ""
+
+#: index.docbook:212
+msgid "detached"
+msgstr ""
+
+#: index.docbook:214
+msgid "The instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corrsponding row in the database. For detached instances, Hibernate makes no guarantees about the relationship between persistent identity and Java identity."
+msgstr ""
+
+#: index.docbook:229
+msgid "JMX Integration"
+msgstr ""
+
+#: index.docbook:231
+msgid "JMX is the J2EE standard for management of Java components. Hibernate may be managed via a JMX standard service. We provide an MBean implementation in the distribution, <literal>org.hibernate.jmx.HibernateService</literal>."
+msgstr ""
+
+#: index.docbook:237
+msgid "For an example how to deploy Hibernate as a JMX service on the JBoss Application Server, please see the JBoss User Guide. On JBoss AS, you also get these benefits if you deploy using JMX:"
+msgstr ""
+
+#: index.docbook:245
+msgid "<emphasis>Session Management:</emphasis> The Hibernate <literal>Session</literal>'s life cycle can be automatically bound to the scope of a JTA transaction. This means you no longer have to manually open and close the <literal>Session</literal>, this becomes the job of a JBoss EJB interceptor. You also don't have to worry about transaction demarcation in your code anymore (unless you'd like to write a portable persistence layer of course, use the optional Hibernate <literal>Transaction</literal> API for this). You call the <literal>HibernateContext</literal> to access a <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:257
+msgid "<emphasis>HAR deployment:</emphasis> Usually you deploy the Hibernate JMX service using a JBoss service deployment descriptor (in an EAR and/or SAR file), it supports all the usual configuration options of a Hibernate <literal>SessionFactory</literal>. However, you still have to name all your mapping files in the deployment descriptor. If you decide to use the optional HAR deployment, JBoss will automatically detect all mapping files in your HAR file."
+msgstr ""
+
+#: index.docbook:268
+msgid "Consult the JBoss AS user guide for more information about these options."
+msgstr ""
+
+#: index.docbook:272
+msgid "Another feature available as a JMX service are runtime Hibernate statistics. See <xref linkend=\"configuration-optional-statistics\"/>."
+msgstr ""
+
+#: index.docbook:279
+msgid "JCA Support"
+msgstr ""
+
+#: index.docbook:280
+msgid "Hibernate may also be configured as a JCA connector. Please see the website for more details. Please note that Hibernate JCA support is still considered experimental."
+msgstr ""
+
+#: index.docbook:287
+msgid "Contextual Sessions"
+msgstr ""
+
+#: index.docbook:288
+msgid "Most applications using Hibernate need some form of \"contextual\" sessions, where a given session is in effect throughout the scope of a given context. However, across applications the definition of what constitutes a context is typically different; and different contexts define different scopes to the notion of current. Applications using Hibernate prior to version 3.0 tended to utilize either home-grown <literal>ThreadLocal</literal>-based contextual sessions, helper classes such as <literal>HibernateUtil</literal>, or utilized third-party frameworks (such as Spring or Pico) which provided proxy/interception-based contextual sessions."
+msgstr ""
+
+#: index.docbook:297
+msgid "Starting with version 3.0.1, Hibernate added the <literal>SessionFactory.getCurrentSession()</literal> method. Initially, this assumed usage of <literal>JTA</literal> transactions, where the <literal>JTA</literal> transaction defined both the scope and context of a current session. The Hibernate team maintains that, given the maturity of the numerous stand-alone <literal>JTA TransactionManager</literal> implementations out there, most (if not all) applications should be using <literal>JTA</literal> transaction management whether or not they are deployed into a <literal>J2EE</literal> container. Based on that, the <literal>JTA</literal>-based contextual sessions is all you should ever need to use."
+msgstr ""
+
+#: index.docbook:307
+msgid "However, as of version 3.1, the processing behind <literal>SessionFactory.getCurrentSession()</literal> is now pluggable. To that end, a new extension interface (<literal>org.hibernate.context.CurrentSessionContext</literal>) and a new configuration parameter (<literal>hibernate.current_session_context_class</literal>) have been added to allow pluggability of the scope and context of defining current sessions."
+msgstr ""
+
+#: index.docbook:314
+msgid "See the Javadocs for the <literal>org.hibernate.context.CurrentSessionContext</literal> interface for a detailed discussion of its contract. It defines a single method, <literal>currentSession()</literal>, by which the implementation is responsible for tracking the current contextual session. Out-of-the-box, Hibernate comes with three implementations of this interface."
+msgstr ""
+
+#: index.docbook:324
+msgid "<literal>org.hibernate.context.JTASessionContext</literal> - current sessions are tracked and scoped by a <literal>JTA</literal> transaction. The processing here is exactly the same as in the older JTA-only approach. See the Javadocs for details."
+msgstr ""
+
+#: index.docbook:332
+msgid "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - current sessions are tracked by thread of execution. Again, see the Javadocs for details."
+msgstr ""
+
+#: index.docbook:338
+msgid "<literal>org.hibernate.context.ManagedSessionContext</literal> - current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a <literal>Session</literal> instance with static methods on this class, it does never open, flush, or close a <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:347
+msgid "The first two implementations provide a \"one session - one database transaction\" programming model, also known and used as <emphasis>session-per-request</emphasis>. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programatic transaction demarcation in plain JSE without JTA, you are adviced to use the Hibernate <literal>Transaction</literal> API to hide the underlying transaction system from your code. If you use JTA, use the JTA interfaces to demarcate transactions. If you execute in an EJB container that supports CMT, transaction boundaries are defined declaratively and you don't need any transaction or session demarcation operations in your code. Refer to <xref linkend=\"transactions\"/> for more information and code examples."
+msgstr ""
+
+#: index.docbook:359
+msgid "The <literal>hibernate.current_session_context_class</literal> configuration parameter defines which <literal>org.hibernate.context.CurrentSessionContext</literal> implementation should be used. Note that for backwards compatibility, if this config param is not set but a <literal>org.hibernate.transaction.TransactionManagerLookup</literal> is configured, Hibernate will use the <literal>org.hibernate.context.JTASessionContext</literal>. Typically, the value of this parameter would just name the implementation class to use; for the three out-of-the-box implementations, however, there are three corresponding short names, \"jta\", \"thread\", and \"managed\"."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/association_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/association_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/association_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1269 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:6
+msgid "Association Mappings"
+msgstr "é¢é£ãããã³ã°"
+
+#: index.docbook:9
+msgid "Introduction"
+msgstr "ã¤ã³ãããã¯ã·ã§ã³"
+
+#: index.docbook:11
+msgid "Association mappings are the often most difficult thing to get right. In this section we'll go through the canonical cases one by one, starting with unidirectional mappings, and then considering the bidirectional cases. We'll use <literal>Person</literal> and <literal>Address</literal> in all the examples."
+msgstr "é¢é£ãããã³ã°ã¯ãã°ãã°ç解ãæãé£ãããã®ã«ãªãã¾ãã ãã®ç« ã§ã¯ãåºæ¬çãªä¸ã¤ä¸ã¤ã®ã±ã¼ã¹ã«ã¤ãã¦è¿°ã¹ã¾ãã åæ¹åã®ãããã³ã°ããå§ããããããåæ¹åã®ã±ã¼ã¹ã«ã¤ãã¦èãã¦ããã¾ãã ä¾ã¨ãã¦ã<literal>Person</literal> 㨠<literal>Address</literal> ãç¨ãã¾ãã"
+
+#: index.docbook:19
+msgid "We'll classify associations by whether or not they map to an intervening join table, and by multiplicity."
+msgstr "é¢é£ã¯ãçµåãã¼ãã«ãå
¥ããããã©ããã¨ã å¤é度ã«ãã£ã¦åé¡ãããã¨ã«ãã¾ãã"
+
+#: index.docbook:24
+msgid "Nullable foreign keys are not considered good practice in traditional data modelling, so all our examples use not null foreign keys. This is not a requirement of Hibernate, and the mappings will all work if you drop the nullability constraints."
+msgstr "ãã¹ã¦ã®ä¾ã§not nullã®å¤é¨ãã¼ã使ç¨ãã¾ãã ããã¯Hibernateã®è¦ä»¶ã§ã¯ããã¾ããã not nullå¶ç´ãå¤ããã¨ãã¦ãããããã³ã°ã¯åé¡ãªãåä½ãã¾ãã"
+
+#: index.docbook:34
+msgid "Unidirectional associations"
+msgstr "åæ¹åé¢é£"
+
+#: index.docbook:37, index.docbook:108
+msgid "many to one"
+msgstr "<title>å¤å¯¾ä¸</title>"
+
+#: index.docbook:39
+msgid "A <emphasis>unidirectional many-to-one association</emphasis> is the most common kind of unidirectional association."
+msgstr "<emphasis>åæ¹åå¤å¯¾ä¸é¢é£</emphasis> ã¯åæ¹åé¢é£ã®ä¸ã§æãä¸è¬çãªãã®ã§ãã"
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <many-to-one name=\"address\"
+\n"
+ " column=\"addressId\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ "</class>]]>"
+
+#: index.docbook:45, index.docbook:161
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[
+\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null )
+\n"
+ "create table Address ( addressId bigint not null primary key )
+\n"
+ " ]]>"
+
+#: index.docbook:50, index.docbook:121, index.docbook:185, index.docbook:225
+msgid "one to one"
+msgstr "<title>ä¸å¯¾ä¸</title>"
+
+#: index.docbook:52
+msgid "A <emphasis>unidirectional one-to-one association on a foreign key</emphasis> is almost identical. The only difference is the column unique constraint."
+msgstr "<emphasis>å¤é¨ãã¼ã®åæ¹åä¸å¯¾ä¸é¢é£</emphasis> ã¯ã»ã¨ãã©åããã®ã§ãã å¯ä¸éãã®ã¯ãã«ã©ã ã®ã¦ãã¼ã¯ãªå¶ç´ã§ãã"
+
+#: index.docbook:57
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <many-to-one name=\"address\"
+\n"
+ " column=\"addressId\"
+\n"
+ " unique=\"true\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ "</class>]]>"
+
+#: index.docbook:58, index.docbook:193
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[
+\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )
+\n"
+ "create table Address ( addressId bigint not null primary key )
+\n"
+ " ]]>"
+
+#: index.docbook:60
+msgid "A <emphasis>unidirectional one-to-one association on a primary key</emphasis> usually uses a special id generator. (Notice that we've reversed the direction of the association in this example.)"
+msgstr "<emphasis>主ãã¼ã®åæ¹åä¸å¯¾ä¸é¢é£</emphasis> ã¯é常ãç¹å¥ãªIDã¸ã§ãã¬ã¼ã¿ã使ãã¾ãã ï¼ãã®ä¾ã§ã¯é¢é£ã®æ¹åãéã«ãªã£ã¦ãããã¨ã«æ³¨æãã¦ãã ããï¼"
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"foreign\">
+\n"
+ " <param name=\"property\">person</param>
+\n"
+ " </generator>
+\n"
+ " </id>
+\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>
+\n"
+ "</class>]]>"
+
+#: index.docbook:67, index.docbook:201
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( personId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[
+\n"
+ "create table Person ( personId bigint not null primary key )
+\n"
+ "create table Address ( personId bigint not null primary key )
+\n"
+ " ]]>"
+
+#: index.docbook:72, index.docbook:94
+msgid "one to many"
+msgstr "<title>ä¸å¯¾å¤</title>"
+
+#: index.docbook:74
+msgid "A <emphasis>unidirectional one-to-many association on a foreign key</emphasis> is a very unusual case, and is not really recommended."
+msgstr "<emphasis>å¤é¨ãã¼ã®åæ¹åä¸å¯¾å¤é¢é£</emphasis> ã¯ã¨ã¦ãç¹æ®ãªã±ã¼ã¹ã§ã ãã¾ãæ¨å¥¨ããã¦ãã¾ããã"
+
+#: index.docbook:79
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\">\n"
+ " <key column=\"personId\" \n"
+ " not-null=\"true\"/>\n"
+ " <one-to-many class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <set name=\"addresses\">
+\n"
+ " <key column=\"personId\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ " <one-to-many class=\"Address\"/>
+\n"
+ " </set>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ "</class>]]>"
+
+#: index.docbook:80
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key, personId bigint not null )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[
+\n"
+ "create table Person ( personId bigint not null primary key )
+\n"
+ "create table Address ( addressId bigint not null primary key, personId bigint not null )
+\n"
+ " ]]>"
+
+#: index.docbook:82
+msgid "We think it's better to use a join table for this kind of association."
+msgstr "ãã®ãããªé¢é£ã®ããã«çµåãã¼ãã«ã使ããã¨ããè¦ããã¾ãã"
+
+#: index.docbook:91
+msgid "Unidirectional associations with join tables"
+msgstr "çµåãã¼ãã«ã使ã£ãåæ¹åé¢é£"
+
+#: index.docbook:96
+msgid "A <emphasis>unidirectional one-to-many association on a join table</emphasis> is much preferred. Notice that by specifying <literal>unique=\"true\"</literal>, we have changed the multiplicity from many-to-many to one-to-many."
+msgstr "<emphasis>çµåãã¼ãã«ã使ã£ãåæ¹åä¸å¯¾å¤é¢é£</emphasis> ã¯ãã好ã¾ããã§ãã <literal>unique=\"true\"</literal> ã®æå®ã«ãããå¤é度ãå¤å¯¾å¤ããä¸å¯¾å¤ ã«å¤ãã£ããã¨ã«æ³¨æãã¦ä¸ããã"
+
+#: index.docbook:102
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">
+\n"
+ " <key column=\"personId\"/>
+\n"
+ " <many-to-many column=\"addressId\"
+\n"
+ " unique=\"true\"
+\n"
+ " class=\"Address\"/>
+\n"
+ " </set>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ "</class>]]>"
+
+#: index.docbook:103
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[
+\n"
+ "create table Person ( personId bigint not null primary key )
+\n"
+ "create table PersonAddress ( personId not null, addressId bigint not null primary key )
+\n"
+ "create table Address ( addressId bigint not null primary key )
+\n"
+ " ]]>"
+
+#: index.docbook:110
+msgid "A <emphasis>unidirectional many-to-one association on a join table</emphasis> is quite common when the association is optional."
+msgstr "<emphasis>çµåãã¼ãã«ã®åæ¹åå¤å¯¾ä¸é¢é£</emphasis> 㯠é¢é£ãä»»æã§ããã¨ãã«é常ã«ä¸è¬çãªãã®ã§ãã"
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <join table=\"PersonAddress\"
+\n"
+ " optional=\"true\">
+\n"
+ " <key column=\"personId\" unique=\"true\"/>
+\n"
+ " <many-to-one name=\"address\"
+\n"
+ " column=\"addressId\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ " </join>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ "</class>]]>"
+
+#: index.docbook:116
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[
+\n"
+ "create table Person ( personId bigint not null primary key )
+\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )
+\n"
+ "create table Address ( addressId bigint not null primary key )
+\n"
+ " ]]>"
+
+#: index.docbook:123
+msgid "A <emphasis>unidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr "<emphasis>çµåãã¼ãã«ã®åæ¹åä¸å¯¾ä¸é¢é£</emphasis> ã¯ãæ¬å½ã«ç¹æ®ã§ãã ä¸å¯è½ã§ã¯ããã¾ããã"
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <join table=\"PersonAddress\"
+\n"
+ " optional=\"true\">
+\n"
+ " <key column=\"personId\"
+\n"
+ " unique=\"true\"/>
+\n"
+ " <many-to-one name=\"address\"
+\n"
+ " column=\"addressId\"
+\n"
+ " not-null=\"true\"
+\n"
+ " unique=\"true\"/>
+\n"
+ " </join>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ "</class>]]>"
+
+#: index.docbook:129, index.docbook:233
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[
+\n"
+ "create table Person ( personId bigint not null primary key )
+\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )
+\n"
+ "create table Address ( addressId bigint not null primary key )
+\n"
+ " ]]>"
+
+#: index.docbook:134, index.docbook:238
+msgid "many to many"
+msgstr "<title>å¤å¯¾å¤</title>"
+
+#: index.docbook:136
+msgid "Finally, we have a <emphasis>unidirectional many-to-many association</emphasis>."
+msgstr "æå¾ã«ã<emphasis>åæ¹åå¤å¯¾å¤é¢é£</emphasis> ã示ãã¾ãã"
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">
+\n"
+ " <key column=\"personId\"/>
+\n"
+ " <many-to-many column=\"addressId\"
+\n"
+ " class=\"Address\"/>
+\n"
+ " </set>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ "</class>]]>"
+
+#: index.docbook:141, index.docbook:246
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[
+\n"
+ "create table Person ( personId bigint not null primary key )
+\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )
+\n"
+ "create table Address ( addressId bigint not null primary key )
+\n"
+ " ]]>"
+
+#: index.docbook:148
+msgid "Bidirectional associations"
+msgstr "åæ¹åé¢é£"
+
+#: index.docbook:151, index.docbook:211
+msgid "one to many / many to one"
+msgstr "ä¸å¯¾å¤/å¤å¯¾ä¸"
+
+#: index.docbook:153
+msgid "A <emphasis>bidirectional many-to-one association</emphasis> is the most common kind of association. (This is the standard parent/child relationship.)"
+msgstr "<emphasis>åæ¹åå¤å¯¾ä¸é¢é£</emphasis> ã¯æãä¸è¬çãªé¢é£ã§ãã ï¼æ¨æºçãªè¦ªåé¢ä¿ã§ãï¼"
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <many-to-one name=\"address\"
+\n"
+ " column=\"addressId\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <set name=\"people\" inverse=\"true\">
+\n"
+ " <key column=\"addressId\"/>
+\n"
+ " <one-to-many class=\"Person\"/>
+\n"
+ " </set>
+\n"
+ "</class>]]>"
+
+#: index.docbook:163
+msgid "If you use a <literal>List</literal> (or other indexed collection) you need to set the <literal>key</literal> column of the foreign key to <literal>not null</literal>, and let Hibernate manage the association from the collections side to maintain the index of each element (making the other side virtually inverse by setting <literal>update=\"false\"</literal> and <literal>insert=\"false\"</literal>):"
+msgstr "<literal>List</literal> ï¼ã¾ãã¯ä»ã®ã¤ã³ããã¯ã¹ä»ãã®ã³ã¬ã¯ã·ã§ã³ï¼ã使ããªãã å¤é¨ãã¼ã® <literal>key</literal> ã«ã©ã ã <literal>not null</literal> ã«è¨å®ãã ã³ã¬ã¯ã·ã§ã³å´ãåè¦ç´ ã®ã¤ã³ããã¯ã¹ãã¡ã³ããã³ã¹ããããã«ã é¢é£ãæ±ãå¿
è¦ãããã¾ã ï¼<literal>update=\"false\"</literal> ã㤠<literal>insert=\"false\"</literal> ã¨è¨å®ãã¦ãå対å´ãä»®æ³çã«inverseã«ãã¾ãï¼ï¼"
+
+#: index.docbook:171
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <list name=\"people\">\n"
+ " <key column=\"addressId\" not-null=\"true\"/>\n"
+ " <list-index column=\"peopleIdx\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </list>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\"/>
+\n"
+ " ...
+\n"
+ " <many-to-one name=\"address\"
+\n"
+ " column=\"addressId\"
+\n"
+ " not-null=\"true\"
+\n"
+ " insert=\"false\"
+\n"
+ " update=\"false\"/>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\"/>
+\n"
+ " ...
+\n"
+ " <list name=\"people\">
+\n"
+ " <key column=\"addressId\" not-null=\"true\"/>
+\n"
+ " <list-index column=\"peopleIdx\"/>
+\n"
+ " <one-to-many class=\"Person\"/>
+\n"
+ " </list>
+\n"
+ "</class>]]>"
+
+#: index.docbook:173
+msgid "It is important that you define <literal>not-null=\"true\"</literal> on the <literal><key></literal> element of the collection mapping if the underlying foreign key column is <literal>NOT NULL</literal>. Don't only declare <literal>not-null=\"true\"</literal> on a possible nested <literal><column></literal> element, but on the <literal><key></literal> element."
+msgstr "ããå¤é¨ãã¼ã«ã©ã ã <literal>NOT NULL</literal> ã§ãããªãã°ã ã³ã¬ã¯ã·ã§ã³ãããã³ã°ã® <literal><key></literal> è¦ç´ ã <literal>not-null=\"true\"</literal> ã«ãããã¨ã¯éè¦ã§ãã å
¥ãåã«ãªã£ã <literal><column></literal> è¦ç´ ã ãã§ã¯ãªãã <literal><key></literal> è¦ç´ ã <literal>not-null=\"true\"</literal> ã¨å®ç¾©ããªãããã«ãã¦ãã ããã"
+
+#: index.docbook:187
+msgid "A <emphasis>bidirectional one-to-one association on a foreign key</emphasis> is quite common."
+msgstr "<emphasis>å¤é¨ãã¼ã®åæ¹åä¸å¯¾ä¸é¢é£</emphasis> ã¯é常ã«ä¸è¬çã§ãã"
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " property-ref=\"address\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <many-to-one name=\"address\"
+\n"
+ " column=\"addressId\"
+\n"
+ " unique=\"true\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <one-to-one name=\"person\"
+\n"
+ " property-ref=\"address\"/>
+\n"
+ "</class>]]>"
+
+#: index.docbook:195
+msgid "A <emphasis>bidirectional one-to-one association on a primary key</emphasis> uses the special id generator."
+msgstr "<emphasis>主ãã¼ã®åæ¹åä¸å¯¾ä¸é¢é£</emphasis> ã¯ç¹æ®ãªIDã¸ã§ãã¬ã¼ã¿ã使ãã¾ãã"
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"address\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <one-to-one name=\"address\"/>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"foreign\">
+\n"
+ " <param name=\"property\">person</param>
+\n"
+ " </generator>
+\n"
+ " </id>
+\n"
+ " <one-to-one name=\"person\"
+\n"
+ " constrained=\"true\"/>
+\n"
+ "</class>]]>"
+
+#: index.docbook:208
+msgid "Bidirectional associations with join tables"
+msgstr "çµåãã¼ãã«ã使ã£ãåæ¹åé¢é£"
+
+#: index.docbook:213
+msgid "A <emphasis>bidirectional one-to-many association on a join table</emphasis>. Note that the <literal>inverse=\"true\"</literal> can go on either end of the association, on the collection, or on the join."
+msgstr "<emphasis>çµåãã¼ãã«ã®åæ¹åä¸å¯¾å¤é¢é£</emphasis> ã§ãã <literal>inverse=\"true\"</literal> ãé¢é£ç«¯ãã³ã¬ã¯ã·ã§ã³ãçµåã®ããããã« è¨å®ã§ãããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:219
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" \n"
+ " table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " inverse=\"true\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\"\n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <set name=\"addresses\"
+\n"
+ " table=\"PersonAddress\">
+\n"
+ " <key column=\"personId\"/>
+\n"
+ " <many-to-many column=\"addressId\"
+\n"
+ " unique=\"true\"
+\n"
+ " class=\"Address\"/>
+\n"
+ " </set>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <join table=\"PersonAddress\"
+\n"
+ " inverse=\"true\"
+\n"
+ " optional=\"true\">
+\n"
+ " <key column=\"addressId\"/>
+\n"
+ " <many-to-one name=\"person\"
+\n"
+ " column=\"personId\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ " </join>
+\n"
+ "</class>]]>"
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[
+\n"
+ "create table Person ( personId bigint not null primary key )
+\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null primary key )
+\n"
+ "create table Address ( addressId bigint not null primary key )
+\n"
+ " ]]>"
+
+#: index.docbook:227
+msgid "A <emphasis>bidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr "<emphasis>çµåãã¼ãã«ã®åæ¹åä¸å¯¾ä¸é¢é£</emphasis> ã¯é常ã«ç¹æ®ã§ãããå¯è½ã§ãã"
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\"\n"
+ " inverse=\"true\">\n"
+ " <key column=\"addressId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <join table=\"PersonAddress\"
+\n"
+ " optional=\"true\">
+\n"
+ " <key column=\"personId\"
+\n"
+ " unique=\"true\"/>
+\n"
+ " <many-to-one name=\"address\"
+\n"
+ " column=\"addressId\"
+\n"
+ " not-null=\"true\"
+\n"
+ " unique=\"true\"/>
+\n"
+ " </join>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <join table=\"PersonAddress\"
+\n"
+ " optional=\"true\"
+\n"
+ " inverse=\"true\">
+\n"
+ " <key column=\"addressId\"
+\n"
+ " unique=\"true\"/>
+\n"
+ " <many-to-one name=\"address\"
+\n"
+ " column=\"personId\"
+\n"
+ " not-null=\"true\"
+\n"
+ " unique=\"true\"/>
+\n"
+ " </join>
+\n"
+ "</class>]]>"
+
+#: index.docbook:240
+msgid "Finally, we have a <emphasis>bidirectional many-to-many association</emphasis>."
+msgstr "æå¾ã«ã<emphasis>åæ¹åå¤å¯¾å¤é¢é£</emphasis> ã示ãã¾ãã"
+
+#: index.docbook:244
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\" table=\"PersonAddress\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-many column=\"personId\"\n"
+ " class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"id\" column=\"personId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">
+\n"
+ " <key column=\"personId\"/>
+\n"
+ " <many-to-many column=\"addressId\"
+\n"
+ " class=\"Address\"/>
+\n"
+ " </set>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ " <id name=\"id\" column=\"addressId\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <set name=\"people\" inverse=\"true\" table=\"PersonAddress\">
+\n"
+ " <key column=\"addressId\"/>
+\n"
+ " <many-to-many column=\"personId\"
+\n"
+ " class=\"Person\"/>
+\n"
+ " </set>
+\n"
+ "</class>]]>"
+
+#: index.docbook:253
+msgid "More complex association mappings"
+msgstr "ããè¤éãªé¢é£ãããã³ã°"
+
+#: index.docbook:255
+msgid "More complex association joins are <emphasis>extremely</emphasis> rare. Hibernate makes it possible to handle more complex situations using SQL fragments embedded in the mapping document. For example, if a table with historical account information data defines <literal>accountNumber</literal>, <literal>effectiveEndDate</literal> and <literal>effectiveStartDate</literal>columns, mapped as follows:"
+msgstr "ããè¤éãªé¢é£çµå㯠<emphasis>極ãã¦</emphasis> ç¨ã§ãã ãããã³ã°ããã¥ã¡ã³ãã«SQLæãåãè¾¼ããã¨ã§ã ããã«è¤éãªç¶æ³ãæ±ããã¨ãã§ãã¾ãã ä¾ãã°ã<literal>accountNumber</literal>, <literal>effectiveEndDate</literal>, <literal>effectiveStartDate</literal> ã«ã©ã ãæã¤accountï¼å£åº§ï¼æ
å ±ã®å±¥æ´ãæ±ããã¼ãã«ã¯ã 以ä¸ã®ããã«ãããã³ã°ãã¾ãã"
+
+#: index.docbook:264
+msgid ""
+ "<![CDATA[<properties name=\"currentAccountKey\">\n"
+ " <property name=\"accountNumber\" type=\"string\" not-null=\"true\"/>\n"
+ " <property name=\"currentAccount\" type=\"boolean\">\n"
+ " <formula>case when effectiveEndDate is null then 1 else 0 end</formula>\n"
+ " </property>\n"
+ "</properties>\n"
+ "<property name=\"effectiveEndDate\" type=\"date\"/>\n"
+ "<property name=\"effectiveStateDate\" type=\"date\" not-null=\"true\"/>]]>"
+msgstr ""
+ "<![CDATA[<properties name=\"currentAccountKey\">
+\n"
+ " <property name=\"accountNumber\" type=\"string\" not-null=\"true\"/>
+\n"
+ " <property name=\"currentAccount\" type=\"boolean\">
+\n"
+ " <formula>case when effectiveEndDate is null then 1 else 0 end</formula>
+\n"
+ " </property>
+\n"
+ "</properties>
+\n"
+ "<property name=\"effectiveEndDate\" type=\"date\"/>
+\n"
+ "<property name=\"effectiveStateDate\" type=\"date\" not-null=\"true\"/>]]>"
+
+#: index.docbook:266
+msgid "Then we can map an association to the <emphasis>current</emphasis> instance (the one with null <literal>effectiveEndDate</literal>) using:"
+msgstr "ããã¦ãé¢é£ã <emphasis>ç¾æç¹ã®</emphasis> ã¤ã³ã¹ã¿ã³ã¹ ï¼<literal>effectiveEndDate</literal> ãnullã§ãããã®ï¼ã«ãããã³ã°ãã¾ãã 以ä¸ã®ããã«ãªãã¾ãï¼"
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<many-to-one name=\"currentAccountInfo\" \n"
+ " property-ref=\"currentAccountKey\"\n"
+ " class=\"AccountInfo\">\n"
+ " <column name=\"accountNumber\"/>\n"
+ " <formula>'1'</formula>\n"
+ "</many-to-one>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"currentAccountInfo\"
+\n"
+ " property-ref=\"currentAccountKey\"
+\n"
+ " class=\"AccountInfo\">
+\n"
+ " <column name=\"accountNumber\"/>
+\n"
+ " <formula>'1'</formula>
+\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:273
+msgid "In a more complex example, imagine that the association between <literal>Employee</literal> and <literal>Organization</literal> is maintained in an <literal>Employment</literal> table full of historical employment data. Then an association to the employee's <emphasis>most recent</emphasis> employer (the one with the most recent <literal>startDate</literal>) might be mapped this way:"
+msgstr "ããã«è¤éãªä¾ã§ã¯ã<literal>Employeeï¼å¾æ¥å¡ï¼</literal> 㨠<literal>Organizationï¼çµç¹ï¼</literal> éã®é¢é£ã <literal>Employmentï¼éç¨ï¼</literal> ãã¼ãã«ã§ä¿æãããå ´åãæ³åãã¦ãã ããã ãã®ãã¼ãã«ã«ã¯éç¨ãã¼ã¿ã®å±¥æ´ããã¹ã¦å«ã¾ãã¾ãã ããã¨å¾æ¥å¡ã® <emphasis>æãæè¿ã®</emphasis> éç¨è
ã表ãé¢é£ ï¼æãæè¿ã® <literal>startDate</literal> ãæã¤ãã®ï¼ã¯ããã®ããã«ãããã³ã°ã§ãã¾ãï¼"
+
+#: index.docbook:281
+msgid ""
+ "<![CDATA[<join>\n"
+ " <key column=\"employeeId\"/>\n"
+ " <subselect>\n"
+ " select employeeId, orgId \n"
+ " from Employments \n"
+ " group by orgId \n"
+ " having startDate = max(startDate)\n"
+ " </subselect>\n"
+ " <many-to-one name=\"mostRecentEmployer\" \n"
+ " class=\"Organization\" \n"
+ " column=\"orgId\"/>\n"
+ "</join>]]>"
+msgstr ""
+ "<![CDATA[<join>
+\n"
+ " <key column=\"employeeId\"/>
+\n"
+ " <subselect>
+\n"
+ " select employeeId, orgId
+\n"
+ " from Employments
+\n"
+ " group by orgId
+\n"
+ " having startDate = max(startDate)
+\n"
+ " </subselect>
+\n"
+ " <many-to-one name=\"mostRecentEmployer\"
+\n"
+ " class=\"Organization\"
+\n"
+ " column=\"orgId\"/>
+\n"
+ "</join>]]>"
+
+#: index.docbook:283
+msgid "You can get quite creative with this functionality, but it is usually more practical to handle these kinds of cases using HQL or a criteria query."
+msgstr "ãã®æ©è½ã¯é常ã«å¼·åã§ãã ããããã®ãããªå ´åãæ®éã¯HQLãcriteriaã¯ã¨ãªã使ãæ¹ãããå®è·µçã§ãã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/basic_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/basic_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/basic_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,3698 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Basic O/R Mapping"
+msgstr "åºæ¬çãªO/Rãããã³ã°"
+
+#: index.docbook:8
+msgid "Mapping declaration"
+msgstr "ãããã³ã°å®ç¾©"
+
+#: index.docbook:10
+msgid "Object/relational mappings are usually defined in an XML document. The mapping document is designed to be readable and hand-editable. The mapping language is Java-centric, meaning that mappings are constructed around persistent class declarations, not table declarations."
+msgstr "ãªãã¸ã§ã¯ã/ãªã¬ã¼ã·ã§ãã«ãããã³ã°ã¯é常XMLããã¥ã¡ã³ãã§å®ç¾©ãã¾ãã ãããã³ã°ããã¥ã¡ã³ãã¯ãèªã¿ãããæä½æ¥ã§ç·¨éããããããã«ãã¶ã¤ã³ããã¦ãã¾ãã ãããã³ã°è¨èªã¯Javaä¸å¿ãã¤ã¾ããã¼ãã«å®ç¾©ã§ã¯ãªãæ°¸ç¶ã¯ã©ã¹ã®å®ç¾©ã«åºã¥ãã¦æ§ç¯ããã¦ãã¾ãã"
+
+#: index.docbook:17
+msgid "Note that, even though many Hibernate users choose to write the XML by hand, a number of tools exist to generate the mapping document, including XDoclet, Middlegen and AndroMDA."
+msgstr "å¤ãã®Hibernateã¦ã¼ã¶ã¯XMLãããã³ã°ã®è¨è¿°ãæä½æ¥ã§è¡ãã¾ããã XDoclet, Middlegen, AndroMDAã¨ãããããªãããã³ã°ããã¥ã¡ã³ããçæãããã¼ã«ã ããã¤ãåå¨ãã¾ãã"
+
+#: index.docbook:23
+msgid "Lets kick off with an example mapping:"
+msgstr "ãµã³ãã«ã®ãããã³ã°ããå§ãã¾ãããï¼"
+
+#: index.docbook:27
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\"\n"
+ " table=\"cats\"\n"
+ " discriminator-value=\"C\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "\n"
+ " <discriminator column=\"subclass\"\n"
+ " type=\"character\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " <property name=\"birthdate\"\n"
+ " type=\"date\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"color\"\n"
+ " type=\"eg.types.ColorUserType\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"sex\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"litterId\"\n"
+ " column=\"litterId\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <many-to-one name=\"mother\"\n"
+ " column=\"mother_id\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <set name=\"kittens\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"litter_id\">\n"
+ " <key column=\"mother_id\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"DomesticCat\"\n"
+ " discriminator-value=\"D\">\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>
+\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC
+\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"
+\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">
+\n"
+ "
+\n"
+ "<hibernate-mapping package=\"eg\">
+\n"
+ "
+\n"
+ " <class name=\"Cat\"
+\n"
+ " table=\"cats\"
+\n"
+ " discriminator-value=\"C\">
+\n"
+ "
+\n"
+ " <id name=\"id\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <discriminator column=\"subclass\"
+\n"
+ " type=\"character\"/>
+\n"
+ "
+\n"
+ " <property name=\"weight\"/>
+\n"
+ "
+\n"
+ " <property name=\"birthdate\"
+\n"
+ " type=\"date\"
+\n"
+ " not-null=\"true\"
+\n"
+ " update=\"false\"/>
+\n"
+ "
+\n"
+ " <property name=\"color\"
+\n"
+ " type=\"eg.types.ColorUserType\"
+\n"
+ " not-null=\"true\"
+\n"
+ " update=\"false\"/>
+\n"
+ "
+\n"
+ " <property name=\"sex\"
+\n"
+ " not-null=\"true\"
+\n"
+ " update=\"false\"/>
+\n"
+ "
+\n"
+ " <property name=\"litterId\"
+\n"
+ " column=\"litterId\"
+\n"
+ " update=\"false\"/>
+\n"
+ "
+\n"
+ " <many-to-one name=\"mother\"
+\n"
+ " column=\"mother_id\"
+\n"
+ " update=\"false\"/>
+\n"
+ "
+\n"
+ " <set name=\"kittens\"
+\n"
+ " inverse=\"true\"
+\n"
+ " order-by=\"litter_id\">
+\n"
+ " <key column=\"mother_id\"/>
+\n"
+ " <one-to-many class=\"Cat\"/>
+\n"
+ " </set>
+\n"
+ "
+\n"
+ " <subclass name=\"DomesticCat\"
+\n"
+ " discriminator-value=\"D\">
+\n"
+ "
+\n"
+ " <property name=\"name\"
+\n"
+ " type=\"string\"/>
+\n"
+ "
+\n"
+ " </subclass>
+\n"
+ "
+\n"
+ " </class>
+\n"
+ "
+\n"
+ " <class name=\"Dog\">
+\n"
+ " <!-- ããã«Dogç¨ã®ãããã³ã°æ¸ãã¾ã -->
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:29
+msgid "We will now discuss the content of the mapping document. We will only describe the document elements and attributes that are used by Hibernate at runtime. The mapping document also contains some extra optional attributes and elements that affect the database schemas exported by the schema export tool. (For example the <literal> not-null</literal> attribute.)"
+msgstr "ãããã³ã°ããã¥ã¡ã³ãã®å
容ã説æãã¾ããã ãã ããããã§ã¯Hibernateãå®è¡æã«ä½¿ãããã¥ã¡ã³ãè¦ç´ ã¨å±æ§ã«ã¤ãã¦ã®ã¿èª¬æãã¾ãã ãããã³ã°ããã¥ã¡ã³ãã¯ãããã¤ãã®ãªãã·ã§ã³å±æ§ã¨è¦ç´ ãå«ãã§ãã¾ãï¼ä¾ãã° <literal>not-null</literal> å±æ§ï¼ã ãããã¯ã¹ãã¼ãã¨ã¯ã¹ãã¼ããã¼ã«ãåºåãããã¼ã¿ãã¼ã¹ã¹ãã¼ãã«å½±é¿ãä¸ãããã®ã§ãã"
+
+#: index.docbook:40
+msgid "Doctype"
+msgstr "Doctype"
+
+#: index.docbook:42
+msgid "All XML mappings should declare the doctype shown. The actual DTD may be found at the URL above, in the directory <literal>hibernate-x.x.x/src/org/hibernate </literal> or in <literal>hibernate3.jar</literal>. Hibernate will always look for the DTD in its classpath first. If you experience lookups of the DTD using an Internet connection, check your DTD declaration against the contents of your claspath."
+msgstr "XMLãããã³ã°ã§ã¯ããè¦ããããããªããã¥ã¡ã³ãåãå¿
ãå®ç¾©ãã¹ãã§ãã å®éã®DTDã¯ãä¸è¨ã®URLã® <literal>hibernate-x.x.x/src/org/hibernate</literal> ãã£ã¬ã¯ããªã ã¾ã㯠<literal>hibernate.jar</literal> å
ã«ããã¾ãã Hibernateã¯å¸¸ã«ããã®ã¯ã©ã¹ãã¹å
ã§DTDãæ¢ãå§ãã¾ãã ã¤ã³ã¿ã¼ãããã«ããDTDãã¡ã¤ã«ãæ¢ããã¨ãããªãã ã¯ã©ã¹ãã¹ã®å
容ãè¦ã¦ãDTD宣è¨ã確èªãã¦ãã ããã"
+
+#: index.docbook:52
+msgid "EntityResolver"
+msgstr "ã¨ã³ãã£ãã£ã»ãªã¾ã«ã"
+
+#: index.docbook:53
+msgid "As mentioned previously, Hibernate will first attempt to resolve DTDs in its classpath. The manner in which it does this is by registering a custom <literal>org.xml.sax.EntityResolver</literal> implementation with the SAXReader it uses to read in the xml files. This custom <literal>EntityResolver</literal> recognizes two different systemId namespaces."
+msgstr "åè¿°ããããã«ãHibernateã¯ã¾ãã¯ã©ã¹ãã¹å
ã§DTDã解決ãããã¨ãã¾ãã <literal>org.xml.sax.EntityResolver</literal> ã®ã«ã¹ã¿ã å®è£
ã XMLãã¡ã¤ã«ãèªã¿è¾¼ãããã®SAXReaderã«ç»é²ãããã¨ã«ãã£ã¦ãDTDã解決ãã¾ãã ãã®ã«ã¹ã¿ã ã® <literal>EntityResolver</literal> ã¯2ã¤ã®ç°ãªãã·ã¹ãã IDåå空éãèªèãã¾ãã"
+
+#: index.docbook:61
+msgid "a <literal>hibernate namespace</literal> is recognized whenever the resolver encounteres a systemId starting with <literal>http://hibernate.sourceforge.net/</literal>; the resolver attempts to resolve these entities via the classlaoder which loaded the Hibernate classes."
+msgstr "<literal>Hibernateåå空é</literal> ã¯ããªã¾ã«ãã <literal>http://hibernate.sourceforge.net/</literal> ã§å§ã¾ãã·ã¹ãã IDã«å°éããã¨ãã«ã èªèããã¾ãã ããã¦ãªã¾ã«ãã¯ãHibernateã®ã¯ã©ã¹ããã¼ãããã¯ã©ã¹ãã¼ããç¨ãã¦ã ãããã®ã¨ã³ãã£ãã£ã解決ãããã¨ãã¾ãã"
+
+#: index.docbook:70
+msgid "a <literal>user namespace</literal> is recognized whenever the resolver encounteres a systemId using a <literal>classpath://</literal> URL protocol; the resolver will attempt to resolve these entities via (1) the current thread context classloader and (2) the classloader which loaded the Hibernate classes."
+msgstr "<literal>ã¦ã¼ã¶åå空é</literal> ã¯ããªã¾ã«ãã URLãããã³ã«ã® <literal>classpath://</literal> ã使ã£ãã·ã¹ãã IDã«å°éããã¨ãã«ã èªèããã¾ããããã¦ãªã¾ã«ãã¯ã(1)ã«ã¬ã³ãã¹ã¬ããã®ã³ã³ããã¹ãã¯ã©ã¹ãã¼ãã¼ã ã¾ãã¯(2)Hibernateã®ã¯ã©ã¹ããã¼ãããã¯ã©ã¹ãã¼ãã使ã£ã¦ã ãããã®ã¨ã³ãã£ãã£ã解決ãããã¨ãã¾ãã"
+
+#: index.docbook:79
+msgid "An example of utilizing user namespacing:"
+msgstr "ä¸è¨ã¯ãã¦ã¼ã¶åå空éã使ã£ãä¾ã§ãï¼"
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\" [\n"
+ " <!ENTITY types SYSTEM \"classpath://your/domain/types.xml\">\n"
+ "]>\n"
+ "\n"
+ "<hibernate-mapping package=\"your.domain\">\n"
+ " <class name=\"MyEntity\">\n"
+ " <id name=\"id\" type=\"my-custom-id-type\">\n"
+ " ...\n"
+ " </id>\n"
+ " <class>\n"
+ " &types;\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>
+\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC
+\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"
+\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\" [
+\n"
+ " <!ENTITY types SYSTEM \"classpath://your/domain/types.xml\">
+\n"
+ "]>
+\n"
+ "
+\n"
+ "<hibernate-mapping package=\"your.domain\">
+\n"
+ " <class name=\"MyEntity\">
+\n"
+ " <id name=\"id\" type=\"my-custom-id-type\">
+\n"
+ " ...
+\n"
+ " </id>
+\n"
+ " <class>
+\n"
+ " &types;
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:83
+msgid "Where <literal>types.xml</literal> is a resource in the <literal>your.domain</literal> package and contains a custom <xref linkend=\"mapping-types-custom\"/>typedef."
+msgstr "ãã㧠<literal>types.xml</literal> 㯠<literal>your.domain</literal> ããã±ã¼ã¸å
ã®ãªã½ã¼ã¹ã§ããã ã«ã¹ã¿ã <xref linkend=\"mapping-types-custom\"/>typedef ãå«ãã¾ãã"
+
+#: index.docbook:91
+msgid "hibernate-mapping"
+msgstr "hibernate-mapping"
+
+#: index.docbook:93
+msgid "This element has several optional attributes. The <literal>schema</literal> and <literal>catalog</literal> attributes specify that tables referred to in this mapping belong to the named schema and/or catalog. If specified, tablenames will be qualified by the given schema and catalog names. If missing, tablenames will be unqualified. The <literal>default-cascade</literal> attribute specifies what cascade style should be assumed for properties and collections which do not specify a <literal>cascade</literal> attribute. The <literal>auto-import</literal> attribute lets us use unqualified class names in the query language, by default."
+msgstr "ãã®è¦ç´ ã«ã¯ããã¤ããªãã·ã§ã³å±æ§ãããã¾ãã<literal>schema</literal> å±æ§ã¨ <literal>catalog</literal> å±æ§ã¯ã ãã®ãããã³ã°ãåç
§ãããã¼ãã«ãããã®å±æ§ã«ãã£ã¦æå®ãããã¹ãã¼ãã¨(ã¾ãã¯)ã«ã¿ãã°ã«å±ãããã¨ãæå®ãã¾ãã ãã®å±æ§ãæå®ãããã¨ããã¼ãã«åã¯ä¸ããããã¹ãã¼ãåã¨ã«ã¿ãã°åã§ä¿®é£¾ããã¾ãããããã®å±æ§ãæå®ããã¦ããªããã°ã ãã¼ãã«åã¯ä¿®é£¾ããã¾ããã<literal>default-cascade</literal> å±æ§ã¯ã <literal>cascade</literal> å±æ§ãæå®ãã¦ããªãããããã£ãã³ã¬ã¯ã·ã§ã³ã«ã ã©ã®ã«ã¹ã±ã¼ãã¹ã¿ã¤ã«ãå²ãå½ã¦ãããæå®ãã¾ãã <literal>auto-import</literal> å±æ§ã¯ã ã¯ã¨ãªè¨èªå
ã§ä¿®é£¾ããã¦ããªãã¯ã©ã¹åããããã©ã«ãã§ä½¿ããããã«ãã¾ãã"
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[<hibernate-mapping\n"
+ " schema=\"schemaName\"\n"
+ " catalog=\"catalogName\"\n"
+ " default-cascade=\"cascade_style\"\n"
+ " default-access=\"field|property|ClassName\"\n"
+ " default-lazy=\"true|false\"\n"
+ " auto-import=\"true|false\"\n"
+ " package=\"package.name\"\n"
+ " />]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping
+\n"
+ " schema=\"schemaName\"
+\n"
+ " catalog=\"catalogName\"
+\n"
+ " default-cascade=\"cascade_style\"
+\n"
+ " default-access=\"field|property|ClassName\"
+\n"
+ " default-lazy=\"true|false\"
+\n"
+ " auto-import=\"true|false\"
+\n"
+ " package=\"package.name\"
+\n"
+ " />]]>"
+
+#: index.docbook:117
+msgid "<literal>schema</literal> (optional): The name of a database schema."
+msgstr "<literal>schema</literal>ï¼ãªãã·ã§ã³ï¼ï¼ãã¼ã¿ãã¼ã¹ã¹ãã¼ãã®ååã"
+
+#: index.docbook:122
+msgid "<literal>catalog</literal> (optional): The name of a database catalog."
+msgstr "<literal>catalog</literal> ï¼ãªãã·ã§ã³ï¼ï¼ãã¼ã¿ãã¼ã¹ã«ã¿ãã°ã®ååã"
+
+#: index.docbook:127
+msgid "<literal>default-cascade</literal> (optional - defaults to <literal>none</literal>): A default cascade style."
+msgstr "<literal>default-cascade</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>none</literal>ï¼ï¼ ããã©ã«ãã®ã«ã¹ã±ã¼ãã¹ã¿ã¤ã«ã"
+
+#: index.docbook:133
+msgid "<literal>default-access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing all properties. Can be a custom implementation of <literal>PropertyAccessor</literal>."
+msgstr "<literal>default-access</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal> ï¼ï¼ Hibernateãããããã£ã«ã¢ã¯ã»ã¹ããéã«æ¡ãã¹ãæ¦ç¥ã <literal>PropertyAccessor</literal> ãå®è£
ãããã¨ã§ã«ã¹ã¿ãã¤ãºå¯è½ã"
+
+#: index.docbook:140
+msgid "<literal>default-lazy</literal> (optional - defaults to <literal>true</literal>): The default value for unspecifed <literal>lazy</literal> attributes of class and collection mappings."
+msgstr "<literal>default-lazy</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal> )ï¼ <literal>lazy</literal> å±æ§ãæå®ããã¦ããªãã¯ã©ã¹ãã³ã¬ã¯ã·ã§ã³ãããã³ã°ã«å¯¾ããããã©ã«ãå¤ã"
+
+#: index.docbook:147
+msgid "<literal>auto-import</literal> (optional - defaults to <literal>true</literal>): Specifies whether we can use unqualified class names (of classes in this mapping) in the query language."
+msgstr "<literal>auto-import</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal>ï¼ï¼ ã¯ã¨ãªè¨èªå
ã§ãï¼ãã®ãããã³ã°å
ã®ã¯ã©ã¹ã®ï¼ä¿®é£¾ããã¦ããªãã¯ã©ã¹åã使ãããã©ãããæå®ãã¾ãã"
+
+#: index.docbook:154
+msgid "<literal>package</literal> (optional): Specifies a package prefix to assume for unqualified class names in the mapping document."
+msgstr "<literal>package</literal> (ãªãã·ã§ã³): ãããã³ã°ããã¥ã¡ã³ãå
ã§ä¿®é£¾ããã¦ããªãã¯ã©ã¹åã«å¯¾ãã¦å²ãå½ã¦ãã ããã±ã¼ã¸ã®æ¥é è¾(prefix)ãæå®ãã¾ãã"
+
+#: index.docbook:162
+msgid "If you have two persistent classes with the same (unqualified) name, you should set <literal>auto-import=\"false\"</literal>. Hibernate will throw an exception if you attempt to assign two classes to the same \"imported\" name."
+msgstr "ï¼ä¿®é£¾ããã¦ããªãï¼åãååã®æ°¸ç¶ã¯ã©ã¹ã2ã¤ãããªãã <literal>auto-import=\"false\"</literal> ãè¨å®ãã¹ãã§ãã 2ã¤ã®ã¯ã©ã¹ã«âã¤ã³ãã¼ããããâåãååãå²ãå½ã¦ããã¨ããã¨ãHibernateã¯ä¾å¤ãæãã¾ãã"
+
+#: index.docbook:168
+msgid "Note that the <literal>hibernate-mapping</literal> element allows you to nest several persistent <literal><class></literal> mappings, as shown above. It is however good practice (and expected by some tools) to map only a single persistent class (or a single class hierarchy) in one mapping file and name it after the persistent superclass, e.g. <literal>Cat.hbm.xml</literal>, <literal>Dog.hbm.xml</literal>, or if using inheritance, <literal>Animal.hbm.xml</literal>."
+msgstr "<literal>hibernate-mapping</literal> è¦ç´ ã¯ãæåã®ä¾ã§ç¤ºããããã«ããã¤ãã®æ°¸ç¶ <literal><class></literal> ãããã³ã°ããã¹ãã§ãã¾ãã ããããï¼ã¤ã®ãããã³ã°ãã¡ã¤ã«ã§ã¯ãã ã²ã¨ã¤ã®æ°¸ç¶ã¯ã©ã¹(ã¾ãã¯ã²ã¨ã¤ã®ã¯ã©ã¹é層)ã«ãããã³ã°ããããã«ãã ããã«æ°¸ç¶ã¹ã¼ãã¼ã¯ã©ã¹ã®å¾ã§æå®ããã¹ãã§ããã(ããã¤ãã®ãã¼ã«ã¯ãã®ãããªãããã³ã°ãã¡ã¤ã«ãæ³å®ãã¦ãã¾ã)ã ä¾ãã°æ¬¡ã®ããã«ãªãã¾ããï¼ <literal>Cat.hbm.xml</literal> , <literal>Dog.hbm.xml</literal> , ã¾ãã¯ç¶æ¿ã使ããªã <literal>Animal.hbm.xml</literal> ã"
+
+#: index.docbook:181
+msgid "<title>class</title>"
+msgstr "<title>class</title>"
+
+#: index.docbook:183
+msgid "You may declare a persistent class using the <literal>class</literal> element:"
+msgstr "<literal>class</literal> è¦ç´ ã使ã£ã¦ãæ°¸ç¶ã¯ã©ã¹ã宣è¨ã§ãã¾ãã"
+
+#: index.docbook:211
+msgid ""
+ "<![CDATA[<class\n"
+ " name=\"ClassName\"\n"
+ " table=\"tableName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " mutable=\"true|false\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " select-before-update=\"true|false\"\n"
+ " polymorphism=\"implicit|explicit\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " persister=\"PersisterClass\"\n"
+ " batch-size=\"N\"\n"
+ " optimistic-lock=\"none|version|dirty|all\"\n"
+ " lazy=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " check=\"arbitrary sql check condition\"\n"
+ " rowid=\"rowid\"\n"
+ " subselect=\"SQL expression\"\n"
+ " abstract=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]>"
+msgstr ""
+ "<![CDATA[<class
+\n"
+ " name=\"ClassName\"
+\n"
+ " table=\"tableName\"
+\n"
+ " discriminator-value=\"discriminator_value\"
+\n"
+ " mutable=\"true|false\"
+\n"
+ " schema=\"owner\"
+\n"
+ " catalog=\"catalog\"
+\n"
+ " proxy=\"ProxyInterface\"
+\n"
+ " dynamic-update=\"true|false\"
+\n"
+ " dynamic-insert=\"true|false\"
+\n"
+ " select-before-update=\"true|false\"
+\n"
+ " polymorphism=\"implicit|explicit\"
+\n"
+ " where=\"arbitrary sql where condition\"
+\n"
+ " persister=\"PersisterClass\"
+\n"
+ " batch-size=\"N\"
+\n"
+ " optimistic-lock=\"none|version|dirty|all\"
+\n"
+ " lazy=\"true|false\"
+\n"
+ " entity-name=\"EntityName\"
+\n"
+ " check=\"arbitrary sql check condition\"
+\n"
+ " rowid=\"rowid\"
+\n"
+ " subselect=\"SQL expression\"
+\n"
+ " abstract=\"true|false\"
+\n"
+ " entity-name=\"EntityName\"
+\n"
+ " node=\"element-name\"
+\n"
+ "/>]]>"
+
+#: index.docbook:214
+msgid "<literal>name</literal> (optional): The fully qualified Java class name of the persistent class (or interface). If this attribute is missing, it is assumed that the mapping is for a non-POJO entity."
+msgstr "<literal>name</literal> (ãªãã·ã§ã³)ï¼æ°¸ç¶ã¯ã©ã¹ï¼ã¾ãã¯ã¤ã³ã¿ã¼ãã§ã¤ã¹ï¼ã®å®å
¨ä¿®é£¾Javaã¯ã©ã¹åã ãããã®å±æ§ãæå®ããªããã°ãPOJOã§ã¯ãªãã¨ã³ãã£ãã£ã«å¯¾ãããããã³ã°ã¨ãã¦æ±ããã¾ãã"
+
+#: index.docbook:221
+msgid "<literal>table</literal> (optional - defaults to the unqualified class name): The name of its database table."
+msgstr "<literal>table</literal> (ãªãã·ã§ã³ - ããã©ã«ãã¯ä¿®é£¾ããã¦ããªãã¯ã©ã¹å)ï¼ãã¼ã¿ãã¼ã¹ãã¼ãã«ã®åå"
+
+#: index.docbook:227
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses, used for polymorphic behaviour. Acceptable values include <literal>null</literal> and <literal>not null</literal>."
+msgstr "<literal>discriminator-value</literal> (ãªãã·ã§ã³ - ããã©ã«ãã¯ã¯ã©ã¹å)ï¼ ããªã¢ã¼ãã£ãã¯ãªæ¯ãèãã«ä½¿ãããåã
ã®ãµãã¯ã©ã¹ãèå¥ããããã®å¤ã å¤ã¯ <literal>null</literal> ã <literal>not null</literal> ã®ãããããåãã¾ãã"
+
+#: index.docbook:234
+msgid "<literal>mutable</literal> (optional, defaults to <literal>true</literal>): Specifies that instances of the class are (not) mutable."
+msgstr "<literal>mutable</literal> (ãªãã·ã§ã³ã ããã©ã«ã㯠<literal>true</literal> )ï¼ ãã®ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãæ´æ°å¯è½ï¼ã¾ãã¯ä¸å¯è½ï¼ã§ãããã¨ãæå®ãã¾ãã"
+
+#: index.docbook:240, index.docbook:2204
+msgid "<literal>schema</literal> (optional): Override the schema name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr "<literal>schema</literal> ï¼ãªãã·ã§ã³ï¼ï¼ ã«ã¼ãã® <literal><hibernate-mapping></literal> è¦ç´ ã§æå®ãããã¹ãã¼ãåããªã¼ãã¼ã©ã¤ããã¾ãã"
+
+#: index.docbook:246, index.docbook:2210
+msgid "<literal>catalog</literal> (optional): Override the catalog name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr "<literal>catalog</literal> ï¼ãªãã·ã§ã³ï¼ï¼ã«ã¼ãã® <literal><hibernate-mapping></literal> è¦ç´ ã§æå®ãããã«ã¿ãã°åããªã¼ãã¼ã©ã¤ããã¾ãã"
+
+#: index.docbook:252
+msgid "<literal>proxy</literal> (optional): Specifies an interface to use for lazy initializing proxies. You may specify the name of the class itself."
+msgstr "<literal>proxy</literal> ï¼ãªãã·ã§ã³ï¼ï¼é
延åæåãããã·ã«ä½¿ãã¤ã³ã¿ã¼ãã§ã¤ã¹ãæå®ãã¾ãã æ°¸ç¶åããã¯ã©ã¹åãã®ãã®ãæå®ãããã¨ãå¯è½ã§ãã"
+
+#: index.docbook:258
+msgid "<literal>dynamic-update</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>UPDATE</literal> SQL should be generated at runtime and contain only those columns whose values have changed."
+msgstr "<literal>dynamic-update</literal> ï¼ãªãã·ã§ã³ã ããã©ã«ã㯠<literal>false</literal> ï¼ï¼ å¤ãå¤æ´ãããã«ã©ã ã ããå«ãSQLã® <literal>UPDATE</literal> æããå®è¡æã«çæãããã¨ãæå®ãã¾ãã"
+
+#: index.docbook:265
+msgid "<literal>dynamic-insert</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>INSERT</literal> SQL should be generated at runtime and contain only the columns whose values are not null."
+msgstr "<literal>dynamic-insert</literal> ï¼ãªãã·ã§ã³, ããã©ã«ã㯠<literal>false</literal> ï¼ï¼ å¤ãnullã§ã¯ãªãã«ã©ã ã ããå«ãSQLã® <literal>INSERT</literal> æããå®è¡æã«çæãããã¨ãæå®ãã¾ãã"
+
+#: index.docbook:272
+msgid "<literal>select-before-update</literal> (optional, defaults to <literal>false</literal>): Specifies that Hibernate should <emphasis>never</emphasis> perform an SQL <literal>UPDATE</literal> unless it is certain that an object is actually modified. In certain cases (actually, only when a transient object has been associated with a new session using <literal>update()</literal>), this means that Hibernate will perform an extra SQL <literal>SELECT</literal> to determine if an <literal>UPDATE</literal> is actually required."
+msgstr "<literal>select-before-update</literal> (ãªãã·ã§ã³, ããã©ã«ã㯠<literal>false</literal>): ãªãã¸ã§ã¯ããå¤æ´ãããã®ã確å®ã§ãªããªãã°ãHibernateãSQLã® <literal>UPDATE</literal> ã <emphasis>決ãã¦å®è¡ããªã</emphasis> ãã¨ãæå®ãã¾ãã ããç¹å®ã®å ´å(å®éçã«ã¯ãä¸æãªãã¸ã§ã¯ãã <literal>update()</literal> ã使ãã æ°ããã»ãã·ã§ã³ã¨é¢é£ä»ããããæã ã)ã<literal>UPDATE</literal> ãå®éã«å¿
è¦ãã©ããã決å®ããããã«ã Hibernateãä½åãªSQLã® <literal>SELECT</literal> æãå®è¡ãããã¨ãæå³ãã¾ãã"
+
+#: index.docbook:282
+msgid "<literal>polymorphism</literal> (optional, defaults to <literal>implicit</literal>): Determines whether implicit or explicit query polymorphism is used."
+msgstr "(optional, ããã©ã«ãã§ã¯ <literal>implicit</literal> ): implicitï¼æé»ï¼ãexplicitï¼æ示ï¼ã®ã ã©ã¡ãã®ã¯ã¨ãªããªã¢ã¼ãã£ãºã ã使ãã決å®ãã¾ãã"
+
+#: index.docbook:288
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving objects of this class"
+msgstr "<literal>where</literal> ï¼ãªãã·ã§ã³ï¼ï¼ ãã®ã¯ã©ã¹ã®ãªãã¸ã§ã¯ããæ¤ç´¢ããã¨ãã«ä½¿ç¨ãããä»»æã®SQLã® <literal>WHERE</literal> æ¡ä»¶ãæå®ãã¾ãã"
+
+#: index.docbook:294
+msgid "<literal>persister</literal> (optional): Specifies a custom <literal>ClassPersister</literal>."
+msgstr "<literal>persister</literal> ï¼ãªãã·ã§ã³ï¼ï¼ã«ã¹ã¿ã <literal>ClassPersister</literal> ãæå®ãã¾ãã"
+
+#: index.docbook:299
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for fetching instances of this class by identifier."
+msgstr "<literal>batch-size</literal> ï¼ãªãã·ã§ã³, ããã©ã«ã㯠<literal>1</literal> ï¼ï¼ èå¥åã§ãã®ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã復å
ããã¨ãã®ãããããµã¤ãºããæå®ãã¾ãã"
+
+#: index.docbook:305
+msgid "<literal>optimistic-lock</literal> (optional, defaults to <literal>version</literal>): Determines the optimistic locking strategy."
+msgstr "<literal>optimistic-lock</literal> ï¼ãªãã·ã§ã³,ããã©ã«ã㯠<literal>version</literal> ï¼ï¼ 楽観ããã¯æ¦ç¥ã決å®ãã¾ãã"
+
+#: index.docbook:311
+msgid "<literal>lazy</literal> (optional): Lazy fetching may be completely disabled by setting <literal>lazy=\"false\"</literal>."
+msgstr "<literal>lazy</literal> ï¼ãªãã·ã§ã³ï¼ï¼ <literal>lazy=\"false\"</literal> ã¨è¨å®ãããã¨ã§ã é
延ãã§ãããã§ããªããªãã¾ãã"
+
+#: index.docbook:317
+msgid "<literal>entity-name</literal> (optional, defaults to the class name): Hibernate3 allows a class to be mapped multiple times (to different tables, potentially), and allows entity mappings that are represented by Maps or XML at the Java level. In these cases, you should provide an explicit arbitrary name for the entity. See <xref linkend=\"persistent-classes-dynamicmodels\"/> and <xref linkend=\"xml\"/> for more information."
+msgstr "<literal>entity-name</literal> ï¼ãªãã·ã§ã³ãããã©ã«ãã¯ã¯ã©ã¹åï¼ï¼ Hibernate3ã§ã¯ã¯ã©ã¹ãè¤æ°åãããã³ã°ã§ãï¼å ´åã«ãã£ã¦ã¯éããã¼ãã«ã«å¯¾ãã¦ãï¼ã Javaã¬ãã«ã§MapãXMLã§è¡¨ç¾ãããã¨ã³ãã£ãã£ãããã³ã°ãå¯è½ã§ãã ãããã®å ´åãã¨ã³ãã£ãã£ã«å¯¾ãã¦ä»»æã®ååããæ示çã«ä»ããªãã¦ã¯ãªãã¾ããã 詳ãã㯠<xref linkend=\"persistent-classes-dynamicmodels\"/> 㨠<xref linkend=\"xml\"/> ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:327
+msgid "<literal>check</literal> (optional): A SQL expression used to generate a multi-row <emphasis>check</emphasis> constraint for automatic schema generation."
+msgstr "<literal>check</literal> ï¼ãªãã·ã§ã³ï¼ï¼èªåçã«ã¹ãã¼ããçæããããã«ã è¤æ°è¡ã® <emphasis>check</emphasis> å¶ç´ãçæããSQLå¼ã"
+
+#: index.docbook:333
+msgid "<literal>rowid</literal> (optional): Hibernate can use so called ROWIDs on databases which support. E.g. on Oracle, Hibernate can use the <literal>rowid</literal> extra column for fast updates if you set this option to <literal>rowid</literal>. A ROWID is an implementation detail and represents the physical location of a stored tuple."
+msgstr "<literal>rowid</literal> ï¼ãªãã·ã§ã³ï¼ï¼Hibernateã¯ãããããµãã¼ããã¦ãããã¼ã¿ãã¼ã¹ã§ROWID㨠å¼ã°ãããã®ã使ããã¨ãã§ãã¾ãã ä¾ãã°Oracleã使ã£ã¦ããã¨ãããã®ãªãã·ã§ã³ã« <literal>rowid</literal> ãè¨å®ããã°ã Hiberanteã¯updateãé«éåããããã« <literal>rowid</literal> ã¨ããç¹å¥ãªã«ã©ã ã使ããã¨ãã§ãã¾ãã ROWIDã¯è©³ç´°ãªå®è£
ã§ãããä¿åãããã¿ãã«ã®ç©ççãªä½ç½®ã表ãã¦ãã¾ãã"
+
+#: index.docbook:341
+msgid "<literal>subselect</literal> (optional): Maps an immutable and read-only entity to a database subselect. Useful if you want to have a view instead of a base table, but don't. See below for more information."
+msgstr "<literal>subselect</literal> ï¼ãªãã·ã§ã³ï¼ï¼ä¸å¤ãã¤èªã¿åãå°ç¨ã§ããã¨ã³ãã£ãã£ã ãã¼ã¿ãã¼ã¹ã®å¯ååãï¼subselectï¼ã«ãããã³ã°ãã¾ãã ããå
ã®ãã¼ãã«ã®ä»£ããã«ãã¥ã¼ãæã¡ãããã°æç¨ã§ããã ããã§ãªãã®ãªãæç¨ã§ã¯ããã¾ããããã詳ããæ
å ±ã¯ä¸è¨ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:348
+msgid "<literal>abstract</literal> (optional): Used to mark abstract superclasses in <literal><union-subclass></literal> hierarchies."
+msgstr "<literal>abstract</literal> ï¼ãªãã·ã§ã³ï¼ï¼ <literal><union-subclass></literal> é層å
ã®æ½è±¡ã¹ã¼ãã¼ã¯ã©ã¹ã«ãã¼ã¯ããããã«ä½¿ãã¾ãã"
+
+#: index.docbook:356
+msgid "It is perfectly acceptable for the named persistent class to be an interface. You would then declare implementing classes of that interface using the <literal><subclass></literal> element. You may persist any <emphasis>static</emphasis> inner class. You should specify the class name using the standard form ie. <literal>eg.Foo$Bar</literal>."
+msgstr "æ°¸ç¶ã¯ã©ã¹ã®ååã«ã¤ã³ã¿ã¼ãã§ã¤ã¹ãæå®ãã¦ãã¾ã£ããåé¡ããã¾ããã ãã®ã¨ã㯠<literal><subclass></literal> è¦ç´ ã使ã£ã¦ã ãã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ããã¯ã©ã¹ãå®ç¾©ãã¦ãã ããã <emphasis>static</emphasis> ãªå
é¨ã¯ã©ã¹ã§ãæ°¸ç¶åã§ãã¾ãã ãã®ã¨ãã¯æ¨æºå½¢å¼ãä¾ãã° <literal>eg.Foo$Bar</literal> ã使ã£ã¦ã¯ã©ã¹åãæå®ãã¦ãã ããã"
+
+#: index.docbook:363
+msgid "Immutable classes, <literal>mutable=\"false\"</literal>, may not be updated or deleted by the application. This allows Hibernate to make some minor performance optimizations."
+msgstr "<literal>mutable=\"false\"</literal> æå®ãããä¸å¤ã¯ã©ã¹ã¯ã ã¢ããªã±ã¼ã·ã§ã³ã«ããæ´æ°ãåé¤ãåºæ¥ãªããã¨ãããã¾ãã ããã«ãããHibernateãããã©ã¼ãã³ã¹ãå°ãæ¹åãã¾ãã"
+
+#: index.docbook:368
+msgid "The optional <literal>proxy</literal> attribute enables lazy initialization of persistent instances of the class. Hibernate will initially return CGLIB proxies which implement the named interface. The actual persistent object will be loaded when a method of the proxy is invoked. See \"Initializing collections and proxies\" below."
+msgstr "ãªãã·ã§ã³ã® <literal>proxy</literal> å±æ§ã«ãããã¯ã©ã¹ã®æ°¸ç¶ã¤ã³ã¹ã¿ã³ã¹ã®é
延åæåãå¯è½ã«ãªãã¾ãã Hibernateã¯æåã«ãæå®ããã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ããCGLIBãããã·ãè¿ãã¾ãã å®éã®æ°¸ç¶ãªãã¸ã§ã¯ãã¯ãããã·ã®ã¡ã½ãããå¼ã³åºãã¨ãã«ãã¼ããã¾ãã 以ä¸ã®ãé
延åæåã®ããã®ãããã·ããåç
§ãã¦ãã ããã"
+
+#: index.docbook:375
+msgid "<emphasis>Implicit</emphasis> polymorphism means that instances of the class will be returned by a query that names any superclass or implemented interface or the class and that instances of any subclass of the class will be returned by a query that names the class itself. <emphasis>Explicit</emphasis> polymorphism means that class instances will be returned only by queries that explicitly name that class and that queries that name the class will return only instances of subclasses mapped inside this <literal><class></literal> declaration as a <literal><subclass></literal> or <literal><joined-subclass></literal>. For most purposes the default, <literal>polymorphism=\"implicit\"</literal>, is appropriate. Explicit polymorphism is useful when two different classes are mapped to the same table (this allows a \"lightweight\" class that contains a subset of the table columns)."
+msgstr "<emphasis>æé»ç</emphasis> ããªã¢ã¼ãã£ãºã ã¨ã¯ã次ã®äºã¤ãæå³ãã¦ãã¾ãã ä¸ã¤ã¯ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ããã¹ã¼ãã¼ã¯ã©ã¹ãå®è£
ããã¤ã³ã¿ã¼ãã§ã¤ã¹ãã¾ããã®ã¯ã©ã¹ãæå®ããã¯ã¨ãªã«ãã£ã¦è¿ããããã¨ã§ã ããä¸ã¤ã¯ãã®ã¯ã©ã¹ã®ãµãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãããã®ã¯ã©ã¹èªèº«ãæå®ããã¯ã¨ãªã«ãã£ã¦è¿ããããã¨ã§ãã ã¾ãã<emphasis>æ示ç</emphasis> ããªã¢ã¼ãã£ãºã ã¨ã¯ã次ã®äºã¤ãæå³ãã¦ãã¾ãã ä¸ã¤ã¯ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãããã®ã¯ã©ã¹ãæ示çã«æå®ããã¯ã¨ãªã«ãã£ã¦ã®ã¿è¿ããããã¨ã§ã ããä¸ã¤ã¯ã¯ã©ã¹ãæå®ããã¯ã¨ãªãã<literal><class></literal> è¦ç´ ã®ä¸ã§ <literal><subclass></literal> ã <literal><joined-subclass></literal> ã¨ãããã³ã°ããã¦ãããµãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã ããè¿ããã!
¨ã§ãã ã»ã¨ãã©ã®ç¨éã§ã¯ããã©ã«ãã® <literal>polymorphism=\"implicit\"</literal> ãé©åã§ãã æ示çãªããªã¢ã¼ãã£ãºã ã¯ã2ã¤ã®éã£ãã¯ã©ã¹ãåããã¼ãã«ã«ãããã³ã°ããã¦ããã¨ãã«æç¨ã§ã ï¼ããã«ãã£ã¦ãã¼ãã«ã«ã©ã ã®ãµãã»ãããå«ããã軽éãªãã¯ã©ã¹ãå¯è½ã«ãªãã¾ãï¼ã"
+
+#: index.docbook:387
+msgid "The <literal>persister</literal> attribute lets you customize the persistence strategy used for the class. You may, for example, specify your own subclass of <literal>org.hibernate.persister.EntityPersister</literal> or you might even provide a completely new implementation of the interface <literal>org.hibernate.persister.ClassPersister</literal> that implements persistence via, for example, stored procedure calls, serialization to flat files or LDAP. See <literal>org.hibernate.test.CustomPersister</literal> for a simple example (of \"persistence\" to a <literal>Hashtable</literal>)."
+msgstr "<literal>persister</literal> å±æ§ãæå®ãããã¨ã§ãã¯ã©ã¹ã®æ°¸ç¶åæ¦ç¥ãã«ã¹ã¿ãã¤ãºã§ãã¾ãã ä¾ãã° <literal>org.hibernate.persister.EntityPersister</literal> èªèº«ã®ãµãã¯ã©ã¹ãæå®ãããã ã¾ãä¾ãã°ã¹ãã¢ãããã·ã¼ã¸ã£ã³ã¼ã«ããã©ãããã¡ã¤ã«ã¸ã·ãªã¢ã©ã¤ãºã LDAPãªã©ãéããæ°¸ç¶æ§ãå®è£
ãã <literal>org.hibernate.persister.ClassPersister</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®å®å
¨ã«æ°ããå®è£
ãæä¾ã§ãã¾ããç°¡åãªä¾ã¨ã㦠<literal>org.hibernate.test.CustomPersister</literal> ãè¦ã¦ãã ããï¼ãã㯠<literal>Hashtable</literal> ã®ãæ°¸ç¶åãã§ãï¼ã"
+
+#: index.docbook:398
+msgid "Note that the <literal>dynamic-update</literal> and <literal>dynamic-insert</literal> settings are not inherited by subclasses and so may also be specified on the <literal><subclass></literal> or <literal><joined-subclass></literal> elements. These settings may increase performance in some cases, but might actually decrease performance in others. Use judiciously."
+msgstr "<literal>dynamic-update</literal> 㨠<literal>dynamic-insert</literal> ã®è¨å®ã¯ãµãã¯ã©ã¹ã«ç¶æ¿ããã¾ããã ãã®ãã <literal><subclass></literal> ã <literal><joined-subclass></literal> è¦ç´ ãæå®ãããã¨ãåºæ¥ã¾ãã ãããã®è¨å®ã¯ããã©ã¼ãã³ã¹ãåä¸ãããäºãããã¾ãããè½ã¨ããã¨ãããã¾ãã®ã§ãæ
éã«ä½¿ç¨ãã¦ãã ããã"
+
+#: index.docbook:406
+msgid "Use of <literal>select-before-update</literal> will usually decrease performance. It is very useful to prevent a database update trigger being called unnecessarily if you reattach a graph of detached instances to a <literal>Session</literal>."
+msgstr "<literal>select-before-update</literal> ã®ä½¿ç¨ã¯é常ããã©ã¼ãã³ã¹ãè½ã¨ãã¾ãã ãã <literal>Session</literal> ã¸åé¢ã¤ã³ã¹ã¿ã³ã¹ã®ã°ã©ããå追å ãããªãã ãã¼ã¿ãã¼ã¹æ´æ°ã®ããªã¬ãä¸å¿
è¦ã«å¼ã³åºãã®ãé¿ããã¨ããç¹ã§ãé常ã«æç¨ã§ãã"
+
+#: index.docbook:412
+msgid "If you enable <literal>dynamic-update</literal>, you will have a choice of optimistic locking strategies:"
+msgstr "<literal>dynamic-update</literal> ãæå¹ã«ããã°ã楽観ããã¯æ¦ç¥ãé¸ã¶ãã¨ã«ãªãã¾ãã"
+
+#: index.docbook:418
+msgid "<literal>version</literal> check the version/timestamp columns"
+msgstr "<literal>version</literal> ãã¼ã¸ã§ã³/ã¿ã¤ã ã¹ã¿ã³ãã«ã©ã ããã§ãã¯ãã¾ã"
+
+#: index.docbook:423
+msgid "<literal>all</literal> check all columns"
+msgstr "<literal>all</literal> ãã¹ã¦ã®ã«ã©ã ããã§ãã¯ãã¾ãã"
+
+#: index.docbook:428
+msgid "<literal>dirty</literal> check the changed columns, allowing some concurrent updates"
+msgstr "<literal>dirty</literal> å¤æ´ããã«ã©ã ããã§ãã¯ããåææ´æ°ã§ããããã«ãã¾ãã"
+
+#: index.docbook:433
+msgid "<literal>none</literal> do not use optimistic locking"
+msgstr "<literal>none</literal> 楽観ããã¯ã使ç¨ãã¾ãã"
+
+#: index.docbook:438
+msgid "We <emphasis>very</emphasis> strongly recommend that you use version/timestamp columns for optimistic locking with Hibernate. This is the optimal strategy with respect to performance and is the only strategy that correctly handles modifications made to detached instances (ie. when <literal>Session.merge()</literal> is used)."
+msgstr "Hibernateã§æ¥½è¦³çããã¯æ¦ç¥ã使ããªãããã¼ã¸ã§ã³/ã¿ã¤ã ã¹ã¿ã³ãã«ã©ã ã使ããã¨ã <emphasis> é常ã«</emphasis> å¼·ããå§ããã¾ãã 楽観çããã¯ã¯ããã©ã¼ãã³ã¹ã®è¦³ç¹ãããæé©ã§ãããããã«åé¢ã¤ã³ã¹ã¿ã³ã¹ã¸ã®ä¿®æ£ ï¼ã¤ã¾ã <literal>Session.marge()</literal> ã使ãããã¨ãï¼ ãæ£ç¢ºã«æ±ããã¨ã®ã§ããå¯ä¸ã®æ¦ç¥ã§ãããã¾ãã"
+
+#: index.docbook:445
+msgid "There is no difference between a view and a base table for a Hibernate mapping, as expected this is transparent at the database level (note that some DBMS don't support views properly, especially with updates). Sometimes you want to use a view, but can't create one in the database (ie. with a legacy schema). In this case, you can map an immutable and read-only entity to a given SQL subselect expression:"
+msgstr "Hibernateã®ãããã³ã°ã«ã¨ã£ã¦ãã¥ã¼ã¨æ®éã®ãã¼ãã«ã®éã«éãã¯ãªãã ãã¼ã¿ãã¼ã¹ã¬ãã«ã§ã¯ééçã§ã ï¼ãã ããã¥ã¼ãå®å
¨ã«ã¯ãµãã¼ããã¦ããªãDBMSãããã¾ãã ç¹ã«ãæ´æ°ã®ãããã¥ã¼ã«å¯¾ãã¦ã¯ããã§ãï¼ã ãã¥ã¼ã使ãããã¦ãããã¼ã¿ãã¼ã¹ã§ä½æã§ããªããã¨ãããã¾ã ï¼ä¾ãã°ãã¬ã¬ã·ã¼ã¹ãã¼ãã®å ´åï¼ã ãã®å ´åã«ã¯ãä¸å¤ãã¤èªã¿åãå°ç¨ã®ã¨ã³ãã£ãã£ã«ä¸ããããSQLã®å¯ååãæããããã§ãã¾ãã"
+
+#: index.docbook:453
+msgid ""
+ "<![CDATA[<class name=\"Summary\">\n"
+ " <subselect>\n"
+ " select item.name, max(bid.amount), count(*)\n"
+ " from item\n"
+ " join bid on bid.item_id = item.id\n"
+ " group by item.name\n"
+ " </subselect>\n"
+ " <synchronize table=\"item\"/>\n"
+ " <synchronize table=\"bid\"/>\n"
+ " <id name=\"name\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Summary\">
+\n"
+ " <subselect>
+\n"
+ " select item.name, max(bid.amount), count(*)
+\n"
+ " from item
+\n"
+ " join bid on bid.item_id = item.id
+\n"
+ " group by item.name
+\n"
+ " </subselect>
+\n"
+ " <synchronize table=\"item\"/>
+\n"
+ " <synchronize table=\"bid\"/>
+\n"
+ " <id name=\"name\"/>
+\n"
+ " ...
+\n"
+ "</class>]]>"
+
+#: index.docbook:455
+msgid "Declare the tables to synchronize this entity with, ensuring that auto-flush happens correctly, and that queries against the derived entity do not return stale data. The <literal><subselect></literal> is available as both as an attribute and a nested mapping element."
+msgstr "ãã¼ãã«ããã®ã¨ã³ãã£ãã£ã¨åæããããã«å®ç¾©ãã¦ãã ããã ãªã¼ããã©ãã·ã¥ã確å®ã«èµ·ããããã«ãã¾ãå°åºã¨ã³ãã£ãã£ã«å¯¾ããã¯ã¨ãªãå¤ããã¼ã¿ã è¿ããªãããã«ããããã§ãã <literal><subselect></literal> ã¯å±æ§ã¨ãã¹ããããããã³ã°å±æ§ã®ã©ã¡ãã§ãå©ç¨ã§ãã¾ãã"
+
+#: index.docbook:465
+msgid "<title>id</title>"
+msgstr "<title>id</title>"
+
+#: index.docbook:467
+msgid "Mapped classes <emphasis>must</emphasis> declare the primary key column of the database table. Most classes will also have a JavaBeans-style property holding the unique identifier of an instance. The <literal><id></literal> element defines the mapping from that property to the primary key column."
+msgstr "ããããããã¯ã©ã¹ã¯ãã¼ã¿ãã¼ã¹ãã¼ãã«ã®ä¸»ãã¼ã«ã©ã ãå®ç¾© <emphasis>ããªããã°ãªãã¾ãã</emphasis> ã ã»ã¨ãã©ã®ã¯ã©ã¹ã«ã¯ã¤ã³ã¹ã¿ã³ã¹ã®ã¦ãã¼ã¯ãªèå¥åãä¿æããJavaBeansã¹ã¿ã¤ã«ã®ããããã£ãããã¾ãã <literal><id></literal> è¦ç´ ã¯ããã®ããããã£ãã主ãã¼ã«ã©ã ã¸ã®ãããã³ã°ãå®ç¾©ãã¾ãã"
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[<id\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " column=\"column_name\"\n"
+ " unsaved-value=\"null|any|none|undefined|id_value\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "\n"
+ " <generator class=\"generatorClass\"/>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id
+\n"
+ " name=\"propertyName\"
+\n"
+ " type=\"typename\"
+\n"
+ " column=\"column_name\"
+\n"
+ " unsaved-value=\"null|any|none|undefined|id_value\"
+\n"
+ " access=\"field|property|ClassName\">
+\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"
+\n"
+ "
+\n"
+ " <generator class=\"generatorClass\"/>
+\n"
+ "</id>]]>"
+
+#: index.docbook:485
+msgid "<literal>name</literal> (optional): The name of the identifier property."
+msgstr "<literal>name</literal>ï¼ãªãã·ã§ã³ï¼ï¼èå¥åããããã£ã®ååã"
+
+#: index.docbook:490
+msgid "<literal>type</literal> (optional): A name that indicates the Hibernate type."
+msgstr "<literal>type</literal>ï¼ãªãã·ã§ã³ï¼ï¼Hibernateã®åã示ãååã"
+
+#: index.docbook:495
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the primary key column."
+msgstr "<literal>column</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ãã¯ããããã£åï¼ï¼ 主ãã¼ã«ã©ã ã®ååã"
+
+#: index.docbook:501
+msgid "<literal>unsaved-value</literal> (optional - defaults to a \"sensible\" value): An identifier property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session."
+msgstr "<literal>unsaved-value</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ãã®å¤ã¯sensibleï¼ï¼ ã¤ã³ã¹ã¿ã³ã¹ãæ°ããã¤ã³ã¹ã¿ã³ã¹åããã ï¼ã»ã¼ãããã¦ããªãï¼ãã¨ã示ããèå¥åããããã£ã®å¤ã 以åã®Sessionã§ã»ã¼ãã¾ãã¯ãã¼ããããä¸æçã¤ã³ã¹ã¿ã³ã¹ã¨åºå¥ãããã㫠使ãã¾ãã"
+
+#: index.docbook:509, index.docbook:1017, index.docbook:1156, index.docbook:1238, index.docbook:1345, index.docbook:1534, index.docbook:1708, index.docbook:1878, index.docbook:2457
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the property value."
+msgstr "<literal>access</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal> ï¼ï¼ ããããã£ã®å¤ã¸ã¢ã¯ã»ã¹ããããã«Hibernateã使ãæ¦ç¥ã§ãã"
+
+#: index.docbook:517
+msgid "If the <literal>name</literal> attribute is missing, it is assumed that the class has no identifier property."
+msgstr "<literal>name</literal> å±æ§ããªããã°ãã¯ã©ã¹ã«ã¯èå¥åããããã£ããªããã®ã¨ã¿ãªããã¾ãã"
+
+#: index.docbook:522
+msgid "The <literal>unsaved-value</literal> attribute is almost never needed in Hibernate3."
+msgstr "<literal>unsaved-value</literal> å±æ§ã¯Hibernate3ã§ã¯ã»ã¨ãã©ã®å ´åãå¿
è¦ã§ã¯ããã¾ããã"
+
+#: index.docbook:526
+msgid "There is an alternative <literal><composite-id></literal> declaration to allow access to legacy data with composite keys. We strongly discourage its use for anything else."
+msgstr "è¤åãã¼ãæã¤ã¬ã¬ã·ã¼ãã¼ã¿ã«ã¢ã¯ã»ã¹ã§ããããã«ã <literal><composite-id></literal> ã¨ãã代æ¿ã®ãããã³ã°å®ç¾©ãããã¾ãã ãããä»ã®ç¨éã¸ã®ä½¿ç¨ã¯å
¨ãããããã§ãã¾ããã"
+
+#: index.docbook:532
+msgid "Generator"
+msgstr "ã¸ã§ãã¬ã¼ã¿"
+
+#: index.docbook:534
+msgid "The optional <literal><generator></literal> child element names a Java class used to generate unique identifiers for instances of the persistent class. If any parameters are required to configure or initialize the generator instance, they are passed using the <literal><param></literal> element."
+msgstr "ãªãã·ã§ã³ã® <literal><generator></literal> åè¦ç´ ã¯ã æ°¸ç¶ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã®ã¦ãã¼ã¯ãªèå¥åãçæããããã«ä½¿ããJavaã¯ã©ã¹ãæå®ãã¾ãã ã¸ã§ãã¬ã¼ã¿ã¤ã³ã¹ã¿ã³ã¹ã®è¨å®ããããã¯åæåã«ãã©ã¡ã¼ã¿ãå¿
è¦ã§ããã°ã<literal><param></literal> è¦ç´ ã使ã£ã¦æ¸¡ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:541
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"org.hibernate.id.TableHiLoGenerator\">\n"
+ " <param name=\"table\">uid_table</param>\n"
+ " <param name=\"column\">next_hi_value_column</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">
+\n"
+ " <generator class=\"org.hibernate.id.TableHiLoGenerator\">
+\n"
+ " <param name=\"table\">uid_table</param>
+\n"
+ " <param name=\"column\">next_hi_value_column</param>
+\n"
+ " </generator>
+\n"
+ "</id>]]>"
+
+#: index.docbook:543
+msgid "All generators implement the interface <literal>org.hibernate.id.IdentifierGenerator</literal>. This is a very simple interface; some applications may choose to provide their own specialized implementations. However, Hibernate provides a range of built-in implementations. There are shortcut names for the built-in generators:"
+msgstr "ãã¹ã¦ã®ã¸ã§ãã¬ã¼ã¿ã¯ãã¤ã³ã¿ã¼ãã§ã¤ã¹ <literal>org.hibernate.id.IdentifierGenerator</literal> ãå®è£
ãã¾ãã ããã¯ã¨ã¦ãåç´ãªã¤ã³ã¿ã¼ãã§ã¤ã¹ãªã®ã§ãç¹å¥ãªå®è£
ãç¬èªã«ç¨æããã¢ããªã±ã¼ã·ã§ã³ãããããããã¾ããã ãããHibernateã¯çµã¿è¾¼ã¿ã®å®è£
ãããã¤ãç¨æãã¦ãã¾ãã çµã¿è¾¼ã¿ã®ã¸ã§ãã¬ã¼ã¿ã«ã¯ä»¥ä¸ã®ã·ã§ã¼ãã«ããåãããã¾ãï¼"
+
+#: index.docbook:551
+msgid "increment"
+msgstr "increment"
+
+#: index.docbook:553
+msgid "generates identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal> that are unique only when no other process is inserting data into the same table. <emphasis>Do not use in a cluster.</emphasis>"
+msgstr "<literal>long</literal> , <literal>short</literal> , <literal>int</literal> åã®èå¥åãçæãã¾ãã ãããã¯ä»ã®ããã»ã¹ãåããã¼ãã«ã«ãã¼ã¿ãæ¿å
¥ããªãã¨ãã ãã¦ãã¼ã¯ã§ãã <emphasis>ã¯ã©ã¹ã¿å
ã§ã¯ä½¿ããªãã§ãã ãã</emphasis> ã"
+
+#: index.docbook:562
+msgid "identity"
+msgstr "identity"
+
+#: index.docbook:564
+msgid "supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>."
+msgstr "DB2, MySQL, MS SQL Server, Sybase, HypersonicSQLã®èå¥åã«ã©ã ã ãµãã¼ããã¾ãã è¿ãããèå¥åã®å㯠<literal>long</literal> , <literal>short</literal> , <literal>int</literal> ã®ããããã§ãã"
+
+#: index.docbook:572
+msgid "sequence"
+msgstr "sequence"
+
+#: index.docbook:574
+msgid "uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>"
+msgstr "DB2, PostgreSQL, Oracle, SAP DB, McKoiã®ã·ã¼ã±ã³ã¹ããInterbaseã®ã¸ã§ãã¬ã¼ã¿ã使ç¨ãã¾ãã è¿ãããèå¥åã®å㯠<literal>long</literal> , <literal>short</literal> , <literal>int</literal> ã®ããããã§ãã"
+
+#: index.docbook:582
+msgid "hilo"
+msgstr "hilo"
+
+#: index.docbook:584
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a table and column (by default <literal>hibernate_unique_key</literal> and <literal>next_hi</literal> respectively) as a source of hi values. The hi/lo algorithm generates identifiers that are unique only for a particular database."
+msgstr "<literal>long</literal> , <literal>short</literal> , <literal>int</literal> åã®èå¥åãå¹ççã«çæããhi/loã¢ã«ã´ãªãºã ã使ãã¾ãã hiå¤ã®ã½ã¼ã¹ã¨ãã¦ããã¼ãã«ã¨ã«ã©ã ãä¸ãã¾ã(ããã©ã«ãã§ã¯ãããã <literal>hibernate_unique_key</literal> 㨠<literal>next_hi</literal> )ã hi/loã¢ã«ã´ãªãºã ã¯ç¹å®ã®ãã¼ã¿ãã¼ã¹ã«å¯¾ãã¦ã®ã¿ã¦ãã¼ã¯ãªèå¥åãçæãã¾ãã"
+
+#: index.docbook:594
+msgid "seqhilo"
+msgstr "seqhilo"
+
+#: index.docbook:596
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a named database sequence."
+msgstr "<literal>long</literal> , <literal>short</literal> , <literal>int</literal> åã®èå¥åãå¹ççã«çæããhi/loã¢ã«ã´ãªãºã ã使ãã¾ãã æå®ããããã¼ã¿ãã¼ã¹ã·ã¼ã±ã³ã¹ãä¸ãã¾ãã"
+
+#: index.docbook:604
+msgid "uuid"
+msgstr "uuid"
+
+#: index.docbook:606
+msgid "uses a 128-bit UUID algorithm to generate identifiers of type string, unique within a network (the IP address is used). The UUID is encoded as a string of hexadecimal digits of length 32."
+msgstr "(IPã¢ãã¬ã¹ã使ç¨ããã)ãããã¯ã¼ã¯å
ã§ã¦ãã¼ã¯ãªæåååã®èå¥åãçæããããã«ã 128ãããã®UUIDã¢ã«ã´ãªãºã ã使ç¨ãã¾ããUUIDã¯é·ã32ã®16é²æ°åã®æååã¨ãã¦ã¨ã³ã³ã¼ãããã¾ãã"
+
+#: index.docbook:614
+msgid "guid"
+msgstr "guid"
+
+#: index.docbook:616
+msgid "uses a database-generated GUID string on MS SQL Server and MySQL."
+msgstr "MS SQLãµã¼ãã¨MySQLã§ãã¼ã¿ãã¼ã¹ãçæããGUIDæååã使ç¨ãã¾ãã"
+
+#: index.docbook:622
+msgid "native"
+msgstr "native"
+
+#: index.docbook:624
+msgid "picks <literal>identity</literal>, <literal>sequence</literal> or <literal>hilo</literal> depending upon the capabilities of the underlying database."
+msgstr "使ç¨ãããã¼ã¿ãã¼ã¹ã®æ§è½ã«ãã <literal>identity</literal> , <literal>sequence</literal> , <literal>hilo</literal> ã®ãããããé¸ã°ãã¾ãã"
+
+#: index.docbook:632
+msgid "assigned"
+msgstr "assigned"
+
+#: index.docbook:634
+msgid "lets the application to assign an identifier to the object before <literal>save()</literal> is called. This is the default strategy if no <literal><generator></literal> element is specified."
+msgstr "<literal>save()</literal> ãå¼ã°ããåã«ã ã¢ããªã±ã¼ã·ã§ã³ããªãã¸ã§ã¯ãã«èå¥åã代å
¥ã§ããããã«ãã¾ãã <literal><generator></literal> ãæå®ããã¦ããªããã°ããããããã©ã«ãã®æ¦ç¥ã«ãªãã¾ãã"
+
+#: index.docbook:642
+msgid "select"
+msgstr "select"
+
+#: index.docbook:644
+msgid "retrieves a primary key assigned by a database trigger by selecting the row by some unique key and retrieving the primary key value."
+msgstr "ããã¦ãã¼ã¯ãã¼ã«ããè¡ã®é¸æã¨ä¸»ãã¼ã®å¤ã®å¾©å
ã«ããã ãã¼ã¿ãã¼ã¹ããªã¬ãå²ãå½ã¦ã主ãã¼ãåå¾ãã¾ãã"
+
+#: index.docbook:651
+msgid "foreign"
+msgstr "foreign"
+
+#: index.docbook:653
+msgid "uses the identifier of another associated object. Usually used in conjunction with a <literal><one-to-one></literal> primary key association."
+msgstr "ä»ã®é¢é£ãªãã¸ã§ã¯ãã®èå¥åã使ãã¾ãã æ®éã¯ã<literal><one-to-one></literal> 主ãã¼é¢é£ã¨çµã¿åããã¦ä½¿ãã¾ãã"
+
+#: index.docbook:660
+msgid "sequence-identity"
+msgstr "Hi/lo ã¢ã«ã´ãªãºã "
+
+#: index.docbook:662
+msgid "a specialized sequence generation strategy which utilizes a database sequence for the actual value generation, but combines this with JDBC3 getGeneratedKeys to actually return the generated identifier value as part of the insert statement execution. This strategy is only known to be supported on Oracle 10g drivers targetted for JDK 1.4. Note comments on these insert statements are disabled due to a bug in the Oracle drivers."
+msgstr "<literal>hilo</literal> 㨠<literal>seqhilo</literal> ã¸ã§ãã¬ã¼ã¿ã¯ã èå¥åçæã®ä»£è¡¨çãªã¢ããã¼ãã§ããhi/loã¢ã«ã´ãªãºã ã®2ã¤ã®ä»£æ¿å®è£
ãæä¾ãã¾ãã 1çªç®ã®å®è£
ã¯ã次åã«å©ç¨ããã\"hi\"å¤ãä¿æãããç¹å¥ãªããã¼ã¿ãã¼ã¹ãã¼ãã«ã å¿
è¦ã¨ãã¾ãã 2çªç®ã®å®è£
ã¯ãOracleã¹ã¿ã¤ã«ã®ã·ã¼ã±ã³ã¹ã使ãã¾ãï¼ãµãã¼ãããã¦ããå ´åï¼ã"
+
+#: index.docbook:679
+msgid "Hi/lo algorithm"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">
+\n"
+ " <generator class=\"hilo\">
+\n"
+ " <param name=\"table\">hi_value</param>
+\n"
+ " <param name=\"column\">next_value</param>
+\n"
+ " <param name=\"max_lo\">100</param>
+\n"
+ " </generator>
+\n"
+ "</id>]]>"
+
+#: index.docbook:680
+msgid "The <literal>hilo</literal> and <literal>seqhilo</literal> generators provide two alternate implementations of the hi/lo algorithm, a favorite approach to identifier generation. The first implementation requires a \"special\" database table to hold the next available \"hi\" value. The second uses an Oracle-style sequence (where supported)."
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">
+\n"
+ " <generator class=\"seqhilo\">
+\n"
+ " <param name=\"sequence\">hi_value</param>
+\n"
+ " <param name=\"max_lo\">100</param>
+\n"
+ " </generator>
+\n"
+ "</id>]]>"
+
+#: index.docbook:687
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"hilo\">\n"
+ " <param name=\"table\">hi_value</param>\n"
+ " <param name=\"column\">next_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "æ®å¿µãªããHibernateã¸ã®ç¬èªã® <literal>Connection</literal> ãæä¾ããã¨ãã«ã¯ã<literal>hilo</literal> ã使ãã¾ããã HibernateãJTAã§ãªã¹ãããã¦ããæ¥ç¶ãåå¾ããããã«ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¼ã®ãã¼ã¿ã½ã¼ã¹ã使ç¨ãã¦ããã¨ãã«ã¯ã <literal>hibernate.transaction.manager_lookup_class</literal> ãé©åã«è¨å®ããªããã°ãªãã¾ããã"
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"seqhilo\">\n"
+ " <param name=\"sequence\">hi_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "UUID ã¢ã«ã´ãªãºã "
+
+#: index.docbook:691
+msgid "Unfortunately, you can't use <literal>hilo</literal> when supplying your own <literal>Connection</literal> to Hibernate. When Hibernate is using an application server datasource to obtain connections enlisted with JTA, you must properly configure the <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr "UUIDã«ã¯ä»¥ä¸ã®ãã®ãå«ã¾ãã¾ãï¼ IPã¢ãã¬ã¹ãJVMã®ã¹ã¿ã¼ãã¢ããã¿ã¤ã ï¼4åã®1ç§ã®æ£ç¢ºãï¼ã ã·ã¹ãã æéãï¼JVMã«å¯¾ãã¦ã¦ãã¼ã¯ãªï¼ã«ã¦ã³ã¿å¤ã Javaã³ã¼ãããMACã¢ãã¬ã¹ãã¡ã¢ãªã¢ãã¬ã¹ãåå¾ãããã¨ã¯ã§ããªãã®ã§ã JNIã使ããªãã¨ãã®æè¯ã®æ¹æ³ã§ãã"
+
+#: index.docbook:700
+msgid "UUID algorithm"
+msgstr "èå¥åã«ã©ã ã¨ã·ã¼ã±ã³ã¹"
+
+#: index.docbook:701
+msgid "The UUID contains: IP address, startup time of the JVM (accurate to a quarter second), system time and a counter value (unique within the JVM). It's not possible to obtain a MAC address or memory address from Java code, so this is the best we can do without using JNI."
+msgstr "èå¥åã«ã©ã ããµãã¼ããã¦ãããã¼ã¿ãã¼ã¹ï¼DB2, MySQL, Sybase, MS SQLï¼ã§ã¯ã <literal>identity</literal> ãã¼çæã使ãã¾ãã ã·ã¼ã±ã³ã¹ããµãã¼ããããã¼ã¿ãã¼ã¹ï¼DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DBï¼ã§ã¯ã <literal>sequence</literal> ã¹ã¿ã¤ã«ã®ãã¼çæã使ãã¾ãã ã©ã¡ãã®æ¦ç¥ããæ°ãããªãã¸ã§ã¯ããæ¿å
¥ããããã«ãSQLã¯ã¨ãªã2ã¤å¿
è¦ã¨ãã¾ãã"
+
+#: index.docbook:710
+msgid "Identity columns and sequences"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">
+\n"
+ " <generator class=\"sequence\">
+\n"
+ " <param name=\"sequence\">person_id_sequence</param>
+\n"
+ " </generator>
+\n"
+ "</id>]]>"
+
+#: index.docbook:711
+msgid "For databases which support identity columns (DB2, MySQL, Sybase, MS SQL), you may use <literal>identity</literal> key generation. For databases that support sequences (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) you may use <literal>sequence</literal> style key generation. Both these strategies require two SQL queries to insert a new object."
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0\">
+\n"
+ " <generator class=\"identity\"/>
+\n"
+ "</id>]]>"
+
+#: index.docbook:719
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">person_id_sequence</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "ã¯ãã¹ãã©ãããã©ã¼ã ã®éçºã§ã¯ã<literal>native</literal> æ¦ç¥ã¯ <literal>identity</literal> , <literal>sequence</literal> , <literal>hilo</literal> æ¦ç¥ã®ä¸ãã1ã¤ãé¸æãã¾ããã ããã¯ä½¿ç¨ãã¦ãããã¼ã¿ãã¼ã¹ã®è½åã«ä¾åãã¾ãã"
+
+#: index.docbook:721
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0\">\n"
+ " <generator class=\"identity\"/>\n"
+ "</id>]]>"
+msgstr "èå¥åã®å²ãå½ã¦"
+
+#: index.docbook:723
+msgid "For cross-platform development, the <literal>native</literal> strategy will choose from the <literal>identity</literal>, <literal>sequence</literal> and <literal>hilo</literal> strategies, dependant upon the capabilities of the underlying database."
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ã«èå¥åãå²ãå½ã¦ããããã®ã§ããã°(Hibernateãçæãããã®ã§ã¯ãªãï¼ã <literal>assigned</literal> ã¸ã§ãã¬ã¼ã¿ã使ããã¨ãã§ãã¾ãã ãã®ç¹å¥ãªã¸ã§ãã¬ã¼ã¿ã¯ããã§ã«ãªãã¸ã§ã¯ãã®èå¥åããããã£ã«ä»£å
¥ãããå¤ã èå¥åã«ä½¿ãã¾ãããã®ã¸ã§ãã¬ã¼ã¿ã¯ä¸»ãã¼ã代çãã¼ã®ä»£ããã«èªç¶ãã¼ã§ããå ´åã«ä½¿ç¨ãã¾ãã <literal><generator></literal> è¦ç´ ãæå®ããªãå ´åã®ããã©ã«ãã®åä½ã«ãªãã¾ãã"
+
+#: index.docbook:732
+msgid "Assigned identifiers"
+msgstr "<literal>assigned</literal> ã¸ã§ãã¬ã¼ã¿ãé¸æããã¨ã Hibernate㯠<literal>unsaved-value=\"undefined\"</literal> ã使ç¨ãã¾ãã ããã¦ããã¼ã¸ã§ã³ãã¿ã¤ã ã¹ã¿ã³ãã®ããããã£ããªãå ´åã <literal>Interceptor.isUnsaved()</literal> ãå®ç¾©ããªãã£ãå ´åã«ã¯ãã¤ã³ã¹ã¿ã³ã¹ãä¸æç(transient)ãªãã®ã§ããã®ãã ã¾ãã¯ã»ãã·ã§ã³ããåé¢(detached)ãããã®ãã©ããã決ããããã«ããã¼ã¿ãã¼ã¹ã調ã¹ã¾ãã"
+
+#: index.docbook:733
+msgid "If you want the application to assign identifiers (as opposed to having Hibernate generate them), you may use the <literal>assigned</literal> generator. This special generator will use the identifier value already assigned to the object's identifier property. This generator is used when the primary key is a natural key instead of a surrogate key. This is the default behavior if you do no specify a <literal><generator></literal> element."
+msgstr "ããªã¬ã«ããå²ãå½ã¦ããã主ãã¼"
+
+#: index.docbook:742
+msgid "Choosing the <literal>assigned</literal> generator makes Hibernate use <literal>unsaved-value=\"undefined\"</literal>, forcing Hibernate to go to the database to determine if an instance is transient or detached, unless there is a version or timestamp property, or you define <literal>Interceptor.isUnsaved()</literal>."
+msgstr "ã¬ã¬ã·ã¼ã¹ãã¼ãã®ããã«ã®ã¿æå®ãã¾ã(Hibernateã¯ããªã¬ã使ã£ã¦DDLãçæãã¾ãã)ã"
+
+#: index.docbook:752
+msgid "Primary keys assigned by triggers"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">
+\n"
+ " <generator class=\"select\">
+\n"
+ " <param name=\"key\">socialSecurityNumber</param>
+\n"
+ " </generator>
+\n"
+ "</id>]]>"
+
+#: index.docbook:753
+msgid "For legacy schemas only (Hibernate does not generate DDL with triggers)."
+msgstr "ä¸ã®ä¾ã®ä¸ã§ãã¯ã©ã¹ã§èªç¶ãã¼ã¨ãã¦å®ç¾©ããã <literal>socialSecurityNumber</literal> ã¨ããååã®ã¦ãã¼ã¯ãªå¤ã®ããããã£ã¨ã å¤ãããªã¬ã«ããçæããã <literal>person_id</literal> ã¨ããååã®ä»£çãã¼ãããã¾ãã"
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"select\">\n"
+ " <param name=\"key\">socialSecurityNumber</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr "composite-id"
+
+#: index.docbook:759
+msgid "In the above example, there is a unique valued property named <literal>socialSecurityNumber</literal> defined by the class, as a natural key, and a surrogate key named <literal>person_id</literal> whose value is generated by a trigger."
+msgstr ""
+ "<![CDATA[<composite-id
+\n"
+ " name=\"propertyName\"
+\n"
+ " class=\"ClassName\"
+\n"
+ " mapped=\"true|false\"
+\n"
+ " access=\"field|property|ClassName\">
+\n"
+ " node=\"element-name|.\"
+\n"
+ "
+\n"
+ " <key-property name=\"propertyName\" type=\"typename\" column=\"column_name\"/>
+\n"
+ " <key-many-to-one name=\"propertyName class=\"ClassName\" column=\"column_name\"/>
+\n"
+ " ......
+\n"
+ "</composite-id>]]>"
+
+#: index.docbook:771
+msgid "Enhanced identifier generators"
+msgstr "è¤åãã¼ã®ãããã¼ãã«ã«å¯¾ãã èå¥åããããã£ã¨ãã¦ã¯ã©ã¹ã®è¤æ°ã®ããããã£ããããã³ã°ãããã¨ãã§ãã¾ãã <literal><composite-id></literal> è¦ç´ ã¯ãåè¦ç´ ã¨ã㦠<literal><key-property></literal> ããããã£ãããã³ã°ã¨ <literal><key-many-to-one></literal> ãããã³ã°ãåãå
¥ãã¾ãã"
+
+#: index.docbook:773
+msgid "Starting with release 3.2.3, there are 2 new generators which represent a re-thinking of 2 different aspects of identifier generation. The first aspect is database portability; the second is optimization (not having to query the database for every request for a new identifier value). These two new generators are intended to take the place of some of the named generators described above (starting in 3.3.x); however, they are included in the current releases and can be referenced by FQN."
+msgstr ""
+ "<![CDATA[<composite-id>
+\n"
+ " <key-property name=\"medicareNumber\"/>
+\n"
+ " <key-property name=\"dependent\"/>
+\n"
+ "</composite-id>]]>"
+
+#: index.docbook:781
+msgid "The first of these new generators is <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> which is intended firstly as a replacement for the <literal>sequence</literal> generator and secondly as a better portability generator than <literal>native</literal> (because <literal>native</literal> (generally) chooses between <literal>identity</literal> and <literal>sequence</literal> which have largely different semantics which can cause subtle isssues in applications eyeing portability). <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> however achieves portability in a different manner. It chooses between using a table or a sequence in the database to store its incrementing values depending on the capabilities of the dialect being used. The difference between this and <literal>native</literal> is that table-based and sequence-based storage have the same exact semantic (in fact sequences are exactly what Hibernate tries to emmulate with its!
table-based generators). This generator has a number of configuration parameters:"
+msgstr "è¤åèå¥åã®ç価æ§ãå®è£
ããããã«ã¯ãæ°¸ç¶ã¯ã©ã¹ã <literal>equals()</literal> 㨠<literal>hashCode()</literal> ããªã¼ãã¼ã©ã¤ã <emphasis>ããªããã°ãªãã¾ãã</emphasis> ã ã¾ã <literal>Serializable</literal> ãå®è£
ããªããã°ããã¾ããã"
+
+#: index.docbook:795
+msgid "<literal>sequence_name</literal> (optional, defaults to <literal>hibernate_sequence</literal>): The name of the sequence (or table) to be used."
+msgstr "æ®å¿µãªããè¤åèå¥åã®ããã®ãã®æ¹æ³ã¯ã æ°¸ç¶ãªãã¸ã§ã¯ããèªèº«ã®èå¥åã§ãããã¨ãæå³ãã¦ãã¾ãã ãªãã¸ã§ã¯ãèªèº«ãèå¥åã¨ãã以ä¸ã®ä¾¿å©ãªãæ±ãæ¹ãã¯ããã¾ããã è¤åãã¼ã«é¢é£ããæ°¸ç¶ç¶æ
ã <literal>load()</literal> åºæ¥ãããã«ãªãåã«ã æ°¸ç¶ã¯ã©ã¹èªèº«ãã¤ã³ã¹ã¿ã³ã¹åããèå¥åããããã£ãè¨å®ããªããã°ãªãã¾ããã <emphasis> çµã¿è¾¼ã¿ã®</emphasis> è¤åèå¥åã¨å¼ã°ãããã®ã¢ããã¼ãã¯ã æ¬æ ¼çãªã¢ããªã±ã¼ã·ã§ã³ã«ã¯åãã¦ãã¾ããã"
+
+#: index.docbook:801
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the sequence/table. In sequence creation terms, this is analogous to the clause typical named \"STARTS WITH\"."
+msgstr "2ã¤ç®ã®æ¹æ³ã¯ <emphasis> ãããããã</emphasis> è¤åèå¥åã¨å¼ã°ãããã®ã§ã <literal><composite-id></literal>ã¨ã¬ã¡ã³ãå
ã§æå®ããèå¥ããããã£ã æ°¸ç¶ã¯ã©ã¹ã¨åé¢ããèå¥åã¯ã©ã¹ã®ä¸¡æ¹ã«éè¤ãã¦åå¨ãã¾ãã"
+
+#: index.docbook:808
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the sequence/table should differ. In sequence creation terms, this is analogous to the clause typical named \"INCREMENT BY\"."
+msgstr ""
+ "<![CDATA[<composite-id class=\"MedicareId\" mapped=\"true\">
+\n"
+ " <key-property name=\"medicareNumber\"/>
+\n"
+ " <key-property name=\"dependent\"/>
+\n"
+ "</composite-id>]]>"
+
+#: index.docbook:815
+msgid "<literal>force_table_use</literal> (optional, defaults to <literal>false</literal>): Should we force the use of a table as the backing structure even though the dialect might support sequence?"
+msgstr "ãã®ä¾ã§ã¯ãè¤åèå¥åã¯ã©ã¹ï¼ <literal>MedicareId</literal> ï¼ã¨ã¨ã³ãã£ãã£ã¯ã©ã¹èªèº«ã®ä¸¡æ¹ãã <literal>medicareNumber</literal> 㨠<literal>dependent</literal> ã¨ããååã®ããããã£ãæã¡ã¾ãã èå¥åã¯ã©ã¹ã¯ã<literal>equals()</literal> 㨠<literal>hashCode()</literal> ããªã¼ãã©ã¤ããã <literal>Serializable</literal> ãå®è£
ããªãã¦ã¯ãªãã¾ããã ãã®æ¹æ³ã«ã¯ãæããã«ã³ã¼ããéè¤ããã¨ããä¸é½åãããã¾ãã"
+
+#: index.docbook:822
+msgid "<literal>value_column</literal> (optional, defaults to <literal>next_val</literal>): Only relevant for table structures! The name of the column on the table which is used to hold the value."
+msgstr "次ã®å±æ§ã¯ãããã³ã°ããè¤åèå¥åãæå®ããããã«ä½¿ç¨ãã¾ãã"
+
+#: index.docbook:829
+msgid "<literal>optimizer</literal> (optional, defaults to <literal>none</literal>): See"
+msgstr "<literal>mapped</literal> (ãªãã·ã§ã³ãããã©ã«ã㯠<literal>false</literal> ): ãããã³ã°ããè¤åèå¥åã使ç¨ããããã¨ã¨ãå
å«ãããããããã£ã®ãããã³ã°ãã ã¨ã³ãã£ãã£ã¯ã©ã¹ã¨è¤åèå¥åã¯ã©ã¹ã®ä¸¡æ¹ãåç
§ãããã¨ã示ãã¾ãã"
+
+#: index.docbook:836
+msgid "The second of these new generators is <literal>org.hibernate.id.enhanced.TableGenerator</literal> which is intended firstly as a replacement for the <literal>table</literal> generator (although it actually functions much more like <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal>) and secondly as a re-implementation of <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal> utilizing the notion of pluggable optimiziers. Essentially this generator defines a table capable of holding a number of different increment values simultaneously by using multiple distinctly keyed rows. This generator has a number of configuration parameters:"
+msgstr "<literal>class</literal> (ãªãã·ã§ã³,ãã ããããã³ã°ããè¤åèå¥åã«ã¯å¿
é ): è¤åèå¥åã¨ãã¦ä½¿ç¨ããã¯ã©ã¹ã"
+
+#: index.docbook:846
+msgid "<literal>table_name</literal> (optional, defaults to <literal>hibernate_sequences</literal>): The name of the table to be used."
+msgstr "3ã¤ç®ã®ããã«ä¾¿å©ãªæ¹æ³ã¯ãè¤åèå¥åã<xref linkend=\"components-compositeid\"/>å
ã® ã³ã³ãã¼ãã³ãã¯ã©ã¹ã¨ãã¦å®è£
ãããã¨ã§ãã ä¸ã§è¨è¿°ãã¦ããå±æ§ã¯ããã®ä»£æ¿æ¹æ³ã«ã®ã¿é©ç¨ããã¾ãã"
+
+#: index.docbook:852
+msgid "<literal>value_column_name</literal> (optional, defaults to <literal>next_val</literal>): The name of the column on the table which is used to hold the value."
+msgstr "<literal>name</literal> (ãªãã·ã§ã³, ãã®ã¢ããã¼ãã§ã¯å¿
é ): è¤åèå¥åãä¿æããã³ã³ãã¼ãã³ãã¿ã¤ãã®ããããã£(9ç« ãåç
§ãã¦ãã ãã)."
+
+#: index.docbook:858
+msgid "<literal>segment_column_name</literal> (optional, defaults to <literal>sequence_name</literal>): The name of the column on the table which is used to hold the \"segement key\". This is the value which distinctly identifies which increment value to use."
+msgstr "<literal>access</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal> ): Hibernateãããããã£ã®å¤ã«ã¢ã¯ã»ã¹ããããã«ä½¿ç¨ãã¹ãæ¦ç¥ã"
+
+#: index.docbook:865
+msgid "<literal>segment_value</literal> (optional, defaults to <literal>default</literal>): The \"segment key\" value for the segment from which we want to pull increment values for this generator."
+msgstr "<literal>class</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ãã¯ãªãã¬ã¯ã·ã§ã³ã«ãã決å®ãããããããã£ã®åï¼ï¼ è¤åèå¥åã¨ãã¦ä½¿ãããã³ã³ãã¼ãã³ãã®ã¯ã©ã¹ï¼æ¬¡ã®ç¯ãè¦ã¦ãã ããï¼ã"
+
+#: index.docbook:872
+msgid "<literal>segment_value_length</literal> (optional, defaults to <literal>255</literal>): Used for schema generation; the column size to create this segment key column."
+msgstr "ãã®3ã¤ç®ã®æ¹æ³ã¯ <emphasis> èå¥åã³ã³ãã¼ãã³ã</emphasis> ã¨å¼ã³ã ã»ã¨ãã©ãã¹ã¦ã®ã¢ããªã±ã¼ã·ã§ã³ã«å¯¾ãã¦æ¨å¥¨ããæ¹æ³ã§ãã"
+
+#: index.docbook:878
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the table."
+msgstr "discriminator"
+
+#: index.docbook:884
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the table should differ."
+msgstr "<literal><discriminator></literal> è¦ç´ ã¯ã table-per-class-hierarchyãããã³ã°æ¦ç¥ã使ãããªã¢ã¼ãã£ãã¯ãªæ°¸ç¶åã«å¿
è¦ã§ããã ãã¼ãã«ã®èå¥ã«ã©ã ãå®ç¾©ãã¾ãã èå¥ã«ã©ã ã¯ãããè¡ã«å¯¾ãã¦æ°¸ç¶å±¤ãã©ã®ãµãã¯ã©ã¹ãã¤ã³ã¹ã¿ã³ã¹åãããã ä¼ãããã¼ã«ã¼å¤ãå«ãã§ãã¾ãã 以ä¸ã®ãããªåã«å¶éããã¾ãï¼ <literal>string</literal> , <literal>character</literal> , <literal>integer</literal>, <literal>byte</literal> , <literal>short</literal> , <literal>boolean</literal> , <literal>yes_no</literal> , <literal>true_false</literal>."
+
+#: index.docbook:890
+msgid "<literal>optimizer</literal> (optional, defaults to <literal></literal>): See"
+msgstr ""
+ "<![CDATA[<discriminator
+\n"
+ " column=\"discriminator_column\"
+\n"
+ " type=\"discriminator_type\"
+\n"
+ " force=\"true|false\"
+\n"
+ " insert=\"true|false\"
+\n"
+ " formula=\"arbitrary sql expression\"
+\n"
+ "/>]]>"
+
+#: index.docbook:900
+msgid "Identifier generator optimization"
+msgstr "<literal>column</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>class</literal> ï¼ï¼ èå¥ã«ã©ã ã®ååã"
+
+#: index.docbook:901
+msgid "For identifier generators which store values in the database, it is inefficient for them to hit the database on each and every call to generate a new identifier value. Instead, you'd ideally want to group a bunch of them in memory and only hit the database when you have exhausted your in-memory value group. This is the role of the pluggable optimizers. Currently only the two enhanced generators (<xref linkend=\"mapping-declaration-id-enhanced\"/> support this notion."
+msgstr "<literal>type</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>string</literal> ï¼ï¼Hibernateã®åã示ãååã"
+
+#: index.docbook:909
+msgid "<literal>none</literal> (generally this is the default if no optimizer was specified): This says to not perform any optimizations, and hit the database each and every request."
+msgstr "<literal>force</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>false</literal> ï¼ï¼ ã«ã¼ãã¯ã©ã¹ã®ãã¹ã¦ã®ã¤ã³ã¹ã¿ã³ã¹ãæ¤ç´¢ããå ´åã§ãã£ã¦ãã Hibernateã使ç¨ã§ããèå¥ã«ã©ã ã®æå®ããå¼·å¶ããã¾ãã"
+
+#: index.docbook:915
+msgid "<literal>hilo</literal>: applies a hi/lo algorithm around the database retrieved values. The values from the database for this optimizer are expected to be sequential. The values retrieved from the database structure for this optimizer indicates the \"group number\"; the <literal>increment_size</literal> is multiplied by that value in memory to define a group \"hi value\"."
+msgstr "<literal>insert</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal> ï¼ï¼ ããèå¥ã«ã©ã ããããã³ã°ããè¤åèå¥åã®ä¸é¨ãªãã°ã<literal>false</literal> ã¨è¨å®ãã¦ãã ããã (Hibernateã«SQLã® <literal>INSERT</literal> ã«ã¯å«ã¾ããªããã¨ãç¥ããã)"
+
+#: index.docbook:924
+msgid "<literal>pooled</literal>: like was discussed for <literal>hilo</literal>, this optimizers attempts to minimize the number of hits to the database. Here, however, we simply store the starting value for the \"next group\" into the database structure rather than a sequential value in combination with an in-memory grouping algorithm. <literal>increment_size</literal> here refers to the values coming from the database."
+msgstr "<literal>formula</literal> (ãªãã·ã§ã³)åãè©ä¾¡ãããã¨ãã«å®è¡ãããä»»æã®SQLå¼ã ã³ã³ãã³ããã¼ã¹ã®èå¥ãå¯è½ã«ãã¾ãã"
+
+#: index.docbook:937
+msgid "composite-id"
+msgstr "èå¥ã«ã©ã ã®å®éã®å¤ã¯ã <literal><class></literal> 㨠<literal><subclass></literal> è¦ç´ ã® <literal>discriminator-value</literal> å±æ§ã§æå®ããã¾ãã"
+
+#: index.docbook:939
+msgid ""
+ "<![CDATA[<composite-id\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " mapped=\"true|false\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|.\"\n"
+ "\n"
+ " <key-property name=\"propertyName\" type=\"typename\" column=\"column_name\"/>\n"
+ " <key-many-to-one name=\"propertyName class=\"ClassName\" column=\"column_name\"/>\n"
+ " ......\n"
+ "</composite-id>]]>"
+msgstr "æ°¸ç¶ã¯ã©ã¹ã¸ãããã³ã°ãããªãï½¢ä½åãªãèå¥å¤ãæã¤è¡ã ãã¼ãã«ã«ããã°ãï¼ãã®ã¨ãã«éãï¼<literal>force</literal> å±æ§ã¯æå¹ã§ãã ãã ããæ®éã¯ãããããã¨ã¯ããã¾ããã"
+
+#: index.docbook:941
+msgid "For a table with a composite key, you may map multiple properties of the class as identifier properties. The <literal><composite-id></literal> element accepts <literal><key-property></literal> property mappings and <literal><key-many-to-one></literal> mappings as child elements."
+msgstr "<literal>formula</literal> å±æ§ã使ãã¨ãè¡ã®åãè©ä¾¡ããããã«ä»»æã®SQLå¼ã宣è¨ã§ãã¾ãã"
+
+#: index.docbook:948
+msgid ""
+ "<![CDATA[<composite-id>\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr ""
+ "<![CDATA[<discriminator
+\n"
+ " formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"
+\n"
+ " type=\"integer\"/>]]>"
+
+#: index.docbook:950
+msgid "Your persistent class <emphasis>must</emphasis> override <literal>equals()</literal> and <literal>hashCode()</literal> to implement composite identifier equality. It must also implements <literal>Serializable</literal>."
+msgstr "versionï¼ãªãã·ã§ã³ï¼"
+
+#: index.docbook:956
+msgid "Unfortunately, this approach to composite identifiers means that a persistent object is its own identifier. There is no convenient \"handle\" other than the object itself. You must instantiate an instance of the persistent class itself and populate its identifier properties before you can <literal>load()</literal> the persistent state associated with a composite key. We call this approach an <emphasis>embedded</emphasis> composite identifier, and discourage it for serious applications."
+msgstr "<literal><version></literal> è¦ç´ ã¯ãªãã·ã§ã³ã§ããã ãã¼ãã«ããã¼ã¸ã§ã³ãã¼ã¿ãå«ããã¨ã示ãã¾ãã ãã㯠<emphasis>ãã³ã°ãã©ã³ã¶ã¯ã·ã§ã³</emphasis> ã使ãã¤ãããªããç¹ã«å½¹ç«ã¡ã¾ãï¼ä»¥ä¸ãè¦ã¦ãã ããï¼ã"
+
+#: index.docbook:965
+msgid "A second approach is what we call a <emphasis>mapped</emphasis> composite identifier, where the identifier properties named inside the <literal><composite-id></literal> element are duplicated on both the persistent class and a separate identifier class."
+msgstr ""
+ "<![CDATA[<version
+\n"
+ " column=\"version_column\"
+\n"
+ " name=\"propertyName\"
+\n"
+ " type=\"typename\"
+\n"
+ " access=\"field|property|ClassName\"
+\n"
+ " unsaved-value=\"null|negative|undefined\"
+\n"
+ " generated=\"never|always\"
+\n"
+ " insert=\"true|false\"
+\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"
+\n"
+ "/>]]>"
+
+#: index.docbook:971
+msgid ""
+ "<![CDATA[<composite-id class=\"MedicareId\" mapped=\"true\">\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr "<literal>column</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ãã¯ããããã£åï¼: ãã¼ã¸ã§ã³çªå·ãä¿æããã«ã©ã ã®ååã"
+
+#: index.docbook:973
+msgid "In this example, both the composite identifier class, <literal>MedicareId</literal>, and the entity class itself have properties named <literal>medicareNumber</literal> and <literal>dependent</literal>. The identifier class must override <literal>equals()</literal> and <literal>hashCode()</literal> and implement. <literal>Serializable</literal>. The disadvantage of this approach is quite obvious—code duplication."
+msgstr "<literal>name</literal> ï¼æ°¸ç¶ã¯ã©ã¹ã®ããããã£ã®ååã"
+
+#: index.docbook:982
+msgid "The following attributes are used to specify a mapped composite identifier:"
+msgstr "<literal>type</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>integer</literal> ï¼ï¼ãã¼ã¸ã§ã³çªå·ã®åã"
+
+#: index.docbook:988
+msgid "<literal>mapped</literal> (optional, defaults to <literal>false</literal>): indicates that a mapped composite identifier is used, and that the contained property mappings refer to both the entity class and the composite identifier class."
+msgstr "<literal>access</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal> ï¼ï¼ ããããã£ã®å¤ã¸ã®ã¢ã¯ã»ã¹ã«Hibernateã使ãæ¦ç¥ã"
+
+#: index.docbook:996
+msgid "<literal>class</literal> (optional, but required for a mapped composite identifier): The class used as a composite identifier."
+msgstr "<literal>unsaved-value</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>undefined</literal> ï¼ï¼ ã¤ã³ã¹ã¿ã³ã¹ãæ°ããã¤ã³ã¹ã¿ã³ã¹åããããã¨ã示ã ï¼ã»ã¼ãããã¦ããªããã¨ã示ãï¼ãã¼ã¸ã§ã³ããããã£ã®å¤ã 以åã®Sessionã§ã»ã¼ãã¾ãã¯ãã¼ããããä¸æçãªã¤ã³ã¹ã¿ã³ã¹ã¨åºå¥ãããã㫠使ãã¾ãã ï¼ <literal>undefined</literal> ã¯èå¥åããããã£ã®å¤ã使ããããã¨ãæå®ãã¾ããï¼"
+
+#: index.docbook:1003
+msgid "We will describe a third, even more convenient approach where the composite identifier is implemented as a component class in <xref linkend=\"components-compositeid\"/>. The attributes described below apply only to this alternative approach:"
+msgstr "<literal>generated</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>never</literal> ): ãã®ãã¼ã¸ã§ã³ã®ããããã£ã®å¤ãããã¼ã¿ãã¼ã¹ã«ãã£ã¦çæããããã¨ãæå®ãã¾ãã <xref linkend=\"mapping-generated\"/>çæãããã㣠ã®è°è«ãè¦ã¦ãã ããã"
+
+#: index.docbook:1011
+msgid "<literal>name</literal> (optional, required for this approach): A property of component type that holds the composite identifier (see chapter 9)."
+msgstr "<literal>insert</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal> ): SQLã®insertæã«ãã¼ã¸ã§ã³ã»ã«ã©ã ãå«ããã¹ããã©ãããæå®ãã¾ãã ãããã¼ã¿ãã¼ã¹ã»ã«ã©ã ã®ããã©ã«ãå¤ã <literal>0</literal> ã¨å®ç¾©ãããã¨ãã«ã¯ã <literal>false</literal> ã«è¨å®ããã¨è¯ãã§ãããã"
+
+#: index.docbook:1023
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The component class used as a composite identifier (see next section)."
+msgstr "ãã¼ã¸ã§ã³ãã¿ã¤ã ã¹ã¿ã³ãã®ããããã£ã¯ãåé¢ãããã¤ã³ã¹ã¿ã³ã¹ã«å¯¾ãã¦nullã§ãã£ã¦ã¯ãªãã¾ããã ãã®ããã©ã®ãã㪠<literal>unsaved-value</literal> æ¦ç¥ãæå®ããã¦ãã Hibernateã¯nullã®ãã¼ã¸ã§ã³ãã¿ã¤ã ã¹ã¿ã³ããæã£ããã¹ã¦ã®ã¤ã³ã¹ã¿ã³ã¹ãã ä¸æçãªãã®ã§ããã¨å¤æãã¾ãã <emphasis> nullã許容ãããã¼ã¸ã§ã³ãã¿ã¤ã ã¹ã¿ã³ãã®ããããã£ãå®ç¾©ãããã¨ã¯ã é渡çã«ä¸æãªãã¸ã§ã¯ãã¨ãããã¨ãé²ãç°¡åãªæ¹æ³ã§ãã ç¹ã«èå¥åã®å²ãå½ã¦ãè¤åãã¼ã使ç¨ãã¦ããã¨ãã«ã¯ç¹ã«æç¨ã§ãã</emphasis>"
+
+#: index.docbook:1030
+msgid "This third approach, an <emphasis>identifier component</emphasis> is the one we recommend for almost all applications."
+msgstr "timestampï¼ãªãã·ã§ã³ï¼"
+
+#: index.docbook:1038
+msgid "discriminator"
+msgstr "ãªãã·ã§ã³ã® <literal><timestamp></literal> è¦ç´ ã¯ã ãã¼ãã«ãã¿ã¤ã ã¹ã¿ã³ããã¼ã¿ãå«ããã¨ã示ãã¾ãã ããã¯ãã¼ã¸ã§ã³ä»ãã®ä»£ããã®æ¹æ³ã¨ãã¦ç¨æããã¦ãã¾ãã ã¿ã¤ã ã¹ã¿ã³ãã¯ãã¨ãã¨æ¥½è¦³çããã¯ã«ãããå®å
¨æ§ã®ä½ãå®è£
ã§ãã ãããã¢ããªã±ã¼ã·ã§ã³ã¯ç°ãªãç¨éã§ä½¿ããã¨ãããããããã¾ããã"
+
+#: index.docbook:1040
+msgid "The <literal><discriminator></literal> element is required for polymorphic persistence using the table-per-class-hierarchy mapping strategy and declares a discriminator column of the table. The discriminator column contains marker values that tell the persistence layer what subclass to instantiate for a particular row. A restricted set of types may be used: <literal>string</literal>, <literal>character</literal>, <literal>integer</literal>, <literal>byte</literal>, <literal>short</literal>, <literal>boolean</literal>, <literal>yes_no</literal>, <literal>true_false</literal>."
+msgstr ""
+ "<![CDATA[<timestamp
+\n"
+ " column=\"timestamp_column\"
+\n"
+ " name=\"propertyName\"
+\n"
+ " access=\"field|property|ClassName\"
+\n"
+ " unsaved-value=\"null|undefined\"
+\n"
+ " source=\"vm|db\"
+\n"
+ " generated=\"never|always\"
+\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"
+\n"
+ "/>]]>"
+
+#: index.docbook:1058
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " column=\"discriminator_column\"\n"
+ " type=\"discriminator_type\"\n"
+ " force=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary sql expression\"\n"
+ "/>]]>"
+msgstr "<literal>column</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ãã¯ããããã£åï¼ï¼ ã¿ã¤ã ã¹ã¿ã³ããä¿æããã«ã©ã ã®ååã"
+
+#: index.docbook:1061
+msgid "<literal>column</literal> (optional - defaults to <literal>class</literal>) the name of the discriminator column."
+msgstr "<literal>name</literal> ï¼ æ°¸ç¶ã¯ã©ã¹ã§ããJava ã® <literal>Date</literal>å ã¾ã㯠<literal>Timestamp</literal> å ã®ãJavaBeansã¹ã¿ã¤ã«ããããã£ã®ååã"
+
+#: index.docbook:1067
+msgid "<literal>type</literal> (optional - defaults to <literal>string</literal>) a name that indicates the Hibernate type"
+msgstr "<literal>access</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal> ï¼ï¼ ããããã£ã®å¤ã¸ã®ã¢ã¯ã»ã¹ã«Hibernateã使ãæ¦ç¥ã"
+
+#: index.docbook:1073
+msgid "<literal>force</literal> (optional - defaults to <literal>false</literal>) \"force\" Hibernate to specify allowed discriminator values even when retrieving all instances of the root class."
+msgstr "<literal>unsaved-value</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>null</literal> ï¼ï¼ ã¤ã³ã¹ã¿ã³ã¹ãæ°ããã¤ã³ã¹ã¿ã³ã¹åããã ï¼ã»ã¼ãããã¦ããªãï¼ãã¨ã示ããã¼ã¸ã§ã³ããããã£ã®å¤ã 以åã®Sessionã§ã»ã¼ãã¾ãã¯ãã¼ããããä¸æçãªã¤ã³ã¹ã¿ã³ã¹ã¨ åºå¥ããããã«ä½¿ããã¾ãã ï¼ <literal>undefined</literal> ã¨æå®ããã¨ã èå¥åããããã£ã®å¤ã使ããã¾ããï¼"
+
+#: index.docbook:1080
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>) set this to <literal>false</literal> if your discriminator column is also part of a mapped composite identifier. (Tells Hibernate to not include the column in SQL <literal>INSERT</literal>s.)"
+msgstr "<literal>source</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>vm</literal> ): Hibernateã¯ã©ãããã¿ã¤ã ã¹ã¿ã³ãã®å¤ãåå¾ããã¹ãã§ããããï¼ ãã¼ã¿ãã¼ã¹ããã§ãããããç¾å¨ã®JVMããã§ããããï¼ ãã¼ã¿ãã¼ã¹ã«ããã¿ã¤ã ã¹ã¿ã³ãã¯ãHibernateã\"次ã®å¤\"ã決å®ããããã« ãã¼ã¿ãã¼ã¹ããããããªããã°ãªããªãããããªã¼ãããããæãã¾ãã ãããã¯ã©ã¹ã¿ç°å¢ã§ã¯JVMããåå¾ããããå®å
¨ã§ãã ãã¼ã¿ãã¼ã¹ã®ç¾å¨ã®ã¿ã¤ã ã¹ã¿ã³ãã®åå¾ããµãã¼ããã ãã¹ã¦ã® <literal>ãã¼ã¿ãã¼ã¹æ¹è¨</literal> ãç¥ããã¦ããããã§ã¯ãªããã¨ã« 注æãã¦ãã ãããã¾ãä¸æ¹ã§ãç²¾å¯ããæ¬ ãããã«ã ããã¯ã§ä½¿ç¨ããã«ã¯å®å
¨ã§ãªããã®ãããã¾ã(ä¾ãã°Oracle 8)ã"
+
+#: index.docbook:1088
+msgid "<literal>formula</literal> (optional) an arbitrary SQL expression that is executed when a type has to be evaluated. Allows content-based discrimination."
+msgstr "<literal>generated</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>never</literal> ): ãã®ã¿ã¤ã ã¹ã¿ã³ãã»ããããã£ã®å¤ãããã¼ã¿ãã¼ã¹ã«ãã£ã¦çæããããã¨ãæå®ãã¾ãã <xref linkend=\"mapping-generated\"/>çæãããã㣠ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:1096
+msgid "Actual values of the discriminator column are specified by the <literal>discriminator-value</literal> attribute of the <literal><class></literal> and <literal><subclass></literal> elements."
+msgstr "<literal><timestamp></literal> 㯠<literal><version type=\"timestamp\"></literal> ã¨ç価ã§ãããã¨ã«æ³¨æãã¦ãã ããã <literal><timestamp source=\"db\"></literal> 㯠<literal><version type=\"dbtimestamp\"></literal> ã¨ç価ã§ãããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:1102
+msgid "The <literal>force</literal> attribute is (only) useful if the table contains rows with \"extra\" discriminator values that are not mapped to a persistent class. This will not usually be the case."
+msgstr "property"
+
+#: index.docbook:1108
+msgid "Using the <literal>formula</literal> attribute you can declare an arbitrary SQL expression that will be used to evaluate the type of a row:"
+msgstr "<literal><property></literal> è¦ç´ ã¯ãã¯ã©ã¹ã®æ°¸ç¶çãªJavaBeanã¹ã¿ã¤ã«ã®ããããã£ãå®ç¾©ãã¾ãã"
+
+#: index.docbook:1113
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"\n"
+ " type=\"integer\"/>]]>"
+msgstr ""
+ "<![CDATA[<property
+\n"
+ " name=\"propertyName\"
+\n"
+ " column=\"column_name\"
+\n"
+ " type=\"typename\"
+\n"
+ " update=\"true|false\"
+\n"
+ " insert=\"true|false\"
+\n"
+ " formula=\"arbitrary SQL expression\"
+\n"
+ " access=\"field|property|ClassName\"
+\n"
+ " lazy=\"true|false\"
+\n"
+ " unique=\"true|false\"
+\n"
+ " not-null=\"true|false\"
+\n"
+ " optimistic-lock=\"true|false\"
+\n"
+ " generated=\"never|insert|always\"
+\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"
+\n"
+ " index=\"index_name\"
+\n"
+ " unique_key=\"unique_key_id\"
+\n"
+ " length=\"L\"
+\n"
+ " precision=\"P\"
+\n"
+ " scale=\"S\"
+\n"
+ "/>]]>"
+
+#: index.docbook:1118
+msgid "version (optional)"
+msgstr "<literal>name</literal>ï¼å°æåã§å§ã¾ãããããã£åã"
+
+#: index.docbook:1120
+msgid "The <literal><version></literal> element is optional and indicates that the table contains versioned data. This is particularly useful if you plan to use <emphasis>long transactions</emphasis> (see below)."
+msgstr "<literal>column</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ãã¯ããããã£åï¼ï¼ ãããã³ã°ããããã¼ã¿ãã¼ã¹ãã¼ãã«ã®ã«ã©ã ã®ååã ãã¹ããã <literal><column></literal> è¦ç´ ã§ãæå®ã§ãã¾ãã"
+
+#: index.docbook:1136
+msgid ""
+ "<![CDATA[<version\n"
+ " column=\"version_column\"\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|negative|undefined\"\n"
+ " generated=\"never|always\"\n"
+ " insert=\"true|false\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr "<literal>type</literal>ï¼ãªãã·ã§ã³ï¼ï¼Hibernateã®åã示ãååã"
+
+#: index.docbook:1139
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the column holding the version number."
+msgstr "<literal>update, insert</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal> ï¼ï¼ ãããã³ã°ãããã«ã©ã ãSQLã® <literal>UPDATE</literal> ã <literal>INSERT</literal> ã«å«ã¾ãããã¨ãæå®ãã¾ãã 両æ¹ã¨ã <literal>false</literal> ã«è¨å®ããã¨ã åãã«ã©ã ã«ãããã³ã°ãããä»ã®ããããã£ãããªã¬ã ä»ã®ã¢ããªã±ã¼ã·ã§ã³ã«ãã£ã¦åæåãããç´ç²ãªãå°åºãããããã£ãå¯è½ã«ãªãã¾ãã"
+
+#: index.docbook:1145
+msgid "<literal>name</literal>: The name of a property of the persistent class."
+msgstr "<literal>formula</literal>ï¼ãªãã·ã§ã³ï¼ï¼ <emphasis>è¨ç®</emphasis> ããããã£ã®ããã®å¤ãå®ç¾©ããSQLå¼ã è¨ç®ãããããããã£ã¯èªèº«ã®ã«ã©ã ã¸ã®ãããã³ã°ãããã¾ããã"
+
+#: index.docbook:1150
+msgid "<literal>type</literal> (optional - defaults to <literal>integer</literal>): The type of the version number."
+msgstr "<literal>access</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal> ï¼ï¼ ããããã£ã®å¤ã¸ã®ã¢ã¯ã»ã¹ã«Hibernateã使ãæ¦ç¥ã"
+
+#: index.docbook:1162
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>undefined</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr "<literal>unique</literal> (ãªãã·ã§ã³):ã«ã©ã ã«ã¦ãã¼ã¯å¶ç´ãã¤ããDDLã®çæãå¯è½ã«ãã¾ãã ã¾ãã<literal>property-ref</literal> ã®ã¿ã¼ã²ããã¨ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:1171
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this version property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "<literal>not-null</literal> (ãªãã·ã§ã³):ã«ã©ã ã«nullå¤ã許å¯ããDDLã®çæãå¯è½ã«ãã¾ãã"
+
+#: index.docbook:1178
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>): Specifies whether the version column should be included in SQL insert statements. May be set to <literal>false</literal> if and only if the database column is defined with a default value of <literal>0</literal>."
+msgstr "<literal>optimistic-lock</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal> ): ãã®ããããã£ã®æ´æ°ã«æ¥½è¦³ããã¯ã®åå¾ãè¦æ±ãããã©ãããæå®ãã¾ãã è¨ãæããã°ããã®ããããã£ããã¼ãã£ã§ããã¨ãã«ãã¼ã¸ã§ã³ãå¢ããã¹ããã決å®ãã¾ãã"
+
+#: index.docbook:1188
+msgid "Version numbers may be of Hibernate type <literal>long</literal>, <literal>integer</literal>, <literal>short</literal>, <literal>timestamp</literal> or <literal>calendar</literal>."
+msgstr "<literal>generated</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>never</literal> ): ããããã£ã®å¤ãããã¼ã¿ãã¼ã¹ã«ãã£ã¦çæããããã¨ãæå®ãã¾ãã <xref linkend=\"mapping-generated\"/>çæãããã㣠ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:1193
+msgid "A version or timestamp property should never be null for a detached instance, so Hibernate will detect any instance with a null version or timestamp as transient, no matter what other <literal>unsaved-value</literal> strategies are specified. <emphasis>Declaring a nullable version or timestamp property is an easy way to avoid any problems with transitive reattachment in Hibernate, especially useful for people using assigned identifiers or composite keys!</emphasis>"
+msgstr "<emphasis>typename</emphasis> ã«ã¯ä»¥ä¸ã®å¤ãå¯è½ã§ãï¼"
+
+#: index.docbook:1204
+msgid "timestamp (optional)"
+msgstr "Hibernateã®åºæ¬åã®ååï¼ä¾ <literal>integer, string, character, date, timestamp, float, binary, serializable, object, blob</literal> ï¼ã"
+
+#: index.docbook:1206
+msgid "The optional <literal><timestamp></literal> element indicates that the table contains timestamped data. This is intended as an alternative to versioning. Timestamps are by nature a less safe implementation of optimistic locking. However, sometimes the application might use the timestamps in other ways."
+msgstr "ããã©ã«ãã®åºæ¬åã®Javaã¯ã©ã¹å ï¼ä¾ <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal> ï¼ã"
+
+#: index.docbook:1222
+msgid ""
+ "<![CDATA[<timestamp\n"
+ " column=\"timestamp_column\"\n"
+ " name=\"propertyName\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|undefined\"\n"
+ " source=\"vm|db\"\n"
+ " generated=\"never|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr "ã·ãªã¢ã©ã¤ãºå¯è½ãªJavaã¯ã©ã¹ã®ååã"
+
+#: index.docbook:1225
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of a column holding the timestamp."
+msgstr "ã«ã¹ã¿ã åã®ã¯ã©ã¹åï¼ä¾ <literal>com.illflow.type.MyCustomType</literal> ï¼ã"
+
+#: index.docbook:1231
+msgid "<literal>name</literal>: The name of a JavaBeans style property of Java type <literal>Date</literal> or <literal>Timestamp</literal> of the persistent class."
+msgstr "åãæå®ããªããã°ãHibernateã¯æ£ããHibernateã®åãæ¨æ¸¬ããããã«ã æå®ãããããããã£ã«å¯¾ãã¦ãªãã¬ã¯ã·ã§ã³ã使ãã¾ãã Hibernateã¯ã«ã¼ã«2, 3, 4ããã®é åºã«ä½¿ãã getterããããã£ã®è¿ãå¤ã®ã¯ã©ã¹ã®ååã解éãããã¨ãã¾ãã ãããããã§å¸¸ã«ååã§ããã¨ã¯éãã¾ããã å ´åã«ãã£ã¦ã¯ã<literal>type</literal> å±æ§ãå¿
è¦ãªå ´åãããã¾ãã ï¼ä¾ãã° <literal>Hibernate.DATE</literal> 㨠<literal>Hibernate.TIMESTAMP</literal> ãåºå¥ããããã ã¾ãã¯ã«ã¹ã¿ã åãæå®ãããããªã©ã§ããï¼"
+
+#: index.docbook:1244
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>null</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr "ç¹ã«å¼·åãªç¹å¾´ã¯çæããããã£ã§ãã ãããã®ããããã£ã¯å½ç¶èªã¿åãå°ç¨ã§ãããããããã£ã®å¤ã¯ãã¼ãæã«è¨ç®ããã¾ãã è¨ç®ãSQLå¼ã¨ãã¦å®£è¨ããã¨ããã®ããããã£ã¯ ã¤ã³ã¹ã¿ã³ã¹ããã¼ãããSQLã¯ã¨ãªã® <literal>SELECT</literal> å¥ã®ãµãã¯ã¨ãªã«å¤æããã¾ãã"
+
+#: index.docbook:1253
+msgid "<literal>source</literal> (optional - defaults to <literal>vm</literal>): From where should Hibernate retrieve the timestamp value? From the database, or from the current JVM? Database-based timestamps incur an overhead because Hibernate must hit the database in order to determine the \"next value\", but will be safer for use in clustered environments. Note also, that not all <literal>Dialect</literal>s are known to support retrieving of the database's current timestamp, while others might be unsafe for usage in locking due to lack of precision (Oracle 8 for example)."
+msgstr ""
+ "<![CDATA[
+\n"
+ "<property name=\"totalPrice\"
+\n"
+ " formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p
+\n"
+ " WHERE li.productId = p.productId
+\n"
+ " AND li.customerId = customerId
+\n"
+ " AND li.orderNumber = orderNumber )\"/>]]>"
+
+#: index.docbook:1265
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this timestamp property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "ç¹å®ã®ã«ã©ã (ä¾ã§ã¯ <literal>customerId</literal> ãããã«ãããã¾ã)ã®ã¨ã¤ãªã¢ã¹ã宣è¨ãããã¨ãªãã ã¨ã³ãã£ãã£èªèº«ã®ãã¼ãã«ãåç
§ã§ãããã¨ã«æ³¨æãã¦ãã ããã ããå±æ§ã使ç¨ããããªããã°ã ãã¹ããã <literal><formula></literal> ãããã³ã°è¦ç´ ã使ãããã¨ã«ã注æãã¦ãã ããã"
+
+#: index.docbook:1274
+msgid "Note that <literal><timestamp></literal> is equivalent to <literal><version type=\"timestamp\"></literal>. And <literal><timestamp source=\"db\"></literal> is equivalent to <literal><version type=\"dbtimestamp\"></literal>"
+msgstr "many-to-one"
+
+#: index.docbook:1284
+msgid "property"
+msgstr "ä»ã®æ°¸ç¶ã¯ã©ã¹ã¸ã®é常ã®é¢é£ã¯ <literal>many-to-one</literal> è¦ç´ ã使ã£ã¦å®ç¾©ãã¾ãã ãªã¬ã¼ã·ã§ãã«ã¢ãã«ã¯å¤å¯¾ä¸é¢é£ã§ãã ã¤ã¾ããããã¼ãã«ã®å¤é¨ãã¼ã¯ãã¿ã¼ã²ããã¨ãªããã¼ãã«ã®ä¸»ãã¼ã«ã©ã ãåç
§ãã¦ãã¾ãã"
+
+#: index.docbook:1286
+msgid "The <literal><property></literal> element declares a persistent, JavaBean style property of the class."
+msgstr ""
+ "<![CDATA[<many-to-one
+\n"
+ " name=\"propertyName\"
+\n"
+ " column=\"column_name\"
+\n"
+ " class=\"ClassName\"
+\n"
+ " cascade=\"cascade_style\"
+\n"
+ " fetch=\"join|select\"
+\n"
+ " update=\"true|false\"
+\n"
+ " insert=\"true|false\"
+\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"
+\n"
+ " access=\"field|property|ClassName\"
+\n"
+ " unique=\"true|false\"
+\n"
+ " not-null=\"true|false\"
+\n"
+ " optimistic-lock=\"true|false\"
+\n"
+ " lazy=\"proxy|no-proxy|false\"
+\n"
+ " not-found=\"ignore|exception\"
+\n"
+ " entity-name=\"EntityName\"
+\n"
+ " formula=\"arbitrary SQL expression\"
+\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"
+\n"
+ " embed-xml=\"true|false\"
+\n"
+ " index=\"index_name\"
+\n"
+ " unique_key=\"unique_key_id\"
+\n"
+ " foreign-key=\"foreign_key_name\"
+\n"
+ "/>]]>"
+
+#: index.docbook:1308
+msgid ""
+ "<![CDATA[<property\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " type=\"typename\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " generated=\"never|insert|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ "/>]]>"
+msgstr "<literal>name</literal>ï¼ããããã£åã"
+
+#: index.docbook:1311
+msgid "<literal>name</literal>: the name of the property, with an initial lowercase letter."
+msgstr "<literal>column</literal> (ãªãã·ã§ã³):å¤é¨ãã¼ã«ã©ã ã®ååã ãã¹ããã <literal><column></literal> è¦ç´ ã§ãæå®ã§ãã¾ãã"
+
+#: index.docbook:1317
+msgid "<literal>column</literal> (optional - defaults to the property name): the name of the mapped database table column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr "<literal>class</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ãã¯ã ãªãã¬ã¯ã·ã§ã³ã«ãã決å®ãããããããã£ã®åï¼ï¼é¢é£ã¯ã©ã¹ã®ååã"
+
+#: index.docbook:1324
+msgid "<literal>type</literal> (optional): a name that indicates the Hibernate type."
+msgstr "<literal>cascade</literal>ï¼ãªãã·ã§ã³ï¼ï¼ ã©ã®æä½ãã親ãªãã¸ã§ã¯ãããé¢é£ãªãã¸ã§ã¯ãã¸ã¨ã«ã¹ã±ã¼ããããããæå®ãã¾ãã"
+
+#: index.docbook:1329
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) : specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" property whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr "<literal>fetch</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>select</literal> ): å¤é¨çµåãã§ãããé 次é¸æãã§ããï¼sequential select fetchï¼ãé¸æãã¾ãã"
+
+#: index.docbook:1338
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> property. Computed properties do not have a column mapping of their own."
+msgstr "<literal>update, insert</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal> ï¼ï¼ ãããã³ã°ãããã«ã©ã ãSQLã® <literal>UPDATE</literal> ã¾ã㯠<literal>INSERT</literal> æã«å«ã¾ãããã¨ãæå®ãã¾ãã 両æ¹ã¨ã <literal>false</literal> ã«è¨å®ããã¨ã ãã®å¤ãåãã«ã©ã ã«ãããã³ã°ãããä»ã®ããããã£ãããªã¬ã ä»ã®ã¢ããªã±ã¼ã·ã§ã³ã«ãã£ã¦åæåãããç´ç²ãªãå°åºãããããã£ãå¯è½ã«ãªãã¾ãã"
+
+#: index.docbook:1351
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr "<literal>access</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal> ï¼ï¼ ããããã£ã®å¤ã¸ã®ã¢ã¯ã»ã¹ã«Hibernateã使ãæ¦ç¥ã"
+
+#: index.docbook:1358
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the columns. Also, allow this to be the target of a <literal>property-ref</literal>."
+msgstr "<literal>unique</literal>ï¼ãªãã·ã§ã³ï¼ï¼ å¤é¨ãã¼ã«ã©ã ã«å¯¾ãã¦ã¦ãã¼ã¯å¶ç´ãã¤ããDDLã®çæãå¯è½ã«ãã¾ãã ã¾ãã<literal>property-ref</literal> ã®ã¿ã¼ã²ããã«ãããã¨ãã§ãã¾ãã ããã«ããé¢é£ã®å¤é度ãå¹æçã«ä¸å¯¾ä¸ã«ãã¾ãã"
+
+#: index.docbook:1365
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the columns."
+msgstr "<literal>not-null</literal> (ãªãã·ã§ã³):å¤é¨ãã¼ã«ã©ã ã«å¯¾ãã¦ã nullå¤ã許å¯ããDDLã®çæãå¯è½ã«ãã¾ã"
+
+#: index.docbook:1371
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr "<literal>optimistic-lock</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal> ): ãã®ããããã£ã®æ´æ°ã«æ¥½è¦³çããã¯ã®åå¾ãè¦æ±ãããã©ãããæå®ãã¾ãã è¨ãæããã°ããã®ããããã£ããã¼ãã£ã§ããã¨ãã«ãã¼ã¸ã§ã³ãå¢ããã¹ããã決å®ãã¾ãã"
+
+#: index.docbook:1379
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "<literal>lazy</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>proxy</literal> ): ããã©ã«ãã§ã¯ãå¤é度ï¼ã®é¢é£ããããã·ã¨ãªãã¾ãã <literal>lazy=\"no-proxy\"</literal> ã¯ãã¤ã³ã¹ã¿ã³ã¹å¤æ°ã«æåã«ã¢ã¯ã»ã¹ããã¨ãã«ã ããããã£ãé
延ãã§ããããããæå®ãã¾ã (ãã«ãæã«ãã¤ãã³ã¼ãå®è£
ãå¿
è¦ã«ãªãã¾ã)ã <literal>lazy=\"false\"</literal> ã¯é¢é£ã常ã«å³æã«ãã§ããããããæå®ãã¾ãã"
+
+#: index.docbook:1388
+msgid "<emphasis>typename</emphasis> could be:"
+msgstr "<literal>not-found</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>exception</literal> ): æ¬ è½ããè¡ãåç
§ããå¤é¨ãã¼ãã©ã®ããã«æ±ãããæå®ãã¾ãã <literal>ignore</literal> ã¯æ¬ è½ããè¡ãnullé¢é£ã¨ãã¦æ±ãã¾ãã"
+
+#: index.docbook:1394
+msgid "The name of a Hibernate basic type (eg. <literal>integer, string, character, date, timestamp, float, binary, serializable, object, blob</literal>)."
+msgstr "<literal>entity-name</literal> (ãªãã·ã§ã³):é¢é£ããã¯ã©ã¹ã®ã¨ã³ãã£ãã£åã"
+
+#: index.docbook:1400
+msgid "The name of a Java class with a default basic type (eg. <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal>)."
+msgstr "<literal>formula</literal> (ãªãã·ã§ã³): <emphasis> è¨ç®ããã</emphasis> å¤é¨ãã¼ã«å¯¾ãã¦å¤ãå®ç¾©ããSQLå¼"
+
+#: index.docbook:1406
+msgid "The name of a serializable Java class."
+msgstr "<literal>cascade</literal> å±æ§ã« <literal>none</literal> 以å¤ã®æå³ã®ããå¤ããè¨å®ããã¨ã é¢é£ãªãã¸ã§ã¯ãã¸ããæä½ãä¼æãããã¨ã«ãªãã¾ãã æå³ã®ããå¤ã¨ã¯Hibernateã®åºæ¬æä½ã®ååã®ãã¨ã§ã <literal>delete-orphan</literal> 㨠<literal>all</literal> ãæä½åãã«ã³ãã§åºåã£ãçµã¿åãã ï¼ä¾ãã° <literal>cascade=\"persist,merge,evict\"</literal> ã <literal>cascade=\"all,delete-orphan\"</literal>ï¼ã ã¾ãããã ãã§ãªã <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal> ã®ãã¨ãæãã¾ãã 詳ãã説æ㯠<xref linkend=\"objectstate-transitive\"/> ãè¦ã¦ãã ããã å¤ãä¸ã¤ã®é¢é£(many-to-oneã¨one-to-oneé¢é£)ã¯ã åç¬ã§ã®åé¤ï¼orphan delete)ããµãã¼ããã¦ããªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:1411
+msgid "The class name of a custom type (eg. <literal>com.illflow.type.MyCustomType</literal>)."
+msgstr "å
¸åç㪠<literal>many-to-one</literal> 宣è¨ã¯æ¬¡ã®ããã«ã·ã³ãã«ã§ããï¼"
+
+#: index.docbook:1417
+msgid "If you do not specify a type, Hibernate will use reflection upon the named property to take a guess at the correct Hibernate type. Hibernate will try to interpret the name of the return class of the property getter using rules 2, 3, 4 in that order. However, this is not always enough. In certain cases you will still need the <literal>type</literal> attribute. (For example, to distinguish between <literal>Hibernate.DATE</literal> and <literal>Hibernate.TIMESTAMP</literal>, or to specify a custom type.)"
+msgstr "<![CDATA[<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>]]>"
+
+#: index.docbook:1427
+msgid "The <literal>access</literal> attribute lets you control how Hibernate will access the property at runtime. By default, Hibernate will call the property get/set pair. If you specify <literal>access=\"field\"</literal>, Hibernate will bypass the get/set pair and access the field directly, using reflection. You may specify your own strategy for property access by naming a class that implements the interface <literal>org.hibernate.property.PropertyAccessor</literal>."
+msgstr "<literal>property-ref</literal> å±æ§ã¯ãå¤é¨ãã¼ãé¢é£ä»ãããããã¼ãã«ã®ã主ãã¼ã§ãªã ã¦ãã¼ã¯ãã¼ãåç
§ãã¦ããã¬ã¬ã·ã¼ãã¼ã¿ããããããããã«ã ã使ãã¹ãã§ãã ããã¯éããªã¬ã¼ã·ã§ãã«ã¢ãã«ã§ãã ä¾ãã° <literal>Product</literal> ã¯ã©ã¹ãã 主ãã¼ã§ãªãã¦ãã¼ã¯ãªã·ãªã¢ã«ãã³ãã¼ãæã£ã¦ããã¨ä»®å®ãã¦ã¿ã¦ãã ããã ï¼ <literal>unique</literal> å±æ§ã¯SchemaExportãã¼ã«ã使ã£ãHibernateã®DDLçæãå¶å¾¡ãã¾ããï¼"
+
+#: index.docbook:1436
+msgid "An especially powerful feature are derived properties. These properties are by definition read-only, the property value is computed at load time. You declare the computation as a SQL expression, this translates to a <literal>SELECT</literal> clause subquery in the SQL query that loads an instance:"
+msgstr "<![CDATA[<property name=\"serialNumber\" unique=\"true\" type=\"string\" column=\"SERIAL_NUMBER\"/>]]>"
+
+#: index.docbook:1443
+msgid ""
+ "<![CDATA[\n"
+ "<property name=\"totalPrice\"\n"
+ " formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p\n"
+ " WHERE li.productId = p.productId\n"
+ " AND li.customerId = customerId\n"
+ " AND li.orderNumber = orderNumber )\"/>]]>"
+msgstr "以ä¸ã®ããã« <literal>OrderItem</literal> ã«å¯¾ãã¦ãããã³ã°ã使ãã¾ãï¼"
+
+#: index.docbook:1445
+msgid "Note that you can reference the entities own table by not declaring an alias on a particular column (<literal>customerId</literal> in the given example). Also note that you can use the nested <literal><formula></literal> mapping element if you don't like to use the attribute."
+msgstr "<![CDATA[<many-to-one name=\"product\" property-ref=\"serialNumber\" column=\"PRODUCT_SERIAL_NUMBER\"/>]]>"
+
+#: index.docbook:1455
+msgid "many-to-one"
+msgstr "ããããããã¯æ±ºãã¦æ¨å¥¨ã§ãã¾ããã"
+
+#: index.docbook:1457
+msgid "An ordinary association to another persistent class is declared using a <literal>many-to-one</literal> element. The relational model is a many-to-one association: a foreign key in one table is referencing the primary key column(s) of the target table."
+msgstr "åç
§ããã¦ãã¼ã¯ãã¼ããé¢é£ããã¨ã³ãã£ãã£ã®å¤æ°ã®ããããã£ããæ§æãããå ´åã æå®ãã <literal><properties></literal> è¦ç´ å
ã§ãåç
§ããããããã£ããããã³ã°ããã¹ãã§ãã"
+
+#: index.docbook:1485
+msgid ""
+ "<![CDATA[<many-to-one\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " fetch=\"join|select\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr "ããåç
§ããã¦ãã¼ã¯ãã¼ãã³ã³ãã¼ãã³ãã®ããããã£ã§ããå ´åã¯ãããããã£ã®ãã¹ãæå®ã§ãã¾ãã"
+
+#: index.docbook:1488, index.docbook:1669, index.docbook:1855
+msgid "<literal>name</literal>: The name of the property."
+msgstr "<![CDATA[<many-to-one name=\"owner\" property-ref=\"identity.ssn\" column=\"OWNER_SSN\"/>]]>"
+
+#: index.docbook:1493, index.docbook:2284
+msgid "<literal>column</literal> (optional): The name of the foreign key column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr "one-to-one"
+
+#: index.docbook:1500, index.docbook:1674
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the associated class."
+msgstr "ä»ã®æ°¸ç¶ã¯ã©ã¹ã¸ã®ä¸å¯¾ä¸é¢é£ã¯ã<literal>one-to-one</literal> è¦ç´ ã§å®ç¾©ãã¾ãã"
+
+#: index.docbook:1506
+msgid "<literal>cascade</literal> (optional): Specifies which operations should be cascaded from the parent object to the associated object."
+msgstr ""
+ "<![CDATA[<one-to-one
+\n"
+ " name=\"propertyName\"
+\n"
+ " class=\"ClassName\"
+\n"
+ " cascade=\"cascade_style\"
+\n"
+ " constrained=\"true|false\"
+\n"
+ " fetch=\"join|select\"
+\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"
+\n"
+ " access=\"field|property|ClassName\"
+\n"
+ " formula=\"any SQL expression\"
+\n"
+ " lazy=\"proxy|no-proxy|false\"
+\n"
+ " entity-name=\"EntityName\"
+\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"
+\n"
+ " embed-xml=\"true|false\"
+\n"
+ " foreign-key=\"foreign_key_name\"
+\n"
+ "/>]]>"
+
+#: index.docbook:1512, index.docbook:1695
+msgid "<literal>fetch</literal> (optional - defaults to <literal>select</literal>): Chooses between outer-join fetching or sequential select fetching."
+msgstr "<literal>name</literal>ï¼ããããã£åã"
+
+#: index.docbook:1518
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" association whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr "<literal>class</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ãã¯ãªãã¬ã¯ã·ã§ã³ã«ãã決å®ãããããããã£ã®åï¼ï¼ é¢é£ã¯ã©ã¹ã®ååã"
+
+#: index.docbook:1527
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class is used."
+msgstr "<literal>cascade</literal>ï¼ãªãã·ã§ã³ï¼ï¼ 親ãªãã¸ã§ã¯ãããé¢é£ãªãã¸ã§ã¯ãã¸ãã©ã®æä½ãã«ã¹ã±ã¼ãããããæå®ãã¾ãã"
+
+#: index.docbook:1540
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. Also, allow this to be the target of a <literal>property-ref</literal>. This makes the association multiplicity effectively one to one."
+msgstr "<literal>fetch</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>select</literal> ï¼ï¼ å¤é¨çµåãã§ããã¨é 次é¸æãã§ããï¼sequential select fetchï¼ã®ã©ã¡ãããé¸æãã¾ãã"
+
+#: index.docbook:1548
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the foreign key columns."
+msgstr "<literal>property-ref</literal>ï¼ãªãã·ã§ã³ï¼ï¼ ãã®ã¯ã©ã¹ã®ä¸»ãã¼ã«çµåãããé¢é£ã¯ã©ã¹ã®ããããã£åã æå®ãããªããã°ãé¢é£ã¯ã©ã¹ã®ä¸»ãã¼ã使ããã¾ãã"
+
+#: index.docbook:1554
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, dertermines if a version increment should occur when this property is dirty."
+msgstr "<literal>access</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal> ï¼ï¼ ããããã£ã®å¤ã¸ã®ã¢ã¯ã»ã¹ã«Hibernateã使ãæ¦ç¥ã"
+
+#: index.docbook:1562
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched."
+msgstr "<literal>formula</literal> (ãªãã·ã§ã³): ã»ã¨ãã©ãã¹ã¦ã®ä¸å¯¾ä¸é¢é£ã¯ãªã¼ãã¼ã®ã¨ã³ãã£ãã£ã®ä¸»ãã¼ã¸ã¨ãããã³ã°ããã¾ãã ãã以å¤ã®ç¨ãªå ´åã¯ã ä»ã®ã«ã©ã ããè¤æ°ã®ã«ã©ã ãSQLæ§æã使ã£ãçµåããããã®å¼ãæå®ã§ãã¾ãã ï¼ä¾ã¯ <literal>org.hibernate.test.onetooneformula</literal> ãåç
§ãã¦ãã ãããï¼"
+
+#: index.docbook:1572
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr "<literal>lazy</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>proxy</literal> ): ããã©ã«ãã§ã¯ãå¤é度ï¼ã®é¢é£ããããã·ã¨ãªãã¾ãã <literal>lazy=\"no-proxy\"</literal> ã¯ãã¤ã³ã¹ã¿ã³ã¹å¤æ°ã«æåã«ã¢ã¯ã»ã¹ããã¨ãã«ã ããããã£ãé
延ãã§ããããããæå®ãã¾ã (ãã«ãæã«ãã¤ãã³ã¼ãå®è£
ãå¿
è¦ã«ãªãã¾ã)ã <literal>lazy=\"false\"</literal> ã¯é¢é£ã常ã«å³æã«ãã§ããããããæå®ãã¾ãã <emphasis>ãã <literal>constrained=\"false\"</literal> ãªãã°ã ãããã·ã¯ä½¿ç¨ä¸å¯è½ã¨ãªããé¢é£ãå³æã«ãã§ãããããã¨ã«æ³¨æãã¦ãã ããï¼</emphasis>"
+
+#: index.docbook:1579, index.docbook:1733
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class."
+msgstr "<literal>entity-name</literal> (ãªãã·ã§ã³):é¢é£ã¯ã©ã¹ã®ã¨ã³ãã£ãã£å"
+
+#: index.docbook:1585
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> foreign key."
+msgstr "ä¸å¯¾ä¸é¢é£ã«ã¯2種é¡ããã¾ãï¼"
+
+#: index.docbook:1592
+msgid "Setting a value of the <literal>cascade</literal> attribute to any meaningful value other than <literal>none</literal> will propagate certain operations to the associated object. The meaningful values are the names of Hibernate's basic operations, <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal>, as well as the special values <literal>delete-orphan</literal> and <literal>all</literal> and comma-separated combinations of operation names, for example, <literal>cascade=\"persist,merge,evict\"</literal> or <literal>cascade=\"all,delete-orphan\"</literal>. See <xref linkend=\"objectstate-transitive\"/> for a full explanation. Note that single valued associations (many-to-one and one-to-one associations) do not support orphan delete."
+msgstr "主ãã¼é¢é£"
+
+#: index.docbook:1605
+msgid "A typical <literal>many-to-one</literal> declaration looks as simple as this:"
+msgstr "ã¦ãã¼ã¯å¤é¨ãã¼é¢é£"
+
+#: index.docbook:1609
+msgid "<![CDATA[<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>]]>"
+msgstr "主ãã¼é¢é£ã«ã¯ãç¹å¥ãªãã¼ãã«ã«ã©ã ã¯å¿
è¦ããã¾ããã ãã2ã¤ã®è¡ãé¢é£ã«ããé¢ä¿ãã¦ããã°ã2ã¤ã®ãã¼ãã«ã¯åã主ãã¼ã®å¤ãå
±æãã¾ãã ãã®ãã2ã¤ã®ãªãã¸ã§ã¯ãã主ãã¼é¢é£ã«ãã£ã¦é¢é£ä»ãããã®ã§ããã°ã 確å®ã«åãèå¥åã®å¤ã代å
¥ããªããã°ãªãã¾ããã"
+
+#: index.docbook:1611
+msgid "The <literal>property-ref</literal> attribute should only be used for mapping legacy data where a foreign key refers to a unique key of the associated table other than the primary key. This is an ugly relational model. For example, suppose the <literal>Product</literal> class had a unique serial number, that is not the primary key. (The <literal>unique</literal> attribute controls Hibernate's DDL generation with the SchemaExport tool.)"
+msgstr "主ãã¼é¢é£ãè¡ãããã«ã¯ã以ä¸ã®ãããã³ã°ã <literal>Employee</literal> 㨠<literal>Person</literal> ã®ããããã«è¿½å ãã¦ãã ããã"
+
+#: index.docbook:1620
+msgid "<![CDATA[<property name=\"serialNumber\" unique=\"true\" type=\"string\" column=\"SERIAL_NUMBER\"/>]]>"
+msgstr "<![CDATA[<one-to-one name=\"person\" class=\"Person\"/>]]>"
+
+#: index.docbook:1622
+msgid "Then the mapping for <literal>OrderItem</literal> might use:"
+msgstr "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>]]>"
+
+#: index.docbook:1626
+msgid "<![CDATA[<many-to-one name=\"product\" property-ref=\"serialNumber\" column=\"PRODUCT_SERIAL_NUMBER\"/>]]>"
+msgstr "ããã§ãPERSONã¨EMPLOYEEãã¼ãã«ã®é¢ä¿ããè¡ã®ä¸»ãã¼ãåãã§ãããã¨ã確å®ã«ããªããã°ããã¾ããã ããã§ã¯ã<literal>foreign</literal> ã¨ããç¹æ®ãªHibernateèå¥åçææ¦ç¥ã使ãã¾ãï¼"
+
+#: index.docbook:1628
+msgid "This is certainly not encouraged, however."
+msgstr ""
+ "<![CDATA[<class name=\"person\" table=\"PERSON\">
+\n"
+ " <id name=\"id\" column=\"PERSON_ID\">
+\n"
+ " <generator class=\"foreign\">
+\n"
+ " <param name=\"property\">employee</param>
+\n"
+ " </generator>
+\n"
+ " </id>
+\n"
+ " ...
+\n"
+ " <one-to-one name=\"employee\"
+\n"
+ " class=\"Employee\"
+\n"
+ " constrained=\"true\"/>
+\n"
+ "</class>]]>"
+
+#: index.docbook:1632
+msgid "If the referenced unique key comprises multiple properties of the associated entity, you should map the referenced properties inside a named <literal><properties></literal> element."
+msgstr "<literal>Employee</literal> ã¤ã³ã¹ã¿ã³ã¹ãã<literal>Person</literal> ã® <literal>employee</literal> ããããã£ã§åç
§ãããããã«ã æ°ããã»ã¼ãããã <literal>Person</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ã«ã¯åã主ãã¼ã®å¤ã代å
¥ããã¾ãã æ°ããã»ã¼ããã <literal>Person</literal> ã¤ã³ã¹ã¿ã³ã¹ã¯ã ãã® <literal>Person</literal> ã® <literal>employee</literal> ããããã£ãåç
§ãã <literal>Employee</literal> ã¤ã³ã¹ã¿ã³ã¹ã¨ãã¦åã主ãã¼ãå²ãå½ã¦ããã¾ãã"
+
+#: index.docbook:1637
+msgid "If the referenced unique key is the property of a component, you may specify a property path:"
+msgstr "ãã1ã¤ã®æ¹æ³ã¨ãã¦ã<literal>Employee</literal> ãã <literal>Person</literal> ã¸ã® ã¦ãã¼ã¯å¶ç´ã使ã£ãå¤é¨ãã¼é¢é£ã¯ä»¥ä¸ã®ããã«è¡¨ç¾ããã¾ãï¼"
+
+#: index.docbook:1641
+msgid "<![CDATA[<many-to-one name=\"owner\" property-ref=\"identity.ssn\" column=\"OWNER_SSN\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" unique=\"true\"/>]]>"
+
+#: index.docbook:1646
+msgid "one-to-one"
+msgstr "ããã¦ãã®é¢é£ã¯ã 以ä¸ã®è¨è¿°ã <literal>Person</literal> ã®ãããã³ã°ã«è¿½å ãããã¨ã§åæ¹åã«ãããã¨ãã§ãã¾ãï¼"
+
+#: index.docbook:1648
+msgid "A one-to-one association to another persistent class is declared using a <literal>one-to-one</literal> element."
+msgstr "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" property-ref=\"person\"/>]]>"
+
+#: index.docbook:1666
+msgid ""
+ "<![CDATA[<one-to-one\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " constrained=\"true|false\"\n"
+ " fetch=\"join|select\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " formula=\"any SQL expression\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr "natural-id"
+
+#: index.docbook:1680
+msgid "<literal>cascade</literal> (optional) specifies which operations should be cascaded from the parent object to the associated object."
+msgstr "ã¨ã³ãã£ãã£ã®èªç¶ãã¼ããããã£ã®æ¯è¼ã«ã¯ã <literal>equals()</literal> 㨠<literal>hashCode()</literal> ã®å®è£
ãå¼·ããå§ããã¾ãã"
+
+#: index.docbook:1686
+msgid "<literal>constrained</literal> (optional) specifies that a foreign key constraint on the primary key of the mapped table references the table of the associated class. This option affects the order in which <literal>save()</literal> and <literal>delete()</literal> are cascaded, and determines whether the association may be proxied (it is also used by the schema export tool)."
+msgstr "ãã®ãããã³ã°ã¯èªç¶ä¸»ãã¼ã使ã£ãã¨ã³ãã£ãã£ã§ã®ä½¿ç¨ãæå³ãã¦ãã¾ããã"
+
+#: index.docbook:1701
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to the primary key of this class. If not specified, the primary key of the associated class is used."
+msgstr "component, dynamic-component"
+
+#: index.docbook:1714
+msgid "<literal>formula</literal> (optional): Almost all one to one associations map to the primary key of the owning entity. In the rare case that this is not the case, you may specify a some other column, columns or expression to join on using an SQL formula. (See <literal>org.hibernate.test.onetooneformula</literal> for an example.)"
+msgstr ""
+ "<![CDATA[<component
+\n"
+ " name=\"propertyName\"
+\n"
+ " class=\"className\"
+\n"
+ " insert=\"true|false\"
+\n"
+ " update=\"true|false\"
+\n"
+ " access=\"field|property|ClassName\"
+\n"
+ " lazy=\"true|false\"
+\n"
+ " optimistic-lock=\"true|false\"
+\n"
+ " unique=\"true|false\"
+\n"
+ " node=\"element-name|.\"
+\n"
+ ">
+\n"
+ "
+\n"
+ " <property ...../>
+\n"
+ " <many-to-one .... />
+\n"
+ " ........
+\n"
+ "</component>]]>"
+
+#: index.docbook:1722
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched. <emphasis>Note that if <literal>constrained=\"false\"</literal>, proxying is impossible and Hibernate will eager fetch the association!</emphasis>"
+msgstr "<literal>name</literal>ï¼ããããã£åã"
+
+#: index.docbook:1740
+msgid "There are two varieties of one-to-one association:"
+msgstr "<literal>insert</literal> ï¼ãããã³ã°ãããã«ã©ã ãSQLã® <literal>INSERT</literal> ã«ç¾ããããã«ããã©ãããæå®ãã¾ãã"
+
+#: index.docbook:1744
+msgid "primary key associations"
+msgstr "<literal>update</literal> : ãããã³ã°ãããã«ã©ã ãSQL ã® <literal>UPDATE</literal> ã«ç¾ããããã«ãããã©ãããæå®ãã¾ãã"
+
+#: index.docbook:1747
+msgid "unique foreign key associations"
+msgstr "<literal>access</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal> ï¼ï¼ ããããã£ã®å¤ã¸ã®ã¢ã¯ã»ã¹ã«Hibernateã使ãæ¦ç¥ã"
+
+#: index.docbook:1752
+msgid "Primary key associations don't need an extra table column; if two rows are related by the association then the two table rows share the same primary key value. So if you want two objects to be related by a primary key association, you must make sure that they are assigned the same identifier value!"
+msgstr "<literal>lazy</literal> (optional - ããã©ã«ã㯠<literal>false</literal> ): ã¤ã³ã¹ã¿ã³ã¹å¤æ°ã«æåã«ã¢ã¯ã»ã¹ããã¨ãã«ã ã³ã³ãã¼ãã³ããé
延ãã¦ãã§ããããããæå®ãã¾ãã (ãã¤ãã³ã¼ãå®è£
ãä½æããæéãå¿
è¦ã«ãªãã¾ã)"
+
+#: index.docbook:1759
+msgid "For a primary key association, add the following mappings to <literal>Employee</literal> and <literal>Person</literal>, respectively."
+msgstr "<literal>optimistic-lock</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal> ): ãã®ããããã£ã®æ´æ°ã«ã楽観ããã¯ã®åå¾ãè¦æ±ãããã©ãããæå®ãã¾ãã è¨ãæããã°ããã®ããããã£ããã¼ãã£ã§ããã¨ãã«ãã¼ã¸ã§ã³ãå¢ããã¹ããã決å®ãã¾ãã"
+
+#: index.docbook:1764
+msgid "<![CDATA[<one-to-one name=\"person\" class=\"Person\"/>]]>"
+msgstr "<literal>unique</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>false</literal> ): ã³ã³ãã¼ãã³ãã®ãã¹ã¦ã®ãããã³ã°ããã«ã©ã ã«ãã¦ãã¼ã¯å¶ç´ãåå¨ããããæå®ãã¾ãã"
+
+#: index.docbook:1765
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>]]>"
+msgstr "åã® <literal><property></literal> ã¿ã°ã§ã åã®ã¯ã©ã¹ã®ããããã£ããã¼ãã«ã«ã©ã ã«ãããã³ã°ãã¾ãã"
+
+#: index.docbook:1767
+msgid "Now we must ensure that the primary keys of related rows in the PERSON and EMPLOYEE tables are equal. We use a special Hibernate identifier generation strategy called <literal>foreign</literal>:"
+msgstr "<literal><component></literal> è¦ç´ ã¯ã親ã¨ã³ãã£ãã£ã¸æ»ãåç
§ã¨ãã¦ã ã³ã³ãã¼ãã³ãã®ã¯ã©ã¹ã®ããããã£ããããã³ã°ãã <literal><parent></literal> ãµãè¦ç´ ã許å¯ãã¾ãã"
+
+#: index.docbook:1773
+msgid ""
+ "<![CDATA[<class name=\"person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">employee</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " ...\n"
+ " <one-to-one name=\"employee\"\n"
+ " class=\"Employee\"\n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr "<literal><dynamic-component></literal> è¦ç´ ã¯ã <literal>Map</literal> ãã³ã³ãã¼ãã³ãã¨ãã¦ãããã³ã°ããããã¨ãå¯è½ã«ãã¾ãã ããããã£åã¯mapã®ãã¼ãåç
§ãã¾ãã<xref linkend=\"components-dynamic\"/> ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:1775
+msgid "A newly saved instance of <literal>Person</literal> is then assigned the same primary key value as the <literal>Employee</literal> instance refered with the <literal>employee</literal> property of that <literal>Person</literal>."
+msgstr "properties"
+
+#: index.docbook:1781
+msgid "Alternatively, a foreign key with a unique constraint, from <literal>Employee</literal> to <literal>Person</literal>, may be expressed as:"
+msgstr "<literal><properties></literal> è¦ç´ ã¯ã¯ã©ã¹ã®ããããã£ã®æå®ãããã è«ççãªã°ã«ã¼ãã³ã°ãå¯è½ã«ãã¾ãã ãã®æ§é ã®æãéè¦ãªä½¿ç¨æ¹æ³ã¯ã <literal>property-ref</literal> ã®ã¿ã¼ã²ããã«ãªãããããã£ã®çµåã許å¯ãããã¨ã§ãã ããã¯ã¾ããè¤æ°ã«ã©ã ã®ã¦ãã¼ã¯å¶ç´ãå®ç¾©ããç°¡åãªæ¹æ³ã§ãããã¾ãã"
+
+#: index.docbook:1786
+msgid "<![CDATA[<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" unique=\"true\"/>]]>"
+msgstr ""
+ "<![CDATA[<properties
+\n"
+ " name=\"logicalName\"
+\n"
+ " insert=\"true|false\"
+\n"
+ " update=\"true|false\"
+\n"
+ " optimistic-lock=\"true|false\"
+\n"
+ " unique=\"true|false\"
+\n"
+ ">
+\n"
+ "
+\n"
+ " <property ...../>
+\n"
+ " <many-to-one .... />
+\n"
+ " ........
+\n"
+ "</properties>]]>"
+
+#: index.docbook:1788
+msgid "And this association may be made bidirectional by adding the following to the <literal>Person</literal> mapping:"
+msgstr "<literal>name</literal> : ã°ã«ã¼ãã³ã°ã®è«çåã å®éã®ããããã£åã§ã¯ <emphasis>ããã¾ãã</emphasis> ã"
+
+#: index.docbook:1793
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" property-ref=\"person\"/>]]>"
+msgstr "<literal>insert</literal>ï¼ãããã³ã°ãããã«ã©ã ãSQLã® <literal>INSERT</literal> ã«ç¾ããããã«ãããã©ãããæå®ãã¾ãã"
+
+#: index.docbook:1798
+msgid "natural-id"
+msgstr "<literal>update</literal>ï¼ãããã³ã°ãããã«ã©ã ãSQLã® <literal>UPDATE</literal> ã«ç¾ããããã«ãããã©ãããæå®ãã¾ãã"
+
+#: index.docbook:1800
+msgid ""
+ "<![CDATA[<natural-id mutable=\"true|false\"/>\n"
+ " <property ... />\n"
+ " <many-to-one ... />\n"
+ " ......\n"
+ "</natural-id>]]>"
+msgstr "<literal>optimistic-lock</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal> ): ãããã®ããããã£ã®æ´æ°ã«æ¥½è¦³çããã¯ã®åå¾ãè¦æ±ãããã©ãããæå®ãã¾ãã è¨ãæããã°ããã®ããããã£ããã¼ãã£ã§ããã¨ãã«ãã¼ã¸ã§ã³ãå¢ããã¹ããã決å®ãã¾ãã"
+
+#: index.docbook:1802
+msgid "Even though we recommend the use of surrogate keys as primary keys, you should still try to identify natural keys for all entities. A natural key is a property or combination of properties that is unique and non-null. If it is also immutable, even better. Map the properties of the natural key inside the <literal><natural-id></literal> element. Hibernate will generate the necessary unique key and nullability constraints, and your mapping will be more self-documenting."
+msgstr "<literal>unique</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>false</literal> ): ã³ã³ãã¼ãã³ãã®ãã¹ã¦ã®ãããã³ã°ããã«ã©ã ã«ãã¦ãã¼ã¯å¶ç´ãåå¨ããããæå®ãã¾ãã"
+
+#: index.docbook:1811
+msgid "We strongly recommend that you implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the natural key properties of the entity."
+msgstr "ä¾ãã°ããã以ä¸ã®ãã㪠<literal><properties></literal> ãããã³ã°ããã£ãå ´åï¼"
+
+#: index.docbook:1816
+msgid "This mapping is not intended for use with entities with natural primary keys."
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"personNumber\"/>
+\n"
+ " ...
+\n"
+ " <properties name=\"name\"
+\n"
+ " unique=\"true\" update=\"false\">
+\n"
+ " <property name=\"firstName\"/>
+\n"
+ " <property name=\"initial\"/>
+\n"
+ " <property name=\"lastName\"/>
+\n"
+ " </properties>
+\n"
+ "</class>]]>"
+
+#: index.docbook:1822
+msgid "<literal>mutable</literal> (optional, defaults to <literal>false</literal>): By default, natural identifier properties as assumed to be immutable (constant)."
+msgstr "主ãã¼ã®ä»£ããã« <literal>Person</literal> ãã¼ãã«ã®ã¦ãã¼ã¯ãã¼ã¸ã®åç
§ãæã¤ã ã¬ã¬ã·ã¼ãã¼ã¿ã®é¢é£ãæã¤ããããã¾ãããï¼"
+
+#: index.docbook:1832
+msgid "component, dynamic-component"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"person\"
+\n"
+ " class=\"Person\" property-ref=\"name\">
+\n"
+ " <column name=\"firstName\"/>
+\n"
+ " <column name=\"initial\"/>
+\n"
+ " <column name=\"lastName\"/>
+\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:1834
+msgid "The <literal><component></literal> element maps properties of a child object to columns of the table of a parent class. Components may, in turn, declare their own properties, components or collections. See \"Components\" below."
+msgstr "ãããããã®ãããªã¬ã¬ã·ã¼ãã¼ã¿ãããã³ã°ã®ã³ã³ããã¹ãå¤ã¸ã®ä½¿ç¨ã¯æ¨å¥¨ãã¾ããã"
+
+#: index.docbook:1852
+msgid ""
+ "<![CDATA[<component\n"
+ " name=\"propertyName\"\n"
+ " class=\"className\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</component>]]>"
+msgstr "subclass"
+
+#: index.docbook:1860
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the component (child) class."
+msgstr ""
+ "<![CDATA[<subclass
+\n"
+ " name=\"ClassName\"
+\n"
+ " discriminator-value=\"discriminator_value\"
+\n"
+ " proxy=\"ProxyInterface\"
+\n"
+ " lazy=\"true|false\"
+\n"
+ " dynamic-update=\"true|false\"
+\n"
+ " dynamic-insert=\"true|false\"
+\n"
+ " entity-name=\"EntityName\"
+\n"
+ " node=\"element-name\"
+\n"
+ " extends=\"SuperclassName\">
+\n"
+ "
+\n"
+ " <property .... />
+\n"
+ " .....
+\n"
+ "</subclass>]]>"
+
+#: index.docbook:1866, index.docbook:1955
+msgid "<literal>insert</literal>: Do the mapped columns appear in SQL <literal>INSERT</literal>s?"
+msgstr "<literal>name</literal>ï¼ãµãã¯ã©ã¹ã®å®å
¨ä¿®é£¾ãããã¯ã©ã¹åã"
+
+#: index.docbook:1872, index.docbook:1961
+msgid "<literal>update</literal>: Do the mapped columns appear in SQL <literal>UPDATE</literal>s?"
+msgstr "<literal>discriminator-value</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ãã¯ã¯ã©ã¹åï¼ï¼ åã
ã®ãµãã¯ã©ã¹ãåºå¥ããããã®å¤ã"
+
+#: index.docbook:1884
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this component should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr "<literal>lazy</literal>ï¼ãªãã·ã§ã³, ããã©ã«ã㯠<literal>true</literal> ï¼ï¼ <literal>lazy=\"false\"</literal> ã¨è¨å®ããã¨ãé
延ãã§ããã使ç¨ã§ãã¾ããã"
+
+#: index.docbook:1891
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this component do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr "åãµãã¯ã©ã¹ã§ã¯ãæ°¸ç¶ããããã£ã¨ãµãã¯ã©ã¹ãå®ç¾©ãã¾ãã <literal><version></literal> 㨠<literal><id></literal> ããããã£ã¯ã ã«ã¼ãã¯ã©ã¹ããç¶æ¿ãããã¨ä»®å®ããã¾ãã é層æ§é ã«ããããµãã¯ã©ã¹ã¯ã ã¦ãã¼ã¯ãª <literal>discriminator-value</literal> ãå®ç¾©ããªããã°ãªãã¾ããã noneãæå®ãããã¨ãå®å
¨ä¿®é£¾ãããJavaã¯ã©ã¹åã使ããã¾ãã"
+
+#: index.docbook:1899, index.docbook:1975
+msgid "<literal>unique</literal> (optional - defaults to <literal>false</literal>): Specifies that a unique constraint exists upon all mapped columns of the component."
+msgstr "ç¶æ¿ã®ãããã³ã°ã«é¢ããæ
å ±ã¯ <xref linkend=\"inheritance\"/> ãè¦ã¦ãã ããã"
+
+#: index.docbook:1908
+msgid "The child <literal><property></literal> tags map properties of the child class to table columns."
+msgstr "joined-subclass"
+
+#: index.docbook:1913
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr "ãã1ã¤ã®æ¹æ³ã¨ãã¦ãåãµãã¯ã©ã¹ãèªèº«ã®ãã¼ãã«ã¸ãããã³ã°ãããã¨ãã§ãã¾ã (table-per-subclass mapping strategy)ã ç¶æ¿ããç¶æ
ã¯ã¹ã¼ãã¼ã¯ã©ã¹ã®ãã¼ãã«ã使ã£ãçµåã§æ¤ç´¢ãã¾ãã <literal><joined-subclass></literal> è¦ç´ ã使ç¨ãã¾ãã"
+
+#: index.docbook:1919
+msgid "The <literal><dynamic-component></literal> element allows a <literal>Map</literal> to be mapped as a component, where the property names refer to keys of the map, see <xref linkend=\"components-dynamic\"/>."
+msgstr ""
+ "<![CDATA[<joined-subclass
+\n"
+ " name=\"ClassName\"
+\n"
+ " table=\"tablename\"
+\n"
+ " proxy=\"ProxyInterface\"
+\n"
+ " lazy=\"true|false\"
+\n"
+ " dynamic-update=\"true|false\"
+\n"
+ " dynamic-insert=\"true|false\"
+\n"
+ " schema=\"schema\"
+\n"
+ " catalog=\"catalog\"
+\n"
+ " extends=\"SuperclassName\"
+\n"
+ " persister=\"ClassName\"
+\n"
+ " subselect=\"SQL expression\"
+\n"
+ " entity-name=\"EntityName\"
+\n"
+ " node=\"element-name\">
+\n"
+ "
+\n"
+ " <key .... >
+\n"
+ "
+\n"
+ " <property .... />
+\n"
+ " .....
+\n"
+ "</joined-subclass>]]>"
+
+#: index.docbook:1928
+msgid "properties"
+msgstr "<literal>name</literal>ï¼ãµãã¯ã©ã¹ã®å®å
¨ä¿®é£¾ãããã¯ã©ã¹åã"
+
+#: index.docbook:1930
+msgid "The <literal><properties></literal> element allows the definition of a named, logical grouping of properties of a class. The most important use of the construct is that it allows a combination of properties to be the target of a <literal>property-ref</literal>. It is also a convenient way to define a multi-column unique constraint."
+msgstr "<literal>table</literal> :ãµãã¯ã©ã¹ãã¼ãã«ã®ååã"
+
+#: index.docbook:1946
+msgid ""
+ "<![CDATA[<properties\n"
+ " name=\"logicalName\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</properties>]]>"
+msgstr "<literal>proxy</literal> (ãªãã·ã§ã³): é
延åæåãããã·ã«ä½¿ç¨ããã¯ã©ã¹ãã¤ã³ã¿ã¼ãã§ã¤ã¹ãæå®ãã¾ãã"
+
+#: index.docbook:1949
+msgid "<literal>name</literal>: The logical name of the grouping - <emphasis>not</emphasis> an actual property name."
+msgstr "<literal>lazy</literal> (ãªãã·ã§ã³, ããã©ã«ã㯠<literal>true</literal> ): <literal>lazy=\"false\"</literal> ã¨ããã¨ãé
延ãã§ããã使ç¨ã§ãã¾ããã"
+
+#: index.docbook:1967
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to these properties do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when these properties are dirty."
+msgstr "ç¶æ¿ã®ãããã³ã°ã«é¢ããæ
å ±ã¯ <xref linkend=\"inheritance\"/> ãè¦ã¦ãã ããã"
+
+#: index.docbook:1984
+msgid "For example, if we have the following <literal><properties></literal> mapping:"
+msgstr "3ã¤ç®ã®é¸æè¢ã¯ãç¶æ¿é層ã®å
·è±¡ã¯ã©ã¹ã®ã¿ããã¼ãã«ã«ãããã³ã°ãããã¨ã§ã (the table-per-concrete-classæ¦ç¥)ã ããããã®ãã¼ãã«ã¯ç¶æ¿ã®ç¶æ
ãå«ããã¹ã¦ã®ã¯ã©ã¹ã®æ°¸ç¶ç¶æ
ãå®ç¾©ãã¾ãã Hibernateã§ã¯ãã®æ§ãªç¶æ¿é層ãå¿
ãããå¿
è¦ã§ã¯ããã¾ããã åç´ã«ããããã®ã¯ã©ã¹ãã å¥ã
ã® <literal><class></literal> 宣è¨ã使ã£ã¦ãããã³ã°ãããã¨ãã§ãã¾ãã ãããããªã¢ã¼ãã£ãã¯ãªé¢é£(ä¾ãã° é層ã®ã¹ã¼ãã¼ã¯ã©ã¹ã¸ã®é¢é£)ã使ããããªãã <literal><union-subclass></literal> ãããã³ã°ã使ãå¿
è¦ãããã¾ãã"
+
+#: index.docbook:1988
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"personNumber\"/>\n"
+ " ...\n"
+ " <properties name=\"name\"\n"
+ " unique=\"true\" update=\"false\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </properties>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<union-subclass
+\n"
+ " name=\"ClassName\"
+\n"
+ " table=\"tablename\"
+\n"
+ " proxy=\"ProxyInterface\"
+\n"
+ " lazy=\"true|false\"
+\n"
+ " dynamic-update=\"true|false\"
+\n"
+ " dynamic-insert=\"true|false\"
+\n"
+ " schema=\"schema\"
+\n"
+ " catalog=\"catalog\"
+\n"
+ " extends=\"SuperclassName\"
+\n"
+ " abstract=\"true|false\"
+\n"
+ " persister=\"ClassName\"
+\n"
+ " subselect=\"SQL expression\"
+\n"
+ " entity-name=\"EntityName\"
+\n"
+ " node=\"element-name\">
+\n"
+ "
+\n"
+ " <property .... />
+\n"
+ " .....
+\n"
+ "</union-subclass>]]>"
+
+#: index.docbook:1990
+msgid "Then we might have some legacy data association which refers to this unique key of the <literal>Person</literal> table, instead of to the primary key:"
+msgstr "<literal>name</literal>ï¼ãµãã¯ã©ã¹ã®å®å
¨ä¿®é£¾ãããã¯ã©ã¹åã"
+
+#: index.docbook:1995
+msgid ""
+ "<![CDATA[<many-to-one name=\"person\"\n"
+ " class=\"Person\" property-ref=\"name\">\n"
+ " <column name=\"firstName\"/>\n"
+ " <column name=\"initial\"/>\n"
+ " <column name=\"lastName\"/>\n"
+ "</many-to-one>]]>"
+msgstr "<literal>table</literal> :ãµãã¯ã©ã¹ãã¼ãã«ã®ååã"
+
+#: index.docbook:1997
+msgid "We don't recommend the use of this kind of thing outside the context of mapping legacy data."
+msgstr "<literal>proxy</literal> (ãªãã·ã§ã³): é
延åæåãããã·ã«ä½¿ç¨ããã¯ã©ã¹ãã¤ã³ã¿ã¼ãã§ã¤ã¹ãæå®ãã¾ãã"
+
+#: index.docbook:2005
+msgid "subclass"
+msgstr "<literal>lazy</literal> (ãªãã·ã§ã³, ããã©ã«ã㯠<literal>true</literal> ): <literal>lazy=\"false\"</literal> ã¨ããã¨ãé
延ãã§ããã使ç¨ã§ãã¾ããã"
+
+#: index.docbook:2007
+msgid "Finally, polymorphic persistence requires the declaration of each subclass of the root persistent class. For the table-per-class-hierarchy mapping strategy, the <literal><subclass></literal> declaration is used."
+msgstr "ãã®ãããã³ã°æ¦ç¥ã§ã¯èå¥ã«ã©ã ããã¼ã«ã©ã ã¯å¿
è¦ããã¾ããã"
+
+#: index.docbook:2020
+msgid ""
+ "<![CDATA[<subclass\n"
+ " name=\"ClassName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " extends=\"SuperclassName\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</subclass>]]>"
+msgstr "ç¶æ¿ã®ãããã³ã°ã«é¢ããæ
å ±ã¯ <xref linkend=\"inheritance\"/> ãè¦ã¦ãã ããã"
+
+#: index.docbook:2023, index.docbook:2081, index.docbook:2144
+msgid "<literal>name</literal>: The fully qualified class name of the subclass."
+msgstr "join"
+
+#: index.docbook:2028
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses."
+msgstr "<literal><join></literal> è¦ç´ ã使ããã¨ã§ã ï¼ã¤ã®ã¯ã©ã¹ã®ããããã£ãããã¤ãã®ãã¼ãã«ã«ãããã³ã°ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:2034, index.docbook:2091, index.docbook:2154
+msgid "<literal>proxy</literal> (optional): Specifies a class or interface to use for lazy initializing proxies."
+msgstr ""
+ "<![CDATA[<join
+\n"
+ " table=\"tablename\"
+\n"
+ " schema=\"owner\"
+\n"
+ " catalog=\"catalog\"
+\n"
+ " fetch=\"join|select\"
+\n"
+ " inverse=\"true|false\"
+\n"
+ " optional=\"true|false\">
+\n"
+ "
+\n"
+ " <key ... />
+\n"
+ "
+\n"
+ " <property ... />
+\n"
+ " ...
+\n"
+ "</join>]]>"
+
+#: index.docbook:2040, index.docbook:2097, index.docbook:2160
+msgid "<literal>lazy</literal> (optional, defaults to <literal>true</literal>): Setting <literal>lazy=\"false\"</literal> disables the use of lazy fetching."
+msgstr "<literal>table</literal> :çµåãããã¼ãã«ã®åå"
+
+#: index.docbook:2048
+msgid "Each subclass should declare its own persistent properties and subclasses. <literal><version></literal> and <literal><id></literal> properties are assumed to be inherited from the root class. Each subclass in a heirarchy must define a unique <literal>discriminator-value</literal>. If none is specified, the fully qualified Java class name is used."
+msgstr "<literal>schema</literal> (ãªãã·ã§ã³): ã«ã¼ãã® <literal><hibernate-mapping></literal> è¦ç´ ã§æå®ããã¹ãã¼ãåã ãªã¼ãã¼ã©ã¤ããã¾ãã"
+
+#: index.docbook:2056, index.docbook:2114, index.docbook:2172
+msgid "For information about inheritance mappings, see <xref linkend=\"inheritance\"/>."
+msgstr "<literal>catalog</literal> (ãªãã·ã§ã³): ã«ã¼ãã® <literal><hibernate-mapping></literal> è¦ç´ ã§æå®ããã«ã¿ãã°åã ãªã¼ãã¼ã©ã¤ããã¾ãã"
+
+#: index.docbook:2063
+msgid "joined-subclass"
+msgstr "<literal>fetch</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>join</literal> ): <literal>join</literal> ãè¨å®ããå ´åã Hibernateã¯ããã©ã«ãã§ãã¯ã©ã¹ãã¹ã¼ãã¼ã¯ã©ã¹ã§å®ç¾©ããã <literal><join></literal> ãæ¤ç´¢ããã®ã«å
é¨çµåã使ãããµãã¯ã©ã¹ã§å®ç¾©ããã <literal><join></literal> ãæ¤ç´¢ããã®ã«å¤é¨çµåã使ãã¾ãã <literal>select</literal> ãè¨å®ããå ´åã«ã¯ã Hibernateã¯ãµãã¯ã©ã¹ã§å®ç¾©ããã <literal><join></literal> ã®é¸æã«é 次é¸æã使ãã¾ãããã®å ´åã è¡ããµãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã代表ãããã¨ãããã£ãå ´åã«ã®ã¿çºè¡ããã¾ãã å
é¨çµåã¯ã¯ã©ã¹ããã®ã¹ã¼ãã¼ã¯ã©ã¹ã§å®ç¾©ããã <literal><join></literal> ãæ¤ç´¢ ããããã«ä½¿ç¨ãã¾ãã"
+
+#: index.docbook:2065
+msgid "Alternatively, each subclass may be mapped to its own table (table-per-subclass mapping strategy). Inherited state is retrieved by joining with the table of the superclass. We use the <literal><joined-subclass></literal> element."
+msgstr "<literal>inverse</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>false</literal> ): ããå¯è½ã§ããã°ãHibernateã¯ãã®çµåã§å®ç¾©ããã¦ããããããã£ã«å¯¾ã æ¿å
¥ãæ´æ°ãè¡ãã¾ããã"
+
+#: index.docbook:2078
+msgid ""
+ "<![CDATA[<joined-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <key .... >\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</joined-subclass>]]>"
+msgstr "<literal>optional</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>false</literal> ): ããå¯è½ã§ããã°ãHibernateã¯ãã®çµåã§å®ç¾©ãããããããã£ãnullã§ãªãå ´åã«ã®ã¿ è¡ãæ¿å
¥ãããã®ããããã£ã®æ¤ç´¢ã«ã¯å¸¸ã«å¤é¨çµåã使ç¨ãã¾ãã"
+
+#: index.docbook:2086, index.docbook:2149
+msgid "<literal>table</literal>: The name of the subclass table."
+msgstr ""
+ "<![CDATA[<class name=\"Person\"
+\n"
+ " table=\"PERSON\">
+\n"
+ "
+\n"
+ " <id name=\"id\" column=\"PERSON_ID\">...</id>
+\n"
+ "
+\n"
+ " <join table=\"ADDRESS\">
+\n"
+ " <key column=\"ADDRESS_ID\"/>
+\n"
+ " <property name=\"address\"/>
+\n"
+ " <property name=\"zip\"/>
+\n"
+ " <property name=\"country\"/>
+\n"
+ " </join>
+\n"
+ " ...]]>"
+
+#: index.docbook:2105
+msgid "No discriminator column is required for this mapping strategy. Each subclass must, however, declare a table column holding the object identifier using the <literal><key></literal> element. The mapping at the start of the chapter would be re-written as:"
+msgstr "ä»ã¾ã§ä½åº¦ã <literal><key></literal> è¦ç´ ãåºã¦ãã¾ããã ãã®è¦ç´ ã¯æ°ãããã¼ãã«ã¸ã®çµåãå®ç¾©ãããã çµåãã¼ãã«ã§å¤é¨ãã¼ãå®ç¾©ããããã親è¦ç´ ã®ã©ãã«ã§ãç¾ãã ãªãªã¸ãã«ãã¼ãã«ã®ä¸»ãã¼ãåç
§ãã¾ãã"
+
+#: index.docbook:2112
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" table=\"CATS\">\n"
+ " <id name=\"id\" column=\"uid\" type=\"long\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " <property name=\"birthdate\" type=\"date\"/>\n"
+ " <property name=\"color\" not-null=\"true\"/>\n"
+ " <property name=\"sex\" not-null=\"true\"/>\n"
+ " <property name=\"weight\"/>\n"
+ " <many-to-one name=\"mate\"/>\n"
+ " <set name=\"kittens\">\n"
+ " <key column=\"MOTHER\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ " <joined-subclass name=\"DomesticCat\" table=\"DOMESTIC_CATS\">\n"
+ " <key column=\"CAT\"/>\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </joined-subclass>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"eg.Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<key
+\n"
+ " column=\"columnname\"
+\n"
+ " on-delete=\"noaction|cascade\"
+\n"
+ " property-ref=\"propertyName\"
+\n"
+ " not-null=\"true|false\"
+\n"
+ " update=\"true|false\"
+\n"
+ " unique=\"true|false\"
+\n"
+ "/>]]>"
+
+#: index.docbook:2121
+msgid "union-subclass"
+msgstr "<literal>on-delete</literal> (ãªãã·ã§ã³, ããã©ã«ã㯠<literal>noaction</literal>): å¤é¨ãã¼å¶ç´ããã¼ã¿ãã¼ã¹ã¬ãã«ã§ã«ã¹ã±ã¼ãåé¤ãå¯è½ãã©ãããæå®ãã¾ãã"
+
+#: index.docbook:2123
+msgid "A third option is to map only the concrete classes of an inheritance hierarchy to tables, (the table-per-concrete-class strategy) where each table defines all persistent state of the class, including inherited state. In Hibernate, it is not absolutely necessary to explicitly map such inheritance hierarchies. You can simply map each class with a separate <literal><class></literal> declaration. However, if you wish use polymorphic associations (e.g. an association to the superclass of your hierarchy), you need to use the <literal><union-subclass></literal> mapping."
+msgstr "<literal>property-ref</literal> (ãªãã·ã§ã³): ãªãªã¸ãã«ãã¼ãã«ã®ä¸»ãã¼ã§ã¯ãªãã«ã©ã ãåç
§ããå¤é¨ãã¼ãæå®ãã¾ã (ã¬ã¬ã·ã¼ãã¼ã¿ã«å¯¾ãã¦æä¾ããã¾ã)ã"
+
+#: index.docbook:2141
+msgid ""
+ "<![CDATA[<union-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " abstract=\"true|false\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</union-subclass>]]>"
+msgstr "<literal>not-null</literal> (ãªãã·ã§ã³): å¤é¨ãã¼ã«ã©ã ãnullå¤ã許容ããªããã¨ãæå®ãã¾ã (ãã®ãã¨ã¯å¤é¨ãã¼ã主ãã¼ã®ä¸é¨ã§ãããã¨ãæé»çã«ç¤ºãã¾ã)ã"
+
+#: index.docbook:2168
+msgid "No discriminator column or key column is required for this mapping strategy."
+msgstr "column 㨠formula è¦ç´ "
+
+#: index.docbook:2179
+msgid "join"
+msgstr ""
+ "<![CDATA[<column
+\n"
+ " name=\"column_name\"
+\n"
+ " length=\"N\"
+\n"
+ " precision=\"N\"
+\n"
+ " scale=\"N\"
+\n"
+ " not-null=\"true|false\"
+\n"
+ " unique=\"true|false\"
+\n"
+ " unique-key=\"multicolumn_unique_key_name\"
+\n"
+ " index=\"index_name\"
+\n"
+ " sql-type=\"sql_type_name\"
+\n"
+ " check=\"SQL expression\"
+\n"
+ " default=\"SQL expression\"/>]]>"
+
+#: index.docbook:2181
+msgid "Using the <literal><join></literal> element, it is possible to map properties of one class to several tables, when there's a 1-to-1 relationship between the tables."
+msgstr "<![CDATA[<formula>SQL expression</formula>]]>"
+
+#: index.docbook:2195
+msgid ""
+ "<![CDATA[<join\n"
+ " table=\"tablename\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " fetch=\"join|select\"\n"
+ " inverse=\"true|false\"\n"
+ " optional=\"true|false\">\n"
+ "\n"
+ " <key ... />\n"
+ "\n"
+ " <property ... />\n"
+ " ...\n"
+ "</join>]]>"
+msgstr "åãããããã£ãé¢é£ã®ãããã³ã°ã®ä¸ã§ã <literal>column</literal> 㨠<literal>formula</literal> å±æ§ãçµã¿åããããã¨ãã§ãã¾ãã ä¾ãã°ãç¹æ®ãªçµåæ¡ä»¶ãªã©ã§ãã"
+
+#: index.docbook:2199
+msgid "<literal>table</literal>: The name of the joined table."
+msgstr ""
+ "<![CDATA[<many-to-one name=\"homeAddress\" class=\"Address\"
+\n"
+ " insert=\"false\" update=\"false\">
+\n"
+ " <column name=\"person_id\" not-null=\"true\" length=\"10\"/>
+\n"
+ " <formula>'MAILING'</formula>
+\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:2216
+msgid "<literal>fetch</literal> (optional - defaults to <literal>join</literal>): If set to <literal>join</literal>, the default, Hibernate will use an inner join to retrieve a <literal><join></literal> defined by a class or its superclasses and an outer join for a <literal><join></literal> defined by a subclass. If set to <literal>select</literal> then Hibernate will use a sequential select for a <literal><join></literal> defined on a subclass, which will be issued only if a row turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a <literal><join></literal> defined by the class and its superclasses."
+msgstr "<![CDATA[<import class=\"java.lang.Object\" rename=\"Universe\"/>]]>"
+
+#: index.docbook:2229
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will not try to insert or update the properties defined by this join."
+msgstr ""
+ "<![CDATA[<import
+\n"
+ " class=\"ClassName\"
+\n"
+ " rename=\"ShortName\"
+\n"
+ "/>]]>"
+
+#: index.docbook:2236
+msgid "<literal>optional</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will insert a row only if the properties defined by this join are non-null and will always use an outer join to retrieve the properties."
+msgstr "<literal>class</literal>ï¼Javaã¯ã©ã¹ã®å®å
¨ä¿®é£¾ãããã¯ã©ã¹åã"
+
+#: index.docbook:2245
+msgid "For example, the address information for a person can be mapped to a separate table (while preserving value type semantics for all properties):"
+msgstr "<literal>rename</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ãã¯ä¿®é£¾ããã¦ããªãã¯ã©ã¹åï¼ï¼ ã¯ã¨ãªè¨èªã§ä½¿ãããååã"
+
+#: index.docbook:2250
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " table=\"PERSON\">\n"
+ "\n"
+ " <id name=\"id\" column=\"PERSON_ID\">...</id>\n"
+ "\n"
+ " <join table=\"ADDRESS\">\n"
+ " <key column=\"ADDRESS_ID\"/>\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </join>\n"
+ " ...]]>"
+msgstr "<title>any</title>"
+
+#: index.docbook:2252
+msgid "This feature is often only useful for legacy data models, we recommend fewer tables than classes and a fine-grained domain model. However, it is useful for switching between inheritance mapping strategies in a single hierarchy, as explained later."
+msgstr "ããããã£ãããã³ã°ã«ã¯ããã«ãã1ã¤ã®åãããã¾ãã <literal><any></literal> ãããã³ã°è¦ç´ ã¯ã è¤æ°ã®ãã¼ãã«ããã¯ã©ã¹ã¸ã®ããªã¢ã¼ãã£ãã¯ãªé¢é£ãå®ç¾©ãã¾ãã ãã®åã®ãããã³ã°ã«ã¯å¿
ãè¤æ°ã®ã«ã©ã ãå¿
è¦ã§ãã1çªç®ã®ã«ã©ã ã¯é¢é£ã¨ã³ãã£ãã£ã®åãä¿æãã¾ãã æ®ãã®ã«ã©ã ã¯èå¥åãä¿æãã¾ãããã®ç¨®é¡ã®é¢é£ã«ã¯å¤é¨ãã¼å¶ç´ãæå®ãããã¨ã¯ã§ãã¾ããã ãã®ããããã¯æã使ããããã¨ã®ãªãï¼ããªã¢ã¼ãã£ãã¯ãªï¼é¢é£ã®ãããã³ã°æ¹æ³ã§ãã é常ã«ç¹å¥ãªå ´åï¼ä¾ãã°ãæ¤æ»ãã°ãã¦ã¼ã¶ã»ãã·ã§ã³ãã¼ã¿ãªã©)ã«éã£ã¦ãããã使ãã¹ãã§ãã"
+
+#: index.docbook:2262
+msgid "<title>key</title>"
+msgstr "<literal>meta-type</literal> ã«ããã ã¢ããªã±ã¼ã·ã§ã³ã¯ã«ã¹ã¿ã åãæå®ã§ãã¾ãããã®ã«ã¹ã¿ã å㯠ãã¼ã¿ãã¼ã¹ã«ã©ã ã®å¤ãã<literal>id-type</literal> ã§æå®ããåã® èå¥åããããã£ãæã£ãæ°¸ç¶ã¯ã©ã¹ã¸ãããã³ã°ãã¾ãã meta-typeã®å¤ããã¯ã©ã¹åã¸ã®ãããã³ã°ãæå®ããªããã°ãªãã¾ããã"
+
+#: index.docbook:2264
+msgid "We've seen the <literal><key></literal> element crop up a few times now. It appears anywhere the parent mapping element defines a join to a new table, and defines the foreign key in the joined table, that references the primary key of the original table."
+msgstr ""
+ "<![CDATA[<any name=\"being\" id-type=\"long\" meta-type=\"string\">
+\n"
+ " <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>
+\n"
+ " <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>
+\n"
+ " <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>
+\n"
+ " <column name=\"table_name\"/>
+\n"
+ " <column name=\"id\"/>
+\n"
+ "</any>]]>"
+
+#: index.docbook:2280
+msgid ""
+ "<![CDATA[<key\n"
+ " column=\"columnname\"\n"
+ " on-delete=\"noaction|cascade\"\n"
+ " property-ref=\"propertyName\"\n"
+ " not-null=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ "/>]]>"
+msgstr ""
+ "<![CDATA[<any
+\n"
+ " name=\"propertyName\"
+\n"
+ " id-type=\"idtypename\"
+\n"
+ " meta-type=\"metatypename\"
+\n"
+ " cascade=\"cascade_style\"
+\n"
+ " access=\"field|property|ClassName\"
+\n"
+ " optimistic-lock=\"true|false\"
+\n"
+ ">
+\n"
+ " <meta-value ... />
+\n"
+ " <meta-value ... />
+\n"
+ " .....
+\n"
+ " <column .... />
+\n"
+ " <column .... />
+\n"
+ " .....
+\n"
+ "</any>]]>"
+
+#: index.docbook:2291
+msgid "<literal>on-delete</literal> (optional, defaults to <literal>noaction</literal>): Specifies whether the foreign key constraint has database-level cascade delete enabled."
+msgstr "<literal>id-type</literal>ï¼èå¥åã®åã"
+
+#: index.docbook:2298
+msgid "<literal>property-ref</literal> (optional): Specifies that the foreign key refers to columns that are not the primary key of the orginal table. (Provided for legacy data.)"
+msgstr "<literal>meta-type</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>string</literal> ï¼ï¼ ãã£ã¹ã¯ãªããã¼ã¿ãããã³ã°ã§è¨±ãããå"
+
+#: index.docbook:2305
+msgid "<literal>not-null</literal> (optional): Specifies that the foreign key columns are not nullable (this is implied whenever the foreign key is also part of the primary key)."
+msgstr "<literal>cascade</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>none</literal> ï¼ï¼ ã«ã¹ã±ã¼ãã®ã¹ã¿ã¤ã«ã"
+
+#: index.docbook:2312
+msgid "<literal>update</literal> (optional): Specifies that the foreign key should never be updated (this is implied whenever the foreign key is also part of the primary key)."
+msgstr "<literal>access</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal> ï¼ï¼ ããããã£ã®å¤ã¸ã®ã¢ã¯ã»ã¹ã«Hibernateã使ãæ¦ç¥ã"
+
+#: index.docbook:2319
+msgid "<literal>unique</literal> (optional): Specifies that the foreign key should have a unique constraint (this is implied whenever the foreign key is also the primary key)."
+msgstr "<literal>optimistic-lock</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal> ): ãã®ããããã£ã®æ´æ°ã«æ¥½è¦³ããã¯ã®åå¾ãè¦æ±ãããã©ãããæå®ãã¾ãã è¨ãæããã°ããã®ããããã£ããã¼ãã£ã§ããã¨ãã«ãã¼ã¸ã§ã³ãå¢ããã¹ãããå®ç¾©ãã¾ãã"
+
+#: index.docbook:2327
+msgid "We recommend that for systems where delete performance is important, all keys should be defined <literal>on-delete=\"cascade\"</literal>, and Hibernate will use a database-level <literal>ON CASCADE DELETE</literal> constraint, instead of many individual <literal>DELETE</literal> statements. Be aware that this feature bypasses Hibernate's usual optimistic locking strategy for versioned data."
+msgstr "Hibernateã®å"
+
+#: index.docbook:2335
+msgid "The <literal>not-null</literal> and <literal>update</literal> attributes are useful when mapping a unidirectional one to many association. If you map a unidirectional one to many to a non-nullable foreign key, you <emphasis>must</emphasis> declare the key column using <literal><key not-null=\"true\"></literal>."
+msgstr "ã¨ã³ãã£ãã£ã¨å¤"
+
+#: index.docbook:2345
+msgid "column and formula elements"
+msgstr "æ°¸ç¶ãµã¼ãã¹ã«é¢ããæ§ã
ãªJavaè¨èªã¬ãã«ã®ãªãã¸ã§ã¯ãã®æ¯ãèããç解ããããã«ã¯ã ãªãã¸ã§ã¯ãã2ã¤ã®ã°ã«ã¼ãã«åããå¿
è¦ãããã¾ãï¼"
+
+#: index.docbook:2346
+msgid "Any mapping element which accepts a <literal>column</literal> attribute will alternatively accept a <literal><column></literal> subelement. Likewise, <literal><formula></literal> is an alternative to the <literal>formula</literal> attribute."
+msgstr "<emphasis> ã¨ã³ãã£ãã£</emphasis> ã¯ã¨ã³ãã£ãã£ã¸ã®åç
§ãä¿æããã ä»ã®ãã¹ã¦ã®ãªãã¸ã§ã¯ãããç¬ç«ãã¦åå¨ãã¾ãã åç
§ãããªããªãã¸ã§ã¯ããã¬ãã¼ã¸ã³ã¬ã¯ãããã¦ãã¾ãæ§è³ªãæã¤é常ã®Javaã¢ãã«ã¨ã ãããæ¯ã¹ã¦ã¿ã¦ãã ããã ï¼è¦ªã¨ã³ãã£ãã£ããåã¸ãã»ã¼ãã¨åé¤ã <emphasis>ã«ã¹ã±ã¼ã</emphasis> ãããããã¨ãé¤ãã¦ï¼ ã¨ã³ãã£ãã£ã¯æ示çã«ã»ã¼ãã¾ãã¯åé¤ãããªããã°ãªãã¾ããã ããã¯å°éå¯è½æ§ã«ãããªãã¸ã§ã¯ãæ°¸ç¶åã®ODMGã¢ãã«ã¨ã¯ç°ãªã£ã¦ãã¾ãã 大è¦æ¨¡ãªã·ã¹ãã ã§ã¢ããªã±ã¼ã·ã§ã³ãªãã¸ã§ã¯ããæ®éã©ã®ããã«ä½¿ããããã«ããå¯æ¥ã«å¯¾å¿ãã¾ãã ã¨ã³ãã£ãã£ã¯å¾ªç°ã¨åç
§ã®å
±æããµãã¼ããã¾ãã ã¾ããããã¯ãã¼ã¸ã§ã³ä»ããããã¨ãã§ãã¾ãã"
+
+#: index.docbook:2352
+msgid ""
+ "<![CDATA[<column\n"
+ " name=\"column_name\"\n"
+ " length=\"N\"\n"
+ " precision=\"N\"\n"
+ " scale=\"N\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " unique-key=\"multicolumn_unique_key_name\"\n"
+ " index=\"index_name\"\n"
+ " sql-type=\"sql_type_name\"\n"
+ " check=\"SQL expression\"\n"
+ " default=\"SQL expression\"/>]]>"
+msgstr "ã¨ã³ãã£ãã£ã®æ°¸ç¶ç¶æ
ã¯ä»ã®ã¨ã³ãã£ãã£ã <emphasis>å¤</emphasis> åã® ã¤ã³ã¹ã¿ã³ã¹ã¸ã®åç
§ããæ§æããã¾ãã å¤ã¯ããªããã£ããã³ã¬ã¯ã·ã§ã³(ã³ã¬ã¯ã·ã§ã³ã®å
é¨ã§ã¯ãªã)ã ã³ã³ãã¼ãã³ããä¸å¤ãªãã¸ã§ã¯ãã§ãã ã¨ã³ãã£ãã£ã¨ã¯éããå¤ã¯ï¼ç¹ã«ã³ã¬ã¯ã·ã§ã³ã¨ã³ã³ãã¼ãã³ãã«ããã¦ï¼ã å°éå¯è½æ§ã«ããæ°¸ç¶åãåé¤ã <emphasis>è¡ããã¾ã</emphasis> ã å¤ãªãã¸ã§ã¯ãï¼ã¨ããªããã£ãï¼ã¯ãå
å«ããã¨ã³ãã£ãã£ã¨ä¸ç·ã«æ°¸ç¶åãåé¤ãè¡ãããã®ã§ã ããããç¬ç«ã«ãã¼ã¸ã§ã³ä»ããããã¨ã¯ã§ãã¾ããã å¤ã«ã¯ç¬ç«ããã¢ã¤ãã³ãã£ãã£ããªãã®ã§ã è¤æ°ã®ã¨ã³ãã£ãã£ãã³ã¬ã¯ã·ã§ã³ããããå
±æãããã¨ã¯ã§ãã¾ããã"
+
+#: index.docbook:2354
+msgid "<![CDATA[<formula>SQL expression</formula>]]>"
+msgstr "ããã¾ã§ãæ°¸ç¶ã¯ã©ã¹ãã¨ããè¨èãã¨ã³ãã£ãã£ã®æå³ã§ä½¿ã£ã¦ãã¾ããã ããããããããã¦ããã¾ãã å³å¯ã«è¨ãã¨ãæ°¸ç¶ç¶æ
ãæã¤ã¦ã¼ã¶å®ç¾©ã®ã¯ã©ã¹ã®ãã¹ã¦ã ã¨ã³ãã£ãã£ã¨ããããã§ã¯ããã¾ããã <emphasis>ã³ã³ãã¼ãã³ã</emphasis> ã¯å¤ã®ã»ãã³ãã£ã¯ã¹ãæã¤ã¦ã¼ã¶å®ç¾©ã¯ã©ã¹ã§ãã <literal>java.lang.String</literal> åã®ããããã£ãã¾ãå¤ã®ã»ãã³ãã£ã¯ã¹ãæã¡ã¾ãã å®ç¾©ãããªããJDKã§æä¾ããã¦ãããã¹ã¦ã®Javaã®å(ã¯ã©ã¹)ãå¤ã®ã»ãã³ãã£ã¯ã¹ãæã¤ã¨ããã¾ãã ä¸æ¹ã¦ã¼ã¶å®ç¾©åã¯ãã¨ã³ãã£ãã£ãå¤åã®ã»ãã³ãã£ã¯ã¹ã¨ã¨ãã«ãããã³ã°ã§ãã¾ãã ãã®æ±ºå®ã¯ã¢ããªã±ã¼ã·ã§ã³éçºè
次第ã§ãã ãã®ã¯ã©ã¹ã®ï¼ã¤ã®ã¤ã³ã¹ã¿ã³ã¹ã¸ã®å
񑆇
§ã¯ã ãã¡ã¤ã³ã¢ãã«å
ã®ã¨ã³ãã£ãã£ã¯ã©ã¹ã«å¯¾ã!
ãè¯ããã³ãã«ãªãã¾ãã ä¸æ¹åæéç´ãéç´ã¯ãé常å¤åã¸å¤æããã¾ãã"
+
+#: index.docbook:2356
+msgid "<literal>column</literal> and <literal>formula</literal> attributes may even be combined within the same property or association mapping to express, for example, exotic join conditions."
+msgstr "æ¬ããã¥ã¡ã³ããéãã¦ãä½åº¦ããã®æ¦å¿µãåãä¸ãã¾ãã"
+
+#: index.docbook:2362
+msgid ""
+ "<![CDATA[<many-to-one name=\"homeAddress\" class=\"Address\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"person_id\" not-null=\"true\" length=\"10\"/>\n"
+ " <formula>'MAILING'</formula>\n"
+ "</many-to-one>]]>"
+msgstr "Javaåã®ã·ã¹ãã (ãããã¯éçºè
ãå®ç¾©ããã¨ã³ãã£ãã£ã¨å¤å)ã SQL/ãã¼ã¿ãã¼ã¹åã®ã·ã¹ãã ã«ãããã³ã°ãããã¨ã¯é£ããã§ãã Hibernateã¯ï¼ã¤ã®ã·ã¹ãã ã®æ¶ãæ©ãæä¾ãã¾ãã ã¨ã³ãã£ãã£ã«å¯¾ãã¦ã¯ <literal><class></literal> ã <literal><subclass></literal> ãªã©ã使ç¨ãã¾ãã å¤åã«å¯¾ãã¦ã¯ <literal><property></literal> ã <literal><component></literal> ãªã©ããé常 <literal>type</literal> ã¨ã¨ãã«ä½¿ãã¾ãã ãã®å±æ§ã®å¤ã¯Hibernateã® <emphasis>ãããã³ã°å</emphasis> ã®ååã§ãã Hibernateã¯(æ¨æºJDKã®å¤åã«å¯¾ãã¦)å¤ãã®èªç±ãªãããã³ã°ãæä¾ãã¾ãã å¾ã§è¦ãããã«ãèªèº«ã®ãããã³ã°åãè¨è¿°ããåæ§ã«ã«ã¹ã¿ã ã®å¤ææ¦ç¥ãå®è£
ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:2367
+msgid "import"
+msgstr "ã³ã¬ã¯ã·ã§ã³ãé¤ãçµã¿è¾¼ã¿ã®Hibernateã®åã¯ãã¹ã¦ãnullã»ãã³ãã£ã¯ã¹ããµãã¼ããã¾ãã"
+
+#: index.docbook:2369
+msgid "Suppose your application has two persistent classes with the same name, and you don't want to specify the fully qualified (package) name in Hibernate queries. Classes may be \"imported\" explicitly, rather than relying upon <literal>auto-import=\"true\"</literal>. You may even import classes and interfaces that are not explicitly mapped."
+msgstr "åºæ¬çãªå"
+
+#: index.docbook:2376
+msgid "<![CDATA[<import class=\"java.lang.Object\" rename=\"Universe\"/>]]>"
+msgstr "çµã¿è¾¼ã¿ã® <emphasis>åºæ¬çãªãããã³ã°å</emphasis> ã¯å¤§ã¾ãã«ä»¥ä¸ã®ããã«åãããã¾ãã"
+
+#: index.docbook:2383
+msgid ""
+ "<![CDATA[<import\n"
+ " class=\"ClassName\"\n"
+ " rename=\"ShortName\"\n"
+ "/>]]>"
+msgstr "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+
+#: index.docbook:2386
+msgid "<literal>class</literal>: The fully qualified class name of of any Java class."
+msgstr "Javaã®ããªããã£ããã©ããã¼ã¯ã©ã¹ããé©åãªï¼ãã³ãã¼åºæã®ï¼ SQLã«ã©ã åã¸ã®åãããã³ã°ã <literal>boolean, yes_no</literal> 㨠<literal>true_false</literal> ã¯ã ãã¹ã¦Javaã® <literal>boolean</literal> ã¾ã㯠<literal>java.lang.Boolean</literal> ã®ä»£æ¿ã¨ã³ã³ã¼ãã§ãã"
+
+#: index.docbook:2391
+msgid "<literal>rename</literal> (optional - defaults to the unqualified class name): A name that may be used in the query language."
+msgstr "string"
+
+#: index.docbook:2402
+msgid "<title>any</title>"
+msgstr "<literal>java.lang.String</literal> ãã <literal>VARCHAR</literal> ï¼ã¾ãã¯Oracleã® <literal>VARCHAR2</literal> ï¼ã¸ã®åãããã³ã°ã"
+
+#: index.docbook:2404
+msgid "There is one further type of property mapping. The <literal><any></literal> mapping element defines a polymorphic association to classes from multiple tables. This type of mapping always requires more than one column. The first column holds the type of the associated entity. The remaining columns hold the identifier. It is impossible to specify a foreign key constraint for this kind of association, so this is most certainly not meant as the usual way of mapping (polymorphic) associations. You should use this only in very special cases (eg. audit logs, user session data, etc)."
+msgstr "date, time, timestamp"
+
+#: index.docbook:2414
+msgid "The <literal>meta-type</literal> attribute lets the application specify a custom type that maps database column values to persistent classes which have identifier properties of the type specified by <literal>id-type</literal>. You must specify the mapping from values of the meta-type to class names."
+msgstr "<literal>java.util.Date</literal> ã¨ãã®ãµãã¯ã©ã¹ããSQLåã® <literal>DATE</literal>, <literal>TIME</literal> , <literal>TIMESTAMP</literal> ï¼ã¾ãã¯ãããã¨ç価ãªãã®ï¼ ã¸ã®åãããã³ã°ã"
+
+#: index.docbook:2421
+msgid ""
+ "<![CDATA[<any name=\"being\" id-type=\"long\" meta-type=\"string\">\n"
+ " <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>\n"
+ " <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>\n"
+ " <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>\n"
+ " <column name=\"table_name\"/>\n"
+ " <column name=\"id\"/>\n"
+ "</any>]]>"
+msgstr "calendar, calendar_date"
+
+#: index.docbook:2432
+msgid ""
+ "<![CDATA[<any\n"
+ " name=\"propertyName\"\n"
+ " id-type=\"idtypename\"\n"
+ " meta-type=\"metatypename\"\n"
+ " cascade=\"cascade_style\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ ">\n"
+ " <meta-value ... />\n"
+ " <meta-value ... />\n"
+ " .....\n"
+ " <column .... />\n"
+ " <column .... />\n"
+ " .....\n"
+ "</any>]]>"
+msgstr "<literal>java.util.Calendar</literal> ããSQLå ã®ã <literal>TIMESTAMP</literal> , <literal>DATE</literal> (ã¾ãã¯ãããã¨ç価ãªãã®ï¼ã¸ã®åãããã³ã°ã"
+
+#: index.docbook:2435
+msgid "<literal>name</literal>: the property name."
+msgstr "big_decimal, big_integer"
+
+#: index.docbook:2440
+msgid "<literal>id-type</literal>: the identifier type."
+msgstr "<literal>java.math.BigDecimal</literal> 㨠<literal>java.math.BigInteger</literal> ãã <literal>NUMERIC</literal>ï¼ã¾ãã¯Oracleã® <literal>NUMBER</literal> ï¼ã¸ã®åãããã³ã°ã"
+
+#: index.docbook:2445
+msgid "<literal>meta-type</literal> (optional - defaults to <literal>string</literal>): Any type that is allowed for a discriminator mapping."
+msgstr "locale, timezone, currency"
+
+#: index.docbook:2451
+msgid "<literal>cascade</literal> (optional- defaults to <literal>none</literal>): the cascade style."
+msgstr "<literal>java.util.Locale</literal> , <literal>java.util.TimeZone</literal> , <literal>java.util.Currency</literal> ãã <literal>VARCHAR</literal> ï¼ã¾ãã¯Oracleã® <literal>VARCHAR2</literal> ï¼ã¸ã®åãããã³ã°ã <literal>Locale</literal> 㨠<literal>Currency</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ã ãããã®ISOã³ã¼ãã«ãããã³ã°ããã¾ãã <literal>TimeZone</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ã ãããã® <literal>ID</literal> ã«ãããã³ã°ããã¾ãã"
+
+#: index.docbook:2463
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, define if a version increment should occur if this property is dirty."
+msgstr "<literal>java.lang.Class</literal> ãã <literal>VARCHAR</literal> ï¼ã¾ãã¯Oracleã® <literal>VARCHAR2</literal> ï¼ã¸ã®åãããã³ã°ã <literal>Class</literal> ã¯ãã®å®å
¨ä¿®é£¾ãããååã«ãããã³ã°ããã¾ãã"
+
+#: index.docbook:2478
+msgid "Hibernate Types"
+msgstr "binary"
+
+#: index.docbook:2481
+msgid "Entities and values"
+msgstr "ãã¤ãé
åã¯ãé©åãªSQLã®ãã¤ããªåã«ãããã³ã°ããã¾ãã"
+
+#: index.docbook:2483
+msgid "To understand the behaviour of various Java language-level objects with respect to the persistence service, we need to classify them into two groups:"
+msgstr "text"
+
+#: index.docbook:2488
+msgid "An <emphasis>entity</emphasis> exists independently of any other objects holding references to the entity. Contrast this with the usual Java model where an unreferenced object is garbage collected. Entities must be explicitly saved and deleted (except that saves and deletions may be <emphasis>cascaded</emphasis> from a parent entity to its children). This is different from the ODMG model of object persistence by reachablity - and corresponds more closely to how application objects are usually used in large systems. Entities support circular and shared references. They may also be versioned."
+msgstr "é·ãJavaæååã¯ãSQLã® <literal>CLOB</literal> ã¾ã㯠<literal>TEXT</literal> åã«ãããã³ã°ããã¾ãã"
+
+#: index.docbook:2499
+msgid "An entity's persistent state consists of references to other entities and instances of <emphasis>value</emphasis> types. Values are primitives, collections (not what's inside a collection), components and certain immutable objects. Unlike entities, values (in particular collections and components) <emphasis>are</emphasis> persisted and deleted by reachability. Since value objects (and primitives) are persisted and deleted along with their containing entity they may not be independently versioned. Values have no independent identity, so they cannot be shared by two entities or collections."
+msgstr "serializable"
+
+#: index.docbook:2510
+msgid "Up until now, we've been using the term \"persistent class\" to refer to entities. We will continue to do that. Strictly speaking, however, not all user-defined classes with persistent state are entities. A <emphasis>component</emphasis> is a user defined class with value semantics. A Java property of type <literal>java.lang.String</literal> also has value semantics. Given this definition, we can say that all types (classes) provided by the JDK have value type semantics in Java, while user-defined types may be mapped with entity or value type semantics. This decision is up to the application developer. A good hint for an entity class in a domain model are shared references to a single instance of that class, while composition or aggregation usually translates to a value type."
+msgstr "ã·ãªã¢ã©ã¤ãºå¯è½ãªJavaåã¯ãé©åãªSQLã®ãã¤ããªåã«ãããã³ã°ããã¾ãã ããã©ã«ãã§åºæ¬åã§ã¯ãªãã·ãªã¢ã©ã¤ãºå¯è½ãªJavaã¯ã©ã¹ã ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ååãæå®ãããã¨ã§ã Hibernateã®åã <literal>serializable</literal> ã¨ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:2524
+msgid "We'll revisit both concepts throughout the documentation."
+msgstr "clob, blob"
+
+#: index.docbook:2528
+msgid "The challenge is to map the Java type system (and the developers' definition of entities and value types) to the SQL/database type system. The bridge between both systems is provided by Hibernate: for entities we use <literal><class></literal>, <literal><subclass></literal> and so on. For value types we use <literal><property></literal>, <literal><component></literal>, etc, usually with a <literal>type</literal> attribute. The value of this attribute is the name of a Hibernate <emphasis>mapping type</emphasis>. Hibernate provides many mappings (for standard JDK value types) out of the box. You can write your own mapping types and implement your custom conversion strategies as well, as you'll see later."
+msgstr "JDBCã¯ã©ã¹ <literal>java.sql.Clob</literal> 㨠<literal>java.sql.Blob</literal> ã«å¯¾ããåãããã³ã°ã blobãclobãªãã¸ã§ã¯ãã¯ãã©ã³ã¶ã¯ã·ã§ã³ã®å¤ã§ã¯åå©ç¨ã§ããªãããã ã¢ããªã±ã¼ã·ã§ã³ã«ãã£ã¦ã¯ä¸ä¾¿ããããã¾ããã ï¼ããã«ã¯ãã©ã¤ããµãã¼ããä¸è²«ãã¦ãã¾ãããï¼"
+
+#: index.docbook:2541
+msgid "All built-in Hibernate types except collections support null semantics."
+msgstr "imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary"
+
+#: index.docbook:2548
+msgid "Basic value types"
+msgstr "ã»ã¨ãã©ã®å ´åã«å¯å¤ã§ããJavaã®åã«å¯¾ããåãããã³ã°ã Hibernateã¯ä¸å¤ãªJavaã®åã«å¯¾ãã¦ã¯æé©åãè¡ãã ã¢ããªã±ã¼ã·ã§ã³ã¯ãããä¸å¤ãªãã¸ã§ã¯ãã¨ãã¦æ±ãã¾ãã ä¾ãã° <literal>imm_timestamp</literal> ã¨ãã¦ãããããã¤ã³ã¹ã¿ã³ã¹ã«å¯¾ãã¦ã <literal>Date.setTime()</literal> ãå¼ã³åºãã¦ã¯ãªãã¾ããã ããããã£ã®å¤ãå¤æ´ããã®å¤æ´ãæ°¸ç¶åããããã«ã¯ã ã¢ããªã±ã¼ã·ã§ã³ã¯ããããã£ã«å¯¾ãã¦æ°ãã(åä¸ã§ãªã)ãªãã¸ã§ã¯ããå²ãå½ã¦ãªããã°ãªãã¾ããã"
+
+#: index.docbook:2550
+msgid "The built-in <emphasis>basic mapping types</emphasis> may be roughly categorized into"
+msgstr "ã¨ã³ãã£ãã£ã¨ã³ã¬ã¯ã·ã§ã³ã®ã¦ãã¼ã¯ãªèå¥åã¯ã<literal>binary</literal> , <literal>blob</literal> , <literal>clob</literal> ãé¤ããã©ããªåºæ¬åã§ãæ§ãã¾ããã ï¼è¤åèå¥åã§ãæ§ãã¾ããã以ä¸ãè¦ã¦ãã ãããï¼"
+
+#: index.docbook:2555
+msgid "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+msgstr "åºæ¬çãªå¤åã«ã¯ã<literal>org.hibernate.Hibernate</literal> ã§å®ç¾©ããã <literal>Type</literal> å®æ°ãããããããã¾ãã ä¾ãã°ã<literal>Hibernate.STRING</literal> 㯠<literal>string</literal> åã表ç¾ãã¦ãã¾ãã"
+
+#: index.docbook:2558
+msgid "Type mappings from Java primitives or wrapper classes to appropriate (vendor-specific) SQL column types. <literal>boolean, yes_no</literal> and <literal>true_false</literal> are all alternative encodings for a Java <literal>boolean</literal> or <literal>java.lang.Boolean</literal>."
+msgstr "ã«ã¹ã¿ã å"
+
+#: index.docbook:2567
+msgid "string"
+msgstr "éçºè
ãç¬èªã®å¤åãä½æãããã¨ã¯ãæ¯è¼çç°¡åã§ãã ä¾ãã°ã<literal>java.lang.BigInteger</literal> åã®ããããã£ã <literal>VARCHAR</literal> ã«ã©ã ã«æ°¸ç¶åãããããããã¾ããã Hibernateã¯ãã®ããã®çµã¿è¾¼ã¿åãç¨æãã¦ãã¾ããã ãããã«ã¹ã¿ã åã¯ãããããã£ï¼ã¾ãã¯ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ï¼ã1ã¤ã®ãã¼ãã«ã«ã©ã ã« ãããã³ã°ããã®ã«å¶éã¯ããã¾ããã ãã®ããä¾ãã°ã<literal>java.lang.String</literal> åã® <literal>getName()</literal> / <literal>setName()</literal> Javaããããã£ã <literal>FIRST_NAME</literal> , <literal>INITIAL</literal>, <literal>SURNAME</literal> ã«ã©ã ã«æ°¸ç¶åã§ãã¾ãã"
+
+#: index.docbook:2569
+msgid "A type mapping from <literal>java.lang.String</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>)."
+msgstr "ã«ã¹ã¿ã åãå®è£
ããã«ã¯ã<literal>org.hibernate.UserType</literal> ã¾ã㯠<literal>org.hibernate.CompositeUserType</literal> ãå®è£
ãã åã®å®å
¨ä¿®é£¾ãããååã使ã£ã¦ããããã£ãå®ç¾©ãã¾ãã ã©ã®ãããªç¨®é¡ã®ãã®ãå¯è½ãã調ã¹ãã«ã¯ã <literal>org.hibernate.test.DoubleStringType</literal> ã確èªãã¦ãã ããã"
+
+#: index.docbook:2576
+msgid "date, time, timestamp"
+msgstr ""
+ "<![CDATA[<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType\">
+\n"
+ " <column name=\"first_string\"/>
+\n"
+ " <column name=\"second_string\"/>
+\n"
+ "</property>]]>"
+
+#: index.docbook:2578
+msgid "Type mappings from <literal>java.util.Date</literal> and its subclasses to SQL types <literal>DATE</literal>, <literal>TIME</literal> and <literal>TIMESTAMP</literal> (or equivalent)."
+msgstr "<literal><column></literal> ã¿ã°ã§ã ããããã£ãè¤æ°ã®ã«ã©ã ã¸ãããã³ã°ã§ãããã¨ã«æ³¨ç®ãã¦ãã ããã"
+
+#: index.docbook:2586
+msgid "calendar, calendar_date"
+msgstr "<literal>CompositeUserType</literal> , <literal>EnhancedUserType</literal> , <literal>UserCollectionType</literal> , <literal>UserVersionType</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ãããç¹æ®ãªä½¿ç¨æ³ã«å¯¾ãã¦ã®ãµãã¼ããæä¾ãã¾ãã"
+
+#: index.docbook:2588
+msgid "Type mappings from <literal>java.util.Calendar</literal> to SQL types <literal>TIMESTAMP</literal> and <literal>DATE</literal> (or equivalent)."
+msgstr "ãããã³ã°ãã¡ã¤ã«å
㧠<literal>UserType</literal> ã¸ãã©ã¡ã¼ã¿ãæä¾ã§ãã¾ãã ãã®ããã«ã¯ã<literal>UserType</literal> 㯠<literal>org.hibernate.usertype.ParameterizedType</literal> ãå®è£
ããªãã¦ã¯ãªãã¾ããã ã«ã¹ã¿ã åãã©ã¡ã¼ã¿ãæä¾ããããã«ã ãããã³ã°ãã¡ã¤ã«å
㧠<literal><type></literal> è¦ç´ ã使ç¨ã§ãã¾ãã"
+
+#: index.docbook:2596
+msgid "big_decimal, big_integer"
+msgstr ""
+ "<![CDATA[<property name=\"priority\">
+\n"
+ " <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">
+\n"
+ " <param name=\"default\">0</param>
+\n"
+ " </type>
+\n"
+ "</property>]]>"
+
+#: index.docbook:2598
+msgid "Type mappings from <literal>java.math.BigDecimal</literal> and <literal>java.math.BigInteger</literal> to <literal>NUMERIC</literal> (or Oracle <literal>NUMBER</literal>)."
+msgstr "<literal>UserType</literal> ã¯ã å¼æ°ã¨ãã¦æ¸¡ããã <literal>Properties</literal> ãªãã¸ã§ã¯ãããã <literal>default</literal> ã§æå®ãããã©ã¡ã¼ã¿ã«å¯¾ããå¤ãæ¤ç´¢ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:2606
+msgid "locale, timezone, currency"
+msgstr "ç¹å®ã® <literal>UserType</literal> ãé »ç¹ã«ä½¿ç¨ãããªãã°ãçãååãå®ç¾©ããã¨ä¾¿å©ã«ãªãã§ãããã <literal><typedef></literal> è¦ç´ ã使ã£ã¦ãã®ãããªãã¨ãè¡ãã¾ãã Typedefsã¯ã«ã¹ã¿ã åã«ååãå²ãå½ã¦ã¾ãã ãã®åããã©ã¡ã¼ã¿ãæã¤ãªãã°ã ãã©ã¡ã¼ã¿ã®ããã©ã«ãå¤ã®ãªã¹ããå«ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:2608
+msgid "Type mappings from <literal>java.util.Locale</literal>, <literal>java.util.TimeZone</literal> and <literal>java.util.Currency</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). Instances of <literal>Locale</literal> and <literal>Currency</literal> are mapped to their ISO codes. Instances of <literal>TimeZone</literal> are mapped to their <literal>ID</literal>."
+msgstr ""
+ "<![CDATA[<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name=\"default_zero\">
+\n"
+ " <param name=\"default\">0</param>
+\n"
+ "</typedef>]]>"
+
+#: index.docbook:2620
+msgid "<literal>class</literal>"
+msgstr "<![CDATA[<property name=\"priority\" type=\"default_zero\"/>]]>"
+
+#: index.docbook:2622
+msgid "A type mapping from <literal>java.lang.Class</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). A <literal>Class</literal> is mapped to its fully qualified name."
+msgstr "ããããã£ã®ãããã³ã°ã§åãã©ã¡ã¼ã¿ã使ããã¨ã§ã typedefã§æä¾ããããã©ã¡ã¼ã¿ããã®é½åº¦ãªã¼ãã¼ã©ã¤ããããã¨ãå¯è½ã§ãã"
+
+#: index.docbook:2630
+msgid "binary"
+msgstr "Hibernateã®å¹
åºãçµã¿è¾¼ã¿åã¨ã³ã³ãã¼ãã³ãã«å¯¾ãããµãã¼ãã¯ã ã«ã¹ã¿ã åããã£ãã« <emphasis>使ããªã</emphasis> ã¨ãããã¨ãæå³ãã¾ãã ããã§ããªããã¢ããªã±ã¼ã·ã§ã³ã§é »åºãã(ã¨ã³ãã£ãã£ã§ã¯ãªã)ã¯ã©ã¹ã«å¯¾ããã«ã¹ã¿ã åã®ä½¿ç¨ã¯ã ããããæ¹ã§ããã¨ã¿ãªããã¾ãã ä¾ãã° <literal>MonetaryAmount</literal> ã¯ã©ã¹ã¯ã³ã³ãã¼ãã³ãã¨ãã¦ç°¡åã«ãããã³ã°ã§ãã¾ããã <literal>CompositeUserType</literal> ã®è¯ãåè£ã§ãã ã«ã¹ã¿ã åã使ç¨ããåæ©ã®1ã¤ã¯æ½è±¡åã§ãã ã«ã¹ã¿ã åã使ããã¨ã§ãé貨ãã©ã®ããã«è¡¨ç¾ãããã¨ã ãããã³ã°ããã¥ã¡ã³ãã¯èµ·ããããå¤åã«å¯¾å¿ã§ãã¾ãã"
+
+#: index.docbook:2632
+msgid "Maps byte arrays to an appropriate SQL binary type."
+msgstr "ï¼ã¤ã®ã¯ã©ã¹ã«ï¼ã¤ä»¥ä¸ã®ãããã³ã°"
+
+#: index.docbook:2638
+msgid "text"
+msgstr "ããæ°¸ç¶ã¯ã©ã¹ã«ãä¸ã¤ä»¥ä¸ã®ãããã³ã°ãæä¾ãããã¨ãåºæ¥ã¾ãã ãã®å ´åããããã³ã°ããï¼ã¤ã®ã¨ã³ãã£ãã£ã®ã¤ã³ã¹ã¿ã³ã¹ãæ確ã«ããããã«ã <emphasis>ã¨ã³ãã£ãã£å</emphasis> ãæå®ããªããã°ãªãã¾ãã (ããã©ã«ãã§ã¯ã¨ã³ãã£ãã£åã¯ã¯ã©ã¹åã¨åãã§ãã)ã æ°¸ç¶ãªãã¸ã§ã¯ããæ±ãã¨ããã¯ã¨ãªãæ¸ãè¾¼ãã¨ãã æå®ãããã¨ã³ãã£ãã£ã¸ã®é¢é£ããããã³ã°ããã¨ãã«ã¯ã Hibernateã§ã¯ã¨ã³ãã£ãã£åãæå®ããªããã°ãªãã¾ããã"
+
+#: index.docbook:2640
+msgid "Maps long Java strings to a SQL <literal>CLOB</literal> or <literal>TEXT</literal> type."
+msgstr ""
+ "<![CDATA[<class name=\"Contract\" table=\"Contracts\"
+\n"
+ " entity-name=\"CurrentContract\">
+\n"
+ " ...
+\n"
+ " <set name=\"history\" inverse=\"true\"
+\n"
+ " order-by=\"effectiveEndDate desc\">
+\n"
+ " <key column=\"currentContractId\"/>
+\n"
+ " <one-to-many entity-name=\"HistoricalContract\"/>
+\n"
+ " </set>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Contract\" table=\"ContractHistory\"
+\n"
+ " entity-name=\"HistoricalContract\">
+\n"
+ " ...
+\n"
+ " <many-to-one name=\"currentContract\"
+\n"
+ " column=\"currentContractId\"
+\n"
+ " entity-name=\"CurrentContract\"/>
+\n"
+ "</class>]]>"
+
+#: index.docbook:2647
+msgid "serializable"
+msgstr "é¢é£ã<literal>class</literal> ã®ä»£ããã« <literal>entity-name</literal> ã使ã£ã¦ã ã©ã®ããã«æå®ãããã®ãã«æ³¨ç®ãã¦ãã ããã"
+
+#: index.docbook:2649
+msgid "Maps serializable Java types to an appropriate SQL binary type. You may also indicate the Hibernate type <literal>serializable</literal> with the name of a serializable Java class or interface that does not default to a basic type."
+msgstr "ããã¯ã¯ã©ã¼ãã§å²ãã SQL èå¥å"
+
+#: index.docbook:2658
+msgid "clob, blob"
+msgstr "ãããã³ã°ããã¥ã¡ã³ãã§ãã¼ãã«ãã«ã©ã ã®ååãããã¯ã¯ã©ã¼ãã§å²ããã¨ã§ã Hibernateã§çæãããSQLä¸ã®èå¥åãå¼ç¨ããããã¨ãã§ãã¾ãã Hibernateã¯SQLã® <literal>Dialect</literal> ã«å¯¾å¿ãããæ£ããå¼ç¨ã¹ã¿ã¤ã«ã使ãã¾ã ï¼æ®éã¯ããã«ã¯ã©ã¼ãã§ãããSQL Serverã§ã¯ããæ¬å¼§ãMySQLã§ã¯ããã¯ã¯ã©ã¼ãã§ãï¼ã"
+
+#: index.docbook:2660
+msgid "Type mappings for the JDBC classes <literal>java.sql.Clob</literal> and <literal>java.sql.Blob</literal>. These types may be inconvenient for some applications, since the blob or clob object may not be reused outside of a transaction. (Furthermore, driver support is patchy and inconsistent.)"
+msgstr ""
+ "<![CDATA[<class name=\"LineItem\" table=\"`Line Item`\">
+\n"
+ " <id name=\"id\" column=\"`Item Id`\"/><generator class=\"assigned\"/></id>
+\n"
+ " <property name=\"itemNumber\" column=\"`Item #`\"/>
+\n"
+ " ...
+\n"
+ "</class>]]>"
+
+#: index.docbook:2670
+msgid "imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary"
+msgstr "ã¡ã¿ãã¼ã¿ã®ä»£æ¿æ段"
+
+#: index.docbook:2674
+msgid "Type mappings for what are usually considered mutable Java types, where Hibernate makes certain optimizations appropriate only for immutable Java types, and the application treats the object as immutable. For example, you should not call <literal>Date.setTime()</literal> for an instance mapped as <literal>imm_timestamp</literal>. To change the value of the property, and have that change made persistent, the application must assign a new (nonidentical) object to the property."
+msgstr "XMLã®è¨è¿°ä»¥å¤ã«ã Hibernateã§ã¯O/Rãããã³ã°ã®ã¡ã¿ãã¼ã¿ãå®ç¾©ãã代æ¿æ¹æ³ãããã¾ãã"
+
+#: index.docbook:2689
+msgid "Unique identifiers of entities and collections may be of any basic type except <literal>binary</literal>, <literal>blob</literal> and <literal>clob</literal>. (Composite identifiers are also allowed, see below.)"
+msgstr "XDoclet ãã¼ã¯ã¢ããã®ä½¿ç¨"
+
+#: index.docbook:2695
+msgid "The basic value types have corresponding <literal>Type</literal> constants defined on <literal>org.hibernate.Hibernate</literal>. For example, <literal>Hibernate.STRING</literal> represents the <literal>string</literal> type."
+msgstr "å¤ãã®Hibernateã¦ã¼ã¶ã¯XDocletã® <literal>@hibernate.tags</literal> ã使ã£ã¦ã ã½ã¼ã¹ã³ã¼ãå
ã«ç´æ¥ãããã³ã°æ
å ±ãåãè¾¼ããã¨ã好ã¿ã¾ãã ããã¯å³å¯ã«è¨ãã°XDocletã®åéãªã®ã§ãæ¬ããã¥ã¡ã³ãã§ã¯ãã®æ¹æ³ã対象ã¨ã¯ãã¾ããã ãããXDocletã使ã£ã以ä¸ã® <literal>Cat</literal> ãããã³ã°ã®ä¾ã示ãã¾ãã"
+
+#: index.docbook:2704
+msgid "Custom value types"
+msgstr ""
+ "<![CDATA[package eg;
+\n"
+ "import java.util.Set;
+\n"
+ "import java.util.Date;
+\n"
+ "
+\n"
+ "/**
+\n"
+ " * @hibernate.class
+\n"
+ " * table=\"CATS\"
+\n"
+ " */
+\n"
+ "public class Cat {
+\n"
+ " private Long id; // identifier
+\n"
+ " private Date birthdate;
+\n"
+ " private Cat mother;
+\n"
+ " private Set kittens
+\n"
+ " private Color color;
+\n"
+ " private char sex;
+\n"
+ " private float weight;
+\n"
+ "
+\n"
+ " /*
+\n"
+ " * @hibernate.id
+\n"
+ " * generator-class=\"native\"
+\n"
+ " * column=\"CAT_ID\"
+\n"
+ " */
+\n"
+ " public Long getId() {
+\n"
+ " return id;
+\n"
+ " }
+\n"
+ " private void setId(Long id) {
+\n"
+ " this.id=id;
+\n"
+ " }
+\n"
+ "
+\n"
+ " /**
+\n"
+ " * @hibernate.many-to-one
+\n"
+ " * column=\"PARENT_ID\"
+\n"
+ " */
+\n"
+ " public Cat getMother() {
+\n"
+ " return mother;
+\n"
+ " }
+\n"
+ " void setMother(Cat mother) {
+\n"
+ " this.mother = mother;
+\n"
+ " }
+\n"
+ "
+\n"
+ " /**
+\n"
+ " * @hibernate.property
+\n"
+ " * column=\"BIRTH_DATE\"
+\n"
+ " */
+\n"
+ " public Date getBirthdate() {
+\n"
+ " return birthdate;
+\n"
+ " }
+\n"
+ " void setBirthdate(Date date) {
+\n"
+ " birthdate = date;
+\n"
+ " }
+\n"
+ " /**
+\n"
+ " * @hibernate.property
+\n"
+ " * column=\"WEIGHT\"
+\n"
+ " */
+\n"
+ " public float getWeight() {
+\n"
+ " return weight;
+\n"
+ " }
+\n"
+ " void setWeight(float weight) {
+\n"
+ " this.weight = weight;
+\n"
+ " }
+\n"
+ "
+\n"
+ " /**
+\n"
+ " * @hibernate.property
+\n"
+ " * column=\"COLOR\"
+\n"
+ " * not-null=\"true\"
+\n"
+ " */
+\n"
+ " public Color getColor() {
+\n"
+ " return color;
+\n"
+ " }
+\n"
+ " void setColor(Color color) {
+\n"
+ " this.color = color;
+\n"
+ " }
+\n"
+ " /**
+\n"
+ " * @hibernate.set
+\n"
+ " * inverse=\"true\"
+\n"
+ " * order-by=\"BIRTH_DATE\"
+\n"
+ " * @hibernate.collection-key
+\n"
+ " * column=\"PARENT_ID\"
+\n"
+ " * @hibernate.collection-one-to-many
+\n"
+ " */
+\n"
+ " public Set getKittens() {
+\n"
+ " return kittens;
+\n"
+ " }
+\n"
+ " void setKittens(Set kittens) {
+\n"
+ " this.kittens = kittens;
+\n"
+ " }
+\n"
+ " // addKitten not needed by Hibernate
+\n"
+ " public void addKitten(Cat kitten) {
+\n"
+ " kittens.add(kitten);
+\n"
+ " }
+\n"
+ "
+\n"
+ " /**
+\n"
+ " * @hibernate.property
+\n"
+ " * column=\"SEX\"
+\n"
+ " * not-null=\"true\"
+\n"
+ " * update=\"false\"
+\n"
+ " */
+\n"
+ " public char getSex() {
+\n"
+ " return sex;
+\n"
+ " }
+\n"
+ " void setSex(char sex) {
+\n"
+ " this.sex=sex;
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:2706
+msgid "It is relatively easy for developers to create their own value types. For example, you might want to persist properties of type <literal>java.lang.BigInteger</literal> to <literal>VARCHAR</literal> columns. Hibernate does not provide a built-in type for this. But custom types are not limited to mapping a property (or collection element) to a single table column. So, for example, you might have a Java property <literal>getName()</literal>/<literal>setName()</literal> of type <literal>java.lang.String</literal> that is persisted to the columns <literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal>."
+msgstr "Hibernateã®ã¦ã§ããµã¤ãã«ã¯ãXDocletã¨Hibernateã«é¢ãããµã³ãã«ãå¤æ°ããã¾ãã"
+
+#: index.docbook:2717
+msgid "To implement a custom type, implement either <literal>org.hibernate.UserType</literal> or <literal>org.hibernate.CompositeUserType</literal> and declare properties using the fully qualified classname of the type. Check out <literal>org.hibernate.test.DoubleStringType</literal> to see the kind of things that are possible."
+msgstr "JDK 5.0 ã¢ããã¼ã·ã§ã³ã®ä½¿ç¨"
+
+#: index.docbook:2725
+msgid ""
+ "<![CDATA[<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType\">\n"
+ " <column name=\"first_string\"/>\n"
+ " <column name=\"second_string\"/>\n"
+ "</property>]]>"
+msgstr "JDK5.0ã§ã¯ã¿ã¤ãã»ã¼ããã¤ã³ã³ãã¤ã«æã«ãã§ãã¯ã§ããã è¨èªã¬ãã«ã®XDocletã¹ã¿ã¤ã«ã®ã¢ããã¼ã·ã§ã³ãå°å
¥ãã¾ããã ãã®ã¡ã«ããºã ã¯XDocletã®ã¢ããã¼ã·ã§ã³ãããå¼·åã§ããã¼ã«ãIDEãå¤ãããµãã¼ããã¦ãã¾ãã ä¾ãã°IntelliJ IDEAã¯ãJDK5.0ã«ã¢ããã¼ã·ã§ã³ã®èªåè£å®ã¨æ§æã®å¼·èª¿è¡¨ç¤ºããµãã¼ããã¦ãã¾ãã EJBä»æ§ (JSR-220)ã®æ°ãããã¼ã¸ã§ã³ã§ã¯ãã¨ã³ãã£ãã£ãã¼ã³ã«å¯¾ãã主è¦ãªã¡ã¿ãã¼ã¿ã¡ã«ããºã ã¨ã㦠JDK5.0ã®ã¢ããã¼ã·ã§ã³ã使ç¨ãã¦ãã¾ãã Hibernate3ã§ã¯JSR-220 (æ°¸ç¶åAPI)ã® <literal>EntityManager</literal> ãå®è£
ãã ã¡ã¿ãã¼ã¿ãããã³ã°ã«å¯¾ãããµãã¼ãã¯ã å¥ãã¦ã³ãã¼ãã® <emphasis>Hibernate Annotations</emphasis> ããã±ã¼ã¸ã«ããå©ç¨å¯è½ã§ãã ããã¯EJB3(JSR-220)ã¨Hibernate3ã®ã¡ã¿ãã¼ã¿ãã©ã¡ãããµãã¼ã!
ãã¦ãã¾ãã"
+
+#: index.docbook:2727
+msgid "Notice the use of <literal><column></literal> tags to map a property to multiple columns."
+msgstr "以ä¸ã¯EJBã®ã¨ã³ãã£ãã£ãã¼ã³ã¨ãã¦æ³¨éãããPOJOã¯ã©ã¹ã®ä¾ã§ãã"
+
+#: index.docbook:2732
+msgid "The <literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>, <literal>UserCollectionType</literal>, and <literal>UserVersionType</literal> interfaces provide support for more specialized uses."
+msgstr ""
+ "<![CDATA[@Entity(access = AccessType.FIELD)
+\n"
+ "public class Customer implements Serializable {
+\n"
+ "
+\n"
+ " @Id;
+\n"
+ " Long id;
+\n"
+ "
+\n"
+ " String firstName;
+\n"
+ " String lastName;
+\n"
+ " Date birthday;
+\n"
+ "
+\n"
+ " @Transient
+\n"
+ " Integer age;
+\n"
+ "
+\n"
+ " @Embedded
+\n"
+ " private Address homeAddress;
+\n"
+ "
+\n"
+ " @OneToMany(cascade=CascadeType.ALL)
+\n"
+ " @JoinColumn(name=\"CUSTOMER_ID\")
+\n"
+ " Set<Order> orders;
+\n"
+ "
+\n"
+ " // Getter/setter and business methods
+\n"
+ "}]]>"
+
+#: index.docbook:2738
+msgid "You may even supply parameters to a <literal>UserType</literal> in the mapping file. To do this, your <literal>UserType</literal> must implement the <literal>org.hibernate.usertype.ParameterizedType</literal> interface. To supply parameters to your custom type, you can use the <literal><type></literal> element in your mapping files."
+msgstr "JDK5.0ã®ã¢ããã¼ã·ã§ã³(ã¨JSR-220)ã®ãµãã¼ãã¯é²è¡ä¸ã®ä½æ¥ã§ãããå®å
¨ã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ããã ããã«è©³ããæ
å ±ã¯Hibernateã®ã¢ããã¼ã·ã§ã³ã»ã¢ã¸ã¥ã¼ã«ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:2746
+msgid ""
+ "<![CDATA[<property name=\"priority\">\n"
+ " <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
+ " <param name=\"default\">0</param>\n"
+ " </type>\n"
+ "</property>]]>"
+msgstr "çæããããã£"
+
+#: index.docbook:2748
+msgid "The <literal>UserType</literal> can now retrieve the value for the parameter named <literal>default</literal> from the <literal>Properties</literal> object passed to it."
+msgstr "çæããããã£ã¨ã¯ããã¼ã¿ãã¼ã¹ã«ãã£ã¦çæãããå¤ãæã¤ããããã£ã§ãã é常ãHibernateã¢ããªã±ã¼ã·ã§ã³ã¯ããã¼ã¿ãã¼ã¹ãå¤ãçæããããããã£ãå«ããªãã¸ã§ã¯ãã <literal>ãªãã¬ãã·ã¥</literal> ããå¿
è¦ãããã¾ããã ããããããããã£ãçæãããã¨ãããã¨ããã¼ã¯ãããã¨ã§ã ã¢ããªã±ã¼ã·ã§ã³ã¯ãªãã¬ãã·ã¥ã®è²¬ä»»ãHibernateã«å§è²ãã¾ãã åºæ¬çã«ãçæããããã£ãæã¤ã¨å®ç¾©ããã¨ã³ãã£ãã£ã«å¯¾ã㦠HibernateãINSERTãUPDATEã®SQLãçºè¡ããå¾ããã«ã çæãããå¤ãèªã¿è¾¼ãããã® SELECT SQL ãçºè¡ããã¾ãã"
+
+#: index.docbook:2753
+msgid "If you use a certain <literal>UserType</literal> very often, it may be useful to define a shorter name for it. You can do this using the <literal><typedef></literal> element. Typedefs assign a name to a custom type, and may also contain a list of default parameter values if the type is parameterized."
+msgstr "çæããããã£ã¯ãæ¿å
¥ä¸å¯è½ãã¤æ´æ°ä¸å¯è½ã§ãªããã°ãªãã¾ããã <xref linkend=\"mapping-declaration-version\"/>versions ã <xref linkend=\"mapping-declaration-timestamp\"/>timestamps ã <xref linkend=\"mapping-declaration-property\"/>simple properties ã ããçæãããã¨ãã¼ã¯ã§ãã¾ãã"
+
+#: index.docbook:2760
+msgid ""
+ "<![CDATA[<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name=\"default_zero\">\n"
+ " <param name=\"default\">0</param>\n"
+ "</typedef>]]>"
+msgstr "<literal>never</literal> (ããã©ã«ã) - ä¸ããããããããã£ã®å¤ã¯ã ãã¼ã¿ãã¼ã¹ããçæãããªããã¨ãæå³ãã¾ãã"
+
+#: index.docbook:2762
+msgid "<![CDATA[<property name=\"priority\" type=\"default_zero\"/>]]>"
+msgstr "<literal>insert</literal> - ä¸ããããããããã£ã®å¤ã¯æ¿å
¥æã«çæããããã ç¶ãã¦èµ·ããæ´æ°æã«ã¯çæãããªããã¨ç¤ºãã¾ãã ä½æãããæ¥ä»ãªã©ã¯ããã®ã«ãã´ãªã«åé¡ããã¾ãã <xref linkend=\"mapping-declaration-version\"/>version ã <xref linkend=\"mapping-declaration-timestamp\"/>timestamp ã® ããããã£ã¯çæãããã¨ãã¼ã¯ã§ãã¾ããããã®ãªãã·ã§ã³ã¯å©ç¨ã§ããªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:2764
+msgid "It is also possible to override the parameters supplied in a typedef on a case-by-case basis by using type parameters on the property mapping."
+msgstr "<literal>always</literal> - æ¿å
¥æãæ´æ°æãããããã£ã®å¤ãçæããããã¨ã示ãã¾ãã"
+
+#: index.docbook:2769
+msgid "Even though Hibernate's rich range of built-in types and support for components means you will very rarely <emphasis>need</emphasis> to use a custom type, it is nevertheless considered good form to use custom types for (non-entity) classes that occur frequently in your application. For example, a <literal>MonetaryAmount</literal> class is a good candidate for a <literal>CompositeUserType</literal>, even though it could easily be mapped as a component. One motivation for this is abstraction. With a custom type, your mapping documents would be future-proofed against possible changes in your way of representing monetary values."
+msgstr "è£å©çãªãã¼ã¿ãã¼ã¹ã»ãªãã¸ã§ã¯ã"
+
+#: index.docbook:2785
+msgid "Mapping a class more than once"
+msgstr "Hibernateã®ã¹ãã¼ãã»ã¨ããªã¥ã¼ã·ã§ã³ãã¼ã«ã¨é£åãããã¨ã§ã ä»»æã®ãã¼ã¿ãã¼ã¹ã»ãªãã¸ã§ã¯ãï¼ããªã¬ã¼ãã¹ãã¢ãããã·ã¼ã¸ã£ãªã©ï¼ã®CREATEã¨DROPã«ããã Hibernateã®ãããã³ã°ãã¡ã¤ã«å
ã®ã¦ã¼ã¶ã»ã¹ãã¼ãããã¹ã¦å®ç¾©ãããã¨ãåºæ¥ã¾ãã 主ã«ããªã¬ãã¹ãã¢ãããã·ã¼ã¸ã£ã®ãããªãã¼ã¿ãã¼ã¹ã»ãªãã¸ã§ã¯ããçæãåé¤ãããã¨ãæå³ãã¦ãã¾ããã å®éã«ã¯ <literal>java.sql.Statement.execute()</literal> ã¡ã½ããã«ãã£ã¦å®è¡ã§ãã ä»»æã®SQLã³ãã³ãï¼ALTERãINSERTãªã©ï¼ãå®è¡ã§ãã¾ãã è£å©çãªãã¼ã¿ãã¼ã¹ã»ãªãã¸ã§ã¯ããå®ç¾©ããããã®ã2ã¤ã®åºæ¬çãªæ¹æ³ãããã¾ãã"
+
+#: index.docbook:2786
+msgid "It is possible to provide more than one mapping for a particular persistent class. In this case you must specify an <emphasis>entity name</emphasis> do disambiguate between instances of the two mapped entities. (By default, the entity name is the same as the class name.) Hibernate lets you specify the entity name when working with persistent objects, when writing queries, or when mapping associations to the named entity."
+msgstr "1ã¤ç®ã®æ¹æ³ã¯ãCREATEã¨DROPã³ãã³ãããããã³ã°ãã¡ã¤ã«ã®å¤ã«ãæ示çã«è¨è¼ãããã¨ã§ãã"
+
+#: index.docbook:2794
+msgid ""
+ "<![CDATA[<class name=\"Contract\" table=\"Contracts\"\n"
+ " entity-name=\"CurrentContract\">\n"
+ " ...\n"
+ " <set name=\"history\" inverse=\"true\"\n"
+ " order-by=\"effectiveEndDate desc\">\n"
+ " <key column=\"currentContractId\"/>\n"
+ " <one-to-many entity-name=\"HistoricalContract\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Contract\" table=\"ContractHistory\"\n"
+ " entity-name=\"HistoricalContract\">\n"
+ " ...\n"
+ " <many-to-one name=\"currentContract\"\n"
+ " column=\"currentContractId\"\n"
+ " entity-name=\"CurrentContract\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ " ...
+\n"
+ " <database-object>
+\n"
+ " <create>CREATE TRIGGER my_trigger ...</create>
+\n"
+ " <drop>DROP TRIGGER my_trigger</drop>
+\n"
+ " </database-object>
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:2796
+msgid "Notice how associations are now specified using <literal>entity-name</literal> instead of <literal>class</literal>."
+msgstr "2ã¤ç®ã®æ¹æ³ã¯ãCREATEã¨DROPã³ãã³ãã®çµã¿ç«ã¦æ¹ãç¥ã£ã¦ããã«ã¹ã¿ã ã¯ã©ã¹ãæä¾ãããã¨ã§ãã ãã®ã«ã¹ã¿ã ã¯ã©ã¹ã¯ <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> ã¤ã³ã¿ãã§ã¼ã¹ã å®è£
ããªããã°ãªãã¾ããã"
+
+#: index.docbook:2804
+msgid "SQL quoted identifiers"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ " ...
+\n"
+ " <database-object>
+\n"
+ " <definition class=\"MyTriggerDefinition\"/>
+\n"
+ " </database-object>
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:2805
+msgid "You may force Hibernate to quote an identifier in the generated SQL by enclosing the table or column name in backticks in the mapping document. Hibernate will use the correct quotation style for the SQL <literal>Dialect</literal> (usually double quotes, but brackets for SQL Server and backticks for MySQL)."
+msgstr "ããã«ããããã¼ã¿ãã¼ã¹æ¹è¨ã使ç¨ãããæã«ã ãé©ç¨ããã¨ãã£ãããã«ã ãã¼ã¿ãã¼ã¹ã»ãªãã¸ã§ã¯ãã使ãããã±ã¼ã¹ãéå®ã§ãã¾ãã"
+
+#: index.docbook:2812
+msgid ""
+ "<![CDATA[<class name=\"LineItem\" table=\"`Line Item`\">\n"
+ " <id name=\"id\" column=\"`Item Id`\"/><generator class=\"assigned\"/></id>\n"
+ " <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ " ...
+\n"
+ " <database-object>
+\n"
+ " <definition class=\"MyTriggerDefinition\"/>
+\n"
+ " <dialect-scope name=\"org.hibernate.dialect.Oracle9Dialect\"/>
+\n"
+ " <dialect-scope name=\"org.hibernate.dialect.OracleDialect\"/>
+\n"
+ " </database-object>
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:2818
+msgid "Metadata alternatives"
+msgstr ""
+
+#: index.docbook:2820
+msgid "XML isn't for everyone, and so there are some alternative ways to define O/R mapping metadata in Hibernate."
+msgstr ""
+
+#: index.docbook:2825
+msgid "Using XDoclet markup"
+msgstr ""
+
+#: index.docbook:2827
+msgid "Many Hibernate users prefer to embed mapping information directly in sourcecode using XDoclet <literal>@hibernate.tags</literal>. We will not cover this approach in this document, since strictly it is considered part of XDoclet. However, we include the following example of the <literal>Cat</literal> class with XDoclet mappings."
+msgstr ""
+
+#: index.docbook:2834
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "/**\n"
+ " * @hibernate.class\n"
+ " * table=\"CATS\"\n"
+ " */\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ " private Date birthdate;\n"
+ " private Cat mother;\n"
+ " private Set kittens\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " /*\n"
+ " * @hibernate.id\n"
+ " * generator-class=\"native\"\n"
+ " * column=\"CAT_ID\"\n"
+ " */\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.many-to-one\n"
+ " * column=\"PARENT_ID\"\n"
+ " */\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"BIRTH_DATE\"\n"
+ " */\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"WEIGHT\"\n"
+ " */\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"COLOR\"\n"
+ " * not-null=\"true\"\n"
+ " */\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.set\n"
+ " * inverse=\"true\"\n"
+ " * order-by=\"BIRTH_DATE\"\n"
+ " * @hibernate.collection-key\n"
+ " * column=\"PARENT_ID\"\n"
+ " * @hibernate.collection-one-to-many\n"
+ " */\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"SEX\"\n"
+ " * not-null=\"true\"\n"
+ " * update=\"false\"\n"
+ " */\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2836
+msgid "See the Hibernate web site for more examples of XDoclet and Hibernate."
+msgstr ""
+
+#: index.docbook:2843
+msgid "Using JDK 5.0 Annotations"
+msgstr ""
+
+#: index.docbook:2845
+msgid "JDK 5.0 introduced XDoclet-style annotations at the language level, type-safe and checked at compile time. This mechnism is more powerful than XDoclet annotations and better supported by tools and IDEs. IntelliJ IDEA, for example, supports auto-completion and syntax highlighting of JDK 5.0 annotations. The new revision of the EJB specification (JSR-220) uses JDK 5.0 annotations as the primary metadata mechanism for entity beans. Hibernate3 implements the <literal>EntityManager</literal> of JSR-220 (the persistence API), support for mapping metadata is available via the <emphasis>Hibernate Annotations</emphasis> package, as a separate download. Both EJB3 (JSR-220) and Hibernate3 metadata is supported."
+msgstr ""
+
+#: index.docbook:2856
+msgid "This is an example of a POJO class annotated as an EJB entity bean:"
+msgstr ""
+
+#: index.docbook:2860
+msgid ""
+ "<![CDATA[@Entity(access = AccessType.FIELD)\n"
+ "public class Customer implements Serializable {\n"
+ "\n"
+ " @Id;\n"
+ " Long id;\n"
+ "\n"
+ " String firstName;\n"
+ " String lastName;\n"
+ " Date birthday;\n"
+ "\n"
+ " @Transient\n"
+ " Integer age;\n"
+ "\n"
+ " @Embedded\n"
+ " private Address homeAddress;\n"
+ "\n"
+ " @OneToMany(cascade=CascadeType.ALL)\n"
+ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
+ " Set<Order> orders;\n"
+ "\n"
+ " // Getter/setter and business methods\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2862
+msgid "Note that support for JDK 5.0 Annotations (and JSR-220) is still work in progress and not completed. Please refer to the Hibernate Annotations module for more details."
+msgstr ""
+
+#: index.docbook:2871
+msgid "Generated Properties"
+msgstr ""
+
+#: index.docbook:2872
+msgid "Generated properties are properties which have their values generated by the database. Typically, Hibernate applications needed to <literal>refresh</literal> objects which contain any properties for which the database was generating values. Marking properties as generated, however, lets the application delegate this responsibility to Hibernate. Essentially, whenever Hibernate issues an SQL INSERT or UPDATE for an entity which has defined generated properties, it immediately issues a select afterwards to retrieve the generated values."
+msgstr ""
+
+#: index.docbook:2881
+msgid "Properties marked as generated must additionally be non-insertable and non-updateable. Only <xref linkend=\"mapping-declaration-version\"/>versions, <xref linkend=\"mapping-declaration-timestamp\"/>timestamps, and <xref linkend=\"mapping-declaration-property\"/>simple properties can be marked as generated."
+msgstr ""
+
+#: index.docbook:2888
+msgid "<literal>never</literal> (the default) - means that the given property value is not generated within the database."
+msgstr ""
+
+#: index.docbook:2892
+msgid "<literal>insert</literal> - states that the given property value is generated on insert, but is not regenerated on subsequent updates. Things like created-date would fall into this category. Note that even thought <xref linkend=\"mapping-declaration-version\"/>version and <xref linkend=\"mapping-declaration-timestamp\"/>timestamp properties can be marked as generated, this option is not available there..."
+msgstr ""
+
+#: index.docbook:2900
+msgid "<literal>always</literal> - states that the property value is generated both on insert and on update."
+msgstr ""
+
+#: index.docbook:2907
+msgid "Auxiliary Database Objects"
+msgstr ""
+
+#: index.docbook:2908
+msgid "Allows CREATE and DROP of arbitrary database objects, in conjunction with Hibernate's schema evolution tools, to provide the ability to fully define a user schema within the Hibernate mapping files. Although designed specifically for creating and dropping things like triggers or stored procedures, really any SQL command that can be run via a <literal>java.sql.Statement.execute()</literal> method is valid here (ALTERs, INSERTS, etc). There are essentially two modes for defining auxiliary database objects..."
+msgstr ""
+
+#: index.docbook:2917
+msgid "The first mode is to explicitly list the CREATE and DROP commands out in the mapping file:"
+msgstr ""
+
+#: index.docbook:2921
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <create>CREATE TRIGGER my_trigger ...</create>\n"
+ " <drop>DROP TRIGGER my_trigger</drop>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2922
+msgid "The second mode is to supply a custom class which knows how to construct the CREATE and DROP commands. This custom class must implement the <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> interface."
+msgstr ""
+
+#: index.docbook:2927
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2928
+msgid "Additionally, these database objects can be optionally scoped such that they only apply when certain dialects are used."
+msgstr ""
+
+#: index.docbook:2932
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.Oracle9Dialect\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.OracleDialect\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/batch.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/batch.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/batch.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,459 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Batch processing"
+msgstr "ãããå¦ç"
+
+#: index.docbook:7
+msgid "A naive approach to inserting 100 000 rows in the database using Hibernate might look like this:"
+msgstr "Hibernateã使ã£ã¦ãã¼ã¿ãã¼ã¹ã«100,000è¡ãæ¿å
¥ããæç´ãªæ¹æ³ã¯ããã®ãããªãã®ã§ãï¼"
+
+#: index.docbook:12
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ "}\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();
+\n"
+ "Transaction tx = session.beginTransaction();
+\n"
+ "for ( int i=0; i<100000; i++ ) {
+\n"
+ " Customer customer = new Customer(.....);
+\n"
+ " session.save(customer);
+\n"
+ "}
+\n"
+ "tx.commit();
+\n"
+ "session.close();]]>"
+
+#: index.docbook:14
+msgid "This would fall over with an <literal>OutOfMemoryException</literal> somewhere around the 50 000th row. That's because Hibernate caches all the newly inserted <literal>Customer</literal> instances in the session-level cache."
+msgstr "ããã¯50,000çªç®ã®è¡ã®ããã㧠<literal>OutOfMemoryException</literal> ã§å¤±æããã§ãããã Hibernateãã»ãã·ã§ã³ã¬ãã«ãã£ãã·ã¥ã§ã æ°ããæ¿å
¥ããããã¹ã¦ã® <literal>Customer</literal> ã¤ã³ã¹ã¿ã³ã¹ããã£ãã·ã¥ããããã§ãã"
+
+#: index.docbook:20
+msgid "In this chapter we'll show you how to avoid this problem. First, however, if you are doing batch processing, it is absolutely critical that you enable the use of JDBC batching, if you intend to achieve reasonable performance. Set the JDBC batch size to a reasonable number (say, 10-50):"
+msgstr "ãã®ç« ã§ã¯ããã®åé¡ãåé¿ããæ¹æ³ãç´¹ä»ãã¾ãã ããããããå¦çããããªããJDBCãããã使ç¨å¯è½ã§ãããã¨ãé常ã«éè¦ã§ãã ããã§ãªããã°æé ãªããã©ã¼ãã³ã¹ãå¾ããã¾ããã JDBCããããµã¤ãºãæé ãªæ°å¤ï¼ä¾ãã°ã10ãã50ï¼ã«è¨å®ãã¦ãã ããï¼"
+
+#: index.docbook:27
+msgid "<![CDATA[hibernate.jdbc.batch_size 20]]>"
+msgstr "<![CDATA[hibernate.jdbc.batch_size 20]]>"
+
+#: index.docbook:29
+msgid "Note that Hibernate disables insert batching at the JDBC level transparently if you use an <literal>identiy</literal> identifier generator."
+msgstr "ã¾ãäºæ¬¡ãã£ãã·ã¥ãå
¨ãå¹ããªãããã»ã¹ã§ã ãã®ãããªä½æ¥ããããã¨æãããããã¾ããï¼"
+
+#: index.docbook:34
+msgid "You also might like to do this kind of work in a process where interaction with the second-level cache is completely disabled:"
+msgstr "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
+
+#: index.docbook:39
+msgid "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
+msgstr "ããããããã¯çµ¶å¯¾ã«å¿
è¦ã¨ããããã§ã¯ããã¾ããã ãªããªãæ示çã« <literal>CacheMode</literal> ãè¨å®ãã¦ã äºæ¬¡ãã£ãã·ã¥ã¨ã®ç¸äºä½ç¨ãç¡å¹ã«ãããã¨ãã§ããããã§ãã"
+
+#: index.docbook:41
+msgid "However, this is not absolutely necessary, since we can explicitly set the <literal>CacheMode</literal> to disable interaction with the second-level cache."
+msgstr "ãããæ¿å
¥"
+
+#: index.docbook:47
+msgid "Batch inserts"
+msgstr "æ°ãããªãã¸ã§ã¯ããæ°¸ç¶åããã¨ããä¸æ¬¡ãã£ãã·ã¥ã®ãµã¤ãºãå¶éããããã ã»ãã·ã§ã³ã <literal>flush()</literal> ã㦠<literal>clear()</literal> ããªããã°ãªãã¾ããã"
+
+#: index.docbook:49
+msgid "When making new objects persistent, you must <literal>flush()</literal> and then <literal>clear()</literal> the session regularly, to control the size of the first-level cache."
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();
+\n"
+ "Transaction tx = session.beginTransaction();
+\n"
+ "
+\n"
+ "for ( int i=0; i<100000; i++ ) {
+\n"
+ " Customer customer = new Customer(.....);
+\n"
+ " session.save(customer);
+\n"
+ " if ( i % 20 == 0 ) { //20, same as the JDBC batch size
+\n"
+ " //flush a batch of inserts and release memory:
+\n"
+ " session.flush();
+\n"
+ " session.clear();
+\n"
+ " }
+\n"
+ "}
+\n"
+ "
+\n"
+ "tx.commit();
+\n"
+ "session.close();]]>"
+
+#: index.docbook:55
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ " if ( i % 20 == 0 ) { //20, same as the JDBC batch size\n"
+ " //flush a batch of inserts and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "ãããæ´æ°"
+
+#: index.docbook:60
+msgid "Batch updates"
+msgstr "ãã¼ã¿ã復å
ãããæ´æ°ãããããã«ã¯åãã¢ã¤ãã£ã¢ãé©ç¨ãã¾ãã ããã«å ãã¦ããã¼ã¿ã®è¡ãå¤ãè¿ãã¯ã¨ãªã«å¯¾ãã¦æå¹ãª ãµã¼ãã¼ãµã¤ãã®ã«ã¼ã½ã«ã®å©ç¹ãçãããããã° <literal>scroll()</literal> ã使ãå¿
è¦ãããã¾ãã"
+
+#: index.docbook:62
+msgid "For retrieving and updating data the same ideas apply. In addition, you need to use <literal>scroll()</literal> to take advantage of server-side cursors for queries that return many rows of data."
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();
+\n"
+ "Transaction tx = session.beginTransaction();
+\n"
+ "
+\n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")
+\n"
+ " .setCacheMode(CacheMode.IGNORE)
+\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);
+\n"
+ "int count=0;
+\n"
+ "while ( customers.next() ) {
+\n"
+ " Customer customer = (Customer) customers.get(0);
+\n"
+ " customer.updateStuff(...);
+\n"
+ " if ( ++count % 20 == 0 ) {
+\n"
+ " //flush a batch of updates and release memory:
+\n"
+ " session.flush();
+\n"
+ " session.clear();
+\n"
+ " }
+\n"
+ "}
+\n"
+ "
+\n"
+ "tx.commit();
+\n"
+ "session.close();]]>"
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .setCacheMode(CacheMode.IGNORE)\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "int count=0;\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " if ( ++count % 20 == 0 ) {\n"
+ " //flush a batch of updates and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "StatelessSessionã¤ã³ã¿ã¼ãã§ã¤ã¹"
+
+#: index.docbook:73
+msgid "The StatelessSession interface"
+msgstr "ã¾ãå¥ã®æ¹æ³ã¨ãã¦ãHibernateã¯ã³ãã³ãæåã®APIãç¨æãã¦ãã¾ãã ããã¯åé¢ãªãã¸ã§ã¯ãã®å½¢ã§ã ãã¼ã¿ãã¼ã¹ã¨ã®ãã¼ã¿ã¹ããªã¼ã ã®ããåãã«ä½¿ããã¨ãã§ãã¾ãã <literal>StatelessSession</literal> ã¯é¢é£ããæ°¸ç¶ã³ã³ããã¹ããæããã é«ã¬ãã«ã®ã©ã¤ããµã¤ã¯ã«ã»ãã³ãã£ã¯ã¹ã®å¤ããæä¾ãã¾ããã ç¹ã«ã¹ãã¼ãã¬ã¹ã»ãã·ã§ã³ã¯ãä¸æãã£ãã·ã¥ãå®è£
ããã ã¾ãã©ã®ãããªäºæ¬¡ãã£ãã·ã¥ãã¯ã¨ãªãã£ãã·ã¥ã¨ãç¸äºä½ç¨ãã¾ããã ãã©ã³ã¶ã¯ã·ã§ãã«ãªwrite-behindãèªåãã¼ãã£ãã§ãã¯ãå®è£
ãã¾ããã ã¹ãã¼ãã¬ã¹ã»ãã·ã§ã³ã使ã£ã¦è¡ãããæä½ãã é¢é£ããã¤ã³ã¹ã¿ã³ã¹ã¸ã«ã¹ã±ã¼ãããããã¨ã¯æ±ºãã¦ããã¾ããã ã³ã¬ã¯ã·ã§ã³ã¯ãã¹ãã¼ãã¬ã¹ã»ãã·ã§ã³ããã¯ç¡è¦ããã¾ãã ã¹ãã¼ãã¬ã¹ã»!
ãã·ã§ã³ãéãã¦è¡ãããæä½ã¯ã Hibernateã®ã¤ãã³ãã¢ãã«ãã¤ã³ã¿ã¼ã»ãã¿ã®å½±é¿ãåãã¾ããã ä¸æãã£ãã·ã¥ãæããªãããã ã¹ãã¼ãã¬ã¹ã»ãã·ã§ã³ã¯å¥åãæã¤ãã¼ã¿ã«ä¸æã対å¦ã§ãã¾ããã ã¹ãã¼ãã¬ã¹ã»ãã·ã§ã³ã¯ä½ã¬ãã«ã®æ½è±¡åã§ãããJDBCã«é常ã«ããä¼¼ã¦ãã¾ãã"
+
+#: index.docbook:74
+msgid "Alternatively, Hibernate provides a command-oriented API that may be used for streaming data to and from the database in the form of detached objects. A <literal>StatelessSession</literal> has no persistence context associated with it and does not provide many of the higher-level life cycle semantics. In particular, a stateless session does not implement a first-level cache nor interact with any second-level or query cache. It does not implement transactional write-behind or automatic dirty checking. Operations performed using a stateless session do not ever cascade to associated instances. Collections are ignored by a stateless session. Operations performed via a stateless session bypass Hibernate's event model and interceptors. Stateless sessions are vulnerable to data aliasing effects, due to the lack of a first-level cache. A stateless session is a lower-level abstraction, much closer to the underlying JDBC."
+msgstr ""
+ "<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();
+\n"
+ "Transaction tx = session.beginTransaction();
+\n"
+ "
+\n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")
+\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);
+\n"
+ "while ( customers.next() ) {
+\n"
+ " Customer customer = (Customer) customers.get(0);
+\n"
+ " customer.updateStuff(...);
+\n"
+ " session.update(customer);
+\n"
+ "}
+\n"
+ "
+\n"
+ "tx.commit();
+\n"
+ "session.close();]]>"
+
+#: index.docbook:89
+msgid ""
+ "<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " session.update(customer);\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "ãã®ã³ã¼ãä¾ã§ã¯ãã¯ã¨ãªãè¿ã <literal>Customer</literal> ã¤ã³ã¹ã¿ã³ã¹ã¯å³åº§ã«ï¼ã»ãã·ã§ã³ããï¼åé¢ããããã¨ã«æ³¨æãã¦ãã ããã ããã¯ãã©ã®ãããªæ°¸ç¶ã³ã³ããã¹ãã¨ã決ãã¦é¢é£ãã¾ããã"
+
+#: index.docbook:91
+msgid "Note that in this code example, the <literal>Customer</literal> instances returned by the query are immediately detached. They are never associated with any persistence context."
+msgstr "<literal>StatelessSession</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã§å®ç¾©ããã¦ãã <literal>insert(), update(), delete()</literal> ã¯ã ä½ã¬ãã«ã®ç´æ¥çãªãã¼ã¿ãã¼ã¹æä½ã¨èãããã¾ãã çµæã¨ãã¦ãSQLã® <literal>INSERT, UPDATE, DELETE</literal> ãããããå³åº§ã«å®è¡ããã¾ãã ãã®ããã«ãããã㯠<literal>Session</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã§å®ç¾©ããã¦ãã <literal>save(), saveOrUpdate(), delete()</literal> ã¨ã¯é常ã«ç°ãªãæå³ãæã¡ã¾ãã"
+
+#: index.docbook:97
+msgid "The <literal>insert(), update()</literal> and <literal>delete()</literal> operations defined by the <literal>StatelessSession</literal> interface are considered to be direct database row-level operations, which result in immediate execution of a SQL <literal>INSERT, UPDATE</literal> or <literal>DELETE</literal> respectively. Thus, they have very different semantics to the <literal>save(), saveOrUpdate()</literal> and <literal>delete()</literal> operations defined by the <literal>Session</literal> interface."
+msgstr "DMLã¹ã¿ã¤ã«ã®æä½"
+
+#: index.docbook:110
+msgid "DML-style operations"
+msgstr "ãã§ã«è°è«ããããã«ãèªåçãã¤ééçãªãªãã¸ã§ã¯ã/ãªã¬ã¼ã·ã§ãã«ãããã³ã°ã¯ã ãªãã¸ã§ã¯ãã®ç¶æ
ã®ç®¡çã§ããã¨èãããã¾ãã ããã¯ã¡ã¢ãªå
ã®ãªãã¸ã§ã¯ãã®ç¶æ
ãå©ç¨ã§ããã¨ãããã¨ã§ãã ãã®ããï¼SQLã® <literal>ãã¼ã¿æä½è¨èª</literal> (DML) æï¼ <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal> ã使ã£ã¦ï¼ãã¼ã¿ãã¼ã¹å
ã®ãã¼ã¿ãç´æ¥æä½ãã¦ãã ã¡ã¢ãªå
ã®ç¶æ
ã«ã¯å½±é¿ãä¸ãã¾ããã ãããHibernateã¯ããã«ã¯SQLã¹ã¿ã¤ã«ã®DMLæå®è¡ã«å¯¾å¿ããã¡ã½ãããç¨æãã¦ãã¾ãã ããã¯Hibernateã¯ã¨ãªè¨èªï¼<xref linkend=\"queryhql\"/>HQLï¼ ãéãã¦å®è¡ããã¾ãã"
+
+#: index.docbook:112
+msgid "As already discussed, automatic and transparent object/relational mapping is concerned with the management of object state. This implies that the object state is available in memory, hence manipulating (using the SQL <literal>Data Manipulation Language</literal> (DML) statements: <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>) data directly in the database will not affect in-memory state. However, Hibernate provides methods for bulk SQL-style DML statement execution which are performed through the Hibernate Query Language (<xref linkend=\"queryhql\"/>HQL)."
+msgstr "<literal>UPDATE</literal> 㨠<literal>DELETE</literal> æã®çä¼¼æ§æã¯ï¼ <literal>( UPDATE | DELETE ) FROM? ã¨ã³ãã£ãã£å (WHERE æ¡ä»¶ç¯)?</literal> ã§ãã 注æãã¹ãç¹ãããã¤ãããã¾ãï¼"
+
+#: index.docbook:122
+msgid "The pseudo-syntax for <literal>UPDATE</literal> and <literal>DELETE</literal> statements is: <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?</literal>. Some points to note:"
+msgstr "fromç¯ã«ããã¦ãFROMãã¼ã¯ã¼ãã¯ãªãã·ã§ã³ã§ãã"
+
+#: index.docbook:130
+msgid "In the from-clause, the FROM keyword is optional"
+msgstr "fromç¯ã§ã¯åä¸ã®ã¨ã³ãã£ãã£åã ããå¯è½ã§ã ä»»æã§å¥åãä»ãããã¨ãã§ãã¾ãã ã¨ã³ãã£ãã£åã«å¥åãä¸ããããã¨ãã©ã®ãããªããããã£åç
§ãã ãã®å¥åã使ã£ã¦ä¿®é£¾ããªããã°ãªãã¾ããã ããã¨ã³ãã£ãã£åã«å¥åãä¸ããããªããã°ã ã©ã®ãããªããããã£åç
§ã修飾ãã¦ã¯ãªãã¾ããã"
+
+#: index.docbook:135
+msgid "There can only be a single entity named in the from-clause; it can optionally be aliased. If the entity name is aliased, then any property references must be qualified using that alias; if the entity name is not aliased, then it is illegal for any property references to be qualified."
+msgstr "ï¼æé»çã§ããæ示çã§ããï¼<xref linkend=\"queryhql-joins-forms\"/>çµå ããã«ã¯HQLã¯ã¨ãªå
ã§æå®ãããã¨ã¯ã§ãã¾ããã ãµãã¯ã¨ãªã¯whereç¯ã§ä½¿ããã¨ãã§ãã¾ã ãµãã¯ã¨ãªãã®ãã®ã¯ãçµåãå«ãããã¾ãã"
+
+#: index.docbook:143
+msgid "No <xref linkend=\"queryhql-joins-forms\"/>joins (either implicit or explicit) can be specified in a bulk HQL query. Sub-queries may be used in the where-clause; the subqueries, themselves, may contain joins."
+msgstr "whereç¯ã¯ãªãã·ã§ã³ã§ãã"
+
+#: index.docbook:150
+msgid "The where-clause is also optional."
+msgstr "ä¾ã¨ãã¦ãHQLã® <literal>UPDATE</literal> ãå®è¡ããã«ã¯ã <literal>Query.executeUpdate()</literal> ã¡ã½ããã使ã£ã¦ãã ããã ï¼ãã®ã¡ã½ããã¯ããªãã¿ã®JDBC <literal>PreparedStatement.executeUpdate()</literal> ããåä»ãããã¾ããï¼ï¼ d"
+
+#: index.docbook:156
+msgid "As an example, to execute an HQL <literal>UPDATE</literal>, use the <literal>Query.executeUpdate()</literal> method (the method is named for those familiar with JDBC's <literal>PreparedStatement.executeUpdate()</literal>):"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();
+\n"
+ "Transaction tx = session.beginTransaction();
+\n"
+ "
+\n"
+ "String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";
+\n"
+ "// or String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";
+\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )
+\n"
+ " .setString( \"newName\", newName )
+\n"
+ " .setString( \"oldName\", oldName )
+\n"
+ " .executeUpdate();
+\n"
+ "tx.commit();
+\n"
+ "session.close();]]>"
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";\n"
+ "// or String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "HQLã® <literal>UPDATE</literal> æã¯ãããã©ã«ãã§ã¯ãä½ç¨ããã¨ã³ãã£ãã£ã® <xref linkend=\"mapping-declaration-version\"/>version ã <xref linkend=\"mapping-declaration-timestamp\"/>timestamp ããããã£ã®å¤ã«ã¯å½±é¿ãã¾ããã ããã¯EJB3ã®ä»æ§ã«ãåãç¶ããã¦ãã¾ãã ããã <literal>versioned update</literal> ã使ã£ã¦ã <literal>version</literal> ã <literal>timestamp</literal> ããããã£ã®å¤ãå¼·å¶çã«ãªã»ããããããã¨ãã§ãã¾ãã ãã㯠<literal>UPDATE</literal> ãã¼ã¯ã¼ãã®å¾ã« <literal>VERSIONED</literal> ãã¼ã¯ã¼ãã追å ãããã¨ã§è¡ãã¾ãã"
+
+#: index.docbook:164
+msgid "HQL <literal>UPDATE</literal> statements, by default do not effect the <xref linkend=\"mapping-declaration-version\"/>version or the <xref linkend=\"mapping-declaration-timestamp\"/>timestamp property values for the affected entities; this is in keeping with the EJB3 specification. However, you can force Hibernate to properly reset the <literal>version</literal> or <literal>timestamp</literal> property values through the use of a <literal>versioned update</literal>. This is achieved by adding the <literal>VERSIONED</literal> keyword after the <literal>UPDATE</literal> keyword."
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();
+\n"
+ "Transaction tx = session.beginTransaction();
+\n"
+ "String hqlVersionedUpdate = \"update versioned Customer set name = :newName where name = :oldName\";
+\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )
+\n"
+ " .setString( \"newName\", newName )
+\n"
+ " .setString( \"oldName\", oldName )
+\n"
+ " .executeUpdate();
+\n"
+ "tx.commit();
+\n"
+ "session.close();]]>"
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "String hqlVersionedUpdate = \"update versioned Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "ã«ã¹ã¿ã ãã¼ã¸ã§ã³åï¼<literal>org.hibernate.usertype.UserVersionType</literal>ï¼ ã¯ <literal>update versioned</literal> æã¨ä¸ç·ã«ä½¿ããªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:176
+msgid "Note that custom version types (<literal>org.hibernate.usertype.UserVersionType</literal>) are not allowed in conjunction with a <literal>update versioned</literal> statement."
+msgstr "HQLã® <literal>DELETE</literal> ãå®è¡ããã«ã¯ã åã <literal>Query.executeUpdate()</literal> ã¡ã½ããã使ã£ã¦ãã ããï¼"
+
+#: index.docbook:181
+msgid "To execute an HQL <literal>DELETE</literal>, use the same <literal>Query.executeUpdate()</literal> method:"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();
+\n"
+ "Transaction tx = session.beginTransaction();
+\n"
+ "
+\n"
+ "String hqlDelete = \"delete Customer c where c.name = :oldName\";
+\n"
+ "// or String hqlDelete = \"delete Customer where name = :oldName\";
+\n"
+ "int deletedEntities = s.createQuery( hqlDelete )
+\n"
+ " .setString( \"oldName\", oldName )
+\n"
+ " .executeUpdate();
+\n"
+ "tx.commit();
+\n"
+ "session.close();]]>"
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlDelete = \"delete Customer c where c.name = :oldName\";\n"
+ "// or String hqlDelete = \"delete Customer where name = :oldName\";\n"
+ "int deletedEntities = s.createQuery( hqlDelete )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr "<literal>Query.executeUpdate()</literal> ã¡ã½ãããè¿ã <literal>int</literal> ã®å¤ã¯ããã®æä½ãå½±é¿ãåã¼ããã¨ã³ãã£ãã£ã®æ°ã§ãã ãããå½±é¿ãããã¼ã¿ãã¼ã¹å
ã®è¡æ°ã¨ãç¸äºã«é¢ä¿ãããã©ãããèãã¦ã¿ã¦ãã ããã HQLãã«ã¯æä½ã¯ãçµæã¨ãã¦ãå®éã®SQLæãè¤æ°å®è¡ããããã¨ã«ãªãã¾ãã ä¾ãã°joined-subclassã§ãã è¿ãããæ°ã¯ããã®æã«ãã£ã¦å½±é¿ãããå®éã®ã¨ã³ãã£ãã£ã®æ°ã示ãã¾ãã joined-subclassã®ä¾ã«æ»ãã¨ããµãã¯ã©ã¹ã®ä¸ã¤ã«å¯¾ããåé¤ã¯ã ãã®ãµãã¯ã©ã¹ããããã³ã°ããããã¼ãã«ã ãã§ã¯ãªãã ãã«ã¼ãããã¼ãã«ã¨ç¶æ¿é層ãããã«ä¸ã£ãjoined-subclassã®ãã¼ãã«ã®åé¤ã«ãªãã¾ãã"
+
+#: index.docbook:188
+msgid "The <literal>int</literal> value returned by the <literal>Query.executeUpdate()</literal> method indicate the number of entities effected by the operation. Consider this may or may not correlate to the number of rows effected in the database. An HQL bulk operation might result in multiple actual SQL statements being executed, for joined-subclass, for example. The returned number indicates the number of actual entities affected by the statement. Going back to the example of joined-subclass, a delete against one of the subclasses may actually result in deletes against not just the table to which that subclass is mapped, but also the \"root\" table and potentially joined-subclass tables further down the inheritence hierarchy."
+msgstr "<literal>INSERT</literal> æã®çä¼¼æ§æã¯ï¼ <literal>INSERT INTO ã¨ã³ãã£ãã£å ããããã£ãªã¹ã selectæ</literal> ã§ãã 注æãã¹ãç¹ãããã¤ãããã¾ãï¼"
+
+#: index.docbook:199
+msgid "The pseudo-syntax for <literal>INSERT</literal> statements is: <literal>INSERT INTO EntityName properties_list select_statement</literal>. Some points to note:"
+msgstr "INSERT INTO ... SELECT ... ã®å½¢å¼ã ãããµãã¼ãããã¦ãã¾ãã INSERT INTO ... VALUES ... ã®å½¢å¼ã¯ãµãã¼ãããã¦ãã¾ããã"
+
+#: index.docbook:207
+msgid "Only the INSERT INTO ... SELECT ... form is supported; not the INSERT INTO ... VALUES ... form."
+msgstr "ããããã£ãªã¹ãã¯ãSQLã® <literal>INSERT</literal> æã«ããã <literal>ã«ã©ã ã®ä»æ§</literal> ã«é¡ä¼¼ãã¦ãã¾ãã ç¶æ¿ã®ãããã³ã°ã«å«ã¾ããã¨ã³ãã£ãã£ã«å¯¾ãã¦ã ã¯ã©ã¹ã¬ãã«ã§ç´æ¥å®ç¾©ãããããããã£ã ãããããããã£ãªã¹ãã«ä½¿ãã¾ãã ã¹ã¼ãã¼ã¯ã©ã¹ã®ããããã£ã¯èªããããããµãã¯ã©ã¹ã®ããããã£ã¯å¹æãããã¾ããã è¨ãæãã㨠<literal>INSERT</literal> æã¯ãæ¬è³ªçã«ããªã¢ã¼ãã£ãã¯ã§ã¯ããã¾ããã"
+
+#: index.docbook:210
+msgid "The properties_list is analogous to the <literal>column speficiation</literal> in the SQL <literal>INSERT</literal> statement. For entities involved in mapped inheritence, only properties directly defined on that given class-level can be used in the properties_list. Superclass properties are not allowed; and subclass properties do not make sense. In other words, <literal>INSERT</literal> statements are inherently non-polymorphic."
+msgstr "selectæã®è¿ãå¤ã®åãinsertæãæå¾
ããåã¨ããããã¦ããã°ã ãã®selectæã¯å¦¥å½ãªHQL selectã¯ã¨ãªã¨ãªããã¾ãã ç¾å¨ãã®ãã§ãã¯ããã¼ã¿ãã¼ã¹ã¸ä»»ããã®ã§ã¯ãªããã¯ã¨ãªã®ã³ã³ãã¤ã«æã«ãã§ãã¯ãã¾ãã ãã®ãã¨ã¯ã<emphasis>equal</emphasis>ã¨ã¯éãã Hibernateã® <literal>Type</literal> éã® <emphasis>equivalent</emphasis> ã«é¢ãã åé¡ãå¼ãèµ·ãããã¨ã«æ³¨æãã¦ãã ããã ãã㯠<literal>org.hibernate.type.DataType</literal> ã¨ãã¦å®ç¾©ãããããããã£ã¨ã <literal>org.hibernate.type.TimestampType</literal> ã¨ãã¦å®ç¾©ãããããããã£ã®éã®ãã¹ãããã®åé¡ãå¼ãèµ·ããã¾ãã ãã¼ã¿ãã¼ã¹ãããããåºå¥ã§ããªãã¦ããå¤æãããã¨ãã§ãã¦ãããã®åé¡ã¯çºçãã¾ãã"
+
+#: index.docbook:220
+msgid "select_statement can be any valid HQL select query, with the caveat that the return types must match the types expected by the insert. Currently, this is checked during query compilation rather than allowing the check to relegate to the database. Note however that this might cause problems between Hibernate <literal>Type</literal>s which are <emphasis>equivalent</emphasis> as opposed to <emphasis>equal</emphasis>. This might cause issues with mismatches between a property defined as a <literal>org.hibernate.type.DateType</literal> and a property defined as a <literal>org.hibernate.type.TimestampType</literal>, even though the database might not make a distinction or might be able to handle the conversion."
+msgstr "idããããã£ã«å¯¾ãã¦ãinsertæã«ã¯äºã¤ã®é¸æè¢ãããã¾ãã ããããã£ãªã¹ãã§æ示çã«idããããã£ãæå®ããã ï¼ãã®å ´åã対å¿ããselectå¼ããå¤ãåããã¾ãï¼ã ããããã£ãªã¹ãããé¤å¤ããã ï¼ãã®å ´åãçæãããå¤ã使ããã¾ãï¼ã®ããããã§ãã å¾è
ã®é¸æè¢ã¯ããã¼ã¿ãã¼ã¹å
ãæä½ããidã¸ã§ãã¬ã¼ã¿ã使ãã¨ãã®ã¿ãå©ç¨å¯è½ã§ãã ãã®é¸æè¢ãæ¡ãå ´åããã¤ã³ã¡ã¢ãªãåã®ã¸ã§ãã¬ã¼ã¿ã使ãã¨ãæ§æ解ææã«ä¾å¤ãçºçãã¾ãã ãã®è°è«ã§ã¯ãã¤ã³ãã¼ã¿ãã¼ã¹åã¸ã§ãã¬ã¼ã¿ã¯ <literal>org.hibernate.id.SequenceGenerator</literal> ï¼ã¨ãã®ãµãã¯ã©ã¹ï¼ã¨ã<literal>org.hibernate.id.PostInsertIdentifierGenerator</literal> ã®å®è£
ã§ããã¨èãã¦ãã¾ãã ããã§æã注æãã¹ãä¾å¤ã¯ã<literal>org.hibernate.id.TableHiLoGenerator!
</literal> ã§ãã å¤ãåå¾ããé¸æå¯è½ãªæ¹æ³ããªãããããã®ã¸ã§ãã¬ã¼ã¿ã使ããã¨ã¯ã§ãã¾ããã"
+
+#: index.docbook:232
+msgid "For the id property, the insert statement gives you two options. You can either explicitly specify the id property in the properties_list (in which case its value is taken from the corresponding select expression) or omit it from the properties_list (in which case a generated value is used). This later option is only available when using id generators that operate in the database; attempting to use this option with any \"in memory\" type generators will cause an exception during parsing. Note that for the purposes of this discussion, in-database generators are considered to be <literal>org.hibernate.id.SequenceGenerator</literal> (and its subclasses) and any implementors of <literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>. The most notable exception here is <literal>org.hibernate.id.TableHiLoGenerator</literal>, which cannot be used because it does not expose a selectable way to get its values."
+msgstr "<literal>version</literal> ã <literal>timestamp</literal> ã¨ãã¦ãããã³ã°ãããããããã£ã«å¯¾ãã¦ã insertæã«ã¯äºã¤ã®é¸æè¢ãããã¾ãã ããããã£ãªã¹ãã§æ示çã«ããããã£ãæå®ããã ï¼ãã®å ´åã対å¿ããselectå¼ããå¤ãåããã¾ãï¼ã ããããã£ãªã¹ãããé¤å¤ããã ï¼ãã®å ´åã<literal>org.hibernate.type.VersionType</literal> ã§å®ç¾©ããã <literal>ã·ã¼ãå¤</literal> ã使ããã¾ãï¼ã®ããããã§ãã"
+
+#: index.docbook:247
+msgid "For properties mapped as either <literal>version</literal> or <literal>timestamp</literal>, the insert statement gives you two options. You can either specify the property in the properties_list (in which case its value is taken from the corresponding select expressions) or omit it from the properties_list (in which case the <literal>seed value</literal> defined by the <literal>org.hibernate.type.VersionType</literal> is used)."
+msgstr "HQLã® <literal>INSERT</literal> æã®å®è¡ä¾ã§ãï¼"
+
+#: index.docbook:257
+msgid "An example HQL <literal>INSERT</literal> statement execution:"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();
+\n"
+ "Transaction tx = session.beginTransaction();
+\n"
+ "
+\n"
+ "String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";
+\n"
+ "int createdEntities = s.createQuery( hqlInsert )
+\n"
+ " .executeUpdate();
+\n"
+ "tx.commit();
+\n"
+ "session.close();]]>"
+
+#: index.docbook:261
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";\n"
+ "int createdEntities = s.createQuery( hqlInsert )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/best_practices.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/best_practices.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/best_practices.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,168 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Best Practices"
+msgstr "ãã¹ããã©ã¯ãã£ã¹"
+
+#: index.docbook:9
+msgid "Write fine-grained classes and map them using <literal><component></literal>."
+msgstr "ã¯ã©ã¹ã¯ç´°ããç²åº¦ã§æ¸ã <literal><component></literal> ã§ãããã³ã°ãã¾ãããã"
+
+#: index.docbook:11
+msgid "Use an <literal>Address</literal> class to encapsulate <literal>street</literal>, <literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>. This encourages code reuse and simplifies refactoring."
+msgstr "<literal>street</literal>ï¼éãï¼, <literal>suburb</literal> ï¼é½å¸ï¼, <literal>state</literal>ï¼å·ï¼, <literal>postcode</literal> ï¼éµä¾¿çªå·ï¼ãã«ãã»ã«åãã <literal>Address</literal>ï¼ä½æï¼ã¯ã©ã¹ã使ãã¾ãããã ããããã°ã³ã¼ããåå©ç¨ãããããªãããªãã¡ã¯ã¿ãªã³ã°ãç°¡åã«ãªãã¾ãã"
+
+#: index.docbook:19
+msgid "Declare identifier properties on persistent classes."
+msgstr "æ°¸ç¶ã¯ã©ã¹ã«ã¯èå¥åããããã£ãå®ç¾©ãã¾ãããã"
+
+#: index.docbook:21
+msgid "Hibernate makes identifier properties optional. There are all sorts of reasons why you should use them. We recommend that identifiers be 'synthetic' (generated, with no business meaning)."
+msgstr "Hibernateã§ã¯èå¥åããããã£ã¯ãªãã·ã§ã³ã§ããã 使ç¨ãã¹ãçç±ãããããããã¾ãã èå¥åã¯ã人工çãï¼çæããããæ¥åçãªæå³ãæããªãï¼ ãªãã®ã«ãããã¨ããããããã¾ãã"
+
+#: index.docbook:29
+msgid "Identify natural keys."
+msgstr "èªç¶ãã¼ãè¦ã¤ãã¾ãããã"
+
+#: index.docbook:31
+msgid "Identify natural keys for all entities, and map them using <literal><natural-id></literal>. Implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the properties that make up the natural key."
+msgstr "ãã¹ã¦ã®ã¨ã³ãã£ãã£ã«å¯¾ãã¦èªç¶ãã¼ãè¦ã¤ãã¦ã <literal><natural-id></literal> ã§ãããã³ã°ãã¾ãããã èªç¶ãã¼ãæ§æããããããã£ãæ¯è¼ããããã«ã <literal>equals()</literal> 㨠<literal>hashCode()</literal> ãå®è£
ãã¾ãããã"
+
+#: index.docbook:39
+msgid "Place each class mapping in its own file."
+msgstr "ã¯ã©ã¹ã®ãããã³ã°ã¯ããããã®ã¯ã©ã¹å°ç¨ã®ãã¡ã¤ã«ã«æ¸ãã¾ãããã"
+
+#: index.docbook:41
+msgid "Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</literal> in the file <literal>com/eg/Foo.hbm.xml</literal>. This makes particularly good sense in a team environment."
+msgstr "åä¸ã®å·¨å¤§ãªãããã³ã°ããã¥ã¡ã³ãã使ç¨ããªãã§ãã ããã <literal>com.eg.Foo</literal> ã¯ã©ã¹ãªã <literal>com/eg/Foo.hbm.xml</literal> ãã¡ã¤ã«ã«ãããã³ã°ãã¾ãããã ãã®ãã¨ã¯ãç¹ã«ãã¼ã ã§ã®éçºã«æå³ãããã¾ãã"
+
+#: index.docbook:49
+msgid "Load mappings as resources."
+msgstr "ãªã½ã¼ã¹ã¨ãã¦ãããã³ã°ããã¼ããã¾ãããã"
+
+#: index.docbook:51
+msgid "Deploy the mappings along with the classes they map."
+msgstr "ãããã³ã°ãããããããããã³ã°ããããã¯ã©ã¹ã¨ä¸ç·ã«é
ç½®ãã¾ãããã"
+
+#: index.docbook:57
+msgid "Consider externalising query strings."
+msgstr "ã¯ã¨ãªæååãå¤é¨ã«ç½®ããã¨ãèãã¾ããã"
+
+#: index.docbook:59
+msgid "This is a good practice if your queries call non-ANSI-standard SQL functions. Externalising the query strings to mapping files will make the application more portable."
+msgstr "ã¯ã¨ãªãANSIæ¨æºã§ãªãSQLé¢æ°ãå¼ãã§ãããªããããã¯ãããã©ã¯ãã£ã¹ã§ãã ã¯ã¨ãªæååããããã³ã°ãã¡ã¤ã«ã¸å¤åºãããã°ã¢ããªã±ã¼ã·ã§ã³ããã¼ã¿ãã«ã«ãªãã¾ãã"
+
+#: index.docbook:67
+msgid "Use bind variables."
+msgstr "ãã¤ã³ãå¤æ°ã使ãã¾ãããã"
+
+#: index.docbook:69
+msgid "As in JDBC, always replace non-constant values by \"?\". Never use string manipulation to bind a non-constant value in a query! Even better, consider using named parameters in queries."
+msgstr "JDBCã®å ´åã¨åãããã«ãå®æ°ã§ãªãå¤ã¯å¿
ã\"?\"ã§ç½®ãæãã¾ãããã å®æ°ã§ãªãå¤ããã¤ã³ãããããã«ãã¯ã¨ãªã§æååæä½ã使ã£ã¦ã¯ããã¾ããã ååä»ãã®ãã©ã¡ã¼ã¿ã使ãããã«ããã¨ããã«è¯ãã§ãã"
+
+#: index.docbook:77
+msgid "Don't manage your own JDBC connections."
+msgstr "JDBCã³ãã¯ã·ã§ã³ã管çãã¦ã¯ããã¾ããã"
+
+#: index.docbook:79
+msgid "Hibernate lets the application manage JDBC connections. This approach should be considered a last-resort. If you can't use the built-in connections providers, consider providing your own implementation of <literal>org.hibernate.connection.ConnectionProvider</literal>."
+msgstr "Hibernateã§ã¯ã¢ããªã±ã¼ã·ã§ã³ãJDBCã³ãã¯ã·ã§ã³ã管çãããã¨ã許ããã¦ãã¾ãã ãããããã¯æçµæ段ã ã¨æã£ã¦ãã ããã çµã¿è¾¼ã¿ã®ã³ãã¯ã·ã§ã³ãããã¤ãã使ããã¨ãã§ããªããã°ã <literal>org.hibernate.connection.ConnectionProvider</literal> ãå®è£
ãããã¨ãèãã¦ãã ããã"
+
+#: index.docbook:87
+msgid "Consider using a custom type."
+msgstr "ã«ã¹ã¿ã åã®ä½¿ç¨ãèãã¾ãããã"
+
+#: index.docbook:89
+msgid "Suppose you have a Java type, say from some library, that needs to be persisted but doesn't provide the accessors needed to map it as a component. You should consider implementing <literal>org.hibernate.UserType</literal>. This approach frees the application code from implementing transformations to / from a Hibernate type."
+msgstr "ããã©ã¤ãã©ãªããæã£ã¦ããJavaåãæ°¸ç¶åããå¿
è¦ãããã¨ãã¾ãããã ããããã®åã«ã¯ãã³ã³ãã¼ãã³ãã¨ãã¦ãããã³ã°ããããã«å¿
è¦ãªã¢ã¯ã»ãµããªãã¨ãã¾ãã ãã®ãããªå ´å㯠<literal>org.hibernate.UserType</literal> ã®å®è£
ãèããã¹ãã§ãã ããããã°Hibernateåã¨ã®å®è£
å¤æãå¿é
ããã«ã¢ããªã±ã¼ã·ã§ã³ã®ã³ã¼ããæ±ãã¾ãã"
+
+#: index.docbook:98
+msgid "Use hand-coded JDBC in bottlenecks."
+msgstr "ããã«ããã¯ã解æ¶ããã«ã¯JDBCããã³ãã³ã¼ããã¾ãããã"
+
+#: index.docbook:100
+msgid "In performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. But please, wait until you <emphasis>know</emphasis> something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If you need to use direct JDBC, it might be worth opening a Hibernate <literal>Session</literal> and using that JDBC connection. That way you can still use the same transaction strategy and underlying connection provider."
+msgstr "ã·ã¹ãã ã®ããã©ã¼ãã³ã¹ã¯ãªãã£ã«ã«ãªé åã§ã¯ã ãã種ã®æä½ã«JDBCãç´æ¥ä½¿ãã¨è¯ãããããã¾ããã ãããä½ãããã«ããã¯ã«ãªã£ã¦ããã <emphasis>ã¯ã£ãããã</emphasis> ã¾ã§ã¯å¾
ã£ã¦ãã ããã ã¾ãJDBCãç´æ¥ä½¿ãããã¨ãã£ã¦ãå¿
ãããéããªãã¨ã¯éããªããã¨ãç解ãã¦ãã ããã JDBCãç´æ¥ä½¿ãå¿
è¦ãããã°ãHibernateã® <literal>Session</literal> ããªã¼ãã³ãã¦ã JDBCã³ãã¯ã·ã§ã³ã使ãã¨è¯ãããããã¾ããã ä¾ç¶ã¨ãã¦åããã©ã³ã¶ã¯ã·ã§ã³æ¦ç¥ã¨ã³ãã¯ã·ã§ã³ãããã¤ãã使ããããã§ãã"
+
+#: index.docbook:110
+msgid "Understand <literal>Session</literal> flushing."
+msgstr "<literal>Session</literal> ã®ãã©ãã·ã¥ãç解ãã¾ãããã"
+
+#: index.docbook:112
+msgid "From time to time the Session synchronizes its persistent state with the database. Performance will be affected if this process occurs too often. You may sometimes minimize unnecessary flushing by disabling automatic flushing or even by changing the order of queries and other operations within a particular transaction."
+msgstr "Sessionãæ°¸ç¶ç¶æ
ããã¼ã¿ãã¼ã¹ã¨åæããããã¨ãã¨ãã©ãããã¾ãã ãããããããã¾ãã«é »ç¹ã«èµ·ããããã ã¨ãããã©ã¼ãã³ã¹ã«å½±é¿ãåºã¦ãã¾ãã èªåãã©ãã·ã¥ãç¡å¹ã«ããããç¹å®ã®ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¯ã¨ãªãæä½ã®é çªãå¤æ´ãããã¨ã§ã ä¸å¿
è¦ãªãã©ãã·ã¥ãæå°éã«ã§ãã¾ãã"
+
+#: index.docbook:121
+msgid "In a three tiered architecture, consider using detached objects."
+msgstr "3層ã¢ã¼ããã¯ãã£ã§ã¯åé¢ãªãã¸ã§ã¯ãã®ä½¿ç¨ãèãã¾ãããã"
+
+#: index.docbook:123
+msgid "When using a servlet / session bean architecture, you could pass persistent objects loaded in the session bean to and from the servlet / JSP layer. Use a new session to service each request. Use <literal>Session.merge()</literal> or <literal>Session.saveOrUpdate()</literal> to synchronize objects with the database."
+msgstr "ãµã¼ãã¬ãã / ã»ãã·ã§ã³ãã¼ã³ã¢ã¼ããã¯ãã£ã使ãã¨ãã ãµã¼ãã¬ãã層 / JSP層éã§ã»ãã·ã§ã³ãã¼ã³ã§ãã¼ãããæ°¸ç¶ãªãã¸ã§ã¯ããããåãã§ãã¾ãã ãã®éãªã¯ã¨ã¹ããã¨ã«æ°ããSessionã使ã£ã¦ãã ããã ã¾ã <literal>Session.merge()</literal> ã <literal>Session.saveOrUpdate()</literal> ã使ã£ã¦ããªãã¸ã§ã¯ãã¨ãã¼ã¿ãã¼ã¹ãåæããã¦ãã ããã"
+
+#: index.docbook:132
+msgid "In a two tiered architecture, consider using long persistence contexts."
+msgstr "2層ã¢ã¼ããã¯ãã£ã§ã¯é·ãæ°¸ç¶ã³ã³ããã¹ãã®ä½¿ç¨ãèãã¾ãããã"
+
+#: index.docbook:134
+msgid "Database Transactions have to be as short as possible for best scalability. However, it is often neccessary to implement long running <emphasis>application transactions</emphasis>, a single unit-of-work from the point of view of a user. An application transaction might span several client request/response cycles. It is common to use detached objects to implement application transactions. An alternative, extremely appropriate in two tiered architecture, is to maintain a single open persistence contact (session) for the whole life cycle of the application transaction and simply disconnect from the JDBC connection at the end of each request and reconnect at the beginning of the subsequent request. Never share a single session across more than one application transaction, or you will be working with stale data."
+msgstr "æé«ã®ã¹ã±ã¼ã©ããªãã£ãå¾ãã«ã¯ã ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãã§ããã ãçãããªããã°ãªãã¾ããã ãããé·ãéå®è¡ãã <emphasis>ã¢ããªã±ã¼ã·ã§ã³ãã©ã³ã¶ã¯ã·ã§ã³</emphasis> ã®å®è£
ãå¿
è¦ãªãã¨ã¯ãã°ãã°ã§ãã ããã¯ã¦ã¼ã¶ã®è¦ç¹ããã¯1åã®ä½æ¥åä½ï¼unit of workï¼ã«ãªãã¾ãã ã¢ããªã±ã¼ã·ã§ã³ãã©ã³ã¶ã¯ã·ã§ã³ã¯ããã¤ãã®ã¯ã©ã¤ã¢ã³ãã®ãªã¯ã¨ã¹ã/ã¬ã¹ãã³ã¹ãµã¤ã¯ã«ã«ã¾ãããã¾ãã ã¢ããªã±ã¼ã·ã§ã³ãã©ã³ã¶ã¯ã·ã§ã³ã®å®è£
ã«åé¢ãªãã¸ã§ã¯ãã使ãã®ã¯ä¸è¬çã§ãã ããã§ãªããã°ã2層ã¢ã¼ããã¯ãã£ã®å ´åã¯ç¹ã«é©åãªãã¨ã§ããã ã¢ããªã±ã¼ã·ã§ã³ãã©ã³ã¶ã¯ã·ã§ã³ã®ã©ã¤ããµã¤ã¯ã«å
¨ä½ã«å¯¾ã㦠åä¸ã®ãªã¼ãã³ãªæ°¸ç¶åã³ã³ããã¹ãï¼ã»ãã·ã§ã³ï¼ãç¶æãã¦ãã ããã ããã¦åç´ã«ãª!
ã¯ã¨ã¹ãã®æå¾ã«JDBCã³ãã¯ã·ã§ã³ããåæãã 次ã®ãªã¯ã¨ã¹ãã®æåã«åæ¥ç¶ãã¾ãã 決ãã¦è¤æ°ã®ã¢ããªã±ã¼ã·ã§ã³ãã©ã³ã¶ã¯ã·ã§ã³ã¦ã¼ã¹ã±ã¼ã¹ã«æ¸¡ã£ã¦ 1åã®Sessionã使ãåããªãã§ãã ããã ããã§ãªããã°ãå¤ããã¼ã¿ã§ä½æ¥ãããã¨ã«ãªãã¾ãã"
+
+#: index.docbook:148
+msgid "Don't treat exceptions as recoverable."
+msgstr "ä¾å¤ã復帰å¯è½ãªãã®ã¨ãã¦æ±ã£ã¦ã¯ããã¾ããã"
+
+#: index.docbook:150
+msgid "This is more of a necessary practice than a \"best\" practice. When an exception occurs, roll back the <literal>Transaction</literal> and close the <literal>Session</literal>. If you don't, Hibernate can't guarantee that in-memory state accurately represents persistent state. As a special case of this, do not use <literal>Session.load()</literal> to determine if an instance with the given identifier exists on the database; use <literal>Session.get()</literal> or a query instead."
+msgstr "ããã¯ããã¹ãããã©ã¯ãã£ã¹ä»¥ä¸ã®ãå¿
é ã®ãã©ã¯ãã£ã¹ã§ãã ä¾å¤ãçºçããã¨ã㯠<literal>Transaction</literal> ããã¼ã«ããã¯ãã¦ã <literal>Session</literal> ãã¯ãã¼ãºãã¦ãã ããã ããããªãã¨Hibernateã¯ã¡ã¢ãªã®ç¶æ
ãæ°¸ç¶ç¶æ
ãæ£ç¢ºã«è¡¨ç¾ãã¦ãããã¨ãä¿è¨¼ã§ãã¾ããã ãã®ç¹å¥ãªå ´åã¨ãã¦ãä¸ããããèå¥åãæã¤ã¤ã³ã¹ã¿ã³ã¹ããã¼ã¿ãã¼ã¹ã«åå¨ãããã©ãããå¤å®ããããã«ã <literal>Session.load()</literal> ã使ããã¨ã¯ããã¦ãã ããã ãã®ä»£ããã« <literal>Session.get()</literal> ãã¯ã¨ãªã使ã£ã¦ãã ããã"
+
+#: index.docbook:160
+msgid "Prefer lazy fetching for associations."
+msgstr "é¢é£ã«ã¯ãªãã¹ãé
延ãã§ããã使ãã¾ãããã"
+
+#: index.docbook:162
+msgid "Use eager fetching sparingly. Use proxies and lazy collections for most associations to classes that are not likely to be completely held in the second-level cache. For associations to cached classes, where there is an a extremely high probability of a cache hit, explicitly disable eager fetching using <literal>lazy=\"false\"</literal>. When an join fetching is appropriate to a particular use case, use a query with a <literal>left join fetch</literal>."
+msgstr "å³æãã§ããã¯æ§ããã«ãã¾ãããã äºæ¬¡ãã£ãã·ã¥ã«ã¯å®å
¨ã«ä¿æãããªããããªã¯ã©ã¹ã®é¢é£ã«ã¯ã ãããã·ã¨é
延ã³ã¬ã¯ã·ã§ã³ã使ã£ã¦ãã ããã ãã£ãã·ã¥ãããã¯ã©ã¹ã®é¢é£ãã¤ã¾ããã£ãã·ã¥ããããããå¯è½æ§ãé常ã«é«ãé¢é£ã¯ã <literal>lazy=\"false\"</literal> ã§ç©æ¥µçãªãã§ãããæ示çã«ç¡å¹ã«ãã¦ãã ããã çµåãã§ãããé©åãªç¹å®ã®ã¦ã¼ã¹ã±ã¼ã¹ã«ã¯ã ã¯ã¨ãªã§ <literal>left join fetch</literal> ã使ã£ã¦ãã ããã"
+
+#: index.docbook:172
+msgid "Use the <emphasis>open session in view</emphasis> pattern, or a disciplined <emphasis>assembly phase</emphasis> to avoid problems with unfetched data."
+msgstr "ãã§ããããã¦ããªããã¼ã¿ã«é¢ããåé¡ãé¿ããããã«ã <emphasis>ãã¥ã¼ã®ä¸ã§ãªã¼ãã³ã»ãã·ã§ã³ã使ã(open session in view)</emphasis> ãã¿ã¼ã³ããçµ±å¶ããã <emphasis>çµã¿ç«ã¦ãã§ã¼ãº(assembly phase)</emphasis> ã使ãã¾ãããã"
+
+#: index.docbook:177
+msgid "Hibernate frees the developer from writing tedious <emphasis>Data Transfer Objects</emphasis> (DTO). In a traditional EJB architecture, DTOs serve dual purposes: first, they work around the problem that entity beans are not serializable; second, they implicitly define an assembly phase where all data to be used by the view is fetched and marshalled into the DTOs before returning control to the presentation tier. Hibernate eliminates the first purpose. However, you will still need an assembly phase (think of your business methods as having a strict contract with the presentation tier about what data is available in the detached objects) unless you are prepared to hold the persistence context (the session) open across the view rendering process. This is not a limitation of Hibernate! It is a fundamental requirement of safe transactional data access."
+msgstr "Hibernate㯠<emphasis>Data Transfer Objects</emphasis> (DTO)ãæ¸ãéå±ãªä½æ¥ããéçºè
ã解æ¾ãã¾ãã ä¼çµ±çãªEJBã¢ã¼ããã¯ãã£ã§ã¯DTOã¯äºã¤ç®çãããã¾ãï¼ 1ã¤ç®ã¯ãã¨ã³ãã£ãã£ãã¼ã³ãã·ãªã¢ã©ã¤ãºãããªãåé¡ã¸ã®å¯¾çã§ãã 2ã¤ç®ã¯ããã¬ã¼ã³ãã¼ã·ã§ã³å±¤ã«å¶å¾¡ãæ»ãåã«ã ãã¥ã¼ã«ä½¿ããããã¹ã¦ã®ãã¼ã¿ããã§ããããã¦ãDTOã«å¾©å
ããããããªçµã¿ç«ã¦ãã§ã¼ãºãæé»çã«å®ç¾©ãã¾ãã Hibernateã§ã¯1ã¤ç®ã®ç®çãä¸è¦ã«ãªãã¾ãã ããããã¥ã¼ã®ã¬ã³ããªã³ã°å¦çã®éãæ°¸ç¶ã³ã³ããã¹ãï¼ã»ãã·ã§ã³ï¼ããªã¼ãã³ã«ããã¾ã¾ã«ããªããã°ã çµã¿ç«ã¦ãã§ã¼ãºã¯ã¾ã å¿
è¦ã§ãï¼åé¢ãªãã¸ã§ã¯ãã®ä¸ã®ã©ã®ãã¼ã¿ãå©ç¨å¯è½ãã«ã¤ãã¦ã ãã¬ã¼ã³ãã¼ã·ã§ã³å±¤ã¨å³å¯ãªåã決ãããã¦ãããã¸ãã¹ã¡ã½ãããèãã¦ã!
¿ã¦ãã ããï¼ã ããã¯Hibernateå´ã®åé¡ã§ã¯ããã¾ããã ãã©ã³ã¶ã¯ã·ã§ã³å
ã§å®å
¨ã«ãã¼ã¿ã¢ã¯ã»ã¹ããããã®åºæ¬çãªè¦ä»¶ã§ãã"
+
+#: index.docbook:191
+msgid "Consider abstracting your business logic from Hibernate."
+msgstr "Hibernateãããã¸ãã¹ãã¸ãã¯ãæ½è±¡åãããã¨ãèãã¾ãããã"
+
+#: index.docbook:193
+msgid "Hide (Hibernate) data-access code behind an interface. Combine the <emphasis>DAO</emphasis> and <emphasis>Thread Local Session</emphasis> patterns. You can even have some classes persisted by handcoded JDBC, associated to Hibernate via a <literal>UserType</literal>. (This advice is intended for \"sufficiently large\" applications; it is not appropriate for an application with five tables!)"
+msgstr "ã¤ã³ã¿ã¼ãã§ã¤ã¹ã§ï¼Hibernateã®ï¼ãã¼ã¿ã¢ã¯ã»ã¹ã³ã¼ããé è½ãã¾ãããã <emphasis>DAO</emphasis> 㨠<emphasis>Thread Local Session</emphasis> ãã¿ã¼ã³ãçµã¿åããã¾ãããã <literal>UserType</literal> ã§Hibernateã«é¢é£ä»ããã¨ã ãã³ãã³ã¼ãããJDBCã§æ°¸ç¶åããã¯ã©ã¹ãæã¤ãã¨ãã§ãã¾ãã ï¼ãã®ã¢ããã¤ã¹ã¯ãåå大ããªãã¢ããªã±ã¼ã·ã§ã³ã«å¯¾ãã¦ã®ãã®ã§ãã ãã¼ãã«ã5åãããªããããªã¢ããªã±ã¼ã·ã§ã³ã«ã¯å½ã¦ã¯ã¾ãã¾ãããï¼"
+
+#: index.docbook:203
+msgid "Don't use exotic association mappings."
+msgstr "çããé¢é£ãããã³ã°ã¯ä½¿ããªãããã«ãã¾ãããã"
+
+#: index.docbook:205
+msgid "Good usecases for a real many-to-many associations are rare. Most of the time you need additional information stored in the \"link table\". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, we think that most associations are one-to-many and many-to-one, you should be careful when using any other association style and ask yourself if it is really neccessary."
+msgstr "ããã¦ã¼ã¹ã±ã¼ã¹ã«æ¬å½ã®å¤å¯¾å¤é¢é£ããããã¨ã¯ç¨ï¼ã¾ãï¼ã§ãã ã»ã¨ãã©ã®å ´åããªã³ã¯ãã¼ãã«ãã®ä»å çãªæ
å ±ãå¿
è¦ã«ãªãã¾ãã ãã®å ´åããªã³ã¯ã¯ã©ã¹ã«2ã¤ã®1対å¤é¢é£ã使ãæ¹ããã£ã¨è¯ãã§ãã å®éã»ã¨ãã©ã®å ´åé¢é£ã¯1対å¤ã¨å¤å¯¾1ãªã®ã§ã ä»ã®ã¹ã¿ã¤ã«ã®é¢é£ã使ãã¨ãã¯æ¬å½ã«å¿
è¦ãã©ãããèãã¦ã¿ã¦ãã ããã"
+
+#: index.docbook:215
+msgid "Prefer bidirectional associations."
+msgstr "ãªãã¹ãåæ¹åé¢é£ã«ãã¾ãããã"
+
+#: index.docbook:217
+msgid "Unidirectional associations are more difficult to query. In a large application, almost all associations must be navigable in both directions in queries."
+msgstr "åæ¹åé¢é£ã¯åæ¹åã«æ¯ã¹ã¦æ¤ç´¢ãé£ãããªãã¾ãã 大ããªã¢ããªã±ã¼ã·ã§ã³ã§ã¯ã ã»ã¨ãã©ãã¹ã¦ã®é¢é£ãåæ¹åã«ããã²ã¼ã·ã§ã³ã§ããªããã°ãªãã¾ããã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/collection_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/collection_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/collection_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1287 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Collection Mapping"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ãããã³ã°"
+
+#: index.docbook:8
+msgid "Persistent collections"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®æ°¸ç¶å"
+
+#: index.docbook:10
+msgid "Hibernate requires that persistent collection-valued fields be declared as an interface type, for example:"
+msgstr "ã³ã¬ã¯ã·ã§ã³åã®ãã£ã¼ã«ããæ°¸ç¶åããã«ã¯ã ãã®ã³ã¬ã¯ã·ã§ã³åãã¤ã³ã¿ã¼ãã§ã¤ã¹åã§ããå¿
è¦ãããã¾ãã ä¾ãã°ã"
+
+#: index.docbook:15
+msgid ""
+ "<![CDATA[public class Product {\n"
+ " private String serialNumber;\n"
+ " private Set parts = new HashSet();\n"
+ " \n"
+ " public Set getParts() { return parts; }\n"
+ " void setParts(Set parts) { this.parts = parts; }\n"
+ " public String getSerialNumber() { return serialNumber; }\n"
+ " void setSerialNumber(String sn) { serialNumber = sn; }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Product {\n"
+ " private String serialNumber;\n"
+ " private Set parts = new HashSet();\n"
+ " \n"
+ " public Set getParts() { return parts; }\n"
+ " void setParts(Set parts) { this.parts = parts; }\n"
+ " public String getSerialNumber() { return serialNumber; }\n"
+ " void setSerialNumber(String sn) { serialNumber = sn; }\n"
+ "}]]>"
+
+#: index.docbook:17
+msgid "The actual interface might be <literal>java.util.Set</literal>, <literal>java.util.Collection</literal>, <literal>java.util.List</literal>, <literal>java.util.Map</literal>, <literal>java.util.SortedSet</literal>, <literal>java.util.SortedMap</literal> or ... anything you like! (Where \"anything you like\" means you will have to write an implementation of <literal>org.hibernate.usertype.UserCollectionType</literal>.)"
+msgstr "å®å¨ããã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ã¯ <literal>java.util.Set</literal>ã <literal>java.util.Collection</literal>ã<literal>java.util.List</literal>ã <literal>java.util.Map</literal>ã<literal>java.util.SortedSet</literal>ã <literal>java.util.SortedMap</literal> ãªã©ãããã¾ãã ã¾ãã¯ãä»»æã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ãã¾ãï¼ ï¼ãã ããä»»æã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ç¨ããå ´åã¯ã <literal>org.hibernate.usertype.UserCollectionType</literal> ã®å®è£
ã¯ã©ã¹ãä½æããå¿
è¦ãããã¾ããï¼"
+
+#: index.docbook:26
+msgid "Notice how we initialized the instance variable with an instance of <literal>HashSet</literal>. This is the best way to initialize collection valued properties of newly instantiated (non-persistent) instances. When you make the instance persistent - by calling <literal>persist()</literal>, for example - Hibernate will actually replace the <literal>HashSet</literal> with an instance of Hibernate's own implementation of <literal>Set</literal>. Watch out for errors like this:"
+msgstr "<literal>HashSet</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ãæã¤ã¤ã³ã¹ã¿ã³ã¹å¤æ°ã ã©ã®ããã«åæåããããã«æ³¨ç®ãã¦ã¿ã¾ãããã ããã¯æ°ãã«çæãããï¼æ°¸ç¶åããã¦ããªãï¼ã³ã¬ã¯ã·ã§ã³åã®ããããã£ã åæåããæé©ãªæ¹æ³ã§ãã ï¼ä¾ãã° <literal>persist()</literal> ã«ããï¼ã¤ã³ã¹ã¿ã³ã¹ãæ°¸ç¶åãããã¨ããã¨ãã Hibernate㯠<literal>HashSet</literal> ãHibernateç¬èªã® <literal>Set</literal> ã®å®è£
ã¯ã©ã¹ã«ç½®ãæãã¾ãã ãã®ããã次ã®ãããªã¨ã©ã¼ã«ã¯æ³¨æãå¿
è¦ã§ãã"
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "Cat kitten = new DomesticCat();\n"
+ "....\n"
+ "Set kittens = new HashSet();\n"
+ "kittens.add(kitten);\n"
+ "cat.setKittens(kittens);\n"
+ "session.persist(cat);\n"
+ "kittens = cat.getKittens(); // Okay, kittens collection is a Set\n"
+ "(HashSet) cat.getKittens(); // Error!]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "Cat kitten = new DomesticCat();\n"
+ "....\n"
+ "Set kittens = new HashSet();\n"
+ "kittens.add(kitten);\n"
+ "cat.setKittens(kittens);\n"
+ "session.persist(cat);\n"
+ "kittens = cat.getKittens(); // Okay, kittens collection is a Set\n"
+ "(HashSet) cat.getKittens(); // Error!]]>"
+
+#: index.docbook:38
+msgid "The persistent collections injected by Hibernate behave like <literal>HashMap</literal>, <literal>HashSet</literal>, <literal>TreeMap</literal>, <literal>TreeSet</literal> or <literal>ArrayList</literal>, depending upon the interface type."
+msgstr "Hibernateã«ãã注å
¥ãããæ°¸ç¶æ§ã³ã¬ã¯ã·ã§ã³ã¯ãã¤ã³ã¿ã¼ãã§ã¤ã¹åã«å¿ãã¦ã <literal>HashMap</literal> ã <literal>HashSet</literal>ã <literal>TreeMap</literal>ã <literal>TreeSet</literal>ã <literal>ArrayList</literal> ã®ããã«æ¯èãã¾ãã"
+
+#: index.docbook:45
+msgid "Collections instances have the usual behavior of value types. They are automatically persisted when referenced by a persistent object and automatically deleted when unreferenced. If a collection is passed from one persistent object to another, its elements might be moved from one table to another. Two entities may not share a reference to the same collection instance. Due to the underlying relational model, collection-valued properties do not support null value semantics; Hibernate does not distinguish between a null collection reference and an empty collection."
+msgstr "ã³ã¬ã¯ã·ã§ã³ã¤ã³ã¹ã¿ã³ã¹ã¯ãå¤åã¨ãã¦æ®éã«æ¯èãã¾ãã æ°¸ç¶åãªãã¸ã§ã¯ãã«åç
§ãããã¨ãã«èªåçã«æ°¸ç¶åããã åç
§ããªããªã£ãã¨ãã«èªåçã«åé¤ããã¾ãã ããããæ°¸ç¶åãªãã¸ã§ã¯ãããå¥ã®æ°¸ç¶åãªãã¸ã§ã¯ãã«æ¸¡ããããã ãã®è¦ç´ ã¯ç¾å¨ã®ãã¼ãã«ããå¥ã®ãã¼ãã«ã«ç§»åããããããã¾ããã ï¼ã¤ã®ã¨ã³ãã£ãã£ãåãã³ã¬ã¯ã·ã§ã³ã¤ã³ã¹ã¿ã³ã¹ãå
±æãã¦ã¯ããã¾ããã ãªã¬ã¼ã·ã§ãã«ã¢ãã«ããã¼ã¹ã«ãã¦ãããããã³ã¬ã¯ã·ã§ã³åã®ããããã£ã« nullå¤ã代å
¥ãã¦ãæå³ãããã¾ããã ã¤ã¾ãHibernateã¯åç
§å
ã®ãªãã³ã¬ã¯ã·ã§ã³ã¨ç©ºã®ã³ã¬ã¯ã·ã§ã³ãåºå¥ãã¾ããã"
+
+#: index.docbook:56
+msgid "You shouldn't have to worry much about any of this. Use persistent collections the same way you use ordinary Java collections. Just make sure you understand the semantics of bidirectional associations (discussed later)."
+msgstr "ãããããã»ã©å¿é
ããªãã¦ãæ§ãã¾ããã æ®æ®µä½¿ã£ã¦ããJavaã®ã³ã¬ã¯ã·ã§ã³ã¨åãããã«ãæ°¸ç¶åã³ã¬ã¯ã·ã§ã³ã使ã£ã¦ãã ããã åæ¹åé¢é£ã®æå³ãç解ããã°ããã®ã§ãï¼ããã¯å¾ã»ã©èª¬æãã¾ãï¼ã"
+
+#: index.docbook:65
+msgid "Collection mappings"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ãããã³ã°"
+
+#: index.docbook:67
+msgid "The Hibernate mapping element used for mapping a collection depends upon the type of the interface. For example, a <literal><set></literal> element is used for mapping properties of type <literal>Set</literal>."
+msgstr "ã³ã¬ã¯ã·ã§ã³ããããã³ã°ããããã®ãããã³ã°è¦ç´ ã¯ãã¤ã³ã¿ã¼ãã§ã¤ã¹ã®åã«ä¾åãã¾ãã ä¾ãã°ã<literal><set></literal> è¦ç´ 㯠<literal>Set</literal> åã ãããã³ã°ããããã«ä½¿ãã¾ãã"
+
+#: index.docbook:73
+msgid ""
+ "<![CDATA[<class name=\"Product\">\n"
+ " <id name=\"serialNumber\" column=\"productSerialNumber\"/>\n"
+ " <set name=\"parts\">\n"
+ " <key column=\"productSerialNumber\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Product\">\n"
+ " <id name=\"serialNumber\" column=\"productSerialNumber\"/>\n"
+ " <set name=\"parts\">\n"
+ " <key column=\"productSerialNumber\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:75
+msgid "Apart from <literal><set></literal>, there is also <literal><list></literal>, <literal><map></literal>, <literal><bag></literal>, <literal><array></literal> and <literal><primitive-array></literal> mapping elements. The <literal><map></literal> element is representative:"
+msgstr "ãããã³ã°è¦ç´ ã«ã¯ <literal><set></literal> ã®ä»ã« <literal><list></literal>ã <literal><map></literal>ã<literal><bag></literal>ã <literal><array></literal>ã<literal><primitive-array></literal> ãããã¾ãã 代表ã¨ãã¦ã<literal><map></literal> è¦ç´ ãä¸è¨ã«ç¤ºãã¾ãã"
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<map\n"
+ " name=\"propertyName\"\n"
+ " table=\"table_name\"\n"
+ " schema=\"schema_name\"\n"
+ " lazy=\"true|extra|false\"\n"
+ " inverse=\"true|false\"\n"
+ " cascade=\"all|none|save-update|delete|all-delete-orphan|delete-orphan\"\n"
+ " sort=\"unsorted|natural|comparatorClass\"\n"
+ " order-by=\"column_name asc|desc\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " fetch=\"join|select|subselect\"\n"
+ " batch-size=\"N\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " mutable=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <key .... />\n"
+ " <map-key .... />\n"
+ " <element .... />\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map\n"
+ " name=\"propertyName\"\n"
+ " table=\"table_name\"\n"
+ " schema=\"schema_name\"\n"
+ " lazy=\"true|extra|false\"\n"
+ " inverse=\"true|false\"\n"
+ " cascade=\"all|none|save-update|delete|all-delete-orphan|delete-orphan\"\n"
+ " sort=\"unsorted|natural|comparatorClass\"\n"
+ " order-by=\"column_name asc|desc\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " fetch=\"join|select|subselect\"\n"
+ " batch-size=\"N\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " mutable=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <key .... />\n"
+ " <map-key .... />\n"
+ " <element .... />\n"
+ "</map>]]>"
+
+#: index.docbook:103
+msgid "<literal>name</literal> the collection property name"
+msgstr "<literal>name</literal> ã³ã¬ã¯ã·ã§ã³åã§ããããããã£ã®åå"
+
+#: index.docbook:108
+msgid "<literal>table</literal> (optional - defaults to property name) the name of the collection table (not used for one-to-many associations)"
+msgstr "<literal>table</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ãã¯ããããã£åï¼ã³ã¬ã¯ã·ã§ã³ãã¼ãã«ã®åå ï¼ä¸å¯¾å¤é¢é£ã§ã¯ä½¿ç¨ãã¾ããï¼ã"
+
+#: index.docbook:114
+msgid "<literal>schema</literal> (optional) the name of a table schema to override the schema declared on the root element"
+msgstr "<literal>schema</literal> ï¼ãªãã·ã§ã³ï¼ãã¼ãã«ã¹ãã¼ãã®ååã ã«ã¼ãè¦ç´ ã§å®£è¨ããã¦ããã¹ãã¼ãããåªå
ããã¾ãã"
+
+#: index.docbook:120
+msgid "<literal>lazy</literal> (optional - defaults to <literal>true</literal>) may be used to disable lazy fetching and specify that the association is always eagerly fetched, or to enable \"extra-lazy\" fetching where most operations do not initialize the collection (suitable for very large collections)"
+msgstr "<literal>lazy</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal>ï¼ é
延ãã§ãããç¡å¹ã«ããé¢é£ã常ã«å³æã«ãã§ããã«ããããã«ä½¿ç¨ãã¾ãã ã¾ãã¯ããextra-lazyããã§ãããæå¹ã«ããããã«ä½¿ç¨ãã¾ãã ãextra-lazyããã§ããã¯ãã»ã¨ãã©ã®æä½ã§ã¯ã³ã¬ã¯ã·ã§ã³ãåæåãã¾ãã ï¼é常ã«å¤§ããªã³ã¬ã¯ã·ã§ã³ã«é©ãã¦ãã¾ãï¼ã"
+
+#: index.docbook:129
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>) mark this collection as the \"inverse\" end of a bidirectional association"
+msgstr "<literal>inverse</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>false</literal>ï¼ ãã®ã³ã¬ã¯ã·ã§ã³ãåæ¹åé¢é£ã®ãéãå´ã§ããã¨ãã¼ã¯ãã¾ãã"
+
+#: index.docbook:135
+msgid "<literal>cascade</literal> (optional - defaults to <literal>none</literal>) enable operations to cascade to child entities"
+msgstr "<literal>cascade</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>none</literal>ï¼ åã¨ã³ãã£ãã£ã¸ã®ã«ã¹ã±ã¼ãæä½ãæå¹ã«ãã¾ãã"
+
+#: index.docbook:141
+msgid "<literal>sort</literal> (optional) specify a sorted collection with <literal>natural</literal> sort order, or a given comparator class"
+msgstr "<literal>sort</literal> ï¼ãªãã·ã§ã³ï¼ã³ã¬ã¯ã·ã§ã³ãèªç¶ãªé åºã§ã½ã¼ãããå ´å㯠<literal>natural</literal> ãæå®ãã¾ãã ãããã¯Comparatorã¯ã©ã¹ãæå®ãã¾ãã"
+
+#: index.docbook:147
+msgid "<literal>order-by</literal> (optional, JDK1.4 only) specify a table column (or columns) that define the iteration order of the <literal>Map</literal>, <literal>Set</literal> or bag, together with an optional <literal>asc</literal> or <literal>desc</literal>"
+msgstr "<literal>order-by</literal> ï¼ãªãã·ã§ã³ãJDK1.4ã®ã¿ï¼ <literal>Map</literal>ã<literal>Set</literal>ãbagã®ã¤ãã¬ã¼ã·ã§ã³é åºãå®ç¾©ãã ãã¼ãã«ã«ã©ã ãæå®ããã¨å
±ã«ã ãªãã·ã§ã³ã¨ã㦠<literal>asc</literal>ã<literal>desc</literal> ãæå®ãã¾ãã"
+
+#: index.docbook:154
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving or removing the collection (useful if the collection should contain only a subset of the available data)"
+msgstr "<literal>where</literal> ï¼ãªãã·ã§ã³ï¼ã³ã¬ã¯ã·ã§ã³ã®æ¤ç´¢ãåé¤ã®éã«ä½¿ã ä»»æã®SQLã®<literal>WHERE</literal> æ¡ä»¶ãæå®ãã¾ã ï¼å©ç¨å¯è½ãªãã¼ã¿ã®ä¸é¨åã ããã³ã¬ã¯ã·ã§ã³ãå«ãã¹ãã¨ãã«ãããã¯æç¨ã§ãï¼ã"
+
+#: index.docbook:161
+msgid "<literal>fetch</literal> (optional, defaults to <literal>select</literal>) Choose between outer-join fetching, fetching by sequential select, and fetching by sequential subselect."
+msgstr "<literal>fetch</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>select</literal>ï¼ å¤é¨çµåã«ãããã§ãããé 次é¸æãã§ããï¼sequential select fetchï¼ã é 次ãµãã»ã¬ã¯ããã§ããï¼sequential subselect fetchï¼ã®ã©ãããé¸æãã¦ãã ããã"
+
+#: index.docbook:168
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for lazily fetching instances of this collection."
+msgstr "<literal>batch-size</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>1</literal>ï¼ ã³ã¬ã¯ã·ã§ã³ã®ã¤ã³ã¹ã¿ã³ã¹ã®é
延ãã§ããã®ããã®ãããããµã¤ãºããæå®ãã¾ãã"
+
+#: index.docbook:174
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the collection property value."
+msgstr "<literal>access</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>property</literal>ï¼ ã³ã¬ã¯ã·ã§ã³åããããã£ã®å¤ã«ã¢ã¯ã»ã¹ããããã«ä½¿ç¨ããæ¦ç¥ã§ãã"
+
+#: index.docbook:180
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Species that changes to the state of the collection results in increment of the owning entity's version. (For one to many associations, it is often reasonable to disable this setting.)"
+msgstr "<literal>optimistic-lock</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal>ï¼ ã³ã¬ã¯ã·ã§ã³ã®ç¶æ
ãå¤ãããã¨ã«ãã£ã¦ã ãã®ãªã¼ãã¼ã§ããã¨ã³ãã£ãã£ã®ãã¼ã¸ã§ã³ãã¤ã³ã¯ãªã¡ã³ããããããæå®ãã¾ãã ï¼ä¸å¯¾å¤é¢é£ã§ã¯ãã»ã¨ãã©ã®å ´åã«ããã¦ç¡å¹ã«è¨å®ããã®ã妥å½ã§ããï¼"
+
+#: index.docbook:188
+msgid "<literal>mutable</literal> (optional - defaults to <literal>true</literal>): A value of <literal>false</literal> specifies that the elements of the collection never change (a minor performance optimization in some cases)."
+msgstr "<literal>mutable</literal>ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>true</literal>ï¼ <literal>false</literal> å¤ã¯ãã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ãå¤æ´ãããªããã¨ã表ãã¾ã ï¼ããå ´åã«ã¯ãå°ãããã©ã¼ãã³ã¹ãé«ãã¾ãï¼ã"
+
+#: index.docbook:198
+msgid "Collection foreign keys"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®å¤é¨ãã¼"
+
+#: index.docbook:200
+msgid "Collection instances are distinguished in the database by the foreign key of the entity that owns the collection. This foreign key is referred to as the <emphasis>collection key column</emphasis> (or columns) of the collection table. The collection key column is mapped by the <literal><key></literal> element."
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ããã¼ã¿ãã¼ã¹å
ã§ã¯ã ãã®ã³ã¬ã¯ã·ã§ã³ãææããã¨ã³ãã£ãã£ã®å¤é¨ãã¼ã«ãã£ã¦èå¥ããã¾ãã ãã®å¤é¨ãã¼ã¯ã³ã¬ã¯ã·ã§ã³ãã¼ãã«ã® <emphasis>ã³ã¬ã¯ã·ã§ã³ãã¼ã«ã©ã </emphasis> ã¨å¼ã°ãã¾ãã ã³ã¬ã¯ã·ã§ã³ãã¼ã«ã©ã 㯠<literal><key></literal> è¦ç´ ã«ãããããã³ã°ãã¾ãã"
+
+#: index.docbook:208
+msgid "There may be a nullability constraint on the foreign key column. For most collections, this is implied. For unidirectional one to many associations, the foreign key column is nullable by default, so you might need to specify <literal>not-null=\"true\"</literal>."
+msgstr "å¤é¨ãã¼ã«ã©ã ã«ã¯nullè¨å®å¶ç´ãããããããã¾ããã ã»ã¨ãã©ã®ã³ã¬ã¯ã·ã§ã³ã«å½ã¦ã¯ã¾ãã§ãããã åæ¹åã®ä¸å¯¾å¤é¢é£ã«ããã¦ãå¤é¨ãã¼ã«ã©ã ã¯ããã©ã«ãã§nullã許ãè¨å®ã«ãªã£ã¦ãã¾ãã ãã£ã¦ã<literal>not-null=\"true\"</literal> ãæå®ããå¿
è¦ãããããããã¾ããã"
+
+#: index.docbook:215
+msgid "<![CDATA[<key column=\"productSerialNumber\" not-null=\"true\"/>]]>"
+msgstr "<![CDATA[<key column=\"productSerialNumber\" not-null=\"true\"/>]]>"
+
+#: index.docbook:217
+msgid "The foreign key constraint may use <literal>ON DELETE CASCADE</literal>."
+msgstr "å¤é¨ãã¼ã®å¶ç´ã <literal>ON DELETE CASCADE</literal> ã使ãããããã¾ããã"
+
+#: index.docbook:221
+msgid "<![CDATA[<key column=\"productSerialNumber\" on-delete=\"cascade\"/>]]>"
+msgstr "<![CDATA[<key column=\"productSerialNumber\" on-delete=\"cascade\"/>]]>"
+
+#: index.docbook:223
+msgid "See the previous chapter for a full definition of the <literal><key></literal> element."
+msgstr "<literal><key></literal> è¦ç´ ã®ãã¹ã¦ã®å®ç¾©ã«ã¤ãã¦ã¯åã®ç« ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:231
+msgid "Collection elements"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ "
+
+#: index.docbook:233
+msgid "Collections may contain almost any other Hibernate type, including all basic types, custom types, components, and of course, references to other entities. This is an important distinction: an object in a collection might be handled with \"value\" semantics (its life cycle fully depends on the collection owner) or it might be a reference to another entity, with its own life cycle. In the latter case, only the \"link\" between the two objects is considered to be state held by the collection."
+msgstr "ã³ã¬ã¯ã·ã§ã³ã¯ä»ã®Hibernateã®åã®ã»ã¨ãã©ï¼ãã¹ã¦ã®åºæ¬åãã«ã¹ã¿ã åãã³ã³ãã¼ãã³ãã ä»ã®ã¨ã³ãã£ãã£ã¸ã®åç
§ï¼ãæ ¼ç´ãããã¨ãã§ãã¾ãã 次ã®ç¹ã¯éè¦ãªéãã«ãªãã¾ãã ã³ã¬ã¯ã·ã§ã³ã«æ ¼ç´ããããªãã¸ã§ã¯ãããå¤ãã»ãã³ãã£ã¯ã¹ã¨ãã¦æ±ãããã®ã ï¼ã©ã¤ããµã¤ã¯ã«ã¯ã³ã¬ã¯ã·ã§ã³ã®ãªã¼ãã¼ã«å®å
¨ã«ä¾åãã¾ãï¼ã ãããã¯ããèªèº«ã®ã©ã¤ããµã¤ã¯ã«ãæã£ãå¥ã®ã¨ã³ãã£ãã£ã¸ã®åç
§ã§ãããã®ãã¨ããéãã§ãã å¾è
ã¯ã2ã¤ã®ãªãã¸ã§ã¯ãéã®ããªã³ã¯ããã³ã¬ã¯ã·ã§ã³ã«ä¿æãã¦ããã¨è¦ãªãã¦ããã ãã§ãã"
+
+#: index.docbook:242
+msgid "The contained type is referred to as the <emphasis>collection element type</emphasis>. Collection elements are mapped by <literal><element></literal> or <literal><composite-element></literal>, or in the case of entity references, with <literal><one-to-many></literal> or <literal><many-to-many></literal>. The first two map elements with value semantics, the next two are used to map entity associations."
+msgstr "æ ¼ç´ãããå㯠<emphasis>ã³ã¬ã¯ã·ã§ã³è¦ç´ å</emphasis> ã¨å¼ã°ãã¾ãã ã³ã¬ã¯ã·ã§ã³è¦ç´ ã¯ã<literal><element></literal> ã¾ã㯠<literal><composite-element></literal> ã«ãããããã³ã°ãããã¨ã³ãã£ãã£ã¸ã®åç
§ã®å ´åã«ã¯ <literal><one-to-many></literal> ã¾ã㯠<literal><many-to-many></literal> ã«ãããããã³ã°ããã¾ãã æåã®äºã¤ã¯å¤ã¨ãã¦è¦ç´ ããããã³ã°ãã次ã®äºã¤ã¯ã¨ã³ãã£ãã£ã®é¢é£ããããã³ã°ããã®ã«ä½¿ããã¾ãã"
+
+#: index.docbook:254
+msgid "Indexed collections"
+msgstr "ã¤ã³ããã¯ã¹ä»ãã®ã³ã¬ã¯ã·ã§ã³"
+
+#: index.docbook:256
+msgid "All collection mappings, except those with set and bag semantics, need an <emphasis>index column</emphasis> in the collection table - a column that maps to an array index, or <literal>List</literal> index, or <literal>Map</literal> key. The index of a <literal>Map</literal> may be of any basic type, mapped with <literal><map-key></literal>, it may be an entity reference mapped with <literal><map-key-many-to-many></literal>, or it may be a composite type, mapped with <literal><composite-map-key></literal>. The index of an array or list is always of type <literal>integer</literal> and is mapped using the <literal><list-index></literal> element. The mapped column contains sequential integers (numbered from zero, by default)."
+msgstr "setã¨bagãé¤ãå
¨ã¦ã®ã³ã¬ã¯ã·ã§ã³ãããã³ã°ã«ã¯ã ã³ã¬ã¯ã·ã§ã³ãã¼ãã«ã®ä¸ã« <emphasis>ã¤ã³ããã¯ã¹ç¨ã®ã«ã©ã </emphasis> ãå¿
è¦ã§ãã ãã®ã«ã©ã ã«ãé
åã <literal>List</literal> ã®ã¤ã³ããã¯ã¹ã ããã㯠<literal>Map</literal> ã®ãã¼ããããã³ã°ãã¾ãã <literal>Map</literal> ã®ã¤ã³ããã¯ã¹ã¯ã <literal><map-key></literal> ã«ãããããã³ã°ãããåºæ¬åãã <literal><map-key-many-to-many></literal> ã«ãããããã³ã°ãããã¨ã³ãã£ãã£ã®é¢é£ãã ããã㯠<literal><composite-map-key></literal> ã«ãããããã³ã°ãããã³ã³ãã¸ããåã«ãªãã¾ãã é
åããªã¹ãã®ã¤ã³ããã¯ã¹ã¯ã常㫠<literal>integer</literal> åã§ã <literal><list-index></literal> è¦ç´ ã«ãããããã³ã°ãã¾ãã ãããã³ã°ãããã«ã©ã ã«ã¯ã·ã¼ã±ã³ã·ã£ã«ãªæ´æ°ãæ ¼ç´ãã¾ãï¼!
ããã©ã«ãã§ã¯0ããçªå·ãä»ãããã¾ãï¼ã"
+
+#: index.docbook:267
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"index1\" coords=\"2 45\"/> <area id=\"index2\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<list-index \n"
+ " column=\"column_name\"\n"
+ " base=\"0|1|...\"/>]]></programlisting> <calloutlist> <callout arearefs=\"index1\"> <para> <literal>column_name</literal> (required): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"index1\"> <para> <literal>base</literal> (optional, defaults to <literal>0</literal>): The value of the index column that corresponds to the first element of the list or array. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"mapkey1\" coords=\"2 45\"/> <area id=\"mapkey2\" coords=\"3 45\"/> <area id=\"mapkey3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key \n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"type_name\"\n"
+ " node=\"@attribute-name\"\n"
+ " length=\"N\"/>]]></programlisting> <calloutlist> <callout arearefs=\"mapkey1\"> <para> <literal>column</literal> (optional): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"mapkey2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the key of the map. </para> </callout> <callout arearefs=\"mapkey3\"> <para> <literal>type</literal> (reguired): The type of the map keys. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"indexmanytomany1\" coords=\"2 45\"/> <area id=\"indexmanytomany2\" coords=\"3 45\"/> <area id=\"indexmanytomany3\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<map-key-many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"indexmanytomany1\"> <para> <literal>column</literal> (optional): The name of the foreign key column for the collection index values. </para> </callout> <callout arearefs=\"indexmanytomany2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the foreign key of the map key. </para> </callout> <callout arearefs=\"indexmanytomany3\"> <para> <literal>class</literal> (required): The entity class used as the map key. </para> </callout> </calloutlist> </programlistingco>"
+msgstr ""
+ "<programlistingco> <areaspec> <area id=\"index1\" coords=\"2 45\"/> <area id=\"index2\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<list-index \n"
+ " column=\"column_name\"\n"
+ " base=\"0|1|...\"/>]]></programlisting> <calloutlist> <callout arearefs=\"index1\"> <para> <literal>column_name</literal>ï¼å¿
é ï¼:ã³ã¬ã¯ã·ã§ã³ã¤ã³ããã¯ã¹ã®å¤ãä¿æããã«ã©ã ã®ååã </para> </callout> <callout arearefs=\"index2\"> <para> <literal>base</literal>ï¼ãªãã·ã§ã³ãããã©ã«ã㯠<literal>0</literal>ï¼: ãªã¹ããããã¯é
åã®æåã®è¦ç´ ã«è©²å½ããã¤ã³ããã¯ã¹ã«ã©ã ã®å¤ã </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"mapkey1\" coords=\"2 45\"/> <area id=\"mapkey2\" coords=\"3 45\"/> <area id=\"mapkey3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key \n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"type_name\"\n"
+ " node=\"@attribute-name\"\n"
+ " length=\"N\"/>]]></programlisting> <calloutlist> <callout arearefs=\"mapkey1\"> <para> <literal>column</literal>ï¼ãªãã·ã§ã³ï¼: ã³ã¬ã¯ã·ã§ã³ã¤ã³ããã¯ã¹ã®å¤ãä¿æããã«ã©ã ã®ååã </para> </callout> <callout arearefs=\"mapkey2\"> <para> <literal>formula</literal>ï¼ãªãã·ã§ã³ï¼: Mapã®ãã¼ãè©ä¾¡ããã®ã«ä½¿ãããSQLå¼ã </para> </callout> <callout arearefs=\"mapkey3\"> <para> <literal>type</literal>ï¼å¿
é ï¼: Mapã®ãã¼ã®åã </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"indexmanytomany1\" coords=\"2 45\"/> <area id=\"indexmanytomany2\" coords=\"3 45\"/> <area id=\"indexmanytomany3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key-many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"indexmanytomany1\"> <para> <literal>column</literal> ï¼ãªãã·ã§ã³ï¼: ã³ã¬ã¯ã·ã§ã³ã¤ã³ããã¯ã¹ã®å¤ã®ããã®å¤é¨ãã¼ã«ã©ã ã®ååã </para> </callout> <callout arearefs=\"indexmanytomany2\"> <para> <literal>formula</literal> ï¼ãªãã·ã§ã³ï¼: Mapã®ãã¼ã®ããã®å¤é¨ãã¼ãè©ä¾¡ããããã«ä½¿ãSQLå¼ã </para> </callout> <callout arearefs=\"indexmanytomany3\"> <para> <literal>class</literal> ï¼å¿
é ï¼: Mapã®ãã¼ã¨ãã¦ä½¿ãããã¨ã³ãã£ãã£ã¯ã©ã¹ã </para> </callout> </calloutlist> </programlistingco>"
+
+#: index.docbook:348
+msgid "If your table doesn't have an index column, and you still wish to use <literal>List</literal> as the property type, you should map the property as a Hibernate <emphasis><bag></emphasis>. A bag does not retain its order when it is retrieved from the database, but it may be optionally sorted or ordered."
+msgstr "ãããã¼ãã«ã«ã¤ã³ããã¯ã¹ã«ã©ã ããªãã¦ããããããã£åã¨ã㦠<literal>List</literal> ã使ããããã°ã Hibernateã® <emphasis><bag></emphasis> ã¨ãã¦ããããã£ããããã³ã°ãã¾ãã bagã¯ãã¼ã¿ãã¼ã¹ãã復å
ãããæãé åºãä¿æãã¾ããã ããããï¼ã¡ã¢ãªä¸ã§ï¼ã½ã¼ãããããï¼SQLã§ï¼é åºä»ããããï¼order byï¼ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:357
+msgid "There are quite a range of mappings that can be generated for collections, covering many common relational models. We suggest you experiment with the schema generation tool to get a feeling for how various mapping declarations translate to database tables."
+msgstr "å¤ãã®ä¸è¬çãªãªã¬ã¼ã·ã§ãã«ã¢ãã«ãã«ãã¼ããããã«ã ã³ã¬ã¯ã·ã§ã³ã®ããã«å©ç¨ã§ãããããã³ã°ã«ã¯ããªãã®å¹
ãããã¾ãã æ§ã
ãªãããã³ã°å®£è¨ãã©ã®ããã«ãã¼ã¿ãã¼ã¹ãã¼ãã«ã«å¤æãããããç¥ãããã«ã ã¹ãã¼ãçæãã¼ã«ã使ã£ã¦ã¿ãã¨è¯ãã§ãããã"
+
+#: index.docbook:364
+msgid "Collections of values and many-to-many associations"
+msgstr "å¤ã®ã³ã¬ã¯ã·ã§ã³ã¨å¤å¯¾å¤é¢é£"
+
+#: index.docbook:366
+msgid "Any collection of values or many-to-many association requires a dedicated <emphasis>collection table</emphasis> with a foreign key column or columns, <emphasis>collection element column</emphasis> or columns and possibly an index column or columns."
+msgstr "å¤ã®ã³ã¬ã¯ã·ã§ã³ãå¤å¯¾å¤é¢é£ã¯ãå°ç¨ã® <emphasis>ã³ã¬ã¯ã·ã§ã³ãã¼ãã«</emphasis> ãå¿
è¦ã§ãã ãã®ãã¼ãã«ã¯ãå¤é¨ãã¼ã«ã©ã ã¨ã <emphasis>ã³ã¬ã¯ã·ã§ã³è¦ç´ ã®ã«ã©ã </emphasis> ã¨ã å ´åã«ãã£ã¦ã¯ã¤ã³ããã¯ã¹ã«ã©ã ãæã¡ã¾ãã"
+
+#: index.docbook:373
+msgid "For a collection of values, we use the <literal><element></literal> tag."
+msgstr "å¤ã®ã³ã¬ã¯ã·ã§ã³ã®ããã«ã<literal><element></literal>ã¿ã°ã使ç¨ãã¾ãã"
+
+#: index.docbook:375
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"element1b\" coords=\"2 50\"/> <area id=\"element2b\" coords=\"3 50\"/> <area id=\"element3b\" coords=\"4 50\"/> </areaspec> <programlisting><![CDATA[<element\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"typename\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"element1b\"> <para> <literal>column</literal> (optional): The name of the column holding the collection element values. </para> </callout> <callout arearefs=\"element2b\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element. </para> </callout> <callout arearefs=\"element3b\"> <para> <literal>type</literal> (required): The type of the collection element. </para> </callout> </calloutlist> </programlistingco> <para> A <emphasis>many-to-many association</emphasis> is specified using the <literal><many-to-many></literal> element. </para> <programlistingco> <areaspec> <area id=\"manytomany1\" coords=\"2 60\"/> <area id=\"manytomany2\" coords=\"3 60\"/> <area id=\"manytomany3\" coords=\"4 60\"/> <area id=\"manytomany4\" coords=\"5 60\"/> <area id=\"manytomany5\" coords=\"6 60\"/> <area id=\"manytomany6\" coords=\"7 60\"/> <area id=\"manytomany7\" coords=\"8 60\"/> <area id=\!
"manytomany8\" coords=\"9 60\"/> </areaspec> <programlisting><![CDATA[<many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ " fetch=\"select|join\"\n"
+ " unique=\"true|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]></programlisting> <calloutlist> <callout arearefs=\"manytomany1\"> <para> <literal>column</literal> (optional): The name of the element foreign key column. </para> </callout> <callout arearefs=\"manytomany2\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element foreign key value. </para> </callout> <callout arearefs=\"manytomany3\"> <para> <literal>class</literal> (required): The name of the associated class. </para> </callout> <callout arearefs=\"manytomany4\"> <para> <literal>fetch</literal> (optional - defaults to <literal>join</literal>): enables outer-join or sequential select fetching for this association. This is a special case; for full eager fetching (in a single <literal>SELECT</literal>) of an entity and its many-to-many relationships to other entities, you would enable <literal>join</literal> fetching not only of the collection itself, but also with this attribute on the <literal><many-to-many></literal!
> nested element. </para> </callout> <callout arearefs=\"manytomany5\"> <para> <literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. This makes the association multiplicity effectively one to many. </para> </callout> <callout arearefs=\"manytomany6\"> <para> <literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association. </para> </callout> <callout arearefs=\"manytomany7\"> <para> <literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>. </para> </callout> <callout arearefs=\"manytomany8\"> <para> <literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class !
is used. </para> </callout> </calloutlist> </programlistingco>"
+msgstr ""
+ "<programlistingco> <areaspec> <area id=\"element1b\" coords=\"2 50\"/> <area id=\"element2b\" coords=\"3 50\"/> <area id=\"element3b\" coords=\"4 50\"/> </areaspec> <programlisting><![CDATA[<element\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"typename\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"element1b\"> <para> <literal>column</literal> ï¼ãªãã·ã§ã³ï¼: ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ã®å¤ãä¿æããã«ã©ã ã®ååã </para> </callout> <callout arearefs=\"element2b\"> <para> <literal>formula</literal> ï¼ãªãã·ã§ã³ï¼: è¦ç´ ãè©ä¾¡ããããã«ä½¿ãSQLå¼ã </para> </callout> <callout arearefs=\"element3b\"> <para> <literal>type</literal> ï¼å¿
é ï¼ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ã®åã </para> </callout> </calloutlist> </programlistingco> <para> <emphasis>å¤å¯¾å¤é¢é£</emphasis> 㯠<literal><many-to-many></literal> è¦ç´ ã§æå®ãã¾ãã </para> <programlistingco> <areaspec> <area id=\"manytomany1\" coords=\"2 60\"/> <area id=\"manytomany2\" coords=\"3 60\"/> <area id=\"manytomany3\" coords=\"4 60\"/> <area id=\"manytomany4\" coords=\"5 60\"/> <area id=\"manytomany5\" coords=\"6 60\"/> <area id=\"manytomany6\" coords=\"7 60\"/> <area id=\"manytomany7\" coords=!
\"8 60\"/> <area id=\"manytomany8\" coords=\"9 60\"/> </areaspec> <programlisting><![CDATA[<many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ " fetch=\"select|join\"\n"
+ " unique=\"true|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]></programlisting> <calloutlist> <callout arearefs=\"manytomany1\"> <para> <literal>column</literal> ï¼ãªãã·ã§ã³ï¼: å¤é¨ãã¼ã«ã©ã ã®è¦ç´ ã®ååã </para> </callout> <callout arearefs=\"manytomany2\"> <para> <literal>formula</literal> ï¼ãªãã·ã§ã³ï¼: å¤é¨ãã¼å¤ã®è¦ç´ ãè©ä¾¡ããããã«ä½¿ãSQLå¼ã </para> </callout> <callout arearefs=\"manytomany3\"> <para> <literal>class</literal> ï¼å¿
é ï¼: é¢é£ã¯ã©ã¹ã®ååã </para> </callout> <callout arearefs=\"manytomany4\"> <para> <literal>fetch</literal> (ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>join</literal>): é¢é£ã®ããã«ãå¤é¨çµåãé 次é¸æãã§ãããæå¹ã«ãã¾ãã ããã¯ç¹æ®ãªã±ã¼ã¹ã§ãããã¨ã³ãã£ãã£ã¨ä»ã®ã¨ã³ãã£ãã£ã¨ã®å¤å¯¾å¤é¢ä¿ã ï¼ï¼ã¤ã® <literal>SELECT</literal> ã«ããï¼å®å
¨ã«å³æã«ãã§ããããããã«ã¯ã ãã®ã³ã¬ã¯ã·ã§ã³èªä½ã ãã§ãªãã ãã¹ã!
ããè¦ç´ ã§ãã <literal><many-to-many></literal> ã®ãã®å±æ§ã«ã¤ãã¦ã <literal>join</literal> ãã§ãããæå¹ããå¿
è¦ãããã¾ãã </para> </callout> <callout arearefs=\"manytomany5\"> <para> <literal>unique</literal> ï¼ãªãã·ã§ã³ï¼: å¤é¨ãã¼ã«ã©ã ã®ã¦ãã¼ã¯å¶ç´ã®DDLçæãæå¹ã«ãã¾ãã ããã¯ãé¢é£ã®å¤é度ãäºå®ä¸ä¸å¯¾å¤ã«ãã¾ãã </para> </callout> <callout arearefs=\"manytomany6\"> <para> <literal>not-found</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>exception</literal>ï¼ åç
§å
ã®è¡ããªãå¤é¨ãã¼ãã©ã®ããã«æ±ãããæå®ãã¾ãã <literal>ignore</literal> ã«ããã¨ãè¡ããªããã¨ãé¢é£ãç¡ããã®ã¨ãã¦æ±ãã¾ãã </para> </callout> <callout arearefs=\"manytomany7\"> <para> <literal>entity-name</literal> ï¼ãªãã·ã§ã³ï¼: <literal>class</literal> ã®ä»£æ¿ã§ããé¢é£ã¯ã©ã¹ã®ã¨ã³ãã£ãã£åã <lite!
ral>class</literal> ã®ä»£ããã«æå®ãããé¢é£ã¯ã©ã¹ã®ã
¨ã³ãã£ãã£åã </para> </callout> <callout arearefs=\"manytomany8\"> <para> <literal>property-ref</literal>: ï¼ãªãã·ã§ã³ï¼ ãã®å¤é¨ãã¼ã«çµåããé¢é£ã¯ã©ã¹ã®ããããã£åã æå®ããªãã£ãå ´åã¯ãé¢é£ã¯ã©ã¹ã®ä¸»ãã¼ã使ãã¾ãã </para> </callout> </calloutlist> </programlistingco>"
+
+#: index.docbook:480
+msgid "Some examples, first, a set of strings:"
+msgstr "以ä¸ã«ããã¤ãä¾ã示ãã¾ãã ã¾ãã¯Stringã®setã«é¢ãã¦ã®ä¾ã§ãã"
+
+#: index.docbook:484
+msgid ""
+ "<![CDATA[<set name=\"names\" table=\"person_names\">\n"
+ " <key column=\"person_id\"/>\n"
+ " <element column=\"person_name\" type=\"string\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"names\" table=\"person_names\">\n"
+ " <key column=\"person_id\"/>\n"
+ " <element column=\"person_name\" type=\"string\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:486
+msgid "A bag containing integers (with an iteration order determined by the <literal>order-by</literal> attribute):"
+msgstr "æ´æ°å¤ãå«ãbagï¼bag㯠<literal>order-by</literal> å±æ§ã«ãã£ã¦å復é åºãå®ç¾©ããã¦ãã¾ãï¼"
+
+#: index.docbook:491
+msgid ""
+ "<![CDATA[<bag name=\"sizes\" \n"
+ " table=\"item_sizes\" \n"
+ " order-by=\"size asc\">\n"
+ " <key column=\"item_id\"/>\n"
+ " <element column=\"size\" type=\"integer\"/>\n"
+ "</bag>]]>"
+msgstr ""
+ "<![CDATA[<bag name=\"sizes\" \n"
+ " table=\"item_sizes\" \n"
+ " order-by=\"size asc\">\n"
+ " <key column=\"item_id\"/>\n"
+ " <element column=\"size\" type=\"integer\"/>\n"
+ "</bag>]]>"
+
+#: index.docbook:493
+msgid "An array of entities - in this case, a many to many association:"
+msgstr "ã¨ã³ãã£ãã£ã®é
å - ãã®å ´åãå¤å¯¾å¤ã®é¢é£ã§ãã"
+
+#: index.docbook:497
+msgid ""
+ "<![CDATA[<array name=\"addresses\" \n"
+ " table=\"PersonAddress\" \n"
+ " cascade=\"persist\">\n"
+ " <key column=\"personId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <many-to-many column=\"addressId\" class=\"Address\"/>\n"
+ "</array>]]>"
+msgstr ""
+ "<![CDATA[<array name=\"addresses\" \n"
+ " table=\"PersonAddress\" \n"
+ " cascade=\"persist\">\n"
+ " <key column=\"personId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <many-to-many column=\"addressId\" class=\"Address\"/>\n"
+ "</array>]]>"
+
+#: index.docbook:499
+msgid "A map from string indices to dates:"
+msgstr "æååã¨æ¥ä»ã®map"
+
+#: index.docbook:503
+msgid ""
+ "<![CDATA[<map name=\"holidays\" \n"
+ " table=\"holidays\" \n"
+ " schema=\"dbo\" \n"
+ " order-by=\"hol_name asc\">\n"
+ " <key column=\"id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"holidays\" \n"
+ " table=\"holidays\" \n"
+ " schema=\"dbo\" \n"
+ " order-by=\"hol_name asc\">\n"
+ " <key column=\"id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:505
+msgid "A list of components (discussed in the next chapter):"
+msgstr "ã³ã³ãã¼ãã³ãã®listï¼æ¬¡ã®ç« ã§è©³ãã説æãã¾ãï¼"
+
+#: index.docbook:509
+msgid ""
+ "<![CDATA[<list name=\"carComponents\" \n"
+ " table=\"CarComponents\">\n"
+ " <key column=\"carId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <composite-element class=\"CarComponent\">\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"type\"/>\n"
+ " <property name=\"serialNumber\" column=\"serialNum\"/>\n"
+ " </composite-element>\n"
+ "</list>]]>"
+msgstr ""
+ "<![CDATA[<list name=\"carComponents\" \n"
+ " table=\"CarComponents\">\n"
+ " <key column=\"carId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <composite-element class=\"CarComponent\">\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"type\"/>\n"
+ " <property name=\"serialNumber\" column=\"serialNum\"/>\n"
+ " </composite-element>\n"
+ "</list>]]>"
+
+#: index.docbook:514
+msgid "One-to-many associations"
+msgstr "ä¸å¯¾å¤é¢é£"
+
+#: index.docbook:516
+msgid "A <emphasis>one to many association</emphasis> links the tables of two classes via a foreign key, with no intervening collection table. This mapping loses certain semantics of normal Java collections:"
+msgstr "<emphasis>ä¸å¯¾å¤é¢é£</emphasis> ã¯ãã³ã¬ã¯ã·ã§ã³ï½¥ãã¼ãã«ãä»ããã å¤é¨ãã¼ã«ãã2ã¤ã®ã¯ã©ã¹ã®ãã¼ãã«ãé¢é£ä»ãã¾ãã ãã®ãããã³ã°ã¯æ¨æºçãªJavaã®ã³ã¬ã¯ã·ã§ã³ã®ã»ãã³ãã£ã¯ã¹ãããã¤ã失ãã¾ãã"
+
+#: index.docbook:524
+msgid "An instance of the contained entity class may not belong to more than one instance of the collection"
+msgstr "ã¨ã³ãã£ãã£ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ã 2ã¤ä»¥ä¸ã®ã³ã¬ã¯ã·ã§ã³ã®ã¤ã³ã¹ã¿ã³ã¹ã«å±ãã¦ã¯ããã¾ããã"
+
+#: index.docbook:530
+msgid "An instance of the contained entity class may not appear at more than one value of the collection index"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã«å«ã¾ããã¨ã³ãã£ãã£ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ã ã³ã¬ã¯ã·ã§ã³ã¤ã³ããã¯ã¹ã®å¤ã¨ãã¦2度以ä¸ç¾ãã¦ã¯ããã¾ããã"
+
+#: index.docbook:537
+msgid "An association from <literal>Product</literal> to <literal>Part</literal> requires existence of a foreign key column and possibly an index column to the <literal>Part</literal> table. A <literal><one-to-many></literal> tag indicates that this is a one to many association."
+msgstr "<literal>Product</literal> ãã <literal>Part</literal> ã¸ã®é¢é£ã¯ã <literal>Part</literal> ãã¼ãã«ã¸ã®å¤é¨ãã¼ã«ã©ã ã¨ãå ´åã«ãã£ã¦ã¯ã¤ã³ããã¯ã¹ã«ã©ã ãå¿
è¦ã§ãã <literal><one-to-many></literal> ã¿ã°ã¯ããããä¸å¯¾å¤é¢é£ã§ãããã¨ã表ãã¦ãã¾ãã"
+
+#: index.docbook:550
+msgid ""
+ "<![CDATA[<one-to-many \n"
+ " class=\"ClassName\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]>"
+msgstr ""
+ "<![CDATA[<one-to-many \n"
+ " class=\"ClassName\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]>"
+
+#: index.docbook:553
+msgid "<literal>class</literal> (required): The name of the associated class."
+msgstr "<literal>class</literal> ï¼å¿
é ï¼: é¢é£ã¯ã©ã¹ã®ååã"
+
+#: index.docbook:558
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how cached identifiers that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr "<literal>not-found</literal> ï¼ãªãã·ã§ã³ - ããã©ã«ã㯠<literal>exception</literal>ï¼: åç
§å
ã®è¡ããªããã£ãã·ã¥ãããèå¥åãã©ã®ããã«æ±ãããæå®ãã¾ãã <literal>ignore</literal> ãæå®ããã¨ãè¡ããªããã¨ãé¢é£ããªããã®ã¨ãã¦æ±ãã¾ãã"
+
+#: index.docbook:565
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>."
+msgstr "<literal>entity-name</literal> ï¼ãªãã·ã§ã³ï¼: <literal>class</literal> ã®ä»£æ¿ã§ããé¢é£ã¯ã©ã¹ã®ã¨ã³ãã£ãã£åã <literal>class</literal> ã®ä»£ããã«æå®ãããé¢é£ã¯ã©ã¹ã®ã¨ã³ãã£ãã£åã"
+
+#: index.docbook:573
+msgid "Notice that the <literal><one-to-many></literal> element does not need to declare any columns. Nor is it necessary to specify the <literal>table</literal> name anywhere."
+msgstr "<literal><one-to-many></literal> è¦ç´ ã¯ã«ã©ã ã宣è¨ããå¿
è¦ããªããã¨ã«æ³¨æãã¦ãã ããã åæ§ã« <literal>ãã¼ãã«</literal> åãæå®ããå¿
è¦ãããã¾ããã"
+
+#: index.docbook:579
+msgid "<emphasis>Very important note:</emphasis> If the foreign key column of a <literal><one-to-many></literal> association is declared <literal>NOT NULL</literal>, you must declare the <literal><key></literal> mapping <literal>not-null=\"true\"</literal> or <emphasis>use a bidirectional association</emphasis> with the collection mapping marked <literal>inverse=\"true\"</literal>. See the discussion of bidirectional associations later in this chapter."
+msgstr "<emphasis>ã¨ã¦ãéè¦ãªæ³¨æ:</emphasis> ãã <literal><one-to-many></literal> é¢é£ã®å¤é¨ãã¼ã«ã©ã ã <literal>NOT NULL</literal>ã¨å®£è¨ãããå ´åã <literal><key></literal> ãããã³ã°ã« <literal>not-null=\"true\"</literal> ã宣è¨ãããã ã³ã¬ã¯ã·ã§ã³ãããã³ã°ã« <literal>inverse=\"true\"</literal> ãä»ããä¸ã§ã <emphasis>åæ¹åé¢é£ã使ã</emphasis> å¿
è¦ãããã¾ãã åæ¹åé¢é£ã«ã¤ãã¦ã¯ãã®ç« ã®å¾ã®ã»ãã§èª¬æãã¾ãã"
+
+#: index.docbook:588
+msgid "This example shows a map of <literal>Part</literal> entities by name (where <literal>partName</literal> is a persistent property of <literal>Part</literal>). Notice the use of a formula-based index."
+msgstr "次ã®ä¾ã¯ãå称ï¼<literal>Part</literal> ã®æ°¸ç¶çãªããããã£ã§ãã <literal>partName</literal>ï¼ ã«ãã <literal>Part</literal> ã¨ã³ãã£ãã£ã®mapã表ãã¦ãã¾ãã formulaã«ããã¤ã³ããã¯ã¹ã使ã£ã¦ãããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:594
+msgid ""
+ "<![CDATA[<map name=\"parts\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"productId\" not-null=\"true\"/>\n"
+ " <map-key formula=\"partName\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"parts\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"productId\" not-null=\"true\"/>\n"
+ " <map-key formula=\"partName\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:600
+msgid "Advanced collection mappings"
+msgstr "é«åº¦ãªã³ã¬ã¯ã·ã§ã³ï½¥ãããã³ã°"
+
+#: index.docbook:603
+msgid "Sorted collections"
+msgstr "ã½ã¼ããããã³ã¬ã¯ã·ã§ã³"
+
+#: index.docbook:605
+msgid "Hibernate supports collections implementing <literal>java.util.SortedMap</literal> and <literal>java.util.SortedSet</literal>. You must specify a comparator in the mapping file:"
+msgstr "Hibernate㯠<literal>java.util.SortedMap</literal> 㨠<literal>java.util.SortedSet</literal> ãå®è£
ããã³ã¬ã¯ã·ã§ã³ããµãã¼ããã¦ãã¾ãã éçºè
ã¯ãããã³ã°å®ç¾©ãã¡ã¤ã«ã«ã³ã³ãã¬ã¼ã¿ãæå®ããªããã°ãªãã¾ããã"
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<set name=\"aliases\" \n"
+ " table=\"person_aliases\" \n"
+ " sort=\"natural\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" sort=\"my.custom.HolidayComparator\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"aliases\" \n"
+ " table=\"person_aliases\" \n"
+ " sort=\"natural\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" sort=\"my.custom.HolidayComparator\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:612
+msgid "Allowed values of the <literal>sort</literal> attribute are <literal>unsorted</literal>, <literal>natural</literal> and the name of a class implementing <literal>java.util.Comparator</literal>."
+msgstr "<literal>sort</literal> å±æ§ã«è¨å®ã§ããå¤ã¯ <literal>unsorted</literal> 㨠<literal>natural</literal> ããã³ã<literal>java.util.Comparator</literal> ãå®è£
ããã¯ã©ã¹ã®ååã§ãã"
+
+#: index.docbook:618
+msgid "Sorted collections actually behave like <literal>java.util.TreeSet</literal> or <literal>java.util.TreeMap</literal>."
+msgstr "ã½ã¼ããããã³ã¬ã¯ã·ã§ã³ã¯å®è³ªçã«ã¯ <literal>java.util.TreeSet</literal> ã <literal>java.util.TreeMap</literal> ã®ããã«æ¯èãã¾ãã"
+
+#: index.docbook:623
+msgid "If you want the database itself to order the collection elements use the <literal>order-by</literal> attribute of <literal>set</literal>, <literal>bag</literal> or <literal>map</literal> mappings. This solution is only available under JDK 1.4 or higher (it is implemented using <literal>LinkedHashSet</literal> or <literal>LinkedHashMap</literal>). This performs the ordering in the SQL query, not in memory."
+msgstr "ãããã¼ã¿ãã¼ã¹èªèº«ã«ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ã並ã¹ãããããªãã <literal>set</literal> ã <literal>bag</literal>ã<literal>map</literal> ã® <literal>order-by</literal> å±æ§ã使ãã¾ãã ãã®è§£æ±ºæ³ã¯JDK1.4ããããã¯ãã以ä¸ã®ãã¼ã¸ã§ã³ã§å©ç¨å¯è½ã§ã ï¼<literal>LinkedHashSet</literal> ã¾ã㯠<literal>LinkedHashMap</literal>ã使ã£ã¦å®è£
ããã¦ãã¾ãï¼ã æ´åã¯ã¡ã¢ãªä¸ã§ã¯ãªããSQLã¯ã¨ãªå
ã§å®è¡ããã¾ãã"
+
+#: index.docbook:632
+msgid ""
+ "<![CDATA[<set name=\"aliases\" table=\"person_aliases\" order-by=\"lower(name) asc\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" order-by=\"hol_date, hol_name\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"aliases\" table=\"person_aliases\" order-by=\"lower(name) asc\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" order-by=\"hol_date, hol_name\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:634
+msgid "Note that the value of the <literal>order-by</literal> attribute is an SQL ordering, not a HQL ordering!"
+msgstr "<literal>order-by</literal> å±æ§ã®å¤ãSQLå½ä»¤ã§ãã£ã¦ãHQLå½ä»¤ã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ããï¼"
+
+#: index.docbook:639
+msgid "Associations may even be sorted by some arbitrary criteria at runtime using a collection <literal>filter()</literal>."
+msgstr "é¢é£ã¯ãã³ã¬ã¯ã·ã§ã³ã® <literal>filter()</literal> ã使ããã¨ã§ã å®è¡æã«ä»»æã®criteriaã«ãã£ã¦ã½ã¼ããããã¨ãå¯è½ã§ãã"
+
+#: index.docbook:644
+msgid "<![CDATA[sortedUsers = s.createFilter( group.getUsers(), \"order by this.name\" ).list();]]>"
+msgstr "<![CDATA[sortedUsers = s.createFilter( group.getUsers(), \"order by this.name\" ).list();]]>"
+
+#: index.docbook:649
+msgid "Bidirectional associations"
+msgstr "åæ¹åé¢é£"
+
+#: index.docbook:651
+msgid "A <emphasis>bidirectional association</emphasis> allows navigation from both \"ends\" of the association. Two kinds of bidirectional association are supported:"
+msgstr "<emphasis>åæ¹åé¢é£</emphasis> ã¯é¢é£ã®ã©ã¡ããå´ãããã§ãããã²ã¼ã·ã§ã³ã§ãã¾ãã 2種é¡ã®åæ¹åé¢é£ããµãã¼ãããã¦ãã¾ãã"
+
+#: index.docbook:658
+msgid "one-to-many"
+msgstr "one-to-many"
+
+#: index.docbook:660
+msgid "set or bag valued at one end, single-valued at the other"
+msgstr "çå´ãsetãbagãããçæ¹ãåä¸å¤ã§ãã"
+
+#: index.docbook:666
+msgid "many-to-many"
+msgstr "many-to-many"
+
+#: index.docbook:668
+msgid "set or bag valued at both ends"
+msgstr "両å´ãsetãbagã§ãã"
+
+#: index.docbook:677
+msgid "You may specify a bidirectional many-to-many association simply by mapping two many-to-many associations to the same database table and declaring one end as <emphasis>inverse</emphasis> (which one is your choice, but it can not be an indexed collection)."
+msgstr "2ã¤ã®å¤å¯¾å¤é¢é£ã§åããã¼ã¿ãã¼ã¹ãã¼ãã«ããããã³ã°ãã çæ¹ã <emphasis>inverse</emphasis> ã¨ãã¦å®£è¨ãããã¨ã§ã åæ¹åã®å¤å¯¾å¤é¢é£ãæå®ãããã¨ãåºæ¥ã¾ã ï¼ã©ã¡ããinverseã«é¸ãã ã¨ãã¦ãããã¡ãå´ã«ã¯ã¤ã³ããã¯ã¹ä»ãã®ã³ã¬ã¯ã·ã§ã³ã¯ä½¿ãã¾ããï¼ã"
+
+#: index.docbook:684
+msgid "Here's an example of a bidirectional many-to-many association; each category can have many items and each item can be in many categories:"
+msgstr "次ã«åæ¹åã®å¤å¯¾å¤é¢é£ã®ä¾ã示ãã¾ãã åã«ãã´ãªã¯å¤æ°ã®ã¢ã¤ãã ãæã¤ãã¨ãã§ããåã¢ã¤ãã ã¯å¤ãã®ã«ãã´ãªã«å±ãããã¨ãåºæ¥ã¾ãã"
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<class name=\"Category\">\n"
+ " <id name=\"id\" column=\"CATEGORY_ID\"/>\n"
+ " ...\n"
+ " <bag name=\"items\" table=\"CATEGORY_ITEM\">\n"
+ " <key column=\"CATEGORY_ID\"/>\n"
+ " <many-to-many class=\"Item\" column=\"ITEM_ID\"/>\n"
+ " </bag>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Item\">\n"
+ " <id name=\"id\" column=\"ITEM_ID\"/>\n"
+ " ...\n"
+ "\n"
+ " <!-- inverse end -->\n"
+ " <bag name=\"categories\" table=\"CATEGORY_ITEM\" inverse=\"true\">\n"
+ " <key column=\"ITEM_ID\"/>\n"
+ " <many-to-many class=\"Category\" column=\"CATEGORY_ID\"/>\n"
+ " </bag>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Category\">\n"
+ " <id name=\"id\" column=\"CATEGORY_ID\"/>\n"
+ " ...\n"
+ " <bag name=\"items\" table=\"CATEGORY_ITEM\">\n"
+ " <key column=\"CATEGORY_ID\"/>\n"
+ " <many-to-many class=\"Item\" column=\"ITEM_ID\"/>\n"
+ " </bag>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Item\">\n"
+ " <id name=\"id\" column=\"ITEM_ID\"/>
+\n"
+ " ...\n"
+ "\n"
+ " <!-- inverse end -->\n"
+ " <bag name=\"categories\" table=\"CATEGORY_ITEM\" inverse=\"true\">\n"
+ " <key column=\"ITEM_ID\"/>\n"
+ " <many-to-many class=\"Category\" column=\"CATEGORY_ID\"/>\n"
+ " </bag>\n"
+ "</class>]]>"
+
+#: index.docbook:691
+msgid "Changes made only to the inverse end of the association are <emphasis>not</emphasis> persisted. This means that Hibernate has two representations in memory for every bidirectional association, one link from A to B and another link from B to A. This is easier to understand if you think about the Java object model and how we create a many-to-many relationship in Java:"
+msgstr "é¢é£ã®inverseå´ã«ã®ã¿è¡ãããå¤æ´ã¯æ°¸ç¶å <emphasis>ããã¾ãã</emphasis>ã ããã¯ãHibernateã¯å
¨ã¦ã®åæ¹åé¢é£ã«ã¤ãã¦ãã¡ã¢ãªä¸ã«ï¼ã¤ã®è¡¨ç¾ãæã£ã¦ããã¨ããæå³ã§ãã ã¤ã¾ãä¸ã¤ã¯AããBã¸ã®ãªã³ã¯ã§ãããä¸ã¤ã¯BããAã¸ã®ãªã³ã¯ã¨ãããã¨ã§ãã Javaã®ãªãã¸ã§ã¯ãã¢ãã«ã«ã¤ãã¦èããJavaã§åæ¹åé¢ä¿ãã©ããã£ã¦ä½ãããèããã°ã ããã¯ç解ããããã§ããä¸è¨ã«ãJavaã§ã®åæ¹åé¢é£ã示ãã¾ãã"
+
+#: index.docbook:699
+msgid ""
+ "<![CDATA[\n"
+ "category.getItems().add(item); // The category now \"knows\" about the relationship\n"
+ "item.getCategories().add(category); // The item now \"knows\" about the relationship\n"
+ "\n"
+ "session.persist(item); // The relationship won't be saved!\n"
+ "session.persist(category); // The relationship will be saved]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "category.getItems().add(item); // The category now \"knows\" about the relationship\n"
+ "item.getCategories().add(category); // The item now \"knows\" about the relationship\n"
+ "\n"
+ "session.persist(item); // The relationship won't be saved!\n"
+ "session.persist(category); // The relationship will be saved]]>"
+
+#: index.docbook:701
+msgid "The non-inverse side is used to save the in-memory representation to the database."
+msgstr "é¢é£ã®inverseã§ã¯ãªãå´ã¯ãã¡ã¢ãªä¸ã®è¡¨ç¾ããã¼ã¿ãã¼ã¹ã«ä¿åããã®ã«ä½¿ããã¾ãã"
+
+#: index.docbook:705
+msgid "You may define a bidirectional one-to-many association by mapping a one-to-many association to the same table column(s) as a many-to-one association and declaring the many-valued end <literal>inverse=\"true\"</literal>."
+msgstr "åæ¹åã®ä¸å¯¾å¤é¢é£ãå®ç¾©ããã«ã¯ã ä¸å¯¾å¤é¢é£ãå¤å¯¾ä¸é¢é£ã¨åããã¼ãã«ã®ã«ã©ã ã«ãããã³ã°ãã å¤å´ã« <literal>inverse=\"true\"</literal> ã¨å®£è¨ãã¾ãã"
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:713
+msgid "Mapping one end of an association with <literal>inverse=\"true\"</literal> doesn't affect the operation of cascades, these are orthogonal concepts!"
+msgstr "é¢é£ã®çå´ã« <literal>inverse=\"true\"</literal> ãè¨å®ãã¦ãã ã«ã¹ã±ã¼ãæä½ã«å½±é¿ãä¸ãã¾ããããããã¯ç´äº¤ããæ¦å¿µã§ãï¼"
+
+#: index.docbook:721
+msgid "Bidirectional associations with indexed collections"
+msgstr "ã¤ã³ããã¯ã¹ä»ãã³ã¬ã¯ã·ã§ã³ã¨åæ¹åé¢é£"
+
+#: index.docbook:722
+msgid "A bidirectional association where one end is represented as a <literal><list></literal> or <literal><map></literal> requires special consideration. If there is a property of the child class which maps to the index column, no problem, we can continue using <literal>inverse=\"true\"</literal> on the collection mapping:"
+msgstr "çå´ã <literal><list></literal> ã <literal><map></literal> ã§ãã åæ¹åé¢é£ã¯ãç¹ã«ããèããå¿
è¦ãããã¾ãã ã¤ã³ããã¯ã¹ã«ã©ã ã«ããããããåã¯ã©ã¹ã®ããããã£ãããå ´åã¯ãåé¡ãªãã§ãã ã³ã¬ã¯ã·ã§ã³ã®ãããã³ã°ã§ <literal>inverse=\"true\"</literal> ã使ãç¶ãããã¾ãã"
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"/>\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"/>\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:731
+msgid "But, if there is no such property on the child class, we can't think of the association as truly bidirectional (there is information available at one end of the association that is not available at the other end). In this case, we can't map the collection <literal>inverse=\"true\"</literal>. Instead, we could use the following mapping:"
+msgstr "ããããåã¯ã©ã¹ã«ãã®ãããªããããã£ããªãå ´åã¯ã é¢é£ãçã«åæ¹åã§ããã¨èãããã¨ãã§ãã¾ãã ï¼é¢é£ã®çå´ã«å©ç¨ã§ããæ
å ±ãããã¾ãããããä¸æ¹ã«ã¯ããã¾ããï¼ã ãã®å ´åã¯ãã³ã¬ã¯ã·ã§ã³ã« <literal>inverse=\"true\"</literal> ããããã³ã°ã§ãã¾ããã 代ããã«ã次ã®ãããªãããã³ã°ã使ãã¾ãã"
+
+#: index.docbook:738
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\">\n"
+ " <key column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\">\n"
+ " <key column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:740
+msgid "Note that in this mapping, the collection-valued end of the association is responsible for updates to the foreign key. TODO: Does this really result in some unnecessary update statements?"
+msgstr "注æï¼ ãã®ãããã³ã°ã§ã¯ãé¢é£ã®ã³ã¬ã¯ã·ã§ã³å¤ã®å´ã¯ã å¤é¨ãã¼ãã¢ãããã¼ããã責任ãããã¾ãã"
+
+#: index.docbook:748
+msgid "Ternary associations"
+msgstr "3é
é¢é£"
+
+#: index.docbook:750
+msgid "There are three possible approaches to mapping a ternary association. One is to use a <literal>Map</literal> with an association as its index:"
+msgstr "3é
é¢é£ã®ãããã³ã°ã«ã¯3ã¤ã®ã¢ããã¼ããããã¾ãã 1ã¤ç®ã¯é¢é£ãã¤ã³ããã¯ã¹ã¨ã㦠<literal>Map</literal> ã使ç¨ããã¢ããã¼ãã§ãã"
+
+#: index.docbook:755
+msgid ""
+ "<![CDATA[<map name=\"contracts\">\n"
+ " <key column=\"employer_id\" not-null=\"true\"/>\n"
+ " <map-key-many-to-many column=\"employee_id\" class=\"Employee\"/>\n"
+ " <one-to-many class=\"Contract\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"contracts\">\n"
+ " <key column=\"employer_id\" not-null=\"true\"/>\n"
+ " <map-key-many-to-many column=\"employee_id\" class=\"Employee\"/>\n"
+ " <one-to-many class=\"Contract\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<map name=\"connections\">\n"
+ " <key column=\"incoming_node_id\"/>\n"
+ " <map-key-many-to-many column=\"outgoing_node_id\" class=\"Node\"/>\n"
+ " <many-to-many column=\"connection_id\" class=\"Connection\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"connections\">\n"
+ " <key column=\"incoming_node_id\"/>\n"
+ " <map-key-many-to-many column=\"outgoing_node_id\" class=\"Node\"/>\n"
+ " <many-to-many column=\"connection_id\" class=\"Connection\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:759
+msgid "A second approach is to simply remodel the association as an entity class. This is the approach we use most commonly."
+msgstr "2ã¤ç®ã¯åç´ã«é¢é£ãã¨ã³ãã£ãã£ï½¥ã¯ã©ã¹ã¨ãã¦ã¢ãã«ãä½ãç´ãã¢ããã¼ãã§ã é »ç¹ã«ä½¿ããã¾ãã"
+
+#: index.docbook:764
+msgid "A final alternative is to use composite elements, which we will discuss later."
+msgstr "æå¾ã¯compositeè¦ç´ ã使ãã¢ããã¼ãã§ããããã«é¢ããè°è«ã¯å¾ã»ã©è¡ãã¾ãã"
+
+#: index.docbook:771
+msgid "Using an <idbag>"
+msgstr "<literal><idbag></literal>ã®ä½¿ç¨"
+
+#: index.docbook:773
+msgid "If you've fully embraced our view that composite keys are a bad thing and that entities should have synthetic identifiers (surrogate keys), then you might find it a bit odd that the many to many associations and collections of values that we've shown so far all map to tables with composite keys! Now, this point is quite arguable; a pure association table doesn't seem to benefit much from a surrogate key (though a collection of composite values <emphasis>might</emphasis>). Nevertheless, Hibernate provides a feature that allows you to map many to many associations and collections of values to a table with a surrogate key."
+msgstr "è¤åãã¼ã¯æªããã®ã§ãã¨ã³ãã£ãã£ã¯äººå·¥ã®èå¥å(代çãã¼)ãæã¤ã¹ãã§ããã¨ããèãæ¹ããã¯ã å¤å¯¾å¤é¢é£ã¨å¤ã®ã³ã¬ã¯ã·ã§ã³ãè¤åãã¼ãç¨ãããã¼ãã«ã¸ãããã³ã°ããã®ã¯å°ãå¥å¦ã«æããããããã¾ããï¼ ç¢ºãã«ãã®èãæ¹ã«ã¯è°è«ã®ä½å°ãããã¾ãã ç´ç²ãªé¢é£ãã¼ãã«ã¯ä»£çãã¼ã使ã£ã¦ãå©çãå¾ãããªãããã«æããããã§ã ï¼åæå¤ã®ã³ã¬ã¯ã·ã§ã³ã¯å©çããã <emphasis>ãã</emphasis> ããã¾ãããï¼ã ã¨ã¯ãããHibernateã¯ä»£çãã¼ãæã¤ãã¼ãã«ã¸å¤å¯¾å¤é¢é£ã¨å¤ã®ã³ã¬ã¯ã·ã§ã³ã ãããã³ã°ããæ©è½ãåãã¦ãã¾ãã"
+
+#: index.docbook:784
+msgid "The <literal><idbag></literal> element lets you map a <literal>List</literal> (or <literal>Collection</literal>) with bag semantics."
+msgstr "bagã®ã»ãã³ãã£ãã¯ã¹ãæã£ã <literal>List</literal>ï¼ã¾ã㯠<literal>Collection</literal>ï¼ã <literal><idbag></literal> è¦ç´ ã«ãããã³ã°ã§ãã¾ãã"
+
+#: index.docbook:789
+msgid ""
+ "<![CDATA[<idbag name=\"lovers\" table=\"LOVERS\">\n"
+ " <collection-id column=\"ID\" type=\"long\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </collection-id>\n"
+ " <key column=\"PERSON1\"/>\n"
+ " <many-to-many column=\"PERSON2\" class=\"Person\" fetch=\"join\"/>\n"
+ "</idbag>]]>"
+msgstr ""
+ "<![CDATA[<idbag name=\"lovers\" table=\"LOVERS\">\n"
+ " <collection-id column=\"ID\" type=\"long\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </collection-id>\n"
+ " <key column=\"PERSON1\"/>\n"
+ " <many-to-many column=\"PERSON2\" class=\"Person\" fetch=\"join\"/>\n"
+ "</idbag>]]>"
+
+#: index.docbook:791
+msgid "As you can see, an <literal><idbag></literal> has a synthetic id generator, just like an entity class! A different surrogate key is assigned to each collection row. Hibernate does not provide any mechanism to discover the surrogate key value of a particular row, however."
+msgstr "ãåç¥ã®ããã« <literal><idbag></literal> ã¯ã¨ã³ãã£ãã£ï½¥ã¯ã©ã¹ã®ãã㫠人工çãªidã¸ã§ãã¬ã¼ã¿ãæã£ã¦ãã¾ãï¼ ç°ãªã代çãã¼ãããããã®ã³ã¬ã¯ã·ã§ã³ã®åã«å²ãå½ã¦ã¾ãã ããããªãããHibernateã¯ããè¡ã®ä»£çãã¼ã®å¤ãè¦ã¤ãåºãæ©æ§ãæã£ã¦ãã¾ããã"
+
+#: index.docbook:798
+msgid "Note that the update performance of an <literal><idbag></literal> is <emphasis>much</emphasis> better than a regular <literal><bag></literal>! Hibernate can locate individual rows efficiently and update or delete them individually, just like a list, map or set."
+msgstr "<literal><idbag></literal> ãæ´æ°ããããã©ã¼ãã³ã¹ã¯ é常㮠<literal><bag></literal> ãããè¯ããã¨ã«æ³¨ç®ãã¦ãã ããï¼ Hibernateã¯åã
ã®è¡ãå¹æçã«è¦ã¤ãããã¨ãã§ãã listãmapãsetã®ããã«åå¥ã«ãã®è¡ãæ´æ°ãåé¤ã§ãã¾ãã"
+
+#: index.docbook:805
+msgid "In the current implementation, the <literal>native</literal> identifier generation strategy is not supported for <literal><idbag></literal> collection identifiers."
+msgstr "ç¾å¨ã®å®è£
ã§ã¯ã<literal>native</literal> ã¨ããidçææ¦ç¥ã <literal><idbag></literal> ã³ã¬ã¯ã·ã§ã³ã®èå¥åã«å¯¾ãã¦ä½¿ãã¾ããã"
+
+#: index.docbook:829
+msgid "Collection examples"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ä¾"
+
+#: index.docbook:831
+msgid "The previous sections are pretty confusing. So lets look at an example. This class:"
+msgstr "ããã¾ã§ã®ç¯ã®èª¬æã§ã¯ç解ãã«ããã®ã§ã以ä¸ã®ä¾ãè¦ã¦ãã ããã"
+
+#: index.docbook:836
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "\n"
+ "public class Parent {\n"
+ " private long id;\n"
+ " private Set children;\n"
+ "\n"
+ " public long getId() { return id; }\n"
+ " private void setId(long id) { this.id=id; }\n"
+ "\n"
+ " private Set getChildren() { return children; }\n"
+ " private void setChildren(Set children) { this.children=children; }\n"
+ "\n"
+ " ....\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "\n"
+ "public class Parent {\n"
+ " private long id;\n"
+ " private Set children;\n"
+ "\n"
+ " public long getId() { return id; }\n"
+ " private void setId(long id) { this.id=id; }\n"
+ "\n"
+ " private Set getChildren() { return children; }\n"
+ " private void setChildren(Set children) { this.children=children; }\n"
+ "\n"
+ " ....\n"
+ " ....\n"
+ "}]]>"
+
+#: index.docbook:838
+msgid "has a collection of <literal>Child</literal> instances. If each child has at most one parent, the most natural mapping is a one-to-many association:"
+msgstr "ãã®ã¯ã©ã¹ã¯ <literal>Child</literal> ã¤ã³ã¹ã¿ã³ã¹ã®ã³ã¬ã¯ã·ã§ã³ãæã£ã¦ãã¾ãã ããåã
ã®childãæ大ã§ãä¸ã¤ã®parentãæã£ã¦ãããªãã°ãæãèªç¶ãªãããã³ã°ã¯ä¸å¯¾å¤é¢é£ã§ãã"
+
+#: index.docbook:844
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:846
+msgid "This maps to the following table definitions:"
+msgstr "ããã¯ä»¥ä¸ã®ãã¼ãã«å®ç¾©ã«ãããã³ã°ãã¾ãã"
+
+#: index.docbook:850
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+
+#: index.docbook:852
+msgid "If the parent is <emphasis>required</emphasis>, use a bidirectional one-to-many association:"
+msgstr "ããparentã <emphasis>è¦æ±</emphasis> ããããªããåæ¹åã®ä¸å¯¾å¤é¢é£ã使ç¨ãã¦ãã ããã"
+
+#: index.docbook:857
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <many-to-one name=\"parent\" class=\"Parent\" column=\"parent_id\" not-null=\"true\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <many-to-one name=\"parent\" class=\"Parent\" column=\"parent_id\" not-null=\"true\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:859
+msgid "Notice the <literal>NOT NULL</literal> constraint:"
+msgstr "<literal>NOT NULL</literal> å¶ç´ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:863
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null\n"
+ " primary key,\n"
+ " name varchar(255),\n"
+ " parent_id bigint not null )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null\n"
+ " primary key,\n"
+ " name varchar(255),\n"
+ " parent_id bigint not null )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+
+#: index.docbook:865
+msgid "Alternatively, if you absolutely insist that this association should be unidirectional, you can declare the <literal>NOT NULL</literal> constraint on the <literal><key></literal> mapping:"
+msgstr "ãããã¯ããããã®é¢é£ã¯åæ¹åã§ããã¹ãã¨å¼·ã主張ããã®ã§ããã°ã <literal><key></literal> ã« <literal>NOT NULL</literal> å¶ç´ã宣è¨ã§ãã¾ãã"
+
+#: index.docbook:871
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:873
+msgid "On the other hand, if a child might have multiple parents, a many-to-many association is appropriate:"
+msgstr "ä¸æ¹ã§ãããchildãè¤æ°ã®parentãæã¦ããªãã°ãå¤å¯¾å¤é¢é£ã妥å½ã§ãã"
+
+#: index.docbook:878
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" table=\"childset\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <many-to-many class=\"Child\" column=\"child_id\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" table=\"childset\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <many-to-many class=\"Child\" column=\"child_id\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:880
+msgid "Table definitions:"
+msgstr "ãã¼ãã«å®ç¾©ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã"
+
+#: index.docbook:884
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255) )\n"
+ "create table childset ( parent_id bigint not null,\n"
+ " child_id bigint not null,\n"
+ " primary key ( parent_id, child_id ) )\n"
+ "alter table childset add constraint childsetfk0 (parent_id) references parent\n"
+ "alter table childset add constraint childsetfk1 (child_id) references child]]>"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255) )\n"
+ "create table childset ( parent_id bigint not null,\n"
+ " child_id bigint not null,\n"
+ " primary key ( parent_id, child_id ) )\n"
+ "alter table childset add constraint childsetfk0 (parent_id) references parent\n"
+ "alter table childset add constraint childsetfk1 (child_id) references child]]>"
+
+#: index.docbook:886
+msgid "For more examples and a complete walk-through a parent/child relationship mapping, see <xref linkend=\"example-parentchild\"/>."
+msgstr "parent/childé¢ä¿ã®ãããã³ã°ã«ã¤ãã¦ã®ããå¤ãã®ä¾ãå®å
¨ãªæé ãå¿
è¦ã§ããã°ã <xref linkend=\"example-parentchild\"/> ãã覧ãã ããã"
+
+#: index.docbook:891
+msgid "Even more exotic association mappings are possible, we will catalog all possibilities in the next chapter."
+msgstr "ã¾ããããã«ç¹æ®ãªé¢é£ãããã³ã°ãå¯è½ã§ãã次ã®ç« ã§è©³ããè¿°ã¹ã¾ãã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/component_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/component_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/component_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,679 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Component Mapping"
+msgstr "ã³ã³ãã¼ãã³ãã®ãããã³ã°"
+
+#: index.docbook:7
+msgid "The notion of a <emphasis>component</emphasis> is re-used in several different contexts, for different purposes, throughout Hibernate."
+msgstr "<emphasis>ã³ã³ãã¼ãã³ã</emphasis> ã®æ¦å¿µã¯ãHibernateãéãã¦æ§ã
ãªç¶æ³ã®ä¸ã§ ç°ãªãç®çã®ããã«åå©ç¨ããã¾ãã"
+
+#: index.docbook:13
+msgid "Dependent objects"
+msgstr "ä¾åãªãã¸ã§ã¯ã"
+
+#: index.docbook:15
+msgid "A component is a contained object that is persisted as a value type, not an entity reference. The term \"component\" refers to the object-oriented notion of composition (not to architecture-level components). For example, you might model a person like this:"
+msgstr "ã³ã³ãã¼ãã³ãã¯ãã¨ã³ãã£ãã£ã®åç
§ã§ã¯ãªãå¤åã¨ãã¦æ°¸ç¶åãããã å
å«ããããªãã¸ã§ã¯ãã§ããã³ã³ãã¼ãã³ãã¨ããè¨èã«ã¤ãã¦ã¯ãã³ã³ãã¸ã·ã§ã³ã¨ãã ãªãã¸ã§ã¯ãæåã®æ¦å¿µãåç
§ãã¦ãã ããï¼ã¢ã¼ããã¯ãã£ã¬ãã«ã®ã³ã³ãã¼ãã³ãã§ã¯ããã¾ããï¼ã ä¾ãã°ã以ä¸ã®Personã¢ãã«ã®ãããªãã®ã§ãã"
+
+#: index.docbook:21
+msgid ""
+ "<![CDATA[public class Person {\n"
+ " private java.util.Date birthday;\n"
+ " private Name name;\n"
+ " private String key;\n"
+ " public String getKey() {\n"
+ " return key;\n"
+ " }\n"
+ " private void setKey(String key) {\n"
+ " this.key=key;\n"
+ " }\n"
+ " public java.util.Date getBirthday() {\n"
+ " return birthday;\n"
+ " }\n"
+ " public void setBirthday(java.util.Date birthday) {\n"
+ " this.birthday = birthday;\n"
+ " }\n"
+ " public Name getName() {\n"
+ " return name;\n"
+ " }\n"
+ " public void setName(Name name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ " ......\n"
+ " ......\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Person {
+\n"
+ " private java.util.Date birthday;
+\n"
+ " private Name name;
+\n"
+ " private String key;
+\n"
+ " public String getKey() {
+\n"
+ " return key;
+\n"
+ " }
+\n"
+ " private void setKey(String key) {
+\n"
+ " this.key=key;
+\n"
+ " }
+\n"
+ " public java.util.Date getBirthday() {
+\n"
+ " return birthday;
+\n"
+ " }
+\n"
+ " public void setBirthday(java.util.Date birthday) {
+\n"
+ " this.birthday = birthday;
+\n"
+ " }
+\n"
+ " public Name getName() {
+\n"
+ " return name;
+\n"
+ " }
+\n"
+ " public void setName(Name name) {
+\n"
+ " this.name = name;
+\n"
+ " }
+\n"
+ " ......
+\n"
+ " ......
+\n"
+ "}]]>"
+
+#: index.docbook:23
+msgid ""
+ "<![CDATA[public class Name {\n"
+ " char initial;\n"
+ " String first;\n"
+ " String last;\n"
+ " public String getFirst() {\n"
+ " return first;\n"
+ " }\n"
+ " void setFirst(String first) {\n"
+ " this.first = first;\n"
+ " }\n"
+ " public String getLast() {\n"
+ " return last;\n"
+ " }\n"
+ " void setLast(String last) {\n"
+ " this.last = last;\n"
+ " }\n"
+ " public char getInitial() {\n"
+ " return initial;\n"
+ " }\n"
+ " void setInitial(char initial) {\n"
+ " this.initial = initial;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Name {
+\n"
+ " char initial;
+\n"
+ " String first;
+\n"
+ " String last;
+\n"
+ " public String getFirst() {
+\n"
+ " return first;
+\n"
+ " }
+\n"
+ " void setFirst(String first) {
+\n"
+ " this.first = first;
+\n"
+ " }
+\n"
+ " public String getLast() {
+\n"
+ " return last;
+\n"
+ " }
+\n"
+ " void setLast(String last) {
+\n"
+ " this.last = last;
+\n"
+ " }
+\n"
+ " public char getInitial() {
+\n"
+ " return initial;
+\n"
+ " }
+\n"
+ " void setInitial(char initial) {
+\n"
+ " this.initial = initial;
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:25
+msgid "Now <literal>Name</literal> may be persisted as a component of <literal>Person</literal>. Notice that <literal>Name</literal> defines getter and setter methods for its persistent properties, but doesn't need to declare any interfaces or identifier properties."
+msgstr "ãã¾ã<literal>Name</literal> 㯠<literal>Person</literal> ã®ã³ã³ãã¼ãã³ãã¨ã㦠永ç¶åãããã¨ãåºæ¥ã¾ãããã㧠<literal>Name</literal> ã¯æ°¸ç¶åå±æ§ã«å¯¾ãã¦getterã setterã¡ã½ãããå®ç¾©ãã¾ãããã¤ã³ã¿ã¼ãã§ã¤ã¹ãèå¥åããããã£ãå®ç¾©ããå¿
è¦ã ãªããã¨ã«æ³¨æãã¦ä¸ããã"
+
+#: index.docbook:32
+msgid "Our Hibernate mapping would look like:"
+msgstr "ãããã³ã°å®ç¾©ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã"
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\"> <!-- class attribute optional -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">
+\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">
+\n"
+ " <generator class=\"uuid\"/>
+\n"
+ " </id>
+\n"
+ " <property name=\"birthday\" type=\"date\"/>
+\n"
+ " <component name=\"Name\" class=\"eg.Name\"> <!-- class attribute optional -->
+\n"
+ " <property name=\"initial\"/>
+\n"
+ " <property name=\"first\"/>
+\n"
+ " <property name=\"last\"/>
+\n"
+ " </component>
+\n"
+ "</class>]]>"
+
+#: index.docbook:38
+msgid "The person table would have the columns <literal>pid</literal>, <literal>birthday</literal>, <literal>initial</literal>, <literal>first</literal> and <literal>last</literal>."
+msgstr "Personãã¼ãã«ã¯ <literal>pid</literal>ã <literal>birthday</literal>ã <literal>initial</literal>ã <literal>first</literal>ã <literal>last</literal> ã«ã©ã ãæã¡ã¾ãã"
+
+#: index.docbook:46
+msgid "Like all value types, components do not support shared references. In other words, two persons could have the same name, but the two person objects would contain two independent name ojects, only \"the same\" by value. The null value semantics of a component are <emphasis>ad hoc</emphasis>. When reloading the containing object, Hibernate will assume that if all component columns are null, then the entire component is null. This should be okay for most purposes."
+msgstr "å
¨ã¦ã®å¤åã®ããã«ãã³ã³ãã¼ãã³ãã¯åç
§ã®å
±æããããã¨ãã§ãã¾ããã è¨ãæããã¨ãäºäººã®Personã¯åãååãæã¤ãã¨ãã§ãã¾ãããäºã¤ã®Personãªãã¸ã§ã¯ã㯠\"å¤ãåãã ã\"ã®å¥ã
ã®nameãªãã¸ã§ã¯ããå«ãã§ããã¨ãããã¨ã§ãã ã³ã³ãã¼ãã³ãã®nullå¤ã®ã»ãã³ãã£ã¯ã¹ã¯ <emphasis>ã¢ãããã¯</emphasis> ã§ãã ã³ã³ãã¼ãã³ãã®ãªãã¸ã§ã¯ããåèªã¿è¾¼ã¿ããéãHibernateã¯ã³ã³ãã¼ãã³ãã®ãã¹ã¦ã®ã«ã©ã ã nullã§ãããªãã³ã³ãã¼ãã³ãèªä½ãnullã§ããã¨èãã¾ãã ããã¯å¤§æµã®å ´ååé¡ããã¾ããã"
+
+#: index.docbook:55
+msgid "The properties of a component may be of any Hibernate type (collections, many-to-one associations, other components, etc). Nested components should <emphasis>not</emphasis> be considered an exotic usage. Hibernate is intended to support a very fine-grained object model."
+msgstr "ã³ã³ãã¼ãã³ãã®å±æ§ã¯ã©ããªHibernateã®åã§ãæ§ãã¾ããï¼ã³ã¬ã¯ã·ã§ã³ãmany-to-oneé¢é£ã ä»ã®ã³ã³ãã¼ãã³ããªã©ï¼ããã¹ããããã³ã³ãã¼ãã³ãã¯æ»
å¤ã«ä½¿ããªãã¨èããã¹ãã§ã¯ <emphasis>ããã¾ãã</emphasis> ãHibernateã¯é常ã«ããã®ç´°ãããªãã¸ã§ã¯ãã¢ãã«ããµãã¼ãããããã«æå³ããã¦ãã¾ãã"
+
+#: index.docbook:62
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr "<literal><component></literal> è¦ç´ ã¯è¦ªã¨ã³ãã£ãã£ã¸ã®éåç
§ã¨ãã¦ãã³ã³ãã¼ãã³ãã¯ã©ã¹ã® å±æ§ããããã³ã°ãã <literal><parent></literal> ãµãè¦ç´ ã使ç¨ã§ãã¾ãã"
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\" unique=\"true\">\n"
+ " <parent name=\"namedPerson\"/> <!-- reference back to the Person -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">
+\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">
+\n"
+ " <generator class=\"uuid\"/>
+\n"
+ " </id>
+\n"
+ " <property name=\"birthday\" type=\"date\"/>
+\n"
+ " <component name=\"Name\" class=\"eg.Name\" unique=\"true\">
+\n"
+ " <parent name=\"namedPerson\"/> <!-- reference back to the Person -->
+\n"
+ " <property name=\"initial\"/>
+\n"
+ " <property name=\"first\"/>
+\n"
+ " <property name=\"last\"/>
+\n"
+ " </component>
+\n"
+ "</class>]]>"
+
+#: index.docbook:73
+msgid "Collections of dependent objects"
+msgstr "å¾å±ãããªãã¸ã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³"
+
+#: index.docbook:75
+msgid "Collections of components are supported (eg. an array of type <literal>Name</literal>). Declare your component collection by replacing the <literal><element></literal> tag with a <literal><composite-element></literal> tag."
+msgstr "Hibernateã¯ã³ã³ãã¼ãã³ãã®ã³ã¬ã¯ã·ã§ã³ããµãã¼ããã¦ãã¾ãï¼ä¾ãã° <literal>Name</literal> åã®é
åï¼ã <literal><element></literal> ã¿ã°ã <literal><composite-element></literal> ã¿ã°ã«åãæ¿ãããã¨ã«ãã ã³ã³ãã¼ãã³ãã³ã¬ã¯ã·ã§ã³ã宣è¨ãã¦ãã ããã"
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<set name=\"someNames\" table=\"some_names\" lazy=\"true\">\n"
+ " <key column=\"id\"/>\n"
+ " <composite-element class=\"eg.Name\"> <!-- class attribute required -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </composite-element>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"someNames\" table=\"some_names\" lazy=\"true\">
+\n"
+ " <key column=\"id\"/>
+\n"
+ " <composite-element class=\"eg.Name\"> <!-- class attribute required -->
+\n"
+ " <property name=\"initial\"/>
+\n"
+ " <property name=\"first\"/>
+\n"
+ " <property name=\"last\"/>
+\n"
+ " </composite-element>
+\n"
+ "</set>]]>"
+
+#: index.docbook:84
+msgid "Note: if you define a <literal>Set</literal> of composite elements, it is very important to implement <literal>equals()</literal> and <literal>hashCode()</literal> correctly."
+msgstr "注æ: ã³ã³ãã¸ããã¨ã¬ã¡ã³ãã® <literal>Set</literal> ãå®ç¾©ãããªãã <literal>equals()</literal> 㨠<literal>hashCode()</literal> ãæ£ããå®è£
ãããã¨ãéè¦ã§ãã"
+
+#: index.docbook:90
+msgid "Composite elements may contain components but not collections. If your composite element itself contains components, use the <literal><nested-composite-element></literal> tag. This is a pretty exotic case - a collection of components which themselves have components. By this stage you should be asking yourself if a one-to-many association is more appropriate. Try remodelling the composite element as an entity - but note that even though the Java model is the same, the relational model and persistence semantics are still slightly different."
+msgstr "ã³ã³ãã¸ããã¨ã¬ã¡ã³ãã¯ã³ã¬ã¯ã·ã§ã³ãå«ã¾ããã³ã³ãã¼ãã³ããå«ããã¨ãããã¾ãã ã³ã³ãã¸ããã¨ã¬ã¡ã³ãèªèº«ãã³ã³ãã¼ãã³ããå«ãã§ããå ´å㯠<literal><nested-composite-element></literal> ã 使ç¨ãã¦ãã ãããã³ã³ãã¼ãã³ãã®ã³ã¬ã¯ã·ã§ã³èªèº«ãã³ã³ãã¼ãã³ããæã¤ã¨ããã±ã¼ã¹ã¯ãã£ãã«ããã¾ããã ãã®æ®µéã¾ã§ã«ãone-to-manyé¢é£ã®æ¹ãããé©åã§ãªããã¨çèãã¦ãã ããã ã³ã³ãã¸ããã¨ã¬ã¡ã³ããã¨ã³ãã£ãã£ã¨ãã¦å度ã¢ããªã³ã°ãã¦ã¿ã¦ãã ããã ãããããã¯Javaã®ã¢ãã«ã¨ãã¦ã¯åãã§ããããªã¬ã¼ã·ã§ãã«ã¢ãã«ã¨æ°¸ç¶åä½ã¯ã¾ã è¥å¹²ç°ãªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:102
+msgid "Please note that a composite element mapping doesn't support null-able properties if you're using a <literal><set></literal>. Hibernate has to use each columns value to identify a record when deleting objects (there is no separate primary key column in the composite element table), which is not possible with null values. You have to either use only not-null properties in a composite-element or choose a <literal><list></literal>, <literal><map></literal>, <literal><bag></literal> or <literal><idbag></literal>."
+msgstr "ãã <literal><set></literal> ã使ç¨ããã®ã§ããã°ãã³ã³ãã¸ããã¨ã¬ã¡ã³ãã®ãããã³ã°ãnullå¤ãå¯è½ãª å±æ§ããµãã¼ããã¦ããªããã¨ã«æ³¨æãã¦ãã ãããHibernateã¯ãªãã¸ã§ã¯ããåé¤ããã¨ãã ã¬ã³ã¼ããèå¥ããããã«ããããã®ã«ã©ã ã®å¤ã使ç¨ããå¿
è¦ããããããnullå¤ãæã¤ãã¨ãåºæ¥ã¾ãã ï¼ã³ã³ãã¸ããã¨ã¬ã¡ã³ããã¼ãã«ã«ã¯å¥ã®ä¸»ãã¼ã«ã©ã ã¯ããã¾ããï¼ã ã³ã³ãã¸ããã¨ã¬ã¡ã³ãã«not-nullã®å±æ§ã®ã¿ã使ç¨ããããã¾ã㯠<literal><list></literal>ã<literal><map></literal>ã <literal><bag></literal>ã<literal><idbag></literal> ãé¸æããå¿
è¦ãããã¾ãã"
+
+#: index.docbook:113
+msgid "A special case of a composite element is a composite element with a nested <literal><many-to-one></literal> element. A mapping like this allows you to map extra columns of a many-to-many association table to the composite element class. The following is a many-to-many association from <literal>Order</literal> to <literal>Item</literal> where <literal>purchaseDate</literal>, <literal>price</literal> and <literal>quantity</literal> are properties of the association:"
+msgstr "ã³ã³ãã¸ããã¨ã¬ã¡ã³ãã®ç¹å¥ãªã±ã¼ã¹ã¨ãã¦ããã¹ãããã <literal><many-to-one></literal> å±æ§ãæ㤠ã³ã³ãã¸ããã¨ã¬ã¡ã³ããããã¾ãã ãã®ãããã³ã°ã¯ãã³ã³ãã¸ããã¨ã¬ã¡ã³ãã¯ã©ã¹ãå¤å¯¾å¤é¢é£ãã¼ãã«ã® ä½åãªã«ã©ã ã¸ãããã³ã°ãã¾ãã 次ã®ä¾ã¯ <literal>Order</literal> ããã<literal>Item</literal> ã¸ã®å¤å¯¾å¤é¢é£ã§ãã <literal>purchaseDate</literal>ã<literal>price</literal>ã<literal>quantity</literal> ã¯é¢é£ã®å±æ§ã¨ãªãã¾ãã"
+
+#: index.docbook:123
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.Purchase\">\n"
+ " <property name=\"purchaseDate\"/>\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/> <!-- class attribute is optional -->\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Order\" .... >
+\n"
+ " ....
+\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">
+\n"
+ " <key column=\"order_id\">
+\n"
+ " <composite-element class=\"eg.Purchase\">
+\n"
+ " <property name=\"purchaseDate\"/>
+\n"
+ " <property name=\"price\"/>
+\n"
+ " <property name=\"quantity\"/>
+\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/> <!-- class attribute is optional -->
+\n"
+ " </composite-element>
+\n"
+ " </set>
+\n"
+ "</class>]]>"
+
+#: index.docbook:125
+msgid "Of course, there can't be a reference to the purchae on the other side, for bidirectional association navigation. Remember that components are value types and don't allow shared references. A single <literal>Purchase</literal> can be in the set of an <literal>Order</literal>, but it can't be referenced by the <literal>Item</literal> at the same time."
+msgstr "ãã¡ãããåæ¹åé¢é£ã®ããã²ã¼ã·ã§ã³ã®ããã«å対å´ããpurchaseã¸ã®åç
§ãä½ããã¨ã¯åºæ¥ã¾ããã ã³ã³ãã¼ãã³ãã¯å¤åã§ãããåç
§ãå
±æã§ããªããã¨ãè¦ãã¦ããã¦ãã ããã ä¸ã¤ã® <literal>Purchase</literal> ã¯ä¸ã¤ã® <literal>Order</literal> ã®setã«åå¨ã§ãã¾ããã åæã« <literal>Item</literal> ããåç
§ãããã¨ã¯åºæ¥ã¾ããã"
+
+#: index.docbook:133
+msgid "Even ternary (or quaternary, etc) associations are possible:"
+msgstr "3é
é¢é£ï¼ãããã¯4é
ãªã©ï¼ãå¯è½ã§ãã"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.OrderLine\">\n"
+ " <many-to-one name=\"purchaseDetails class=\"eg.Purchase\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/>\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Order\" .... >
+\n"
+ " ....
+\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">
+\n"
+ " <key column=\"order_id\">
+\n"
+ " <composite-element class=\"eg.OrderLine\">
+\n"
+ " <many-to-one name=\"purchaseDetails\" class=\"eg.Purchase\"/>
+\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/>
+\n"
+ " </composite-element>
+\n"
+ " </set>
+\n"
+ "</class>]]>"
+
+#: index.docbook:137
+msgid "Composite elements may appear in queries using the same syntax as associations to other entities."
+msgstr "ã³ã³ãã¸ããã¨ã¬ã¡ã³ãã¯ä»ã®ã¨ã³ãã£ãã£ã¸ã®é¢é£ã¨ãã¦ã åãã·ã³ã¿ãã¯ã¹ã使ã£ã¦ããã¯ã¨ãªå
ã§ä½¿ç¨ã§ãã¾ãã"
+
+#: index.docbook:145
+msgid "Components as Map indices"
+msgstr "Mapã®ã¤ã³ããã¯ã¹ã¨ãã¦ã®ã³ã³ãã¼ãã³ã"
+
+#: index.docbook:147
+msgid "The <literal><composite-map-key></literal> element lets you map a component class as the key of a <literal>Map</literal>. Make sure you override <literal>hashCode()</literal> and <literal>equals()</literal> correctly on the component class."
+msgstr "<literal><composite-map-key></literal> è¦ç´ 㯠<literal>Map</literal> ã®ãã¼ã¨ãã¦ã³ã³ãã¼ãã³ãã¯ã©ã¹ã ãããã³ã°ãã¾ããã³ã³ãã¼ãã³ãã¯ã©ã¹ä¸ã§ <literal>hashCode()</literal> 㨠<literal>equals()</literal> ãæ£ç¢ºã«ãªã¼ãã¼ã©ã¤ããã¦ãã ããã"
+
+#: index.docbook:156
+msgid "Components as composite identifiers"
+msgstr "è¤åèå¥åã¨ãã¦ã®ã³ã³ãã¼ãã³ã"
+
+#: index.docbook:158
+msgid "You may use a component as an identifier of an entity class. Your component class must satisfy certain requirements:"
+msgstr "ã³ã³ãã¼ãã³ããã¨ã³ãã£ãã£ã¯ã©ã¹ã®èå¥åã¨ãã¦ä½¿ããã¨ãã§ãã¾ãã ã³ã³ãã¼ãã³ãã¯ã©ã¹ã¯ä»¥ä¸ã®æ¡ä»¶ãæºããå¿
è¦ãããã¾ãã"
+
+#: index.docbook:165
+msgid "It must implement <literal>java.io.Serializable</literal>."
+msgstr "<literal>java.io.Serializable</literal> ãå®è£
ããªããã°ãªãã¾ããã"
+
+#: index.docbook:170
+msgid "It must re-implement <literal>equals()</literal> and <literal>hashCode()</literal>, consistently with the database's notion of composite key equality."
+msgstr "ãã¼ã¿ãã¼ã¹ä¸ã®è¤åãã¼ã®ç価æ§ã¨çç¾ã®ãªãããã«ã<literal>equals()</literal> 㨠<literal>hashCode()</literal> ãåå®è£
ããªããã°ãªãã¾ããã"
+
+#: index.docbook:179
+msgid "Note: in Hibernate3, the second requirement is not an absolutely hard requirement of Hibernate. But do it anyway."
+msgstr "注æ: Hibernate3ã«ããã¦ã2çªç®ã®æ¡ä»¶ã¯çµ¶å¯¾çãªæ¡ä»¶ã§ã¯ããã¾ããã ãããã¨ã«ããæ¡ä»¶ãæºããã¦ãã ããã"
+
+#: index.docbook:183
+msgid "You can't use an <literal>IdentifierGenerator</literal> to generate composite keys. Instead the application must assign its own identifiers."
+msgstr "è¤åãã¼ãçæããããã« <literal>IdentifierGenerator</literal> ã使ç¨ãããã¨ã¯ã§ãã¾ããã 代ããã«ã¢ããªã±ã¼ã·ã§ã³ãèå¥åãå²ãå½ã¦ãªãã¦ã¯ãªãã¾ããã"
+
+#: index.docbook:188
+msgid "Use the <literal><composite-id></literal> tag (with nested <literal><key-property></literal> elements) in place of the usual <literal><id></literal> declaration. For example, the <literal>OrderLine</literal> class has a primary key that depends upon the (composite) primary key of <literal>Order</literal>."
+msgstr "é常㮠<literal><id></literal> 宣è¨ã®ä»£ããã« <literal><composite-id></literal> ã¿ã°ã ï¼ãã¹ãããã <literal><key-property></literal> å±æ§ã¨å
±ã«ï¼ä½¿ãã¾ãã 以ä¸ã®ä¾ã§ã¯ã<literal>OrderLine</literal> ã¯ã©ã¹ã¯ <literal>Order</literal> ã®ï¼è¤åï¼ä¸»ãã¼ã« ä¾åãã主ãã¼ãæã£ã¦ãã¾ãã"
+
+#: index.docbook:196
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " \n"
+ " <composite-id name=\"id\" class=\"OrderLineId\">\n"
+ " <key-property name=\"lineId\"/>\n"
+ " <key-property name=\"orderId\"/>\n"
+ " <key-property name=\"customerId\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"name\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\" class=\"Order\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-one>\n"
+ " ....\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"OrderLine\">
+\n"
+ "
+\n"
+ " <composite-id name=\"id\" class=\"OrderLineId\">
+\n"
+ " <key-property name=\"lineId\"/>
+\n"
+ " <key-property name=\"orderId\"/>
+\n"
+ " <key-property name=\"customerId\"/>
+\n"
+ " </composite-id>
+\n"
+ "
+\n"
+ " <property name=\"name\"/>
+\n"
+ "
+\n"
+ " <many-to-one name=\"order\" class=\"Order\"
+\n"
+ " insert=\"false\" update=\"false\">
+\n"
+ " <column name=\"orderId\"/>
+\n"
+ " <column name=\"customerId\"/>
+\n"
+ " </many-to-one>
+\n"
+ " ....
+\n"
+ "
+\n"
+ "</class>]]>"
+
+#: index.docbook:198
+msgid "Now, any foreign keys referencing the <literal>OrderLine</literal> table are also composite. You must declare this in your mappings for other classes. An association to <literal>OrderLine</literal> would be mapped like this:"
+msgstr "ãã®ã¨ãã<literal>OrderLine</literal> ãã¼ãã«ã¸é¢é£ããå¤é¨ãã¼ãã¾ãè¤åã§ãã ä»ã®ã¯ã©ã¹ã®ãããã³ã°ã§ããã宣è¨ããªããã°ãªãã¾ããã <literal>OrderLine</literal> ã¸ã®é¢é£ã¯æ¬¡ã®ããã«ãããã³ã°ããã¾ãã"
+
+#: index.docbook:204
+msgid ""
+ "<![CDATA[<many-to-one name=\"orderLine\" class=\"OrderLine\">\n"
+ "<!-- the \"class\" attribute is optional, as usual -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ "</many-to-one>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"orderLine\" class=\"OrderLine\">
+\n"
+ "<!-- the \"class\" attribute is optional, as usual -->
+\n"
+ " <column name=\"lineId\"/>
+\n"
+ " <column name=\"orderId\"/>
+\n"
+ " <column name=\"customerId\"/>
+\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:206
+msgid "(Note that the <literal><column></literal> tag is an alternative to the <literal>column</literal> attribute everywhere.)"
+msgstr "ï¼<literal><column></literal> ã¿ã°ã¯ã©ãã§ãã£ã¦ã <literal>column</literal> å±æ§ã® 代ããã«ãªãã¾ããï¼"
+
+#: index.docbook:211
+msgid "A <literal>many-to-many</literal> association to <literal>OrderLine</literal> also uses the composite foreign key:"
+msgstr "<literal>OrderLine</literal> ã¸ã® <literal>many-to-many</literal> é¢é£ã è¤åå¤é¨ãã¼ã使ãã¾ãã"
+
+#: index.docbook:216
+msgid ""
+ "<![CDATA[<set name=\"undeliveredOrderLines\">\n"
+ " <key column name=\"warehouseId\"/>\n"
+ " <many-to-many class=\"OrderLine\">\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-many>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"undeliveredOrderLines\">
+\n"
+ " <key column name=\"warehouseId\"/>
+\n"
+ " <many-to-many class=\"OrderLine\">
+\n"
+ " <column name=\"lineId\"/>
+\n"
+ " <column name=\"orderId\"/>
+\n"
+ " <column name=\"customerId\"/>
+\n"
+ " </many-to-many>
+\n"
+ "</set>]]>"
+
+#: index.docbook:218
+msgid "The collection of <literal>OrderLine</literal>s in <literal>Order</literal> would use:"
+msgstr "<literal>Order</literal> ã«ãã <literal>OrderLine</literal> ã®ã³ã¬ã¯ã·ã§ã³ã¯ 次ã®ãã®ã使ç¨ãã¾ãã"
+
+#: index.docbook:223
+msgid ""
+ "<![CDATA[<set name=\"orderLines\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"OrderLine\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"orderLines\" inverse=\"true\">
+\n"
+ " <key>
+\n"
+ " <column name=\"orderId\"/>
+\n"
+ " <column name=\"customerId\"/>
+\n"
+ " </key>
+\n"
+ " <one-to-many class=\"OrderLine\"/>
+\n"
+ "</set>]]>"
+
+#: index.docbook:225
+msgid "(The <literal><one-to-many></literal> element, as usual, declares no columns.)"
+msgstr "ï¼<literal><one-to-many></literal> å±æ§ã¯ãä¾ã«ãã£ã¦ã«ã©ã ã宣è¨ãã¾ããï¼"
+
+#: index.docbook:229
+msgid "If <literal>OrderLine</literal> itself owns a collection, it also has a composite foreign key."
+msgstr "<literal>OrderLine</literal> èªèº«ãã³ã¬ã¯ã·ã§ã³ãæã£ã¦ããå ´åã åæã«è¤åå¤é¨ãã¼ãæã£ã¦ãã¾ãã"
+
+#: index.docbook:234
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " ....\n"
+ " ....\n"
+ " <list name=\"deliveryAttempts\">\n"
+ " <key> <!-- a collection inherits the composite key type -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <list-index column=\"attemptId\" base=\"1\"/>\n"
+ " <composite-element class=\"DeliveryAttempt\">\n"
+ " ...\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"OrderLine\">
+\n"
+ " ....
+\n"
+ " ....
+\n"
+ " <list name=\"deliveryAttempts\">
+\n"
+ " <key> <!-- a collection inherits the composite key type -->
+\n"
+ " <column name=\"lineId\"/>
+\n"
+ " <column name=\"orderId\"/>
+\n"
+ " <column name=\"customerId\"/>
+\n"
+ " </key>
+\n"
+ " <list-index column=\"attemptId\" base=\"1\"/>
+\n"
+ " <composite-element class=\"DeliveryAttempt\">
+\n"
+ " ...
+\n"
+ " </composite-element>
+\n"
+ " </set>
+\n"
+ "</class>]]>"
+
+#: index.docbook:239
+msgid "Dynamic components"
+msgstr "åçã³ã³ãã¼ãã³ã"
+
+#: index.docbook:241
+msgid "You may even map a property of type <literal>Map</literal>:"
+msgstr "<literal>Map</literal> åã®ããããã£ã®ãããã³ã°ãå¯è½ã§ãã"
+
+#: index.docbook:245
+msgid ""
+ "<![CDATA[<dynamic-component name=\"userAttributes\">\n"
+ " <property name=\"foo\" column=\"FOO\" type=\"string\"/>\n"
+ " <property name=\"bar\" column=\"BAR\" type=\"integer\"/>\n"
+ " <many-to-one name=\"baz\" class=\"Baz\" column=\"BAZ_ID\"/>\n"
+ "</dynamic-component>]]>"
+msgstr ""
+ "<![CDATA[<dynamic-component name=\"userAttributes\">
+\n"
+ " <property name=\"foo\" column=\"FOO\" type=\"string\"/>
+\n"
+ " <property name=\"bar\" column=\"BAR\" type=\"integer\"/>
+\n"
+ " <many-to-one name=\"baz\" class=\"Baz\" column=\"BAZ_ID\"/>
+\n"
+ "</dynamic-component>]]>"
+
+#: index.docbook:247
+msgid "The semantics of a <literal><dynamic-component></literal> mapping are identical to <literal><component></literal>. The advantage of this kind of mapping is the ability to determine the actual properties of the bean at deployment time, just by editing the mapping document. Runtime manipulation of the mapping document is also possible, using a DOM parser. Even better, you can access (and change) Hibernate's configuration-time metamodel via the <literal>Configuration</literal> object."
+msgstr "<literal><dynamic-component></literal> ãããã³ã°ã®ã»ãã³ãã£ã¯ã¹ã¯ <literal><component></literal> ã¨åä¸ã®ãã®ã§ãããã®ç¨®ã®ãããã³ã°ã®å©ç¹ã¯ããããã³ã°ããã¥ã¡ã³ãã®ç·¨éã«ãããé
ç½®æã«beanã®å±æ§ã 決å®ã§ããç¹ã§ããã¾ããDOMãã¼ãµãå©ç¨ãã¦ããããã³ã°ããã¥ã¡ã³ãã®ã©ã³ã¿ã¤ã æä½ãå¯è½ã§ãã ããã«ã<literal>Configuration</literal> ãªãã¸ã§ã¯ãçµç±ã§Hibernateã®ã³ã³ãã£ã°ã¬ã¼ã·ã§ã³æã®ã¡ã¿ã¢ãã«ã« ã¢ã¯ã»ã¹ï¼ã¾ãã¯å¤æ´ï¼ãå¯è½ã§ãã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/configuration.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/configuration.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/configuration.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1599 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Configuration"
+msgstr "<title>è¨å®</title>"
+
+#: index.docbook:7
+msgid "Because Hibernate is designed to operate in many different environments, there are a large number of configuration parameters. Fortunately, most have sensible default values and Hibernate is distributed with an example <literal>hibernate.properties</literal> file in <literal>etc/</literal> that shows the various options. Just put the example file in your classpath and customize it."
+msgstr "Hibernateã¯ãã¾ãã¾ãªç°å¢ã§åä½ããããã«ãã¶ã¤ã³ããã¦ãããããé常ã«å¤ãã®è¨å®è¦ç´ ãããã¾ãã 幸ããªãã¨ã«ãHibernateã¯ãå
¬éããã¦ããããã±ã¼ã¸ã® <literal>etc/</literal> ãã©ã«ãã® <literal>hibernate.properties</literal> ã«ãã»ã¨ãã©ã®è¨å®è¦ç´ ã®é©åãªããã©ã«ãå¤ãè¨è¿°ããã¦ãã¾ãã ãã® <literal>hibernate.properties</literal> ãã¯ã©ã¹ãã¹ã«è¨å®ããè¨å®è¦ç´ ãã«ã¹ã¿ãã¤ãºããã ãã§ãã"
+
+#: index.docbook:16
+msgid "Programmatic configuration"
+msgstr "ããã°ã©ã ä¸ã®è¨å®"
+
+#: index.docbook:18
+msgid "An instance of <literal>org.hibernate.cfg.Configuration</literal> represents an entire set of mappings of an application's Java types to an SQL database. The <literal>Configuration</literal> is used to build an (immutable) <literal>SessionFactory</literal>. The mappings are compiled from various XML mapping files."
+msgstr "<literal>org.hibernate.cfg.Configuration</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ã Javaã®åã¨SQLãã¼ã¿ãã¼ã¹ã®ãããã³ã°æ
å ±ããã¹ã¦æã£ã¦ãã¾ãã The <literal>Configuration</literal> ã¯ãï¼ä¸å¤ã®ï¼ <literal>SessionFactory</literal> ãçæããã¨ãã«ä½¿ç¨ãã¾ãã è¤æ°ã®XMLãããã³ã°ãã¡ã¤ã«ãå¤æãããããã³ã°æ
å ±ã«ãã¾ãã"
+
+#: index.docbook:26
+msgid "You may obtain a <literal>Configuration</literal> instance by instantiating it directly and specifying XML mapping documents. If the mapping files are in the classpath, use <literal>addResource()</literal>:"
+msgstr "é常ã<literal>Configuration</literal> ã¤ã³ã¹ã¿ã³ã¹ã¯ãç¹å®ã®XMLãããã³ã°ãã¡ã¤ã« ã«ãã£ã¦ç´æ¥åæåããã¾ããããããããã³ã°ãã¡ã¤ã«ãã¯ã©ã¹ãã¹ã«è¨å®ããã¦ããå ´åã 次ã®ã¡ã½ããã使ã£ã¦ãã ããã <literal>addResource()</literal> :"
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addResource(\"Item.hbm.xml\")\n"
+ " .addResource(\"Bid.hbm.xml\");]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addResource(\"Item.hbm.xml\")\n"
+ " .addResource(\"Bid.hbm.xml\");]]>"
+
+#: index.docbook:34
+msgid "An alternative (sometimes better) way is to specify the mapped class, and let Hibernate find the mapping document for you:"
+msgstr "代æ¿æ¡(ãã¡ãã®ã»ããè¯ãã¨ããããã¾ã)ã¨ãã¦ãããã³ã°ã¯ã©ã¹ãæå®ããæ¹æ³ãããã¾ããHibernateã«ããããã³ã°ãã¡ã¤ã«ã è¦ã¤ãããã¦ãã ããï¼"
+
+#: index.docbook:39
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class);]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class);]]>"
+
+#: index.docbook:41
+msgid "Then Hibernate will look for mapping files named <literal>/org/hibernate/auction/Item.hbm.xml</literal> and <literal>/org/hibernate/auction/Bid.hbm.xml</literal> in the classpath. This approach eliminates any hardcoded filenames."
+msgstr "Hibernateã¯ãã¯ã©ã¹ãã¹ã«ãã以ä¸ã®ãããªååã®ãããã³ã°ãã¡ã¤ã«ãè¦ã¤ãã¾ãã <literal>/org/hibernate/auction/Item.hbm.xml</literal> ã <literal>/org/hibernate/auction/Bid.hbm.xml</literal> ã ãã®æ¹æ³ã ã¨ããã¼ãã³ã¼ãã£ã³ã°ããããã¡ã¤ã«åãæé¤ã§ãã¾ãã"
+
+#: index.docbook:48
+msgid "A <literal>Configuration</literal> also allows you to specify configuration properties:"
+msgstr "<literal>Configuration</literal> ã¯ãè¨å®ããããã£ãæå®ãããã¨ãã§ãã¾ãï¼"
+
+#: index.docbook:53
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class)\n"
+ " .setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLInnoDBDialect\")\n"
+ " .setProperty(\"hibernate.connection.datasource\", \"java:comp/env/jdbc/test\")\n"
+ " .setProperty(\"hibernate.order_updates\", \"true\");]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class)\n"
+ " .setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLInnoDBDialect\")\n"
+ " .setProperty(\"hibernate.connection.datasource\", \"java:comp/env/jdbc/test\")\n"
+ " .setProperty(\"hibernate.order_updates\", \"true\");]]>"
+
+#: index.docbook:55
+msgid "This is not the only way to pass configuration properties to Hibernate. The various options include:"
+msgstr "Hibernateã«è¨å®ããããã£ãéãæ¹æ³ã¯1ã¤ã§ã¯ããã¾ããã ãã¾ãã¾ãªãªãã·ã§ã³ãç¨æãã¦ãã¾ãï¼"
+
+#: index.docbook:62
+msgid "Pass an instance of <literal>java.util.Properties</literal> to <literal>Configuration.setProperties()</literal>."
+msgstr "<literal>java.util.Properties</literal> ã¤ã³ã¹ã¿ã³ã¹ã <literal>Configuration.setProperties()</literal> ã«æ¸¡ãã¾ãã"
+
+#: index.docbook:68
+msgid "Place <literal>hibernate.properties</literal> in a root directory of the classpath."
+msgstr "<literal>hibernate.properties</literal> ã ã¯ã©ã¹ãã¹ã®ã«ã¼ããã£ã¬ã¯ããªã«ç½®ãã¾ãã"
+
+#: index.docbook:74
+msgid "Set <literal>System</literal> properties using <literal>java -Dproperty=value</literal>."
+msgstr "<literal>System</literal> ããããã£ã <literal>java -Dproperty=value</literal> ã使ãããã«è¨å®ãã¾ãã"
+
+#: index.docbook:80
+msgid "Include <literal><property></literal> elements in <literal>hibernate.cfg.xml</literal> (discussed later)."
+msgstr "<literal><property></literal> è¦ç´ ã <literal>hibernate.cfg.xml</literal> ï¼å¾è¿°ï¼ã«è¨å®ãã¾ãã"
+
+#: index.docbook:87
+msgid "<literal>hibernate.properties</literal> is the easiest approach if you want to get started quickly."
+msgstr "ä»ããå§ãããã®ãªãã<literal>hibernate.properties</literal> ã使ãã®ãä¸çªã®è¿éã§ãã"
+
+#: index.docbook:92
+msgid "The <literal>Configuration</literal> is intended as a startup-time object, to be discarded once a <literal>SessionFactory</literal> is created."
+msgstr "<literal>Configuration</literal> ã¯ãèµ·åæã«ã ããããªãã¸ã§ã¯ãã§ããã ä¸åº¦ <literal>SessionFactory</literal> ãçæããå¾ã¯ãç ´æ£ããããã¨ãæå³ãã¦ãã¾ãã"
+
+#: index.docbook:100
+msgid "Obtaining a SessionFactory"
+msgstr "SessionFactoryãåå¾ãã"
+
+#: index.docbook:102
+msgid "When all mappings have been parsed by the <literal>Configuration</literal>, the application must obtain a factory for <literal>Session</literal> instances. This factory is intended to be shared by all application threads:"
+msgstr "<literal>Configuration</literal> ããã¹ã¦ã®ãããã³ã°æ
å ±ã解æãããã ã¢ããªã±ã¼ã·ã§ã³ã¯ã <literal>Session</literal> ãã¡ã¯ããªã¤ã³ã¹ã¿ã³ã¹ãåå¾ãã¾ãã ãã®SessionFactoryã¯ãHibernateã使ç¨ãããã¹ã¦ã®ã¹ã¬ããã§å
±æãããã¹ãã§ãã"
+
+#: index.docbook:108
+msgid "<![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]>"
+msgstr "<![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]>"
+
+#: index.docbook:110
+msgid "Hibernate does allow your application to instantiate more than one <literal>SessionFactory</literal>. This is useful if you are using more than one database."
+msgstr "Hibernateã¯ã <literal>SessionFactory</literal> ãè¤æ°çæãããã¨ãã§ãã¾ãã ããã¯ãè¤æ°ã®ãã¼ã¿ãã¼ã¹ã使ç¨ããå ´åã«ä¾¿å©ã§ãã"
+
+#: index.docbook:119
+msgid "JDBC connections"
+msgstr "JDBCã³ãã¯ã·ã§ã³"
+
+#: index.docbook:121
+msgid "Usually, you want to have the <literal>SessionFactory</literal> create and pool JDBC connections for you. If you take this approach, opening a <literal>Session</literal> is as simple as:"
+msgstr "é常ãéçºè
㯠<literal>SessionFactory</literal> ãçæããSessionFactoryã§JDBCã³ãã¯ã·ã§ã³ããã¼ãªã³ã°ãããã¨èãã¾ãã ãã®ã¢ããã¼ããæ¡ç¨ããå ´åãåç´ã« <literal>Session</literal> ããªã¼ãã³ãã¦ãã ããï¼"
+
+#: index.docbook:127
+msgid "<![CDATA[Session session = sessions.openSession(); // open a new Session]]>"
+msgstr "<![CDATA[Session session = sessions.openSession(); // open a new Session]]>"
+
+#: index.docbook:129
+msgid "As soon as you do something that requires access to the database, a JDBC connection will be obtained from the pool."
+msgstr "ããã ãã§ããã¼ãªã³ã°ããJDBCã³ãã¯ã·ã§ã³ã使ã£ã¦ç®çã®ãã¼ã¿ãã¼ã¹ ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:134
+msgid "For this to work, we need to pass some JDBC connection properties to Hibernate. All Hibernate property names and semantics are defined on the class <literal>org.hibernate.cfg.Environment</literal>. We will now describe the most important settings for JDBC connection configuration."
+msgstr "ãã®ããã«ã¯ãJDBCã³ãã¯ã·ã§ã³ã®ããããã£ãHibernateã«è¨å®ããå¿
è¦ãããã¾ãã ãã¹ã¦ã®Hibernateããããã£åã¨ã»ãã³ãã£ã¯ã¹ã¯ <literal>org.hibernate.cfg.Environment</literal> ã¯ã©ã¹ã«å®ç¾©ããã¦ãã¾ãã ãã®è¨å®ã¯JDBCã³ãã¯ã·ã§ã³è¨å®ã®ä¸ã§ä¸çªéè¦ãªãã®ã§ãã"
+
+#: index.docbook:141
+msgid "Hibernate will obtain (and pool) connections using <literal>java.sql.DriverManager</literal> if you set the following properties:"
+msgstr "ããã以ä¸ã®ããããã£ãè¨å®ããã¨ãHibernateã¯ã³ãã¯ã·ã§ã³ãåå¾ããï¼ãã¼ã«ãï¼ããã« <literal>java.sql.DriverManager</literal> ã使ãã¾ãã"
+
+#: index.docbook:147
+msgid "Hibernate JDBC Properties"
+msgstr "Hibernate JDBCããããã£"
+
+#: index.docbook:153, index.docbook:241, index.docbook:338, index.docbook:529, index.docbook:725, index.docbook:832, index.docbook:920
+msgid "Property name"
+msgstr "ããããã£å"
+
+#: index.docbook:154, index.docbook:242, index.docbook:339, index.docbook:530, index.docbook:726, index.docbook:833, index.docbook:921
+msgid "Purpose"
+msgstr "<entry>æå³</entry>"
+
+#: index.docbook:160
+msgid "hibernate.connection.driver_class"
+msgstr "hibernate.connection.driver_class"
+
+#: index.docbook:163
+msgid "JDBC driver class"
+msgstr "JDBCãã©ã¤ãã¯ã©ã¹"
+
+#: index.docbook:168
+msgid "hibernate.connection.url"
+msgstr "hibernate.connection.url"
+
+#: index.docbook:171
+msgid "JDBC URL"
+msgstr "jdbc URL"
+
+#: index.docbook:176, index.docbook:272
+msgid "hibernate.connection.username"
+msgstr "hibernate.connection.username"
+
+#: index.docbook:179
+msgid "database user"
+msgstr "database user"
+
+#: index.docbook:184, index.docbook:280
+msgid "hibernate.connection.password"
+msgstr "hibernate.connection.password"
+
+#: index.docbook:187
+msgid "database user password"
+msgstr "database user password"
+
+#: index.docbook:192
+msgid "hibernate.connection.pool_size"
+msgstr "hibernate.connection.pool_size"
+
+#: index.docbook:195
+msgid "maximum number of pooled connections"
+msgstr "ãã¼ã«ããã³ãã¯ã·ã§ã³ã®æ大æ°"
+
+#: index.docbook:202
+msgid "Hibernate's own connection pooling algorithm is however quite rudimentary. It is intended to help you get started and is <emphasis>not intended for use in a production system</emphasis> or even for performance testing. You should use a third party pool for best performance and stability. Just replace the <literal>hibernate.connection.pool_size</literal> property with connection pool specific settings. This will turn off Hibernate's internal pool. For example, you might like to use C3P0."
+msgstr "Hibernateã®ã³ãã¯ã·ã§ã³ãã¼ã«ã¢ã«ã´ãªãºã ã¯é常ã«åæ©çãªãã®ã§ãã ããã¯ããã«å§ããããããã«ã¨ç¨æããããã®ã§ã<emphasis>製åã¨ãã¦ä½¿ç¨ãããã¨ãæå³ãã¦ãã¾ãã</emphasis> ã ã¾ããããã©ã¼ãã³ã¹ã®ãã¹ãã®ããã®ãã®ã§ãããã¾ããã æé«ã®ããã©ã¼ãã³ã¹ã¨å®å®æ§ãæã£ããã¼ã«ãå®ç¾ããããã°ããµã¼ããã¼ãã£ã®ãã¼ã«ããå§ããã¾ãã <literal>hibernate.connection.pool_size</literal> ããããã£ã« é©åãªã³ãã¯ã·ã§ã³ãã¼ã«ãµã¤ãºãè¨è¿°ãã¦ãã ããã ãã®ã¾ã¾ã ã¨Hibernateã®ã³ãã¯ã·ã§ã³ãã¼ã«ã使ãã¾ãã ä¾ãã°æ¬¡ã®ããã«C3P0ã使ãã¾ãã"
+
+#: index.docbook:212
+msgid "C3P0 is an open source JDBC connection pool distributed along with Hibernate in the <literal>lib</literal> directory. Hibernate will use its <literal>C3P0ConnectionProvider</literal> for connection pooling if you set <literal>hibernate.c3p0.*</literal> properties. If you'd like to use Proxool refer to the packaged <literal>hibernate.properties</literal> and the Hibernate web site for more information."
+msgstr "C3P0ã¯ãªã¼ãã³ã½ã¼ã¹JDBCã³ãã¯ã·ã§ã³ãã¼ã«ã§ãHibernateã® <literal>lib</literal> ãã£ã¬ã¯ããªã«ããã¾ããããã<literal>hibernate.c3p0.*</literal> ããããã£ã ã»ããããã°ãHibernateã¯ã <literal>C3P0ConnectionProvider</literal> ã使ãã¾ãã ããProxoolã使ãããå ´åã¯ã <literal>hibernate.properties</literal> ããã±ã¼ã¸ã åç
§ããããHibernateã®Webãµã¤ãã§ããå¤ãã®æ
å ±ãåå¾ãã¦ãã ããã"
+
+#: index.docbook:221
+msgid "Here is an example <literal>hibernate.properties</literal> file for C3P0:"
+msgstr "C3P0ç¨ã® <literal>hibernate.properties</literal> ãã¡ã¤ã«ãä¾ã¨ãã¦ç¤ºãã¾ãï¼"
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[hibernate.connection.driver_class = org.postgresql.Driver\n"
+ "hibernate.connection.url = jdbc:postgresql://localhost/mydatabase\n"
+ "hibernate.connection.username = myuser\n"
+ "hibernate.connection.password = secret\n"
+ "hibernate.c3p0.min_size=5\n"
+ "hibernate.c3p0.max_size=20\n"
+ "hibernate.c3p0.timeout=1800\n"
+ "hibernate.c3p0.max_statements=50\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+ "<![CDATA[hibernate.connection.driver_class = org.postgresql.Driver\n"
+ "hibernate.connection.url = jdbc:postgresql://localhost/mydatabase\n"
+ "hibernate.connection.username = myuser\n"
+ "hibernate.connection.password = secret\n"
+ "hibernate.c3p0.min_size=5\n"
+ "hibernate.c3p0.max_size=20\n"
+ "hibernate.c3p0.timeout=1800\n"
+ "hibernate.c3p0.max_statements=50\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+
+#: index.docbook:227
+msgid "For use inside an application server, you should almost always configure Hibernate to obtain connections from an application server <literal>Datasource</literal> registered in JNDI. You'll need to set at least one of the following properties:"
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãä¸ã§ä½¿ãå ´åã¯ãHibernateãè¨å®ãã ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãããã³ãã¯ã·ã§ã³ãåå¾ããããã«ãã¦ãã ããã <literal>Datasource</literal> ãJNDIã«ç»é²ãã¾ãããã㦠ããããã£ã以ä¸ã®ããã«è¨å®ãã¦ãã ããã"
+
+#: index.docbook:235
+msgid "Hibernate Datasource Properties"
+msgstr "Hibernate ãã¼ã¿ã½ã¼ã¹ããããã£"
+
+#: index.docbook:248
+msgid "hibernate.connection.datasource"
+msgstr "hibernate.connection.datasource"
+
+#: index.docbook:251
+msgid "datasource JNDI name"
+msgstr "ãã¼ã¿ã½ã¼ã¹ã®JNDIå"
+
+#: index.docbook:256
+msgid "hibernate.jndi.url"
+msgstr "hibernate.jndi.url"
+
+#: index.docbook:258
+msgid "<emphasis>URL of the JNDI provider</emphasis> (optional)"
+msgstr "<emphasis>JNDIãããã¤ãã®URL</emphasis> (ãªãã·ã§ã³)"
+
+#: index.docbook:264
+msgid "hibernate.jndi.class"
+msgstr "hibernate.jndi.class"
+
+#: index.docbook:266
+msgid "<emphasis>class of the JNDI <literal>InitialContextFactory</literal></emphasis> (optional)"
+msgstr "<emphasis>JNDIã¯ã©ã¹ <literal>InitialContextFactory</literal> </emphasis> (ãªãã·ã§ã³)"
+
+#: index.docbook:274
+msgid "<emphasis>database user</emphasis> (optional)"
+msgstr "<emphasis>database user</emphasis> (ãªãã·ã§ã³)"
+
+#: index.docbook:282
+msgid "<emphasis>database user password</emphasis> (optional)"
+msgstr "<emphasis>database user password</emphasis> (ãªãã·ã§ã³)"
+
+#: index.docbook:290
+msgid "Here's an example <literal>hibernate.properties</literal> file for an application server provided JNDI datasource:"
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãããæä¾ãããJNDIãã¼ã¿ã½ã¼ã¹ã使ã <literal>hibernate.properties</literal> ãã¡ã¤ã«ã®ä¾ã示ãã¾ãï¼"
+
+#: index.docbook:295
+msgid ""
+ "<![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test\n"
+ "hibernate.transaction.factory_class = \\\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ "hibernate.transaction.manager_lookup_class = \\\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+ "<![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test\n"
+ "hibernate.transaction.factory_class = ¥\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ "hibernate.transaction.manager_lookup_class = ¥\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+
+#: index.docbook:297
+msgid "JDBC connections obtained from a JNDI datasource will automatically participate in the container-managed transactions of the application server."
+msgstr "JNDIãã¼ã¿ã½ã¼ã¹ããåå¾ããJDBCã³ãã¯ã·ã§ã³ã¯ãã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã® ã³ã³ãã管çãã©ã³ã¶ã¯ã·ã§ã³ã«èªåçã«åå ãã¾ãã"
+
+#: index.docbook:302
+msgid "Arbitrary connection properties may be given by prepending \"<literal>hibernate.connection</literal>\" to the property name. For example, you may specify a <literal>charSet</literal> using <literal>hibernate.connection.charSet</literal>."
+msgstr "ä»»æã®ã³ãã¯ã·ã§ã³ããããã£ã¯ãä¸ããããâ <literal>hibernate.connnection</literal> â ããããã£åã«ãã£ã¦ä¸ãããã¾ããä¾ãã°ã <literal>charSet</literal> ãè¨å®ãããå ´åã¯ã <literal>hibernate.connection.charSet</literal> ã使ãã¾ãã"
+
+#: index.docbook:308
+msgid "You may define your own plugin strategy for obtaining JDBC connections by implementing the interface <literal>org.hibernate.connection.ConnectionProvider</literal>. You may select a custom implementation by setting <literal>hibernate.connection.provider_class</literal>."
+msgstr "JDBCã³ãã¯ã·ã§ã³ãåå¾ããæ¦ç¥ãæã¤ç¬èªã®ãã©ã°ã¤ã³ãå®ç¾©ããå ´åã¯ã <literal>org.hibernate.connection.ConnectionProvider</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã å®è£
ãã¦ãã ãããããã¦ãå®è£
ã¯ã©ã¹ã <literal>hibernate.connection.provider_class</literal> ã«è¨å®ãã¦ãã ããã"
+
+#: index.docbook:317
+msgid "Optional configuration properties"
+msgstr "ãªãã·ã§ã³è¨å®ããããã£"
+
+#: index.docbook:319
+msgid "There are a number of other properties that control the behaviour of Hibernate at runtime. All are optional and have reasonable default values."
+msgstr "ãããã®ããããã£ã¯Hibernateã®æåãå¶å¾¡ãããã®ã§ãã ãããã®ããããã£ã¯ãã¹ã¦å¦¥å½ãªããã©ã«ãå¤ããããä»»æã§è¨å®ãã¾ãã"
+
+#: index.docbook:324
+msgid "<emphasis>Warning: some of these properties are \"system-level\" only.</emphasis> System-level properties can be set only via <literal>java -Dproperty=value</literal> or <literal>hibernate.properties</literal>. They may <emphasis>not</emphasis> be set by the other techniques described above."
+msgstr "<emphasis>注æï¼ãããã®ããããã£ã¯\"ã·ã¹ãã ã¬ãã«\"ã®ã¿ã§ãã</emphasis> ã·ã¹ãã ã¬ãã«ããããã£ã¯ <literal>java -Dproperty=value</literal> ãããã㯠<literal>hibernate.properties</literal> ã§ã®ã¿è¨å®å¯è½ã§ãã ãã以å¤ã®è¨å®æ¹æ³ã¯ <emphasis>ããã¾ãã</emphasis> ã"
+
+#: index.docbook:332
+msgid "Hibernate Configuration Properties"
+msgstr "Hibernateè¨å®ããããã£"
+
+#: index.docbook:345
+msgid "hibernate.dialect"
+msgstr "hibernate.dialect"
+
+#: index.docbook:347
+msgid "The classname of a Hibernate <literal>Dialect</literal> which allows Hibernate to generate SQL optimized for a particular relational database."
+msgstr "Hibernate <literal>Dialect</literal> ã¯ã©ã¹åãå
¥ãã¾ãã ããã¯ãªã¬ã¼ã·ã§ãã«ãã¼ã¿ãã¼ã¹ãã¨ã«æé©åãããSQLãçæãã¾ãã"
+
+#: index.docbook:351
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>full.classname.of.Dialect</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>full.classname.of.Dialect</literal>"
+
+#: index.docbook:359
+msgid "hibernate.show_sql"
+msgstr "hibernate.show_sql"
+
+#: index.docbook:361
+msgid "Write all SQL statements to console. This is an alternative to setting the log category <literal>org.hibernate.SQL</literal> to <literal>debug</literal>."
+msgstr "çºè¡ããããã¹ã¦ã®SQLãã³ã³ã½ã¼ã«ã«åºåãã¾ãã ããã¯ãã°ã«ãã´ãªã® <literal>org.hibernate.SQL</literal> ã« <literal>debug</literal> ãè¨å®ããæ¹æ³ã®ä»£æ¿æ段ã§ãã"
+
+#: index.docbook:365, index.docbook:377, index.docbook:471, index.docbook:484, index.docbook:497, index.docbook:510, index.docbook:564, index.docbook:591, index.docbook:605, index.docbook:660, index.docbook:888, index.docbook:903, index.docbook:993
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true</literal> | <literal>false</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:373
+msgid "hibernate.format_sql"
+msgstr "hibernate.format_sql"
+
+#: index.docbook:375
+msgid "Pretty print the SQL in the log and console."
+msgstr "ãã°ã¨ã³ã³ã½ã¼ã«ã®SQLãç¾ãã表示ãã¾ãã"
+
+#: index.docbook:385
+msgid "hibernate.default_schema"
+msgstr "hibernate.default_schema"
+
+#: index.docbook:387
+msgid "Qualify unqualified table names with the given schema/tablespace in generated SQL."
+msgstr "çæãããSQLæã®ãã¼ãã«ã«è¨å®ããã¹ãã¼ã/ãã¼ãã«ã¹ãã¼ã¹ã§ãã"
+
+#: index.docbook:390
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>SCHEMA_NAME</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>SCHEMA_NAME</literal>"
+
+#: index.docbook:398
+msgid "hibernate.default_catalog"
+msgstr "hibernate.default_catalog"
+
+#: index.docbook:400
+msgid "Qualify unqualified table names with the given catalog in generated SQL."
+msgstr "çæãããSQLæã®ãã¼ãã«ã«è¨å®ããã«ã¿ãã°ã§ãã"
+
+#: index.docbook:403
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>CATALOG_NAME</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>CATALOG_NAME</literal>"
+
+#: index.docbook:411
+msgid "hibernate.session_factory_name"
+msgstr "hibernate.session_factory_name"
+
+#: index.docbook:413
+msgid "The <literal>SessionFactory</literal> will be automatically bound to this name in JNDI after it has been created."
+msgstr "<literal>SessionFactory</literal> ã¯çæå¾ããã®ååã§JNDIã«ç»é²ããã¾ãã"
+
+#: index.docbook:416, index.docbook:859
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jndi/composite/name</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>jndi/composite/name</literal>"
+
+#: index.docbook:424
+msgid "hibernate.max_fetch_depth"
+msgstr "hibernate.max_fetch_depth"
+
+#: index.docbook:426
+msgid "Set a maximum \"depth\" for the outer join fetch tree for single-ended associations (one-to-one, many-to-one). A <literal>0</literal> disables default outer join fetching."
+msgstr "å¤é¨çµåãã§ããã®æ大深度ãè¨å®ãã¾ããçµåããé¢é£ã¯ 対ä¸é¢é£ã®ã¿ï¼ä¸å¯¾ä¸ãå¤å¯¾ä¸ï¼ã§ãã <literal>0</literal> ãæå®ããã¨å¤é¨çµåãã§ããã¯ç¡å¹ã«ãªãã¾ãã"
+
+#: index.docbook:430
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>0</literal> and <literal>3</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> æ¨å¥¨ããå¤ã¯ <literal>0</literal> ãã <literal>3</literal> ã§ãã"
+
+#: index.docbook:439
+msgid "hibernate.default_batch_fetch_size"
+msgstr "hibernate.default_batch_fetch_size"
+
+#: index.docbook:441
+msgid "Set a default size for Hibernate batch fetching of associations."
+msgstr "é¢é£ãã§ããã®ããã©ã«ãããããµã¤ãºãæå®ãã¾ãã"
+
+#: index.docbook:443
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values <literal>4</literal>, <literal>8</literal>, <literal>16</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> æ¨å¥¨ããå¤ã¯ <literal>4</literal> , <literal>8</literal> , <literal>16</literal> ã§ãã"
+
+#: index.docbook:452
+msgid "hibernate.default_entity_mode"
+msgstr "hibernate.default_entity_mode"
+
+#: index.docbook:454
+msgid "Set a default mode for entity representation for all sessions opened from this <literal>SessionFactory</literal>"
+msgstr "<literal>SessionFactory</literal> ããã»ãã·ã§ã³ããªã¼ãã³ããã¨ã㫠使ç¨ããã¨ã³ãã£ãã£ã®ããã©ã«ãã¢ã¼ããè¨å®ãã¾ãã"
+
+#: index.docbook:457
+msgid "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+msgstr "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+
+#: index.docbook:465
+msgid "hibernate.order_updates"
+msgstr "hibernate.order_updates"
+
+#: index.docbook:467
+msgid "Force Hibernate to order SQL updates by the primary key value of the items being updated. This will result in fewer transaction deadlocks in highly concurrent systems."
+msgstr "é
ç®ãæ´æ°ãããã¨ãã«ãå¥ã®SQLã§ä¸»ãã¼ãæ´æ°ãããã¨ãå¼·å¶ãã¾ãã ãã®å ´åãåæå®è¡å¯è½ãªã·ã¹ãã ã§ã¯ãã¾ãã«ãããããã¯ãçºçããå¯è½æ§ãããã¾ãã"
+
+#: index.docbook:479
+msgid "hibernate.generate_statistics"
+msgstr "hibernate.generate_statistics"
+
+#: index.docbook:481
+msgid "If enabled, Hibernate will collect statistics useful for performance tuning."
+msgstr "æå¹ã®å ´åãHibernateã¯ããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã« æå¹ãªçµ±è¨æ
å ±ãåéãã¾ãã"
+
+#: index.docbook:492
+msgid "hibernate.use_identifier_rollback"
+msgstr "hibernate.use_identifer_rollback"
+
+#: index.docbook:494
+msgid "If enabled, generated identifier properties will be reset to default values when objects are deleted."
+msgstr "æå¹ã®å ´åããªãã¸ã§ã¯ããåé¤ãããã¨ãã« èå¥åããããã£ããªã»ããããããã©ã«ãå¤ã«ãããã®ãçæãã¾ãã"
+
+#: index.docbook:505
+msgid "hibernate.use_sql_comments"
+msgstr "hibernate.use_sql_comments"
+
+#: index.docbook:507
+msgid "If turned on, Hibernate will generate comments inside the SQL, for easier debugging, defaults to <literal>false</literal>."
+msgstr "æå¹ã®å ´åãSQLå
ã«ã³ã¡ã³ããçæãã¾ããããã¯ãããã¯ã容æã«ãã¾ãã ããã©ã«ãã®å¤ã¯ <literal>false</literal> ã§ãã"
+
+#: index.docbook:521
+msgid "Hibernate JDBC and Connection Properties"
+msgstr "Hibernate JDBC ã¨ã³ãã¯ã·ã§ã³ããããã£"
+
+#: index.docbook:536
+msgid "hibernate.jdbc.fetch_size"
+msgstr "hibernate.jdbc.fetch_size"
+
+#: index.docbook:538
+msgid "A non-zero value determines the JDBC fetch size (calls <literal>Statement.setFetchSize()</literal>)."
+msgstr "å¤ã0ã§ãªãå ´åãJDBCãã§ãããµã¤ãºã決å®ãã¾ã ( <literal>Statement.setFetchSize()</literal> ãå¼ã³ã¾ã)ã"
+
+#: index.docbook:545
+msgid "hibernate.jdbc.batch_size"
+msgstr "hibernate.jdbc.batch_size"
+
+#: index.docbook:547
+msgid "A non-zero value enables use of JDBC2 batch updates by Hibernate."
+msgstr "å¤ã0ã§ãªãå ´åãHibernateãJDBC2ãããæ´æ°ã使ç¨ãã¾ãã"
+
+#: index.docbook:549
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>5</literal> and <literal>30</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> æ¨å¥¨ããå¤ã¯ <literal>5</literal> ãã <literal>30</literal> ã§ãã"
+
+#: index.docbook:557
+msgid "hibernate.jdbc.batch_versioned_data"
+msgstr "hibernate.jdbc.batch_versioned_data"
+
+#: index.docbook:559
+msgid "Set this property to <literal>true</literal> if your JDBC driver returns correct row counts from <literal>executeBatch()</literal> (it is usually safe to turn this option on). Hibernate will then use batched DML for automatically versioned data. Defaults to <literal>false</literal>."
+msgstr "ããJDBCãã©ã¤ãã <literal>executeBatch()</literal> ã«ãã£ã¦æ£ç¢ºãªè¡æ°ã è¿ãå ´åããã®ããããã£ã <literal>true</literal> ã«ãã¦ãã ãã ï¼é常ã¯ãã®ãªãã·ã§ã³ãONã«ãã¾ãï¼ã Hibernateã¯ãèªåãã¼ã¸ã§ã³ãã¼ã¿ã®ãããããDMLã使ãã¾ãã ããã©ã«ãã®å¤ã¯ <literal>false</literal> ã§ãã"
+
+#: index.docbook:572
+msgid "hibernate.jdbc.factory_class"
+msgstr "hibernate.jdbc.factory_class"
+
+#: index.docbook:574
+msgid "Select a custom <literal>Batcher</literal>. Most applications will not need this configuration property."
+msgstr "ã«ã¹ã¿ã <literal>Batcher</literal> ãé¸ã³ã¾ãã ã»ã¨ãã©ã®ã¢ããªã±ã¼ã·ã§ã³ã«ããã®è¨å®ã¯å¿
è¦ããã¾ããã"
+
+#: index.docbook:577
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.BatcherFactory</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>classname.of.BatcherFactory</literal>"
+
+#: index.docbook:585
+msgid "hibernate.jdbc.use_scrollable_resultset"
+msgstr "hibernate.jdbc.use_scrollable_resultset"
+
+#: index.docbook:587
+msgid "Enables use of JDBC2 scrollable resultsets by Hibernate. This property is only necessary when using user supplied JDBC connections, Hibernate uses connection metadata otherwise."
+msgstr "ã¹ã¯ãã¼ã«å¯è½ãªãªã¶ã«ãã»ããããHibernateã使ç¨ãã¾ãã ãã®ããããã£ã¯ãJDBCã³ãã¯ã·ã§ã³ãã³ãã¯ã·ã§ã³ã¡ã¿ãã¼ã¿ã ãµãã¼ããã¦ãããã¨ãå¿
é æ¡ä»¶ã«ãªãã¾ãã"
+
+#: index.docbook:599
+msgid "hibernate.jdbc.use_streams_for_binary"
+msgstr "hibernate.jdbc.use_streams_for_binary"
+
+#: index.docbook:601
+msgid "Use streams when writing/reading <literal>binary</literal> or <literal>serializable</literal> types to/from JDBC (system-level property)."
+msgstr "JDBCã¸/ãã <literal>binary</literal> ã <literal>serializable</literal> ã®æ¸ãè¾¼ã¿/èªã¿è¾¼ã¿ã¹ããªã¼ã ã使ãã¾ã(ã·ã¹ãã ã¬ãã«ã®ããããã£)ã"
+
+#: index.docbook:613
+msgid "hibernate.jdbc.use_get_generated_keys"
+msgstr "hibernate.jdbc.use_get_generated_keys"
+
+#: index.docbook:615
+msgid "Enable use of JDBC3 <literal>PreparedStatement.getGeneratedKeys()</literal> to retrieve natively generated keys after insert. Requires JDBC3+ driver and JRE1.4+, set to false if your driver has problems with the Hibernate identifier generators. By default, tries to determine the driver capabilities using connection metadata."
+msgstr "æ¿å
¥ã®å¾ã«èªåçæããã主ãã¼ãåå¾ããããã® JDBC3 <literal>PreparedStatement.getGeneratedKeys()</literal> ã®ä½¿ç¨ãæå¹ã«ãã¾ãã ããã¯JDBC3+ãã©ã¤ãã¨JRE1.4+ãå¿
è¦ã¨ãã ããHibernateã®èå¥åã¸ã§ãã¬ã¼ã¿ã«åé¡ãçºçãããããªãfalseã«è¨å®ãã¦ãã ããã ããã©ã«ãã§ã¯ã³ãã¯ã·ã§ã³ã¡ã¿ãã¼ã¿ã使ããã©ã¤ãã®è½åã決å®ãã¾ãã"
+
+#: index.docbook:621, index.docbook:751, index.docbook:763, index.docbook:777, index.docbook:815
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true|false</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:629
+msgid "hibernate.connection.provider_class"
+msgstr "hibernate.connection.provider_class"
+
+#: index.docbook:631
+msgid "The classname of a custom <literal>ConnectionProvider</literal> which provides JDBC connections to Hibernate."
+msgstr "JDBCã³ãã¯ã·ã§ã³ãHibernateã«æä¾ããç¬èªã® <literal>ConnectionProvider</literal> ã® ååãæå®ãã¾ãã"
+
+#: index.docbook:634
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.ConnectionProvider</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>classname.of.ConnectionProvider</literal>"
+
+#: index.docbook:642
+msgid "hibernate.connection.isolation"
+msgstr "hibernate.connection.isolation"
+
+#: index.docbook:644
+msgid "Set the JDBC transaction isolation level. Check <literal>java.sql.Connection</literal> for meaningful values but note that most databases do not support all isolation levels."
+msgstr "JDBCãã©ã³ã¶ã¯ã·ã§ã³åé¢ã¬ãã«ãè¨å®ãã¾ãã 妥å½ãªå¤ã調ã¹ãããã«ã¯ <literal>java.sql.Connection</literal> ããã§ãã¯ãã¦ãã ããã ããã使ç¨ãããã¼ã¿ãã¼ã¹ãããã¹ã¦ã®åé¢ã¬ãã«ããµãã¼ããã¦ããã¨ã¯éãã¾ããã"
+
+#: index.docbook:648
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>1, 2, 4, 8</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>1, 2, 4, 8</literal>"
+
+#: index.docbook:656
+msgid "hibernate.connection.autocommit"
+msgstr "hibernate.connection.autocommit"
+
+#: index.docbook:658
+msgid "Enables autocommit for JDBC pooled connections (not recommended)."
+msgstr "ãã¼ã«ããã¦ããJDBCã³ãã¯ã·ã§ã³ã®èªåã³ããããæå¹ã«ããï¼éæ¨å¥¨ï¼ã"
+
+#: index.docbook:668
+msgid "hibernate.connection.release_mode"
+msgstr "hibernate.connection.release_mode"
+
+#: index.docbook:670
+msgid "Specify when Hibernate should release JDBC connections. By default, a JDBC connection is held until the session is explicitly closed or disconnected. For an application server JTA datasource, you should use <literal>after_statement</literal> to aggressively release connections after every JDBC call. For a non-JTA connection, it often makes sense to release the connection at the end of each transaction, by using <literal>after_transaction</literal>. <literal>auto</literal> will choose <literal>after_statement</literal> for the JTA and CMT transaction strategies and <literal>after_transaction</literal> for the JDBC transaction strategy."
+msgstr "HibernateãJDBCã³ãã¯ã·ã§ã³ããªãªã¼ã¹ããããæå®ãã¾ããããã©ã«ãã§ã¯ ã»ãã·ã§ã³ãæ示çã«ã¯ãã¼ãºã¾ãã¯åæããã¦ãã³ãã¯ã·ã§ã³ã¯ä¿æãã¾ãã ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã®JTAãã¼ã¿ã½ã¼ã¹ã®å ´åã ãã¹ã¦ã®JDBCã³ã¼ã«ã®å¾ãå¼·å¶çã«ã³ãã¯ã·ã§ã³ããªãªã¼ã¹ããããã« <literal>after_statement</literal> ã 使ã£ã¦ãã ããã éJTAã³ãã¯ã·ã§ã³ã®å ´åãåãã©ã³ã¶ã¯ã·ã§ã³ãçµäºããã¨ãã« <literal>after_transaction</literal> ã使ããã³ãã¯ã·ã§ã³ããªãªã¼ã¹ãã¦ãã ããã <literal>auto</literal> ã«ããã¨ã JTAãCMTãã©ã³ã¶ã¯ã·ã§ã³ã®å ´åã <literal>after_statement</literal> ã§ã¯ãã¼ãºãã JDBCãã©ã³ã¶ã¯ã·ã§ã³ã®å ´åã <literal>after_transaction</literal> ã§ã¯ãã¼ãºãã¾ãã"
+
+#: index.docbook:681
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>auto</literal> (default) | <literal>on_close</literal> | <literal>after_transaction</literal> | <literal>after_statement</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>auto</literal> (default) | <literal>on_close</literal> | <literal>after_transaction</literal> | <literal>after_statement</literal>"
+
+#: index.docbook:686
+msgid "Note that this setting only affects <literal>Session</literal>s returned from <literal>SessionFactory.openSession</literal>. For <literal>Session</literal>s obtained through <literal>SessionFactory.getCurrentSession</literal>, the <literal>CurrentSessionContext</literal> implementation configured for use controls the connection release mode for those <literal>Session</literal>s. See"
+msgstr "注æãã¦ãã ããããã®è¨å®ã¯ <literal>SessionFactory.openSession</literal> ãã åå¾ãã <literal>Session</literal> ã ãã«å¹æãããã¾ãã <literal>SessionFactory.getCurrentSession</literal> ãéãã¦åå¾ãã <literal>Session</literal> ã§ã¯ã<literal>CurrentSessionContext</literal> ã®å®è£
ã«ãã£ã¦ãã³ãã¯ã·ã§ã³ã®ãªãªã¼ã¹ã¢ã¼ããè¨å®ãã¾ãã <xref linkend=\"architecture-current-session\"/> ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:698
+msgid "hibernate.connection.<emphasis><propertyName></emphasis>"
+msgstr "hibernate.connection.<emphasis><propertyName></emphasis>"
+
+#: index.docbook:700
+msgid "Pass the JDBC property <literal>propertyName</literal> to <literal>DriverManager.getConnection()</literal>."
+msgstr "JDBCã® <literal>propertyName</literal> ããããã£ãã <literal>DriverManager.getConnection()</literal> ã«æ¸¡ãã¾ãã"
+
+#: index.docbook:707
+msgid "hibernate.jndi.<emphasis><propertyName></emphasis>"
+msgstr "hibernate.jndi.<emphasis><propertyName></emphasis>"
+
+#: index.docbook:709
+msgid "Pass the property <literal>propertyName</literal> to the JNDI <literal>InitialContextFactory</literal>."
+msgstr "<literal>propertyName</literal> ããããã£ãã JNDI <literal>InitialContextFactory</literal> ã«æ¸¡ãã¾ãã"
+
+#: index.docbook:719
+msgid "Hibernate Cache Properties"
+msgstr "Hibernate ãã£ãã·ã¥ããããã£"
+
+#: index.docbook:732
+msgid "hibernate.cache.provider_class"
+msgstr "hibernate.cache.provider_class"
+
+#: index.docbook:734
+msgid "The classname of a custom <literal>CacheProvider</literal>."
+msgstr "ã«ã¹ã¿ã <literal>CacheProvider</literal> ã®ã¯ã©ã¹åã§ãã"
+
+#: index.docbook:736
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.CacheProvider</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>classname.of.CacheProvider</literal>"
+
+#: index.docbook:744
+msgid "hibernate.cache.use_minimal_puts"
+msgstr "hibernate.cache.use_minimal_puts"
+
+#: index.docbook:746
+msgid "Optimize second-level cache operation to minimize writes, at the cost of more frequent reads. This setting is most useful for clustered caches and, in Hibernate3, is enabled by default for clustered cache implementations."
+msgstr "æ¸ãè¾¼ã¿ãæå°éã«ããããã«ãäºæ¬¡ãã£ãã·ã¥ã®æä½ãæé©åãã¾ãã ãã®ä»£ããã«ãèªã¿è¾¼ã¿ãããé »ç¹ã«çºçããããã«ãªãã¾ãã ãã®ã»ããã£ã³ã°ã¯ã¯ã©ã¹ã¿ãã£ãã·ã¥ã§å½¹ã«ç«ã¡ã¾ãã Hibernate3ã§ã¯ã¯ã©ã¹ã¿ãã£ãã·ã¥å®è£
ç¨ã«ããã©ã«ãã§ã¯æå¹ã«ãªã£ã¦ãã¾ãã"
+
+#: index.docbook:759
+msgid "hibernate.cache.use_query_cache"
+msgstr "hibernate.cache.use_query_cache"
+
+#: index.docbook:761
+msgid "Enable the query cache, individual queries still have to be set cachable."
+msgstr "ç¹å®ã®ã¯ã¨ãªããã£ãã·ã¥å¯è½ãªå ´åã«ãã¯ã¨ãªãã£ãã·ã¥ãæå¹ã«ãã¾ãã"
+
+#: index.docbook:771
+msgid "hibernate.cache.use_second_level_cache"
+msgstr "hibernate.cache.use_second_level_cache"
+
+#: index.docbook:773
+msgid "May be used to completely disable the second level cache, which is enabled by default for classes which specify a <literal><cache></literal> mapping."
+msgstr "äºæ¬¡ãã£ãã·ã¥ãå®å
¨ã«ç¡å¹ã«ããå ´åã«ä½¿ãã¾ãã ããã©ã«ãã§ã¯æå¹ã§ãã¯ã©ã¹ã® <literal><cache></literal> ãããã³ã° ã§å¶å¾¡ãã¾ãã"
+
+#: index.docbook:785
+msgid "hibernate.cache.query_cache_factory"
+msgstr "hibernate.cache.query_cache_factory"
+
+#: index.docbook:787
+msgid "The classname of a custom <literal>QueryCache</literal> interface, defaults to the built-in <literal>StandardQueryCache</literal>."
+msgstr "ã«ã¹ã¿ã <literal>QueryCache</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¯ã©ã¹åã æå®ãã¾ããããã©ã«ãã§ã¯ <literal>StandardQueryCache</literal> ã«ãªãã¾ãã"
+
+#: index.docbook:790
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.QueryCache</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>classname.of.QueryCache</literal>"
+
+#: index.docbook:798
+msgid "hibernate.cache.region_prefix"
+msgstr "hibernate.cache.region_prefix"
+
+#: index.docbook:800
+msgid "A prefix to use for second-level cache region names."
+msgstr "äºæ¬¡ãã£ãã·ã¥ã®é ååã®æ¥é è¾ã§ãã"
+
+#: index.docbook:802
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>prefix</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>prefix</literal>"
+
+#: index.docbook:810
+msgid "hibernate.cache.use_structured_entries"
+msgstr "hibernate.cache.use_structured_entries"
+
+#: index.docbook:812
+msgid "Forces Hibernate to store data in the second-level cache in a more human-friendly format."
+msgstr "äºæ¬¡ãã£ãã·ã¥ã«æ ¼ç´ãããã¼ã¿ãã人ãç解ãããããã©ã¼ãããã«ãã¾ãã"
+
+#: index.docbook:826
+msgid "Hibernate Transaction Properties"
+msgstr "Hibernate ãã©ã³ã¶ã¯ã·ã§ã³ããããã£"
+
+#: index.docbook:839
+msgid "hibernate.transaction.factory_class"
+msgstr "hibernate.transaction.factory_class"
+
+#: index.docbook:841
+msgid "The classname of a <literal>TransactionFactory</literal> to use with Hibernate <literal>Transaction</literal> API (defaults to <literal>JDBCTransactionFactory</literal>)."
+msgstr "Hibernate <literal>Transaction</literal> APIã¨ä¸ç·ã«ä½¿ããã <literal>TransactionFactory</literal> ã®ã¯ã©ã¹åã§ãã ï¼ããã©ã«ãã§ã¯ <literal>JDBCTransactionFactory</literal> ã§ãï¼ã"
+
+#: index.docbook:845
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionFactory</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>classname.of.TransactionFactory</literal>"
+
+#: index.docbook:853
+msgid "jta.UserTransaction"
+msgstr "jta.UserTransaction"
+
+#: index.docbook:855
+msgid "A JNDI name used by <literal>JTATransactionFactory</literal> to obtain the JTA <literal>UserTransaction</literal> from the application server."
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãããJTA <literal>UserTransaction</literal> ãåå¾ããããã« <literal>JTATransactionFactory</literal> ã«ä½¿ãããJNDIåã§ãã"
+
+#: index.docbook:867
+msgid "hibernate.transaction.manager_lookup_class"
+msgstr "hibernate.transaction.manager_lookup_class"
+
+#: index.docbook:869
+msgid "The classname of a <literal>TransactionManagerLookup</literal> - required when JVM-level caching is enabled or when using hilo generator in a JTA environment."
+msgstr "<literal>TransactionManagerLookup</literal> ã®ã¯ã©ã¹åã§ãã JTAç°å¢ã«ããã¦ãJVMã¬ãã«ã®ãã£ãã·ã¥ãæå¹ã«ããããã«å¿
è¦ã§ãã"
+
+#: index.docbook:873
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionManagerLookup</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>classname.of.TransactionManagerLookup</literal>"
+
+#: index.docbook:881
+msgid "hibernate.transaction.flush_before_completion"
+msgstr "hibernate.transaction.flush_before_completion"
+
+#: index.docbook:883
+msgid "If enabled, the session will be automatically flushed during the before completion phase of the transaction. Built-in and automatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr "æå¹ã®å ´åããã©ã³ã¶ã¯ã·ã§ã³ã®completionãã§ã¼ãºã®åã«èªåçã« ã»ãã·ã§ã³ããã©ãã·ã¥ãã¾ããå
èã®èªåã»ãã·ã§ã³ã³ã³ããã¹ã管çã«é©ãã¦ãã¾ãã <xref linkend=\"architecture-current-session\"/>ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:896
+msgid "hibernate.transaction.auto_close_session"
+msgstr "hibernate.transaction.auto_close_session"
+
+#: index.docbook:898
+msgid "If enabled, the session will be automatically closed during the after completion phase of the transaction. Built-in and utomatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr "æå¹ã®å ´åããã©ã³ã¶ã¯ã·ã§ã³ã®completionãã§ã¼ãºã®å¾ã« ã»ãã·ã§ã³ãèªåçã«ã¯ãã¼ãºãã¾ããå
èã®èªåã»ãã·ã§ã³ã³ã³ããã¹ã管çã«é©ãã¦ãã¾ãã <xref linkend=\"architecture-current-session\"/>ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:914
+msgid "Miscellaneous Properties"
+msgstr "ãã®ä»ã®ããããã£"
+
+#: index.docbook:927
+msgid "hibernate.current_session_context_class"
+msgstr "hibernate.current_session_context_class"
+
+#: index.docbook:929
+msgid "Supply a (custom) strategy for the scoping of the \"current\" <literal>Session</literal>. See <xref linkend=\"architecture-current-session\"/> for more information about the built-in strategies."
+msgstr "ãç¾å¨ã®ã<literal>Session</literal> ã®ããã®ï¼ã«ã¹ã¿ã ï¼æ¦ç¥ãæä¾ãã¾ãã ãã«ãã¤ã³ã¹ãã©ãã¸ã¼ã«é¢ãããã®ä»ã®æ
å ±ã«ã¤ãã¦ã¯ <xref linkend=\"architecture-current-session\"/>ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:934
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jta</literal> | <literal>thread</literal> | <literal>managed</literal> | <literal>custom.Class</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>jta</literal> | <literal>thread</literal> | <literal>managed</literal> | <literal>custom.Class</literal>"
+
+#: index.docbook:943
+msgid "hibernate.query.factory_class"
+msgstr "hibernate.query.factory_class"
+
+#: index.docbook:945
+msgid "Chooses the HQL parser implementation."
+msgstr "HQLãã¼ãµã¼ã®å®è£
ãé¸æãã¾ãã"
+
+#: index.docbook:947
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>"
+
+#: index.docbook:956
+msgid "hibernate.query.substitutions"
+msgstr "hibernate.query.substitutions"
+
+#: index.docbook:958
+msgid "Mapping from tokens in Hibernate queries to SQL tokens (tokens might be function or literal names, for example)."
+msgstr "HQLã¨SQLã®ãã¼ã¯ã³ããããã³ã°ãã¾ãã ï¼ä¾ãã°ããã¼ã¯ã³ã¯é¢æ°ããªãã©ã«åã§ãï¼ã"
+
+#: index.docbook:961
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>"
+
+#: index.docbook:969
+msgid "hibernate.hbm2ddl.auto"
+msgstr "hibernate.hbm2ddl.auto"
+
+#: index.docbook:971
+msgid "Automatically validate or export schema DDL to the database when the <literal>SessionFactory</literal> is created. With <literal>create-drop</literal>, the database schema will be dropped when the <literal>SessionFactory</literal> is closed explicitly."
+msgstr "<literal>SessionFactory</literal> ãçæããã¨ãã«ã èªåçã«ã¹ãã¼ãDDLãDBã«åºåãã¾ãã <literal>create-drop</literal> ã®å ´åã <literal>SessionFactory</literal> ã ã¯ãã¼ãºããã¨ãã«ããã¼ã¿ãã¼ã¹ã¹ãã¼ãããããããã¾ãã"
+
+#: index.docbook:977
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>validate</literal> | <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+msgstr "<emphasis role=\"strong\">ä¾ï¼</emphasis> <literal>validate</literal> | <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+
+#: index.docbook:986
+msgid "hibernate.cglib.use_reflection_optimizer"
+msgstr "hibernate.cglib.use_reflection_optimizer"
+
+#: index.docbook:988
+msgid "Enables use of CGLIB instead of runtime reflection (System-level property). Reflection can sometimes be useful when troubleshooting, note that Hibernate always requires CGLIB even if you turn off the optimizer. You can not set this property in <literal>hibernate.cfg.xml</literal>."
+msgstr "å®è¡æãªãã¬ã¯ã·ã§ã³ã®ä»£ããã®CGLIBã®ä½¿ç¨ãæå¹ã«ãã¾ã ï¼ã·ã¹ãã ã¬ãã«ã®ããããã£ï¼ ãªãã¬ã¯ã·ã§ã³ã¯ãã©ãã«ã·ã¥ã¼ãã£ã³ã°ã®ã¨ãã«å½¹ç«ã¤ãã¨ãããã¾ãã ãªããã£ãã¤ã¶ããªãã«ãã¦ããã¨ãã§ããã Hibernateã«ã¯å¿
ãCGLIBãå¿
è¦ãªãã¨ã«æ³¨æãã¦ãã ããã ãã®ããããã£ã¯ <literal>hibernate.cfg.xml</literal> ã§è¨å®ã§ãã¾ããã"
+
+#: index.docbook:1004
+msgid "SQL Dialects"
+msgstr "SQL æ¹è¨ï¼Dialectï¼"
+
+#: index.docbook:1006
+msgid "You should always set the <literal>hibernate.dialect</literal> property to the correct <literal>org.hibernate.dialect.Dialect</literal> subclass for your database. If you specify a dialect, Hibernate will use sensible defaults for some of the other properties listed above, saving you the effort of specifying them manually."
+msgstr "<literal>hibernate.dialect</literal> ããããã£ã«ã¯ã 使ç¨ãããã¼ã¿ãã¼ã¹ã®æ£ãã <literal>org.hibernate.dialect.Dialect</literal> ã®ãµãã¯ã©ã¹ãã å¿
ãæå®ãã¹ãã§ãã ãããæ¹è¨ãæå®ããã°ãHibernateã¯ä¸è¿°ããããããã£ã®ããã¤ãã«ã¤ãã¦ã ããé©åãªããã©ã«ãå¤ã使ãã¾ãã ããããã°ãããããæä½æ¥ã§è¨å®ããæéãçãã¾ãã"
+
+#: index.docbook:1014
+msgid "Hibernate SQL Dialects (<literal>hibernate.dialect</literal>)"
+msgstr "Hibernate SQL Dialects (<literal>hibernate.dialect</literal>)"
+
+#: index.docbook:1022
+msgid "RDBMS"
+msgstr "RDBMS"
+
+#: index.docbook:1023
+msgid "Dialect"
+msgstr "Dialect"
+
+#: index.docbook:1028
+msgid "<entry>DB2</entry>"
+msgstr "<entry>DB2</entry>"
+
+#: index.docbook:1028
+msgid "org.hibernate.dialect.DB2Dialect"
+msgstr "org.hibernate.dialect.DB2Dialect"
+
+#: index.docbook:1031
+msgid "DB2 AS/400"
+msgstr "DB2 AS/400"
+
+#: index.docbook:1031
+msgid "org.hibernate.dialect.DB2400Dialect"
+msgstr "org.hibernate.dialect.DB2400Dialect"
+
+#: index.docbook:1034
+msgid "DB2 OS390"
+msgstr "DB2 OS390"
+
+#: index.docbook:1034
+msgid "org.hibernate.dialect.DB2390Dialect"
+msgstr "org.hibernate.dialect.DB2390Dialect"
+
+#: index.docbook:1037
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: index.docbook:1037
+msgid "org.hibernate.dialect.PostgreSQLDialect"
+msgstr "org.hibernate.dialect.PostgreSQLDialect"
+
+#: index.docbook:1040
+msgid "MySQL"
+msgstr "MySQL"
+
+#: index.docbook:1040
+msgid "org.hibernate.dialect.MySQLDialect"
+msgstr "org.hibernate.dialect.MySQLDialect"
+
+#: index.docbook:1043
+msgid "MySQL with InnoDB"
+msgstr "MySQL with InnoDB"
+
+#: index.docbook:1043
+msgid "org.hibernate.dialect.MySQLInnoDBDialect"
+msgstr "org.hibernate.dialect.MySQLInnoDBDialect"
+
+#: index.docbook:1046
+msgid "MySQL with MyISAM"
+msgstr "MySQL with MyISAM"
+
+#: index.docbook:1046
+msgid "org.hibernate.dialect.MySQLMyISAMDialect"
+msgstr "org.hibernate.dialect.MySQLMyISAMDialect"
+
+#: index.docbook:1049
+msgid "Oracle (any version)"
+msgstr "Oracle (any version)"
+
+#: index.docbook:1049
+msgid "org.hibernate.dialect.OracleDialect"
+msgstr "org.hibernate.dialect.OracleDialect"
+
+#: index.docbook:1052
+msgid "Oracle 9i/10g"
+msgstr "Oracle 9i/10g"
+
+#: index.docbook:1052
+msgid "org.hibernate.dialect.Oracle9Dialect"
+msgstr "org.hibernate.dialect.Oracle9Dialect"
+
+#: index.docbook:1055
+msgid "Sybase"
+msgstr "Sybase"
+
+#: index.docbook:1055
+msgid "org.hibernate.dialect.SybaseDialect"
+msgstr "org.hibernate.dialect.SybaseDialect"
+
+#: index.docbook:1058
+msgid "Sybase Anywhere"
+msgstr "Sybase Anywhere"
+
+#: index.docbook:1058
+msgid "org.hibernate.dialect.SybaseAnywhereDialect"
+msgstr "org.hibernate.dialect.SybaseAnywhereDialect"
+
+#: index.docbook:1061
+msgid "Microsoft SQL Server"
+msgstr "Microsoft SQL Server"
+
+#: index.docbook:1061
+msgid "org.hibernate.dialect.SQLServerDialect"
+msgstr "org.hibernate.dialect.SQLServerDialect"
+
+#: index.docbook:1064
+msgid "SAP DB"
+msgstr "SAP DB"
+
+#: index.docbook:1064
+msgid "org.hibernate.dialect.SAPDBDialect"
+msgstr "org.hibernate.dialect.SAPDBDialect"
+
+#: index.docbook:1067
+msgid "Informix"
+msgstr "Informix"
+
+#: index.docbook:1067
+msgid "org.hibernate.dialect.InformixDialect"
+msgstr "org.hibernate.dialect.InformixDialect"
+
+#: index.docbook:1070
+msgid "HypersonicSQL"
+msgstr "HypersonicSQL"
+
+#: index.docbook:1070
+msgid "org.hibernate.dialect.HSQLDialect"
+msgstr "org.hibernate.dialect.HSQLDialect"
+
+#: index.docbook:1073
+msgid "Ingres"
+msgstr "Ingres"
+
+#: index.docbook:1073
+msgid "org.hibernate.dialect.IngresDialect"
+msgstr "org.hibernate.dialect.IngresDialect"
+
+#: index.docbook:1076
+msgid "Progress"
+msgstr "Progress"
+
+#: index.docbook:1076
+msgid "org.hibernate.dialect.ProgressDialect"
+msgstr "org.hibernate.dialect.ProgressDialect"
+
+#: index.docbook:1079
+msgid "Mckoi SQL"
+msgstr "Mckoi SQL"
+
+#: index.docbook:1079
+msgid "org.hibernate.dialect.MckoiDialect"
+msgstr "org.hibernate.dialect.MckoiDialect"
+
+#: index.docbook:1082
+msgid "Interbase"
+msgstr "Interbase"
+
+#: index.docbook:1082
+msgid "org.hibernate.dialect.InterbaseDialect"
+msgstr "org.hibernate.dialect.InterbaseDialect"
+
+#: index.docbook:1085
+msgid "Pointbase"
+msgstr "Pointbase"
+
+#: index.docbook:1085
+msgid "org.hibernate.dialect.PointbaseDialect"
+msgstr "org.hibernate.dialect.PointbaseDialect"
+
+#: index.docbook:1088
+msgid "FrontBase"
+msgstr "FrontBase"
+
+#: index.docbook:1088
+msgid "org.hibernate.dialect.FrontbaseDialect"
+msgstr "org.hibernate.dialect.FrontbaseDialect"
+
+#: index.docbook:1091
+msgid "Firebird"
+msgstr "Firebird"
+
+#: index.docbook:1091
+msgid "org.hibernate.dialect.FirebirdDialect"
+msgstr "org.hibernate.dialect.FirebirdDialect"
+
+#: index.docbook:1100
+msgid "Outer Join Fetching"
+msgstr "å¤é¨çµåãã§ãã"
+
+#: index.docbook:1102
+msgid "If your database supports ANSI, Oracle or Sybase style outer joins, <emphasis>outer join fetching</emphasis> will often increase performance by limiting the number of round trips to and from the database (at the cost of possibly more work performed by the database itself). Outer join fetching allows a whole graph of objects connected by many-to-one, one-to-many, many-to-many and one-to-one associations to be retrieved in a single SQL <literal>SELECT</literal>."
+msgstr "ããDBãANSIããOracleãSybaseã¹ã¿ã¤ã«ã®å¤é¨çµåããµãã¼ããã¦ããå ´åã <emphasis>outer join fetching</emphasis> ã¯ãDBã®SQLçºè¡åæ°ãç¯ç´ã ããã©ã¼ãã³ã¹ãè¯ããã¾ããï¼DBå
ã§ããå¤ãã®å¦çã³ã¹ããçºçãã¾ãï¼ å¤é¨çµåãã§ããã¯ãå¤å¯¾ä¸ãä¸å¯¾å¤ãå¤å¯¾å¤ãä¸å¯¾ä¸ã®ãªãã¸ã§ã¯ãé¢é£ã§ ã°ã«ã¼ããªãã¸ã§ã¯ãã1ã¤ã®SQL㧠<literal>SELECT</literal> ãã¾ãã"
+
+#: index.docbook:1111
+msgid "Outer join fetching may be disabled <emphasis>globally</emphasis> by setting the property <literal>hibernate.max_fetch_depth</literal> to <literal>0</literal>. A setting of <literal>1</literal> or higher enables outer join fetching for one-to-one and many-to-one associations which have been mapped with <literal>fetch=\"join\"</literal>."
+msgstr "<literal>hibernate.max_fetch_depth</literal> ããããã£ã®å¤ã <literal>0</literal> ã«ãã㨠Outer join fetchingã <emphasis>ãã¹ã¦</emphasis> ç¡å¹ã«ãããã¨ã«ãªãã¾ãã <literal>1</literal> ããã以ä¸ã®å¤ãè¨å®ããã¨ãå¤é¨çµåãã§ãããæå¹ã«ãªãã ä¸å¯¾ä¸ã¨å¤å¯¾ä¸é¢é£ã <literal>fetch=\"join\"</literal> ã¨ãã¦ãããã³ã°ããã¾ãã"
+
+#: index.docbook:1119
+msgid "See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "See <xref linkend=\"performance-fetching\"/> for more information."
+
+#: index.docbook:1126
+msgid "Binary Streams"
+msgstr "ãã¤ããªã¹ããªã¼ã "
+
+#: index.docbook:1128
+msgid "Oracle limits the size of <literal>byte</literal> arrays that may be passed to/from its JDBC driver. If you wish to use large instances of <literal>binary</literal> or <literal>serializable</literal> type, you should enable <literal>hibernate.jdbc.use_streams_for_binary</literal>. <emphasis>This is a system-level setting only.</emphasis>"
+msgstr "Oracleã¯JDBCãã©ã¤ãã¨ã®éã§ããã¨ãããã <literal>byte</literal> é
åã®ãµã¤ãºãå¶éãã¾ãã <literal>binary</literal> ã <literal>serializable</literal> åã®å¤§ããªã¤ã³ã¹ã¿ã³ã¹ã使ããããã°ã <literal>hibernate.jdbc.use_streams_for_binary</literal> ãæå¹ã«ãã¦ãã ããã ãã ã <emphasis>ããã¯ã·ã¹ãã ã¬ãã«ã®è¨å®ã ãã§ã</emphasis> ã"
+
+#: index.docbook:1139
+msgid "Second-level and query cache"
+msgstr "2次ãã£ãã·ã¥ã¨ã¯ã¨ãªã¼ãã£ãã·ã¥"
+
+#: index.docbook:1141
+msgid "The properties prefixed by <literal>hibernate.cache</literal> allow you to use a process or cluster scoped second-level cache system with Hibernate. See the <xref linkend=\"performance-cache\"/> for more details."
+msgstr "<literal>hibernate.cache</literal> ããããã£æ¥é è¾ã¯ Hibernateã§ããã»ã¹ãã¯ã©ã¹ã¿äºæ¬¡ãã£ãã·ã¥ã使ãã¨ãã¨ã許å¯ãã¾ãã <xref linkend=\"performance-cache\"/>ã«ããå¤ãã®è©³ç´°ãããã¾ãã"
+
+#: index.docbook:1151
+msgid "Query Language Substitution"
+msgstr "ã¯ã¨ãªã¼è¨èªã®ç½®ãæã"
+
+#: index.docbook:1153
+msgid "You may define new Hibernate query tokens using <literal>hibernate.query.substitutions</literal>. For example:"
+msgstr "<literal>hibernate.query.substitutions</literal> ã使ããã¨ã§ã æ°ããHibernateã¯ã¨ãªãã¼ã¯ã³ãå®ç¾©ã§ãã¾ãã ä¾ï¼"
+
+#: index.docbook:1158
+msgid "hibernate.query.substitutions true=1, false=0"
+msgstr "hibernate.query.substitutions true=1, false=0"
+
+#: index.docbook:1160
+msgid "would cause the tokens <literal>true</literal> and <literal>false</literal> to be translated to integer literals in the generated SQL."
+msgstr "ããã¯ãã¼ã¯ã³ <literal>true</literal> 㨠<literal>false</literal> ãã çæãããSQLã«ããã¦æ´æ°ãªãã©ã«ã«ç¿»è¨³ãã¾ãã"
+
+#: index.docbook:1165
+msgid "hibernate.query.substitutions toLowercase=LOWER"
+msgstr "hibernate.query.substitutions toLowercase=LOWER"
+
+#: index.docbook:1167
+msgid "would allow you to rename the SQL <literal>LOWER</literal> function."
+msgstr "ããã¯SQLã® <literal>LOWER</literal> é¢æ°ã®ååã®ä»ãæ¿ããå¯è½ã«ãã¾ãã"
+
+#: index.docbook:1174
+msgid "Hibernate statistics"
+msgstr "Hibernate çµ±è¨"
+
+#: index.docbook:1176
+msgid "If you enable <literal>hibernate.generate_statistics</literal>, Hibernate will expose a number of metrics that are useful when tuning a running system via <literal>SessionFactory.getStatistics()</literal>. Hibernate can even be configured to expose these statistics via JMX. Read the Javadoc of the interfaces in <literal>org.hibernate.stats</literal> for more information."
+msgstr "<literal>hibernate.generate_statistics</literal> ãæå¹ã«ããå ´åã åä½ãã¦ããã·ã¹ãã ããã¥ã¼ãã³ã°ããã¨ãã«ã<literal>SessionFactory.getStatistics()</literal> ãçµç±ãã¦ãHibernateã¯ä¾¿å©ãªçµ±è¨æ
å ±ãåºåãã¾ãã JMXãçµç±ãã¦çµ±è¨æ
å ±ãåºåãããã¨ãå¯è½ã§ãã Javadocã® <literal>org.hibernate.stats</literal> ããã±ã¼ã¸å
ã® ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«ã¯ããå¤ãã®æ
å ±ãããã¾ãã"
+
+#: index.docbook:1188
+msgid "Logging"
+msgstr "ãã®ã³ã°"
+
+#: index.docbook:1190
+msgid "Hibernate logs various events using Apache commons-logging."
+msgstr "Hibernateã¯Apache commons-logginã使ã£ã¦ããã¾ãã¾ãªã¤ãã³ãããã°ã¨ã㦠åºåãã¾ãã"
+
+#: index.docbook:1194
+msgid "The commons-logging service will direct output to either Apache Log4j (if you include <literal>log4j.jar</literal> in your classpath) or JDK1.4 logging (if running under JDK1.4 or above). You may download Log4j from <literal>http://jakarta.apache.org</literal>. To use Log4j you will need to place a <literal>log4j.properties</literal> file in your classpath, an example properties file is distributed with Hibernate in the <literal>src/</literal> directory."
+msgstr "commons-loggingãµã¼ãã¹ã¯ï¼ã¯ã©ã¹ãã¹ã« <literal>log4j.jar</literal> ãå«ããã°ï¼Apache Log4jã«ã ã¾ãï¼JDK1.4ããã以ä¸ã§å®è¡ãããã°ï¼JDK1.4 loggingã«ç´æ¥åºåãã¾ãã Log4j㯠<literal>http://jakarta.apache.org</literal> ãããã¦ã³ãã¼ãã§ãã¾ãã Log4jã使ãããã«ã¯ãã¯ã©ã¹ãã¹ã« <literal>log4j.properties</literal> ãã¡ã¤ã«ãé
ç½®ããå¿
è¦ãããã¾ãã ä¾ã®ããããã£ãã¡ã¤ã«ã¯Hibernateã¨ä¸ç·ã«é
å¸ããããã㯠<literal>src/</literal> ãã£ã¬ã¯ããªã«ããã¾ãã"
+
+#: index.docbook:1204
+msgid "We strongly recommend that you familiarize yourself with Hibernate's log messages. A lot of work has been put into making the Hibernate log as detailed as possible, without making it unreadable. It is an essential troubleshooting device. The most interesting log categories are the following:"
+msgstr "Hibernateã®ãã°ã¡ãã»ã¼ã¸ã«æ
£ãããã¨ãå¼·ããããããã¾ãã Hibernateã®ãã°ã¯èªã¿ããããã§ããéã詳細ã«ãªãããã«åªåããã¦ãã¾ãã ããã¯å¿
é ã®ãã©ãã«ã·ã¥ã¼ãã£ã³ã°ããã¤ã¹ã§ãã 以ä¸ã«éè¦ãªãã°ã®ã«ãã´ãªã示ãã¾ãã"
+
+#: index.docbook:1213
+msgid "Hibernate Log Categories"
+msgstr "Hibernate ãã°ã«ãã´ãª"
+
+#: index.docbook:1219
+msgid "Category"
+msgstr "ã«ãã´ãª"
+
+#: index.docbook:1220
+msgid "Function"
+msgstr "<entry>æ©è½</entry>"
+
+#: index.docbook:1225
+msgid "org.hibernate.SQL"
+msgstr "org.hibernate.SQL"
+
+#: index.docbook:1226
+msgid "Log all SQL DML statements as they are executed"
+msgstr "å®è¡ãããã¹ã¦ã®SQLï¼DDLï¼ã¹ãã¼ãã¡ã³ãããã®ã³ã°ãã¾ãã"
+
+#: index.docbook:1229
+msgid "org.hibernate.type"
+msgstr "org.hibernate.type"
+
+#: index.docbook:1230
+msgid "Log all JDBC parameters"
+msgstr "ãã¹ã¦ã®JDBCãã©ã¡ã¼ã¿ããã®ã³ã°ãã¾ãã"
+
+#: index.docbook:1233
+msgid "org.hibernate.tool.hbm2ddl"
+msgstr "org.hibernate.tool.hbm2ddl"
+
+#: index.docbook:1234
+msgid "Log all SQL DDL statements as they are executed"
+msgstr "å®è¡ãããã¹ã¦ã®SQLï¼DDLï¼ã¹ãã¼ãã¡ã³ãããã®ã³ã°ãã¾ãã"
+
+#: index.docbook:1237
+msgid "org.hibernate.pretty"
+msgstr "org.hibernate.pretty"
+
+#: index.docbook:1238
+msgid "Log the state of all entities (max 20 entities) associated with the session at flush time"
+msgstr "sessionã«é¢é£ãããã¹ã¦ã®ã¨ã³ãã£ãã£ï¼æ大ï¼ï¼ï¼ã®ãã©ãã·ã¥æéããã®ã³ã°ãã¾ãã"
+
+#: index.docbook:1244
+msgid "org.hibernate.cache"
+msgstr "org.hibernate.cache"
+
+#: index.docbook:1245
+msgid "Log all second-level cache activity"
+msgstr "ãã¹ã¦ã®ï¼æ¬¡ãã£ãã·ã¥ã®åä½ããã®ã³ã°ãã¾ãã"
+
+#: index.docbook:1248
+msgid "org.hibernate.transaction"
+msgstr "org.hibernate.transaction"
+
+#: index.docbook:1249
+msgid "Log transaction related activity"
+msgstr "ãã©ã³ã¶ã¯ã·ã§ã³ã«é¢é£ããåä½ããã®ã³ã°ãã¾ãã"
+
+#: index.docbook:1252
+msgid "org.hibernate.jdbc"
+msgstr "org.hibernate.jdbc"
+
+#: index.docbook:1253
+msgid "Log all JDBC resource acquisition"
+msgstr "JDBCãªã½ã¼ã¹åå¾ããã®ã³ã°ãã¾ãã"
+
+#: index.docbook:1256
+msgid "org.hibernate.hql.ast.AST"
+msgstr "org.hibernate.hql.ast.AST"
+
+#: index.docbook:1257
+msgid "Log HQL and SQL ASTs during query parsing"
+msgstr "HQLã¨SQLã®ASTã®ã¯ã¨ãªã¼ãã¼ã¹ããã®ã³ã°ãã¾ãã"
+
+#: index.docbook:1262
+msgid "org.hibernate.secure"
+msgstr "org.hibernate.secure"
+
+#: index.docbook:1263
+msgid "Log all JAAS authorization requests"
+msgstr "ãã¹ã¦ã®JAASåæããã®ã³ã°ãã¾ãã"
+
+#: index.docbook:1266
+msgid "org.hibernate"
+msgstr "org.hibernate"
+
+#: index.docbook:1267
+msgid "Log everything (a lot of information, but very useful for troubleshooting)"
+msgstr "ãã¹ã¦ããã®ã³ã°ãã¾ããï¼æ
å ±ã大éã«ãªãã¾ããããã©ãã«ã·ã¥ã¼ãã£ã³ã°ã«ã¯ä¾¿å©ã§ãï¼"
+
+#: index.docbook:1276
+msgid "When developing applications with Hibernate, you should almost always work with <literal>debug</literal> enabled for the category <literal>org.hibernate.SQL</literal>, or, alternatively, the property <literal>hibernate.show_sql</literal> enabled."
+msgstr "Hibernateã§ã¢ããªã±ã¼ã·ã§ã³ãä½æããã¨ãã¯ã<literal>org.hibernate.SQL</literal> ã«ãã´ãªã® <literal>debug</literal> ã常ã«æå¹ã«ãã¦ãããã»ããè¯ãã§ãããã 代æ¿æ¹æ³ã¨ãã¦ã<literal>hibernate.show_sql</literal> ãæå¹ã«ããæ¹æ³ãããã¾ãã"
+
+#: index.docbook:1286
+msgid "Implementing a <literal>NamingStrategy</literal>"
+msgstr "<literal>NamingStrategy</literal> ã®å®è£
"
+
+#: index.docbook:1288
+msgid "The interface <literal>org.hibernate.cfg.NamingStrategy</literal> allows you to specify a \"naming standard\" for database objects and schema elements."
+msgstr "ã¤ã³ã¿ã¼ãã§ã¤ã¹ <literal>net.sf.hibernate.cfg.NamingStrategy</literal> ã使ã㨠ãã¼ã¿ãã¼ã¹ãªãã¸ã§ã¯ãã¨ã¹ãã¼ãè¦ç´ ã®ããã®ãå½åæ¨æºããæå®ã§ãã¾ãã"
+
+#: index.docbook:1293
+msgid "You may provide rules for automatically generating database identifiers from Java identifiers or for processing \"logical\" column and table names given in the mapping file into \"physical\" table and column names. This feature helps reduce the verbosity of the mapping document, eliminating repetitive noise (<literal>TBL_</literal> prefixes, for example). The default strategy used by Hibernate is quite minimal."
+msgstr "Javaã®èå¥åãããã¼ã¿ãã¼ã¹ã®èå¥åãèªåçæããããã®ã«ã¼ã«ãã ãããã³ã°ãã¡ã¤ã«ã§ä¸ãããè«ççãªãã«ã©ã ã¨ãã¼ãã«åãã ãç©ççãªããã¼ãã«ã¨ã«ã©ã åãçæããããã®ã«ã¼ã«ãç¨æãããã¨ãã§ãã¾ãã ãã®æ©è½ã¯ç¹°ãè¿ãã®éé³ï¼ä¾ãã° <literal>TBL_</literal> ããªãã£ãã¯ã¹ï¼ãåãé¤ãã ãããã³ã°ããã¥ã¡ã³ãã®åé·ããæ¸ãããã¨ã«å½¹ç«ã¡ã¾ãã Hibernateã使ãããã©ã«ãã®æ¦ç¥ã¯ããªãæå°éã«è¿ããã®ã§ãã"
+
+#: index.docbook:1302
+msgid "You may specify a different strategy by calling <literal>Configuration.setNamingStrategy()</literal> before adding mappings:"
+msgstr "ãããã³ã°ã追å ããåã« <literal>Configuration.setNamingStrategy()</literal> ãå¼ã¶ãã¨ã§ 以ä¸ã®ããã«ç°ãªãæ¦ç¥ãæå®ãããã¨ãã§ãã¾ãï¼"
+
+#: index.docbook:1307
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)\n"
+ " .addFile(\"Item.hbm.xml\")\n"
+ " .addFile(\"Bid.hbm.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)\n"
+ " .addFile(\"Item.hbm.xml\")\n"
+ " .addFile(\"Bid.hbm.xml\")\n"
+ " .buildSessionFactory();]]>"
+
+#: index.docbook:1309
+msgid "<literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> is a built-in strategy that might be a useful starting point for some applications."
+msgstr "<literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> ã¯çµã¿è¾¼ã¿ã®æ¦ç¥ã§ãã ããã¯ããã¤ãã®ã¢ããªã±ã¼ã·ã§ã³ã«ã¨ã£ã¦æç¨ãªéå§ç¹ã¨ãªãããããã¾ããã"
+
+#: index.docbook:1317
+msgid "XML configuration file"
+msgstr "XMLè¨å®ãã¡ã¤ã«"
+
+#: index.docbook:1319
+msgid "An alternative approach to configuration is to specify a full configuration in a file named <literal>hibernate.cfg.xml</literal>. This file can be used as a replacement for the <literal>hibernate.properties</literal> file or, if both are present, to override properties."
+msgstr "ãã1ã¤ã®æ¹æ³ã¯ <literal>hibernate.cfg.xml</literal> ã¨ããååã®ãã¡ã¤ã«ã§ ååãªè¨å®ãæå®ããæ¹æ³ã§ãã ãã®ãã¡ã¤ã«ã¯ <literal>hibernate.properties</literal> ãã¡ã¤ã«ã®ä»£ããã¨ãªãã¾ãã ãã両æ¹ã®ãã¡ã¤ã«ãããã°ãããããã£ãç½®ãæãããã¾ãã"
+
+#: index.docbook:1326
+msgid "The XML configuration file is by default expected to be in the root o your <literal>CLASSPATH</literal>. Here is an example:"
+msgstr "XMLè¨å®ãã¡ã¤ã«ã¯åæè¨å®ã§ <literal>CLASSPATH</literal> ã«é
ç½®ãã¦ãã ããã ãããä¾ã§ãï¼"
+
+#: index.docbook:1331
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <!-- a SessionFactory instance listed as /jndi/name -->\n"
+ " <session-factory\n"
+ " name=\"java:hibernate/SessionFactory\">\n"
+ "\n"
+ " <!-- properties -->\n"
+ " <property name=\"connection.datasource\">java:/comp/env/jdbc/MyDB</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.MySQLDialect</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"transaction.factory_class\">\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ " </property>\n"
+ " <property name=\"jta.UserTransaction\">java:comp/UserTransaction</property>\n"
+ "\n"
+ " <!-- mapping files -->\n"
+ " <mapping resource=\"org/hibernate/auction/Item.hbm.xml\"/>\n"
+ " <mapping resource=\"org/hibernate/auction/Bid.hbm.xml\"/>\n"
+ "\n"
+ " <!-- cache settings -->\n"
+ " <class-cache class=\"org.hibernate.auction.Item\" usage=\"read-write\"/>\n"
+ " <class-cache class=\"org.hibernate.auction.Bid\" usage=\"read-only\"/>\n"
+ " <collection-cache collection=\"org.hibernate.auction.Item.bids\" usage=\"read-write\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <!-- a SessionFactory instance listed as /jndi/name -->\n"
+ " <!-- /jndi/nameã®ããã«ãªã¹ãã¢ãããããSessionFactoryã¤ã³ã¹ã¿ã³ã¹ -->\n"
+ " <session-factory\n"
+ " name=\"java:hibernate/SessionFactory\">\n"
+ "\n"
+ " <!-- properties -->\n"
+ " <property name=\"connection.datasource\">java:/comp/env/jdbc/MyDB</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.MySQLDialect</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"transaction.factory_class\">\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ " </property>\n"
+ " <property name=\"jta.UserTransaction\">java:comp/UserTransaction</property>\n"
+ "\n"
+ " <!-- mapping files -->\n"
+ " <mapping resource=\"org/hibernate/auction/Item.hbm.xml\"/>\n"
+ " <mapping resource=\"org/hibernate/auction/Bid.hbm.xml\"/>\n"
+ "\n"
+ " <!-- cache settings -->\n"
+ " <class-cache class=\"org.hibernate.auction.Item\" usage=\"read-write\"/>\n"
+ " <class-cache class=\"org.hibernate.auction.Bid\" usage=\"read-only\"/>\n"
+ " <collection-cache collection=\"org.hibernate.auction.Item.bids\" usage=\"read-write\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:1333
+msgid "As you can see, the advantage of this approach is the externalization of the mapping file names to configuration. The <literal>hibernate.cfg.xml</literal> is also more convenient once you have to tune the Hibernate cache. Note that is your choice to use either <literal>hibernate.properties</literal> or <literal>hibernate.cfg.xml</literal>, both are equivalent, except for the above mentioned benefits of using the XML syntax."
+msgstr "è¦ã¦ã®ã¨ããããã®æ¹æ³ã®åªä½æ§ã¯è¨å®ã®ããã®ãããã³ã°ãã¡ã¤ã«åãå¤åºãã«ã§ãããã¨ã§ãã Hibernateãã£ãã·ã¥ããã¥ã¼ãã³ã°ããªããã°ãªããªãã®ã§ããã°ã <literal>hibernate.cfg.xml</literal> ã¯ãã便å©ã§ãã <literal>hibernate.properties</literal> 㨠<literal>hibernate.cfg.xml</literal> ã® ã©ã¡ããã使ãããã¨ãè¦ãã¦ããã¦ãã ããã äºã¤ã¯åããã®ã§ãéãã¨ããã¨ããã°XMLæ§æã使ããã¨ã®å©ç¹ã ãã§ãã"
+
+#: index.docbook:1342
+msgid "With the XML configuration, starting Hibernate is then as simple as"
+msgstr "XMLè¨å®ã使ããã¨ã§ãHibernateã¯ä»¥ä¸ã®ããã«ã·ã³ãã«ã«ãªãã¾ãã"
+
+#: index.docbook:1346
+msgid "<![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]>"
+msgstr "<![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]>"
+
+#: index.docbook:1348
+msgid "You can pick a different XML configuration file using"
+msgstr "éãXMLè¨å®ãã¡ã¤ã«ã使ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:1352
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .configure(\"catdb.cfg.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .configure(\"catdb.cfg.xml\")\n"
+ " .buildSessionFactory();]]>"
+
+#: index.docbook:1357
+msgid "J2EE Application Server integration"
+msgstr "J2EEã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¨ã®çµ±å"
+
+#: index.docbook:1359
+msgid "Hibernate has the following integration points for J2EE infrastructure:"
+msgstr "Hibernateã¯J2EEæ§é ã¨çµ±åãããã¤ã³ãããµãã¼ããã¦ãã¾ãã"
+
+#: index.docbook:1365
+msgid "<emphasis>Container-managed datasources</emphasis>: Hibernate can use JDBC connections managed by the container and provided through JNDI. Usually, a JTA compatible <literal>TransactionManager</literal> and a <literal>ResourceManager</literal> take care of transaction management (CMT), esp. distributed transaction handling across several datasources. You may of course also demarcate transaction boundaries programmatically (BMT) or you might want to use the optional Hibernate <literal>Transaction</literal> API for this to keep your code portable."
+msgstr "<emphasis>ã³ã³ãã管çãã¼ã¿ã½ã¼ã¹</emphasis>ï¼Hibernate㯠JNDIãæä¾ããã³ã³ããã管çããJDBCã³ãã¯ã·ã§ã³ã使ç¨ã§ãã¾ãã é常ãJTAæºæ ã® <literal>TransactionManager</literal> 㨠<literal>ResourceManager</literal> ããã©ã³ã¶ã¯ã·ã§ã³ç®¡ç(CMT)ã ç¹ã«æ§ã
ãªãã¼ã¿ã½ã¼ã¹ã«ã¾ãããåæ£ãã©ã³ã¶ã¯ã·ã§ã³ãæ±ãã¾ãã å½ç¶ããã°ã©ã ã§ãã©ã³ã¶ã¯ã·ã§ã³å¢çãæå®ã§ãã¾ã(BMT)ã ãããã¯ãè¨è¿°ããã³ã¼ãã®ãã¼ã¿ããªãã£ãä¿ã¤ããã«ã ãªãã·ã§ã³ã®Hibernateã® <literal>Transaction</literal> APIã使ããããªãããããã¾ããã"
+
+#: index.docbook:1380
+msgid "<emphasis>Automatic JNDI binding</emphasis>: Hibernate can bind its <literal>SessionFactory</literal> to JNDI after startup."
+msgstr "<emphasis>èªåJNDIãã¤ã³ãã£ã³ã°</emphasis>ï¼Hibernateã¯JNDIãç«ã¡ä¸ãã£ãå¾ã« <literal>SessionFactory</literal> ãçæãã¾ãã"
+
+#: index.docbook:1389
+msgid "<emphasis>JTA Session binding:</emphasis> The Hibernate <literal>Session</literal> may be automatically bound to the scope of JTA transactions. Simply lookup the <literal>SessionFactory</literal> from JNDI and get the current <literal>Session</literal>. Let Hibernate take care of flushing and closing the <literal>Session</literal> when your JTA transaction completes. Transaction demarcation is either declarative (CMT) or programmatic (BMT/UserTransaction)."
+msgstr "<emphasis>JTAã»ãã·ã§ã³ãã¤ã³ãã£ã³ã°</emphasis> ï¼ Hibernate <literal>Session</literal> ã®ãã©ã³ã¶ã¯ã·ã§ã³å¢çã¯JTAãã©ã³ã¶ã¯ã·ã§ã³ã¨åãã«ãªãã¾ãã åç´ã« <literal>SessionFactory</literal> ãJNDIããlookupãã¦ã ç¾å¨ã® <literal>Session</literal> ãåå¾ãã¾ãã JTAãã©ã³ã¶ã¯ã·ã§ã³ãå®äºããã¨ãã«ãHibernateã <literal>Session</literal> ããã©ãã·ã¥ããã¯ãã¼ãºãã¾ãã EJBãããã¤ã¡ã³ããã£ã¹ã¯ãªãã¿ã®ä¸ã«ããã©ã³ã¶ã¯ã·ã§ã³å¢çã宣è¨ãã¾ãã"
+
+#: index.docbook:1402
+msgid "<emphasis>JMX deployment:</emphasis> If you have a JMX capable application server (e.g. JBoss AS), you can chose to deploy Hibernate as a managed MBean. This saves you the one line startup code to build your <literal>SessionFactory</literal> from a <literal>Configuration</literal>. The container will startup your <literal>HibernateService</literal>, and ideally also take care of service dependencies (Datasource has to be available before Hibernate starts, etc)."
+msgstr "<emphasis>JMXãããã¤:</emphasis> ããJMXã使ç¨å¯è½ãªã¢ããªã±ã¼ã·ã§ã³ãµã¼ãï¼ä¾ãã°JBOSSï¼ ãããå ´åãHibernateãMBeanã¨ãã¦ãããã¤ãããã¨ãé¸ã¹ã¾ãã ãã㯠<literal>Configuration</literal> ãã <literal>SessionFactory</literal> ã çæããã³ã¼ããç¡ãããã¨ãã§ãã¾ãã ã³ã³ãã㯠<literal>HibernateService</literal> ãèµ·åãã ãµã¼ãã¹ã®ä¾åãçæ³çã«ç®¡çãã¾ãï¼ãã¼ã¿ã½ã¼ã¹ã¯Hibernateããã®ä»ãèµ·åããå㫠使ç¨ã§ããããã«ããªããã°ãªãã¾ããï¼ã"
+
+#: index.docbook:1413
+msgid "Depending on your environment, you might have to set the configuration option <literal>hibernate.connection.aggressive_release</literal> to true if your application server shows \"connection containment\" exceptions."
+msgstr "ç°å¢ã«ä¾åãã¾ããããããã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã\"connection containment\"ã®ä¾å¤ãã¹ãã¼ãããªã è¨å®ã®ãªãã·ã§ã³ <literal>hibernate.connection.aggressive_release</literal> ãtrueã«ãã¦ãã ããã"
+
+#: index.docbook:1420
+msgid "Transaction strategy configuration"
+msgstr "ãã©ã³ã¶ã¯ã·ã§ã³æ¦ç¥è¨å®"
+
+#: index.docbook:1422
+msgid "The Hibernate <literal>Session</literal> API is independent of any transaction demarcation system in your architecture. If you let Hibernate use JDBC directly, through a connection pool, you may begin and end your transactions by calling the JDBC API. If you run in a J2EE application server, you might want to use bean-managed transactions and call the JTA API and <literal>UserTransaction</literal> when needed."
+msgstr "Hibernate <literal>Session</literal> APIã¯ãã¢ã¼ããã¯ãã£å
ã®ã·ã¹ãã ã®ç®¡è½ã§ãã ãããããã©ã³ã¶ã¯ã·ã§ã³ã«ä¾åãã¾ããã ããã³ãã¯ã·ã§ã³ãã¼ã«ã®JDBCãç´æ¥ä½¿ãããå ´åãJDBC APIãã ãã©ã³ã¶ã¯ã·ã§ã³ãå¼ã¶ãã¨ãã§ãã¾ãã ãããJ2EEã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã§åä½ããããªããBean管çãã©ã³ã¶ã¯ã·ã§ã³ã使ãã å¿
è¦ã«å¿ã㦠<literal>UserTransaction</literal> ãJTA APIããå¼ã¶ãã¨ã«ãªãã§ãããã"
+
+#: index.docbook:1430
+msgid "To keep your code portable between these two (and other) environments we recommend the optional Hibernate <literal>Transaction</literal> API, which wraps and hides the underlying system. You have to specify a factory class for <literal>Transaction</literal> instances by setting the Hibernate configuration property <literal>hibernate.transaction.factory_class</literal>."
+msgstr "2ã¤ï¼ãã以ä¸ï¼ã®ç°å¢ã§äºææ§ã®ããã³ã¼ããç¶æããããã«ããªãã·ã§ã³ã¨ãã¦æ ¹æ¬çãªã·ã¹ãã ã ã©ããã³ã°ããHibernate <literal>Transaction</literal> APIãæ¨å¥¨ãã¾ãã Hibernateè¨å®ããããã£ã® <literal>hibernate.transaction.factory_class</literal> ãè¨å®ãããã¨ã§ ããç¹å®ã® <literal>Transaction</literal> ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãæã¤ãã¨ãã§ãã¾ãã"
+
+#: index.docbook:1437
+msgid "There are three standard (built-in) choices:"
+msgstr "3ã¤ã®åºæ¬çãªï¼æ¢ã«ããï¼é¸æãæãã¾ãï¼"
+
+#: index.docbook:1443
+msgid "org.hibernate.transaction.JDBCTransactionFactory"
+msgstr "org.hibernate.transaction.JDBCTransactionFactory"
+
+#: index.docbook:1445
+msgid "delegates to database (JDBC) transactions (default)"
+msgstr "ãã¼ã¿ãã¼ã¹(JDBC)ãã©ã³ã¶ã¯ã·ã§ã³ã«å§è²ãã¾ãï¼ããã©ã«ãï¼"
+
+#: index.docbook:1449
+msgid "org.hibernate.transaction.JTATransactionFactory"
+msgstr "org.hibernate.transaction.JTATransactionFactory"
+
+#: index.docbook:1451
+msgid "delegates to container-managed transaction if an existing transaction is underway in this context (e.g. EJB session bean method), otherwise a new transaction is started and bean-managed transaction are used."
+msgstr "ããããã®ã³ã³ããã¹ãï¼ä¾ãã°ãEJBã»ãã·ã§ã³Beanã¡ã½ããï¼ã§é²è¡ä¸ã®ãã©ã³ã¶ã¯ã·ã§ã³ãåå¨ãããããã㯠æ°ãããã©ã³ã¶ã¯ã·ã§ã³ãéå§ããã¦ãããBean管çãã©ã³ã¶ã¯ã·ã§ã³ã使ããã¦ããå ´åã ã³ã³ãã管çãã©ã³ã¶ã¯ã·ã§ã³ã«å§è²ãã¾ãã"
+
+#: index.docbook:1459
+msgid "org.hibernate.transaction.CMTTransactionFactory"
+msgstr "org.hibernate.transaction.CMTTransactionFactory"
+
+#: index.docbook:1461
+msgid "delegates to container-managed JTA transactions"
+msgstr "ã³ã³ãã管çJTAãã©ã³ã¶ã¯ã·ã§ã³ã«å§è²ãã¾ã"
+
+#: index.docbook:1466
+msgid "You may also define your own transaction strategies (for a CORBA transaction service, for example)."
+msgstr "èªåèªèº«ã®ãã©ã³ã¶ã¯ã·ã§ã³æ¦ç¥ï¼ä¾ãã°ãCORBAãã©ã³ã¶ã¯ã·ã§ã³ãµã¼ãã¹ï¼ãå®ç¾©ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:1471
+msgid "Some features in Hibernate (i.e. the second level cache, Contextual Sessions with JTA, etc.) require access to the JTA <literal>TransactionManager</literal> in a managed environment. In an application server you have to specify how Hibernate should obtain a reference to the <literal>TransactionManager</literal>, since J2EE does not standardize a single mechanism:"
+msgstr "Hibernateã®ããã¤ãã®æ©è½ï¼ä¾ãã°ãäºæ¬¡ãã£ãã·ã¥ãJTAã«ããã³ã³ããã¹ãã»ãã·ã§ã³ çï¼ã¯ 管çãããç°å¢ã®ä¸ã®JTA <literal>TransactionManager</literal> ã¸ã®ã¢ã¯ã»ã¹ãè¦æ±ãã¾ãã J2EEãã²ã¨ã¤ã®ã¡ã«ããºã ã«è¦æ ¼åããã¦ããªãã®ã§ã ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã«ããã¦ãHibernateã <literal>TransactionManager</literal> ã®ãªãã¡ã¬ã³ã¹ ãåå¾ããæ¹æ³ãæ確ã«ããå¿
è¦ãããã¾ãã"
+
+#: index.docbook:1479
+msgid "JTA TransactionManagers"
+msgstr "JTA ãã©ã³ã¶ã¯ã·ã§ã³ããã¼ã¸ã£"
+
+#: index.docbook:1485
+msgid "Transaction Factory"
+msgstr "Transaction Factory"
+
+#: index.docbook:1486
+msgid "Application Server"
+msgstr "Application Server"
+
+#: index.docbook:1491
+msgid "org.hibernate.transaction.JBossTransactionManagerLookup"
+msgstr "org.hibernate.transaction.JBossTransactionManagerLookup"
+
+#: index.docbook:1492
+msgid "JBoss"
+msgstr "JBoss"
+
+#: index.docbook:1495
+msgid "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+msgstr "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+
+#: index.docbook:1496
+msgid "Weblogic"
+msgstr "Weblogic"
+
+#: index.docbook:1499
+msgid "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+msgstr "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+
+#: index.docbook:1500
+msgid "WebSphere"
+msgstr "WebSphere"
+
+#: index.docbook:1503
+msgid "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+msgstr "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+
+#: index.docbook:1504
+msgid "WebSphere 6"
+msgstr "WebSphere 6"
+
+#: index.docbook:1507
+msgid "org.hibernate.transaction.OrionTransactionManagerLookup"
+msgstr "org.hibernate.transaction.OrionTransactionManagerLookup"
+
+#: index.docbook:1508
+msgid "Orion"
+msgstr "Orion"
+
+#: index.docbook:1511
+msgid "org.hibernate.transaction.ResinTransactionManagerLookup"
+msgstr "org.hibernate.transaction.ResinTransactionManagerLookup"
+
+#: index.docbook:1512
+msgid "Resin"
+msgstr "Resin"
+
+#: index.docbook:1515
+msgid "org.hibernate.transaction.JOTMTransactionManagerLookup"
+msgstr "org.hibernate.transaction.JOTMTransactionManagerLookup"
+
+#: index.docbook:1516
+msgid "JOTM"
+msgstr "JOTM"
+
+#: index.docbook:1519
+msgid "org.hibernate.transaction.JOnASTransactionManagerLookup"
+msgstr "org.hibernate.transaction.JOnASTransactionManagerLookup"
+
+#: index.docbook:1520
+msgid "JOnAS"
+msgstr "JOnAS"
+
+#: index.docbook:1523
+msgid "org.hibernate.transaction.JRun4TransactionManagerLookup"
+msgstr "org.hibernate.transaction.JRun4TransactionManagerLookup"
+
+#: index.docbook:1524
+msgid "JRun4"
+msgstr "JRun4"
+
+#: index.docbook:1527
+msgid "org.hibernate.transaction.BESTransactionManagerLookup"
+msgstr "org.hibernate.transaction.BESTransactionManagerLookup"
+
+#: index.docbook:1528
+msgid "Borland ES"
+msgstr "Borland ES"
+
+#: index.docbook:1537
+msgid "JNDI-bound <literal>SessionFactory</literal>"
+msgstr "<literal>SessionFactory</literal> ã®JNDIã¸ã®ç»é²"
+
+#: index.docbook:1539
+msgid "A JNDI bound Hibernate <literal>SessionFactory</literal> can simplify the lookup of the factory and the creation of new <literal>Session</literal>s. Note that this is not related to a JNDI bound <literal>Datasource</literal>, both simply use the same registry!"
+msgstr "JNDIã«ç»é²ããHibernate <literal>SessionFactory</literal> ã¯åç´ã« ãã¡ã¯ããªãã«ãã¯ã¢ããããæ°ãã <literal>Session</literal> ãä½ãã¾ãã ããã¯JNDIã«ç»é²ããã <literal>Datasource</literal> ã«ã¯é¢é£ããã ãäºãã«ã·ã³ãã«ã«ãããã®ç»é²ã使ããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:1546
+msgid "If you wish to have the <literal>SessionFactory</literal> bound to a JNDI namespace, specify a name (eg. <literal>java:hibernate/SessionFactory</literal>) using the property <literal>hibernate.session_factory_name</literal>. If this property is omitted, the <literal>SessionFactory</literal> will not be bound to JNDI. (This is especially useful in environments with a read-only JNDI default implementation, e.g. Tomcat.)"
+msgstr "ãã <literal>SessionFactory</literal> ãJNDIãã¼ã ã¹ãã¼ã¹ã«ç»é²ãããå ´åã ç¹å¥ãªååï¼ä¾ãã°ã <literal>java:hibernate/SessionFactory</literal> ï¼ã <literal>hibernate.session_factory_name</literal> ããããã£ã«ä½¿ã£ã¦ãã ãã ãããã®ããããã£ãçç¥ããå ´åã <literal>SessionFactory</literal> 㯠JNDIã«ç»é²ããã¾ãããï¼ããã¯Tomcatã®ãããªããã©ã«ãå®è£
ã§JNDIãèªã¿ããå°ç¨ã®ç°å¢ã®å ´åç¹ã«ä¾¿å©ã§ããï¼"
+
+#: index.docbook:1554
+msgid "When binding the <literal>SessionFactory</literal> to JNDI, Hibernate will use the values of <literal>hibernate.jndi.url</literal>, <literal>hibernate.jndi.class</literal> to instantiate an initial context. If they are not specified, the default <literal>InitialContext</literal> will be used."
+msgstr "<literal>SessionFactory</literal> ãJNDIã«ç»é²ããã¨ããHibernate㯠<literal>hibernate.jndi.url</literal> ã®å¤ã使ç¨ãã<literal>hibernate.jndi.class</literal> ãã¤ãã·ã£ã«ã³ã³ããã¹ãã¨ãã¦å
·ä½åãã¾ãã ããä½ãè¨å®ããªãå ´åã¯ãããã©ã«ãã® <literal>InitialContext</literal> ã使ç¨ãã¾ãã"
+
+#: index.docbook:1561
+msgid "Hibernate will automatically place the <literal>SessionFactory</literal> in JNDI after you call <literal>cfg.buildSessionFactory()</literal>. This means you will at least have this call in some startup code (or utility class) in your application, unless you use JMX deployment with the <literal>HibernateService</literal> (discussed later)."
+msgstr "<literal>cfg.buildSessionFactory()</literal> ãã³ã¼ã«å¾ Hibernateã¯èªåçã« <literal>SessionFactory</literal> ãJNDIã«é
ç½®ãã¾ãã <literal>HibernateService</literal> ã¨ä¸ç·ã«JMXãããã¤ã¡ã³ãã使ããªãéãã ããã¯ãã®å¼ã³åºããã¢ããªã±ã¼ã·ã§ã³å
ã®ä½ããã®ã¹ã¿ã¼ãã¢ããã³ã¼ãï¼ãããã¯ã¦ã¼ãã£ãªãã£ã¯ã©ã¹ï¼ ã«é
ç½®ããªããã°ãªããªããã¨ãæå³ãã¾ããï¼å¾ã§è°è«ãã¾ãï¼"
+
+#: index.docbook:1568
+msgid "If you use a JNDI <literal>SessionFactory</literal>, an EJB or any other class may obtain the <literal>SessionFactory</literal> using a JNDI lookup."
+msgstr "ããJNDI <literal>SessionFactory</literal> ã使ãå ´åãEJBãä»ã®ã¯ã©ã¹ã¯ JNDIã«ãã¯ã¢ããã使ã£ã¦ <literal>SessionFactory</literal> ãåå¾ãã¾ãã"
+
+#: index.docbook:1573
+msgid "We recommend that you bind the <literal>SessionFactory</literal> to JNDI in a managed environment and use a <literal>static</literal> singleton otherwise. To shield your application code from these details, we also recommend to hide the actual lookup code for a <literal>SessionFactory</literal> in a helper class, such as <literal>HibernateUtil.getSessionFactory()</literal>. Note that such a class is also a convenient way to startup Hibernate—see chapter 1."
+msgstr "管çãããç°å¢ã§ã¯ <literal>SessionFactory</literal> ãJNDIã«ãã¤ã³ããã ããã§ãªããã° <literal>static</literal> ã·ã³ã°ã«ãã³ã使ããã¨ãæ¨å¥¨ãã¾ãã ãããã£ã詳細ããã¢ããªã±ã¼ã·ã§ã³ã³ã¼ããä¿è·ããããã«ã <literal>HibernateUtil.getSessionFactory()</literal> ã®ãããªãã«ãã¼ã¯ã©ã¹ã®ä¸ã«ã <literal>SessionFactory</literal> ãã«ãã¯ã¢ããããã³ã¼ããé ããã¨ãæ¨å¥¨ãã¾ãã ãã®ãããªãã«ãã¼ã¯ã©ã¹ã¯Hibernateãéå§ãã便å©ãªæ段ã§ãããã¾ãã —ï¼ç« ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:1585
+msgid "Current Session context management with JTA"
+msgstr "JTAã«ããç¾å¨ã®ã»ãã·ã§ã³ã³ã³ããã¹ãããã¼ã¸ã¡ã³ã"
+
+#: index.docbook:1587
+msgid "The easiest way to handle <literal>Session</literal>s and transactions is Hibernates automatic \"current\" <literal>Session</literal> management. See the discussion of <xref linkend=\"architecture-current-session\"/>current sessions. Using the <literal>\"jta\"</literal> session context, if there is no Hibernate <literal>Session</literal> associated with the current JTA transaction, one will be started and associated with that JTA transaction the first time you call <literal>sessionFactory.getCurrentSession()</literal>. The <literal>Session</literal>s retrieved via <literal>getCurrentSession()</literal> in <literal>\"jta\"</literal> context will be set to automatically flush before the transaction completes, close after the transaction completes, and aggressively release JDBC connections after each statement. This allows the <literal>Session</literal>s to be managed by the life cycle of the JTA transaction to which it is associated, keeping user code clean of such man!
agement concerns. Your code can either use JTA programmatically through <literal>UserTransaction</literal>, or (recommended for portable code) use the Hibernate <literal>Transaction</literal> API to set transaction boundaries. If you run in an EJB container, declarative transaction demarcation with CMT is preferred."
+msgstr "ãã£ã¨ãç°¡åã« <literal>Session</literal> ã¨ãã©ã³ã¶ã¯ã·ã§ã³ãæ±ãæ¹æ³ã¯ã Hibernateãèªåçã«ãç¾å¨ã®ã <literal>Session</literal> ã管çãããã¨ã§ãã <xref linkend=\"architecture-current-session\"/>ã«ã¬ã³ãã»ãã·ã§ã³ ã®èª¬æãåç
§ãã¦ãã ããã ãã <literal>ãJTAã</literal> ã»ãã·ã§ã³ã³ã³ããã¹ãã使ã£ãä¸ã§ã ç¾å¨ã®JTAãã©ã³ã¶ã¯ã·ã§ã³ã¨Hibernate <literal>Session</literal> ãé¢é£ãã¦ããªãå ´åã¯ã æåã« <literal>sessionFactory.getCurrentSession()</literal> ãã³ã¼ã«ãã JTAãã©ã³ã¶ã¯ã·ã§ã³ã¨ã®é¢é£ä»ããè¡ã£ã¦ãã ããã <literal>ãJTAã</literal> ã³ã³ããã¹ãã® <literal>getCurrentSession()</literal> ã éãã¦åå¾ãã <literal>Session</literal> ã¯ããã©ã³ã¶ã¯ã·ã§ã³ãå®äºããåã« èªåçã«ãã©ãã·ã¥ããå®äºããå¾ã«ã¯èªåçã«ã¯ãã¼ãºãã¾ãã ã¾ããåã¹ãã¼ã!
ã¡ã³ãå¾ã«JDBCã³ãã¯ã·ã§ã³ãç©æ¥µçã«ãªãªã¼ã¹ãã¾ãã ããã«ããJTAãã©ã³ã¶ã¯ã·ã§ã³ã®ã©ã¤ããµã¤ã¯ã«ã§ <literal>Session</literal> ã管çãããã¨ãã§ãã ã¦ã¼ã¶ã¼ã®ã³ã¼ããããã®ãããªç®¡çãããã³ã¼ããæé¤ã§ãã¾ãã <literal>UserTransaction</literal> ãéãã¦JTAãããã°ã©ã ã§ç®¡çãããã¨ãã§ãã¾ãã ã¾ãã¯ãï¼ãã¼ã¿ãã«ãªã³ã¼ãã§ããã°ï¼Hibernate <literal>Transaction</literal> APIã ãã©ã³ã¶ã¯ã·ã§ã³å¢çã¨ãã¦ä½¿ããã¨ãã§ãã¾ãã EJBã³ã³ããã使ãã¨ãã¯ãCMTã«ãã宣è¨çãã©ã³ã¶ã¯ã·ã§ã³å¢çã好ã¾ããã§ãã"
+
+#: index.docbook:1610
+msgid "JMX deployment"
+msgstr "JMXãããã¤ã¡ã³ã"
+
+#: index.docbook:1612
+msgid "The line <literal>cfg.buildSessionFactory()</literal> still has to be executed somewhere to get a <literal>SessionFactory</literal> into JNDI. You can do this either in a <literal>static</literal> initializer block (like the one in <literal>HibernateUtil</literal>) or you deploy Hibernate as a <emphasis>managed service</emphasis>."
+msgstr "<literal>SessionFactory</literal> ãJNDIããåå¾ããããã«ã¯ <literal>cfg.buildSessionFactory()</literal> è¡ãã©ããã§å®è¡ãã¦ããªããã°ãªãã¾ããã ããªãã¯ãããã<literal>static</literal> åæåãããã¯å
ï¼ <literal>HibernateUtil</literal> ã®ãããªï¼ã <emphasis>managed service</emphasis> ã¨ãã¦Hibernateããããã¤ããããã©ã¡ããã§å®è¡ã§ãã¾ãã"
+
+#: index.docbook:1620
+msgid "Hibernate is distributed with <literal>org.hibernate.jmx.HibernateService</literal> for deployment on an application server with JMX capabilities, such as JBoss AS. The actual deployment and configuration is vendor specific. Here is an example <literal>jboss-service.xml</literal> for JBoss 4.0.x:"
+msgstr "JBOSSã®ãããªJMXã®æ©è½ã§ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã«ãããã¤ããããã« <literal>org.hibernate.jmx.HibernateService</literal> ã使ã£ã¦ãé
ç½®ãã¾ãã å®éã®ãããã¤ã¡ã³ãã¨è¨å®ã¯ãã³ãã¼ç¹æã§ãã ããã§ä¾ã¨ãã¦JBOSS 4.0.xç¨ã® <literal>jboss-service.xml</literal> ã示ãã¾ãã"
+
+#: index.docbook:1627
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<server>\n"
+ "\n"
+ "<mbean code=\"org.hibernate.jmx.HibernateService\"\n"
+ " name=\"jboss.jca:service=HibernateFactory,name=HibernateFactory\">\n"
+ "\n"
+ " <!-- Required services -->\n"
+ " <depends>jboss.jca:service=RARDeployer</depends>\n"
+ " <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>\n"
+ "\n"
+ " <!-- Bind the Hibernate service to JNDI -->\n"
+ " <attribute name=\"JndiName\">java:/hibernate/SessionFactory</attribute>\n"
+ "\n"
+ " <!-- Datasource settings -->\n"
+ " <attribute name=\"Datasource\">java:HsqlDS</attribute>\n"
+ " <attribute name=\"Dialect\">org.hibernate.dialect.HSQLDialect</attribute>\n"
+ "\n"
+ " <!-- Transaction integration -->\n"
+ " <attribute name=\"TransactionStrategy\">\n"
+ " org.hibernate.transaction.JTATransactionFactory</attribute>\n"
+ " <attribute name=\"TransactionManagerLookupStrategy\">\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup</attribute>\n"
+ " <attribute name=\"FlushBeforeCompletionEnabled\">true</attribute>\n"
+ " <attribute name=\"AutoCloseSessionEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Fetching options -->\n"
+ " <attribute name=\"MaximumFetchDepth\">5</attribute>\n"
+ "\n"
+ " <!-- Second-level caching -->\n"
+ " <attribute name=\"SecondLevelCacheEnabled\">true</attribute>\n"
+ " <attribute name=\"CacheProviderClass\">org.hibernate.cache.EhCacheProvider</attribute>\n"
+ " <attribute name=\"QueryCacheEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Logging -->\n"
+ " <attribute name=\"ShowSqlEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <attribute name=\"MapResources\">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>\n"
+ "\n"
+ "</mbean>\n"
+ "\n"
+ "</server>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<server>\n"
+ "\n"
+ "<mbean code=\"org.hibernate.jmx.HibernateService\"\n"
+ " name=\"jboss.jca:service=HibernateFactory,name=HibernateFactory\">\n"
+ "\n"
+ " <!-- Required services -->\n"
+ " <depends>jboss.jca:service=RARDeployer</depends>\n"
+ " <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>\n"
+ "\n"
+ " <!-- Bind the Hibernate service to JNDI -->\n"
+ " <attribute name=\"JndiName\">java:/hibernate/SessionFactory</attribute>\n"
+ "\n"
+ " <!-- Datasource settings -->\n"
+ " <attribute name=\"Datasource\">java:HsqlDS</attribute>\n"
+ " <attribute name=\"Dialect\">org.hibernate.dialect.HSQLDialect</attribute>\n"
+ "\n"
+ " <!-- Transaction integration -->\n"
+ " <attribute name=\"TransactionStrategy\">\n"
+ " org.hibernate.transaction.JTATransactionFactory</attribute>\n"
+ " <attribute name=\"TransactionManagerLookupStrategy\">\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup</attribute>\n"
+ " <attribute name=\"FlushBeforeCompletionEnabled\">true</attribute>\n"
+ " <attribute name=\"AutoCloseSessionEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Fetching options -->\n"
+ " <attribute name=\"MaximumFetchDepth\">5</attribute>\n"
+ "\n"
+ " <!-- Second-level caching -->\n"
+ " <attribute name=\"SecondLevelCacheEnabled\">true</attribute>\n"
+ " <attribute name=\"CacheProviderClass\">org.hibernate.cache.EhCacheProvider</attribute>\n"
+ " <attribute name=\"QueryCacheEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Logging -->\n"
+ " <attribute name=\"ShowSqlEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <attribute name=\"MapResources\">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>\n"
+ "\n"
+ "</mbean>\n"
+ "\n"
+ "</server>]]>"
+
+#: index.docbook:1629
+msgid "This file is deployed in a directory called <literal>META-INF</literal> and packaged in a JAR file with the extension <literal>.sar</literal> (service archive). You also need to package Hibernate, its required third-party libraries, your compiled persistent classes, as well as your mapping files in the same archive. Your enterprise beans (usually session beans) may be kept in their own JAR file, but you may include this EJB JAR file in the main service archive to get a single (hot-)deployable unit. Consult the JBoss AS documentation for more information about JMX service and EJB deployment."
+msgstr "ãã®ãã¡ã¤ã«ã¯ <literal>META-INF</literal> ãã£ã¬ã¯ããªã«é
ç½®ããã JARãã¡ã¤ã«ãæ¡å¼µãã <literal>.sar</literal> (service archive)ã§ããã±ã¼ã¸åããã¾ãã åæ§ã«Hibernateããã±ã¼ã¸ãå¿
è¦ã§ããã¾ããHibernateã¯ãµã¼ããã¼ãã£ã®ã©ã¤ãã©ãªãè¦æ±ãã¾ãã ã³ã³ãã¤ã«ããæ°¸ç¶åã¯ã©ã¹ã¨ãã®ãããã³ã°ãã¡ã¤ã«ãåæ§ã«ã¢ã¼ã«ã¤ãï¼.sarãã¡ã¤ã«ï¼ã«å
¥ãã¾ãã ã¨ã³ã¿ã¼ãã©ã¤ãºbeanï¼é常ã¯ã»ãã·ã§ã³beanï¼ã¯èªèº«ã®JARãã¡ã¤ã«ãä¿æãã¾ããã 1åã§ï¼ãããï¼ãããã¤å¯è½ãªã¦ãããã®ããã«ã¡ã¤ã³ãµã¼ãã¹ã¢ã¼ã«ã¤ãã¨ãã¦ãã®EJB JARãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ããã ãã¨ãã§ãã¾ããJBossã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã®ããã¥ã¡ã³ãã«JXMãµã¼ãã¹ã¨ EJBãããã¤ã¡ã³ãã®ããå¤ãã®æ
å ±ãããã¾ãã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/events.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/events.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/events.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,457 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Interceptors and events"
+msgstr "ã¤ã³ã¿ã¼ã»ãã¿ã¨ã¤ãã³ã"
+
+#: index.docbook:7
+msgid "It is often useful for the application to react to certain events that occur inside Hibernate. This allows implementation of certain kinds of generic functionality, and extension of Hibernate functionality."
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ãHibernateã®å
é¨ã§çºçããã¤ãã³ãã«å¯¾å¿ã§ããã¨å½¹ã«ç«ã¤ãã¨ãããã¾ãã ãã種ã®ä¸è¬çãªæ©è½ãå®è£
ã§ããããã«ãªãã ã¾ãHibernateã®æ©è½ãæ¡å¼µãããã¨ãã§ããããã«ãªãã¾ãã"
+
+#: index.docbook:14
+msgid "Interceptors"
+msgstr "ã¤ã³ã¿ã¼ã»ãã¿"
+
+#: index.docbook:16
+msgid "The <literal>Interceptor</literal> interface provides callbacks from the session to the application allowing the application to inspect and/or manipulate properties of a persistent object before it is saved, updated, deleted or loaded. One possible use for this is to track auditing information. For example, the following <literal>Interceptor</literal> automatically sets the <literal>createTimestamp</literal> when an <literal>Auditable</literal> is created and updates the <literal>lastUpdateTimestamp</literal> property when an <literal>Auditable</literal> is updated."
+msgstr "<literal>Interceptor</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ã£ã¦ã ã»ãã·ã§ã³ããã¢ããªã±ã¼ã·ã§ã³ã¸ã³ã¼ã«ããã¯ããããã¨ãã§ãã¾ãã ããã«ããæ°¸ç¶ãªãã¸ã§ã¯ãã®ä¿åãæ´æ°ãåé¤ãèªã¿è¾¼ã¿ã®åã«ã ã¢ããªã±ã¼ã·ã§ã³ãããããã£ãæ¤æ»ãããæä½ãããã§ããããã«ãªãã¾ãã ããã¯ç£æ»æ
å ±ã®è¿½è·¡ã«å©ç¨ã§ãã¾ãã ä¸ã®ä¾ã§ <literal>Interceptor</literal> 㯠<literal>Auditable</literal> ãä½æãããã¨èªåçã« <literal>createTimestamp</literal> ãè¨å®ãã <literal>Auditable</literal> ãæ´æ°ãããã¨èªåçã« <literal>lastUpdateTimestamp</literal> ããããã£ãæ´æ°ãã¾ãã"
+
+#: index.docbook:27
+msgid "You may either implement <literal>Interceptor</literal> directly or (better) extend <literal>EmptyInterceptor</literal>."
+msgstr "<literal>Interceptor</literal> ãç´æ¥å®è£
ãããã ï¼ããã«ããã®ã¯ï¼<literal>EmptyInterceptor</literal> ãæ¡å¼µãããã§ãã¾ãã"
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[package org.hibernate.test;\n"
+ "\n"
+ "import java.io.Serializable;\n"
+ "import java.util.Date;\n"
+ "import java.util.Iterator;\n"
+ "\n"
+ "import org.hibernate.EmptyInterceptor;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.type.Type;\n"
+ "\n"
+ "public class AuditInterceptor extends EmptyInterceptor {\n"
+ "\n"
+ " private int updates;\n"
+ " private int creates;\n"
+ " private int loads;\n"
+ "\n"
+ " public void onDelete(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " // do nothing\n"
+ " }\n"
+ "\n"
+ " public boolean onFlushDirty(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] currentState,\n"
+ " Object[] previousState,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " updates++;\n"
+ " for ( int i=0; i < propertyNames.length; i++ ) {\n"
+ " if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " currentState[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onLoad(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " loads++;\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onSave(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " creates++;\n"
+ " for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " state[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public void afterTransactionCompletion(Transaction tx) {\n"
+ " if ( tx.wasCommitted() ) {\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);\n"
+ " }\n"
+ " updates=0;\n"
+ " creates=0;\n"
+ " loads=0;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package org.hibernate.test;
+\n"
+ "
+\n"
+ "import java.io.Serializable;
+\n"
+ "import java.util.Date;
+\n"
+ "import java.util.Iterator;
+\n"
+ "
+\n"
+ "import org.hibernate.EmptyInterceptor;
+\n"
+ "import org.hibernate.Transaction;
+\n"
+ "import org.hibernate.type.Type;
+\n"
+ "
+\n"
+ "public class AuditInterceptor extends EmptyInterceptor {
+\n"
+ "
+\n"
+ " private int updates;
+\n"
+ " private int creates;
+\n"
+ " private int loads;
+\n"
+ "
+\n"
+ " public void onDelete(Object entity,
+\n"
+ " Serializable id,
+\n"
+ " Object[] state,
+\n"
+ " String[] propertyNames,
+\n"
+ " Type[] types) {
+\n"
+ " // do nothing
+\n"
+ " }
+\n"
+ "
+\n"
+ " public boolean onFlushDirty(Object entity,
+\n"
+ " Serializable id,
+\n"
+ " Object[] currentState,
+\n"
+ " Object[] previousState,
+\n"
+ " String[] propertyNames,
+\n"
+ " Type[] types) {
+\n"
+ "
+\n"
+ " if ( entity instanceof Auditable ) {
+\n"
+ " updates++;
+\n"
+ " for ( int i=0; i < propertyNames.length; i++ ) {
+\n"
+ " if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {
+\n"
+ " currentState[i] = new Date();
+\n"
+ " return true;
+\n"
+ " }
+\n"
+ " }
+\n"
+ " }
+\n"
+ " return false;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public boolean onLoad(Object entity,
+\n"
+ " Serializable id,
+\n"
+ " Object[] state,
+\n"
+ " String[] propertyNames,
+\n"
+ " Type[] types) {
+\n"
+ " if ( entity instanceof Auditable ) {
+\n"
+ " loads++;
+\n"
+ " }
+\n"
+ " return false;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public boolean onSave(Object entity,
+\n"
+ " Serializable id,
+\n"
+ " Object[] state,
+\n"
+ " String[] propertyNames,
+\n"
+ " Type[] types) {
+\n"
+ "
+\n"
+ " if ( entity instanceof Auditable ) {
+\n"
+ " creates++;
+\n"
+ " for ( int i=0; i<propertyNames.length; i++ ) {
+\n"
+ " if ( \"createTimestamp\".equals( propertyNames[i] ) ) {
+\n"
+ " state[i] = new Date();
+\n"
+ " return true;
+\n"
+ " }
+\n"
+ " }
+\n"
+ " }
+\n"
+ " return false;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public void afterTransactionCompletion(Transaction tx) {
+\n"
+ " if ( tx.wasCommitted() ) {
+\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);
+\n"
+ " }
+\n"
+ " updates=0;
+\n"
+ " creates=0;
+\n"
+ " loads=0;
+\n"
+ " }
+\n"
+ "
+\n"
+ "}]]>"
+
+#: index.docbook:34
+msgid "Interceptors come in two flavors: <literal>Session</literal>-scoped and <literal>SessionFactory</literal>-scoped."
+msgstr "ã¤ã³ã¿ã¼ã»ãã¿ã«ã¯äºç¨®é¡ããã¾ãï¼ <literal>Session</literal> ã¹ã³ã¼ãã®ãã®ã¨ <literal>SessionFactory</literal> ã¹ã³ã¼ãã®ãã®ã§ãã"
+
+#: index.docbook:39
+msgid "A <literal>Session</literal>-scoped interceptor is specified when a session is opened using one of the overloaded SessionFactory.openSession() methods accepting an <literal>Interceptor</literal>."
+msgstr "<literal>Session</literal> ã¹ã³ã¼ãã®ã¤ã³ã¿ã¼ã»ãã¿ã¯ã ã»ãã·ã§ã³ããªã¼ãã³ããã¨ãã«æå®ãã¾ãã <literal>Interceptor</literal> ãå¼æ°ã«åãSessionFactory.openSession() ã®ãªã¼ãã¼ãã¼ãã¡ã½ããã®ä¸ã¤ã使ãã¾ãã"
+
+#: index.docbook:45
+msgid "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+msgstr "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+
+#: index.docbook:47
+msgid "A <literal>SessionFactory</literal>-scoped interceptor is registered with the <literal>Configuration</literal> object prior to building the <literal>SessionFactory</literal>. In this case, the supplied interceptor will be applied to all sessions opened from that <literal>SessionFactory</literal>; this is true unless a session is opened explicitly specifying the interceptor to use. <literal>SessionFactory</literal>-scoped interceptors must be thread safe, taking care to not store session-specific state since multiple sessions will use this interceptor (potentially) concurrently."
+msgstr "<literal>SessionFactory</literal> ã¹ã³ã¼ãã®ã¤ã³ã¿ã¼ã»ãã¿ã¯ <literal>Configuration</literal> ãªãã¸ã§ã¯ãã使ã£ã¦ç»é²ãã¾ãã ãã㯠<literal>SessionFactory</literal> ã®æ§ç¯ãããåªå
ããã¾ãã ãã®å ´åãæä¾ãããã¤ã³ã¿ã¼ã»ãã¿ã¯ <literal>SessionFactory</literal> ãããªã¼ãã³ããããã¹ã¦ã®ã»ãã·ã§ã³ã«é©ç¨ããã¾ãã ããã¯ä½¿ç¨ããã¤ã³ã¿ã¼ã»ãã¿ãæ示çã«æå®ãã¦ã»ãã·ã§ã³ããªã¼ãã³ããªãéãããããªãã¾ãã <literal>SessionFactory</literal> ã¹ã³ã¼ãã®ã¤ã³ã¿ã¼ã»ãã¿ã¯ã¹ã¬ããã»ã¼ãã§ãªããã°ãªãã¾ããã è¤æ°ã®ã»ãã·ã§ã³ãï¼æ½å¨çã«ï¼ãã®ã¤ã³ã¿ã¼ã»ãã¿ãåæ並è¡ã§ä½¿ç¨ãããã¨ã«ãªãããã ã»ãã·ã§ã³åºæã®ç¶æ
ãæ ¼ç´ããªãããã«æ°ãã¤ãã¦ãã ããã"
+
+#: index.docbook:56
+msgid "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
+msgstr "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
+
+#: index.docbook:61
+msgid "Event system"
+msgstr "ã¤ãã³ãã·ã¹ãã "
+
+#: index.docbook:63
+msgid "If you have to react to particular events in your persistence layer, you may also use the Hibernate3 <emphasis>event</emphasis> architecture. The event system can be used in addition or as a replacement for interceptors."
+msgstr "æ°¸ç¶å層ã§ç¹å®ã®ã¤ãã³ãã«å¯¾å¿ããªããã°ãªããªãå ´åã Hibernate3ã® <emphasis>ã¤ãã³ã</emphasis> ã¢ã¼ããã¯ãã£ã使ããã¨ãã§ãã¾ãã ã¤ãã³ãã·ã¹ãã ã¯ã¤ã³ã¿ã¼ã»ãã¿ã¨ä¸ç·ã«ä½¿ãããã¾ãã¯ã¤ã³ã¿ã¼ã»ãã¿ã®ä»£ããã¨ãã¦ä½¿ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:69
+msgid "Essentially all of the methods of the <literal>Session</literal> interface correlate to an event. You have a <literal>LoadEvent</literal>, a <literal>FlushEvent</literal>, etc (consult the XML configuration-file DTD or the <literal>org.hibernate.event</literal> package for the full list of defined event types). When a request is made of one of these methods, the Hibernate <literal>Session</literal> generates an appropriate event and passes it to the configured event listeners for that type. Out-of-the-box, these listeners implement the same processing in which those methods always resulted. However, you are free to implement a customization of one of the listener interfaces (i.e., the <literal>LoadEvent</literal> is processed by the registered implemenation of the <literal>LoadEventListener</literal> interface), in which case their implementation would be responsible for processing any <literal>load()</literal> requests made of the <literal>Session</literal>."
+msgstr "æ¬è³ªçã« <literal>Session</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ãã¹ã¦ã®ã¡ã½ããã¯ã 1åã®ã¤ãã³ãã¨ç¸äºã«é¢é£ãã¾ãã ä¾ãã° <literal>LoadEvent</literal>ã<literal>FlushEvent</literal> ãªã©ãããã¾ã ï¼å®ç¾©æ¸ã¿ã®ã¤ãã³ãåã®ä¸è¦§ã«ã¤ãã¦ã¯ãXMLè¨å®ãã¡ã¤ã«ã®DTDã <literal>org.hibernate.event</literal> ããã±ã¼ã¸ã調ã¹ã¦ãã ããï¼ã ãªã¯ã¨ã¹ãããããã®ã¡ã½ããã®1ã¤ããä½ãããã¨ãã Hibernateã® <literal>Session</literal> ã¯é©åãªã¤ãã³ããçæãã ãã®ã¤ãã³ãåã«è¨å®ãããã¤ãã³ããªã¹ãã«æ¸¡ãã¾ãã ãã°ããããã¨ã«ããããã®ãªã¹ãã¯ãã®ã¡ã½ããã¨åãå¦çãå®è£
ãã¾ãã ã¨ã¯ããããªã¹ãã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ä¸ã¤ãèªç±ã«ã«ã¹ã¿ã å®è£
ã§ãã¾ã ï¼ã¤ã¾ãã<literal>LoadEvent</literal> ã¯ç»é²ããã <literal>LoadEventListener</literal> ã¤ã³ã¿ã¼ãã§ã¤!
ã¹ã®å®è£
ã«ããå¦çããã¾ãï¼ã ãã®å ´åããã®å®è£
ã«ã¯ <literal>Session</literal> ããä½ãããã©ã®ãã㪠<literal>load()</literal> ãªã¯ã¨ã¹ãããå¦çãã責任ãããã¾ãã"
+
+#: index.docbook:84
+msgid "The listeners should be considered effectively singletons; meaning, they are shared between requests, and thus should not save any state as instance variables."
+msgstr "ãªã¹ãã¯äºå®ä¸ã·ã³ã°ã«ãã³ã§ããã¨è¦ãªãã¾ãã ã¤ã¾ããªã¹ãã¯ãªã¯ã¨ã¹ãéã§å
±æãããããã ã¤ã³ã¹ã¿ã³ã¹å¤æ°ã¨ãã¦ç¶æ
ãä¿æããã¹ãã§ã¯ãªãã¨ãããã¨ã§ãã"
+
+#: index.docbook:89
+msgid "A custom listener should implement the appropriate interface for the event it wants to process and/or extend one of the convenience base classes (or even the default event listeners used by Hibernate out-of-the-box as these are declared non-final for this purpose). Custom listeners can either be registered programmatically through the <literal>Configuration</literal> object, or specified in the Hibernate configuration XML (declarative configuration through the properties file is not supported). Here's an example of a custom load event listener:"
+msgstr "ã«ã¹ã¿ã ãªã¹ãã¯å¦çãããã¤ãã³ãã«ã¤ãã¦é©åãªã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ããã¹ãã§ãã 便å©ãªåºåºã¯ã©ã¹ã®ãã¡ã®ä¸ã¤ãç¶æ¿ãã¦ãããã§ã ï¼ã¾ãã¯Hibernateãããã©ã«ãã§ä½¿ç¨ããã¤ãã³ããªã¹ããç¶æ¿ãã¦ãããã§ãã ãã°ããããã¨ã«ããã®ç®çã®ããã«éfinalã¨ãã¦å®£è¨ããã¦ãã¾ãï¼ã ã«ã¹ã¿ã ãªã¹ã㯠<literal>Configuration</literal> ãªãã¸ã§ã¯ãã使ã£ã¦ããã°ã©ã ããç»é²ãããã Hibernateã®XMLè¨å®ãã¡ã¤ã«ã§æå®ã§ãã¾ã ï¼ããããã£ãã¡ã¤ã«ã§å®£è¨çã«è¨å®ããæ¹æ³ã¯ãµãã¼ãããã¦ãã¾ããï¼ã ã«ã¹ã¿ã ãã¼ãã¤ãã³ããªã¹ãã®ä¾ã示ãã¾ãã"
+
+#: index.docbook:99
+msgid ""
+ "<![CDATA[public class MyLoadListener implements LoadEventListener {\n"
+ " // this is the single method defined by the LoadEventListener interface\n"
+ " public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)\n"
+ " throws HibernateException {\n"
+ " if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {\n"
+ " throw MySecurityException(\"Unauthorized access\");\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class MyLoadListener implements LoadEventListener {
+\n"
+ " // this is the single method defined by the LoadEventListener interface
+\n"
+ " public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)
+\n"
+ " throws HibernateException {
+\n"
+ " if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {
+\n"
+ " throw MySecurityException(\"Unauthorized access\");
+\n"
+ " }
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:101
+msgid "You also need a configuration entry telling Hibernate to use the listener in addition to the default listener:"
+msgstr "ããã©ã«ããªã¹ã以å¤ã®ãªã¹ãã使ãã«ã¯ãHibernateã¸ã®è¨å®ãå¿
è¦ã§ãï¼"
+
+#: index.docbook:106
+msgid ""
+ "<![CDATA[<hibernate-configuration>\n"
+ " <session-factory>\n"
+ " ...\n"
+ " <event type=\"load\">\n"
+ " <listener class=\"com.eg.MyLoadListener\"/>\n"
+ " <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>\n"
+ " </event>\n"
+ " </session-factory>\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-configuration>
+\n"
+ " <session-factory>
+\n"
+ " ...
+\n"
+ " <event type=\"load\">
+\n"
+ " <listener class=\"com.eg.MyLoadListener\"/>
+\n"
+ " <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>
+\n"
+ " </event>
+\n"
+ " </session-factory>
+\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:108
+msgid "Instead, you may register it programmatically:"
+msgstr "ã¾ããã®ä»ã«ãããã°ã©ã ã§ç»é²ããæ¹æ³ãããã¾ãï¼"
+
+#: index.docbook:112
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration();\n"
+ "LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };\n"
+ "cfg.EventListeners().setLoadEventListeners(stack);]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration();
+\n"
+ "LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };
+\n"
+ "cfg.EventListeners().setLoadEventListeners(stack);]]>"
+
+#: index.docbook:114
+msgid "Listeners registered declaratively cannot share instances. If the same class name is used in multiple <literal><listener/></literal> elements, each reference will result in a separate instance of that class. If you need the capability to share listener instances between listener types you must use the programmatic registration approach."
+msgstr "ãªã¹ãã宣è¨çã«ç»é²ããã¨ããã®ãªã¹ãã®ã¤ã³ã¹ã¿ã³ã¹ãå
±æã§ãã¾ããã è¤æ°ã® <literal><listener/></literal> è¦ç´ ã§åãã¯ã©ã¹åã使ãããã¨ã ããããã®åç
§ã¯ãã®ã¯ã©ã¹ã®å¥ã
ã®ã¤ã³ã¹ã¿ã³ã¹ãæããã¨ã«ãªãã¾ãã ãªã¹ãåã®éã§ãªã¹ãã¤ã³ã¹ã¿ã³ã¹ãå
±æããå¿
è¦ãããã°ã ããã°ã©ã ã§ç»é²ããæ¹æ³ãæ¡ããªããã°ãªãã¾ããã"
+
+#: index.docbook:122
+msgid "Why implement an interface and define the specific type during configuration? Well, a listener implementation could implement multiple event listener interfaces. Having the type additionally defined during registration makes it easier to turn custom listeners on or off during configuration."
+msgstr "ãªãã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ãã¦ãç¹åããåãè¨å®æã«æå®ããã®ã§ããããï¼ ãªã¹ãã®å®è£
ã¯ã©ã¹ã«ãè¤æ°ã®ã¤ãã³ããªã¹ãã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ã§ããããã§ãã ç»é²æã«è¿½å ã§åãæå®ãããã¨ã§ãã«ã¹ã¿ã ãªã¹ãã®on/offãè¨å®æã«ç°¡åã«åãæ¿ãããã¾ãã"
+
+#: index.docbook:132
+msgid "Hibernate declarative security"
+msgstr "Hibernateã®å®£è¨çãªã»ãã¥ãªãã£"
+
+#: index.docbook:133
+msgid "Usually, declarative security in Hibernate applications is managed in a session facade layer. Now, Hibernate3 allows certain actions to be permissioned via JACC, and authorized via JAAS. This is optional functionality built on top of the event architecture."
+msgstr "ä¸è¬çã«Hibernateã¢ããªã±ã¼ã·ã§ã³ã®å®£è¨çãªã»ãã¥ãªãã£ã¯ãã»ãã·ã§ã³ãã¡ãµã¼ã層ã§ç®¡çãã¾ãã ç¾å¨ãHiberenate3ã¯JACCã§è¨±å¯ããã¤ãJAASã§èªè¨¼ããã¢ã¯ã·ã§ã³ã許ãã¦ãã¾ãã ããã¯ã¤ãã³ãã¢ã¼ããã¯ãã£ã®æä¸ä½ã«çµã¿è¾¼ã¾ãã¦ãããªãã·ã§ã³ã®æ©è½ã§ãã"
+
+#: index.docbook:139
+msgid "First, you must configure the appropriate event listeners, to enable the use of JAAS authorization."
+msgstr "ã¾ãæåã«ãé©åãªã¤ãã³ããªã¹ããè¨å®ãã¦JAASèªè¨¼ã使ããããã«ããªããã°ãªãã¾ããã"
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>\n"
+ "<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>\n"
+ "<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>\n"
+ "<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
+msgstr ""
+ "<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>
+\n"
+ "<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>
+\n"
+ "<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>
+\n"
+ "<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
+
+#: index.docbook:146
+msgid "Note that <literal><listener type=\"...\" class=\"...\"/></literal> is just a shorthand for <literal><event type=\"...\"><listener class=\"...\"/></event></literal> when there is exactly one listener for a particular event type."
+msgstr "ç¹å®ã®ã¤ãã³ãåã«å¯¾ãã¦ã¡ããã©ä¸ã¤ã®ãªã¹ããããã¨ãã <literal><listener type=\"...\" class=\"...\"/></literal> 㯠<literal><event type=\"...\"><listener class=\"...\"/></event></literal> ã®ç°¡ç¥å½¢ã«éããªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:152
+msgid "Next, still in <literal>hibernate.cfg.xml</literal>, bind the permissions to roles:"
+msgstr "次ã«ãåãã <literal>hibernate.cfg.xml</literal> ã§ãã¼ã«ã«ãã¼ããã·ã§ã³ãä¸ãã¦ãã ããï¼"
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>\n"
+ "<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
+msgstr ""
+ "<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>
+\n"
+ "<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
+
+#: index.docbook:158
+msgid "The role names are the roles understood by your JACC provider."
+msgstr "ãã®ãã¼ã«åã¯ä½¿ç¨ããJACCãããã¤ãã«ç解ããããã¼ã«ã§ãã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/example_mappings.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/example_mappings.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/example_mappings.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1660 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Example: Various Mappings"
+msgstr "ä¾ï¼ãããããªãããã³ã°"
+
+#: index.docbook:22
+msgid "This chapters shows off some more complex association mappings."
+msgstr "ãã®ç« ã§ã¯ãããè¤éãªé¢é£ã®ãããã³ã°ãããã¤ãç´¹ä»ãã¾ãã"
+
+#: index.docbook:27
+msgid "Employer/Employee"
+msgstr "éç¨è
/å¾æ¥å¡"
+
+#: index.docbook:29
+msgid "The following model of the relationship between <literal>Employer</literal> and <literal>Employee</literal> uses an actual entity class (<literal>Employment</literal>) to represent the association. This is done because there might be more than one period of employment for the same two parties. Components are used to model monetary values and employee names."
+msgstr "<literal>Employer</literal> 㨠<literal>Employee</literal> ã®é¢ä¿ã表ã以ä¸ã®ã¢ãã«ã¯ã é¢é£ã®è¡¨ç¾ã«å®éã®ã¨ã³ãã£ãã£ã¯ã©ã¹ï¼ <literal>Employment</literal> ï¼ ã使ãã¾ãã ãªããªããåã2ã¤ã®ãã¼ãã£ã«è¤æ°ã®æééç¨ãããã¨ãããã¨ãããããããã§ãã ãéã®å¤ã¨å¾æ¥å¡ã®ååãã¢ãã«åããããã«ã³ã³ãã¼ãã³ãã使ã£ã¦ãã¾ãã"
+
+#: index.docbook:46
+msgid "Heres a possible mapping document:"
+msgstr "ãããã³ã°ããã¥ã¡ã³ãã®ä¸ä¾ã§ãï¼"
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " \n"
+ " <class name=\"Employer\" table=\"employers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employer_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employment\" table=\"employment_periods\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employment_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"startDate\" column=\"start_date\"/>\n"
+ " <property name=\"endDate\" column=\"end_date\"/>\n"
+ "\n"
+ " <component name=\"hourlyRate\" class=\"MonetaryAmount\">\n"
+ " <property name=\"amount\">\n"
+ " <column name=\"hourly_rate\" sql-type=\"NUMERIC(12, 2)\"/>\n"
+ " </property>\n"
+ " <property name=\"currency\" length=\"12\"/>\n"
+ " </component>\n"
+ "\n"
+ " <many-to-one name=\"employer\" column=\"employer_id\" not-null=\"true\"/>\n"
+ " <many-to-one name=\"employee\" column=\"employee_id\" not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employee\" table=\"employees\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employee_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"taxfileNumber\"/>\n"
+ " <component name=\"name\" class=\"Name\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </component>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ "
+\n"
+ " <class name=\"Employer\" table=\"employers\">
+\n"
+ " <id name=\"id\">
+\n"
+ " <generator class=\"sequence\">
+\n"
+ " <param name=\"sequence\">employer_id_seq</param>
+\n"
+ " </generator>
+\n"
+ " </id>
+\n"
+ " <property name=\"name\"/>
+\n"
+ " </class>
+\n"
+ "
+\n"
+ " <class name=\"Employment\" table=\"employment_periods\">
+\n"
+ "
+\n"
+ " <id name=\"id\">
+\n"
+ " <generator class=\"sequence\">
+\n"
+ " <param name=\"sequence\">employment_id_seq</param>
+\n"
+ " </generator>
+\n"
+ " </id>
+\n"
+ " <property name=\"startDate\" column=\"start_date\"/>
+\n"
+ " <property name=\"endDate\" column=\"end_date\"/>
+\n"
+ "
+\n"
+ " <component name=\"hourlyRate\" class=\"MonetaryAmount\">
+\n"
+ " <property name=\"amount\">
+\n"
+ " <column name=\"hourly_rate\" sql-type=\"NUMERIC(12, 2)\"/>
+\n"
+ " </property>
+\n"
+ " <property name=\"currency\" length=\"12\"/>
+\n"
+ " </component>
+\n"
+ "
+\n"
+ " <many-to-one name=\"employer\" column=\"employer_id\" not-null=\"true\"/>
+\n"
+ " <many-to-one name=\"employee\" column=\"employee_id\" not-null=\"true\"/>
+\n"
+ "
+\n"
+ " </class>
+\n"
+ "
+\n"
+ " <class name=\"Employee\" table=\"employees\">
+\n"
+ " <id name=\"id\">
+\n"
+ " <generator class=\"sequence\">
+\n"
+ " <param name=\"sequence\">employee_id_seq</param>
+\n"
+ " </generator>
+\n"
+ " </id>
+\n"
+ " <property name=\"taxfileNumber\"/>
+\n"
+ " <component name=\"name\" class=\"Name\">
+\n"
+ " <property name=\"firstName\"/>
+\n"
+ " <property name=\"initial\"/>
+\n"
+ " <property name=\"lastName\"/>
+\n"
+ " </component>
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:52
+msgid "And heres the table schema generated by <literal>SchemaExport</literal>."
+msgstr "<literal>SchemaExport</literal> ã§çæãããã¼ãã«ã¹ãã¼ãã§ãã"
+
+#: index.docbook:56
+msgid ""
+ "<![CDATA[create table employers (\n"
+ " id BIGINT not null, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employment_periods (\n"
+ " id BIGINT not null,\n"
+ " hourly_rate NUMERIC(12, 2),\n"
+ " currency VARCHAR(12), \n"
+ " employee_id BIGINT not null, \n"
+ " employer_id BIGINT not null, \n"
+ " end_date TIMESTAMP, \n"
+ " start_date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employees (\n"
+ " id BIGINT not null, \n"
+ " firstName VARCHAR(255), \n"
+ " initial CHAR(1), \n"
+ " lastName VARCHAR(255), \n"
+ " taxfileNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK0 foreign key (employer_id) references employers\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK1 foreign key (employee_id) references employees\n"
+ "create sequence employee_id_seq\n"
+ "create sequence employment_id_seq\n"
+ "create sequence employer_id_seq]]>"
+msgstr ""
+ "<![CDATA[create table employers (
+\n"
+ " id BIGINT not null,
+\n"
+ " name VARCHAR(255),
+\n"
+ " primary key (id)
+\n"
+ ")
+\n"
+ "
+\n"
+ "create table employment_periods (
+\n"
+ " id BIGINT not null,
+\n"
+ " hourly_rate NUMERIC(12, 2),
+\n"
+ " currency VARCHAR(12),
+\n"
+ " employee_id BIGINT not null,
+\n"
+ " employer_id BIGINT not null,
+\n"
+ " end_date TIMESTAMP,
+\n"
+ " start_date TIMESTAMP,
+\n"
+ " primary key (id)
+\n"
+ ")
+\n"
+ "
+\n"
+ "create table employees (
+\n"
+ " id BIGINT not null,
+\n"
+ " firstName VARCHAR(255),
+\n"
+ " initial CHAR(1),
+\n"
+ " lastName VARCHAR(255),
+\n"
+ " taxfileNumber VARCHAR(255),
+\n"
+ " primary key (id)
+\n"
+ ")
+\n"
+ "
+\n"
+ "alter table employment_periods
+\n"
+ " add constraint employment_periodsFK0 foreign key (employer_id) references employers
+\n"
+ "alter table employment_periods
+\n"
+ " add constraint employment_periodsFK1 foreign key (employee_id) references employees
+\n"
+ "create sequence employee_id_seq
+\n"
+ "create sequence employment_id_seq
+\n"
+ "create sequence employer_id_seq]]>"
+
+#: index.docbook:61
+msgid "Author/Work"
+msgstr "ä½è
/ä½å"
+
+#: index.docbook:63
+msgid "Consider the following model of the relationships between <literal>Work</literal>, <literal>Author</literal> and <literal>Person</literal>. We represent the relationship between <literal>Work</literal> and <literal>Author</literal> as a many-to-many association. We choose to represent the relationship between <literal>Author</literal> and <literal>Person</literal> as one-to-one association. Another possibility would be to have <literal>Author</literal> extend <literal>Person</literal>."
+msgstr "<literal>Work</literal> , <literal>Author</literal> ãã㦠<literal>Person</literal> ã®é¢ä¿ã表ã以ä¸ã®ã¢ãã«ãèãã¦ã¿ã¦ãã ããã <literal>Work</literal> 㨠<literal>Author</literal> ã®é¢ä¿ãå¤å¯¾å¤é¢é£ã§è¡¨ãã¦ãã¾ãã <literal>Author</literal> 㨠<literal>Person</literal> ã®é¢ä¿ã¯ä¸å¯¾ä¸é¢é£ã¨ãã¦è¡¨ãã¦ãã¾ãã ä»ã«ã¯ <literal>Author</literal> ã <literal>Person</literal> ãæ¡å¼µããã¨ããæ¹æ³ãããã¾ãã"
+
+#: index.docbook:81
+msgid "The following mapping document correctly represents these relationships:"
+msgstr "以ä¸ã®ãããã³ã°ããã¥ã¡ã³ãã¯ãã®ãããªé¢ä¿ãæ£ç¢ºã«è¡¨ç¾ãã¦ãã¾ãã"
+
+#: index.docbook:85
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Work\" table=\"works\" discriminator-value=\"W\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"type\" type=\"character\"/>\n"
+ "\n"
+ " <property name=\"title\"/>\n"
+ " <set name=\"authors\" table=\"author_work\">\n"
+ " <key column name=\"work_id\"/>\n"
+ " <many-to-many class=\"Author\" column name=\"author_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"Book\" discriminator-value=\"B\">\n"
+ " <property name=\"text\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " <subclass name=\"Song\" discriminator-value=\"S\">\n"
+ " <property name=\"tempo\"/>\n"
+ " <property name=\"genre\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Author\" table=\"authors\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <!-- The Author must have the same identifier as the Person -->\n"
+ " <generator class=\"assigned\"/> \n"
+ " </id>\n"
+ "\n"
+ " <property name=\"alias\"/>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "\n"
+ " <set name=\"works\" table=\"author_work\" inverse=\"true\">\n"
+ " <key column=\"author_id\"/>\n"
+ " <many-to-many class=\"Work\" column=\"work_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Person\" table=\"persons\">\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ "
+\n"
+ " <class name=\"Work\" table=\"works\" discriminator-value=\"W\">
+\n"
+ "
+\n"
+ " <id name=\"id\" column=\"id\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <discriminator column=\"type\" type=\"character\"/>
+\n"
+ "
+\n"
+ " <property name=\"title\"/>
+\n"
+ " <set name=\"authors\" table=\"author_work\">
+\n"
+ " <key column name=\"work_id\"/>
+\n"
+ " <many-to-many class=\"Author\" column name=\"author_id\"/>
+\n"
+ " </set>
+\n"
+ "
+\n"
+ " <subclass name=\"Book\" discriminator-value=\"B\">
+\n"
+ " <property name=\"text\"/>
+\n"
+ " </subclass>
+\n"
+ "
+\n"
+ " <subclass name=\"Song\" discriminator-value=\"S\">
+\n"
+ " <property name=\"tempo\"/>
+\n"
+ " <property name=\"genre\"/>
+\n"
+ " </subclass>
+\n"
+ "
+\n"
+ " </class>
+\n"
+ "
+\n"
+ " <class name=\"Author\" table=\"authors\">
+\n"
+ "
+\n"
+ " <id name=\"id\" column=\"id\">
+\n"
+ " <!-- The Author must have the same identifier as the Person -->
+\n"
+ " <generator class=\"assigned\"/>
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <property name=\"alias\"/>
+\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>
+\n"
+ "
+\n"
+ " <set name=\"works\" table=\"author_work\" inverse=\"true\">
+\n"
+ " <key column=\"author_id\"/>
+\n"
+ " <many-to-many class=\"Work\" column=\"work_id\"/>
+\n"
+ " </set>
+\n"
+ "
+\n"
+ " </class>
+\n"
+ "
+\n"
+ " <class name=\"Person\" table=\"persons\">
+\n"
+ " <id name=\"id\" column=\"id\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <property name=\"name\"/>
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:87
+msgid "There are four tables in this mapping. <literal>works</literal>, <literal>authors</literal> and <literal>persons</literal> hold work, author and person data respectively. <literal>author_work</literal> is an association table linking authors to works. Heres the table schema, as generated by <literal>SchemaExport</literal>."
+msgstr "ãã®ãããã³ã°ã«ã¯4ã¤ã®ãã¼ãã«ãããã¾ãã <literal>works</literal> , <literal>authors</literal> , <literal>persons</literal> ã¯ãããããä»äºãä½è
ã人ã®ãã¼ã¿ãä¿æãã¾ãã <literal>author_work</literal> ã¯ä½è
ã¨ä½åããªã³ã¯ããé¢é£ãã¼ãã«ã§ãã 以ä¸ã¯ <literal>SchemaExport</literal> ã§çæãããã¼ãã«ã¹ãã¼ãã§ãã"
+
+#: index.docbook:95
+msgid ""
+ "<![CDATA[create table works (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " tempo FLOAT, \n"
+ " genre VARCHAR(255), \n"
+ " text INTEGER, \n"
+ " title VARCHAR(255), \n"
+ " type CHAR(1) not null, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table author_work (\n"
+ " author_id BIGINT not null, \n"
+ " work_id BIGINT not null, \n"
+ " primary key (work_id, author_id)\n"
+ ")\n"
+ "\n"
+ "create table authors (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " alias VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table persons (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table authors \n"
+ " add constraint authorsFK0 foreign key (id) references persons\n"
+ "alter table author_work \n"
+ " add constraint author_workFK0 foreign key (author_id) references authors\n"
+ "alter table author_work\n"
+ " add constraint author_workFK1 foreign key (work_id) references works]]>"
+msgstr ""
+ "<![CDATA[create table works (
+\n"
+ " id BIGINT not null generated by default as identity,
+\n"
+ " tempo FLOAT,
+\n"
+ " genre VARCHAR(255),
+\n"
+ " text INTEGER,
+\n"
+ " title VARCHAR(255),
+\n"
+ " type CHAR(1) not null,
+\n"
+ " primary key (id)
+\n"
+ ")
+\n"
+ "
+\n"
+ "create table author_work (
+\n"
+ " author_id BIGINT not null,
+\n"
+ " work_id BIGINT not null,
+\n"
+ " primary key (work_id, author_id)
+\n"
+ ")
+\n"
+ "
+\n"
+ "create table authors (
+\n"
+ " id BIGINT not null generated by default as identity,
+\n"
+ " alias VARCHAR(255),
+\n"
+ " primary key (id)
+\n"
+ ")
+\n"
+ "
+\n"
+ "create table persons (
+\n"
+ " id BIGINT not null generated by default as identity,
+\n"
+ " name VARCHAR(255),
+\n"
+ " primary key (id)
+\n"
+ ")
+\n"
+ "
+\n"
+ "alter table authors
+\n"
+ " add constraint authorsFK0 foreign key (id) references persons
+\n"
+ "alter table author_work
+\n"
+ " add constraint author_workFK0 foreign key (author_id) references authors
+\n"
+ "alter table author_work
+\n"
+ " add constraint author_workFK1 foreign key (work_id) references works]]>"
+
+#: index.docbook:100
+msgid "Customer/Order/Product"
+msgstr "顧客/注æ/製å"
+
+#: index.docbook:102
+msgid "Now consider a model of the relationships between <literal>Customer</literal>, <literal>Order</literal> and <literal>LineItem</literal> and <literal>Product</literal>. There is a one-to-many association between <literal>Customer</literal> and <literal>Order</literal>, but how should we represent <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal>? I've chosen to map <literal>LineItem</literal> as an association class representing the many-to-many association between <literal>Order</literal> and <literal>Product</literal>. In Hibernate, this is called a composite element."
+msgstr "ãã¦ã <literal>Customer</literal> , <literal>Order</literal> , <literal>LineItem</literal> <literal>Product</literal> ã®é¢ä¿ã表ãã¢ãã«ãèãã¦ã¿ã¾ãããã <literal>Customer</literal> 㨠<literal>Order</literal> ã¯ä¸å¯¾å¤ã®é¢é£ã§ããã <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal> ã¯ã©ã®ããã«è¡¨ç¾ããã¹ãã§ããããï¼ <literal>LineItem</literal> ãã<literal>Order</literal> 㨠<literal>Product</literal> ã®å¤å¯¾å¤é¢é£ã表ç¾ããé¢é£ã¯ã©ã¹ã¨ãã¦ãããã³ã°ãã¾ããã Hibernateã§ã¯ãããã³ã³ãã¸ããè¦ç´ ã¨å¼ã³ã¾ãã"
+
+#: index.docbook:122
+msgid "The mapping document:"
+msgstr "ãããã³ã°ããã¥ã¡ã³ãï¼"
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Customer\" table=\"customers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <set name=\"orders\" inverse=\"true\">\n"
+ " <key column=\"customer_id\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Order\" table=\"orders\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\"/>\n"
+ " <many-to-one name=\"customer\" column=\"customer_id\"/>\n"
+ " <list name=\"lineItems\" table=\"line_items\">\n"
+ " <key column=\"order_id\"/>\n"
+ " <list-index column=\"line_number\"/>\n"
+ " <composite-element class=\"LineItem\">\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"product\" column=\"product_id\"/>\n"
+ " </composite-element>\n"
+ " </list>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Product\" table=\"products\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"serialNumber\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ "
+\n"
+ " <class name=\"Customer\" table=\"customers\">
+\n"
+ " <id name=\"id\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <property name=\"name\"/>
+\n"
+ " <set name=\"orders\" inverse=\"true\">
+\n"
+ " <key column=\"customer_id\"/>
+\n"
+ " <one-to-many class=\"Order\"/>
+\n"
+ " </set>
+\n"
+ " </class>
+\n"
+ "
+\n"
+ " <class name=\"Order\" table=\"orders\">
+\n"
+ " <id name=\"id\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <property name=\"date\"/>
+\n"
+ " <many-to-one name=\"customer\" column=\"customer_id\"/>
+\n"
+ " <list name=\"lineItems\" table=\"line_items\">
+\n"
+ " <key column=\"order_id\"/>
+\n"
+ " <list-index column=\"line_number\"/>
+\n"
+ " <composite-element class=\"LineItem\">
+\n"
+ " <property name=\"quantity\"/>
+\n"
+ " <many-to-one name=\"product\" column=\"product_id\"/>
+\n"
+ " </composite-element>
+\n"
+ " </list>
+\n"
+ " </class>
+\n"
+ "
+\n"
+ " <class name=\"Product\" table=\"products\">
+\n"
+ " <id name=\"id\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <property name=\"serialNumber\"/>
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:128
+msgid "<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> and <literal>products</literal> hold customer, order, order line item and product data respectively. <literal>line_items</literal> also acts as an association table linking orders with products."
+msgstr "<literal>customers</literal> , <literal>orders</literal> , <literal>line_items</literal> , <literal>products</literal> ã¯ããããã顧客ã注æã注ææç´°ã製åã®ãã¼ã¿ãä¿æãã¾ãã <literal>line_items</literal> ã¯æ³¨æã¨è£½åããªã³ã¯ããé¢é£ãã¼ãã«ã¨ãã¦ãåãã¾ãã"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[create table customers (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table orders (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " customer_id BIGINT, \n"
+ " date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table line_items (\n"
+ " line_number INTEGER not null, \n"
+ " order_id BIGINT not null, \n"
+ " product_id BIGINT, \n"
+ " quantity INTEGER, \n"
+ " primary key (order_id, line_number)\n"
+ ")\n"
+ "\n"
+ "create table products (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " serialNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table orders \n"
+ " add constraint ordersFK0 foreign key (customer_id) references customers\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK0 foreign key (product_id) references products\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK1 foreign key (order_id) references orders]]>"
+msgstr ""
+ "<![CDATA[create table customers (
+\n"
+ " id BIGINT not null generated by default as identity,
+\n"
+ " name VARCHAR(255),
+\n"
+ " primary key (id)
+\n"
+ ")
+\n"
+ "
+\n"
+ "create table orders (
+\n"
+ " id BIGINT not null generated by default as identity,
+\n"
+ " customer_id BIGINT,
+\n"
+ " date TIMESTAMP,
+\n"
+ " primary key (id)
+\n"
+ ")
+\n"
+ "
+\n"
+ "create table line_items (
+\n"
+ " line_number INTEGER not null,
+\n"
+ " order_id BIGINT not null,
+\n"
+ " product_id BIGINT,
+\n"
+ " quantity INTEGER,
+\n"
+ " primary key (order_id, line_number)
+\n"
+ ")
+\n"
+ "
+\n"
+ "create table products (
+\n"
+ " id BIGINT not null generated by default as identity,
+\n"
+ " serialNumber VARCHAR(255),
+\n"
+ " primary key (id)
+\n"
+ ")
+\n"
+ "
+\n"
+ "alter table orders
+\n"
+ " add constraint ordersFK0 foreign key (customer_id) references customers
+\n"
+ "alter table line_items
+\n"
+ " add constraint line_itemsFK0 foreign key (product_id) references products
+\n"
+ "alter table line_items
+\n"
+ " add constraint line_itemsFK1 foreign key (order_id) references orders]]>"
+
+#: index.docbook:140
+msgid "Miscellaneous example mappings"
+msgstr "種ã
éå¤ãªãããã³ã°ä¾"
+
+#: index.docbook:142
+msgid "These examples are all taken from the Hibernate test suite. You will find many other useful example mappings there. Look in the <literal>test</literal> folder of the Hibernate distribution."
+msgstr "ããã«ããä¾ã¯ãã¹ã¦Hibernateã®ãã¹ãã¹ã¤ã¼ãããåãã¾ããã ããã«ã¯ãä»ã«ãããããã®ãããã³ã°ã®ä¾ãããã¾ãã Hibernateãã£ã¹ããªãã¥ã¼ã·ã§ã³ã® <literal>test</literal> ãã©ã«ããè¦ã¦ãã ããã"
+
+#: index.docbook:148
+msgid "TODO: put words around this stuff"
+msgstr "TODO: ããã«æç« ãåãã"
+
+#: index.docbook:151
+msgid "\"Typed\" one-to-one association"
+msgstr "ãåä»ãããããä¸å¯¾ä¸é¢é£"
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"name\"/>\n"
+ " <one-to-one name=\"address\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'HOME'</formula>\n"
+ " </one-to-one>\n"
+ " <one-to-one name=\"mailingAddress\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'MAILING'</formula>\n"
+ " </one-to-one>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\" batch-size=\"2\" \n"
+ " check=\"addressType in ('MAILING', 'HOME', 'BUSINESS')\">\n"
+ " <composite-id>\n"
+ " <key-many-to-one name=\"person\" \n"
+ " column=\"personName\"/>\n"
+ " <key-property name=\"type\" \n"
+ " column=\"addressType\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"street\" type=\"text\"/>\n"
+ " <property name=\"state\"/>\n"
+ " <property name=\"zip\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <id name=\"name\"/>
+\n"
+ " <one-to-one name=\"address\"
+\n"
+ " cascade=\"all\">
+\n"
+ " <formula>name</formula>
+\n"
+ " <formula>'HOME'</formula>
+\n"
+ " </one-to-one>
+\n"
+ " <one-to-one name=\"mailingAddress\"
+\n"
+ " cascade=\"all\">
+\n"
+ " <formula>name</formula>
+\n"
+ " <formula>'MAILING'</formula>
+\n"
+ " </one-to-one>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\" batch-size=\"2\"
+\n"
+ " check=\"addressType in ('MAILING', 'HOME', 'BUSINESS')\">
+\n"
+ " <composite-id>
+\n"
+ " <key-many-to-one name=\"person\"
+\n"
+ " column=\"personName\"/>
+\n"
+ " <key-property name=\"type\"
+\n"
+ " column=\"addressType\"/>
+\n"
+ " </composite-id>
+\n"
+ " <property name=\"street\" type=\"text\"/>
+\n"
+ " <property name=\"state\"/>
+\n"
+ " <property name=\"zip\"/>
+\n"
+ "</class>]]>"
+
+#: index.docbook:156
+msgid "Composite key example"
+msgstr "è¤åãã¼ã®ä¾"
+
+#: index.docbook:157
+msgid ""
+ "<![CDATA[<class name=\"Customer\">\n"
+ "\n"
+ " <id name=\"customerId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\" not-null=\"true\" length=\"100\"/>\n"
+ " <property name=\"address\" not-null=\"true\" length=\"200\"/>\n"
+ "\n"
+ " <list name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key column=\"customerId\"/>\n"
+ " <index column=\"orderNumber\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </list>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Order\" table=\"CustomerOrder\" lazy=\"true\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ " <synchronize table=\"Product\"/>\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"Order$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"orderDate\" \n"
+ " type=\"calendar_date\"\n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <property name=\"total\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity*p.price) \n"
+ " from LineItem li, Product p \n"
+ " where li.productId = p.productId \n"
+ " and li.customerId = customerId \n"
+ " and li.orderNumber = orderNumber )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ " <many-to-one name=\"customer\"\n"
+ " column=\"customerId\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <bag name=\"lineItems\"\n"
+ " fetch=\"join\" \n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key>\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"LineItem\"/>\n"
+ " </bag>\n"
+ " \n"
+ "</class>\n"
+ " \n"
+ "<class name=\"LineItem\">\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"LineItem$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " <key-property name=\"productId\" length=\"10\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"quantity\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\">\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </many-to-one>\n"
+ " \n"
+ " <many-to-one name=\"product\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"\n"
+ " column=\"productId\"/>\n"
+ " \n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Product\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ "\n"
+ " <id name=\"productId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"description\" \n"
+ " not-null=\"true\" \n"
+ " length=\"200\"/>\n"
+ " <property name=\"price\" length=\"3\"/>\n"
+ " <property name=\"numberAvailable\"/>\n"
+ " \n"
+ " <property name=\"numberOrdered\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity) \n"
+ " from LineItem li \n"
+ " where li.productId = productId )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\">
+\n"
+ "
+\n"
+ " <id name=\"customerId\"
+\n"
+ " length=\"10\">
+\n"
+ " <generator class=\"assigned\"/>
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <property name=\"name\" not-null=\"true\" length=\"100\"/>
+\n"
+ " <property name=\"address\" not-null=\"true\" length=\"200\"/>
+\n"
+ "
+\n"
+ " <list name=\"orders\"
+\n"
+ " inverse=\"true\"
+\n"
+ " cascade=\"save-update\">
+\n"
+ " <key column=\"customerId\"/>
+\n"
+ " <index column=\"orderNumber\"/>
+\n"
+ " <one-to-many class=\"Order\"/>
+\n"
+ " </list>
+\n"
+ "
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Order\" table=\"CustomerOrder\" lazy=\"true\">
+\n"
+ " <synchronize table=\"LineItem\"/>
+\n"
+ " <synchronize table=\"Product\"/>
+\n"
+ "
+\n"
+ " <composite-id name=\"id\"
+\n"
+ " class=\"Order$Id\">
+\n"
+ " <key-property name=\"customerId\" length=\"10\"/>
+\n"
+ " <key-property name=\"orderNumber\"/>
+\n"
+ " </composite-id>
+\n"
+ "
+\n"
+ " <property name=\"orderDate\"
+\n"
+ " type=\"calendar_date\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ "
+\n"
+ " <property name=\"total\">
+\n"
+ " <formula>
+\n"
+ " ( select sum(li.quantity*p.price)
+\n"
+ " from LineItem li, Product p
+\n"
+ " where li.productId = p.productId
+\n"
+ " and li.customerId = customerId
+\n"
+ " and li.orderNumber = orderNumber )
+\n"
+ " </formula>
+\n"
+ " </property>
+\n"
+ "
+\n"
+ " <many-to-one name=\"customer\"
+\n"
+ " column=\"customerId\"
+\n"
+ " insert=\"false\"
+\n"
+ " update=\"false\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ "
+\n"
+ " <bag name=\"lineItems\"
+\n"
+ " fetch=\"join\"
+\n"
+ " inverse=\"true\"
+\n"
+ " cascade=\"save-update\">
+\n"
+ " <key>
+\n"
+ " <column name=\"customerId\"/>
+\n"
+ " <column name=\"orderNumber\"/>
+\n"
+ " </key>
+\n"
+ " <one-to-many class=\"LineItem\"/>
+\n"
+ " </bag>
+\n"
+ "
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"LineItem\">
+\n"
+ "
+\n"
+ " <composite-id name=\"id\"
+\n"
+ " class=\"LineItem$Id\">
+\n"
+ " <key-property name=\"customerId\" length=\"10\"/>
+\n"
+ " <key-property name=\"orderNumber\"/>
+\n"
+ " <key-property name=\"productId\" length=\"10\"/>
+\n"
+ " </composite-id>
+\n"
+ "
+\n"
+ " <property name=\"quantity\"/>
+\n"
+ "
+\n"
+ " <many-to-one name=\"order\"
+\n"
+ " insert=\"false\"
+\n"
+ " update=\"false\"
+\n"
+ " not-null=\"true\">
+\n"
+ " <column name=\"customerId\"/>
+\n"
+ " <column name=\"orderNumber\"/>
+\n"
+ " </many-to-one>
+\n"
+ "
+\n"
+ " <many-to-one name=\"product\"
+\n"
+ " insert=\"false\"
+\n"
+ " update=\"false\"
+\n"
+ " not-null=\"true\"
+\n"
+ " column=\"productId\"/>
+\n"
+ "
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Product\">
+\n"
+ " <synchronize table=\"LineItem\"/>
+\n"
+ "
+\n"
+ " <id name=\"productId\"
+\n"
+ " length=\"10\">
+\n"
+ " <generator class=\"assigned\"/>
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <property name=\"description\"
+\n"
+ " not-null=\"true\"
+\n"
+ " length=\"200\"/>
+\n"
+ " <property name=\"price\" length=\"3\"/>
+\n"
+ " <property name=\"numberAvailable\"/>
+\n"
+ "
+\n"
+ " <property name=\"numberOrdered\">
+\n"
+ " <formula>
+\n"
+ " ( select sum(li.quantity)
+\n"
+ " from LineItem li
+\n"
+ " where li.productId = productId )
+\n"
+ " </formula>
+\n"
+ " </property>
+\n"
+ "
+\n"
+ "</class>]]>"
+
+#: index.docbook:161
+msgid "Many-to-many with shared composite key attribute"
+msgstr "è¤åãã¼å±æ§ãå
±æããå¤å¯¾å¤"
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[<class name=\"User\" table=\"`User`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <set name=\"groups\" table=\"UserGroup\">\n"
+ " <key>\n"
+ " <column name=\"userName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"Group\">\n"
+ " <column name=\"groupName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ " \n"
+ "<class name=\"Group\" table=\"`Group`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"description\"/>\n"
+ " <set name=\"users\" table=\"UserGroup\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"groupName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"User\">\n"
+ " <column name=\"userName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[<class name=\"User\" table=\"`User`\">
+\n"
+ " <composite-id>
+\n"
+ " <key-property name=\"name\"/>
+\n"
+ " <key-property name=\"org\"/>
+\n"
+ " </composite-id>
+\n"
+ " <set name=\"groups\" table=\"UserGroup\">
+\n"
+ " <key>
+\n"
+ " <column name=\"userName\"/>
+\n"
+ " <column name=\"org\"/>
+\n"
+ " </key>
+\n"
+ " <many-to-many class=\"Group\">
+\n"
+ " <column name=\"groupName\"/>
+\n"
+ " <formula>org</formula>
+\n"
+ " </many-to-many>
+\n"
+ " </set>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Group\" table=\"`Group`\">
+\n"
+ " <composite-id>
+\n"
+ " <key-property name=\"name\"/>
+\n"
+ " <key-property name=\"org\"/>
+\n"
+ " </composite-id>
+\n"
+ " <property name=\"description\"/>
+\n"
+ " <set name=\"users\" table=\"UserGroup\" inverse=\"true\">
+\n"
+ " <key>
+\n"
+ " <column name=\"groupName\"/>
+\n"
+ " <column name=\"org\"/>
+\n"
+ " </key>
+\n"
+ " <many-to-many class=\"User\">
+\n"
+ " <column name=\"userName\"/>
+\n"
+ " <formula>org</formula>
+\n"
+ " </many-to-many>
+\n"
+ " </set>
+\n"
+ "</class>
+\n"
+ "]]>"
+
+#: index.docbook:166
+msgid "Content based discrimination"
+msgstr "discriminationã«åºã¥ãå
容"
+
+#: index.docbook:167
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " discriminator-value=\"P\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"person_id\" \n"
+ " unsaved-value=\"0\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " \n"
+ " \n"
+ " <discriminator \n"
+ " type=\"character\">\n"
+ " <formula>\n"
+ " case \n"
+ " when title is not null then 'E' \n"
+ " when salesperson is not null then 'C' \n"
+ " else 'P' \n"
+ " end\n"
+ " </formula>\n"
+ " </discriminator>\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"\n"
+ " length=\"80\"/>\n"
+ " \n"
+ " <property name=\"sex\" \n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ " \n"
+ " <component name=\"address\">\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </component>\n"
+ " \n"
+ " <subclass name=\"Employee\" \n"
+ " discriminator-value=\"E\">\n"
+ " <property name=\"title\"\n"
+ " length=\"20\"/>\n"
+ " <property name=\"salary\"/>\n"
+ " <many-to-one name=\"manager\"/>\n"
+ " </subclass>\n"
+ " \n"
+ " <subclass name=\"Customer\" \n"
+ " discriminator-value=\"C\">\n"
+ " <property name=\"comments\"/>\n"
+ " <many-to-one name=\"salesperson\"/>\n"
+ " </subclass>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\"
+\n"
+ " discriminator-value=\"P\">
+\n"
+ "
+\n"
+ " <id name=\"id\"
+\n"
+ " column=\"person_id\"
+\n"
+ " unsaved-value=\"0\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ "
+\n"
+ "
+\n"
+ " <discriminator
+\n"
+ " type=\"character\">
+\n"
+ " <formula>
+\n"
+ " case
+\n"
+ " when title is not null then 'E'
+\n"
+ " when salesperson is not null then 'C'
+\n"
+ " else 'P'
+\n"
+ " end
+\n"
+ " </formula>
+\n"
+ " </discriminator>
+\n"
+ "
+\n"
+ " <property name=\"name\"
+\n"
+ " not-null=\"true\"
+\n"
+ " length=\"80\"/>
+\n"
+ "
+\n"
+ " <property name=\"sex\"
+\n"
+ " not-null=\"true\"
+\n"
+ " update=\"false\"/>
+\n"
+ "
+\n"
+ " <component name=\"address\">
+\n"
+ " <property name=\"address\"/>
+\n"
+ " <property name=\"zip\"/>
+\n"
+ " <property name=\"country\"/>
+\n"
+ " </component>
+\n"
+ "
+\n"
+ " <subclass name=\"Employee\"
+\n"
+ " discriminator-value=\"E\">
+\n"
+ " <property name=\"title\"
+\n"
+ " length=\"20\"/>
+\n"
+ " <property name=\"salary\"/>
+\n"
+ " <many-to-one name=\"manager\"/>
+\n"
+ " </subclass>
+\n"
+ "
+\n"
+ " <subclass name=\"Customer\"
+\n"
+ " discriminator-value=\"C\">
+\n"
+ " <property name=\"comments\"/>
+\n"
+ " <many-to-one name=\"salesperson\"/>
+\n"
+ " </subclass>
+\n"
+ "
+\n"
+ "</class>]]>"
+
+#: index.docbook:171
+msgid "Associations on alternate keys"
+msgstr "代æ¿ãã¼ã®é¢é£"
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"name\" length=\"100\"/>\n"
+ " \n"
+ " <one-to-one name=\"address\" \n"
+ " property-ref=\"person\"\n"
+ " cascade=\"all\"\n"
+ " fetch=\"join\"/>\n"
+ " \n"
+ " <set name=\"accounts\" \n"
+ " inverse=\"true\">\n"
+ " <key column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " <one-to-many class=\"Account\"/>\n"
+ " </set>\n"
+ " \n"
+ " <property name=\"userId\" length=\"8\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"address\" length=\"300\"/>\n"
+ " <property name=\"zip\" length=\"5\"/>\n"
+ " <property name=\"country\" length=\"25\"/>\n"
+ " <many-to-one name=\"person\" unique=\"true\" not-null=\"true\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Account\">\n"
+ " <id name=\"accountId\" length=\"32\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " \n"
+ " <many-to-one name=\"user\"\n"
+ " column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " \n"
+ " <property name=\"type\" not-null=\"true\"/>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ "
+\n"
+ " <id name=\"id\">
+\n"
+ " <generator class=\"hilo\"/>
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <property name=\"name\" length=\"100\"/>
+\n"
+ "
+\n"
+ " <one-to-one name=\"address\"
+\n"
+ " property-ref=\"person\"
+\n"
+ " cascade=\"all\"
+\n"
+ " fetch=\"join\"/>
+\n"
+ "
+\n"
+ " <set name=\"accounts\"
+\n"
+ " inverse=\"true\">
+\n"
+ " <key column=\"userId\"
+\n"
+ " property-ref=\"userId\"/>
+\n"
+ " <one-to-many class=\"Account\"/>
+\n"
+ " </set>
+\n"
+ "
+\n"
+ " <property name=\"userId\" length=\"8\"/>
+\n"
+ "
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Address\">
+\n"
+ "
+\n"
+ " <id name=\"id\">
+\n"
+ " <generator class=\"hilo\"/>
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <property name=\"address\" length=\"300\"/>
+\n"
+ " <property name=\"zip\" length=\"5\"/>
+\n"
+ " <property name=\"country\" length=\"25\"/>
+\n"
+ " <many-to-one name=\"person\" unique=\"true\" not-null=\"true\"/>
+\n"
+ "
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Account\">
+\n"
+ " <id name=\"accountId\" length=\"32\">
+\n"
+ " <generator class=\"uuid\"/>
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <many-to-one name=\"user\"
+\n"
+ " column=\"userId\"
+\n"
+ " property-ref=\"userId\"/>
+\n"
+ "
+\n"
+ " <property name=\"type\" not-null=\"true\"/>
+\n"
+ "
+\n"
+ "</class>]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/example_parentchild.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/example_parentchild.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/example_parentchild.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,401 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Parent/Child"
+msgstr "ä¾ï¼è¦ª/åä¾"
+
+#: index.docbook:7
+msgid "One of the very first things that new users try to do with Hibernate is to model a parent / child type relationship. There are two different approaches to this. For various reasons the most convenient approach, especially for new users, is to model both <literal>Parent</literal> and <literal>Child</literal> as entity classes with a <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a <literal><composite-element></literal>.) Now, it turns out that default semantics of a one to many association (in Hibernate) are much less close to the usual semantics of a parent / child relationship than those of a composite element mapping. We will explain how to use a <emphasis>bidirectional one to many association with cascades</emphasis> to model a parent / child relationship efficiently and elegantly. It's not at all difficult!"
+msgstr "æ°è¦ã¦ã¼ã¶ãHibernateã使ã£ã¦ã¾ãæåã«æ±ãã¢ãã«ã®ä¸ã¤ã«ã親ååã®ã¢ãã«åãããã¾ãã ãã®ã¢ãã«åã«ã¯äºã¤ã®ã¢ããã¼ããåå¨ãã¾ããã¨ãããæ°è¦ã¦ã¼ã¶ã«ã¨ã£ã¦ã ãã¾ãã¾ãªçç±ããæã便å©ã ã¨æãããã¢ããã¼ãã¯ã<literal>親</literal> ãã <literal>åä¾</literal> ã¸ã® <literal><one-to-many></literal> é¢é£ã«ãã <literal>親</literal> 㨠<literal>åä¾</literal> ã®ä¸¡æ¹ãã¨ã³ãã£ãã£ã¯ã©ã¹ã¨ãã¦ã¢ããªã³ã°ããæ¹æ³ã§ã ï¼ããä¸ã¤ã®æ¹æ³ã¯ã<literal>åä¾</literal> ã <literal><composite-element></literal> ã¨ãã¦å®ç¾©ãããã®ã§ãï¼ã ããã§ï¼Hibernateã«ãããï¼ä¸å¯¾å¤é¢é£ã®ããã©ã«ãã®ã»ãã³ãã£ã¯ã¹ããé常ã®è¤åè¦ç´ ã®ãããã³ã°ãããã 親åé¢ä¿ã®ã»ãã³ãã£ã¯ã¹ããé ããã¨ããããã¾ãã ããã§ã¯è¦ªåé¢ä¿ãå¹ççã!
ã¤ã¨ã¬ã¬ã³ãã«ã¢ããªã³ã°ããããã«ã <emphasis>ã«ã¹ã±ã¼ãæä½ã使ã£ãåæ¹åä¸å¯¾å¤é¢é£</emphasis> ã®æ±ãæ¹ã説æãã¾ããããã¯ã¾ã£ããé£ãããã®ã§ã¯ããã¾ããã"
+
+#: index.docbook:21
+msgid "A note about collections"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã«é¢ãã注æ"
+
+#: index.docbook:23
+msgid "Hibernate collections are considered to be a logical part of their owning entity; never of the contained entities. This is a crucial distinction! It has the following consequences:"
+msgstr "Hibernateã®ã³ã¬ã¯ã·ã§ã³ã¯èªèº«ã®ã¨ã³ãã£ãã£ã®è«ççãªé¨åã¨èãããã 決ãã¦å
å«ããã¨ã³ãã£ãã£ã®ãã®ã§ã¯ããã¾ãããããã¯è´å½çãªéãã§ãï¼ ããã¯ä»¥ä¸ã®ãããªçµæã«ãªãã¾ãï¼"
+
+#: index.docbook:30
+msgid "When we remove / add an object from / to a collection, the version number of the collection owner is incremented."
+msgstr "ãªãã¸ã§ã¯ããã³ã¬ã¯ã·ã§ã³ããåé¤ãã¾ãã¯ã³ã¬ã¯ã·ã§ã³ã«è¿½å ããã¨ãã ã³ã¬ã¯ã·ã§ã³ã®ãªã¼ãã¼ã®ãã¼ã¸ã§ã³çªå·ã¯ã¤ã³ã¯ãªã¡ã³ãããã¾ãã"
+
+#: index.docbook:36
+msgid "If an object that was removed from a collection is an instance of a value type (eg, a composite element), that object will cease to be persistent and its state will be completely removed from the database. Likewise, adding a value type instance to the collection will cause its state to be immediately persistent."
+msgstr "ããã³ã¬ã¯ã·ã§ã³ããåé¤ããããªãã¸ã§ã¯ããå¤åã®ã¤ã³ã¹ã¿ã³ã¹ ï¼ä¾ãã°ã³ã³ãã¸ããã¨ã¬ã¡ã³ã)ã ã£ããªãã°ããã®ãªãã¸ã§ã¯ãã¯æ°¸ç¶çã§ã¯ãªããªãã ãã®ç¶æ
ã¯ãã¼ã¿ãã¼ã¹ããå®å
¨ã«åé¤ããã¾ãã åãããã«ãå¤åã®ã¤ã³ã¹ã¿ã³ã¹ãã³ã¬ã¯ã·ã§ã³ã«è¿½å ããã¨ããã®ç¶æ
ã¯ããã«æ°¸ç¶çã«ãªãã¾ãã"
+
+#: index.docbook:44
+msgid "On the other hand, if an entity is removed from a collection (a one-to-many or many-to-many association), it will not be deleted, by default. This behaviour is completely consistent - a change to the internal state of another entity should not cause the associated entity to vanish! Likewise, adding an entity to a collection does not cause that entity to become persistent, by default."
+msgstr "ä¸æ¹ãããã¨ã³ãã£ãã£ãã³ã¬ã¯ã·ã§ã³ï¼ä¸å¯¾å¤ã¾ãã¯å¤å¯¾å¤é¢é£)ããåé¤ããã¦ãã ããã©ã«ãã§ã¯ããã¯åé¤ããã¾ããããã®åä½ã¯å®å
¨ã«ä¸è²«ãã¦ãã¾ãã ããªãã¡ãä»ã®ã¨ã³ãã£ãã£ã®å
é¨ç¶æ
ãå¤æ´ãã¦ããé¢é£ããã¨ã³ãã£ãã£ãæ¶æ»
ãã¹ãã§ã¯ãªãã¨ãããã¨ã§ãã åæ§ã«ãã¨ã³ãã£ãã£ãã³ã¬ã¯ã·ã§ã³ã«è¿½å ããã¦ããããã©ã«ãã§ã¯ãã®ã¨ã³ãã£ãã£ã¯æ°¸ç¶çã«ã¯ãªãã¾ããã"
+
+#: index.docbook:54
+msgid "Instead, the default behaviour is that adding an entity to a collection merely creates a link between the two entities, while removing it removes the link. This is very appropriate for all sorts of cases. Where it is not appropriate at all is the case of a parent / child relationship, where the life of the child is bound to the life cycle of the parent."
+msgstr "ãã®ä»£ããã«ãããã©ã«ãã®åä½ã§ã¯ãã¨ã³ãã£ãã£ãã³ã¬ã¯ã·ã§ã³ã«è¿½å ããã¨åã«äºã¤ã®ã¨ã³ãã£ãã£éã®ãªã³ã¯ãä½æãã ä¸æ¹ã¨ã³ãã£ãã£ãåé¤ããã¨ãªã³ã¯ãåé¤ãã¾ããããã¯ãã¹ã¦ã®ã±ã¼ã¹ã«ããã¦é常ã«é©åã§ãã ãããé©åã§ãªãã®ã¯è¦ª/åé¢ä¿ã®å ´åã§ãããã®å ´ååä¾ã®çåã¯è¦ªã®ã©ã¤ããµã¤ã¯ã«ã«å¶éãããããã§ãã"
+
+#: index.docbook:64
+msgid "Bidirectional one-to-many"
+msgstr "åæ¹åä¸å¯¾å¤"
+
+#: index.docbook:66
+msgid "Suppose we start with a simple <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>."
+msgstr "<literal>Parent</literal> ãã <literal>Child</literal> ã¸ã®åç´ãª <literal><one-to-many></literal> é¢é£ããå§ããã¨ãã¾ãã"
+
+#: index.docbook:71
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\">
+\n"
+ " <key column=\"parent_id\"/>
+\n"
+ " <one-to-many class=\"Child\"/>
+\n"
+ "</set>]]>"
+
+#: index.docbook:73
+msgid "If we were to execute the following code"
+msgstr "以ä¸ã®ã³ã¼ããå®è¡ããã¨ã"
+
+#: index.docbook:77
+msgid ""
+ "<![CDATA[Parent p = .....;\n"
+ "Child c = new Child();\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = .....;
+\n"
+ "Child c = new Child();
+\n"
+ "p.getChildren().add(c);
+\n"
+ "session.save(c);
+\n"
+ "session.flush();]]>"
+
+#: index.docbook:79
+msgid "Hibernate would issue two SQL statements:"
+msgstr "Hibernateã¯äºã¤ã®SQLæãçºè¡ãã¾ã:"
+
+#: index.docbook:85
+msgid "an <literal>INSERT</literal> to create the record for <literal>c</literal>"
+msgstr "<literal>c</literal>ã«å¯¾ããã¬ã³ã¼ããçæãã<literal>INSERT</literal>"
+
+#: index.docbook:88
+msgid "an <literal>UPDATE</literal> to create the link from <literal>p</literal> to <literal>c</literal>"
+msgstr "<literal>p</literal>ãã<literal>c</literal>ã¸ã®ãªã³ã¯ãä½æãã<literal>UPDATE</literal>"
+
+#: index.docbook:95
+msgid "This is not only inefficient, but also violates any <literal>NOT NULL</literal> constraint on the <literal>parent_id</literal> column. We can fix the nullability constraint violation by specifying <literal>not-null=\"true\"</literal> in the collection mapping:"
+msgstr "ããã¯éå¹ççãªã ãã§ã¯ãªãã<literal>parent_id</literal> ã«ã©ã ã«ãã㦠<literal>NOT NULL</literal> å¶ç´ã«éåãã¾ãã ã³ã¬ã¯ã·ã§ã³ã®ãããã³ã°ã§ <literal>not-null=\"true\"</literal> ã¨æå®ãããã¨ã§ãnullå¶ç´éåã解決ãããã¨ãã§ãã¾ã:"
+
+#: index.docbook:101
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\">
+\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>
+\n"
+ " <one-to-many class=\"Child\"/>
+\n"
+ "</set>]]>"
+
+#: index.docbook:103
+msgid "However, this is not the recommended solution."
+msgstr "ããããã®è§£æ±ºçã¯æ¨å¥¨ã§ãã¾ããã"
+
+#: index.docbook:106
+msgid "The underlying cause of this behaviour is that the link (the foreign key <literal>parent_id</literal>) from <literal>p</literal> to <literal>c</literal> is not considered part of the state of the <literal>Child</literal> object and is therefore not created in the <literal>INSERT</literal>. So the solution is to make the link part of the <literal>Child</literal> mapping."
+msgstr "ãã®åä½ã®æ ¹æ¬çãªåå ã¯ã<literal>p</literal> ãã <literal>c</literal> ã¸ã®ãªã³ã¯ ï¼å¤é¨ãã¼ <literal>parent_id</literal>)㯠<literal>Child</literal> ãªãã¸ã§ã¯ãã®ç¶æ
ã®ä¸é¨ã¨ã¯èããããã ãã®ãã <literal>INSERT</literal> ã«ãã£ã¦ãªã³ã¯ãçæãããªããã¨ã§ãã ã§ãããã解決çã¯ãªã³ã¯ãChildãããã³ã°ã®ä¸é¨ã«ãããã¨ã§ãã"
+
+#: index.docbook:113
+msgid "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
+
+#: index.docbook:115
+msgid "(We also need to add the <literal>parent</literal> property to the <literal>Child</literal> class.)"
+msgstr "(ã¾ã <literal>Child</literal> ã¯ã©ã¹ã« <literal>parent</literal> ããããã£ã追å ããå¿
è¦ãããã¾ãã)"
+
+#: index.docbook:119
+msgid "Now that the <literal>Child</literal> entity is managing the state of the link, we tell the collection not to update the link. We use the <literal>inverse</literal> attribute."
+msgstr "ããã§ã¯ <literal>Child</literal> ã¨ã³ãã£ãã£ããªã³ã¯ã®ç¶æ
ãå¶å¾¡ããããã«ãªã£ãã®ã§ã ã³ã¬ã¯ã·ã§ã³ããªã³ã¯ãæ´æ°ããªãããã«ãã¾ããããããã«ã¯ <literal>inverse</literal> å±æ§ã使ãã¾ãã"
+
+#: index.docbook:124
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\">
+\n"
+ " <key column=\"parent_id\"/>
+\n"
+ " <one-to-many class=\"Child\"/>
+\n"
+ "</set>]]>"
+
+#: index.docbook:126
+msgid "The following code would be used to add a new <literal>Child</literal>"
+msgstr "以ä¸ã®ã³ã¼ãã使ãã°ãæ°ãã <literal>Child</literal> ã追å ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
+\n"
+ "Child c = new Child();
+\n"
+ "c.setParent(p);
+\n"
+ "p.getChildren().add(c);
+\n"
+ "session.save(c);
+\n"
+ "session.flush();]]>"
+
+#: index.docbook:132
+msgid "And now, only one SQL <literal>INSERT</literal> would be issued!"
+msgstr "ããã«ãããSQLã® <literal>INSERT</literal> æãä¸ã¤ã ããçºè¡ãããããã«ãªãã¾ããï¼"
+
+#: index.docbook:136
+msgid "To tighten things up a bit, we could create an <literal>addChild()</literal> method of <literal>Parent</literal>."
+msgstr "ããå°ãå¼·åããã«ã¯ã<literal>Parent</literal> ã® <literal>addChild()</literal> ã¡ã½ãããä½æãã¾ãã"
+
+#: index.docbook:141
+msgid ""
+ "<![CDATA[public void addChild(Child c) {\n"
+ " c.setParent(this);\n"
+ " children.add(c);\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public void addChild(Child c) {
+\n"
+ " c.setParent(this);
+\n"
+ " children.add(c);
+\n"
+ "}]]>"
+
+#: index.docbook:143
+msgid "Now, the code to add a <literal>Child</literal> looks like"
+msgstr "<literal>Child</literal> ã追å ããã³ã¼ãã¯ãã®ããã«ãªãã¾ãã"
+
+#: index.docbook:147
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
+\n"
+ "Child c = new Child();
+\n"
+ "p.addChild(c);
+\n"
+ "session.save(c);
+\n"
+ "session.flush();]]>"
+
+#: index.docbook:152
+msgid "Cascading life cycle"
+msgstr "ã©ã¤ããµã¤ã¯ã«ã®ã«ã¹ã±ã¼ã"
+
+#: index.docbook:154
+msgid "The explicit call to <literal>save()</literal> is still annoying. We will address this by using cascades."
+msgstr "æ示çã« <literal>save()</literal> ãã³ã¼ã«ããã®ã¯ã¾ã ç
©ããããã®ã§ãããããã«ã¹ã±ã¼ãã使ã£ã¦å¯¾å¦ãã¾ãã"
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">
+\n"
+ " <key column=\"parent_id\"/>
+\n"
+ " <one-to-many class=\"Child\"/>
+\n"
+ "</set>]]>"
+
+#: index.docbook:161
+msgid "This simplifies the code above to"
+msgstr "ããã«ããå
ã»ã©ã®ã³ã¼ãããã®ããã«åç´åãã¾ã"
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
+\n"
+ "Child c = new Child();
+\n"
+ "p.addChild(c);
+\n"
+ "session.flush();]]>"
+
+#: index.docbook:167
+msgid "Similarly, we don't need to iterate over the children when saving or deleting a <literal>Parent</literal>. The following removes <literal>p</literal> and all its children from the database."
+msgstr "åæ§ã« <literal>Parent</literal> ãä¿åã¾ãã¯åé¤ããã¨ãã«ãåä¾ãä¸ã¤ä¸ã¤åãåºãã¦æ±ãå¿
è¦ã¯ããã¾ããã 以ä¸ã®ã³ã¼ã㯠<literal>p</literal> ãåé¤ããããã¦ãã¼ã¿ãã¼ã¹ãããã®åä¾ããã¹ã¦åé¤ãã¾ãã"
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "session.delete(p);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
+\n"
+ "session.delete(p);
+\n"
+ "session.flush();]]>"
+
+#: index.docbook:174
+msgid "However, this code"
+msgstr "ããããã®ã³ã¼ãã¯"
+
+#: index.docbook:178
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "c.setParent(null);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
+\n"
+ "Child c = (Child) p.getChildren().iterator().next();
+\n"
+ "p.getChildren().remove(c);
+\n"
+ "c.setParent(null);
+\n"
+ "session.flush();]]>"
+
+#: index.docbook:180
+msgid "will not remove <literal>c</literal> from the database; it will ony remove the link to <literal>p</literal> (and cause a <literal>NOT NULL</literal> constraint violation, in this case). You need to explicitly <literal>delete()</literal> the <literal>Child</literal>."
+msgstr "ãã¼ã¿ãã¼ã¹ãã <literal>c</literal> ãåé¤ãã¾ããã<literal>p</literal> ã¸ã®ãªã³ã¯ãåé¤ãã ï¼ããã¦ãã®ã±ã¼ã¹ã§ã¯ <literal>NOT NULL</literal> å¶ç´éåãå¼ãèµ·ããï¼ã ãã§ãã <literal>Child</literal> ã® <literal>delete()</literal> ãæ示ããå¿
è¦ãããã¾ãã"
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "session.delete(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
+\n"
+ "Child c = (Child) p.getChildren().iterator().next();
+\n"
+ "p.getChildren().remove(c);
+\n"
+ "session.delete(c);
+\n"
+ "session.flush();]]>"
+
+#: index.docbook:188
+msgid "Now, in our case, a <literal>Child</literal> can't really exist without its parent. So if we remove a <literal>Child</literal> from the collection, we really do want it to be deleted. For this, we must use <literal>cascade=\"all-delete-orphan\"</literal>."
+msgstr "ä»ãã®ã±ã¼ã¹ã§ã¯å®éã« <literal>Child</literal> ã親ãªãã§ã¯åå¨ã§ããªãããã«ãªãã¾ããã ãã®ãããããã³ã¬ã¯ã·ã§ã³ãã <literal>Child</literal> ãåãé¤ãå ´åããããåé¤ãããã§ãã ãã®ããã«ã¯ <literal>cascade=\"all-delete-orphan\"</literal> ã使ããªããã°ãªãã¾ããã"
+
+#: index.docbook:194
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">
+\n"
+ " <key column=\"parent_id\"/>
+\n"
+ " <one-to-many class=\"Child\"/>
+\n"
+ "</set>]]>"
+
+#: index.docbook:196
+msgid "Note: even though the collection mapping specifies <literal>inverse=\"true\"</literal>, cascades are still processed by iterating the collection elements. So if you require that an object be saved, deleted or updated by cascade, you must add it to the collection. It is not enough to simply call <literal>setParent()</literal>."
+msgstr "注æï¼ã³ã¬ã¯ã·ã§ã³ã®ãããã³ã°ã§ <literal>inverse=\"true\"</literal> ã¨æå®ãã¦ãã ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ã®ã¤ãã¬ã¼ã·ã§ã³ã«ãã£ã¦ãä¾ç¶ã«ã¹ã±ã¼ããå®è¡ããã¾ãã ãã®ããããã«ã¹ã±ã¼ãã§ãªãã¸ã§ã¯ããã»ã¼ããåé¤ãæ´æ°ããå¿
è¦ããããªãã ãããã³ã¬ã¯ã·ã§ã³ã«è¿½å ããªããã°ãªãã¾ãããåã« <literal>setParent()</literal> ãå¼ã¶ã ãã§ã¯ä¸ååã§ãã"
+
+#: index.docbook:206
+msgid "Cascades and <literal>unsaved-value</literal>"
+msgstr "ã«ã¹ã±ã¼ã㨠<literal>unsaved-value</literal>"
+
+#: index.docbook:208
+msgid "Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</literal>, made some changes in a UI action and wish to persist these changes in a new session by calling <literal>update()</literal>. The <literal>Parent</literal> will contain a collection of childen and, since cascading update is enabled, Hibernate needs to know which children are newly instantiated and which represent existing rows in the database. Lets assume that both <literal>Parent</literal> and <literal>Child</literal> have genenerated identifier properties of type <literal>Long</literal>. Hibernate will use the identifier and version/timestamp property value to determine which of the children are new. (See <xref linkend=\"objectstate-saveorupdate\"/>.) <emphasis>In Hibernate3, it is no longer necessary to specify an <literal>unsaved-value</literal> explicitly.</emphasis>"
+msgstr "<literal>Parent</literal> ãããã <literal>Session</literal> ã§ãã¼ããããUIã®ã¢ã¯ã·ã§ã³ã§å¤æ´ãå ãããã <literal>update()</literal> ãå¼ãã§ãã®å¤æ´ãæ°ããã»ãã·ã§ã³ã§æ°¸ç¶åãããã¨ãã¾ãã <literal>Parent</literal> ãåä¾ã®ã³ã¬ã¯ã·ã§ã³ãæã¡ãã«ã¹ã±ã¼ãæ´æ°ãæå¹ã«ãªã£ã¦ããããã Hibernateã¯ã©ã®åä¾ãæ°ããã¤ã³ã¹ã¿ã³ã¹åãããããã©ãããã¼ã¿ãã¼ã¹ã®æ¢åã®è¡ã«ç¸å½ããã®ããç¥ãå¿
è¦ãããã¾ãã <literal>Parent</literal> 㨠<literal>Child</literal> ã®ä¸¡æ¹ã <literal>java.lang.Long</literal> åã®èå¥ããããã£ãçæããã¨ãã¾ãããã Hibernateã¯ã©ã®åä¾ãæ°ãããã®ãã決å®ããããã«èå¥ããããã£ã®å¤ã使ãã¾ã(versionãtimestampããããã£ã使ãã¾ãã <xref linkend=\"manipulatingdata-updating-detached\"/> åç
§)ãHibernate3ã«ãªã£ã¦ã æ示çã«!
<literal>unsaved-value</literal> ãæå®ããå¿
è¦ã¯ãªããªãã¾ããã"
+
+#: index.docbook:220
+msgid "The following code will update <literal>parent</literal> and <literal>child</literal> and insert <literal>newChild</literal>."
+msgstr "以ä¸ã®ã³ã¼ã㯠<literal>parent</literal> 㨠<literal>child</literal> ãæ´æ°ãã<literal>newChild</literal> ãæ¿å
¥ãã¾ãã"
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[//parent and child were both loaded in a previous session\n"
+ "parent.addChild(child);\n"
+ "Child newChild = new Child();\n"
+ "parent.addChild(newChild);\n"
+ "session.update(parent);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[//parent and child were both loaded in a previous session
+\n"
+ "//parentã¨childã¯ä¸¡æ¹ã¨ãã以åã®Sessionã§ãã¼ãããã¦ãã¾ã
+\n"
+ "parent.addChild(child);
+\n"
+ "Child newChild = new Child();
+\n"
+ "parent.addChild(newChild);
+\n"
+ "session.update(parent);
+\n"
+ "session.flush();]]>"
+
+#: index.docbook:227
+msgid "Well, that's all very well for the case of a generated identifier, but what about assigned identifiers and composite identifiers? This is more difficult, since Hibernate can't use the identifier property to distinguish between a newly instantiated object (with an identifier assigned by the user) and an object loaded in a previous session. In this case, Hibernate will either use the timestamp or version property, or will actually query the second-level cache or, worst case, the database, to see if the row exists."
+msgstr "ãããã¯çæãããèå¥åã®å ´åã«ã¯é常ã«è¯ãã®ã§ãããå²ãå½ã¦ãããèå¥åã¨è¤åèå¥åã®å ´åã¯ã©ãã§ããããï¼ ããã¯Hibernateããï¼ã¦ã¼ã¶ã«ããå²ãå½ã¦ãããèå¥åãæã¤ï¼æ°ããã¤ã³ã¹ã¿ã³ã¹åããããªãã¸ã§ã¯ãã¨ã 以åã®Sessionã§ãã¼ãããããªãã¸ã§ã¯ããåºå¥ã§ããªããããããé£ããã§ãã ãã®å ´åãHibernateã¯ã¿ã¤ã ã¹ã¿ã³ãããã¼ã¸ã§ã³ã®ããããã£ã®ã©ã¡ããã使ãããäºæ¬¡ãã£ãã·ã¥ã«åãåããã¾ãã ææªã®å ´åãè¡ãåå¨ãããã©ãããã¼ã¿ãã¼ã¹ãè¦ã¾ãã"
+
+#: index.docbook:260
+msgid "Conclusion"
+msgstr "<title>çµè«</title>"
+
+#: index.docbook:262
+msgid "There is quite a bit to digest here and it might look confusing first time around. However, in practice, it all works out very nicely. Most Hibernate applications use the parent / child pattern in many places."
+msgstr "ããã§ã¯ããªãã®éãè¦ç´ããã®ã§ãæåã®é ã¯æ··ä¹±ãã¦ããããã«æãããããããã¾ããã ãããå®éã¯ããã¹ã¦é常ã«è¯ãåä½ãã¾ããã»ã¨ãã©ã®Hibernateã¢ããªã±ã¼ã·ã§ã³ã§ã¯ãå¤ãã®å ´é¢ã§è¦ªåãã¿ã¼ã³ã使ç¨ãã¾ãã"
+
+#: index.docbook:267
+msgid "We mentioned an alternative in the first paragraph. None of the above issues exist in the case of <literal><composite-element></literal> mappings, which have exactly the semantics of a parent / child relationship. Unfortunately, there are two big limitations to composite element classes: composite elements may not own collections, and they should not be the child of any entity other than the unique parent."
+msgstr "æåã®æ®µè½ã§ä»£æ¿æ¹æ³ã«ã¤ãã¦è§¦ãã¾ãããä¸è¨ã®ãããªåé¡ã¯ <literal><composite-element></literal> ãããã³ã°ã®å ´åã¯åå¨ããã ã«ããããããããã¯ç¢ºãã«è¦ªåé¢ä¿ã®ã»ãã³ãã£ã¯ã¹ãæã¡ã¾ãã ãããæ®å¿µãªãããè¤åè¦ç´ ã¯ã©ã¹ã«ã¯äºã¤ã®å¤§ããªå¶éãããã¾ãï¼ 1ã¤ã¯è¤åè¦ç´ ã¯ã³ã¬ã¯ã·ã§ã³ãæã¤ãã¨ãã§ããªããã¨ã§ããããã²ã¨ã¤ã¯ã ã¦ãã¼ã¯ãªè¦ªã§ã¯ãªãã¨ã³ãã£ãã£ã®åä¾ã¨ãªãã¹ãã§ã¯ãªãã¨ãããã¨ã§ã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/example_weblog.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/example_weblog.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/example_weblog.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1225 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Weblog Application"
+msgstr "ä¾: Weblogã¢ããªã±ã¼ã·ã§ã³"
+
+#: index.docbook:8
+msgid "Persistent Classes"
+msgstr "æ°¸ç¶ã¯ã©ã¹"
+
+#: index.docbook:10
+msgid "The persistent classes represent a weblog, and an item posted in a weblog. They are to be modelled as a standard parent/child relationship, but we will use an ordered bag, instead of a set."
+msgstr "æ°¸ç¶ã¯ã©ã¹ãã¦ã§ããã°ã¨ãã¦ã§ããã°ã«æ²ç¤ºãããé
ç®ã表ãã¦ãã¾ãã ãããã¯é常ã®è¦ªåé¢ä¿ã¨ãã¦ã¢ããªã³ã°ããã¾ããã setã§ã¯ãªãé åºãæã£ãbagã使ç¨ãããã¨ã«ãã¾ãã"
+
+#: index.docbook:16
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.List;\n"
+ "\n"
+ "public class Blog {\n"
+ " private Long _id;\n"
+ " private String _name;\n"
+ " private List _items;\n"
+ "\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public List getItems() {\n"
+ " return _items;\n"
+ " }\n"
+ " public String getName() {\n"
+ " return _name;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setItems(List list) {\n"
+ " _items = list;\n"
+ " }\n"
+ " public void setName(String string) {\n"
+ " _name = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;
+\n"
+ "
+\n"
+ "import java.util.List;
+\n"
+ "
+\n"
+ "public class Blog {
+\n"
+ " private Long _id;
+\n"
+ " private String _name;
+\n"
+ " private List _items;
+\n"
+ "
+\n"
+ " public Long getId() {
+\n"
+ " return _id;
+\n"
+ " }
+\n"
+ " public List getItems() {
+\n"
+ " return _items;
+\n"
+ " }
+\n"
+ " public String getName() {
+\n"
+ " return _name;
+\n"
+ " }
+\n"
+ " public void setId(Long long1) {
+\n"
+ " _id = long1;
+\n"
+ " }
+\n"
+ " public void setItems(List list) {
+\n"
+ " _items = list;
+\n"
+ " }
+\n"
+ " public void setName(String string) {
+\n"
+ " _name = string;
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:18
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.text.DateFormat;\n"
+ "import java.util.Calendar;\n"
+ "\n"
+ "public class BlogItem {\n"
+ " private Long _id;\n"
+ " private Calendar _datetime;\n"
+ " private String _text;\n"
+ " private String _title;\n"
+ " private Blog _blog;\n"
+ "\n"
+ " public Blog getBlog() {\n"
+ " return _blog;\n"
+ " }\n"
+ " public Calendar getDatetime() {\n"
+ " return _datetime;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public String getText() {\n"
+ " return _text;\n"
+ " }\n"
+ " public String getTitle() {\n"
+ " return _title;\n"
+ " }\n"
+ " public void setBlog(Blog blog) {\n"
+ " _blog = blog;\n"
+ " }\n"
+ " public void setDatetime(Calendar calendar) {\n"
+ " _datetime = calendar;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setText(String string) {\n"
+ " _text = string;\n"
+ " }\n"
+ " public void setTitle(String string) {\n"
+ " _title = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;
+\n"
+ "
+\n"
+ "import java.text.DateFormat;
+\n"
+ "import java.util.Calendar;
+\n"
+ "
+\n"
+ "public class BlogItem {
+\n"
+ " private Long _id;
+\n"
+ " private Calendar _datetime;
+\n"
+ " private String _text;
+\n"
+ " private String _title;
+\n"
+ " private Blog _blog;
+\n"
+ "
+\n"
+ " public Blog getBlog() {
+\n"
+ " return _blog;
+\n"
+ " }
+\n"
+ " public Calendar getDatetime() {
+\n"
+ " return _datetime;
+\n"
+ " }
+\n"
+ " public Long getId() {
+\n"
+ " return _id;
+\n"
+ " }
+\n"
+ " public String getText() {
+\n"
+ " return _text;
+\n"
+ " }
+\n"
+ " public String getTitle() {
+\n"
+ " return _title;
+\n"
+ " }
+\n"
+ " public void setBlog(Blog blog) {
+\n"
+ " _blog = blog;
+\n"
+ " }
+\n"
+ " public void setDatetime(Calendar calendar) {
+\n"
+ " _datetime = calendar;
+\n"
+ " }
+\n"
+ " public void setId(Long long1) {
+\n"
+ " _id = long1;
+\n"
+ " }
+\n"
+ " public void setText(String string) {
+\n"
+ " _text = string;
+\n"
+ " }
+\n"
+ " public void setTitle(String string) {
+\n"
+ " _title = string;
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:23
+msgid "Hibernate Mappings"
+msgstr "Hibernateã®ãããã³ã°"
+
+#: index.docbook:25
+msgid "The XML mappings should now be quite straightforward."
+msgstr "XMLãããã³ã°ã¯ãä»ã§ã¯ã¨ã¦ãç°¡åãªã¯ãã§ãã"
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"Blog\"\n"
+ " table=\"BLOGS\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ "\n"
+ " <bag\n"
+ " name=\"items\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"DATE_TIME\"\n"
+ " cascade=\"all\">\n"
+ "\n"
+ " <key column=\"BLOG_ID\"/>\n"
+ " <one-to-many class=\"BlogItem\"/>\n"
+ "\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>
+\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC
+\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"
+\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">
+\n"
+ "
+\n"
+ "<hibernate-mapping package=\"eg\">
+\n"
+ "
+\n"
+ " <class
+\n"
+ " name=\"Blog\"
+\n"
+ " table=\"BLOGS\">
+\n"
+ "
+\n"
+ " <id
+\n"
+ " name=\"id\"
+\n"
+ " column=\"BLOG_ID\">
+\n"
+ "
+\n"
+ " <generator class=\"native\"/>
+\n"
+ "
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <property
+\n"
+ " name=\"name\"
+\n"
+ " column=\"NAME\"
+\n"
+ " not-null=\"true\"
+\n"
+ " unique=\"true\"/>
+\n"
+ "
+\n"
+ " <bag
+\n"
+ " name=\"items\"
+\n"
+ " inverse=\"true\"
+\n"
+ " order-by=\"DATE_TIME\"
+\n"
+ " cascade=\"all\">
+\n"
+ "
+\n"
+ " <key column=\"BLOG_ID\"/>
+\n"
+ " <one-to-many class=\"BlogItem\"/>
+\n"
+ "
+\n"
+ " </bag>
+\n"
+ "
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:31
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"BlogItem\"\n"
+ " table=\"BLOG_ITEMS\"\n"
+ " dynamic-update=\"true\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ITEM_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"title\"\n"
+ " column=\"TITLE\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"text\"\n"
+ " column=\"TEXT\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"datetime\"\n"
+ " column=\"DATE_TIME\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <many-to-one\n"
+ " name=\"blog\"\n"
+ " column=\"BLOG_ID\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>
+\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC
+\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"
+\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">
+\n"
+ "
+\n"
+ "<hibernate-mapping package=\"eg\">
+\n"
+ "
+\n"
+ " <class
+\n"
+ " name=\"BlogItem\"
+\n"
+ " table=\"BLOG_ITEMS\"
+\n"
+ " dynamic-update=\"true\">
+\n"
+ "
+\n"
+ " <id
+\n"
+ " name=\"id\"
+\n"
+ " column=\"BLOG_ITEM_ID\">
+\n"
+ "
+\n"
+ " <generator class=\"native\"/>
+\n"
+ "
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <property
+\n"
+ " name=\"title\"
+\n"
+ " column=\"TITLE\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ "
+\n"
+ " <property
+\n"
+ " name=\"text\"
+\n"
+ " column=\"TEXT\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ "
+\n"
+ " <property
+\n"
+ " name=\"datetime\"
+\n"
+ " column=\"DATE_TIME\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ "
+\n"
+ " <many-to-one
+\n"
+ " name=\"blog\"
+\n"
+ " column=\"BLOG_ID\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ "
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:36
+msgid "Hibernate Code"
+msgstr "Hibernateã®ã³ã¼ã"
+
+#: index.docbook:38
+msgid "The following class demonstrates some of the kinds of things we can do with these classes, using Hibernate."
+msgstr "以ä¸ã®ã¯ã©ã¹ã¯ã Hibernateã§ãããã®ã¯ã©ã¹ã使ã£ã¦ã§ãããã¨ãããã¤ã示ãã¦ãã¾ãã"
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.ArrayList;\n"
+ "import java.util.Calendar;\n"
+ "import java.util.Iterator;\n"
+ "import java.util.List;\n"
+ "\n"
+ "import org.hibernate.HibernateException;\n"
+ "import org.hibernate.Query;\n"
+ "import org.hibernate.Session;\n"
+ "import org.hibernate.SessionFactory;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.cfg.Configuration;\n"
+ "import org.hibernate.tool.hbm2ddl.SchemaExport;\n"
+ "\n"
+ "public class BlogMain {\n"
+ " \n"
+ " private SessionFactory _sessions;\n"
+ " \n"
+ " public void configure() throws HibernateException {\n"
+ " _sessions = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class)\n"
+ " .buildSessionFactory();\n"
+ " }\n"
+ " \n"
+ " public void exportTables() throws HibernateException {\n"
+ " Configuration cfg = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class);\n"
+ " new SchemaExport(cfg).create(true, true);\n"
+ " }\n"
+ " \n"
+ " public Blog createBlog(String name) throws HibernateException {\n"
+ " \n"
+ " Blog blog = new Blog();\n"
+ " blog.setName(name);\n"
+ " blog.setItems( new ArrayList() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.persist(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Blog blog, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setBlog(blog);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " blog.getItems().add(item);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Long blogid, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Blog blog = (Blog) session.load(Blog.class, blogid);\n"
+ " item.setBlog(blog);\n"
+ " blog.getItems().add(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(BlogItem item, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " item.setText(text);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(Long itemid, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);\n"
+ " item.setText(text);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public List listAllBlogNamesAndItemCounts(int max)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"select blog.id, blog.name, count(blogItem) \" +\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join blog.items as blogItem \" +\n"
+ " \"group by blog.name, blog.id \" +\n"
+ " \"order by max(blogItem.datetime)\"\n"
+ " );\n"
+ " q.setMaxResults(max);\n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ " \n"
+ " public Blog getBlogAndAllItems(Long blogid)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " Blog blog = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join fetch blog.items \" +\n"
+ " \"where blog.id = :blogid\"\n"
+ " );\n"
+ " q.setParameter(\"blogid\", blogid);\n"
+ " blog = (Blog) q.uniqueResult();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public List listBlogsAndRecentItems() throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"inner join blog.items as blogItem \" +\n"
+ " \"where blogItem.datetime > :minDate\"\n"
+ " );\n"
+ "\n"
+ " Calendar cal = Calendar.getInstance();\n"
+ " cal.roll(Calendar.MONTH, false);\n"
+ " q.setCalendar(\"minDate\", cal);\n"
+ " \n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;
+\n"
+ "
+\n"
+ "import java.util.ArrayList;
+\n"
+ "import java.util.Calendar;
+\n"
+ "import java.util.Iterator;
+\n"
+ "import java.util.List;
+\n"
+ "
+\n"
+ "import org.hibernate.HibernateException;
+\n"
+ "import org.hibernate.Query;
+\n"
+ "import org.hibernate.Session;
+\n"
+ "import org.hibernate.SessionFactory;
+\n"
+ "import org.hibernate.Transaction;
+\n"
+ "import org.hibernate.cfg.Configuration;
+\n"
+ "import org.hibernate.tool.hbm2ddl.SchemaExport;
+\n"
+ "
+\n"
+ "public class BlogMain {
+\n"
+ "
+\n"
+ " private SessionFactory _sessions;
+\n"
+ "
+\n"
+ " public void configure() throws HibernateException {
+\n"
+ " _sessions = new Configuration()
+\n"
+ " .addClass(Blog.class)
+\n"
+ " .addClass(BlogItem.class)
+\n"
+ " .buildSessionFactory();
+\n"
+ " }
+\n"
+ "
+\n"
+ " public void exportTables() throws HibernateException {
+\n"
+ " Configuration cfg = new Configuration()
+\n"
+ " .addClass(Blog.class)
+\n"
+ " .addClass(BlogItem.class);
+\n"
+ " new SchemaExport(cfg).create(true, true);
+\n"
+ " }
+\n"
+ "
+\n"
+ " public Blog createBlog(String name) throws HibernateException {
+\n"
+ "
+\n"
+ " Blog blog = new Blog();
+\n"
+ " blog.setName(name);
+\n"
+ " blog.setItems( new ArrayList() );
+\n"
+ "
+\n"
+ " Session session = _sessions.openSession();
+\n"
+ " Transaction tx = null;
+\n"
+ " try {
+\n"
+ " tx = session.beginTransaction();
+\n"
+ " session.persist(blog);
+\n"
+ " tx.commit();
+\n"
+ " }
+\n"
+ " catch (HibernateException he) {
+\n"
+ " if (tx!=null) tx.rollback();
+\n"
+ " throw he;
+\n"
+ " }
+\n"
+ " finally {
+\n"
+ " session.close();
+\n"
+ " }
+\n"
+ " return blog;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public BlogItem createBlogItem(Blog blog, String title, String text)
+\n"
+ " throws HibernateException {
+\n"
+ "
+\n"
+ " BlogItem item = new BlogItem();
+\n"
+ " item.setTitle(title);
+\n"
+ " item.setText(text);
+\n"
+ " item.setBlog(blog);
+\n"
+ " item.setDatetime( Calendar.getInstance() );
+\n"
+ " blog.getItems().add(item);
+\n"
+ "
+\n"
+ " Session session = _sessions.openSession();
+\n"
+ " Transaction tx = null;
+\n"
+ " try {
+\n"
+ " tx = session.beginTransaction();
+\n"
+ " session.update(blog);
+\n"
+ " tx.commit();
+\n"
+ " }
+\n"
+ " catch (HibernateException he) {
+\n"
+ " if (tx!=null) tx.rollback();
+\n"
+ " throw he;
+\n"
+ " }
+\n"
+ " finally {
+\n"
+ " session.close();
+\n"
+ " }
+\n"
+ " return item;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public BlogItem createBlogItem(Long blogid, String title, String text)
+\n"
+ " throws HibernateException {
+\n"
+ "
+\n"
+ " BlogItem item = new BlogItem();
+\n"
+ " item.setTitle(title);
+\n"
+ " item.setText(text);
+\n"
+ " item.setDatetime( Calendar.getInstance() );
+\n"
+ "
+\n"
+ " Session session = _sessions.openSession();
+\n"
+ " Transaction tx = null;
+\n"
+ " try {
+\n"
+ " tx = session.beginTransaction();
+\n"
+ " Blog blog = (Blog) session.load(Blog.class, blogid);
+\n"
+ " item.setBlog(blog);
+\n"
+ " blog.getItems().add(item);
+\n"
+ " tx.commit();
+\n"
+ " }
+\n"
+ " catch (HibernateException he) {
+\n"
+ " if (tx!=null) tx.rollback();
+\n"
+ " throw he;
+\n"
+ " }
+\n"
+ " finally {
+\n"
+ " session.close();
+\n"
+ " }
+\n"
+ " return item;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public void updateBlogItem(BlogItem item, String text)
+\n"
+ " throws HibernateException {
+\n"
+ "
+\n"
+ " item.setText(text);
+\n"
+ "
+\n"
+ " Session session = _sessions.openSession();
+\n"
+ " Transaction tx = null;
+\n"
+ " try {
+\n"
+ " tx = session.beginTransaction();
+\n"
+ " session.update(item);
+\n"
+ " tx.commit();
+\n"
+ " }
+\n"
+ " catch (HibernateException he) {
+\n"
+ " if (tx!=null) tx.rollback();
+\n"
+ " throw he;
+\n"
+ " }
+\n"
+ " finally {
+\n"
+ " session.close();
+\n"
+ " }
+\n"
+ " }
+\n"
+ "
+\n"
+ " public void updateBlogItem(Long itemid, String text)
+\n"
+ " throws HibernateException {
+\n"
+ "
+\n"
+ " Session session = _sessions.openSession();
+\n"
+ " Transaction tx = null;
+\n"
+ " try {
+\n"
+ " tx = session.beginTransaction();
+\n"
+ " BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);
+\n"
+ " item.setText(text);
+\n"
+ " tx.commit();
+\n"
+ " }
+\n"
+ " catch (HibernateException he) {
+\n"
+ " if (tx!=null) tx.rollback();
+\n"
+ " throw he;
+\n"
+ " }
+\n"
+ " finally {
+\n"
+ " session.close();
+\n"
+ " }
+\n"
+ " }
+\n"
+ "
+\n"
+ " public List listAllBlogNamesAndItemCounts(int max)
+\n"
+ " throws HibernateException {
+\n"
+ "
+\n"
+ " Session session = _sessions.openSession();
+\n"
+ " Transaction tx = null;
+\n"
+ " List result = null;
+\n"
+ " try {
+\n"
+ " tx = session.beginTransaction();
+\n"
+ " Query q = session.createQuery(
+\n"
+ " \"select blog.id, blog.name, count(blogItem) \" +
+\n"
+ " \"from Blog as blog \" +
+\n"
+ " \"left outer join blog.items as blogItem \" +
+\n"
+ " \"group by blog.name, blog.id \" +
+\n"
+ " \"order by max(blogItem.datetime)\"
+\n"
+ " );
+\n"
+ " q.setMaxResults(max);
+\n"
+ " result = q.list();
+\n"
+ " tx.commit();
+\n"
+ " }
+\n"
+ " catch (HibernateException he) {
+\n"
+ " if (tx!=null) tx.rollback();
+\n"
+ " throw he;
+\n"
+ " }
+\n"
+ " finally {
+\n"
+ " session.close();
+\n"
+ " }
+\n"
+ " return result;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public Blog getBlogAndAllItems(Long blogid)
+\n"
+ " throws HibernateException {
+\n"
+ "
+\n"
+ " Session session = _sessions.openSession();
+\n"
+ " Transaction tx = null;
+\n"
+ " Blog blog = null;
+\n"
+ " try {
+\n"
+ " tx = session.beginTransaction();
+\n"
+ " Query q = session.createQuery(
+\n"
+ " \"from Blog as blog \" +
+\n"
+ " \"left outer join fetch blog.items \" +
+\n"
+ " \"where blog.id = :blogid\"
+\n"
+ " );
+\n"
+ " q.setParameter(\"blogid\", blogid);
+\n"
+ " blog = (Blog) q.uniqueResult();
+\n"
+ " tx.commit();
+\n"
+ " }
+\n"
+ " catch (HibernateException he) {
+\n"
+ " if (tx!=null) tx.rollback();
+\n"
+ " throw he;
+\n"
+ " }
+\n"
+ " finally {
+\n"
+ " session.close();
+\n"
+ " }
+\n"
+ " return blog;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public List listBlogsAndRecentItems() throws HibernateException {
+\n"
+ "
+\n"
+ " Session session = _sessions.openSession();
+\n"
+ " Transaction tx = null;
+\n"
+ " List result = null;
+\n"
+ " try {
+\n"
+ " tx = session.beginTransaction();
+\n"
+ " Query q = session.createQuery(
+\n"
+ " \"from Blog as blog \" +
+\n"
+ " \"inner join blog.items as blogItem \" +
+\n"
+ " \"where blogItem.datetime > :minDate\"
+\n"
+ " );
+\n"
+ "
+\n"
+ " Calendar cal = Calendar.getInstance();
+\n"
+ " cal.roll(Calendar.MONTH, false);
+\n"
+ " q.setCalendar(\"minDate\", cal);
+\n"
+ "
+\n"
+ " result = q.list();
+\n"
+ " tx.commit();
+\n"
+ " }
+\n"
+ " catch (HibernateException he) {
+\n"
+ " if (tx!=null) tx.rollback();
+\n"
+ " throw he;
+\n"
+ " }
+\n"
+ " finally {
+\n"
+ " session.close();
+\n"
+ " }
+\n"
+ " return result;
+\n"
+ " }
+\n"
+ "}]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/filters.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/filters.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/filters.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,234 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Filtering data"
+msgstr "ãã¼ã¿ã®ãã£ã«ã¿ãªã³ã°"
+
+#: index.docbook:7
+msgid "Hibernate3 provides an innovative new approach to handling data with \"visibility\" rules. A <emphasis>Hibernate filter</emphasis> is a global, named, parameterized filter that may be enabled or disabled for a particular Hibernate session."
+msgstr "Hibernate3ã§ã¯ãå¯è¦æ§ãã«ã¼ã«ã«åºã¥ãã¦ãã¼ã¿ãæ±ãããã®ç»æçãªæ¹æ³ãç¨æãã¦ãã¾ãã <emphasis>Hibernate filter</emphasis> ã¯ã°ãã¼ãã«ã§ãååä»ãã§ããã©ã¡ã¼ã¿åããããã£ã«ã¿ã§ãã ããã¯Hibernateã»ãã·ã§ã³ãã¨ã«æå¹ç¡å¹ãåãæ¿ãããã¾ãã"
+
+#: index.docbook:14
+msgid "Hibernate filters"
+msgstr "Hibernateã®ãã£ã«ã¿"
+
+#: index.docbook:16
+msgid "Hibernate3 adds the ability to pre-define filter criteria and attach those filters at both a class and a collection level. A filter criteria is the ability to define a restriction clause very similiar to the existing \"where\" attribute available on the class and various collection elements. Except these filter conditions can be parameterized. The application can then make the decision at runtime whether given filters should be enabled and what their parameter values should be. Filters can be used like database views, but parameterized inside the application."
+msgstr "Hibernate3ã¯ãã£ã«ã¿ã¯ã©ã¤ããªã¢ããããããå®ç¾©ãã ãããã®ãã£ã«ã¿ãã¯ã©ã¹ãã³ã¬ã¯ã·ã§ã³ã¬ãã«ã«å ããæ©è½ãå ãã¾ããã ãã£ã«ã¿ã¯ã©ã¤ããªã¢ã¯å¶ç´ç¯ãå®ç¾©ããæ©è½ã§ãã ãããã®ãã£ã«ã¿æ¡ä»¶ã¯ãã©ã¡ã¼ã¿åã§ããã¨ãããã¨ãé¤ãã ã¯ã©ã¹ããã¾ãã¾ãªã³ã¬ã¯ã·ã§ã³è¦ç´ ã§å©ç¨å¯è½ãªï½¢whereï½£å¥ã«é常ã«ããä¼¼ã¦ãã¾ãã ã¢ããªã±ã¼ã·ã§ã³ã¯ãä¸ãããããã£ã«ã¿ãå¯è½ã«ãã¹ããã ããã¦ãã®ãã©ã¡ã¼ã¿å¤ãä½ã«ãã¹ãããå®è¡æã«æ±ºå®ãããã¨ãã§ãã¾ãã ãã£ã«ã¿ã¯ãã¼ã¿ãã¼ã¹ãã¥ã¼ã®ããã«ä½¿ç¨ããã¾ãããã¢ããªã±ã¼ã·ã§ã³å
ã§ã¯ãã©ã¡ã¼ã¿åããã¾ãã"
+
+#: index.docbook:26
+msgid "In order to use filters, they must first be defined and then attached to the appropriate mapping elements. To define a filter, use the <literal><filter-def/></literal> element within a <literal><hibernate-mapping/></literal> element:"
+msgstr "ãã£ã«ã¿ã使ãããã«ã¯ã¾ããé©åãªãããã³ã°è¦ç´ ã«å®ç¾©ã追å ããªãã¦ã¯ãªãã¾ããã ãã£ã«ã¿ãå®ç¾©ããããã«ã¯ã <literal><hibernate-mapping/></literal> è¦ç´ å
㧠<literal><filter-def/></literal> è¦ç´ ã使ç¨ãã¾ããï¼"
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\">\n"
+ " <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
+ "</filter-def>]]>"
+msgstr ""
+ "<![CDATA[<filter-def name=\"myFilter\">
+\n"
+ " <filter-param name=\"myFilterParam\" type=\"string\"/>
+\n"
+ "</filter-def>]]>"
+
+#: index.docbook:34
+msgid "Then, this filter can be attached to a class:"
+msgstr "ãããã¦ãã£ã«ã¿ã¯ã¯ã©ã¹ã¸ã¨çµã³ä»ãããã¾ããï¼"
+
+#: index.docbook:38
+msgid ""
+ "<![CDATA[<class name=\"myClass\" ...>\n"
+ " ...\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"myClass\" ...>
+\n"
+ " ...
+\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>
+\n"
+ "</class>]]>"
+
+#: index.docbook:40
+msgid "or, to a collection:"
+msgstr "ã¾ããã³ã¬ã¯ã·ã§ã³ã«å¯¾ãã¦ã¯æ¬¡ã®ããã«ãªãã¾ããï¼"
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<set ...>\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set ...>
+\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>
+\n"
+ "</set>]]>"
+
+#: index.docbook:46
+msgid "or, even to both (or multiples of each) at the same time."
+msgstr "ã©ã¡ãã«å¯¾ãã¦ã(ã¾ãããããããè¤æ°)åæã«è¨å®ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:50
+msgid "The methods on <literal>Session</literal> are: <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, and <literal>disableFilter(String filterName)</literal>. By default, filters are <emphasis>not</emphasis> enabled for a given session; they must be explcitly enabled through use of the <literal>Session.enabledFilter()</literal> method, which returns an instance of the <literal>Filter</literal> interface. Using the simple filter defined above, this would look like:"
+msgstr "<literal>Session</literal> ä¸ã®ã¡ã½ãã㯠<literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, <literal>disableFilter(String filterName)</literal> ã§ãã ããã©ã«ãã§ã¯ããã£ã«ã¿ã¯ä¸ããããã»ãã·ã§ã³ã«å¯¾ãã¦ä½¿ç¨ <emphasis>ã§ãã¾ãã</emphasis> ã <literal>Filter</literal> ã¤ã³ã¹ã¿ã³ã¹ãè¿ãå¤ã¨ãã <literal>Session.enabledFilter()</literal> ã¡ã½ããã使ããã¨ã§ã ãã£ã«ã¿ã¯æ示çã«ä½¿ç¨å¯è½ã¨ãªãã¾ãã ä¸ã§å®ç¾©ããåç´ãªãã£ã«ã¿ã®ä½¿ç¨ã¯ããã®ããã«ãªãã¾ããï¼"
+
+#: index.docbook:59
+msgid "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
+msgstr "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
+
+#: index.docbook:61
+msgid "Note that methods on the org.hibernate.Filter interface do allow the method-chaining common to much of Hibernate."
+msgstr "org.hibernate.Filterã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã¯ã Hibernateã®å¤ãã«å
±éãã¦ããã¡ã½ããé£éã許ãã¦ãããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:65
+msgid "A full example, using temporal data with an effective record date pattern:"
+msgstr "æå¹ãªã¬ã³ã¼ããã¼ã¿ãã¿ã¼ã³ãæã¤ä¸æãã¼ã¿ã使ã£ãå®å
¨ãªä¾ã§ãï¼"
+
+#: index.docbook:69
+msgid ""
+ "<![CDATA[<filter-def name=\"effectiveDate\">\n"
+ " <filter-param name=\"asOfDate\" type=\"date\"/>\n"
+ "</filter-def>\n"
+ "\n"
+ "<class name=\"Employee\" ...>\n"
+ "...\n"
+ " <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>\n"
+ " <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>\n"
+ " <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>\n"
+ "...\n"
+ " <!--\n"
+ " Note that this assumes non-terminal records have an eff_end_dt set to\n"
+ " a max db date for simplicity-sake\n"
+ " -->\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Department\" ...>\n"
+ "...\n"
+ " <set name=\"employees\" lazy=\"true\">\n"
+ " <key column=\"dept_id\"/>\n"
+ " <one-to-many class=\"Employee\"/>\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<filter-def name=\"effectiveDate\">
+\n"
+ " <filter-param name=\"asOfDate\" type=\"date\"/>
+\n"
+ "</filter-def>
+\n"
+ "
+\n"
+ "<class name=\"Employee\" ...>
+\n"
+ "...
+\n"
+ " <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>
+\n"
+ " <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>
+\n"
+ " <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>
+\n"
+ "...
+\n"
+ " <!--
+\n"
+ " Note that this assumes non-terminal records have an eff_end_dt set to
+\n"
+ " a max db date for simplicity-sake
+\n"
+ "
+\n"
+ "
+\n"
+ " -->
+\n"
+ " <filter name=\"effectiveDate\"
+\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>
+\n"
+ "</class>
+\n"
+ "
+\n"
+ "<class name=\"Department\" ...>
+\n"
+ "...
+\n"
+ " <set name=\"employees\" lazy=\"true\">
+\n"
+ " <key column=\"dept_id\"/>
+\n"
+ " <one-to-many class=\"Employee\"/>
+\n"
+ " <filter name=\"effectiveDate\"
+\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>
+\n"
+ " </set>
+\n"
+ "</class>]]>"
+
+#: index.docbook:71
+msgid "Then, in order to ensure that you always get back currently effective records, simply enable the filter on the session prior to retrieving employee data:"
+msgstr "常ã«ç¾å¨ã®æå¹ã¬ã³ã¼ããè¿å´ãããã¨ãä¿è¨¼ããããã«ã åç´ã«ã社å¡ãã¼ã¿ã®æ¤ç´¢ããåã«ã»ãã·ã§ã³ä¸ã®ãã£ã«ã¿ãæå¹ã«ãã¾ãã"
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[Session session = ...;\n"
+ "session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());\n"
+ "List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")\n"
+ " .setLong(\"targetSalary\", new Long(1000000))\n"
+ " .list();\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[Session session = ...;
+\n"
+ "session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());
+\n"
+ "List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")
+\n"
+ " .setLong(\"targetSalary\", new Long(1000000))
+\n"
+ " .list();
+\n"
+ "]]>"
+
+#: index.docbook:78
+msgid "In the HQL above, even though we only explicitly mentioned a salary constraint on the results, because of the enabled filter the query will return only currently active employees who have a salary greater than a million dollars."
+msgstr "ä¸è¨ã®HQLã§ã¯ãçµæã®çµ¦æã®å¶ç´ã«ã¤ãã¦æ示çã«è§¦ããã ãã§ããã æå¹ã«ãªã£ã¦ãããã£ã«ã¿ã®ãããã§ããã®ã¯ã¨ãªã¯çµ¦æã100ä¸ãã«ä»¥ä¸ã®ç¾å½¹ã®ç¤¾å¡ã ããè¿ãã¾ãã"
+
+#: index.docbook:84
+msgid "Note: if you plan on using filters with outer joining (either through HQL or load fetching) be careful of the direction of the condition expression. Its safest to set this up for left outer joining; in general, place the parameter first followed by the column name(s) after the operator."
+msgstr "(HQLããã¼ããã§ããã§ï¼å¤é¨çµåãæã¤ãã£ã«ã¿ã使ãã¤ãããªãã æ¡ä»¶å¼ã®æ¹åã«æ³¨æãã¦ãã ããã ããã¯å·¦å¤é¨çµåã®ããã«è¨å®ããã®ãæãå®å
¨ã§ãã ä¸è¬çã«ãæ¼ç®åã®å¾ã«ã©ã åã«ç¶ãã¦æåã®ãã©ã¡ã¼ã¿ãé
ç½®ãã¦ãã ããã"
+
+#: index.docbook:91
+msgid "After being defined a filter might be attached to multiple entities and/or collections each with its own condition. That can be tedious when the conditions are the same each time. Thus <literal><filter-def/></literal> allows defining a default condition, either as an attribute or CDATA:"
+msgstr ""
+
+#: index.docbook:98
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\" condition=\"abc > xyz\">...</filter-def>\n"
+ "<filter-def name=\"myOtherFilter\">abc=xyz</filter-def>]]>"
+msgstr ""
+
+#: index.docbook:100
+msgid "This default condition will then be used whenever the filter is attached to something without specifying a condition. Note that this means you can give a specific condition as part of the attachment of the filter which overrides the default condition in that particular case."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/inheritance_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/inheritance_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/inheritance_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,642 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Inheritance Mapping"
+msgstr "ç¶æ¿ãããã³ã°"
+
+#: index.docbook:8
+msgid "The Three Strategies"
+msgstr "3ã¤ã®æ¦ç¥"
+
+#: index.docbook:10
+msgid "Hibernate supports the three basic inheritance mapping strategies:"
+msgstr "Hibernateã¯3ã¤ã®åºæ¬çãªç¶æ¿ã®ãããã³ã°æ¦ç¥ããµãã¼ããã¾ãã"
+
+#: index.docbook:16
+msgid "table per class hierarchy"
+msgstr "<para>ã¯ã©ã¹é層ãã¨ã®ãã¼ãã«ï¼table-per-class-hierarchyï¼</para>"
+
+#: index.docbook:21
+msgid "<para>table per subclass</para>"
+msgstr "<para>ãµãã¯ã©ã¹ãã¨ã®ãã¼ãã«ï¼table-per-subclassï¼</para>"
+
+#: index.docbook:26
+msgid "table per concrete class"
+msgstr "<para>å
·è±¡ã¯ã©ã¹ãã¨ã®ãã¼ãã«ï¼table-per-concrete-classï¼</para>"
+
+#: index.docbook:32
+msgid "In addition, Hibernate supports a fourth, slightly different kind of polymorphism:"
+msgstr "å ãã¦4ã¤ç®ã«ãHibernateã¯ãããã«ç°ãªãæ§è³ªãæã£ãããªã¢ã¼ãã£ãºã ããµãã¼ããã¾ãã"
+
+#: index.docbook:39
+msgid "implicit polymorphism"
+msgstr "æé»çããªã¢ã¼ãã£ãºã "
+
+#: index.docbook:45
+msgid "It is possible to use different mapping strategies for different branches of the same inheritance hierarchy, and then make use of implicit polymorphism to achieve polymorphism across the whole hierarchy. However, Hibernate does not support mixing <literal><subclass></literal>, and <literal><joined-subclass></literal> and <literal><union-subclass></literal> mappings under the same root <literal><class></literal> element. It is possible to mix together the table per hierarchy and table per subclass strategies, under the the same <literal><class></literal> element, by combining the <literal><subclass></literal> and <literal><join></literal> elements (see below)."
+msgstr "åä¸ã®ç¶æ¿é層ã®ç°ãªããã©ã³ãã«å¯¾ãã¦ç°ãªããããã³ã°æ¦ç¥ã使ããã¨ãã§ãã¾ãã ãã®å ´åã«ã¯å
¨ä½ã®é層ã«æ¸¡ãããªã¢ã¼ãã£ãºã ãå®ç¾ããããã«æé»çããªã¢ã¼ãã£ãºã ã使ç¨ãã¾ãã ããããHibernateã¯åãã«ã¼ã <literal><class></literal> è¦ç´ å
㧠<literal><subclass></literal> ãããã³ã°ã<literal><joined-subclass></literal> ãããã³ã°ã <literal><union-subclass></literal> ãããã³ã°ã®åæ使ç¨ããµãã¼ããã¦ãã¾ããã <literal><subclass></literal> è¦ç´ 㨠<literal><join></literal> è¦ç´ ãçµã¿åããããã¨ã§ã åä¸ <literal><class></literal> è¦ç´ å
ã§ã® table-per-hierarchy æ¦ç¥ã¨ table-per-subclass æ¦ç¥ã®åæ使ç¨ã¯å¯è½ã§ãã次ã®ä¾ãè¦ã¦ãã ããã"
+
+#: index.docbook:59
+msgid "It is possible to define <literal>subclass</literal>, <literal>union-subclass</literal>, and <literal>joined-subclass</literal> mappings in separate mapping documents, directly beneath <literal>hibernate-mapping</literal>. This allows you to extend a class hierachy just by adding a new mapping file. You must specify an <literal>extends</literal> attribute in the subclass mapping, naming a previously mapped superclass. Note: Previously this feature made the ordering of the mapping documents important. Since Hibernate3, the ordering of mapping files does not matter when using the extends keyword. The ordering inside a single mapping file still needs to be defined as superclasses before subclasses."
+msgstr "<literal>subclass</literal>, <literal>union-subclass</literal> 㨠<literal>joined-subclass</literal> ãããã³ã°ãè¤æ°ã®ãããã³ã°ããã¥ã¡ã³ãã«å®ç¾©ãããã¨ãåºæ¥ã <literal>hibernate-mapping</literal> ã®ç´ä¸ã«é
ç½®ãã¾ãã ããã¯æ°ãããããã³ã°ãã¡ã¤ã«ã追å ããã ãã§ãã¯ã©ã¹é層ãæ¡å¼µã§ããã¨ãããã¨ã§ãã ããããããããããã¹ã¼ãã¼ã¯ã©ã¹ãæå®ãã¦ããµãã¯ã©ã¹ãããã³ã°ã« <literal>extends</literal> å±æ§ãè¨è¿°ããªããã°ãªãã¾ããã 注æï¼ãã®ç¹å¾´ã«ããã以åã¯ãããã³ã°ã»ããã¥ã¡ã³ãã®é çªãéè¦ã§ããã Hibernate3ããã¯ãextendsãã¼ã¯ã¼ãã使ãå ´åããããã³ã°ããã¥ã¡ã³ãã®é çªã¯åé¡ã«ãªãã¾ããã ï¼ã¤ã®ãããã³ã°ãã¡ã¤ã«å
ã§é çªä»ããè¡ãã¨ãã¯ã ä¾ç¶ã¨ãã¦ããµãã¯ã©ã¹ãå®ç¾©ããåã«ã¹ã¼ãã¼ã¯ã©ã¹ãå®ç¾©ã!
ãå¿
è¦ãããã¾ãã)"
+
+#: index.docbook:70
+msgid ""
+ "<![CDATA[\n"
+ " <hibernate-mapping>\n"
+ " <subclass name=\"DomesticCat\" extends=\"Cat\" discriminator-value=\"D\">\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </subclass>\n"
+ " </hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ " <hibernate-mapping>\n"
+ " <subclass name=\"DomesticCat\" extends=\"Cat\" discriminator-value=\"D\">\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </subclass>\n"
+ " </hibernate-mapping>]]>"
+
+#: index.docbook:74
+msgid "Table per class hierarchy"
+msgstr "<title>ã¯ã©ã¹é層ãã¨ã®ãã¼ãã«ï¼table-per-class-hierarchyï¼</title>"
+
+#: index.docbook:76
+msgid "Suppose we have an interface <literal>Payment</literal>, with implementors <literal>CreditCardPayment</literal>, <literal>CashPayment</literal>, <literal>ChequePayment</literal>. The table per hierarchy mapping would look like:"
+msgstr "ä¾ãã°ãã¤ã³ã¿ã¼ãã§ã¤ã¹ <literal>Payment</literal> ã¨ããããå®è£
ãã <literal>CreditCardPayment</literal>ã<literal>CashPayment</literal>ã <literal>ChequePayment</literal> ãããã¨ãã¾ããé層ãã¨ã®ãã¼ãã«ãããã³ã°ã¯ 以ä¸ã®ããã«ãªãã¾ãã"
+
+#: index.docbook:83
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:85
+msgid "Exactly one table is required. There is one big limitation of this mapping strategy: columns declared by the subclasses, such as <literal>CCTYPE</literal>, may not have <literal>NOT NULL</literal> constraints."
+msgstr "ã¡ããã©ä¸ã¤ã®ãã¼ãã«ãå¿
è¦ã§ãã ãã®ãããã³ã°æ¦ç¥ã«ã¯ä¸ã¤å¤§ããªå¶éãããã¾ãã <literal>CCTYPE</literal> ã®ãããªããµãã¯ã©ã¹ã§å®£è¨ãããã«ã©ã 㯠<literal>NOT NULL</literal> å¶ç´ãæã¦ã¾ããã"
+
+#: index.docbook:94
+msgid "Table per subclass"
+msgstr "<title>ãµãã¯ã©ã¹ãã¨ã®ãã¼ãã«ï¼table-per-subclassï¼</title>"
+
+#: index.docbook:96
+msgid "A table per subclass mapping would look like:"
+msgstr "table-per-subclass ãããã³ã°ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã"
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <joined-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <joined-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:102
+msgid "Four tables are required. The three subclass tables have primary key associations to the superclass table (so the relational model is actually a one-to-one association)."
+msgstr "ãã®ãããã³ã°ã«ã¯4ã¤ã®ãã¼ãã«ãå¿
è¦ã§ãã3ã¤ã®ãµãã¯ã©ã¹ãã¼ãã«ã¯ ã¹ã¼ãã¼ã¯ã©ã¹ãã¼ãã«ã¨ã®é¢é£ã示ã主ãã¼ãæã£ã¦ãã¾ã ï¼å®éãé¢ä¿ã¢ãã«ä¸ã¯ä¸å¯¾ä¸é¢é£ã§ãï¼ã"
+
+#: index.docbook:111
+msgid "Table per subclass, using a discriminator"
+msgstr "å¼å¥åãç¨ãã table-per-subclass"
+
+#: index.docbook:113
+msgid "Note that Hibernate's implementation of table per subclass requires no discriminator column. Other object/relational mappers use a different implementation of table per subclass which requires a type discriminator column in the superclass table. The approach taken by Hibernate is much more difficult to implement but arguably more correct from a relational point of view. If you would like to use a discriminator column with the table per subclass strategy, you may combine the use of <literal><subclass></literal> and <literal><join></literal>, as follow:"
+msgstr "Hibernateã® table-per-subclass å®è£
ã¯ãdiscriminatorã«ã©ã ãå¿
è¦ã¨ããªããã¨ãè¦ãã¦ããã¦ãã ããã Hibernate以å¤ã®O/Rãããã¼ã¯ãtable-per-subclass ã«ç°ãªãå®è£
ãç¨ãã¾ãã ããã¯ãã¹ã¼ãã¼ã¯ã©ã¹ã®ãã¼ãã«ã«ã¿ã¤ãdiscriminatorã«ã©ã ãå¿
è¦ã¨ãã¾ãã ãã®ã¢ããã¼ãã¯å®è£
ãå°é£ã«ãªãã¾ãããé¢ä¿ã®è¦ç¹ããè¦ãã¨ãããæ£ç¢ºãªãã®ã§ãã table-per-subclass æ¦ç¥ã§discriminatorã«ã©ã ã使ããããã°ã <literal><subclass></literal> 㨠<literal><join></literal> ã以ä¸ã®ããã«çµã¿åããã¦ä½¿ã£ã¦ãã ããã"
+
+#: index.docbook:125
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " <join table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " <join table=\"CHEQUE_PAYMENT\" fetch=\"select\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " <join table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " <join table=\"CHEQUE_PAYMENT\" fetch=\"select\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:127
+msgid "The optional <literal>fetch=\"select\"</literal> declaration tells Hibernate not to fetch the <literal>ChequePayment</literal> subclass data using an outer join when querying the superclass."
+msgstr "ãªãã·ã§ã³ã® <literal>fetch=\"select\"</literal> 宣è¨ã¯ã ã¹ã¼ãã¼ã¯ã©ã¹ã®ã¯ã¨ãªå®è¡æã«å¤é¨çµåã使ã£ã¦ã ãµãã¯ã©ã¹ã® <literal>ChequePayment</literal> ãã¼ã¿ãåå¾ããªãããã«æå®ããããã®ãã®ã§ãã"
+
+#: index.docbook:136
+msgid "Mixing table per class hierarchy with table per subclass"
+msgstr "table-per-subclass 㨠table-per-class-hierarchy ã®æ··å"
+
+#: index.docbook:138
+msgid "You may even mix the table per hierarchy and table per subclass strategies using this approach:"
+msgstr "ãã®ã¢ããã¼ãã使ç¨ããã¨ãtable-per-hierarchy 㨠table-per-subclass æ¦ç¥ã çµã¿åãããäºãå¯è½ã§ãã"
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:145
+msgid "For any of these mapping strategies, a polymorphic association to the root <literal>Payment</literal> class is mapped using <literal><many-to-one></literal>."
+msgstr "ãããã®ãããã³ã°æ¦ç¥ã§ãã£ã¦ããã«ã¼ãã§ãã <literal>Payment</literal> ã¯ã©ã¹ã¸ã® ããªã¢ã¼ãã£ãã¯ãªé¢é£ã¯ <literal><many-to-one></literal> ã使ã£ã¦ãããã³ã°ãã¾ãã"
+
+#: index.docbook:151
+msgid "<![CDATA[<many-to-one name=\"payment\" column=\"PAYMENT_ID\" class=\"Payment\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"payment\" column=\"PAYMENT_ID\" class=\"Payment\"/>]]>"
+
+#: index.docbook:156
+msgid "Table per concrete class"
+msgstr "<title>å
·è±¡ã¯ã©ã¹ãã¨ã®ãã¼ãã«ï¼table-per-concrete-classï¼</title>"
+
+#: index.docbook:158
+msgid "There are two ways we could go about mapping the table per concrete class strategy. The first is to use <literal><union-subclass></literal>."
+msgstr "table-per-concrete-class æ¦ç¥ã®ãããã³ã°ã«å¯¾ããã¢ããã¼ãã¯ã2ã¤ããã¾ãã 1ã¤ç®ã¯ <literal><union-subclass></literal> ãå©ç¨ããæ¹æ³ã§ãã"
+
+#: index.docbook:163
+msgid ""
+ "<![CDATA[<class name=\"Payment\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <union-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <union-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:165
+msgid "Three tables are involved for the subclasses. Each table defines columns for all properties of the class, including inherited properties."
+msgstr "ãµãã¯ã©ã¹ãã¨ã«3ã¤ã®ãã¼ãã«ãå¿
è¦ã§ããããããã®ãã¼ãã«ã¯ãç¶æ¿ããããã£ãå«ãã ã ã¯ã©ã¹ã®å
¨ã¦ã®ããããã£ã«å¯¾ããã«ã©ã ãå®ç¾©ãã¾ãã"
+
+#: index.docbook:170
+msgid "The limitation of this approach is that if a property is mapped on the superclass, the column name must be the same on all subclass tables. (We might relax this in a future release of Hibernate.) The identity generator strategy is not allowed in union subclass inheritance, indeed the primary key seed has to be shared accross all unioned subclasses of a hierarchy."
+msgstr "ãã®ã¢ããã¼ãã«ã¯å¶éãããã¾ãã ããã¯ãããããã£ãã¹ã¼ãã¼ã¯ã©ã¹ã«ãããã³ã°ããã¦ããå ´åã å
¨ã¦ã®ãµãã¯ã©ã¹ã«ããã¦ã«ã©ã åãåãã§ãªããã°ãªããªãã¨ãããã®ã§ãã ï¼Hibernateã®ä»å¾ã®ãªãªã¼ã¹ã§ç·©åãããããããã¾ããï¼ã <union-subclass> ã使ã£ã table-per-concrete-class æ¦ç¥ã§ã¯èå¥åçææ¦ç¥ã使ç¨ã§ãã¾ããã 主ãã¼ãçæããããã®ã·ã¼ãã¯ãå
¨ã¦ã® union subclass ã®é層å
ã§å
±æããå¿
è¦ãããããã§ãã"
+
+#: index.docbook:179
+msgid "If your superclass is abstract, map it with <literal>abstract=\"true\"</literal>. Of course, if it is not abstract, an additional table (defaults to <literal>PAYMENT</literal> in the example above) is needed to hold instances of the superclass."
+msgstr "ããã¹ã¼ãã¼ã¯ã©ã¹ãæ½è±¡ã¯ã©ã¹ãªãã<literal>abstract=\"true\"</literal>ã¨ãããã³ã°ãã¾ãã ãã¡ãããã¹ã¼ãã¼ã¯ã©ã¹ãæ½è±¡ã¯ã©ã¹ã§ãªããªããã¹ã¼ãã¼ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã ä¿æããããã®ãã¼ãã«ã®è¿½å ãå¿
è¦ã¨ãªãã¾ã(ä¸ã®ä¾ã§ã®ããã©ã«ã㯠<literal>PAYMENT</literal> )ã"
+
+#: index.docbook:189
+msgid "Table per concrete class, using implicit polymorphism"
+msgstr "æé»çããªã¢ã¼ãã£ãºã ãç¨ãã table-per-concrete-class"
+
+#: index.docbook:191
+msgid "An alternative approach is to make use of implicit polymorphism:"
+msgstr "ããä¸ã¤ã®ã¢ããã¼ãã¯æé»çããªã¢ã¼ãã£ãºã ã®ä½¿ç¨ã§ãã"
+
+#: index.docbook:195
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CASH_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CHEQUE_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CASH_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CHEQUE_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:197
+msgid "Notice that nowhere do we mention the <literal>Payment</literal> interface explicitly. Also notice that properties of <literal>Payment</literal> are mapped in each of the subclasses. If you want to avoid duplication, consider using XML entities (e.g. <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal> in the <literal>DOCTYPE</literal> declartion and <literal>&allproperties;</literal> in the mapping)."
+msgstr "<literal>Payment</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ãã©ãã«ãæ示çã«ç¤ºããã¦ããªããã¨ã«æ³¨æãã¦ãã ããã ããã¦ã<literal>Payment</literal> ããããã£ãããããã®ãµãã¯ã©ã¹ã«ãããã³ã°ããã¦ãããã¨ã«ã注æãã¦ãã ããã ããéè¤ãé¿ãããã®ã§ããã°ãXMLã¨ã³ãã£ãã£ã®å©ç¨ãèãã¦ãã ããã ï¼ä¾ï¼ <literal>DOCTYPE</literal> 宣è¨ã«ããã <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal> ã¨ããããã³ã°ã«ããã <literal>&allproperties;</literal>ï¼"
+
+#: index.docbook:207
+msgid "The disadvantage of this approach is that Hibernate does not generate SQL <literal>UNION</literal>s when performing polymorphic queries."
+msgstr "ãã®ã¢ããã¼ãã®æ¬ ç¹ã¯ãHibernateãããªã¢ã¼ãã£ãã¯ãªã¯ã¨ãªã®å®è¡æã«SQL <literal>UNION</literal> ãçæããªãç¹ã§ãã"
+
+#: index.docbook:212
+msgid "For this mapping strategy, a polymorphic association to <literal>Payment</literal> is usually mapped using <literal><any></literal>."
+msgstr "ãã®ãããã³ã°æ¦ç¥ã«å¯¾ãã¦ã¯ã<literal>Payment</literal> ã¸ã®ããªã¢ã¼ãã£ãã¯ãªé¢é£ã¯ é常ã<literal><any></literal> ã使ã£ã¦ãããã³ã°ããã¾ãã"
+
+#: index.docbook:217
+msgid ""
+ "<![CDATA[<any name=\"payment\" meta-type=\"string\" id-type=\"long\">\n"
+ " <meta-value value=\"CREDIT\" class=\"CreditCardPayment\"/>\n"
+ " <meta-value value=\"CASH\" class=\"CashPayment\"/>\n"
+ " <meta-value value=\"CHEQUE\" class=\"ChequePayment\"/>\n"
+ " <column name=\"PAYMENT_CLASS\"/>\n"
+ " <column name=\"PAYMENT_ID\"/>\n"
+ "</any>]]>"
+msgstr ""
+ "<![CDATA[<any name=\"payment\" meta-type=\"string\" id-type=\"long\">\n"
+ " <meta-value value=\"CREDIT\" class=\"CreditCardPayment\"/>\n"
+ " <meta-value value=\"CASH\" class=\"CashPayment\"/>\n"
+ " <meta-value value=\"CHEQUE\" class=\"ChequePayment\"/>\n"
+ " <column name=\"PAYMENT_CLASS\"/>\n"
+ " <column name=\"PAYMENT_ID\"/>\n"
+ "</any>]]>"
+
+#: index.docbook:222
+msgid "Mixing implicit polymorphism with other inheritance mappings"
+msgstr "ä»ã®ç¶æ¿ãããã³ã°ã¨æé»çããªã¢ã¼ãã£ãºã ã®çµã¿åãã"
+
+#: index.docbook:224
+msgid "There is one further thing to notice about this mapping. Since the subclasses are each mapped in their own <literal><class></literal> element (and since <literal>Payment</literal> is just an interface), each of the subclasses could easily be part of another inheritance hierarchy! (And you can still use polymorphic queries against the <literal>Payment</literal> interface.)"
+msgstr "ãã®ãããã³ã°ã«ã¤ãã¦ã®æ´ãªã注æç¹ãããã¾ãã ãµãã¯ã©ã¹ãèªèº«ã <literal><class></literal> è¦ç´ ã¨ãã¦ãããã³ã°ãã¦ããã®ã§ã ï¼ã㤠<literal>Payment</literal> ã¯åãªãã¤ã³ã¿ã¼ãã§ã¤ã¹ãªã®ã§ï¼ã ããããã®ãµãã¯ã©ã¹ã¯ç°¡åã«ãã®ä»ã®ç¶æ¿é層ã®ä¸é¨ã¨ãªãã¾ãã ï¼ããããä»ã¾ã§ã©ãã <literal>Payment</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«å¯¾ããããªã¢ã¼ãã£ãã¯ãªã¯ã¨ãª ã使ç¨ãããã¨ãã§ãã¾ãï¼"
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"CREDIT_CARD\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"MasterCardPayment\" discriminator-value=\"MDC\"/>\n"
+ " <subclass name=\"VisaPayment\" discriminator-value=\"VISA\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"NonelectronicTransaction\" table=\"NONELECTRONIC_TXN\">\n"
+ " <id name=\"id\" type=\"long\" column=\"TXN_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " ...\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"CREDIT_CARD\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"MasterCardPayment\" discriminator-value=\"MDC\"/>\n"
+ " <subclass name=\"VisaPayment\" discriminator-value=\"VISA\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"NonelectronicTransaction\" table=\"NONELECTRONIC_TXN\">\n"
+ " <id name=\"id\" type=\"long\" column=\"TXN_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " ...\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:234
+msgid "Once again, we don't mention <literal>Payment</literal> explicitly. If we execute a query against the <literal>Payment</literal> interface - for example, <literal>from Payment</literal> - Hibernate automatically returns instances of <literal>CreditCardPayment</literal> (and its subclasses, since they also implement <literal>Payment</literal>), <literal>CashPayment</literal> and <literal>ChequePayment</literal> but not instances of <literal>NonelectronicTransaction</literal>."
+msgstr "ããä¸åº¦è¿°ã¹ã¾ããã<literal>Payment</literal> ã¯æ示çã«å®ç¾©ããã¾ããã ããã<literal>Payment</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã«å¯¾ãã¦ã¯ã¨ãªãå®è¡ãããªã ï¼ä¾ãã° <literal>from Payment</literal> ç¯ã使ã£ã¦ï¼ã Hibernateã¯èªåçã« <literal>CreditCardPayment</literal> ï¼ã¨CreditCardPaymentã®ãµãã¯ã©ã¹ã<literal>Payment</literal> ã®å®è£
ã§ããããï¼ã ããã³ã<literal>CashPayment</literal> ã<literal>ChequePayment</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ãè¿ãã¾ãã <literal>NonelectronicTransaction</literal> ã¤ã³ã¹ã¿ã³ã¹ã¯è¿ãã¾ããã"
+
+#: index.docbook:249
+msgid "Limitations"
+msgstr "<title>å¶é</title>"
+
+#: index.docbook:251
+msgid "There are certain limitations to the \"implicit polymorphism\" approach to the table per concrete-class mapping strategy. There are somewhat less restrictive limitations to <literal><union-subclass></literal> mappings."
+msgstr "table-per-concrete-class ãããã³ã°æ¦ç¥ã¸ã®ãæé»çããªã¢ã¼ãã£ãºã ãã¢ããã¼ãã«ã¯ ããã¤ãã®å¶éãããã¾ãã<literal><union-subclass></literal> ãããã³ã°ã«å¯¾ãã¦ã å°ãå¼±ãã®å¶éãããã¾ãã"
+
+#: index.docbook:258
+msgid "The following table shows the limitations of table per concrete-class mappings, and of implicit polymorphism, in Hibernate."
+msgstr "次ã®ãã¼ãã«ã«ãHibernateã«ãããtable-per-concrete-classãããã³ã°ã® å¶éãæé»çããªã¢ã¼ãã£ãºã ã®å¶éã示ãã¾ãã"
+
+#: index.docbook:264
+msgid "Features of inheritance mappings"
+msgstr "ç¶æ¿ãããã³ã°ã®æ©è½"
+
+#: index.docbook:276
+msgid "Inheritance strategy"
+msgstr "ç¶æ¿æ¦ç¥"
+
+#: index.docbook:277
+msgid "Polymorphic many-to-one"
+msgstr "å¤å¯¾ä¸ã®ããªã¢ã¼ãã£ãºã "
+
+#: index.docbook:278
+msgid "Polymorphic one-to-one"
+msgstr "ä¸å¯¾ä¸ã®ããªã¢ã¼ãã£ãºã "
+
+#: index.docbook:279
+msgid "Polymorphic one-to-many"
+msgstr "ä¸å¯¾å¤ã®ããªã¢ã¼ãã£ãºã "
+
+#: index.docbook:280
+msgid "Polymorphic many-to-many"
+msgstr "å¤å¯¾å¤ã®ããªã¢ã¼ãã£ãºã "
+
+#: index.docbook:281
+msgid "Polymorphic <literal>load()/get()</literal>"
+msgstr "ããªã¢ã¼ãã£ãºã ã使ã£ã<literal>load()/get()</literal>"
+
+#: index.docbook:282
+msgid "Polymorphic queries"
+msgstr "ããªã¢ã¼ãã£ãºã ã使ã£ãã¯ã¨ãª"
+
+#: index.docbook:283
+msgid "Polymorphic joins"
+msgstr "ããªã¢ã¼ãã£ãºã ã使ã£ãçµå"
+
+#: index.docbook:284
+msgid "Outer join fetching"
+msgstr "å¤é¨çµåã«ãããã§ãã"
+
+#: index.docbook:289
+msgid "table per class-hierarchy"
+msgstr "table per class-hierarchy"
+
+#: index.docbook:290, index.docbook:301, index.docbook:312
+msgid "<many-to-one>"
+msgstr "<many-to-one>"
+
+#: index.docbook:291, index.docbook:302, index.docbook:313
+msgid "<one-to-one>"
+msgstr "<one-to-one>"
+
+#: index.docbook:292, index.docbook:303
+msgid "<one-to-many>"
+msgstr "<one-to-many>"
+
+#: index.docbook:293, index.docbook:304, index.docbook:315
+msgid "<many-to-many>"
+msgstr "<many-to-many>"
+
+#: index.docbook:294, index.docbook:305, index.docbook:316
+msgid "s.get(Payment.class, id)"
+msgstr "s.get(Payment.class, id)"
+
+#: index.docbook:295, index.docbook:306, index.docbook:317, index.docbook:328
+msgid "from Payment p"
+msgstr "from Payment p"
+
+#: index.docbook:296, index.docbook:307, index.docbook:318
+msgid "from Order o join o.payment p"
+msgstr "from Order o join o.payment p"
+
+#: index.docbook:297, index.docbook:308, index.docbook:319
+msgid "supported"
+msgstr "ãµãã¼ã"
+
+#: index.docbook:300
+msgid "<entry>table per subclass</entry>"
+msgstr "table per subclass"
+
+#: index.docbook:311
+msgid "table per concrete-class (union-subclass)"
+msgstr "table per concrete-class (union-subclass)"
+
+#: index.docbook:314
+msgid "<literal><one-to-many></literal> (for <literal>inverse=\"true\"</literal> only)"
+msgstr "<literal><one-to-many></literal> (for <literal>inverse=\"true\"</literal> only)"
+
+#: index.docbook:322
+msgid "table per concrete class (implicit polymorphism)"
+msgstr "table per concrete class (implicit polymorphism)"
+
+#: index.docbook:323
+msgid "<any>"
+msgstr "<any>"
+
+#: index.docbook:324, index.docbook:325, index.docbook:329, index.docbook:330
+msgid "not supported"
+msgstr "ãµãã¼ããã¦ãã¾ãã"
+
+#: index.docbook:326
+msgid "<many-to-any>"
+msgstr "<many-to-any>"
+
+#: index.docbook:327
+msgid "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+msgstr "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/performance.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/performance.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/performance.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1348 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Improving performance"
+msgstr "ããã©ã¼ãã³ã¹ã®æ¹å"
+
+#: index.docbook:8
+msgid "Fetching strategies"
+msgstr "ãã§ããæ¦ç¥"
+
+#: index.docbook:10
+msgid "A <emphasis>fetching strategy</emphasis> is the strategy Hibernate will use for retrieving associated objects if the application needs to navigate the association. Fetch strategies may be declared in the O/R mapping metadata, or over-ridden by a particular HQL or <literal>Criteria</literal> query."
+msgstr "<emphasis>ãã§ããæ¦ç¥</emphasis> ã¯ãã¢ããªã±ã¼ã·ã§ã³ãé¢é£ãããã²ã¼ãããå¿
è¦ããã ã¨ãã«ãHibernateãé¢é£ãªãã¸ã§ã¯ãã復å
ããããã«ä½¿ç¨ããæ¦ç¥ã§ãããã§ããæ¦ç¥ã¯O/Rãããã³ã°ã® ã¡ã¿ãã¼ã¿ã«å®£è¨ããããç¹å®ã®HQLã <literal>Criteria</literal> ã¯ã¨ãªã§ãªã¼ãã¼ã©ã¤ããã¾ãã"
+
+#: index.docbook:17
+msgid "Hibernate3 defines the following fetching strategies:"
+msgstr "Hibernate3ã¯æ¬¡ã«ç¤ºããã§ããæ¦ç¥ãå®ç¾©ãã¦ãã¾ãã"
+
+#: index.docbook:23
+msgid "<emphasis>Join fetching</emphasis> - Hibernate retrieves the associated instance or collection in the same <literal>SELECT</literal>, using an <literal>OUTER JOIN</literal>."
+msgstr "<emphasis>çµåãã§ãã</emphasis> - Hibernate㯠<literal>OUTER JOIN</literal> ã使ã£ã¦ã é¢é£ããã¤ã³ã¹ã¿ã³ã¹ãã³ã¬ã¯ã·ã§ã³ãï¼ã¤ã® <literal>SELECT</literal> ã§å¾©å
ãã¾ãã"
+
+#: index.docbook:30
+msgid "<emphasis>Select fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated entity or collection. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr "<emphasis>ã»ã¬ã¯ããã§ãã</emphasis> - 2åç®ã® <literal>SELECT</literal> ã§é¢é£ããã¨ã³ãã£ãã£ãã³ã¬ã¯ã·ã§ã³ã復å
ãã¾ãã <literal>lazy=\"false\"</literal> ã§æ示çã«é
延ãã§ãããç¡å¹ã«ããªããã°ããã®2åç®ã®selectã¯å®éã« é¢é£ã«ã¢ã¯ã»ã¹ããã¨ãã®ã¿å®è¡ãããã§ãããã"
+
+#: index.docbook:39
+msgid "<emphasis>Subselect fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated collections for all entities retrieved in a previous query or fetch. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr "<emphasis>ãµãã»ã¬ã¯ããã§ãã</emphasis> - 2åç®ã® <literal>SELECT</literal> ã§ãç´åã®ã¯ã¨ãªããã§ããã§å¾©å
ãããã¹ã¦ã®è¦ç´ ã«é¢é£ããã³ã¬ã¯ã·ã§ã³ã 復å
ãã¾ãã <literal>lazy=\"false\"</literal> ã§æ示çã«é
延ãã§ãããç¡å¹ã«ããªããã°ããã®2åç®ã®selectã¯å®éã« é¢é£ã«ã¢ã¯ã»ã¹ããã¨ãã®ã¿å®è¡ãããã§ãããã"
+
+#: index.docbook:48
+msgid "<emphasis>Batch fetching</emphasis> - an optimization strategy for select fetching - Hibernate retrieves a batch of entity instances or collections in a single <literal>SELECT</literal>, by specifying a list of primary keys or foreign keys."
+msgstr "<emphasis>ããããã§ãã</emphasis> - ã»ã¬ã¯ããã§ããã®ããã®æé©åãããæ¦ç¥ - Hibernateã¯ã¨ã³ãã£ãã£ã®ã¤ã³ã¹ã¿ã³ã¹ãã³ã¬ã¯ã·ã§ã³ã®ä¸ç¾¤ã1åã® <literal>SELECT</literal> ã§å¾©å
ãã¾ããããã¯ä¸»ãã¼ãå¤é¨ãã¼ã®ãªã¹ããæå®ãããã¨ã« ã«ããè¡ãã¾ãã"
+
+#: index.docbook:57
+msgid "Hibernate also distinguishes between:"
+msgstr "Hibernateã¯æ¬¡ã«ç¤ºãæ¦ç¥ã¨ãåºå¥ããã¾ãã"
+
+#: index.docbook:63
+msgid "<emphasis>Immediate fetching</emphasis> - an association, collection or attribute is fetched immediately, when the owner is loaded."
+msgstr "<emphasis>å³æãã§ãã</emphasis> - ææè
ã®ãªãã¸ã§ã¯ãããã¼ããããã¨ãã«ã é¢é£ãã³ã¬ã¯ã·ã§ã³ã¯å³æã«ãã§ããããã¾ãã"
+
+#: index.docbook:69
+msgid "<emphasis>Lazy collection fetching</emphasis> - a collection is fetched when the application invokes an operation upon that collection. (This is the default for collections.)"
+msgstr "<emphasis>é
延ã³ã¬ã¯ã·ã§ã³ãã§ãã</emphasis> - ã¢ããªã±ã¼ã·ã§ã³ãã³ã¬ã¯ã·ã§ã³ã« 対ãã¦æä½ãè¡ã£ãã¨ãã«ã³ã¬ã¯ã·ã§ã³ããã§ãããã¾ãã (ããã¯ã³ã¬ã¯ã·ã§ã³ã«å¯¾ããããã©ã«ãã®åä½ã§ã)"
+
+#: index.docbook:76
+msgid "<emphasis>\"Extra-lazy\" collection fetching</emphasis> - individual elements of the collection are accessed from the database as needed. Hibernate tries not to fetch the whole collection into memory unless absolutely needed (suitable for very large collections)"
+msgstr "<emphasis>\"ç¹å¥ãªé
延\"ã³ã¬ã¯ã·ã§ã³ãã§ãã</emphasis> - ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ï¼ã¤ï¼ã¤ãç¬ç«ãã¦ãå¿
è¦ãªã¨ãã«ãã¼ã¿ãã¼ã¹ããåå¾ããã¾ãã Hibernateã¯å¿
è¦ãªããªãã°ãã³ã¬ã¯ã·ã§ã³å
¨ä½ãã¡ã¢ãªã«ãã§ãããããã¨ã¯ é¿ãã¾ãï¼ã¨ã¦ã大ããªã³ã¬ã¯ã·ã§ã³ã«é©ãã¦ãã¾ãï¼ã"
+
+#: index.docbook:84
+msgid "<emphasis>Proxy fetching</emphasis> - a single-valued association is fetched when a method other than the identifier getter is invoked upon the associated object."
+msgstr "<emphasis>ãããã·ãã§ãã</emphasis> - åä¸å¤é¢é£ã¯ãèå¥åã®getter以å¤ã® ã¡ã½ãããé¢é£ãªãã¸ã§ã¯ãã§å¼ã³åºãããã¨ãã«ãã§ããããã¾ãã"
+
+#: index.docbook:91
+msgid "<emphasis>\"No-proxy\" fetching</emphasis> - a single-valued association is fetched when the instance variable is accessed. Compared to proxy fetching, this approach is less lazy (the association is fetched even when only the identifier is accessed) but more transparent, since no proxy is visible to the application. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr "<emphasis>\"ãããã·ãªã\"ãã§ãã</emphasis> - åä¸å¤é¢é£ã¯ãã¤ã³ã¹ã¿ã³ã¹å¤æ°ã« ã¢ã¯ã»ã¹ãããã¨ãã«ãã§ããããã¾ãããããã·ãã§ããã¨æ¯è¼ããã¨ããã®æ¹æ³ã¯ é
延ã®åº¦åããå°ãªãï¼é¢é£ã¯èå¥åã«ã¢ã¯ã»ã¹ããã ãã§ããã§ããããã¾ãï¼ ã§ãããããééçã§ãã¢ããªã±ã¼ã·ã§ã³ã«ãããã·ãåå¨ããªãããã«è¦ãã¾ãã ãã®æ¹æ³ã¯ãã«ãæã®ãã¤ãã³ã¼ãçµã¿è¾¼ã¿ãå¿
è¦ã«ãªãã使ãå ´é¢ã¯ã¾ãã§ãã"
+
+#: index.docbook:101
+msgid "<emphasis>Lazy attribute fetching</emphasis> - an attribute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr "<emphasis>é
延å±æ§ãã§ãã</emphasis> - å±æ§ãåä¸å¤é¢é£ã¯ãã¤ã³ã¹ã¿ã³ã¹å¤æ°ã«ã¢ã¯ã»ã¹ãã ã¨ãã«ãã§ããããã¾ãããã®æ¹æ³ã¯ãã«ãæã®ãã¤ãã³ã¼ãçµã¿è¾¼ã¿ãå¿
è¦ã«ãªãã 使ãå ´é¢ã¯ã¾ãã§ãã"
+
+#: index.docbook:110
+msgid "We have two orthogonal notions here: <emphasis>when</emphasis> is the association fetched, and <emphasis>how</emphasis> is it fetched (what SQL is used). Don't confuse them! We use <literal>fetch</literal> to tune performance. We may use <literal>lazy</literal> to define a contract for what data is always available in any detached instance of a particular class."
+msgstr "äºã¤ã®ç´è¡ããæ¦å¿µãããã¾ã: <emphasis>ãã¤</emphasis> é¢é£ããã§ãããããã ããã¦ã <emphasis>ã©ããã£ã¦</emphasis> ãã§ãããããï¼ã©ããªSQLã使ã£ã¦ï¼ã ããããæ··åããªãã§ãã ããï¼ <literal>fetch</literal> ã¯ããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã«ä½¿ãã¾ãã <literal>lazy</literal> ã¯ããã¯ã©ã¹ã®åé¢ãããã¤ã³ã¹ã¿ã³ã¹ã®ãã¡ãã©ã®ãã¼ã¿ã常㫠使ç¨å¯è½ã«ãããã®åã決ããå®ç¾©ãã¾ãã"
+
+#: index.docbook:119
+msgid "Working with lazy associations"
+msgstr "é
延é¢é£ã®åã"
+
+#: index.docbook:121
+msgid "By default, Hibernate3 uses lazy select fetching for collections and lazy proxy fetching for single-valued associations. These defaults make sense for almost all associations in almost all applications."
+msgstr "ããã©ã«ãã§ã¯ãHibernate3ã¯ã³ã¬ã¯ã·ã§ã³ã«å¯¾ãã¦ã¯é
延ã»ã¬ã¯ããã§ããã使ãã åä¸å¤é¢é£ã«ã¯é
延ãããã·ãã§ããã使ãã¾ãããããã®ããã©ã«ãåä½ã¯ã»ã¼ãã¹ã¦ã® ã¢ããªã±ã¼ã·ã§ã³ã®ã»ã¼ãã¹ã¦ã®é¢é£ã§æå³ãããã¾ãã"
+
+#: index.docbook:127
+msgid "<emphasis>Note:</emphasis> if you set <literal>hibernate.default_batch_fetch_size</literal>, Hibernate will use the batch fetch optimization for lazy fetching (this optimization may also be enabled at a more granular level)."
+msgstr "<emphasis>注:</emphasis> <literal>hibernate.default_batch_fetch_size</literal> ãã»ããããã¨ãã¯ãHibernate㯠é
延ãã§ããã®ããã®ããããã§ããæé©åã使ãã§ããã ï¼ãã®æé©åã¯ããç´°ããã¬ãã«ã§æå¹ã«ãããã¨ãåºæ¥ã¾ãï¼ã"
+
+#: index.docbook:134
+msgid "However, lazy fetching poses one problem that you must be aware of. Access to a lazy association outside of the context of an open Hibernate session will result in an exception. For example:"
+msgstr "ããããé
延ãã§ããã¯ç¥ã£ã¦ãããªããã°ãªããªãä¸ã¤ã®åé¡ãããã¾ãã Hibernateã®sessionããªã¼ãã³ãã¦ããã³ã³ããã¹ãã®å¤ããé
延é¢é£ã«ã¢ã¯ã»ã¹ããã¨ã ä¾å¤ãçºçãã¾ããä¾ï¼"
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[s = sessions.openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ " \n"
+ "User u = (User) s.createQuery(\"from User u where u.name=:userName\")\n"
+ " .setString(\"userName\", userName).uniqueResult();\n"
+ "Map permissions = u.getPermissions();\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();\n"
+ "\n"
+ "Integer accessLevel = (Integer) permissions.get(\"accounts\"); // Error!]]>"
+msgstr ""
+ "<![CDATA[s = sessions.openSession();
+\n"
+ "Transaction tx = s.beginTransaction();
+\n"
+ "
+\n"
+ "User u = (User) s.createQuery(\"from User u where u.name=:userName\")
+\n"
+ " .setString(\"userName\", userName).uniqueResult();
+\n"
+ "Map permissions = u.getPermissions();
+\n"
+ "
+\n"
+ "tx.commit();
+\n"
+ "s.close();
+\n"
+ "
+\n"
+ "Integer accessLevel = (Integer) permissions.get(\"accounts\"); // Error!]]>"
+
+#: index.docbook:142
+msgid "Since the permissions collection was not initialized when the <literal>Session</literal> was closed, the collection will not be able to load its state. <emphasis>Hibernate does not support lazy initialization for detached objects</emphasis>. The fix is to move the code that reads from the collection to just before the transaction is committed."
+msgstr "<literal>Session</literal> ãã¯ãã¼ãºãããã¨ããpermissionsã³ã¬ã¯ã·ã§ã³ã¯ åæåããã¦ããªãããããã®ã³ã¬ã¯ã·ã§ã³ã¯èªèº«ã®ç¶æ
ããã¼ãã§ãã¾ããã <emphasis>Hibernateã¯åãé¢ããããªãã¸ã§ã¯ãã®é
延åæåã¯ãµãã¼ã ãã¦ãã¾ãã</emphasis> ãä¿®æ£æ¹æ³ã¨ãã¦ãã³ã¬ã¯ã·ã§ã³ããèªã¿è¾¼ã¿ãè¡ãã³ã¼ãã ãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããç´åã«ç§»åããã¾ãã"
+
+#: index.docbook:150
+msgid "Alternatively, we could use a non-lazy collection or association, by specifying <literal>lazy=\"false\"</literal> for the association mapping. However, it is intended that lazy initialization be used for almost all collections and associations. If you define too many non-lazy associations in your object model, Hibernate will end up needing to fetch the entire database into memory in every transaction!"
+msgstr "ä¸æ¹ã§ã <literal>lazy=\"false\"</literal> ãé¢é£ãããã³ã°ã«æå®ãããã¨ã§ã é
延å¦çãããªãã³ã¬ã¯ã·ã§ã³ãé¢é£ã使ããã¨ãåºæ¥ã¾ãã ããããªãããé
延åæåã¯ã»ã¼ãã¹ã¦ã®ã³ã¬ã¯ã·ã§ã³ãé¢é£ã§ä½¿ããããã¨ã æå³ãã¦ãã¾ããããããªãã®ãªãã¸ã§ã¯ãã¢ãã«ã®ä¸ã«é
延å¦çãããªãé¢é£ã å¤ãå®ç¾©ãã¦ãã¾ãã¨ãHibernateã¯æçµçã«ã¯ãã©ã³ã¶ã¯ã·ã§ã³æ¯ã« ã»ã¼å®å
¨ãªãã¼ã¿ãã¼ã¹ãã¡ã¢ãªã®ä¸ã«ãã§ãããããã¨ã«ãªãã§ãããï¼"
+
+#: index.docbook:159
+msgid "On the other hand, we often want to choose join fetching (which is non-lazy by nature) instead of select fetching in a particular transaction. We'll now see how to customize the fetching strategy. In Hibernate3, the mechanisms for choosing a fetch strategy are identical for single-valued associations and collections."
+msgstr "ä»æ¹ã§ã¯ãç¹å®ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ããã¦ã»ã¬ã¯ããã§ããã®ä»£ããã« çµåãã§ããï¼å½ç¶ããã¯é
延å¦çã§ã¯ãªããªãã¾ãï¼ãé¸æããããã¨ã æã
ããã¾ãããããããã§ããæ¦ç¥ãã«ã¹ã¿ãã¤ãºããæ¹æ³ããè¦ããã¾ãã Hibernate3ã§ã¯ããã§ããæ¦ç¥ãé¸æããä»çµã¿ã¯åä¸å¤é¢é£ã¨ã³ã¬ã¯ã·ã§ã³ã§ å¤ããã¯ããã¾ããã"
+
+#: index.docbook:170
+msgid "Tuning fetch strategies"
+msgstr "ãã§ããæ¦ç¥ã®ãã¥ã¼ãã³ã°"
+
+#: index.docbook:172
+msgid "Select fetching (the default) is extremely vulnerable to N+1 selects problems, so we might want to enable join fetching in the mapping document:"
+msgstr "ã»ã¬ã¯ããã§ããï¼ããã©ã«ãï¼ã¯N+1ã»ã¬ã¯ãåé¡ã¨ãã大ããªå¼±ç¹ãããããã ãããã³ã°å®ç¾©ã§çµåãã§ãããæå¹ã«ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:177
+msgid ""
+ "<![CDATA[<set name=\"permissions\" \n"
+ " fetch=\"join\">\n"
+ " <key column=\"userId\"/>\n"
+ " <one-to-many class=\"Permission\"/>\n"
+ "</set]]>"
+msgstr ""
+ "<![CDATA[<set name=\"permissions\"
+\n"
+ " fetch=\"join\">
+\n"
+ " <key column=\"userId\"/>
+\n"
+ " <one-to-many class=\"Permission\"/>
+\n"
+ "</set]]>"
+
+#: index.docbook:179
+msgid "<![CDATA[<many-to-one name=\"mother\" class=\"Cat\" fetch=\"join\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"mother\" class=\"Cat\" fetch=\"join\"/>]]>"
+
+#: index.docbook:181
+msgid "The <literal>fetch</literal> strategy defined in the mapping document affects:"
+msgstr "ãããã³ã°å®ç¾©ã§å®ç¾©ãã <literal>ãã§ãã</literal> æ¦ç¥ã¯æ¬¡ã®ãã®ã«å½±é¿ãã¾ãã"
+
+#: index.docbook:187
+msgid "retrieval via <literal>get()</literal> or <literal>load()</literal>"
+msgstr "<literal>get()</literal> ã <literal>load()</literal> ã«ãã復å
"
+
+#: index.docbook:192
+msgid "retrieval that happens implicitly when an association is navigated"
+msgstr "é¢é£ã«ããã²ã¼ãããã¨ãã«çºçããæé»çãªå¾©å
"
+
+#: index.docbook:197
+msgid "<literal>Criteria</literal> queries"
+msgstr "<literal>Criteria</literal> ã¯ã¨ãª"
+
+#: index.docbook:202
+msgid "HQL queries if <literal>subselect</literal> fetching is used"
+msgstr "<literal>ãµãã»ã¬ã¯ã</literal> ãã§ããã使ãHQLã¯ã¨ãª"
+
+#: index.docbook:208
+msgid "No matter what fetching strategy you use, the defined non-lazy graph is guaranteed to be loaded into memory. Note that this might result in several immediate selects being used to execute a particular HQL query."
+msgstr "ãã¨ãã©ããªãã§ããæ¦ç¥ã使ã£ãã¨ãã¦ããé
延ã§ã¯ãªãã°ã©ãã¯ã¡ã¢ãªã«èªã¿è¾¼ã¾ãããã¨ã ä¿è¨¼ããã¾ããã¤ã¾ããç¹å®ã®HQLã¯ã¨ãªãå®è¡ããããã«ããã¤ãã®SELECTæãå³æå®è¡ããã ãã¨ãããã®ã§æ³¨æãã¦ãã ããã"
+
+#: index.docbook:214
+msgid "Usually, we don't use the mapping document to customize fetching. Instead, we keep the default behavior, and override it for a particular transaction, using <literal>left join fetch</literal> in HQL. This tells Hibernate to fetch the association eagerly in the first select, using an outer join. In the <literal>Criteria</literal> query API, you would use <literal>setFetchMode(FetchMode.JOIN)</literal>."
+msgstr "é常ã¯ããããã³ã°å®ç¾©ã§ãã§ããã®ã«ã¹ã¿ãã¤ãºã¯è¡ãã¾ããã 代ããã«ãããã©ã«ãã®åä½ã®ã¾ã¾ã«ãã¦ããã¦ãHQL㧠<literal>left join fetch</literal> ã æå®ãããã¨ã§ç¹å®ã®ãã©ã³ã¶ã¯ã·ã§ã³ã§åä½ããªã¼ãã¼ã©ã¤ããã¾ãã ããã¯Hibernateã«ååã®ã»ã¬ã¯ãã§å¤é¨çµåã使ã£ã¦é¢é£ãå
ã«ãã§ããããããã«æå®ãã¦ãã¾ãã <literal>Criteria</literal> ã¯ã¨ãªã®APIã§ã¯ã <literal>setFetchMode(FetchMode.JOIN)</literal> ã使ããã¨ãåºæ¥ã¾ãã"
+
+#: index.docbook:223
+msgid "If you ever feel like you wish you could change the fetching strategy used by <literal>get()</literal> or <literal>load()</literal>, simply use a <literal>Criteria</literal> query, for example:"
+msgstr "ãã <literal>get()</literal> ã <literal>load()</literal> ã§ä½¿ããã ãã§ããæ¦ç¥ãå¤ãããã¨æããã¨ãã«ã¯ãåç´ã« <literal>Criteria</literal> ã¯ã¨ãªã使ã£ã¦ãã ãããä¾ï¼"
+
+#: index.docbook:229
+msgid ""
+ "<![CDATA[User user = (User) session.createCriteria(User.class)\n"
+ " .setFetchMode(\"permissions\", FetchMode.JOIN)\n"
+ " .add( Restrictions.idEq(userId) )\n"
+ " .uniqueResult();]]>"
+msgstr ""
+ "<![CDATA[User user = (User) session.createCriteria(User.class)
+\n"
+ " .setFetchMode(\"permissions\", FetchMode.JOIN)
+\n"
+ " .add( Restrictions.idEq(userId) )
+\n"
+ " .uniqueResult();]]>"
+
+#: index.docbook:231
+msgid "(This is Hibernate's equivalent of what some ORM solutions call a \"fetch plan\".)"
+msgstr "ï¼ããã¯ããã¤ãã®ORMã½ãªã¥ã¼ã·ã§ã³ã\"fetch plan\"ã¨å¼ãã§ãããã®ã¨åãã§ããï¼"
+
+#: index.docbook:235
+msgid "A completely different way to avoid problems with N+1 selects is to use the second-level cache."
+msgstr "N+1ã»ã¬ã¯ãåé¡ãé¿ããããã®ã¾ã£ããéãæ¹æ³ã¯ã第2ã¬ãã«ãã£ãã·ã¥ã使ããã¨ã§ãã"
+
+#: index.docbook:243
+msgid "Single-ended association proxies"
+msgstr "åä¸ç«¯é¢é£ãããã·"
+
+#: index.docbook:245
+msgid "Lazy fetching for collections is implemented using Hibernate's own implementation of persistent collections. However, a different mechanism is needed for lazy behavior in single-ended associations. The target entity of the association must be proxied. Hibernate implements lazy initializing proxies for persistent objects using runtime bytecode enhancement (via the excellent CGLIB library)."
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®é
延ãã§ããã¯ãHibernateèªèº«ã®å®è£
ã«ããæ°¸ç¶ã³ã¬ã¯ã·ã§ã³ã使ã£ã¦ å®ç¾ãã¦ãã¾ããããããåä¸ç«¯é¢é£ã«ãããé
延å¦çã§ã¯ãéãä»çµã¿ã å¿
è¦ã§ãã対象ã®é¢é£ã¨ã³ãã£ãã£ã¯ãããã·ã§ãªããã°ãªãã¾ãããHibernate㯠ï¼ãã°ãããCGLIBã©ã¤ãã©ãªã«ããï¼å®è¡æã®ãã¤ãã³ã¼ãæ¡å¼µã 使ã£ã¦æ°¸ç¶ãªãã¸ã§ã¯ãã®é
延åæåãããã·ãå®ç¾ãã¦ãã¾ãã"
+
+#: index.docbook:253
+msgid "By default, Hibernate3 generates proxies (at startup) for all persistent classes and uses them to enable lazy fetching of <literal>many-to-one</literal> and <literal>one-to-one</literal> associations."
+msgstr "ããã©ã«ãã§ã¯ãHibernate3ã¯ï¼éå§æã«ï¼ãã¹ã¦ã®æ°¸ç¶ã¯ã©ã¹ã®ãããã·ãçæãã ãããã使ã£ã¦ã <literal>many-to-one</literal> ã <literal>one-to-one</literal> é¢é£ã® é
延ãã§ãããå¯è½ã«ãã¦ãã¾ãã"
+
+#: index.docbook:259
+msgid "The mapping file may declare an interface to use as the proxy interface for that class, with the <literal>proxy</literal> attribute. By default, Hibernate uses a subclass of the class. <emphasis>Note that the proxied class must implement a default constructor with at least package visibility. We recommend this constructor for all persistent classes!</emphasis>"
+msgstr "ãããã³ã°ãã¡ã¤ã«ã§ <literal>proxy</literal> å±æ§ã«ãã£ã¦ãã¯ã©ã¹ã®ãããã·ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¨ã㦠使ãã¤ã³ã¿ã¼ãã§ã¤ã¹ã宣è¨ã§ãã¾ããããã©ã«ãã§ã¯ãHibernateã¯ãã®ã¯ã©ã¹ã®ãµãã¯ã©ã¹ã使ãã¾ãã <emphasis>ãããã·ã¯ã©ã¹ã¯å°ãªãã¨ãããã±ã¼ã¸å¯è¦ã§ããã©ã«ãã³ã³ã¹ãã©ã¯ã¿ãå®è£
ããªããã° ãªããªããã¨ã«æ³¨æãã¦ãã ããããã¹ã¦ã®æ°¸ç¶ã¯ã©ã¹ã«ãã®ã³ã³ã¹ãã©ã¯ã¿ãæ¨å¥¨ãã¾ãï¼</emphasis>"
+
+#: index.docbook:266
+msgid "There are some gotchas to be aware of when extending this approach to polymorphic classes, eg."
+msgstr "ããªã¢ã¼ãã£ãºã ã®ã¯ã©ã¹ã«å¯¾ãã¦ãã®æ¹æ³ãé©ç¨ããã¨ãã«ããã¤ãèæ
®ãããã¨ãããã¾ãã ä¾ï¼"
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<class name=\"Cat\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Cat\" proxy=\"Cat\">
+\n"
+ " ......
+\n"
+ " <subclass name=\"DomesticCat\">
+\n"
+ " .....
+\n"
+ " </subclass>
+\n"
+ "</class>]]>"
+
+#: index.docbook:273
+msgid "Firstly, instances of <literal>Cat</literal> will never be castable to <literal>DomesticCat</literal>, even if the underlying instance is an instance of <literal>DomesticCat</literal>:"
+msgstr "第ä¸ã«ã <literal>Cat</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ <literal>DomesticCat</literal> ã«ãã£ã¹ãã§ãã¾ããããã¨ãåºã¨ãªãã¤ã³ã¹ã¿ã³ã¹ã <literal>DomesticCat</literal> ã§ãã£ãã¨ãã¦ãã§ãã"
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)\n"
+ "if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy\n"
+ " DomesticCat dc = (DomesticCat) cat; // Error!\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)
+\n"
+ "if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy
+\n"
+ " DomesticCat dc = (DomesticCat) cat; // Error!
+\n"
+ " ....
+\n"
+ "}]]>"
+
+#: index.docbook:281
+msgid "Secondly, it is possible to break proxy <literal>==</literal>."
+msgstr "第äºã«ããããã·ã® <literal>==</literal> ã¯æç«ããªããã¨ãããã¾ãã"
+
+#: index.docbook:285
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy\n"
+ "DomesticCat dc = \n"
+ " (DomesticCat) session.load(DomesticCat.class, id); // acquire new DomesticCat proxy!\n"
+ "System.out.println(cat==dc); // false]]>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy
+\n"
+ "DomesticCat dc =
+\n"
+ " (DomesticCat) session.load(DomesticCat.class, id); // acquire new DomesticCat proxy!
+\n"
+ "System.out.println(cat==dc); // false]]>"
+
+#: index.docbook:287
+msgid "However, the situation is not quite as bad as it looks. Even though we now have two references to different proxy objects, the underlying instance will still be the same object:"
+msgstr "ããããããã¯è¦ããã»ã©æªãç¶æ³ã¨ããããã§ã¯ããã¾ããããã¨ãç°ãªã£ããããã·ãªãã¸ã§ã¯ãã¸ã® äºã¤ã®åç
§ããã£ãã¨ãã¦ããåºã¨ãªãã¤ã³ã¹ã¿ã³ã¹ã¯åããªãã¸ã§ã¯ãã§ãã"
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy\n"
+ "System.out.println( dc.getWeight() ); // 11.0]]>"
+msgstr ""
+ "<![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy
+\n"
+ "System.out.println( dc.getWeight() ); // 11.0]]>"
+
+#: index.docbook:294
+msgid "Third, you may not use a CGLIB proxy for a <literal>final</literal> class or a class with any <literal>final</literal> methods."
+msgstr "第ä¸ã«ã <literal>final</literal> ã¯ã©ã¹ã <literal>final</literal> ã¡ã½ãããæã¤ã¯ã©ã¹ã« CGLIBãããã·ã使ãã¾ããã"
+
+#: index.docbook:299
+msgid "Finally, if your persistent object acquires any resources upon instantiation (eg. in initializers or default constructor), then those resources will also be acquired by the proxy. The proxy class is an actual subclass of the persistent class."
+msgstr "æå¾ã«ãããæ°¸ç¶ãªãã¸ã§ã¯ãã®ã¤ã³ã¹ã¿ã³ã¹åæ(ä¾ãã°ãåæåå¦çãããã©ã«ãã³ã³ã¹ãã©ã¯ã¿ã®ä¸ã§) ã«ãªãããã®ãªã½ã¼ã¹ãå¿
è¦ã¨ãªããªãããã®ãªã½ã¼ã¹ãã¾ããããã·ãéãã¦åå¾ããã¾ãã å®éã«ã¯ããããã·ã¯ã©ã¹ã¯æ°¸ç¶ã¯ã©ã¹ã®ãµãã¯ã©ã¹ã§ãã"
+
+#: index.docbook:305
+msgid "These problems are all due to fundamental limitations in Java's single inheritance model. If you wish to avoid these problems your persistent classes must each implement an interface that declares its business methods. You should specify these interfaces in the mapping file. eg."
+msgstr "ãããã®åé¡ã¯Javaã®åä¸ç¶æ¿ã¢ãã«ã®åçä¸ã®å¶éã®ããã§ãããããããã®åé¡ãé¿ãããã®ãªãã ãã¸ãã¹ã¡ã½ããã宣è¨ããã¤ã³ã¿ã¼ãã§ã¤ã¹ãããããæ°¸ç¶ã¯ã©ã¹ã§å®è£
ããªããã°ãªãã¾ããã ãããã³ã°ãã¡ã¤ã«ã§ãããã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ãæå®ããå¿
è¦ãããã¾ããä¾ï¼"
+
+#: index.docbook:311
+msgid ""
+ "<![CDATA[<class name=\"CatImpl\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCatImpl\" proxy=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CatImpl\" proxy=\"Cat\">
+\n"
+ " ......
+\n"
+ " <subclass name=\"DomesticCatImpl\" proxy=\"DomesticCat\">
+\n"
+ " .....
+\n"
+ " </subclass>
+\n"
+ "</class>]]>"
+
+#: index.docbook:313
+msgid "where <literal>CatImpl</literal> implements the interface <literal>Cat</literal> and <literal>DomesticCatImpl</literal> implements the interface <literal>DomesticCat</literal>. Then proxies for instances of <literal>Cat</literal> and <literal>DomesticCat</literal> may be returned by <literal>load()</literal> or <literal>iterate()</literal>. (Note that <literal>list()</literal> does not usually return proxies.)"
+msgstr "<literal>CatImpl</literal> 㯠<literal>Cat</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ããã®ã«å¯¾ãã <literal>DomesticCatImpl</literal> 㯠<literal>DomesticCat</literal> ãå®è£
ãã¾ãã ããã¨ã <literal>load()</literal> ã <literal>iterate()</literal> ã¯ã <literal>Cat</literal> ã <literal>DomesticCat</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ã®ãããã·ã è¿ãã¾ããï¼ <literal>list()</literal> ã¯é常ã¯ãããã·ãè¿ããªããã¨ã«æ³¨æãã¦ãã ãããï¼"
+
+#: index.docbook:321
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);\n"
+ "Iterator iter = session.createQuery(\"from CatImpl as cat where cat.name='fritz'\").iterate();\n"
+ "Cat fritz = (Cat) iter.next();]]>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);
+\n"
+ "Iterator iter = session.createQuery(\"from CatImpl as cat where cat.name='fritz'\").iterate();
+\n"
+ "Cat fritz = (Cat) iter.next();]]>"
+
+#: index.docbook:323
+msgid "Relationships are also lazily initialized. This means you must declare any properties to be of type <literal>Cat</literal>, not <literal>CatImpl</literal>."
+msgstr "é¢é£ãé
延åæåããã¾ããããã¯ããããã£ã <literal>Cat</literal> åã§å®£è¨ããªããã° ãªããªããã¨ãæå³ãã¾ãã <literal>CatImpl</literal> ã§ã¯ããã¾ããã"
+
+#: index.docbook:328
+msgid "Certain operations do <emphasis>not</emphasis> require proxy initialization"
+msgstr "ãããã·ã®åæåã <emphasis>å¿
è¦ã¨ããªã</emphasis> æä½ãåå¨ãã¾ãã"
+
+#: index.docbook:334
+msgid "<literal>equals()</literal>, if the persistent class does not override <literal>equals()</literal>"
+msgstr "<literal>equals()</literal> ï¼æ°¸ç¶ã¯ã©ã¹ã <literal>equals()</literal> ã ãªã¼ãã¼ã©ã¤ãããªãã¨ãï¼"
+
+#: index.docbook:340
+msgid "<literal>hashCode()</literal>, if the persistent class does not override <literal>hashCode()</literal>"
+msgstr "<literal>hashCode()</literal> ï¼æ°¸ç¶ã¯ã©ã¹ã <literal>hashCode()</literal> ã ãªã¼ãã¼ã©ã¤ãããªãã¨ãï¼"
+
+#: index.docbook:346
+msgid "The identifier getter method"
+msgstr "èå¥åã®getterã¡ã½ãã"
+
+#: index.docbook:352
+msgid "Hibernate will detect persistent classes that override <literal>equals()</literal> or <literal>hashCode()</literal>."
+msgstr "Hibernate㯠<literal>equals()</literal> ã <literal>hashCode()</literal> ããªã¼ãã¼ã©ã¤ããã æ°¸ç¶ã¯ã©ã¹ãæ¤åºãã¾ãã"
+
+#: index.docbook:357
+msgid "By choosing <literal>lazy=\"no-proxy\"</literal> instead of the default <literal>lazy=\"proxy\"</literal>, we can avoid the problems associated with typecasting. However, we will require buildtime bytecode instrumentation, and all operations will result in immediate proxy initialization."
+msgstr "ããã©ã«ãã® <literal>lazy=\"proxy\"</literal> ã®ä»£ããã«ã <literal>lazy=\"no-proxy\"</literal> ã é¸ãã ãã¨ã§ãåå¤æã«é¢é£ããåé¡ãåé¿ãããã¨ãåºæ¥ã¾ãã ãããããã«ãæã®ãã¤ãã³ã¼ãçµã¿è¾¼ã¿ãå¿
è¦ã«ãªããã©ã®ãããªæä½ã§ãã£ã¦ãã ãã ã¡ã«ãããã·ã®åæåãè¡ããã¨ã«ãªãã§ãããã"
+
+#: index.docbook:367
+msgid "Initializing collections and proxies"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã¨ãããã·ã®åæå"
+
+#: index.docbook:369
+msgid "A <literal>LazyInitializationException</literal> will be thrown by Hibernate if an uninitialized collection or proxy is accessed outside of the scope of the <literal>Session</literal>, ie. when the entity owning the collection or having the reference to the proxy is in the detached state."
+msgstr "<literal>LazyInitializationException</literal> ã¯ã <literal>Session</literal> ã®ã¹ã³ã¼ãå¤ãã åæåãã¦ããªãã³ã¬ã¯ã·ã§ã³ããããã·ã«ã¢ã¯ã»ã¹ãããã¨ãã«ãHibernateã«ãã£ã¦ã¹ãã¼ããã¾ãã ããªãã¡ãã³ã¬ã¯ã·ã§ã³ããããã·ã¸ã®åç
§ãæã¤ã¨ã³ãã£ãã£ãåé¢ãããç¶æ
ã®æã§ãã"
+
+#: index.docbook:375
+msgid "Sometimes we need to ensure that a proxy or collection is initialized before closing the <literal>Session</literal>. Of course, we can alway force initialization by calling <literal>cat.getSex()</literal> or <literal>cat.getKittens().size()</literal>, for example. But that is confusing to readers of the code and is not convenient for generic code."
+msgstr "<literal>Session</literal> ãã¯ãã¼ãºããåã«ãããã·ãã³ã¬ã¯ã·ã§ã³ã®åæåã確å®ã« è¡ãããã¨ããããã¾ãããã¡ããã <literal>cat.getSex()</literal> ã <literal>cat.getKittens().size()</literal> ãªã©ã常ã«å¼ã³åºããã¨ã§åæåãå¼·å¶ãããã¨ã¯ã§ãã¾ãã ãããããã¯ã³ã¼ããèªã人ãæ··ä¹±ãããæ±ç¨çãªã³ã¼ãã¨ããç¹ãããä¸ä¾¿ã§ãã"
+
+#: index.docbook:382
+msgid "The static methods <literal>Hibernate.initialize()</literal> and <literal>Hibernate.isInitialized()</literal> provide the application with a convenient way of working with lazily initialized collections or proxies. <literal>Hibernate.initialize(cat)</literal> will force the initialization of a proxy, <literal>cat</literal>, as long as its <literal>Session</literal> is still open. <literal>Hibernate.initialize( cat.getKittens() )</literal> has a similar effect for the collection of kittens."
+msgstr "staticã¡ã½ããã® <literal>Hibernate.initialize()</literal> ã <literal>Hibernate.isInitialized()</literal> ã¯é
延åæåã®ã³ã¬ã¯ã·ã§ã³ããããã·ãæ±ãã¨ãã«ä¾¿å©ãªæ¹æ³ãã¢ããªã±ã¼ã·ã§ã³ã«æä¾ãã¾ãã <literal>Hibernate.initialize(cat)</literal> ã¯ã <literal>Session</literal> ããªã¼ãã³ãã¦ããéã㯠<literal>cat</literal> ãããã·ãå¼·å¶çã«åæåãã¾ãã <literal>Hibernate.initialize( cat.getKittens() )</literal> ã¯kittensã³ã¬ã¯ã·ã§ã³ã«å¯¾ãã¦åæ§ã® å¹æãããã¾ãã"
+
+#: index.docbook:391
+msgid "Another option is to keep the <literal>Session</literal> open until all needed collections and proxies have been loaded. In some application architectures, particularly where the code that accesses data using Hibernate, and the code that uses it are in different application layers or different physical processes, it can be a problem to ensure that the <literal>Session</literal> is open when a collection is initialized. There are two basic ways to deal with this issue:"
+msgstr "å¥ã®é¸æè¢ã¨ãã¦ãå¿
è¦ãªãã¹ã¦ã®ã³ã¬ã¯ã·ã§ã³ããããã·ããã¼ããããã¾ã§ <literal>Session</literal> ããªã¼ãã³ã«ãã¦ããæ¹æ³ãããã¾ããããã¤ãã®ã¢ããªã±ã¼ã·ã§ã³ã® ã¢ã¼ããã¯ãã£ã§ã¯ãç¹ã«Hibernateã«ãããã¼ã¿ã¢ã¯ã»ã¹ãè¡ãã³ã¼ãã¨ãããã使ã ã³ã¼ããç°ãªãã¢ããªã±ã¼ã·ã§ã³ã®ã¬ã¤ã¤ã¼ããç©ççã«ç°ãªãããã»ããµã®ã¨ãã«ã¯ã ã³ã¬ã¯ã·ã§ã³ãåæåãããã¨ãã« <literal>Session</literal> ããªã¼ãã³ãã¦ãããã¨ã ä¿è¨¼ããåé¡ãããã¾ãããã®åé¡ã«å¯¾ãã¦ã¯2ã¤ã®åºæ¬çãªæ¹æ³ãããã¾ãã"
+
+#: index.docbook:402
+msgid "In a web-based application, a servlet filter can be used to close the <literal>Session</literal> only at the very end of a user request, once the rendering of the view is complete (the <emphasis>Open Session in View</emphasis> pattern). Of course, this places heavy demands on the correctness of the exception handling of your application infrastructure. It is vitally important that the <literal>Session</literal> is closed and the transaction ended before returning to the user, even when an exception occurs during rendering of the view. See the Hibernate Wiki for examples of this \"Open Session in View\" pattern."
+msgstr "Webãã¼ã¹ã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ã ãã¥ã¼ã®ã¬ã³ããªã³ã°ãå®äºãããªã¯ã¨ã¹ããçµããä¸çªæå¾ã§ <literal>Session</literal> ãã¯ãã¼ãºããããã«ããµã¼ãã¬ãããã£ã«ã¿ã使ããã¨ãã§ãã¾ãï¼ <emphasis>Open Session in View</emphasis> ãã¿ã¼ã³ã§ãï¼ããã¡ãããã¢ããªã±ã¼ã·ã§ã³åºç¤ã®ä¾å¤å¦çã®æ£ç¢ºæ§ãé常ã«éè¦ã«ãªãã¾ãã ãã¥ã¼ã®ã¬ã³ããªã³ã°ä¸ã«ä¾å¤ãçºçããã¨ãã§ãããã¦ã¼ã¶ã«å¦çãæ»ãåã« <literal>Session</literal> ã®ã¯ãã¼ãºã¨ãã©ã³ã¶ã¯ã·ã§ã³ã®çµäºãè¡ã ãã¨ãä¸å¯æ¬ ã«ãªãã¾ãã Hibernateã®Wikiã«è¼ã£ã¦ãã\"Open Session in View\"ãã¿ã¼ã³ã®ä¾ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:415
+msgid "In an application with a separate business tier, the business logic must \"prepare\" all collections that will be needed by the web tier before returning. This means that the business tier should load all the data and return all the data already initialized to the presentation/web tier that is required for a particular use case. Usually, the application calls <literal>Hibernate.initialize()</literal> for each collection that will be needed in the web tier (this call must occur before the session is closed) or retrieves the collection eagerly using a Hibernate query with a <literal>FETCH</literal> clause or a <literal>FetchMode.JOIN</literal> in <literal>Criteria</literal>. This is usually easier if you adopt the <emphasis>Command</emphasis> pattern instead of a <emphasis>Session Facade</emphasis>."
+msgstr "ãã¸ãã¹å±¤ãåé¢ãã¦ããã¢ããªã±ã¼ã·ã§ã³ã§ã¯ããã¸ãã¹ãã¸ãã¯ã¯ Web層ã§å¿
è¦ã«ãªããã¹ã¦ã®ã³ã¬ã¯ã·ã§ã³ãäºåã«\"æºå\"ããå¿
è¦ãããã¾ãã ããã¯ç¹å®ã®ã¦ã¼ã¹ã±ã¼ã¹ã§å¿
è¦ã¨ãªããã¬ã¼ã³ãã¼ã·ã§ã³/Web層ã«å¯¾ãã ãã¸ãã¹å±¤ããã¹ã¦ã®ãã¼ã¿ããã¼ããããã¹ã¦ã®ãã¼ã¿ãåæåãã¦è¿ãã¹ã㨠ãããã¨ãæå³ãã¦ãã¾ããé常ã¯ãã¢ããªã±ã¼ã·ã§ã³ã¯Web層ã§å¿
è¦ãªã³ã¬ã¯ã·ã§ã³ ããããã«å¯¾ã㦠<literal>Hibernate.initialize()</literal> ãå¼ã³åºãã ï¼ãã®å¼ã³åºãã¯ã»ãã·ã§ã³ãã¯ãã¼ãºããåã«è¡ãå¿
è¦ãããã¾ãï¼ã Hibernateã¯ã¨ãªã® <literal>FETCH</literal> ç¯ã <literal>Criteria</literal> ã® <literal>FetchMode.JOIN</literal> ã使ã£ã¦ã³ã¬ã¯ã·ã§ã³ãå
ã«å¾©å
ãã¾ãã æ®é㯠<emphasis>Session Facade</emphasis> ãã¿ã¼ã³ã®ä»£ããã« <emphasis>!
Command</emphasis> ãã¿ã¼ã³ãæ¡ç¨ããã»ããããç°¡åã§ãã"
+
+#: index.docbook:430
+msgid "You may also attach a previously loaded object to a new <literal>Session</literal> with <literal>merge()</literal> or <literal>lock()</literal> before accessing uninitialized collections (or other proxies). No, Hibernate does not, and certainly <emphasis>should</emphasis> not do this automatically, since it would introduce ad hoc transaction semantics!"
+msgstr "åæåããã¦ããªãã³ã¬ã¯ã·ã§ã³ï¼ãããã¯ä»ã®ãããã·ï¼ã«ã¢ã¯ã»ã¹ããåã«ã <literal>merge()</literal> ã <literal>lock()</literal> ã使ã£ã¦æ°ãã <literal>Session</literal> ã«ä»¥åã«ãã¼ãããããªãã¸ã§ã¯ãã追å ãããã¨ãåºæ¥ã¾ãã ã¢ãããã¯ãªãã©ã³ã¶ã¯ã·ã§ã³ã®ã»ãã³ãã£ã¯ã¹ãå°å
¥ããã®ã§ãHibernate㯠ãããèªåçã«è¡ããã <emphasis>è¡ãã¹ãã§ãããã¾ãã</emphasis> ï¼"
+
+#: index.docbook:440
+msgid "Sometimes you don't want to initialize a large collection, but still need some information about it (like its size) or a subset of the data."
+msgstr "大ããªã³ã¬ã¯ã·ã§ã³ãåæåãããã¯ãªãããã³ã¬ã¯ã·ã§ã³ã«ã¤ãã¦ã®ãªãããã®æ
å ±ï¼ãµã¤ãºã®ãããªï¼ ããã¼ã¿ã®ãµãã»ãããå¿
è¦ã¨ãããã¨ãããã¾ãã"
+
+#: index.docbook:445
+msgid "You can use a collection filter to get the size of a collection without initializing it:"
+msgstr "ã³ã¬ã¯ã·ã§ã³ãã£ã«ã¿ã使ããã¨ã§ãåæåããã«ã³ã¬ã¯ã·ã§ã³ã®ãµã¤ãºãåå¾ãããã¨ãåºæ¥ã¾ãã"
+
+#: index.docbook:449
+msgid "<![CDATA[( (Integer) s.createFilter( collection, \"select count(*)\" ).list().get(0) ).intValue()]]>"
+msgstr "<![CDATA[( (Integer) s.createFilter( collection, \"select count(*)\" ).list().get(0) ).intValue()]]>"
+
+#: index.docbook:451
+msgid "The <literal>createFilter()</literal> method is also used to efficiently retrieve subsets of a collection without needing to initialize the whole collection:"
+msgstr "<literal>createFilter()</literal> ã¡ã½ããã¯ãã³ã¬ã¯ã·ã§ã³å
¨ä½ãåæåããå¿
è¦ãªãã«ãã³ã¬ã¯ã·ã§ã³ã® ãµãã»ããã復å
ããããã«å¹æçã«ä½¿ãã¾ãã"
+
+#: index.docbook:456
+msgid "<![CDATA[s.createFilter( lazyCollection, \"\").setFirstResult(0).setMaxResults(10).list();]]>"
+msgstr "<![CDATA[s.createFilter( lazyCollection, \"\").setFirstResult(0).setMaxResults(10).list();]]>"
+
+#: index.docbook:461
+msgid "Using batch fetching"
+msgstr "ããããã§ããã®ä½¿ç¨"
+
+#: index.docbook:463
+msgid "Hibernate can make efficient use of batch fetching, that is, Hibernate can load several uninitialized proxies if one proxy is accessed (or collections. Batch fetching is an optimization of the lazy select fetching strategy. There are two ways you can tune batch fetching: on the class and the collection level."
+msgstr "Hibernateã¯ããããã§ãããå¹ççã«ä½¿ç¨ã§ãã¾ããä¸ã¤ã®ãããã·ï¼ãããã¯ã³ã¬ã¯ã·ã§ã³ï¼ãã¢ã¯ã»ã¹ ãããã¨ãHibernateã¯ããã¤ãã®åæåãã¦ããªããããã·ããã¼ããããã¨ãã§ãã¾ããããããã§ãã㯠é
延ã»ã¬ã¯ããã§ããæ¦ç¥ã«å¯¾ããæé©åã§ããããããã§ããã®èª¿æ´ã«ã¯ï¼ã¤ã®æ¹æ³ãããã¾ãã ã¯ã©ã¹ã¬ãã«ã¨ã³ã¬ã¯ã·ã§ã³ã¬ãã«ã§ãã"
+
+#: index.docbook:469
+msgid "Batch fetching for classes/entities is easier to understand. Imagine you have the following situation at runtime: You have 25 <literal>Cat</literal> instances loaded in a <literal>Session</literal>, each <literal>Cat</literal> has a reference to its <literal>owner</literal>, a <literal>Person</literal>. The <literal>Person</literal> class is mapped with a proxy, <literal>lazy=\"true\"</literal>. If you now iterate through all cats and call <literal>getOwner()</literal> on each, Hibernate will by default execute 25 <literal>SELECT</literal> statements, to retrieve the proxied owners. You can tune this behavior by specifying a <literal>batch-size</literal> in the mapping of <literal>Person</literal>:"
+msgstr "ã¯ã©ã¹ãè¦ç´ ã®ããããã§ããã¯ç解ãç°¡åã§ããå®è¡æã®æ¬¡ã®å ´é¢ãæ³åãã¦ãã ããã <literal>Session</literal> ã«ãã¼ãããã25åã® <literal>Cat</literal> ã¤ã³ã¹ã¿ã³ã¹ãåå¨ãã ããããã® <literal>Cat</literal> 㯠<literal>owner</literal> ã§ãã <literal>Person</literal> ã¸ã®é¢é£ãæã¡ã¾ãã <literal>Person</literal> ã¯ã©ã¹ã¯ <literal>lazy=\"true\"</literal> ã®ãããã·ã§ãããã³ã°ããã¦ãã¾ãã ããä»ãã¹ã¦ã®Catã«å¯¾ãã¦ç¹°ãè¿ã <literal>getOwner()</literal> ãå¼ã³åºãã¨ãHibernate㯠ããã©ã«ãã§ã¯25åã® <literal>SELECT</literal> ãå®è¡ããownerãããã·ã®å¾©å
ããã¾ãã ãã®æ¯ãèãã <literal>Person</literal> ã®ãããã³ã°ã® <literal>batch-size</literal> ã®æå®ã§èª¿æ´ã§ãã¾ãã"
+
+#: index.docbook:479
+msgid "<![CDATA[<class name=\"Person\" batch-size=\"10\">...</class>]]>"
+msgstr "<![CDATA[<class name=\"Person\" batch-size=\"10\">...</class>]]>"
+
+#: index.docbook:481
+msgid "Hibernate will now execute only three queries, the pattern is 10, 10, 5."
+msgstr "Hibernateã¯ã¯ã¨ãªãï¼åã ããå®è¡ããããã«ãªãã¾ãããã¿ã¼ã³ã¯10, 10, 5ã§ãã"
+
+#: index.docbook:485
+msgid "You may also enable batch fetching of collections. For example, if each <literal>Person</literal> has a lazy collection of <literal>Cat</literal>s, and 10 persons are currently loaded in the <literal>Sesssion</literal>, iterating through all persons will generate 10 <literal>SELECT</literal>s, one for every call to <literal>getCats()</literal>. If you enable batch fetching for the <literal>cats</literal> collection in the mapping of <literal>Person</literal>, Hibernate can pre-fetch collections:"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ããããã§ãããæå¹ã«ãããã¨ãåºæ¥ã¾ããä¾ã¨ãã¦ãããããã® <literal>Person</literal> ã <literal>Cat</literal> ã®é
延ã³ã¬ã¯ã·ã§ã³ãæã£ã¦ããã 10åã®Personã <literal>Sesssion</literal> ã«ãã¼ããããã¨ããã¨ããã¹ã¦ã®Person㫠対ãã¦ç¹°ãè¿ã <literal>getCats()</literal> ãå¼ã³åºããã¨ã§ãè¨10åã® <literal>SELECT</literal> ãçºçãã¾ãããã <literal>Person</literal> ã®ãããã³ã°ã§ <literal>cats</literal> ã³ã¬ã¯ã·ã§ã³ã®ããããã§ãããæå¹ã«ããã°ãHibernateã¯ã³ã¬ã¯ã·ã§ã³ã®äºåãã§ãããåºæ¥ã¾ãã"
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <set name=\"cats\" batch-size=\"3\">\n"
+ " ...\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">
+\n"
+ " <set name=\"cats\" batch-size=\"3\">
+\n"
+ " ...
+\n"
+ " </set>
+\n"
+ "</class>]]>"
+
+#: index.docbook:496
+msgid "With a <literal>batch-size</literal> of 3, Hibernate will load 3, 3, 3, 1 collections in four <literal>SELECT</literal>s. Again, the value of the attribute depends on the expected number of uninitialized collections in a particular <literal>Session</literal>."
+msgstr "<literal>batch-size</literal> ã3ãªã®ã§ãHibernateã¯4åã® <literal>SELECT</literal> ã§3åã3åã3åã1åããã¼ããã¾ããç¹°ãè¿ãã¨ãå±æ§ã®å¤ã¯ç¹å®ã® <literal>Session</literal> ã®ä¸ã®åæåããã¦ããªãã³ã¬ã¯ã·ã§ã³ã®æå¾
æ°ã«ä¾åãã¾ãã"
+
+#: index.docbook:502
+msgid "Batch fetching of collections is particularly useful if you have a nested tree of items, ie. the typical bill-of-materials pattern. (Although a <emphasis>nested set</emphasis> or a <emphasis>materialized path</emphasis> might be a better option for read-mostly trees.)"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ããããã§ããã¯ã¢ã¤ãã ã®ãã¹ãããããªã¼ã ããªãã¡ã代表çãªé¨å表ã®ãã¿ã¼ã³ã ããå ´åã«ç¹ã«æç¨ã§ããï¼ããããèªã¿è¾¼ã¿ãå¤ãããªã¼ã§ã¯ <emphasis>ãã¹ãããset</emphasis> ã <emphasis>å
·ä½åãããã¹</emphasis> ãããããé¸æã«ãªãã¾ããï¼"
+
+#: index.docbook:511
+msgid "Using subselect fetching"
+msgstr "ãµãã»ã¬ã¯ããã§ããã®ä½¿ç¨"
+
+#: index.docbook:513
+msgid "If one lazy collection or single-valued proxy has to be fetched, Hibernate loads all of them, re-running the original query in a subselect. This works in the same way as batch-fetching, without the piecemeal loading."
+msgstr "ä¸ã¤ã®é
延ã³ã¬ã¯ã·ã§ã³ãåä¸å¤ãããã·ããã§ãããããªããã°ãããªãã¨ããHibernate㯠ããããã¹ã¦ããã¼ããããµãã»ã¬ã¯ãã®ãªãªã¸ãã«ã¯ã¨ãªãå度å®è¡ããã¾ãããã㯠ããããã§ããã¨åãæ¹æ³ã§åããå°ããã¤ã®ãã¼ãã¯è¡ãã¾ããã"
+
+#: index.docbook:524
+msgid "Using lazy property fetching"
+msgstr "é
延ããããã£ãã§ããã®ä½¿ç¨"
+
+#: index.docbook:526
+msgid "Hibernate3 supports the lazy fetching of individual properties. This optimization technique is also known as <emphasis>fetch groups</emphasis>. Please note that this is mostly a marketing feature, as in practice, optimizing row reads is much more important than optimization of column reads. However, only loading some properties of a class might be useful in extreme cases, when legacy tables have hundreds of columns and the data model can not be improved."
+msgstr "Hibernate3ã¯ããããã£ãã¨ã®é
延ãã§ããããµãã¼ããã¦ãã¾ãããã®æé©åææ³ã¯ <emphasis>ã°ã«ã¼ãã®ãã§ãã</emphasis> ã¨ãã¦ãç¥ããã¦ãã¾ããããã¯ã»ã¨ãã© è¦æããåºãæ©è½ã§ãããã¨ã«æ³¨æãã¦ãã ãããå®éã«ã¯åèªã¿è¾¼ã¿ã®æé©åãããã è¡èªã¿è¾¼ã¿ã®æé©åãé常ã«éè¦ã§ãã ããããã¯ã©ã¹ã®ããã¤ãã®ããããã£ã ããèªã¿è¾¼ããã¨ã¯ãæ¢åã®ãã¼ãã«ãä½ç¾ãã®åãæã¡ã ãã¼ã¿ã¢ãã«ãæ¹åã§ããªããªã©ã®æ¥µç«¯ãªå ´åã«ã¯æç¨ã§ãã"
+
+#: index.docbook:535
+msgid "To enable lazy property loading, set the <literal>lazy</literal> attribute on your particular property mappings:"
+msgstr "é
延ããããã£èªã¿è¾¼ã¿ãæå¹ã«ããã«ã¯ã対象ã®ããããã£ã®ãããã³ã°ã§ <literal>lazy</literal> å±æ§ãã»ãããã¦ãã ããã"
+
+#: index.docbook:540
+msgid ""
+ "<![CDATA[<class name=\"Document\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\" length=\"50\"/>\n"
+ " <property name=\"summary\" not-null=\"true\" length=\"200\" lazy=\"true\"/>\n"
+ " <property name=\"text\" not-null=\"true\" length=\"2000\" lazy=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Document\">
+\n"
+ " <id name=\"id\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <property name=\"name\" not-null=\"true\" length=\"50\"/>
+\n"
+ " <property name=\"summary\" not-null=\"true\" length=\"200\" lazy=\"true\"/>
+\n"
+ " <property name=\"text\" not-null=\"true\" length=\"2000\" lazy=\"true\"/>
+\n"
+ "</class>]]>"
+
+#: index.docbook:542
+msgid "Lazy property loading requires buildtime bytecode instrumentation! If your persistent classes are not enhanced, Hibernate will silently ignore lazy property settings and fall back to immediate fetching."
+msgstr "é
延ããããã£èªã¿è¾¼ã¿ã¯ãã«ãæã®ãã¤ãã³ã¼ãçµã¿è¾¼ã¿ãå¿
è¦ã¨ãã¾ãï¼ãã æ°¸ç¶ã¯ã©ã¹ã«çµã¿è¾¼ã¿ãããã¦ããªããªããHibernateã¯é»ã£ã¦é
延ããããã£ã®è¨å®ãç¡è¦ãã¦ã å³æãã§ããã«æ»ãã¾ãã"
+
+#: index.docbook:548
+msgid "For bytecode instrumentation, use the following Ant task:"
+msgstr "ãã¤ãã³ã¼ãçµã¿è¾¼ã¿ã¯ä»¥ä¸ã®Antã¿ã¹ã¯ã使ã£ã¦ãã ããã"
+
+#: index.docbook:552
+msgid ""
+ "<![CDATA[<target name=\"instrument\" depends=\"compile\">\n"
+ " <taskdef name=\"instrument\" classname=\"org.hibernate.tool.instrument.InstrumentTask\">\n"
+ " <classpath path=\"${jar.path}\"/>\n"
+ " <classpath path=\"${classes.dir}\"/>\n"
+ " <classpath refid=\"lib.class.path\"/>\n"
+ " </taskdef>\n"
+ "\n"
+ " <instrument verbose=\"true\">\n"
+ " <fileset dir=\"${testclasses.dir}/org/hibernate/auction/model\">\n"
+ " <include name=\"*.class\"/>\n"
+ " </fileset>\n"
+ " </instrument>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"instrument\" depends=\"compile\">
+\n"
+ " <taskdef name=\"instrument\" classname=\"org.hibernate.tool.instrument.InstrumentTask\">
+\n"
+ " <classpath path=\"${jar.path}\"/>
+\n"
+ " <classpath path=\"${classes.dir}\"/>
+\n"
+ " <classpath refid=\"lib.class.path\"/>
+\n"
+ " </taskdef>
+\n"
+ "
+\n"
+ " <instrument verbose=\"true\">
+\n"
+ " <fileset dir=\"${testclasses.dir}/org/hibernate/auction/model\">
+\n"
+ " <include name=\"*.class\"/>
+\n"
+ " </fileset>
+\n"
+ " </instrument>
+\n"
+ "</target>]]>"
+
+#: index.docbook:554
+msgid "A different (better?) way to avoid unnecessary column reads, at least for read-only transactions is to use the projection features of HQL or Criteria queries. This avoids the need for buildtime bytecode processing and is certainly a prefered solution."
+msgstr "ä¸è¦ãªåãèªã¿è¾¼ã¾ãªãããã®ãå¥ã®ï¼ããããï¼ï¼æ¹æ³ã¯ãå°ãªãã¨ã èªã¿è¾¼ã¿ã®ã¿ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ããã¦ã¯ãHQLãCriteriaã¯ã¨ãªã®å°å½± æ©è½ã使ããã¨ã§ãããã®æ¹æ³ã¯ãã«ãæã®ãã¤ãã³ã¼ãçµã¿è¾¼ã¿ãä¸è¦ã«ãªãã ããè¯ã解決æ¹æ³ã§ãã"
+
+#: index.docbook:561
+msgid "You may force the usual eager fetching of properties using <literal>fetch all properties</literal> in HQL."
+msgstr "HQL㧠<literal>fetch all properties</literal> ã使ããã¨ã§ãæ®éã©ããã® ããããã£ã®å³æãã§ããã³ã°ãå¼·å¶ãããã¨ãåºæ¥ã¾ãã"
+
+#: index.docbook:571
+msgid "The Second Level Cache"
+msgstr "第2ã¬ãã«ãã£ãã·ã¥"
+
+#: index.docbook:573
+msgid "A Hibernate <literal>Session</literal> is a transaction-level cache of persistent data. It is possible to configure a cluster or JVM-level (<literal>SessionFactory</literal>-level) cache on a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be careful. Caches are never aware of changes made to the persistent store by another application (though they may be configured to regularly expire cached data)."
+msgstr "Hibernateã® <literal>Session</literal> ã¯æ°¸ç¶ãã¼ã¿ã®ãã©ã³ã¶ã¯ã·ã§ã³ã¬ãã«ã®ãã£ãã·ã¥ã§ãã class-by-classã¨collection-by-collectionãã¨ã®ãã¯ã©ã¹ã¿ã¬ãã«ãJVMã¬ãã« ï¼ <literal>SessionFactory</literal> ã¬ãã«ï¼ã®ãã£ãã·ã¥ãè¨å®ãããã¨ãåºæ¥ã¾ãã ã¯ã©ã¹ã¿åããããã£ãã·ã¥ã«ã¤ãªããã¨ããåºæ¥ã¾ããããã注æãã¦ãã ããã ãã£ãã·ã¥ã¯ä»ã®ã¢ããªã±ã¼ã·ã§ã³ã«ããæ°¸ç¶å±¤ã®å¤æ´ã èæ
®ãã¾ããï¼ãã£ãã·ã¥ãã¼ã¿ãå®æçã«æéåãã«ããè¨å®ã¯åºæ¥ã¾ãï¼ã"
+
+#: index.docbook:581
+msgid "You have the option to tell Hibernate which caching implementation to use by specifying the name of a class that implements <literal>org.hibernate.cache.CacheProvider</literal> using the property <literal>hibernate.cache.provider_class</literal>. 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."
+msgstr "Hibernateã使ç¨ãããã£ãã·ã¥å®è£
ã¯ã<literal>hibernate.cache.provider_class</literal> ããããã£ã« <literal>org.hibernate.cache.CacheProvider</literal> ãå®è£
ããã¯ã©ã¹åãæå®ãããã¨ã§å¤æ´ã§ãã¾ãã Hibernateã¯å¤ãã®ãªã¼ãã³ã½ã¼ã¹ã®ãã£ãã·ã¥ãããã¤ãããã«ãã¤ã³å®è£
ã§æã£ã¦ãã¾ãï¼å¾ã«ãªã¹ããããã¾ãï¼ã å ãã¦ãåã«èª¬æããããã«ãããªãèªèº«ãç¬èªã®å®è£
ããã¦ããããçµã¿è¾¼ããã¨ãåºæ¥ã¾ãã ãã¼ã¸ã§ã³3.2ããåã§ã¯EhCacheãããã©ã«ãã®ãã£ãã·ã¥ãããã¤ãã§ãããã¨ã«æ³¨æãã¦ãã ããã ãã¼ã¸ã§ã³3.2ã§ã¯ããã¯å½ã¦ã¯ã¾ãã¾ããã"
+
+#: index.docbook:592
+msgid "Cache Providers"
+msgstr "ãã£ãã·ã¥ãããã¤ã"
+
+#: index.docbook:601, index.docbook:774
+msgid "Cache"
+msgstr "ãã£ãã·ã¥"
+
+#: index.docbook:602
+msgid "Provider class"
+msgstr "ãããã¤ãã¯ã©ã¹"
+
+#: index.docbook:603
+msgid "Type"
+msgstr "<entry>ã¿ã¤ã</entry>"
+
+#: index.docbook:604
+msgid "Cluster Safe"
+msgstr "ã¯ã©ã¹ã¿ã»ã¼ã"
+
+#: index.docbook:605
+msgid "Query Cache Supported"
+msgstr "ã¯ã¨ãªãã£ãã·ã¥ã®ãµãã¼ã"
+
+#: index.docbook:610, index.docbook:783
+msgid "Hashtable (not intended for production use)"
+msgstr "Hashtableï¼è£½åç¨ã¨ãã¦æå³ãã¦ãã¾ããï¼"
+
+#: index.docbook:611
+msgid "org.hibernate.cache.HashtableCacheProvider"
+msgstr "org.hibernate.cache.HashtableCacheProvider"
+
+#: index.docbook:612
+msgid "memory"
+msgstr "<entry>ã¡ã¢ãª</entry>"
+
+#: index.docbook:614, index.docbook:621, index.docbook:628, index.docbook:784, index.docbook:785, index.docbook:786, index.docbook:791, index.docbook:792, index.docbook:793, index.docbook:798, index.docbook:799, index.docbook:800, index.docbook:805, index.docbook:806, index.docbook:812, index.docbook:815
+msgid "<entry>yes</entry>"
+msgstr "<entry>yes</entry>"
+
+#: index.docbook:617, index.docbook:790
+msgid "EHCache"
+msgstr "EHCache"
+
+#: index.docbook:618
+msgid "org.hibernate.cache.EhCacheProvider"
+msgstr "org.hibernate.cache.EhCacheProvider"
+
+#: index.docbook:619, index.docbook:626
+msgid "memory, disk"
+msgstr "ã¡ã¢ãªããã£ã¹ã¯"
+
+#: index.docbook:624, index.docbook:797
+msgid "OSCache"
+msgstr "OSCache"
+
+#: index.docbook:625
+msgid "org.hibernate.cache.OSCacheProvider"
+msgstr "org.hibernate.cache.OSCacheProvider"
+
+#: index.docbook:631, index.docbook:804
+msgid "SwarmCache"
+msgstr "<entry>yes</entry>"
+
+#: index.docbook:632
+msgid "org.hibernate.cache.SwarmCacheProvider"
+msgstr "SwarmCache"
+
+#: index.docbook:633
+msgid "clustered (ip multicast)"
+msgstr "org.hibernate.cache.SwarmCacheProvider"
+
+#: index.docbook:634
+msgid "yes (clustered invalidation)"
+msgstr "ã¯ã©ã¹ã¿ï¼ipãã«ããã£ã¹ãï¼"
+
+#: index.docbook:638, index.docbook:811
+msgid "JBoss TreeCache"
+msgstr "yesï¼ã¯ã©ã¹ã¿ç¡å¹åï¼"
+
+#: index.docbook:639
+msgid "org.hibernate.cache.TreeCacheProvider"
+msgstr "JBoss TreeCache"
+
+#: index.docbook:640
+msgid "clustered (ip multicast), transactional"
+msgstr "org.hibernate.cache.TreeCacheProvider"
+
+#: index.docbook:641
+msgid "yes (replication)"
+msgstr "ã¯ã©ã¹ã¿ï¼ipãã«ããã£ã¹ãï¼ããã©ã³ã¶ã¯ã·ã§ãã«"
+
+#: index.docbook:642
+msgid "yes (clock sync req.)"
+msgstr "yesï¼è¤è£½ï¼"
+
+#: index.docbook:649
+msgid "Cache mappings"
+msgstr "yesï¼æå»åæãå¿
è¦ï¼"
+
+#: index.docbook:651
+msgid "The <literal><cache></literal> element of a class or collection mapping has the following form:"
+msgstr "ãã£ãã·ã¥ã®ãããã³ã°"
+
+#: index.docbook:662
+msgid ""
+ "<![CDATA[<cache \n"
+ " usage=\"transactional|read-write|nonstrict-read-write|read-only\"\n"
+ " region=\"RegionName\"\n"
+ " include=\"all|non-lazy\"\n"
+ "/>]]>"
+msgstr "ã¯ã©ã¹ãã³ã¬ã¯ã·ã§ã³ã®ãããã³ã°ã® <literal><cache></literal> è¦ç´ ã¯ä»¥ä¸ã®å½¢å¼ã§ãã"
+
+#: index.docbook:665
+msgid "<literal>usage</literal> (required) specifies the caching strategy: <literal>transactional</literal>, <literal>read-write</literal>, <literal>nonstrict-read-write</literal> or <literal>read-only</literal>"
+msgstr ""
+ "<![CDATA[<cache
+\n"
+ " usage=\"transactional|read-write|nonstrict-read-write|read-only\"
+\n"
+ " region=\"RegionName\"
+\n"
+ " include=\"all|non-lazy\"
+\n"
+ "/>]]>"
+
+#: index.docbook:674
+msgid "<literal>region</literal> (optional, defaults to the class or collection role name) specifies the name of the second level cache region"
+msgstr "<literal>usage</literal> (required) specifies the caching strategy: <literal>transactional</literal>, <literal>read-write</literal>, <literal>nonstrict-read-write</literal> or <literal>read-only</literal>"
+
+#: index.docbook:681
+msgid "<literal>include</literal> (optional, defaults to <literal>all</literal>) <literal>non-lazy</literal> specifies that properties of the entity mapped with <literal>lazy=\"true\"</literal> may not be cached when attribute-level lazy fetching is enabled"
+msgstr "<literal>region</literal> (optional, defaults to the class or collection role name) specifies the name of the second level cache region"
+
+#: index.docbook:691
+msgid "Alternatively (preferrably?), you may specify <literal><class-cache></literal> and <literal><collection-cache></literal> elements in <literal>hibernate.cfg.xml</literal>."
+msgstr "<literal>include</literal> (optional, defaults to <literal>all</literal>) <literal>non-lazy</literal> specifies that properties of the entity mapped with <literal>lazy=\"true\"</literal> may not be cached when attribute-level lazy fetching is enabled"
+
+#: index.docbook:696
+msgid "The <literal>usage</literal> attribute specifies a <emphasis>cache concurrency strategy</emphasis>."
+msgstr "ã¾ãã¯ï¼ããããæ¹æ³ã¨ãã¦ï¼ï¼ã <literal>hibernate.cfg.xml</literal> ã« <literal><class-cache></literal> 㨠<literal><collection-cache></literal> è¦ç´ ãæå®ãããã¨ãåºæ¥ã¾ãã"
+
+#: index.docbook:703
+msgid "Strategy: read only"
+msgstr "<literal>usage</literal> å±æ§ã¯ <emphasis>ãã£ãã·ã¥ã®ä¸¦åæ§æ¦ç¥</emphasis> ãæå®ãã¾ãã"
+
+#: index.docbook:705
+msgid "If your application needs to read but never modify instances of a persistent class, a <literal>read-only</literal> cache may be used. This is the simplest and best performing strategy. It's even perfectly safe for use in a cluster."
+msgstr "read onlyæ¦ç¥"
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"eg.Immutable\" mutable=\"false\">\n"
+ " <cache usage=\"read-only\"/>\n"
+ " ....\n"
+ "</class>]]>"
+msgstr "ããã¢ããªã±ã¼ã·ã§ã³ãèªã¿è¾¼ã¿ã®ã¿å¿
è¦ã§ãæ°¸ç¶ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãå¤æ´ããªããªãã <literal>read-only</literal> ãã£ãã·ã¥ã使ããã¨ãåºæ¥ã¾ããããã¯ãã£ã¨ãåç´ã§ ãã£ã¨ãããã©ã¼ãã³ã¹ã®è¯ãæ¦ç¥ã§ããã¯ã©ã¹ã¿ã§ã®ä½¿ç¨ãå®å
¨ã«å®å
¨ã§ãã"
+
+#: index.docbook:717
+msgid "Strategy: read/write"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Immutable\" mutable=\"false\">
+\n"
+ " <cache usage=\"read-only\"/>
+\n"
+ " ....
+\n"
+ "</class>]]>"
+
+#: index.docbook:719
+msgid "If the application needs to update data, a <literal>read-write</literal> cache might be appropriate. This cache strategy should never be used if serializable transaction isolation level is required. If the cache is used in a JTA environment, you must specify the property <literal>hibernate.transaction.manager_lookup_class</literal>, naming a strategy for obtaining the JTA <literal>TransactionManager</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called. If you wish to use this strategy in a cluster, you should ensure that the underlying cache implementation supports locking. The built-in cache providers do <emphasis>not</emphasis>."
+msgstr "read/writeæ¦ç¥"
+
+#: index.docbook:730
+msgid ""
+ "<![CDATA[<class name=\"eg.Cat\" .... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " <set name=\"kittens\" ... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ããã¼ã¿ãæ´æ°ããå¿
è¦ããããªãã <literal>read-write</literal> ãã£ãã·ã¥ãé©å½ãã ããã¾ããããã®ãã£ãã·ã¥æ¦ç¥ã¯ãã·ãªã¢ã©ã¤ã¶ãã«ãªãã©ã³ã¶ã¯ã·ã§ã³åé¢ã¬ãã«ãè¦æ±ããããªãã 決ãã¦ä½¿ãã¹ãã§ã¯ããã¾ããããããã£ãã·ã¥ãJTAç°å¢ã§ä½¿ããããªããJTA <literal>TransactionManager</literal> ãåå¾ããããã®æ¹æ³ã示ã <literal>hibernate.transaction.manager_lookup_class</literal> ããããã£ãæå®ããªããã°ãªãã¾ãããä»ã®ç°å¢ã§ã¯ã <literal>Session.close()</literal> ã <literal>Session.disconnect()</literal> ãå¼ã°ããã¨ãã«ã確å®ã«ãã©ã³ã¶ã¯ã·ã§ã³ãå®äº ãã¦ããªããã°ãªãã¾ããã ããã¯ã©ã¹ã¿ã§ãã®æ¦ç¥ã使ããããªããåºã¨ãªããã£ãã·ã¥ã®å®è£
ãããã¯ããµãã¼ã ãã¦ãããã¨ãä¿è¨¼ããªããã°ãªãã¾ããã çµ!
ã¿è¾¼ã¿ã®ãã£ãã·ã¥ãããã¤ã㯠<emphasis>ãµãã¼ããã¦ãã¾ãã</emphasis> ã"
+
+#: index.docbook:735
+msgid "Strategy: nonstrict read/write"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Cat\" .... >
+\n"
+ " <cache usage=\"read-write\"/>
+\n"
+ " ....
+\n"
+ " <set name=\"kittens\" ... >
+\n"
+ " <cache usage=\"read-write\"/>
+\n"
+ " ....
+\n"
+ " </set>
+\n"
+ "</class>]]>"
+
+#: index.docbook:737
+msgid "If the application only occasionally needs to update data (ie. if it is extremely unlikely that two transactions would try to update the same item simultaneously) and strict transaction isolation is not required, a <literal>nonstrict-read-write</literal> cache might be appropriate. If the cache is used in a JTA environment, you must specify <literal>hibernate.transaction.manager_lookup_class</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called."
+msgstr "å³å¯ã§ã¯ãªãread/writeæ¦ç¥"
+
+#: index.docbook:749
+msgid "Strategy: transactional"
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ããã¾ã«ãããã¼ã¿ãæ´æ°ããå¿
è¦ã¯ãªãï¼ããªãã¡äºã¤ã®ãã©ã³ã¶ã¯ã·ã§ã³ã åæã«åãã¢ã¤ãã ãæ´æ°ãããã¨ãããã¨ã¯ã»ã¨ãã©èµ·ãããªãï¼ãå³å¯ãªãã©ã³ã¶ã¯ã·ã§ã³åé¢ã è¦æ±ãããªããªãã <literal>nonstrict-read-write</literal> ãã£ãã·ã¥ãé©å½ããããã¾ããã ãããã£ãã·ã¥ãJTAç°å¢ã§ä½¿ããããªãã <literal>hibernate.transaction.manager_lookup_class</literal> ãæå®ããªããã°ãªãã¾ãããä»ã®ç°å¢ã§ã¯ã <literal>Session.close()</literal> ã <literal>Session.disconnect()</literal> ãå¼ã°ããã¨ãã«ã確å®ã«ãã©ã³ã¶ã¯ã·ã§ã³ãå®äº ãã¦ããªããã°ãªãã¾ããã"
+
+#: index.docbook:751
+msgid "The <literal>transactional</literal> cache strategy provides support for fully transactional cache providers such as JBoss TreeCache. Such a cache may only be used in a JTA environment and you must specify <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr "transactionalæ¦ç¥"
+
+#: index.docbook:759
+msgid "None of the cache providers support all of the cache concurrency strategies. The following table shows which providers are compatible with which concurrency strategies."
+msgstr "<literal>transactional</literal> ãã£ãã·ã¥æ¦ç¥ã¯JBoss TreeCacheã®ãããªå®å
¨ãªãã©ã³ã¶ã¯ã·ã§ãã« ãã£ãã·ã¥ãããã¤ãã®ãµãã¼ããæä¾ãã¾ãã ãã®ãããªãã£ãã·ã¥ã¯JTAç°å¢ã§ã®ã¿ä½¿ç¨å¯è½ã§ã <literal>hibernate.transaction.manager_lookup_class</literal> ãæå®ããªããã°ãªãã¾ããã"
+
+#: index.docbook:765
+msgid "Cache Concurrency Strategy Support"
+msgstr "ãã¹ã¦ã®åæ並è¡æ§ãã£ãã·ã¥æ¦ç¥ããµãã¼ããã¦ãããã£ãã·ã¥ãããã¤ãã¯ããã¾ããã 以ä¸ã®è¡¨ã¯ã©ã®ãããã¤ããã©ã®åæ並åæ§æ¦ç¥ã«å¯¾å¿ãããã表ãã¦ãã¾ãã"
+
+#: index.docbook:775
+msgid "read-only"
+msgstr "ãã£ãã·ã¥"
+
+#: index.docbook:776
+msgid "nonstrict-read-write"
+msgstr "read-only"
+
+#: index.docbook:777
+msgid "read-write"
+msgstr "å³å¯ã§ã¯ãªãread-write"
+
+#: index.docbook:778
+msgid "transactional"
+msgstr "read-write"
+
+#: index.docbook:824
+msgid "Managing the caches"
+msgstr "<entry>yes</entry>"
+
+#: index.docbook:826
+msgid "Whenever you pass an object to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal> and whenever you retrieve an object using <literal>load()</literal>, <literal>get()</literal>, <literal>list()</literal>, <literal>iterate()</literal> or <literal>scroll()</literal>, that object is added to the internal cache of the <literal>Session</literal>."
+msgstr "ãã£ãã·ã¥ã®ç®¡ç"
+
+#: index.docbook:833
+msgid "When <literal>flush()</literal> is subsequently called, the state of that object will be synchronized with the database. If you do not want this synchronization to occur or if you are processing a huge number of objects and need to manage memory efficiently, the <literal>evict()</literal> method may be used to remove the object and its collections from the first-level cache."
+msgstr "ãªãã¸ã§ã¯ãã <literal>save()</literal> ã <literal>update()</literal> ã <literal>saveOrUpdate()</literal> ã«æ¸¡ãã¨ãããã㦠<literal>load()</literal> ã <literal>get()</literal> ã <literal>list()</literal> ã <literal>iterate()</literal> ã <literal>scroll()</literal> ã使ã£ã¦ãªãã¸ã§ã¯ãã復å
ããã¨ãã«ã¯å¸¸ã«ã ãã®ãªãã¸ã§ã¯ã㯠<literal>Session</literal> ã®å
é¨ãã£ãã·ã¥ã«è¿½å ããã¾ãã"
+
+#: index.docbook:841
+msgid ""
+ "<![CDATA[ScrollableResult cats = sess.createQuery(\"from Cat as cat\").scroll(); //a huge result set\n"
+ "while ( cats.next() ) {\n"
+ " Cat cat = (Cat) cats.get(0);\n"
+ " doSomethingWithACat(cat);\n"
+ " sess.evict(cat);\n"
+ "}]]>"
+msgstr "次㫠<literal>flush()</literal> ãå¼ã°ããã¨ããªãã¸ã§ã¯ãã®ç¶æ
ã¯ãã¼ã¿ãã¼ã¹ã¨åæåããã¾ãã ãããã®åæãèµ·ãããã¨ãæã¾ãªãã¨ãããè¨å¤§ãªæ°ã®ãªãã¸ã§ã¯ããå¦çãã¦ãã¦ã¡ã¢ãªãå¹ççã« æ±ãå¿
è¦ãããã¨ãã¯ã <literal>evict()</literal> ã¡ã½ããã使ã£ã¦ä¸æ¬¡ãã£ãã·ã¥ãã ãªãã¸ã§ã¯ããã³ã¬ã¯ã·ã§ã³ãåé¤ãããã¨ãåºæ¥ã¾ãã"
+
+#: index.docbook:843
+msgid "The <literal>Session</literal> also provides a <literal>contains()</literal> method to determine if an instance belongs to the session cache."
+msgstr ""
+ "<![CDATA[ScrollableResult cats = sess.createQuery(\"from Cat as cat\").scroll(); //a huge result set
+\n"
+ "while ( cats.next() ) {
+\n"
+ " Cat cat = (Cat) cats.get(0);
+\n"
+ " doSomethingWithACat(cat);
+\n"
+ " sess.evict(cat);
+\n"
+ "}]]>"
+
+#: index.docbook:848
+msgid "To completely evict all objects from the session cache, call <literal>Session.clear()</literal>"
+msgstr "<literal>Session</literal> ã¯ã¤ã³ã¹ã¿ã³ã¹ãã»ãã·ã§ã³ãã£ãã·ã¥ã«å«ã¾ãããã©ãããå¤æããããã® <literal>contains()</literal> ã¡ã½ãããæä¾ãã¾ãã"
+
+#: index.docbook:852
+msgid "For the second-level cache, there are methods defined on <literal>SessionFactory</literal> for evicting the cached state of an instance, entire class, collection instance or entire collection role."
+msgstr "ãã¹ã¦ã®ãªãã¸ã§ã¯ããã»ãã·ã§ã³ãã£ãã·ã¥ããå®å
¨ã«åãé¤ãã«ã¯ã<literal>Session.clear()</literal> ãå¼ã³åºãã¦ãã ããã"
+
+#: index.docbook:858
+msgid ""
+ "<![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat\n"
+ "sessionFactory.evict(Cat.class); //evict all Cats\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\", catId); //evict a particular collection of kittens\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\"); //evict all kitten collections]]>"
+msgstr "äºæ¬¡ãã£ãã·ã¥ã®ããã«ã <literal>SessionFactory</literal> ã«ã¯ ã¤ã³ã¹ã¿ã³ã¹ãã¯ã©ã¹å
¨ä½ãã³ã¬ã¯ã·ã§ã³ã®ã¤ã³ã¹ã¿ã³ã¹ãã³ã¬ã¯ã·ã§ã³å
¨ä½ããã£ãã·ã¥ãã åé¤ããããã®ã¡ã½ãããããããå®ç¾©ããã¦ãã¾ãã"
+
+#: index.docbook:860
+msgid "The <literal>CacheMode</literal> controls how a particular session interacts with the second-level cache."
+msgstr ""
+ "<![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat
+\n"
+ "sessionFactory.evict(Cat.class); //evict all Cats
+\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\", catId); //evict a particular collection of kittens
+\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\"); //evict all kitten collections]]>"
+
+#: index.docbook:867
+msgid "<literal>CacheMode.NORMAL</literal> - read items from and write items to the second-level cache"
+msgstr "<literal>CacheMode</literal> ã¯ç¹å®ã®ã»ãã·ã§ã³ãäºæ¬¡ãã£ãã·ã¥ã¨ã©ã®ããã«ç¸äºä½ç¨ãããã æå®ãã¾ãã"
+
+#: index.docbook:872
+msgid "<literal>CacheMode.GET</literal> - read items from the second-level cache, but don't write to the second-level cache except when updating data"
+msgstr "<literal>CacheMode.NORMAL</literal> - ã¢ã¤ãã ã®èªã¿è¾¼ã¿ã¨æ¸ãè¾¼ã¿ã§äºæ¬¡ãã£ãã·ã¥ã使ãã¾ã"
+
+#: index.docbook:878
+msgid "<literal>CacheMode.PUT</literal> - write items to the second-level cache, but don't read from the second-level cache"
+msgstr "<literal>CacheMode.GET</literal> - èªã¿è¾¼ã¿ã¯äºæ¬¡ãã£ãã·ã¥ããè¡ãã¾ããããã¼ã¿ã æ´æ°ããå ´åãé¤ãã¦äºæ¬¡ãã£ãã·ã¥ã«æ¸ãè¾¼ã¿ããã¾ããã"
+
+#: index.docbook:884
+msgid "<literal>CacheMode.REFRESH</literal> - write items to the second-level cache, but don't read from the second-level cache, bypass the effect of <literal>hibernate.cache.use_minimal_puts</literal>, forcing a refresh of the second-level cache for all items read from the database"
+msgstr "<literal>CacheMode.PUT</literal> - äºæ¬¡ãã£ãã·ã¥ã«ã¢ã¤ãã ãæ¸ãè¾¼ã¿ã¾ãããèªã¿è¾¼ã¿ã«ã¯ äºæ¬¡ãã£ãã·ã¥ã使ãã¾ããã"
+
+#: index.docbook:892
+msgid "To browse the contents of a second-level or query cache region, use the <literal>Statistics</literal> API:"
+msgstr "<literal>CacheMode.REFRESH</literal> - äºæ¬¡ãã£ãã·ã¥ã«ã¢ã¤ãã ãæ¸ãè¾¼ã¿ã¾ãããèªã¿è¾¼ã¿ã«ã¯ äºæ¬¡ãã£ãã·ã¥ã使ããã <literal>hibernate.cache.use_minimal_puts</literal> ã®å½±é¿ãåããã«ããã¼ã¿ãã¼ã¹ããèªã¿è¾¼ããã¹ã¦ã®ã¢ã¤ãã ã®äºæ¬¡ãã£ãã·ã¥ãå¼·å¶çã«ãªãã¬ãã·ã¥ãã¾ãã"
+
+#: index.docbook:897
+msgid ""
+ "<![CDATA[Map cacheEntries = sessionFactory.getStatistics()\n"
+ " .getSecondLevelCacheStatistics(regionName)\n"
+ " .getEntries();]]>"
+msgstr "äºæ¬¡ãã£ãã·ã¥ã®å
容ãã¯ã¨ãªãã£ãã·ã¥é åãè¦ãããã«ã <literal>Statistics</literal> APIã 使ã£ã¦ãã ããã"
+
+#: index.docbook:899
+msgid "You'll need to enable statistics, and, optionally, force Hibernate to keep the cache entries in a more human-understandable format:"
+msgstr ""
+ "<![CDATA[Map cacheEntries = sessionFactory.getStatistics()
+\n"
+ " .getSecondLevelCacheStatistics(regionName)
+\n"
+ " .getEntries();]]>"
+
+#: index.docbook:904
+msgid ""
+ "<![CDATA[hibernate.generate_statistics true\n"
+ "hibernate.cache.use_structured_entries true]]>"
+msgstr "çµ±è¨æ
å ±ãæå¹ã«ãã¦ãããã«ãªãã·ã§ã³ã¨ãã¦ããã£ãã·ã¥ã¨ã³ããªã 人ãããç解å¯è½ãªå½¢å¼ã§ä¿æãããã¨ãHibernateã«å¼·å¶ãã¾ãã"
+
+#: index.docbook:909
+msgid "The Query Cache"
+msgstr ""
+ "<![CDATA[hibernate.generate_statistics true
+\n"
+ "hibernate.cache.use_structured_entries true]]>"
+
+#: index.docbook:911
+msgid "Query result sets may also be cached. This is only useful for queries that are run frequently with the same parameters. To use the query cache you must first enable it:"
+msgstr "ã¯ã¨ãªãã£ãã·ã¥"
+
+#: index.docbook:916
+msgid "<![CDATA[hibernate.cache.use_query_cache true]]>"
+msgstr "ã¯ã¨ãªã®ãªã¶ã«ãã»ããããã£ãã·ã¥åºæ¥ã¾ããããã¯åããã©ã¡ã¼ã¿ã§ä½åº¦ãå®è¡ããã ã¯ã¨ãªã«å¯¾ãã¦ã®ã¿æç¨ã§ããã¯ã¨ãªãã£ãã·ã¥ã使ãã«ã¯ãã¾ãè¨å®ã§æå¹ã«ããªãã¦ã¯ãªãã¾ããã"
+
+#: index.docbook:918
+msgid "This setting causes the creation of two new cache regions - one holding cached query result sets (<literal>org.hibernate.cache.StandardQueryCache</literal>), the other holding timestamps of the most recent updates to queryable tables (<literal>org.hibernate.cache.UpdateTimestampsCache</literal>). Note that the query cache does not cache the state of the actual entities in the result set; it caches only identifier values and results of value type. So the query cache should always be used in conjunction with the second-level cache."
+msgstr "<![CDATA[hibernate.cache.use_query_cache true]]>"
+
+#: index.docbook:928
+msgid "Most queries do not benefit from caching, so by default queries are not cached. To enable caching, call <literal>Query.setCacheable(true)</literal>. This call allows the query to look for existing cache results or add its results to the cache when it is executed."
+msgstr "ãã®è¨å®ã¯æ°ãã«äºã¤ã®ãã£ãã·ã¥é åã®ä½æãè¡ãã¾ããä¸ã¤ã¯ã¯ã¨ãªã®ãªã¶ã«ãã»ããã® ãã£ãã·ã¥ï¼ <literal>org.hibernate.cache.StandardQueryCache</literal> ï¼ãä¿æãã ãã1ã¤ã¯ã¯ã¨ãªå¯è½ãªãã¼ãã«ã¸ã®ææ°ã®æ´æ°ã¿ã¤ã ã¹ã¿ã³ã ï¼ <literal>org.hibernate.cache.UpdateTimestampsCache</literal> ï¼ãä¿æãã¾ãã ã¯ã¨ãªãã£ãã·ã¥ã¯ãªã¶ã«ãã»ããã®å®éã®è¦ç´ ã®ç¶æ
ã¯ãã£ãã·ã¥ããªããã¨ã« 注æãã¦ãã ããããã£ãã·ã¥ããã®ã¯èå¥åã®å¤ã¨ãå¤åã®çµæã®ã¿ã§ãã ãã®ãããã¯ã¨ãªãã£ãã·ã¥ã¯å¸¸ã«äºæ¬¡ãã£ãã·ã¥ã¨ä¸ç·ã«ä½¿ãã¹ãã§ãã"
+
+#: index.docbook:935
+msgid "If you require fine-grained control over query cache expiration policies, you may specify a named cache region for a particular query by calling <literal>Query.setCacheRegion()</literal>."
+msgstr "ã»ã¨ãã©ã®ã¯ã¨ãªã¯ãã£ãã·ã¥ã®æ©æµãåããªãã®ã§ãããã©ã«ãã§ã¯ã¯ã¨ãªã¯ãã£ãã·ã¥ããã¾ããã ãã£ãã·ã¥ãæå¹ã«ããã«ã¯ã <literal>Query.setCacheable(true)</literal> ãå¼ã³åºãã¦ãã ããã ããããã°ã¯ã¨ãªãæ¢åã®ãã£ãã·ã¥çµæãæ¢ããã¯ã¨ãªå®è¡æã«ãã®çµæããã£ãã·ã¥ã«è¿½å ãã ããã«ãªãã¾ãã"
+
+#: index.docbook:941
+msgid ""
+ "<![CDATA[List blogs = sess.createQuery(\"from Blog blog where blog.blogger = :blogger\")\n"
+ " .setEntity(\"blogger\", blogger)\n"
+ " .setMaxResults(15)\n"
+ " .setCacheable(true)\n"
+ " .setCacheRegion(\"frontpages\")\n"
+ " .list();]]>"
+msgstr "ã¯ã¨ãªãã£ãã·ã¥ã®ç ´æ£ããªã·ã¼ãç´°ããå¶å¾¡ãããã¨ãã¯ã <literal>Query.setCacheRegion()</literal> ãå¼ã³åºãã¦ç¹å®ã®ã¯ã¨ãªã«å¯¾ãããã£ãã·ã¥é åãæå®ãããã¨ãåºæ¥ã¾ãã"
+
+#: index.docbook:943
+msgid "If the query should force a refresh of its query cache region, you should call <literal>Query.setCacheMode(CacheMode.REFRESH)</literal>. This is particularly useful in cases where underlying data may have been updated via a separate process (i.e., not modified through Hibernate) and allows the application to selectively refresh particular query result sets. This is a more efficient alternative to eviction of a query cache region via <literal>SessionFactory.evictQueries()</literal>."
+msgstr ""
+ "<![CDATA[List blogs = sess.createQuery(\"from Blog blog where blog.blogger = :blogger\")
+\n"
+ " .setEntity(\"blogger\", blogger)
+\n"
+ " .setMaxResults(15)
+\n"
+ " .setCacheable(true)
+\n"
+ " .setCacheRegion(\"frontpages\")
+\n"
+ " .list();]]>"
+
+#: index.docbook:955
+msgid "Understanding Collection performance"
+msgstr "ã¯ã¨ãªãèªèº«ã®ã¯ã¨ãªãã£ãã·ã¥é åã®ãªãã¬ãã·ã¥ãå¼·å¶ããªããã°ãªããªããªãã <literal>Query.setCacheMode(CacheMode.REFRESH)</literal> ãå¼ã³åºãã¹ãã§ãããã㯠å
ã¨ãªããã¼ã¿ãå¥ã®ããã»ã¹ã«ãã£ã¦æ´æ°ããããï¼ããªãã¡Hibernateãéãã¦æ´æ°ãããªãï¼ã ã¢ããªã±ã¼ã·ã§ã³ã«ç¹å®ã®ã¯ã¨ãªãªã¶ã«ãã»ãããé¸æãã¦ãªãã¬ãã·ã¥ãããå ´åã«ç¹ã«æç¨ã§ãã ããã«æç¨ãªããä¸ã¤ã®æ¹æ³ã¯ã <literal>SessionFactory.evictQueries()</literal> ã«ãã£ã¦ã¯ã¨ãªãã£ãã·ã¥é åãæ¶å»ãããã¨ã§ãã"
+
+#: index.docbook:957
+msgid "We've already spent quite some time talking about collections. In this section we will highlight a couple more issues about how collections behave at runtime."
+msgstr "â14.1"
+
+#: index.docbook:964
+msgid "Taxonomy"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ããã©ã¼ãã³ã¹ã®ç解"
+
+#: index.docbook:966
+msgid "Hibernate defines three basic kinds of collections:"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®è©±é¡ã«ã¯ãã§ã«å¤ãã®æéã使ãã¾ããããã®ç¯ã§ã¯ ã³ã¬ã¯ã·ã§ã³ãå®è¡æã«ã©ã®ããã«æ¯èããã«ã¤ãã¦ã®è©±é¡ã2ã3åãä¸ãã¾ãã"
+
+#: index.docbook:970
+msgid "collections of values"
+msgstr "<title>åé¡</title>"
+
+#: index.docbook:973
+msgid "one to many associations"
+msgstr "Hibernateã¯3ã¤ã®åºæ¬çãªã³ã¬ã¯ã·ã§ã³ã®ç¨®é¡ãå®ç¾©ãã¦ãã¾ãã"
+
+#: index.docbook:976
+msgid "many to many associations"
+msgstr "å¤ã®ã³ã¬ã¯ã·ã§ã³"
+
+#: index.docbook:980
+msgid "This classification distinguishes the various table and foreign key relationships but does not tell us quite everything we need to know about the relational model. To fully understand the relational structure and performance characteristics, we must also consider the structure of the primary key that is used by Hibernate to update or delete collection rows. This suggests the following classification:"
+msgstr "ä¸å¯¾å¤é¢é£"
+
+#: index.docbook:991
+msgid "indexed collections"
+msgstr "å¤å¯¾å¤é¢é£"
+
+#: index.docbook:994
+msgid "sets"
+msgstr "ãã®åé¡ã¯ãã¾ãã¾ãªãã¼ãã«ãå¤é¨ãã¼é¢é£ãåºå¥ãã¾ãããç§ãã¡ãç¥ãå¿
è¦ã®ãã é¢é£ã¢ãã«ã«ã¤ãã¦ã»ã¨ãã©ãªã«ãæãã¦ããã¾ãããé¢é£æ§é ãããã©ã¼ãã³ã¹ã®ç¹å¾´ã å®å
¨ã«ç解ããã«ã¯ãHibernateãã³ã¬ã¯ã·ã§ã³ã®è¡ãæ´æ°ãåé¤ããããã«ä½¿ã主ãã¼ã® æ§é ãã¾ãèããªããã°ãªãã¾ãããããã¯ä»¥ä¸ã®åé¡ãæ示ãã¾ãã"
+
+#: index.docbook:997
+msgid "bags"
+msgstr "ã¤ã³ããã¯ã¹ä»ãã³ã¬ã¯ã·ã§ã³"
+
+#: index.docbook:1001
+msgid "All indexed collections (maps, lists, arrays) have a primary key consisting of the <literal><key></literal> and <literal><index></literal> columns. In this case collection updates are usually extremely efficient - the primary key may be efficiently indexed and a particular row may be efficiently located when Hibernate tries to update or delete it."
+msgstr "<para>set</para>"
+
+#: index.docbook:1009
+msgid "Sets have a primary key consisting of <literal><key></literal> and element columns. This may be less efficient for some types of collection element, particularly composite elements or large text or binary fields; the database may not be able to index a complex primary key as efficently. On the other hand, for one to many or many to many associations, particularly in the case of synthetic identifiers, it is likely to be just as efficient. (Side-note: if you want <literal>SchemaExport</literal> to actually create the primary key of a <literal><set></literal> for you, you must declare all columns as <literal>not-null=\"true\"</literal>.)"
+msgstr "<para>bag</para>"
+
+#: index.docbook:1020
+msgid "<literal><idbag></literal> mappings define a surrogate key, so they are always very efficient to update. In fact, they are the best case."
+msgstr "ãã¹ã¦ã®ã¤ã³ããã¯ã¹ä»ãã³ã¬ã¯ã·ã§ã³ï¼mapãlistãé
åï¼ã¯ <literal><key></literal> 㨠<literal><index></literal> ã«ã©ã ãããªã主ãã¼ãæã£ã¦ãã¾ãããã®å ´å㯠ã³ã¬ã¯ã·ã§ã³ã®æ´æ°ã¯é常ã«å¹ççã§ãã主ãã¼ã¯æç¨ãªã¤ã³ããã¯ã¹ã«ãªããHibernateã ç¹å®ã®è¡ãæ´æ°ã¾ãã¯åé¤ããã¨ãã«ããã®è¡ãå¹ççã«è¦ã¤ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:1025
+msgid "Bags are the worst case. Since a bag permits duplicate element values and has no index column, no primary key may be defined. Hibernate has no way of distinguishing between duplicate rows. Hibernate resolves this problem by completely removing (in a single <literal>DELETE</literal>) and recreating the collection whenever it changes. This might be very inefficient."
+msgstr "set㯠<literal><key></literal> ãããªã主ãã¼ã¨è¦ç´ ã®ã«ã©ã ãæã£ã¦ãã¾ãã ããã¯ã³ã¬ã¯ã·ã§ã³è¦ç´ ã®ããã¤ãã®åã«ã¤ãã¦ã¯å¹ççã§ã¯ãªãããããã¾ããã ç¹ã«è¤åè¦ç´ ã大ããªããã¹ãããã¤ããªãã£ã¼ã«ãã§ã¯éå¹çã§ãããã¼ã¿ãã¼ã¹ã¯ è¤å主ãã¼ã«å¹ççã«ã¤ã³ããã¯ã¹ãä»ãããã¨ãã§ããªãããã§ããä¸æ¹ã1対å¤ãå¤å¯¾å¤é¢é£ã«ããã¦ã ç¹ã«äººå·¥èå¥åã®å ´åã¯åããããå¹ççã§ããï¼ä½è«ï¼ <literal>SchemaExport</literal> ã§å®éã« <literal><set></literal> ã®ä¸»ãã¼ãä½ããããªãããã¹ã¦ã®ã«ã©ã 㧠<literal>not-null=\"true\"</literal> ã宣è¨ããªããã°ãªãã¾ãããï¼"
+
+#: index.docbook:1033
+msgid "Note that for a one-to-many association, the \"primary key\" may not be the physical primary key of the database table - but even in this case, the above classification is still useful. (It still reflects how Hibernate \"locates\" individual rows of the collection.)"
+msgstr "<literal><idbag></literal> ãããã³ã°ã¯ä»£çãã¼ãå®ç¾©ãã¾ãããã®ãã æ´æ°ã¯å¸¸ã«é常ã«å¹ççã§ããäºå®ä¸ãããã¯æåã®ã±ã¼ã¹ã§ãã"
+
+#: index.docbook:1043
+msgid "Lists, maps, idbags and sets are the most efficient collections to update"
+msgstr "bagã¯ææªã®ã±ã¼ã¹ã§ããbagã¯è¦ç´ ã®å¤ã®éè¤ãå¯è½ã§ãã¤ã³ããã¯ã¹ã«ã©ã ãæããªãããã 主ãã¼ã¯å®ç¾©ãããªãããããã¾ãããHibernateã«ã¯éè¤ããè¡ãåºå¥ããæ¹æ³ãããã¾ããã Hibernateã¯ãã®åé¡ã®è§£æ±ºã®ããã«ãå¤æ´ããã£ãã¨ãã«ã¯å¸¸ã«å®å
¨ãªåé¤ ï¼ä¸ã¤ã® <literal>DELETE</literal> ã«ããï¼ãè¡ããã³ã¬ã¯ã·ã§ã³ã®åä½æãè¡ãã¾ãã ããã¯é常ã«éå¹ççããããã¾ããã"
+
+#: index.docbook:1045
+msgid "From the discussion above, it should be clear that indexed collections and (usually) sets allow the most efficient operation in terms of adding, removing and updating elements."
+msgstr "1対å¤é¢é£ã§ã¯ãã主ãã¼ãã¯ãã¼ã¿ãã¼ã¹ã®ãã¼ãã«ã®ç©çç㪠主ãã¼ã§ã¯ãªããããããªããã¨ã«æ³¨æãã¦ãã ãããããããã®å ´åã§ãããä¸è¨ã®åé¡ã¯ã¾ã æç¨ã§ãã ï¼Hibernateãã³ã¬ã¯ã·ã§ã³ã®åã
ã®è¡ãã©ããã£ã¦ãè¦ã¤ããããã表ãã¦ãã¾ããï¼"
+
+#: index.docbook:1051
+msgid "There is, arguably, one more advantage that indexed collections have over sets for many to many associations or collections of values. Because of the structure of a <literal>Set</literal>, Hibernate doesn't ever <literal>UPDATE</literal> a row when an element is \"changed\". Changes to a <literal>Set</literal> always work via <literal>INSERT</literal> and <literal>DELETE</literal> (of individual rows). Once again, this consideration does not apply to one to many associations."
+msgstr "æ´æ°ã«ãã£ã¨ãå¹ççãªã³ã¬ã¯ã·ã§ã³ listãmapãidbagãset"
+
+#: index.docbook:1060
+msgid "After observing that arrays cannot be lazy, we would conclude that lists, maps and idbags are the most performant (non-inverse) collection types, with sets not far behind. Sets are expected to be the most common kind of collection in Hibernate applications. This is because the \"set\" semantics are most natural in the relational model."
+msgstr "ä¸ã§ã®è°è«ãããã¤ã³ããã¯ã¹ä»ãã³ã¬ã¯ã·ã§ã³ã¨ï¼æ®éã®ï¼setã¯è¦ç´ ã®è¿½å ãåé¤ã æ´æ°ã§ãã£ã¨ãå¹ççãªæä½ãåºæ¥ããã¨ã¯æããã§ãã"
+
+#: index.docbook:1068
+msgid "However, in well-designed Hibernate domain models, we usually see that most collections are in fact one-to-many associations with <literal>inverse=\"true\"</literal>. For these associations, the update is handled by the many-to-one end of the association, and so considerations of collection update performance simply do not apply."
+msgstr "ã»ã¼ééããªããå¤å¯¾å¤é¢é£ãå¤ã®ã³ã¬ã¯ã·ã§ã³ã«ããã¦ãã¤ã³ããã¯ã¹ä»ãã³ã¬ã¯ã·ã§ã³ã setãããåªãã¦ããç¹ãä¸ã¤ä»¥ä¸ããã¾ãã <literal>Set</literal> ã¯ãã® æ§é ã®ããã«ãHibernateã¯è¦ç´ ããå¤æ´ããããã¨ãã«è¡ã決ã㦠<literal>UPDATE</literal> ãã¾ããã <literal>Set</literal> ã¸ã®å¤æ´ã¯å¸¸ã«ï¼åã
ã®è¡ã®ï¼<literal>INSERT</literal> 㨠<literal>DELETE</literal> ã«ãã£ã¦è¡ãã¾ããç¹°ãè¿ãã¾ãããããã¯ä¸å¯¾å¤é¢é£ã«ã¯ å½ã¦ã¯ã¾ãã¾ããã"
+
+#: index.docbook:1078
+msgid "Bags and lists are the most efficient inverse collections"
+msgstr "é
åã¯é
延å¦çãã§ããªãã¨ãã決ã¾ããªã®ã§ãçµè«ã¨ãã¦ãlistãmapãidbagããã£ã¨ã ããã©ã¼ãã³ã¹ã®è¯ãï¼inverseã§ã¯ãªãï¼ã³ã¬ã¯ã·ã§ã³ã¿ã¤ãã¨ãªãã¾ããsetã ããã»ã©éãã¯ããã¾ãããHibernateã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ãsetã¯ã³ã¬ã¯ã·ã§ã³ã®ãã£ã¨ã å
±éã®ç¨®é¡ã¨ãã¦æå¾
ããã¾ããsetã®è¡¨ç¾ã¯é¢é£ã¢ãã«ã§ã¯ãã£ã¨ãèªç¶ã ããã§ãã"
+
+#: index.docbook:1080
+msgid "Just before you ditch bags forever, there is a particular case in which bags (and also lists) are much more performant than sets. For a collection with <literal>inverse=\"true\"</literal> (the standard bidirectional one-to-many relationship idiom, for example) we can add elements to a bag or list without needing to initialize (fetch) the bag elements! This is because <literal>Collection.add()</literal> or <literal>Collection.addAll()</literal> must always return true for a bag or <literal>List</literal> (unlike a <literal>Set</literal>). This can make the following common code much faster."
+msgstr "ãããããããã¶ã¤ã³ãããHibernateã®ãã¡ã¤ã³ã¢ãã«ã§ã¯ãé常ãã£ã¨ãå¤ãã³ã¬ã¯ã·ã§ã³ã¯ äºå®ä¸ <literal>inverse=\"true\"</literal> ãæå®ãã1対å¤é¢é£ã§ãããããã®é¢é£ã§ã¯ã æ´æ°ã¯å¤å¯¾ä¸ã®é¢é£ç«¯ã§æ±ãããã³ã¬ã¯ã·ã§ã³ã®æ´æ°ããã©ã¼ãã³ã¹ã®åé¡ã¯å½ã¦ã¯ã¾ãã¾ããã"
+
+#: index.docbook:1090
+msgid ""
+ "<![CDATA[Parent p = (Parent) sess.load(Parent.class, id);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c); //no need to fetch the collection!\n"
+ "sess.flush();]]>"
+msgstr "inverseã³ã¬ã¯ã·ã§ã³ã«ãã£ã¨ãæé©ãªbagã¨list"
+
+#: index.docbook:1095
+msgid "One shot delete"
+msgstr "bagãè¦æ¾ãã¦ãã¾ãåã«ãbagï¼ããã¦listãï¼ãsetããããã£ã¨ããã©ã¼ãã³ã¹ãè¯ãç¹å¥ãªã±ã¼ã¹ã ç´¹ä»ãã¾ãã <literal>inverse=\"true\"</literal> ã®ã³ã¬ã¯ã·ã§ã³ï¼ä¸è¬çãª1対å¤é¢é£ã®ä½¿ãæ¹ãªã©ï¼ã§ã bagã®è¦ç´ ãåæåï¼ãã§ããï¼ããå¿
è¦ãªãbagãlistã«è¦ç´ ã追å ã§ãã¾ãï¼ ãã㯠<literal>Collection.add()</literal> ã <literal>Collection.addAll()</literal> ã¯bagã <literal>List</literal> ã§ã¯å¸¸ã«trueãè¿ããªããã°ãªããªãããã§ã ï¼ <literal>Set</literal> ã¨ã¯ç°ãªãã¾ãï¼ã ããã¯ä»¥ä¸ã®å
±éå¦çãããéããããã¨ãã§ãã¾ãã"
+
+#: index.docbook:1097
+msgid "Occasionally, deleting collection elements one by one can be extremely inefficient. Hibernate isn't completely stupid, so it knows not to do that in the case of an newly-empty collection (if you called <literal>list.clear()</literal>, for example). In this case, Hibernate will issue a single <literal>DELETE</literal> and we are done!"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) sess.load(Parent.class, id);
+\n"
+ "Child c = new Child();
+\n"
+ "c.setParent(p);
+\n"
+ "p.getChildren().add(c); //no need to fetch the collection!
+\n"
+ "sess.flush();]]>"
+
+#: index.docbook:1104
+msgid "Suppose we add a single element to a collection of size twenty and then remove two elements. Hibernate will issue one <literal>INSERT</literal> statement and two <literal>DELETE</literal> statements (unless the collection is a bag). This is certainly desirable."
+msgstr "ä¸æ¬åé¤"
+
+#: index.docbook:1110
+msgid "However, suppose that we remove eighteen elements, leaving two and then add thee new elements. There are two possible ways to proceed"
+msgstr "æã
ãã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ãä¸ã¤ä¸ã¤åé¤ãããã¨ã¯æ¥µãã¦éå¹ççã«ãªããã¨ãããã¾ãã Hibernateã¯æãã§ã¯ãªãã®ã§ãæ°ãã空ã®ã³ã¬ã¯ã·ã§ã³ã®å ´åï¼ <literal>list.clear()</literal> ãå¼ã³åºããå ´åãªã©ï¼ã§ã¯ããããã¹ãã§ãªããã¨ãç¥ã£ã¦ãã¾ãããã®å ´åã¯ãHibernate㯠<literal>DELETE</literal> ãä¸åçºè¡ãã¦ãããã§ãã¹ã¦çµããã¾ãï¼"
+
+#: index.docbook:1117
+msgid "delete eighteen rows one by one and then insert three rows"
+msgstr "ãµã¤ãº20ã®ã³ã¬ã¯ã·ã§ã³ã«ä¸ã¤ã®è¦ç´ ã追å ããããããäºã¤ã®è¦ç´ ãåé¤ããã¨ãã¾ãã Hibernateã¯ä¸ã¤ã® <literal>INSERT</literal> æã¨äºã¤ã® <literal>DELETE</literal> æãçºè¡ãã¾ã ï¼ã³ã¬ã¯ã·ã§ã³ãbagã§ãªããã°ï¼ãããã¯ç¢ºãã«æã¾ããåä½ã§ãã"
+
+#: index.docbook:1120
+msgid "remove the whole collection (in one SQL <literal>DELETE</literal>) and insert all five current elements (one by one)"
+msgstr "ãããã18åã®è¦ç´ ãåé¤ãã¦2ã¤ãæ®ãããããã3ã¤æ°ããè¦ç´ ã追å ããã¨ãã¾ãã ãã®ã¨ãäºã¤ã®æ¹æ³ãããã¾ãã"
+
+#: index.docbook:1125
+msgid "Hibernate isn't smart enough to know that the second option is probably quicker in this case. (And it would probably be undesirable for Hibernate to be that smart; such behaviour might confuse database triggers, etc.)"
+msgstr "18è¡ãä¸ã¤ä¸ã¤åé¤ãã¦ã3è¡ã追å ãã"
+
+#: index.docbook:1131
+msgid "Fortunately, you can force this behaviour (ie. the second strategy) at any time by discarding (ie. dereferencing) the original collection and returning a newly instantiated collection with all the current elements. This can be very useful and powerful from time to time."
+msgstr "ã³ã¬ã¯ã·ã§ã³å
¨ä½ãåé¤ï¼ <literal>DELETE</literal> ã®SQLãä¸åï¼ããããã¦5ã¤ã®è¦ç´ ãã¹ã¦ã ï¼ä¸ã¤ãã¤ï¼è¿½å ãã"
+
+#: index.docbook:1137
+msgid "Of course, one-shot-delete does not apply to collections mapped <literal>inverse=\"true\"</literal>."
+msgstr "Hibernateã¯ãã®å ´åã«2çªç®ã®æ¹æ³ãããéãã ããã¨ãããã»ã©è³¢ãã¯ããã¾ããã ï¼ããã¦Hibernateããã®ããã«è³¢ããã¨ãæã¾ãããªãã§ãããããã®ãããªæ¯ãèã㯠ãã¼ã¿ãã¼ã¹ã®ããªã¬ãªã©ãæ··ä¹±ãããããããã¾ãããï¼"
+
+#: index.docbook:1146
+msgid "Monitoring performance"
+msgstr "幸ãã«ããå
ã®ã³ã¬ã¯ã·ã§ã³ãæ¨ã¦ï¼ã¤ã¾ãåç
§ãããã¦ï¼ãç¾å¨ã®è¦ç´ ããã¹ã¦æã¤æ°ããã³ã¬ã¯ã·ã§ã³ã® ã¤ã³ã¹ã¿ã³ã¹ãè¿ããã¨ã§ããã¤ã§ããã®æ¯ãèãï¼2çªç®ã®æ¦ç¥ï¼ãå¼·å¶ãããã¨ãåºæ¥ã¾ãã æã«ããã¯ã¨ã¦ã便å©ã§å¼·åã§ãã"
+
+#: index.docbook:1148
+msgid "Optimization is not much use without monitoring and access to performance numbers. Hibernate provides a full range of figures about its internal operations. Statistics in Hibernate are available per <literal>SessionFactory</literal>."
+msgstr "ãã¡ãããä¸æ¬åé¤ã¯ <literal>inverse=\"true\"</literal> ãæå®ããã³ã¬ã¯ã·ã§ã³ã«ã¯è¡ãã¾ããã"
+
+#: index.docbook:1155
+msgid "Monitoring a SessionFactory"
+msgstr "ããã©ã¼ãã³ã¹ã®ã¢ãã¿ãªã³ã°"
+
+#: index.docbook:1157
+msgid "You can access <literal>SessionFactory</literal> metrics in two ways. Your first option is to call <literal>sessionFactory.getStatistics()</literal> and read or display the <literal>Statistics</literal> yourself."
+msgstr "æé©åã¯ã¢ãã¿ãªã³ã°ãããã©ã¼ãã³ã¹ã示ãæ°å¤ããªããã°ååã«è¡ãã¾ããã Hibernateã¯å
é¨å¦çã®ãã¹ã¦ã®ç¯å²ã®æ°å¤ãæä¾ãã¾ãã Hibernateã®çµ±è¨æ
å ±ã¯ <literal>SessionFactory</literal> åä½ã§åå¾å¯è½ã§ãã"
+
+#: index.docbook:1163
+msgid "Hibernate can also use JMX to publish metrics if you enable the <literal>StatisticsService</literal> MBean. You may enable a single MBean for all your <literal>SessionFactory</literal> or one per factory. See the following code for minimalistic configuration examples:"
+msgstr "SessionFactoryã®ã¢ãã¿ãªã³ã°"
+
+#: index.docbook:1170
+msgid ""
+ "<![CDATA[// MBean service registration for a specific SessionFactory\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"myFinancialApp\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory\n"
+ "server.registerMBean(stats, on); // Register the Mbean on the server]]>"
+msgstr "<literal>SessionFactory</literal> ã®ã¡ããªã¯ã¹ã«ã¢ã¯ã»ã¹ããã«ã¯2ã¤ã®æ¹æ³ãããã¾ãã æåã®æ¹æ³ã¯ã <literal>sessionFactory.getStatistics()</literal> ãå¼ã³åºãã èªå㧠<literal>Statistics</literal> ã®èªã¿è¾¼ã¿ã表示ãè¡ãã¾ãã"
+
+#: index.docbook:1173
+msgid ""
+ "<![CDATA[// MBean service registration for all SessionFactory's\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"all\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "server.registerMBean(stats, on); // Register the MBean on the server]]>"
+msgstr "<literal>StatisticsService</literal> MBeanãæå¹ã«ãã¦ããã°ãHibernateã¯JMXã使ã£ã¦ ã¡ããªã¯ã¹ãçºè¡ãããã¨ãã§ãã¾ãã1ã¤ã®MBeanããã¹ã¦ã® <literal>SessionFactory</literal> ã«å¯¾ãã¦æå¹ã«ããããSessionFactoryãã¨ã«ä¸ã¤ã®MBeanãæå¹ã«ãããã¨ãåºæ¥ã¾ãã æå°éã®è¨å®ä¾ã§ãã以ä¸ã®ã³ã¼ããè¦ã¦ãã ããã"
+
+#: index.docbook:1175
+msgid "TODO: This doesn't make sense: In the first case, we retrieve and use the MBean directly. In the second one, we must give the JNDI name in which the session factory is held before using it. Use <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal>"
+msgstr ""
+ "<![CDATA[// MBean service registration for a specific SessionFactory
+\n"
+ "Hashtable tb = new Hashtable();
+\n"
+ "tb.put(\"type\", \"statistics\");
+\n"
+ "tb.put(\"sessionFactory\", \"myFinancialApp\");
+\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name
+\n"
+ "
+\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation
+\n"
+ "stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory
+\n"
+ "server.registerMBean(stats, on); // Register the Mbean on the server]]>"
+
+#: index.docbook:1180
+msgid "You can (de)activate the monitoring for a <literal>SessionFactory</literal>"
+msgstr ""
+ "<![CDATA[// MBean service registration for all SessionFactory's
+\n"
+ "Hashtable tb = new Hashtable();
+\n"
+ "tb.put(\"type\", \"statistics\");
+\n"
+ "tb.put(\"sessionFactory\", \"all\");
+\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name
+\n"
+ "
+\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation
+\n"
+ "server.registerMBean(stats, on); // Register the MBean on the server]]>"
+
+#: index.docbook:1185
+msgid "at configuration time, set <literal>hibernate.generate_statistics</literal> to <literal>false</literal>"
+msgstr "TODO: ããã¯æå³ãããã¾ãããæåã®ã±ã¼ã¹ã¯ãMBeanãç´æ¥å¾©å
ãã¦ä½¿ç¨ãã¾ãã2çªç®ã®ã±ã¼ã¹ã¯ã 使ãåã«session factoryãæã£ã¦ããJNDIåã渡ããªããã°ãªãã¾ããã <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal> ã使ã£ã¦ãã ããã"
+
+#: index.docbook:1192
+msgid "at runtime: <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> or <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>"
+msgstr "<literal>SessionFactory</literal> ã«å¯¾ãã¦ã¢ãã¿ãªã³ã°ã®éå§ï¼çµäºï¼ãè¡ããã¨ãåºæ¥ã¾ãã"
+
+#: index.docbook:1199
+msgid "Statistics can be reset programatically using the <literal>clear()</literal> method. A summary can be sent to a logger (info level) using the <literal>logSummary()</literal> method."
+msgstr "è¨å®æã«ã¯ã <literal>hibernate.generate_statistics</literal> ã <literal>false</literal> ã«ãã¾ã"
+
+#: index.docbook:1208
+msgid "Metrics"
+msgstr "å®è¡æã«ã <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> ã¾ã㯠<literal>hibernateStatsBean.setStatisticsEnabled(true)</literal> ãå¼ã³åºãã¾ã"
+
+#: index.docbook:1210
+msgid "Hibernate provides a number of metrics, from very basic to the specialized information only relevant in certain scenarios. All available counters are described in the <literal>Statistics</literal> interface API, in three categories:"
+msgstr "çµ±è¨ã¯ <literal>clear()</literal> ã¡ã½ããã使ã£ã¦æåã§ãªã»ãããããã¨ãåºæ¥ã¾ãã ãµããªã¯ <literal>logSummary()</literal> ã¡ã½ããã使ã£ã¦loggerã«éããã¨ãåºæ¥ã¾ã ï¼infoã¬ãã«ã§ãï¼ã"
+
+#: index.docbook:1217
+msgid "Metrics related to the general <literal>Session</literal> usage, such as number of open sessions, retrieved JDBC connections, etc."
+msgstr "ã¡ããªã¯ã¹"
+
+#: index.docbook:1223
+msgid "Metrics related to he entities, collections, queries, and caches as a whole (aka global metrics),"
+msgstr "å¤ãã®ãã®ãããã¾ãããã¹ã¦ã®ä½¿ç¨å¯è½ãªã«ã¦ã³ã¿ã¯ <literal>Statistics</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®APIã«æ¸ããã¦ããã3ã¤ã®åé¡ãããã¾ãã"
+
+#: index.docbook:1229
+msgid "Detailed metrics related to a particular entity, collection, query or cache region."
+msgstr "ã¡ããªã¯ã¹ã¯ä¸è¬ç㪠<literal>Session</literal> ã®ä½¿ãæ¹ã¨é¢ä¿ãã¦ãã¾ãã ãªã¼ãã³ããã»ãã·ã§ã³ã®æ°ãJDBCã³ãã¯ã·ã§ã³ã¨é¢é£ãã¦ããã®ã¨åãã§ãã"
+
+#: index.docbook:1236
+msgid "For exampl,e you can check the cache hit, miss, and put ratio of entities, collections and queries, and the average time a query needs. Beware that the number of milliseconds is subject to approximation in Java. Hibernate is tied to the JVM precision, on some platforms this might even only be accurate to 10 seconds."
+msgstr "ã¡ããªã¯ã¹ã¯è¦ç´ ãã³ã¬ã¯ã·ã§ã³ãã¯ã¨ãªããã£ãã·ã¥ãªã©å
¨ä½ã« é¢ä¿ãã¦ãã¾ãï¼å¥åã¯ã°ãã¼ãã«ã¡ããªã¯ã¹ã§ãï¼ã"
+
+#: index.docbook:1243
+msgid "Simple getters are used to access the global metrics (i.e. not tied to a particular entity, collection, cache region, etc.). You can access the metrics of a particular entity, collection or cache region through its name, and through its HQL or SQL representation for queries. Please refer to the <literal>Statistics</literal>, <literal>EntityStatistics</literal>, <literal>CollectionStatistics</literal>, <literal>SecondLevelCacheStatistics</literal>, and <literal>QueryStatistics</literal> API Javadoc for more information. The following code shows a simple example:"
+msgstr "ã¡ããªã¯ã¹ã®è©³ç´°ã¯ç¹å®ã®ã¨ã³ãã£ãã£ãã³ã¬ã¯ã·ã§ã³ãã¯ã¨ãªããã£ãã·ã¥é åã«é¢ä¿ãã¦ãã¾ãã"
+
+#: index.docbook:1253
+msgid ""
+ "<![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();\n"
+ "\n"
+ "double queryCacheHitCount = stats.getQueryCacheHitCount();\n"
+ "double queryCacheMissCount = stats.getQueryCacheMissCount();\n"
+ "double queryCacheHitRatio =\n"
+ " queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);\n"
+ "\n"
+ "log.info(\"Query Hit ratio:\" + queryCacheHitRatio);\n"
+ "\n"
+ "EntityStatistics entityStats =\n"
+ " stats.getEntityStatistics( Cat.class.getName() );\n"
+ "long changes =\n"
+ " entityStats.getInsertCount()\n"
+ " + entityStats.getUpdateCount()\n"
+ " + entityStats.getDeleteCount();\n"
+ "log.info(Cat.class.getName() + \" changed \" + changes + \"times\" );]]>"
+msgstr "ä¾ã¨ãã¦ããã£ãã·ã¥ã®ããããããããã¹ããè¦ç´ ãã³ã¬ã¯ã·ã§ã³ãã¯ã¨ãªã®å²åãã¯ã¨ãªã®å®è¡ã« å¿
è¦ãªå¹³åæéã確èªã§ãã¾ããããªç§ã®æ°å¤ã¯Javaã®è¿ä¼¼ãåãããã¨ã«æ³¨æãã¦ãã ããã Hibernateã¯JVMã®ç²¾åº¦ã«å¶éããããã©ãããã©ã¼ã ã«ãã£ã¦ã¯10ç§åä½ã§ããæ£ç¢ºã§ãªãããããã¾ããã"
+
+#: index.docbook:1255
+msgid "To work on all entities, collections, queries and region caches, you can retrieve the list of names of entities, collections, queries and region caches with the following methods: <literal>getQueries()</literal>, <literal>getEntityNames()</literal>, <literal>getCollectionRoleNames()</literal>, and <literal>getSecondLevelCacheRegionNames()</literal>."
+msgstr "åç´ãªgetterã¯ã°ãã¼ãã«ã¡ããªã¯ã¹ï¼ããªãã¡ç¹å®ã®ã¨ã³ãã£ãã£ãã³ã¬ã¯ã·ã§ã³ããã£ãã·ã¥é åãªã©ã«ç¸ãããªãï¼ ã«ã¢ã¯ã»ã¹ããããã«ä½¿ãã¾ããç¹å®ã®ã¨ã³ãã£ãã£ãã³ã¬ã¯ã·ã§ã³ããã£ãã·ã¥é åã®ã¡ããªã¯ã¹ã¯ã ãããã®ååããã¯ã¨ãªã®HQLãSQL表ç¾ã«ãã£ã¦ã¢ã¯ã»ã¹ãããã¨ãåºæ¥ã¾ããããã«è©³ããæ
å ±ã¯ã <literal>Statistics</literal> ã <literal>EntityStatistics</literal> ã <literal>CollectionStatistics</literal> ã <literal>SecondLevelCacheStatistics</literal> ã <literal>QueryStatistics</literal> APIã®javadocã åç
§ãã¦ãã ããã以ä¸ã®ã³ã¼ãã¯ç°¡åãªä¾ã§ãã"
+
+#: index.docbook:1352
+msgid "appended paragraph 1"
+msgstr ""
+ "<![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();
+\n"
+ "
+\n"
+ "double queryCacheHitCount = stats.getQueryCacheHitCount();
+\n"
+ "double queryCacheMissCount = stats.getQueryCacheMissCount();
+\n"
+ "double queryCacheHitRatio =
+\n"
+ " queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);
+\n"
+ "
+\n"
+ "log.info(\"Query Hit ratio:\" + queryCacheHitRatio);
+\n"
+ "
+\n"
+ "EntityStatistics entityStats =
+\n"
+ " stats.getEntityStatistics( Cat.class.getName() );
+\n"
+ "long changes =
+\n"
+ " entityStats.getInsertCount()
+\n"
+ " + entityStats.getUpdateCount()
+\n"
+ " + entityStats.getDeleteCount();
+\n"
+ "log.info(Cat.class.getName() + \" changed \" + changes + \"times\" );]]>"
+
+#: index.docbook:1369
+msgid "appended paragraph 2"
+msgstr "ãã¹ã¦ã®ã¨ã³ãã£ãã£ãã³ã¬ã¯ã·ã§ã³ãã¯ã¨ãªããã£ãã·ã¥é åã«å¯¾ãã¦è¡ãå ´åã¯ã <literal>getQueries()</literal> ã <literal>getEntityNames()</literal>ã <literal>getCollectionRoleNames()</literal> ã <literal>getSecondLevelCacheRegionNames()</literal> ã¡ã½ãã㧠ããããã®ååã®ãªã¹ããåå¾ãããã¨ãåºæ¥ã¾ãã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/persistent_classes.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/persistent_classes.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/persistent_classes.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,867 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Persistent Classes"
+msgstr "æ°¸ç¶ã¯ã©ã¹"
+
+#: index.docbook:7
+msgid "Persistent classes are classes in an application that implement the entities of the business problem (e.g. Customer and Order in an E-commerce application). Not all instances of a persistent class are considered to be in the persistent state - an instance may instead be transient or detached."
+msgstr "æ°¸ç¶ã¯ã©ã¹ã¯ãã¸ãã¹ä¸ã®åé¡ã®ã¨ã³ãã£ãã£ï¼ä¾ãã°ãEã³ãã¼ã¹ã¢ããªã±ã¼ã·ã§ã³ã®é¡§å®¢ã注æï¼ ãå®è£
ããã¢ããªã±ã¼ã·ã§ã³ã®ã¯ã©ã¹ã§ãã æ°¸ç¶ã¯ã©ã¹ã®ãã¹ã¦ã®ã¤ã³ã¹ã¿ã³ã¹ãæ°¸ç¶ç¶æ
ã§ããã¨è¦ãªãããããã§ã¯ããã¾ããã ã¤ã³ã¹ã¿ã³ã¹ã¯éã«ä¸æçï¼transientï¼ã§ãã£ãããåé¢ç¶æ
ï¼detachedï¼ã§ãã£ããããããããã¾ããã"
+
+#: index.docbook:14
+msgid "Hibernate works best if these classes follow some simple rules, also known as the Plain Old Java Object (POJO) programming model. However, none of these rules are hard requirements. Indeed, Hibernate3 assumes very little about the nature of your persistent objects. You may express a domain model in other ways: using trees of <literal>Map</literal> instances, for example."
+msgstr "Plain Old Java Object (POJO)ããã°ã©ãã³ã°ã¢ãã«ã¨ãã¦ãç¥ããã ããã¤ãã®åç´ãªã«ã¼ã«ã«å¾ããªããHibernateã¯æãããåãã¾ãã ããããããã®ã«ã¼ã«ã¯é£ãããã®ã§ã¯ããã¾ããã å®éHibernate3ã¯æ°¸ç¶ãªãã¸ã§ã¯ãã®æ§è³ªã«ã»ã¨ãã©ä½ã®åæãç½®ãã¦ãã¾ããã ãã¡ã¤ã³ã¢ãã«ã¯ä»ã®æ¹æ³ã§è¡¨ç¾ãããã¨ãã§ãã¾ãã ä¾ãã° <literal>Map</literal> ã¤ã³ã¹ã¿ã³ã¹ã®ããªã¼ã使ãæ¹æ³ãããã¾ãã"
+
+#: index.docbook:23
+msgid "A simple POJO example"
+msgstr "åç´ãªPOJOã®ä¾"
+
+#: index.docbook:25
+msgid "Most Java applications require a persistent class representing felines."
+msgstr "ã»ã¨ãã©ã®Javaã¢ããªã±ã¼ã·ã§ã³ã«ã¯ãã³ç§ã®åç©ã表ç¾ããæ°¸ç¶ã¯ã©ã¹ãå¿
è¦ã§ãã"
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ "\n"
+ " private Date birthdate;\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ " private int litterId;\n"
+ "\n"
+ " private Cat mother;\n"
+ " private Set kittens = new HashSet();\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ "\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ "\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " void setLitterId(int id) {\n"
+ " this.litterId = id;\n"
+ " }\n"
+ " public int getLitterId() {\n"
+ " return litterId;\n"
+ " }\n"
+ "\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " \n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kitten.setMother(this);\n"
+ " kitten.setLitterId( kittens.size() ); \n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;
+\n"
+ "import java.util.Set;
+\n"
+ "import java.util.Date;
+\n"
+ "
+\n"
+ "public class Cat {
+\n"
+ " private Long id; // identifier
+\n"
+ "
+\n"
+ " private Date birthdate;
+\n"
+ " private Color color;
+\n"
+ " private char sex;
+\n"
+ " private float weight;
+\n"
+ " private int litterId;
+\n"
+ "
+\n"
+ " private Cat mother;
+\n"
+ " private Set kittens = new HashSet();
+\n"
+ "
+\n"
+ " private void setId(Long id) {
+\n"
+ " this.id=id;
+\n"
+ " }
+\n"
+ " public Long getId() {
+\n"
+ " return id;
+\n"
+ " }
+\n"
+ "
+\n"
+ " void setBirthdate(Date date) {
+\n"
+ " birthdate = date;
+\n"
+ " }
+\n"
+ " public Date getBirthdate() {
+\n"
+ " return birthdate;
+\n"
+ " }
+\n"
+ "
+\n"
+ " void setWeight(float weight) {
+\n"
+ " this.weight = weight;
+\n"
+ " }
+\n"
+ " public float getWeight() {
+\n"
+ " return weight;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public Color getColor() {
+\n"
+ " return color;
+\n"
+ " }
+\n"
+ " void setColor(Color color) {
+\n"
+ " this.color = color;
+\n"
+ " }
+\n"
+ "
+\n"
+ " void setSex(char sex) {
+\n"
+ " this.sex=sex;
+\n"
+ " }
+\n"
+ " public char getSex() {
+\n"
+ " return sex;
+\n"
+ " }
+\n"
+ "
+\n"
+ " void setLitterId(int id) {
+\n"
+ " this.litterId = id;
+\n"
+ " }
+\n"
+ " public int getLitterId() {
+\n"
+ " return litterId;
+\n"
+ " }
+\n"
+ "
+\n"
+ " void setMother(Cat mother) {
+\n"
+ " this.mother = mother;
+\n"
+ " }
+\n"
+ " public Cat getMother() {
+\n"
+ " return mother;
+\n"
+ " }
+\n"
+ " void setKittens(Set kittens) {
+\n"
+ " this.kittens = kittens;
+\n"
+ " }
+\n"
+ " public Set getKittens() {
+\n"
+ " return kittens;
+\n"
+ " }
+\n"
+ "
+\n"
+ " // addKitten not needed by Hibernate
+\n"
+ " public void addKitten(Cat kitten) {
+\n"
+ " kitten.setMother(this);
+\n"
+ " kitten.setLitterId( kittens.size() );
+\n"
+ " kittens.add(kitten);
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:31
+msgid "There are four main rules to follow here:"
+msgstr "å¾ãã¹ã4ã¤ã®ã«ã¼ã«ãããã¾ãï¼"
+
+#: index.docbook:37
+msgid "Implement a no-argument constructor"
+msgstr "å¼æ°ã®ãªãã³ã³ã¹ãã©ã¯ã¿ãå®è£
ãã"
+
+#: index.docbook:39
+msgid "<literal>Cat</literal> has a no-argument constructor. All persistent classes must have a default constructor (which may be non-public) so that Hibernate can instantiate them using <literal>Constructor.newInstance()</literal>. We strongly recommend having a default constructor with at least <emphasis>package</emphasis> visibility for runtime proxy generation in Hibernate."
+msgstr "<literal>Cat</literal> ã«ã¯å¼æ°ã®ãªãã³ã³ã¹ãã©ã¯ã¿ãããã¾ãã Hibernateã <literal>Constructor.newInstance()</literal> ã使ã£ã¦æ°¸ç¶ã¯ã©ã¹ã® ã¤ã³ã¹ã¿ã³ã¹åãè¡ããããã«ããã¹ã¦ã®æ°¸ç¶ã¯ã©ã¹ã«ã¯ããã©ã«ãã³ã³ã¹ãã©ã¯ã¿ ï¼publicã§ãªãã¦ãæ§ãã¾ããï¼ããªããã°ãªãã¾ããã Hibernateã®å®è¡æãããã·çæã®ããã«ãå°ãªãã¨ã <emphasis>package</emphasis> ã®å¯è¦æ§ãæã¤ããã©ã«ãã³ã³ã¹ãã©ã¯ã¿ãå¼·ããå§ããã¾ãã"
+
+#: index.docbook:49
+msgid "Provide an identifier property (optional)"
+msgstr "èå¥åããããã£ãç¨æããï¼ãªãã·ã§ã³ï¼"
+
+#: index.docbook:51
+msgid "<literal>Cat</literal> has a property called <literal>id</literal>. This property maps to the primary key column of a database table. The property might have been called anything, and its type might have been any primitive type, any primitive \"wrapper\" type, <literal>java.lang.String</literal> or <literal>java.util.Date</literal>. (If your legacy database table has composite keys, you can even use a user-defined class with properties of these types - see the section on composite identifiers later.)"
+msgstr "<literal>Cat</literal> ã«ã¯ <literal>id</literal> ã¨ããããããã£ãããã¾ãã ãã®ããããã£ã¯ãã¼ã¿ãã¼ã¹ãã¼ãã«ã®ä¸»ãã¼ã«ã©ã ã¸ãããã³ã°ããã¾ãã ãã®ããããã£ã®ååã¯ä½ã§ãæ§ãã¾ããããåã¯ã©ã®ãããªããªããã£ãåã§ãã ããªããã£ãã®ãã©ããã¼ãåã§ãã<literal>java.lang.String</literal> ã <literal>java.util.Date</literal> ã§ãæ§ãã¾ããã ï¼ããã¬ã¬ã·ã¼ãã¼ã¿ãã¼ã¹ãã¼ãã«ãè¤åãã¼ãæã¤ãªãã°ã ä»è¿°ã¹ããããªåã®ããããã£ãæã¤ã¦ã¼ã¶å®ç¾©ã®ã¯ã©ã¹ã使ããã¨ããå¯è½ã§ãã å¾ã§è¤åèå¥åã®ç¯ãè¦ã¦ãã ãããï¼"
+
+#: index.docbook:60
+msgid "The identifier property is strictly optional. You can leave them off and let Hibernate keep track of object identifiers internally. We do not recommend this, however."
+msgstr "èå¥åããããã£ã¯å³å¯ã«ã¯ãªãã·ã§ã³ã§ãã ãããçç¥ãã¦ãHibernateã«å
é¨çã«ãªãã¸ã§ã¯ãã®èå¥åã追跡ããããã¨ã¯å¯è½ã§ãã ãããããããã¯ãã¾ããã"
+
+#: index.docbook:65
+msgid "In fact, some functionality is available only to classes which declare an identifier property:"
+msgstr "å®éã«ãèå¥åããããã£ã宣è¨ããã¯ã©ã¹ã ããå©ç¨å¯è½ãªæ©è½ãããã¤ãããã¾ãï¼"
+
+#: index.docbook:72
+msgid "Transitive reattachment for detached objects (cascade update or cascade merge) - see"
+msgstr "åé¢ãªãã¸ã§ã¯ãã®é£éçãªå追å ï¼ã«ã¹ã±ã¼ãæ´æ°ãã«ã¹ã±ã¼ããã¼ã¸ï¼ã <xref linkend=\"objectstate-transitive\"/> ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:79
+msgid "Session.saveOrUpdate()"
+msgstr "Session.saveOrUpdate()"
+
+#: index.docbook:84
+msgid "Session.merge()"
+msgstr "Session.merge()"
+
+#: index.docbook:89
+msgid "We recommend you declare consistently-named identifier properties on persistent classes. We further recommend that you use a nullable (ie. non-primitive) type."
+msgstr "æ°¸ç¶ã¯ã©ã¹ã«ã¯ãä¸è²«ããååã®èå¥åããããã£ãå®ç¾©ãããã¨ããå§ããã¾ãã ããã«nullå¤ãåãã(ã¤ã¾ãããªããã£ãã§ã¯ãªã)åã使ã£ãæ¹ãããã§ãããã"
+
+#: index.docbook:96
+msgid "Prefer non-final classes (optional)"
+msgstr "finalã¯ã©ã¹ã«ããªãï¼ãªãã·ã§ã³ï¼"
+
+#: index.docbook:97
+msgid "A central feature of Hibernate, <emphasis>proxies</emphasis>, depends upon the persistent class being either non-final, or the implementation of an interface that declares all public methods."
+msgstr "Hibernateã®ä¸å¿çãªç¹å¾´ã§ãã <emphasis>ãããã·</emphasis> ã¯ã æ°¸ç¶ã¯ã©ã¹ãfinalã§ãªããã¨ãã¾ãã¯ã¡ã½ãããå
¨é¨publicã§å®£è¨ãã¦ãã ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ããã¦ãããã«ä¾åãã¦ãã¾ãã"
+
+#: index.docbook:102
+msgid "You can persist <literal>final</literal> classes that do not implement an interface with Hibernate, but you won't be able to use proxies for lazy association fetching - which will limit your options for performance tuning."
+msgstr "Hibernateã§ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ãã¦ããªã <literal>final</literal> ã¯ã©ã¹ãæ°¸ç¶åãããã¨ã¯ã§ãã¾ããã é
延é¢é£ãã§ããã«å¯¾ãã¦ãããã·ã使ããã¨ã¯ã§ããªããªãã¾ãã ããã¯ããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã¸ã®é¸æè¢ãçãããã¨ã«ãªãã¾ãã"
+
+#: index.docbook:107
+msgid "You should also avoid declaring <literal>public final</literal> methods on the non-final classes. If you want to use a class with a <literal>public final</literal> method, you must explicitly disable proxying by setting <literal>lazy=\"false\"</literal>."
+msgstr "finalã§ã¯ãªãã¯ã©ã¹ã§ <literal>public final</literal> ã¡ã½ãããå®ç¾©ãããã¨ãé¿ããã¹ãã§ãã <literal>public final</literal> ã¡ã½ãããæã¤ã¯ã©ã¹ã使ããããã°ã <literal>lazy=\"false\"</literal> ã¨è¨å®ãã¦æ示çã«ãããã·ãç¡å¹ã«ããªããã°ãªãã¾ããã"
+
+#: index.docbook:115
+msgid "Declare accessors and mutators for persistent fields (optional)"
+msgstr "æ°¸ç¶ãã£ã¼ã«ãã«å¯¾ããã¢ã¯ã»ãµã¨ãã¥ã¼ãã¼ã¿ãå®ç¾©ããï¼ãªãã·ã§ã³ï¼"
+
+#: index.docbook:117
+msgid "<literal>Cat</literal> declares accessor methods for all its persistent fields. Many other ORM tools directly persist instance variables. We believe it is better to provide an indirection between the relational schema and internal data structures of the class. By default, Hibernate persists JavaBeans style properties, and recognizes method names of the form <literal>getFoo</literal>, <literal>isFoo</literal> and <literal>setFoo</literal>. You may switch to direct field access for particular properties, if needed."
+msgstr "<literal>Cat</literal> ã§ã¯ãã¹ã¦ã®æ°¸ç¶ãã£ã¼ã«ãã«å¯¾ãã¦ã¢ã¯ã»ãµã¡ã½ãããå®ç¾©ãã¦ãã¾ãã ä»ã®å¤ãã®ORMãã¼ã«ã¯ãæ°¸ç¶ã¤ã³ã¹ã¿ã³ã¹å¤æ°ãç´æ¥æ°¸ç¶åãã¾ãã ç§ãã¡ã¯ãªã¬ã¼ã·ã§ãã«ã¹ãã¼ãã¨ã¯ã©ã¹ã®å
é¨æ§é ãåé¢ããæ¹ãè¯ãã¨ä¿¡ãã¦ãã¾ãã ããã©ã«ãã§ã¯ãHibernateã¯JavaBeanã¹ã¿ã¤ã«ã®ããããã£ãæ°¸ç¶åãã <literal>getFoo</literal>, <literal>isFoo</literal>, <literal>setFoo</literal> å½¢å¼ã®ã¡ã½ããåãèªèãã¾ãã ãããå¿
è¦ãªããç¹å®ã®ããããã£ã«å¯¾ãã¦ãç´æ¥ã®ãã£ã¼ã«ãã¢ã¯ã»ã¹ã«åãæ¿ãããã¨ã¯å¯è½ã§ãã"
+
+#: index.docbook:127
+msgid "Properties need <emphasis>not</emphasis> be declared public - Hibernate can persist a property with a default, <literal>protected</literal> or <literal>private</literal> get / set pair."
+msgstr "ããããã£ã¯publicã§å®£è¨ããå¿
è¦ã¯ <emphasis>ããã¾ãã</emphasis> ã Hibernateã¯ããã©ã«ãã<literal>protected</literal> ããã㯠<literal>private</literal> ã®get / setã®ãã¢ãæã¤ããããã£ãæ°¸ç¶åãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:138
+msgid "Implementing inheritance"
+msgstr "ç¶æ¿ã®å®è£
"
+
+#: index.docbook:140
+msgid "A subclass must also observe the first and second rules. It inherits its identifier property from the superclass, <literal>Cat</literal>."
+msgstr "ãµãã¯ã©ã¹ã1çªç®ã¨2çªç®ã®ã«ã¼ã«ãå®ããªããã°ãªãã¾ããã ãµãã¯ã©ã¹ã¯ã¹ã¼ãã¼ã¯ã©ã¹ <literal>Cat</literal> ããèå¥åããããã£ãç¶æ¿ãã¾ãã"
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "public class DomesticCat extends Cat {\n"
+ " private String name;\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ " protected void setName(String name) {\n"
+ " this.name=name;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;
+\n"
+ "
+\n"
+ "public class DomesticCat extends Cat {
+\n"
+ " private String name;
+\n"
+ "
+\n"
+ " public String getName() {
+\n"
+ " return name;
+\n"
+ " }
+\n"
+ " protected void setName(String name) {
+\n"
+ " this.name=name;
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:149
+msgid "Implementing <literal>equals()</literal> and <literal>hashCode()</literal>"
+msgstr "<literal>equals()</literal> 㨠<literal>hashCode()</literal> ã®å®è£
"
+
+#: index.docbook:151
+msgid "You have to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods if you"
+msgstr "以ä¸ã®æ¡ä»¶ã®å ´åã <literal>equals()</literal> 㨠<literal>hashCode()</literal> ã¡ã½ããããªã¼ãã¼ã©ã¤ãããªããã°ãªãã¾ããã"
+
+#: index.docbook:157
+msgid "intend to put instances of persistent classes in a <literal>Set</literal> (the recommended way to represent many-valued associations) <emphasis>and</emphasis>"
+msgstr "æ°¸ç¶ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã <literal>Set</literal> ã«ç½®ãå ´åã ï¼ããã¯å¤å¤ã®é¢é£ã表ç¾ããããããã®æ¹æ³ã§ãï¼ <emphasis>ããã¦åæã«</emphasis>"
+
+#: index.docbook:164
+msgid "intend to use reattachment of detached instances"
+msgstr "åé¢ã¤ã³ã¹ã¿ã³ã¹ãã»ãã·ã§ã³ã¸å追å ããå ´åã"
+
+#: index.docbook:170
+msgid "Hibernate guarantees equivalence of persistent identity (database row) and Java identity only inside a particular session scope. So as soon as we mix instances retrieved in different sessions, we must implement <literal>equals()</literal> and <literal>hashCode()</literal> if we wish to have meaningful semantics for <literal>Set</literal>s."
+msgstr "Hibernateã¯ãæ°¸ç¶IDï¼ãã¼ã¿ãã¼ã¹ã®è¡ï¼ã¨ãç¹å®ã®ã»ãã·ã§ã³ã¹ã³ã¼ãå
ã« éå®ã§ããJavaIDã¨ãç価ã§ãããã¨ãä¿è¨¼ãã¾ãã ã§ãããç°ãªãã»ãã·ã§ã³ã§æ¤ç´¢ããã¤ã³ã¹ã¿ã³ã¹ãçµã¿åãããå ´åã <literal>Set</literal> ã«æå³ã®ããã»ãã³ãã£ã¯ã¹ãæããããã¨æã£ã¦ãããªã ããã«<literal>equals()</literal> 㨠<literal>hashCode()</literal> ãå®è£
ããªããã°ãªãã¾ããã"
+
+#: index.docbook:178
+msgid "The most obvious way is to implement <literal>equals()</literal>/<literal>hashCode()</literal> by comparing the identifier value of both objects. If the value is the same, both must be the same database row, they are therefore equal (if both are added to a <literal>Set</literal>, we will only have one element in the <literal>Set</literal>). Unfortunately, we can't use that approach with generated identifiers! Hibernate will only assign identifier values to objects that are persistent, a newly created instance will not have any identifier value! Furthermore, if an instance is unsaved and currently in a <literal>Set</literal>, saving it will assign an identifier value to the object. If <literal>equals()</literal> and <literal>hashCode()</literal> are based on the identifier value, the hash code would change, breaking the contract of the <literal>Set</literal>. See the Hibernate website for a full discussion of this problem. Note that this is not a Hibernate issue, but !
normal Java semantics of object identity and equality."
+msgstr "æãæç½ãªæ¹æ³ã¯ã両æ¹ã®ãªãã¸ã§ã¯ãã®èå¥åã®å¤ã®æ¯è¼ã«ãã£ã¦ <literal>equals()</literal>㨠<literal>hashCode()</literal> ãå®è£
ããæ¹æ³ã§ãã å¤ãåããªãã両è
ã¯ãã¼ã¿ãã¼ã¹ã®åãè¡ã§ãªããã°ãªããªãããçãããªãã¾ãã ï¼ä¸¡è
ã <literal>Set</literal> ã«è¿½å ããã¦ãã <literal>Set</literal> ã«ã¯1åã®è¦ç´ ãããªããã¨ã«ãªãã¾ãï¼ æ®å¿µãªãã¨ã«ãçæãããèå¥åã«ã¯ãã®ã¢ããã¼ãã使ããã¨ãã§ãã¾ããã Hibernateã¯æ°¸ç¶åããããªãã¸ã§ã¯ãã¸èå¥åã®å¤ã代å
¥ããã ãã§ããã æ°ããä½æãããã¤ã³ã¹ã¿ã³ã¹ã¯ã©ã®ãããªèå¥åã®å¤ãæã£ã¦ãã¾ããã ããã«ãã¤ã³ã¹ã¿ã³ã¹ãã»ã¼ãããã¦ããããç¾å¨ <literal>Set</literal> ã®ä¸ã«ããã°ã ã»ã¼ãããã¨ãªãã¸ã§ã¯ãã¸èå¥åã®å¤ã代å
¥ãããã¨ã«ãªãã¾ãã ãã <literal!
>equals()</literal> 㨠<literal>hashCode()</literal> ãèå¥åã®å¤ã«åºã¥ãã¦ãããªãã ããã·ã¥ã³ã¼ããå¤æ´ããã㨠<literal>Set</literal> ã®è¦ç´ãç ´ããã¾ãã ãã®åé¡ã«ã¤ãã¦ã®å®å
¨ãªè°è«ã¯ãHibernateã®ã¦ã§ããµã¤ããè¦ã¦ãã ããã ããã¯Hibernateã®åé¡ã§ã¯ãªãããªãã¸ã§ã¯ãã®åä¸æ§ã¨ç価æ§ã«ã¤ãã¦ã®ã é常ã®Javaã®ã»ãã³ãã£ã¯ã¹ã§ãããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:192
+msgid "We recommend implementing <literal>equals()</literal> and <literal>hashCode()</literal> using <emphasis>Business key equality</emphasis>. Business key equality means that the <literal>equals()</literal> method compares only the properties that form the business key, a key that would identify our instance in the real world (a <emphasis>natural</emphasis> candidate key):"
+msgstr "<emphasis>ãã¸ãã¹ãã¼ã®ç価æ§</emphasis> ã使ã£ã¦ã <literal>equals()</literal> 㨠<literal>hashCode()</literal> ãå®è£
ãããã¨ããå§ããã¾ãã ãã¸ãã¹ãã¼ã®ç価æ§ã¨ã¯ã<literal>equals()</literal> ã¡ã½ãããããã¸ãã¹ãã¼ã ã¤ã¾ãç¾å®ã®ä¸çã«ããã¦ã¤ã³ã¹ã¿ã³ã¹ãç¹å®ãããã¼ï¼<emphasis>èªç¶</emphasis> åè£ãã¼ï¼ ãå½¢æããããããã£ã ããæ¯è¼ãããã¨ãæå³ãã¾ãã"
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[public class Cat {\n"
+ "\n"
+ " ...\n"
+ " public boolean equals(Object other) {\n"
+ " if (this == other) return true;\n"
+ " if ( !(other instanceof Cat) ) return false;\n"
+ "\n"
+ " final Cat cat = (Cat) other;\n"
+ "\n"
+ " if ( !cat.getLitterId().equals( getLitterId() ) ) return false;\n"
+ " if ( !cat.getMother().equals( getMother() ) ) return false;\n"
+ "\n"
+ " return true;\n"
+ " }\n"
+ "\n"
+ " public int hashCode() {\n"
+ " int result;\n"
+ " result = getMother().hashCode();\n"
+ " result = 29 * result + getLitterId();\n"
+ " return result;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Cat {
+\n"
+ "
+\n"
+ " ...
+\n"
+ " public boolean equals(Object other) {
+\n"
+ " if (this == other) return true;
+\n"
+ " if ( !(other instanceof Cat) ) return false;
+\n"
+ "
+\n"
+ " final Cat cat = (Cat) other;
+\n"
+ "
+\n"
+ " if ( !cat.getLitterId().equals( getLitterId() ) ) return false;
+\n"
+ " if ( !cat.getMother().equals( getMother() ) ) return false;
+\n"
+ "
+\n"
+ " return true;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public int hashCode() {
+\n"
+ " int result;
+\n"
+ " result = getMother().hashCode();
+\n"
+ " result = 29 * result + getLitterId();
+\n"
+ " return result;
+\n"
+ " }
+\n"
+ "
+\n"
+ "}]]>"
+
+#: index.docbook:202
+msgid "Note that a business key does not have to be as solid as a database primary key candidate (see <xref linkend=\"transactions-basics-identity\"/>). Immutable or unique properties are usually good candidates for a business key."
+msgstr "ãã¸ãã¹ãã¼ã¯ãã¼ã¿ãã¼ã¹ã®ä¸»ãã¼åè£ã»ã©å®å®ã§ããå¿
è¦ã¯ãªããã¨ã«æ³¨æãã¦ãã ãã ï¼<xref linkend=\"transactions-basics-identity\"/> ãè¦ã¦ãã ããï¼ã æ´æ°ä¸å¯ãªããããã£ãã¦ãã¼ã¯ãªããããã£ã¯ãé常ãã¸ãã¹ãã¼ã®ããåè£ã§ãã"
+
+#: index.docbook:212
+msgid "Dynamic models"
+msgstr "åçã¢ãã«"
+
+#: index.docbook:215
+msgid "Note that the following features are currently considered experimental and may change in the near future."
+msgstr "以ä¸ã®æ©è½ã¯ç¾å¨å®é¨æ®µéã«ããã¨è¦ãªããã¦ããã è¿ãå°æ¥å¤æ´ãããå¯è½æ§ããããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:219
+msgid "Persistent entities don't necessarily have to be represented as POJO classes or as JavaBean objects at runtime. Hibernate also supports dynamic models (using <literal>Map</literal>s of <literal>Map</literal>s at runtime) and the representation of entities as DOM4J trees. With this approach, you don't write persistent classes, only mapping files."
+msgstr "æ°¸ç¶ã¨ã³ãã£ãã£ã¯ãå¿
ãããå®è¡æã«POJOã¯ã©ã¹ãJavaBeanãªãã¸ã§ã¯ãã§è¡¨ç¾ããå¿
è¦ã¯ããã¾ããã Hibernateã¯ï¼å®è¡æã« <literal>Map</literal> ã® <literal>Map</literal> ã使ãï¼åçã¢ãã«ã¨ã DOM4Jããªã¼ã¨ãã¦ã®ã¨ã³ãã£ãã£ã®è¡¨ç¾ããµãã¼ããã¾ãã ãã®ã¢ããã¼ãã使ãã¨æ°¸ç¶ã¯ã©ã¹ãæ¸ããããããã³ã°ãã¡ã¤ã«ã ããæ¸ããã¨ã«ãªãã¾ãã"
+
+#: index.docbook:227
+msgid "By default, Hibernate works in normal POJO mode. You may set a default entity representation mode for a particular <literal>SessionFactory</literal> using the <literal>default_entity_mode</literal> configuration option (see <xref linkend=\"configuration-optional-properties\"/>."
+msgstr "ããã©ã«ãã§ã¯ãHibernateã¯é常ã®POJOã¢ã¼ãã§åä½ãã¾ãã <literal>default_entity_mode</literal> è¨å®ãªãã·ã§ã³ã使ã£ã¦ã ç¹å®ã® <literal>SessionFactory</literal> ã«å¯¾ããããã©ã«ãã®ã¨ã³ãã£ãã£è¡¨ç¾ã¢ã¼ããè¨å®ãããã¨ãã§ãã¾ã ï¼<xref linkend=\"configuration-optional-properties\"/> ãè¦ã¦ãã ããï¼ã"
+
+#: index.docbook:234
+msgid "The following examples demonstrates the representation using <literal>Map</literal>s. First, in the mapping file, an <literal>entity-name</literal> has to be declared instead of (or in addition to) a class name:"
+msgstr "以ä¸ã®ä¾ã§ã¯ <literal>Map</literal> ã使ã£ã表ç¾ãç´¹ä»ãã¾ãã ã¾ããããã³ã°ãã¡ã¤ã«ã§ãã¯ã©ã¹åã®ä»£ããã«ï¼ã¾ãã¯ããã«å ãã¦ï¼ <literal>entity-name</literal> ãå®ç¾©ããªããã°ãªãã¾ããï¼"
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class entity-name=\"Customer\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " type=\"long\"\n"
+ " column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <property name=\"address\"\n"
+ " column=\"ADDRESS\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <many-to-one name=\"organization\"\n"
+ " column=\"ORGANIZATION_ID\"\n"
+ " class=\"Organization\"/>\n"
+ "\n"
+ " <bag name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " lazy=\"false\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"CUSTOMER_ID\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ " \n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ "
+\n"
+ " <class entity-name=\"Customer\">
+\n"
+ "
+\n"
+ " <id name=\"id\"
+\n"
+ " type=\"long\"
+\n"
+ " column=\"ID\">
+\n"
+ " <generator class=\"sequence\"/>
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <property name=\"name\"
+\n"
+ " column=\"NAME\"
+\n"
+ " type=\"string\"/>
+\n"
+ "
+\n"
+ " <property name=\"address\"
+\n"
+ " column=\"ADDRESS\"
+\n"
+ " type=\"string\"/>
+\n"
+ "
+\n"
+ " <many-to-one name=\"organization\"
+\n"
+ " column=\"ORGANIZATION_ID\"
+\n"
+ " class=\"Organization\"/>
+\n"
+ "
+\n"
+ " <bag name=\"orders\"
+\n"
+ " inverse=\"true\"
+\n"
+ " lazy=\"false\"
+\n"
+ " cascade=\"all\">
+\n"
+ " <key column=\"CUSTOMER_ID\"/>
+\n"
+ " <one-to-many class=\"Order\"/>
+\n"
+ " </bag>
+\n"
+ "
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:242
+msgid "Note that even though associations are declared using target class names, the target type of an associations may also be a dynamic entity instead of a POJO."
+msgstr "é¢é£ãã¿ã¼ã²ããã®ã¯ã©ã¹åã使ã£ã¦å®ç¾©ãã¦ããã¨ãã¦ãã é¢é£ã®ã¿ã¼ã²ããåãPOJOã§ã¯ãªãåçãªã¨ã³ãã£ãã£ã§ãæ§ããªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:249
+msgid "After setting the default entity mode to <literal>dynamic-map</literal> for the <literal>SessionFactory</literal>, we can at runtime work with <literal>Map</literal>s of <literal>Map</literal>s:"
+msgstr "<literal>SessionFactory</literal> ã«å¯¾ãã¦ããã©ã«ãã®ã¨ã³ãã£ãã£ã¢ã¼ãã <literal>dynamic-map</literal> ã«è¨å®ããå¾ã å®è¡æã« <literal>Map</literal> ã® <literal>Map</literal> ã使ããã¨ãã§ãã¾ãï¼"
+
+#: index.docbook:255
+msgid ""
+ "<![CDATA[Session s = openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ "Session s = openSession();\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "\n"
+ "// Create an organization\n"
+ "Map foobar = new HashMap();\n"
+ "foobar.put(\"name\", \"Foobar Inc.\");\n"
+ "\n"
+ "// Link both\n"
+ "david.put(\"organization\", foobar);\n"
+ "\n"
+ "// Save both\n"
+ "s.save(\"Customer\", david);\n"
+ "s.save(\"Organization\", foobar);\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();]]>"
+msgstr ""
+ "<![CDATA[Session s = openSession();
+\n"
+ "Transaction tx = s.beginTransaction();
+\n"
+ "Session s = openSession();
+\n"
+ "
+\n"
+ "// Create a customer
+\n"
+ "Map david = new HashMap();
+\n"
+ "david.put(\"name\", \"David\");
+\n"
+ "
+\n"
+ "// Create an organization
+\n"
+ "Map foobar = new HashMap();
+\n"
+ "foobar.put(\"name\", \"Foobar Inc.\");
+\n"
+ "
+\n"
+ "// Link both
+\n"
+ "david.put(\"organization\", foobar);
+\n"
+ "
+\n"
+ "// Save both
+\n"
+ "s.save(\"Customer\", david);
+\n"
+ "s.save(\"Organization\", foobar);
+\n"
+ "
+\n"
+ "tx.commit();
+\n"
+ "s.close();]]>"
+
+#: index.docbook:257
+msgid "The advantages of a dynamic mapping are quick turnaround time for prototyping without the need for entity class implementation. However, you lose compile-time type checking and will very likely deal with many exceptions at runtime. Thanks to the Hibernate mapping, the database schema can easily be normalized and sound, allowing to add a proper domain model implementation on top later on."
+msgstr "åçãªãããã³ã°ã®å©ç¹ã¯ãã¨ã³ãã£ãã£ã¯ã©ã¹ã®å®è£
ãå¿
è¦ã¨ããªãããã ãããã¿ã¤ãã³ã°ã«è¦ããã¿ã¼ã³ã¢ã©ã¦ã³ãã¿ã¤ã ãæ©ãã¨ãããã¨ã§ãã ãããã³ã³ãã¤ã«æã®åãã§ãã¯ããªãã®ã§ãå®è¡æã«é常ã«å¤ãã®ä¾å¤å¦çãæ±ããªããã°ãªããªãã§ãããã Hibernateãããã³ã°ã®ãããã§ããã¼ã¿ãã¼ã¹ã¹ãã¼ãã¯å®¹æã«æ£è¦åã§ããå¥å
¨ã«ãªãã å¾ã§é©åãªãã¡ã¤ã³ã¢ãã«ã®å®è£
ã追å ãããã¨ãå¯è½ã«ãªãã¾ãã"
+
+#: index.docbook:265
+msgid "Entity representation modes can also be set on a per <literal>Session</literal> basis:"
+msgstr "ã¨ã³ãã£ãã£è¡¨ç¾ã¢ã¼ã㯠<literal>Session</literal> ãã¨ã«è¨å®ãããã¨ãå¯è½ã§ãã"
+
+#: index.docbook:270
+msgid ""
+ "<![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "dynamicSession.save(\"Customer\", david);\n"
+ "...\n"
+ "dynamicSession.flush();\n"
+ "dynamicSession.close()\n"
+ "...\n"
+ "// Continue on pojoSession\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);
+\n"
+ "
+\n"
+ "// Create a customer
+\n"
+ "Map david = new HashMap();
+\n"
+ "david.put(\"name\", \"David\");
+\n"
+ "dynamicSession.save(\"Customer\", david);
+\n"
+ "...
+\n"
+ "dynamicSession.flush();
+\n"
+ "dynamicSession.close()
+\n"
+ "...
+\n"
+ "// Continue on pojoSession
+\n"
+ "]]>"
+
+#: index.docbook:273
+msgid "Please note that the call to <literal>getSession()</literal> using an <literal>EntityMode</literal> is on the <literal>Session</literal> API, not the <literal>SessionFactory</literal>. That way, the new <literal>Session</literal> shares the underlying JDBC connection, transaction, and other context information. This means you don't have tocall <literal>flush()</literal> and <literal>close()</literal> on the secondary <literal>Session</literal>, and also leave the transaction and connection handling to the primary unit of work."
+msgstr "<literal>EntityMode</literal> ã使ã£ã <literal>getSession()</literal> ã®å¼ã³åºã㯠<literal>SessionFactory</literal> ã§ã¯ãªã <literal>Session</literal> APIã«ãããã¨ã«æ³¨æãã¦ãã ããã ãã®æ¹æ³ã§ã¯ãæ°ãã <literal>Session</literal> ã¯ããã¼ã¹ã¨ãªãJDBCã³ãã¯ã·ã§ã³ã ãã©ã³ã¶ã¯ã·ã§ã³ããã®ä»ã®ã³ã³ããã¹ãæ
å ±ãå
±æãã¾ãã ããã¯2çªç®ã® <literal>Session</literal> ã§ã¯ <literal>flush()</literal> 㨠<literal>close()</literal> ãå¼ã¶å¿
è¦ããªãã¨ãããã¨ããã®ãããã©ã³ã¶ã¯ã·ã§ã³ã¨ã³ãã¯ã·ã§ã³ã®ç®¡çã 1çªç®ã®ä½æ¥åä½(Unit of Work)ã«ä»»ãããã¨ãã§ããã¨ãããã¨ã§ãã"
+
+#: index.docbook:283
+msgid "More information about the XML representation capabilities can be found in <xref linkend=\"xml\"/>."
+msgstr "XML表ç¾ã®è½åã«ã¤ãã¦ã®ãããªãæ
å ±ã¯ <xref linkend=\"xml\"/> ã§è¦ã¤ããã¾ãã"
+
+#: index.docbook:291
+msgid "Tuplizers"
+msgstr "Tuplizer"
+
+#: index.docbook:293
+msgid "<literal>org.hibernate.tuple.Tuplizer</literal>, and its sub-interfaces, are responsible for managing a particular representation of a piece of data, given that representation's <literal>org.hibernate.EntityMode</literal>. If a given piece of data is thought of as a data structure, then a tuplizer is the thing which knows how to create such a data structure and how to extract values from and inject values into such a data structure. For example, for the POJO entity mode, the correpsonding tuplizer knows how create the POJO through its constructor and how to access the POJO properties using the defined property accessors. There are two high-level types of Tuplizers, represented by the <literal>org.hibernate.tuple.entity.EntityTuplizer</literal> and <literal>org.hibernate.tuple.component.ComponentTuplizer</literal> interfaces. <literal>EntityTuplizer</literal>s are responsible for managing the above mentioned contracts in regards to entities, while <literal>ComponentTu!
plizer</literal>s do the same for components."
+msgstr "<literal>org.hibernate.tuple.Tuplizer</literal> ã¨ãã®ãµãã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ã 表ç¾ã® <literal>org.hibernate.EntityMode</literal> ãå©ç¨ãã¦ã ãã¼ã¿æçã®ãã表ç¾ã®ç®¡çã«è²¬ä»»ãæã¡ã¾ãã ä¸ãããããã¼ã¿æçããã¼ã¿æ§é ã¨ãã¦èãããªããTuplizerã¯ãã®ãããªãã¼ã¿æ§é ã ã©ã®ããã«ä½æããããç¥ãããã®ãããªãã¼ã¿æ§é ããã©ã®ããã«å¤ãæ½åºãã 注å
¥ããããç¥ã£ã¦ãã¾ãã ä¾ãã°POJOã¨ã³ãã£ãã£ã¢ã¼ãã§ã¯ã対å¿ããTuplizerã¯ã³ã³ã¹ãã©ã¯ã¿ãéãã¦ã POJOãã©ã®ããã«ä½æããããå®ç¾©ãããããããã£ã¢ã¯ã»ãµã使ãã POJOããããã£ã«ã©ã®ããã«ã¢ã¯ã»ã¹ããããç¥ãã¾ãã Tuplizerã«ã¯äºã¤ã®ãã¤ã¬ãã«ã®åãããã¾ãã ãããã¯ã<literal>org.hibernate.tuple.EntityTuplizer</literal> 㨠<literal>org.hibernate.tuple.ComponentTuplizer</literal> !
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã§è¡¨ç¾ããã¾ãã <literal>EntityTuplizer</literal> ã¯ä¸ã§è¿°ã¹ããããªã¨ã³ãã£ãã£ã«é¢ããå¥ç´ã®ç®¡çã«è²¬ä»»ãæã¡ã¾ãã ä¸æ¹ã<literal>ComponentTuplizer</literal> ã¯ã³ã³ãã¼ãã³ãã«é¢ããå¥ç´ã®ç®¡çã«è²¬ä»»ãæã¡ã¾ãã"
+
+#: index.docbook:308
+msgid "Users may also plug in their own tuplizers. Perhaps you require that a <literal>java.util.Map</literal> implementation other than <literal>java.util.HashMap</literal> be used while in the dynamic-map entity-mode; or perhaps you need to define a different proxy generation strategy than the one used by default. Both would be achieved by defining a custom tuplizer implementation. Tuplizers definitions are attached to the entity or component mapping they are meant to manage. Going back to the example of our customer entity:"
+msgstr "ã¦ã¼ã¶ã¯ç¬èªã®Tuplizerã«å·®ãæ¿ãããã¨ãå¯è½ã§ãã ããããdynamic-map entity-modeã®éã« <literal>java.util.HashMap</literal> ã使ãã®ã§ã¯ãªãã <literal>java.util.Map</literal> ã®å®è£
ãå¿
è¦ã§ãããã ãããã¯ãããããããã©ã«ãã®ãã®ã§ã¯ãªããå¥ã®ãããã·çææ¦ç¥ã®å®ç¾©ãå¿
è¦ã§ãããã 両è
ã¨ããã«ã¹ã¿ã ã®Tuplizerå®è£
ãå®ç¾©ãããã¨ã§éæããã¾ãã Tuplizerã®å®ç¾©ã¯ã管çãããã¨ããã¨ã³ãã£ãã£ãã³ã³ãã¼ãã³ãã®ãããã³ã°ã«çµã³ä»ãããã¾ãã 顧客ã¨ã³ãã£ãã£ã®ä¾ã«æ»ãã¨ï¼"
+
+#: index.docbook:317
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " <class entity-name=\"Customer\">\n"
+ " <!--\n"
+ " Override the dynamic-map entity-mode\n"
+ " tuplizer for the customer entity\n"
+ " -->\n"
+ " <tuplizer entity-mode=\"dynamic-map\"\n"
+ " class=\"CustomMapTuplizerImpl\"/>\n"
+ "\n"
+ " <id name=\"id\" type=\"long\" column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <!-- other properties -->\n"
+ " ...\n"
+ " </class>\n"
+ "</hibernate-mapping>\n"
+ "\n"
+ "\n"
+ "public class CustomMapTuplizerImpl\n"
+ " extends org.hibernate.tuple.entity.DynamicMapEntityTuplizer {\n"
+ " // override the buildInstantiator() method to plug in our custom map...\n"
+ " protected final Instantiator buildInstantiator(\n"
+ " org.hibernate.mapping.PersistentClass mappingInfo) {\n"
+ " return new CustomMapInstantiator( mappingInfo );\n"
+ " }\n"
+ "\n"
+ " private static final class CustomMapInstantiator\n"
+ " extends org.hibernate.tuple.DynamicMapInstantitor {\n"
+ " // override the generateMap() method to return our custom map...\n"
+ " protected final Map generateMap() {\n"
+ " return new CustomMap();\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ " <class entity-name=\"Customer\">
+\n"
+ " <!--
+\n"
+ " Override the dynamic-map entity-mode
+\n"
+ " tuplizer for the customer entity
+\n"
+ " -->
+\n"
+ " <tuplizer entity-mode=\"dynamic-map\"
+\n"
+ " class=\"CustomMapTuplizerImpl\"/>
+\n"
+ "
+\n"
+ " <id name=\"id\" type=\"long\" column=\"ID\">
+\n"
+ " <generator class=\"sequence\"/>
+\n"
+ " </id>
+\n"
+ "
+\n"
+ " <!-- other properties -->
+\n"
+ " ...
+\n"
+ " </class>
+\n"
+ "</hibernate-mapping>
+\n"
+ "
+\n"
+ "
+\n"
+ "public class CustomMapTuplizerImpl
+\n"
+ " extends org.hibernate.tuple.entity.DynamicMapEntityTuplizer {
+\n"
+ " // override the buildInstantiator() method to plug in our custom map...
+\n"
+ " protected final Instantiator buildInstantiator(
+\n"
+ " org.hibernate.mapping.PersistentClass mappingInfo) {
+\n"
+ " return new CustomMapInstantiator( mappingInfo );
+\n"
+ " }
+\n"
+ "
+\n"
+ " private static final class CustomMapInstantiator
+\n"
+ " extends org.hibernate.tuple.DynamicMapInstantitor {
+\n"
+ " // override the generateMap() method to return our custom map...
+\n"
+ " protected final Map generateMap() {
+\n"
+ " return new CustomMap();
+\n"
+ " }
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:322
+msgid "TODO: Document user-extension framework in the property and proxy packages"
+msgstr "TODO: ããããã£ã¨ãããã·ããã±ã¼ã¸ã®ã¦ã¼ã¶æ¡å¼µãã¬ã¼ã ã¯ã¼ã¯ãææ¸åãããã¨"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/preface.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/preface.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/preface.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,68 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Preface"
+msgstr "<title>åæ¸ã</title>"
+
+#: index.docbook:23
+msgid "Working with object-oriented software and a relational database can be cumbersome and time consuming in today's enterprise environments. Hibernate is an object/relational mapping tool for Java environments. The term object/relational mapping (ORM) refers to the technique of mapping a data representation from an object model to a relational data model with a SQL-based schema."
+msgstr "ä»æ¥ã®ä¼æ¥ç°å¢ã«ããã¦ããªãã¸ã§ã¯ãæåã½ããã¦ã§ã¢ã¨ãªã¬ã¼ã·ã§ãã«ãã¼ã¿ãã¼ã¹ã«é¢ããä½æ¥ã¯ ç
©éã§è¨å¤§ãªæéãå¿
è¦ã¨ãã¾ãã Hibernateã¯Javaç°å¢ã®ãªãã¸ã§ã¯ã/ãªã¬ã¼ã·ã§ãã«ãããã³ã°ãã¼ã«ã§ãã ãªãã¸ã§ã¯ã/ãªã¬ã¼ã·ã§ãã«ãããã³ã°ï¼ORMï¼ã¨ã¯ã ãªãã¸ã§ã¯ãã¢ãã«ããSQLãã¼ã¹ã¹ãã¼ãã®ãªã¬ã¼ã·ã§ãã«ãã¼ã¿ã¢ãã«ã¸ã¨ã ãã¼ã¿è¡¨ç¾ããããã³ã°ããï¼å¯¾å¿ä»ããï¼æè¡ã®ãã¨ã§ãã"
+
+#: index.docbook:31
+msgid "Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities and can significantly reduce development time otherwise spent with manual data handling in SQL and JDBC."
+msgstr "Hibernateã¯Javaã¯ã©ã¹ãããã¼ã¿ãã¼ã¹ãã¼ãã«ã¸ï¼ããã¦Javaãã¼ã¿åããSQLãã¼ã¿åã¸ï¼ ã®ãããã³ã°ãå¦çããã ãã§ã¯ãªãããã¼ã¿ã®ã¯ã¨ãªã¨å¾©å
ã®ä»çµã¿ãæä¾ãã¾ãã ãã®ãããã§SQLã¨JDBCã使ã£ãæä½æ¥ã§ã®ãã¼ã¿å¦çã«è²»ãããã¦ããéçºæéã大å¹
ã«åæ¸ã§ãã¾ãã"
+
+#: index.docbook:38
+msgid "Hibernates goal is to relieve the developer from 95 percent of common data persistence related programming tasks. Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate vendor-specific SQL code and will help with the common task of result set translation from a tabular representation to a graph of objects."
+msgstr "Hibernateã®æçµç®æ¨ã¯ããã¼ã¿ã®æ°¸ç¶åã«é¢ããä¸è¬çãªããã°ã©ãã³ã°ä½æ¥ã®95ï¼
ããéçºè
ã解æ¾ãããã¨ã§ãã Hibernateã¯ãã¸ãã¹ãã¸ãã¯ã®å®è£
ã«ã¹ãã¢ãããã·ã¼ã¸ã£ã使ã ãã¼ã¿ä¸å¿ã¢ããªã±ã¼ã·ã§ã³ã«å¯¾ãã¦ã®ãã¹ãã½ãªã¥ã¼ã·ã§ã³ã§ããã«çã¾ãã¾ããã ãªãã¸ã§ã¯ãæåãã¡ã¤ã³ã¢ãã«ã¨Javaãã¼ã¹ã®ä¸é層ã§ã®ãã¸ãã¹ãã¸ãã¯ã«å¯¾ãã¦æãå½¹ã«ç«ã¡ã¾ãã ãããHibernateã¯ãã³ãåºæã®SQLã³ã¼ããåæ¸ã¾ãã¯ã«ãã»ã«åãããã 表形å¼ãããªãã¸ã§ã¯ãã®ã°ã©ãã¸ã¨ãªã¶ã«ãã»ãããå¤æãããªã©ã®ã ä¸è¬çãªã¿ã¹ã¯ã«ãå½¹ç«ã¤ã§ãããã"
+
+#: index.docbook:48
+msgid "If you are new to Hibernate and Object/Relational Mapping or even Java, please follow these steps:"
+msgstr "Hibernateããªãã¸ã§ã¯ã/ãªã¬ã¼ã·ã§ãã«ãããã³ã°ã ããã«ã¯Javaãåãã¦ã®æ¹ã¯ã以ä¸ã®ã¹ãããã«å¾ã£ã¦ãã ããï¼"
+
+#: index.docbook:55
+msgid "Read <xref linkend=\"tutorial\"/> for a tutorial with step-by-step instructions. The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr "ãèªãã§ãã ããã 段éçã«è§£èª¬ãã¦ããã¾ãã ãã¥ã¼ããªã¢ã«ã®ã½ã¼ã¹ã³ã¼ãã¯ãã£ã¹ããªãã¥ã¼ã·ã§ã³ã® <literal>doc/reference/tutorial</literal> ãã£ã¬ã¯ããªã«å«ã¾ãã¦ãã¾ãã"
+
+#: index.docbook:63
+msgid "Read <xref linkend=\"architecture\"/> to understand the environments where Hibernate can be used."
+msgstr "ãèªãã§ãHibernateãå©ç¨å¯è½ãªç°å¢ãç解ãã¦ãã ããã"
+
+#: index.docbook:69
+msgid "Have a look at the <literal>eg/</literal> directory in the Hibernate distribution, it contains a simple standalone application. Copy your JDBC driver to the <literal>lib/</literal> directory and edit <literal>etc/hibernate.properties</literal>, specifying correct values for your database. From a command prompt in the distribution directory, type <literal>ant eg</literal> (using Ant), or under Windows, type <literal>build eg</literal>."
+msgstr "Hibernateãã£ã¹ããªãã¥ã¼ã·ã§ã³ã® <literal>eg/</literal> ãã£ã¬ã¯ããªãè¦ã¦ãã ããã ç°¡åãªã¹ã¿ã³ãã¢ãã¼ã³ã®ã¢ããªã±ã¼ã·ã§ã³ãããã¾ãã JDBCãã©ã¤ãã <literal>lib/</literal> ãã£ã¬ã¯ããªã«ã³ãã¼ãã¦ã èªåã®ãã¼ã¿ãã¼ã¹ã«åãæ£ããå¤ãæå®ããããã« <literal>etc/hibernate.properties</literal> ãç·¨éãã¦ãã ããã ãã£ã¹ããªãã¥ã¼ã·ã§ã³ãã£ã¬ã¯ããªãããã³ãã³ãããã³ãã㧠<literal>ant eg</literal> ã¨ã¿ã¤ããã¦ãã ããï¼Antã使ãã¾ãï¼ã ã¾ãWindowsç°å¢ã§ã¯ <literal>build eg</literal> ã¨ã¿ã¤ããã¦ãã ããã"
+
+#: index.docbook:80
+msgid "Use this reference documentation as your primary source of information. Consider reading <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2) if you need more help with application design or if you prefer a step-by-step tutorial. Also visit http://caveatemptor.hibernate.org and download the example application for Java Persistence with Hibernate."
+msgstr "ãã®ãªãã¡ã¬ã³ã¹ããã¥ã¡ã³ãã第ä¸ã®æ
å ±æºã¨ãã¦å©ç¨ãã¦ãã ããã ã¢ããªã±ã¼ã·ã§ã³è¨è¨ã«ã¤ãã¦ã®ãããªãæ
å ±ã段éçãªãã¥ã¼ããªã¢ã«ãæ¢ãã¦ãããªãã <emphasis>Java Persistence with Hibernate</emphasis>ï¼http://www.manning.com/bauer2ï¼ ããããããã¾ãã ã¾ãhttp://caveatemptor.hibernate.orgãã Java Persistence with Hibernateã®ä¾é¡ã®ã¢ããªã±ã¼ã·ã§ã³ããã¦ã³ãã¼ãã§ãã¾ãã"
+
+#: index.docbook:90
+msgid "FAQs are answered on the Hibernate website."
+msgstr "FAQã¯Hibernateã¦ã§ããµã¤ãã«ããã¾ãã"
+
+#: index.docbook:95
+msgid "Third party demos, examples, and tutorials are linked on the Hibernate website."
+msgstr "ãµã¼ããã¼ãã£ã®ãã¢ãä¾ããã¥ã¼ããªã¢ã«ã¯Hibernateã¦ã§ããµã¤ãã«ãªã³ã¯ãããã¾ãã"
+
+#: index.docbook:101
+msgid "The Community Area on the Hibernate website is a good resource for design patterns and various integration solutions (Tomcat, JBoss AS, Struts, EJB, etc.)."
+msgstr "Hibernateã¦ã§ããµã¤ãã®ã³ãã¥ããã£ã¨ãªã¢ã¯ããã¶ã¤ã³ãã¿ã¼ã³ããã¾ãã¾ãªçµ±åã½ãªã¥ã¼ã·ã§ã³ ï¼Tomcat, JBoss AS, Struts, EJB, çï¼ã«ã¤ãã¦ã®ããæ
å ±æºã§ãã"
+
+#: index.docbook:109
+msgid "If you have questions, use the user forum linked on the Hibernate website. We also provide a JIRA issue trackings system for bug reports and feature requests. If you are interested in the development of Hibernate, join the developer mailing list. If you are interested in translating this documentation into your language, contact us on the developer mailing list."
+msgstr "質åãããã°Hibernateã¦ã§ããµã¤ãã®ã¦ã¼ã¶ãã©ã¼ã©ã ãæ´»ç¨ãã¦ãã ããã ã¾ããã°ã¬ãã¼ãã¨ãã£ã¼ãã£ãªã¯ã¨ã¹ãã®ããJIRA課é¡è¿½è·¡ã·ã¹ãã ãç¨æãã¦ãã¾ãã Hibernateã®éçºã«èå³ãããã°ãéçºè
ã¡ã¼ãªã³ã°ãªã¹ãã«åå ãã¦ãã ããã ãã®ããã¥ã¡ã³ããããªãã®å½ã®è¨èã«ç¿»è¨³ãããå ´åã¯ã éçºè
ã¡ã¼ãªã³ã°ãªã¹ãã§ç§ãã¡ã«ã³ã³ã¿ã¯ããåã£ã¦ãã ããã"
+
+#: index.docbook:117
+msgid "Commercial development support, production support, and training for Hibernate is available through JBoss Inc. (see http://www.hibernate.org/SupportTraining/). Hibernate is a Professional Open Source project and a critical component of the JBoss Enterprise Middleware System (JEMS) suite of products."
+msgstr "åç¨éçºã®ãµãã¼ãã製åã®ãµãã¼ããHibernateã®ãã¬ã¼ãã³ã°ã¯JBoss Inc.ãæä¾ãã¦ãã¾ã ï¼http://www.hibernate.org/SupportTraining/ãè¦ã¦ãã ããï¼ã Hibernateã¯Professional Open Sourceããã¸ã§ã¯ãã ããã¦JBoss Enterprise Middleware Systemï¼JEMSï¼ãããã¯ãã¹ã¤ã¼ãã®ã¯ãªãã£ã«ã«ã³ã³ãã¼ãã³ãã§ãã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/query_criteria.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/query_criteria.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/query_criteria.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,672 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Criteria Queries"
+msgstr "Criteriaã¯ã¨ãª"
+
+#: index.docbook:7
+msgid "Hibernate features an intuitive, extensible criteria query API."
+msgstr "Hibernateã«ã¯ãç´æçã§æ¡å¼µå¯è½ãªcriteriaã¯ã¨ãªAPIãç¨æããã¦ãã¾ãã"
+
+#: index.docbook:12
+msgid "Creating a <literal>Criteria</literal> instance"
+msgstr "<literal>Criteria</literal> ã¤ã³ã¹ã¿ã³ã¹ã®ä½æ"
+
+#: index.docbook:14
+msgid "The interface <literal>org.hibernate.Criteria</literal> represents a query against a particular persistent class. The <literal>Session</literal> is a factory for <literal>Criteria</literal> instances."
+msgstr "<literal>org.hibernate.Criteria</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ç¹å®ã®æ°¸ç¶æ§ã¯ã©ã¹ã«å¯¾ããã¯ã¨ãªã表ç¾ãã¾ãã <literal>Session</literal> 㯠<literal>Criteria</literal> ã¤ã³ã¹ã¿ã³ã¹ã®ãã¡ã¯ããªã§ãã"
+
+#: index.docbook:20
+msgid ""
+ "<![CDATA[Criteria crit = sess.createCriteria(Cat.class);\n"
+ "crit.setMaxResults(50);\n"
+ "List cats = crit.list();]]>"
+msgstr ""
+ "<![CDATA[Criteria crit = sess.createCriteria(Cat.class);\n"
+ "crit.setMaxResults(50);\n"
+ "List cats = crit.list();]]>"
+
+#: index.docbook:25
+msgid "Narrowing the result set"
+msgstr "ãªã¶ã«ãã»ããã®çµè¾¼ã¿"
+
+#: index.docbook:27
+msgid "An individual query criterion is an instance of the interface <literal>org.hibernate.criterion.Criterion</literal>. The class <literal>org.hibernate.criterion.Restrictions</literal> defines factory methods for obtaining certain built-in <literal>Criterion</literal> types."
+msgstr "<literal>org.hibernate.criterion.Criterion</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ã åå¥ã®ã¯ã¨ãªã¯ã©ã¤ããªãªã³ï¼åãåããã®å¤å®åºæºï¼ã表ãã¾ãã <literal>org.hibernate.criterion.Restrictions</literal> ã¯ã©ã¹ã¯ãããçµã¿è¾¼ã¿ã® <literal>Criterion</literal> åãåå¾ããããã®ãã¡ã¯ããªã¡ã½ãããæã£ã¦ãã¾ãã"
+
+#: index.docbook:35
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.between(\"weight\", minWeight, maxWeight) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.between(\"weight\", minWeight, maxWeight) )\n"
+ " .list();]]>"
+
+#: index.docbook:37
+msgid "Restrictions may be grouped logically."
+msgstr "Restrictionï¼éå®ï¼ã¯ãè«ççã«ã°ã«ã¼ãåã§ãã¾ãã"
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.or(\n"
+ " Restrictions.eq( \"age\", new Integer(0) ),\n"
+ " Restrictions.isNull(\"age\")\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.or(\n"
+ " Restrictions.eq( \"age\", new Integer(0) ),\n"
+ " Restrictions.isNull(\"age\")\n"
+ " ) )\n"
+ " .list();]]>"
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.in( \"name\", new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( Restrictions.isNull(\"age\") )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(0) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(1) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(2) ) )\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.in( \"name\", new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( Restrictions.isNull(\"age\") )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(0) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(1) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(2) ) )\n"
+ " ) )\n"
+ " .list();]]>"
+
+#: index.docbook:45
+msgid "There are quite a range of built-in criterion types (<literal>Restrictions</literal> subclasses), but one that is especially useful lets you specify SQL directly."
+msgstr "å
ã
ããCriterionåï¼<literal>Restrictions</literal> ã®ãµãã¯ã©ã¹ï¼ ã¯ããªãã®ç¯å²ã«åã³ã¾ãããç¹ã«æç¨ãªã®ã¯SQLãç´æ¥æå®ã§ãããã®ã§ãã"
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.sqlRestriction(\"lower({alias}.name) like lower(?)\", \"Fritz%\", Hibernate.STRING) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.sqlRestriction(\"lower({alias}.name) like lower(?)\", \"Fritz%\", Hibernate.STRING) )\n"
+ " .list();]]>"
+
+#: index.docbook:52
+msgid "The <literal>{alias}</literal> placeholder with be replaced by the row alias of the queried entity."
+msgstr "<literal>{alias}</literal> ã¨ãããã¬ã¼ã¹ãã«ãã¯ã åãåãããåããã¨ã³ãã£ãã£ã®è¡ã®å¥åã«ãã£ã¦ç½®ãæãããã¾ãã"
+
+#: index.docbook:57
+msgid "An alternative approach to obtaining a criterion is to get it from a <literal>Property</literal> instance. You can create a <literal>Property</literal> by calling <literal>Property.forName()</literal>."
+msgstr "criterionãå¾ãå¥ã®æ段ã¯ã <literal>Property</literal> ã¤ã³ã¹ã¿ã³ã¹ããåå¾ãããã¨ã§ãã <literal>Property.forName()</literal> ãå¼ã³åºãã¦ã <literal>Property</literal> ã¤ã³ã¹ã¿ã³ã¹ãä½æã§ãã¾ãã"
+
+#: index.docbook:63
+msgid ""
+ "<![CDATA[\n"
+ "Property age = Property.forName(\"age\");\n"
+ "List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( age.isNull() )\n"
+ " .add( age.eq( new Integer(0) ) )\n"
+ " .add( age.eq( new Integer(1) ) )\n"
+ " .add( age.eq( new Integer(2) ) )\n"
+ " ) )\n"
+ " .add( Property.forName(\"name\").in( new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "Property age = Property.forName(\"age\");\n"
+ "List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( age.isNull() )\n"
+ " .add( age.eq( new Integer(0) ) )\n"
+ " .add( age.eq( new Integer(1) ) )\n"
+ " .add( age.eq( new Integer(2) ) )\n"
+ " ) )\n"
+ " .add( Property.forName(\"name\").in( new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .list();]]>"
+
+#: index.docbook:68
+msgid "Ordering the results"
+msgstr "çµæã®æ´å"
+
+#: index.docbook:70
+msgid "You may order the results using <literal>org.hibernate.criterion.Order</literal>."
+msgstr "<literal>org.hibernate.criterion.Order</literal> ã使ã£ã¦çµæã並ã³æ¿ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .addOrder( Order.asc(\"name\") )\n"
+ " .addOrder( Order.desc(\"age\") )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .addOrder( Order.asc(\"name\") )\n"
+ " .addOrder( Order.desc(\"age\") )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"name\").like(\"F%\") )\n"
+ " .addOrder( Property.forName(\"name\").asc() )\n"
+ " .addOrder( Property.forName(\"age\").desc() )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"name\").like(\"F%\") )\n"
+ " .addOrder( Property.forName(\"name\").asc() )\n"
+ " .addOrder( Property.forName(\"age\").desc() )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:81
+msgid "Associations"
+msgstr "<title>é¢é£</title>"
+
+#: index.docbook:83
+msgid "You may easily specify constraints upon related entities by navigating associations using <literal>createCriteria()</literal>."
+msgstr "<literal>createCriteria()</literal> ã使ããé¢é£ãããã²ã¼ããããã¨ã§ã 容æã«é¢ä¿ããã¨ã³ãã£ãã£ã«å¶ç´ãæå®ã§ãã¾ãã"
+
+#: index.docbook:88
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .createCriteria(\"kittens\")\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .createCriteria(\"kittens\")\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .list();]]>"
+
+#: index.docbook:90
+msgid "note that the second <literal>createCriteria()</literal> returns a new instance of <literal>Criteria</literal>, which refers to the elements of the <literal>kittens</literal> collection."
+msgstr "2çªç®ã® <literal>createCriteria()</literal> ã¯ã<literal>kittens</literal> ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ãåç
§ããæ°ãã <literal>Criteria</literal> ã¤ã³ã¹ã¿ã³ã¹ãè¿ããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:96
+msgid "The following, alternate form is useful in certain circumstances."
+msgstr "以ä¸ã®ãããªæ¹æ³ããç¶æ³ã«ããæç¨ã§ãã"
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createAlias(\"kittens\", \"kt\")\n"
+ " .createAlias(\"mate\", \"mt\")\n"
+ " .add( Restrictions.eqProperty(\"kt.name\", \"mt.name\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createAlias(\"kittens\", \"kt\")\n"
+ " .createAlias(\"mate\", \"mt\")\n"
+ " .add( Restrictions.eqProperty(\"kt.name\", \"mt.name\") )\n"
+ " .list();]]>"
+
+#: index.docbook:102
+msgid "(<literal>createAlias()</literal> does not create a new instance of <literal>Criteria</literal>.)"
+msgstr "ï¼<literal>createAlias()</literal> ã¯æ°ãã <literal>Criteria</literal> ã¤ã³ã¹ã¿ã³ã¹ãä½æãã¾ãããï¼"
+
+#: index.docbook:107
+msgid "Note that the kittens collections held by the <literal>Cat</literal> instances returned by the previous two queries are <emphasis>not</emphasis> pre-filtered by the criteria! If you wish to retrieve just the kittens that match the criteria, you must use a <literal>ResultTransformer</literal>."
+msgstr "åã®2ã¤ã®ã¯ã¨ãªã«ãã£ã¦è¿ããã <literal>Cat</literal> ã¤ã³ã¹ã¿ã³ã¹ã«ãã£ã¦ä¿æãããkittensã³ã¬ã¯ã·ã§ã³ã¯ã criteriaã«ãã£ã¦äºåã«ãã£ã«ã¿ãªã³ã° <emphasis>ãããªã</emphasis> ãã¨ã«æ³¨æãã¦ãã ããã ããcriteriaã«é©åããkittenãåå¾ããããªãã <literal>ResultTransformer</literal> ã使ããªããã°ãªãã¾ããã"
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createCriteria(\"kittens\", \"kt\")\n"
+ " .add( Restrictions.eq(\"name\", \"F%\") )\n"
+ " .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)\n"
+ " .list();\n"
+ "Iterator iter = cats.iterator();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Map map = (Map) iter.next();\n"
+ " Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);\n"
+ " Cat kitten = (Cat) map.get(\"kt\");\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createCriteria(\"kittens\", \"kt\")\n"
+ " .add( Restrictions.eq(\"name\", \"F%\") )\n"
+ " .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)\n"
+ " .list();\n"
+ "Iterator iter = cats.iterator();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Map map = (Map) iter.next();\n"
+ " Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);\n"
+ " Cat kitten = (Cat) map.get(\"kt\");\n"
+ "}]]>"
+
+#: index.docbook:119
+msgid "Dynamic association fetching"
+msgstr "é¢é£ã®åçãã§ãã"
+
+#: index.docbook:121
+msgid "You may specify association fetching semantics at runtime using <literal>setFetchMode()</literal>."
+msgstr "<literal>setFetchMode()</literal> ã使ãã å®è¡æã«é¢é£ã®å¾©å
æ¹æ³ãæå®ãã¦ãããã§ãã"
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .setFetchMode(\"mate\", FetchMode.EAGER)\n"
+ " .setFetchMode(\"kittens\", FetchMode.EAGER)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .setFetchMode(\"mate\", FetchMode.EAGER)\n"
+ " .setFetchMode(\"kittens\", FetchMode.EAGER)\n"
+ " .list();]]>"
+
+#: index.docbook:128
+msgid "This query will fetch both <literal>mate</literal> and <literal>kittens</literal> by outer join. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "ãã®ã¯ã¨ãªã¯å¤é¨çµåã«ãã <literal>mate</literal> 㨠<literal>kittens</literal> ã®ä¸¡æ¹ããã§ãããã¾ãã ããå¤ãã®æ
å ±ã¯ <xref linkend=\"performance-fetching\"/> ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:136
+msgid "Example queries"
+msgstr "ã¯ã¨ãªã®ä¾"
+
+#: index.docbook:138
+msgid "The class <literal>org.hibernate.criterion.Example</literal> allows you to construct a query criterion from a given instance."
+msgstr "<literal>org.hibernate.criterion.Example</literal> ã¯ã©ã¹ã¯ã ä¸ããããã¤ã³ã¹ã¿ã³ã¹ããã¯ã¨ãªã¯ã©ã¤ããªãªã³ãæ§ç¯ã§ãã¾ãã"
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[Cat cat = new Cat();\n"
+ "cat.setSex('F');\n"
+ "cat.setColor(Color.BLACK);\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new Cat();\n"
+ "cat.setSex('F');\n"
+ "cat.setColor(Color.BLACK);\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .list();]]>"
+
+#: index.docbook:145
+msgid "Version properties, identifiers and associations are ignored. By default, null valued properties are excluded."
+msgstr "ãã¼ã¸ã§ã³ããããã£ãèå¥åãé¢é£ã¯ç¡è¦ããã¾ãã ããã©ã«ãã§ã¯nullå¤ã®ããããã£ã¯é¤å¤ããã¾ãã"
+
+#: index.docbook:150
+msgid "You can adjust how the <literal>Example</literal> is applied."
+msgstr "ã©ã®ããã« <literal>Example</literal> ãé©ç¨ããã 調æ´ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:154
+msgid ""
+ "<![CDATA[Example example = Example.create(cat)\n"
+ " .excludeZeroes() //exclude zero valued properties\n"
+ " .excludeProperty(\"color\") //exclude the property named \"color\"\n"
+ " .ignoreCase() //perform case insensitive string comparisons\n"
+ " .enableLike(); //use like for string comparisons\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add(example)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Example example = Example.create(cat)\n"
+ " .excludeZeroes() //exclude zero valued properties\n"
+ " .excludeProperty(\"color\") //exclude the property named \"color\"\n"
+ " .ignoreCase() //perform case insensitive string comparisons\n"
+ " .enableLike(); //use like for string comparisons\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add(example)\n"
+ " .list();]]>"
+
+#: index.docbook:156
+msgid "You can even use examples to place criteria upon associated objects."
+msgstr "é¢é£ãªãã¸ã§ã¯ãã«criteriaãæå®ããããã«ãExampleã使ããã¨ãå¯è½ã§ãã"
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .createCriteria(\"mate\")\n"
+ " .add( Example.create( cat.getMate() ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .createCriteria(\"mate\")\n"
+ " .add( Example.create( cat.getMate() ) )\n"
+ " .list();]]>"
+
+#: index.docbook:165
+msgid "Projections, aggregation and grouping"
+msgstr "å°å½±ãéç´ãã°ã«ã¼ãå"
+
+#: index.docbook:166
+msgid "The class <literal>org.hibernate.criterion.Projections</literal> is a factory for <literal>Projection</literal> instances. We apply a projection to a query by calling <literal>setProjection()</literal>."
+msgstr "<literal>org.hibernate.criterion.Projections</literal> ã¯ã©ã¹ã¯ <literal>Projection</literal> ã¤ã³ã¹ã¿ã³ã¹ã®ãã¡ã¯ããªã§ãã <literal>setProjection()</literal> ãå¼ã³åºããã¨ã§ã ã¯ã¨ãªã«å°å½±ãé©ç¨ãã¾ãã"
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.rowCount() )\n"
+ " .add( Restrictions.eq(\"color\", Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.rowCount() )\n"
+ " .add( Restrictions.eq(\"color\", Color.BLACK) )\n"
+ " .list();]]>"
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount() )\n"
+ " .add( Projections.avg(\"weight\") )\n"
+ " .add( Projections.max(\"weight\") )\n"
+ " .add( Projections.groupProperty(\"color\") )\n"
+ " )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount() )\n"
+ " .add( Projections.avg(\"weight\") )\n"
+ " .add( Projections.max(\"weight\") )\n"
+ " .add( Projections.groupProperty(\"color\") )\n"
+ " )\n"
+ " .list();]]>"
+
+#: index.docbook:176
+msgid "There is no explicit \"group by\" necessary in a criteria query. Certain projection types are defined to be <emphasis>grouping projections</emphasis>, which also appear in the SQL <literal>group by</literal> clause."
+msgstr "å¿
è¦ã§ãã£ã¦ããcriteriaã¯ã¨ãªã«ãgroup byããæ示ããå¿
è¦ã¯ããã¾ããã ãã種ã®Projectionå㯠<emphasis>ã°ã«ã¼ãåå°å½±</emphasis> ã¨ãã¦å®ç¾©ããã SQLã® <literal>group by</literal> ç¯ã«ãç¾ãã¾ãã"
+
+#: index.docbook:182
+msgid "An alias may optionally be assigned to a projection, so that the projected value may be referred to in restrictions or orderings. Here are two different ways to do this:"
+msgstr "ä»»æã§å°å½±ã«å¥åãä»ãããããããå°å½±ãããå¤ã¯restrictionãorderingå
ããåç
§ã§ãã¾ãã å¥åãã¤ããï¼ã¤ã®ç°ãªãæ¹æ³ã示ãã¾ãã"
+
+#: index.docbook:188
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.alias( Projections.groupProperty(\"color\"), \"colr\" ) )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.alias( Projections.groupProperty(\"color\"), \"colr\" ) )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+
+#: index.docbook:190
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.groupProperty(\"color\").as(\"colr\") )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.groupProperty(\"color\").as(\"colr\") )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+
+#: index.docbook:192
+msgid "The <literal>alias()</literal> and <literal>as()</literal> methods simply wrap a projection instance in another, aliased, instance of <literal>Projection</literal>. As a shortcut, you can assign an alias when you add the projection to a projection list:"
+msgstr "<literal>alias()</literal> 㨠<literal>as()</literal> ã¡ã½ããã¯ã Projectionã¤ã³ã¹ã¿ã³ã¹ãå¥ã®ååã® <literal>Projection</literal> ã¤ã³ã¹ã¿ã³ã¹ã§ ã©ããããã ãã§ãã ã·ã§ã¼ãã«ããã¨ãã¦ãå°å½±ãå°å½±ãªã¹ãã«è¿½å ããéã«ãå¥åãã¤ãããã¾ãã"
+
+#: index.docbook:199
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount(), \"catCountByColor\" )\n"
+ " .add( Projections.avg(\"weight\"), \"avgWeight\" )\n"
+ " .add( Projections.max(\"weight\"), \"maxWeight\" )\n"
+ " .add( Projections.groupProperty(\"color\"), \"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount(), \"catCountByColor\" )\n"
+ " .add( Projections.avg(\"weight\"), \"avgWeight\" )\n"
+ " .add( Projections.max(\"weight\"), \"maxWeight\" )\n"
+ " .add( Projections.groupProperty(\"color\"), \"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+
+#: index.docbook:201
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Domestic.class, \"cat\")\n"
+ " .createAlias(\"kittens\", \"kit\")\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.property(\"cat.name\"), \"catName\" )\n"
+ " .add( Projections.property(\"kit.name\"), \"kitName\" )\n"
+ " )\n"
+ " .addOrder( Order.asc(\"catName\") )\n"
+ " .addOrder( Order.asc(\"kitName\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Domestic.class, \"cat\")\n"
+ " .createAlias(\"kittens\", \"kit\")\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.property(\"cat.name\"), \"catName\" )\n"
+ " .add( Projections.property(\"kit.name\"), \"kitName\" )\n"
+ " )\n"
+ " .addOrder( Order.asc(\"catName\") )\n"
+ " .addOrder( Order.asc(\"kitName\") )\n"
+ " .list();]]>"
+
+#: index.docbook:203
+msgid "You can also use <literal>Property.forName()</literal> to express projections:"
+msgstr "å°å½±ã®å¼ã« <literal>Property.forName()</literal> ã使ç¨ã§ãã¾ãã"
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Property.forName(\"name\") )\n"
+ " .add( Property.forName(\"color\").eq(Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Property.forName(\"name\") )\n"
+ " .add( Property.forName(\"color\").eq(Color.BLACK) )\n"
+ " .list();]]>"
+
+#: index.docbook:209
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount().as(\"catCountByColor\") )\n"
+ " .add( Property.forName(\"weight\").avg().as(\"avgWeight\") )\n"
+ " .add( Property.forName(\"weight\").max().as(\"maxWeight\") )\n"
+ " .add( Property.forName(\"color\").group().as(\"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount().as(\"catCountByColor\") )\n"
+ " .add( Property.forName(\"weight\").avg().as(\"avgWeight\") )\n"
+ " .add( Property.forName(\"weight\").max().as(\"maxWeight\") )\n"
+ " .add( Property.forName(\"color\").group().as(\"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+
+#: index.docbook:214
+msgid "Detached queries and subqueries"
+msgstr "ã¯ã¨ãªããã³ãµãã¯ã¨ãªã®åé¢"
+
+#: index.docbook:215
+msgid "The <literal>DetachedCriteria</literal> class lets you create a query outside the scope of a session, and then later execute it using some arbitrary <literal>Session</literal>."
+msgstr "<literal>DetachedCriteria</literal> ã¯ã©ã¹ã«ããã ã»ãã·ã§ã³ã¹ã³ã¼ãå¤ã«ã¯ã¨ãªãä½æã§ãã¾ãã å¾ã§ãä»»æã® <literal>Session</literal> ã使ã£ã¦ãå®è¡ã§ãã¾ãã"
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)\n"
+ " .add( Property.forName(\"sex\").eq('F') );\n"
+ " \n"
+ "Session session = ....;\n"
+ "Transaction txn = session.beginTransaction();\n"
+ "List results = query.getExecutableCriteria(session).setMaxResults(100).list();\n"
+ "txn.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)\n"
+ " .add( Property.forName(\"sex\").eq('F') );\n"
+ " \n"
+ "Session session = ....;\n"
+ "Transaction txn = session.beginTransaction();\n"
+ "List results = query.getExecutableCriteria(session).setMaxResults(100).list();\n"
+ "txn.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:222
+msgid "A <literal>DetachedCriteria</literal> may also be used to express a subquery. Criterion instances involving subqueries may be obtained via <literal>Subqueries</literal> or <literal>Property</literal>."
+msgstr "<literal>DetachedCriteria</literal> ã¯ããµãã¯ã¨ãªã表ç¾ããããã«ã使ãã¾ãã ãµãã¯ã¨ãªãä¼´ãCriterionã¤ã³ã¹ã¿ã³ã¹ã¯ã <literal>Subqueries</literal> ããã㯠<literal>Property</literal> ããå¾ããã¾ãã"
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\").avg() );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"weight\").gt(avgWeight) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\").avg() );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"weight\").gt(avgWeight) )\n"
+ " .list();]]>"
+
+#: index.docbook:230
+msgid ""
+ "<![CDATA[DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\") );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Subqueries.geAll(\"weight\", weights) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\") );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Subqueries.geAll(\"weight\", weights) )\n"
+ " .list();]]>"
+
+#: index.docbook:232
+msgid "Even correlated subqueries are possible:"
+msgstr "ç¸äºé¢ä¿ããããµãã¯ã¨ãªã§ãããå¯è½ã§ãã"
+
+#: index.docbook:236
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, \"cat2\")\n"
+ " .setProjection( Property.forName(\"weight\").avg() )\n"
+ " .add( Property.forName(\"cat2.sex\").eqProperty(\"cat.sex\") );\n"
+ "session.createCriteria(Cat.class, \"cat\")\n"
+ " .add( Property.forName(\"weight\").gt(avgWeightForSex) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, \"cat2\")\n"
+ " .setProjection( Property.forName(\"weight\").avg() )\n"
+ " .add( Property.forName(\"cat2.sex\").eqProperty(\"cat.sex\") );\n"
+ "session.createCriteria(Cat.class, \"cat\")\n"
+ " .add( Property.forName(\"weight\").gt(avgWeightForSex) )\n"
+ " .list();]]>"
+
+#: index.docbook:245
+msgid "Queries by natural identifier"
+msgstr "èªç¶èå¥åã«ããã¯ã¨ãª"
+
+#: index.docbook:247
+msgid "For most queries, including criteria queries, the query cache is not very efficient, because query cache invalidation occurs too frequently. However, there is one special kind of query where we can optimize the cache invalidation algorithm: lookups by a constant natural key. In some applications, this kind of query occurs frequently. The criteria API provides special provision for this use case."
+msgstr "criteriaã¯ã¨ãªãå«ãããã¦ãã®ã¯ã¨ãªã«ã¨ã£ã¦ã ã¯ã¨ãªãã£ãã·ã¥ã¯ãã¾ãå¹çããããªãã§ãã ãªããªããã¯ã¨ãªãã£ãã·ã¥ãé »ç¹ã«ç¡å¹ã«ãªãããã§ãã ããããªããããã£ãã·ã¥ãç¡å¹ã«ããã¢ã«ã´ãªãºã ãæé©åã§ãã ç¹å¥ãªã¯ã¨ãªã®ç¨®é¡ãï¼ã¤ããã¾ãã æ´æ°ãããªãèªç¶ãã¼ã«ããæ¤ç´¢ã§ãã ããã¤ãã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ããã®ç¨®é¡ã®ã¯ã¨ãªãé »ç¹ã«ç¾ãã¾ãã ãã®ãããªä½¿ããæ¹ã®ããã«ãcriteria APIã¯ç¹å¥ãªå¯¾çãæä¾ãã¾ãã"
+
+#: index.docbook:255
+msgid "First, you should map the natural key of your entity using <literal><natural-id></literal>, and enable use of the second-level cache."
+msgstr "æåã«ã<literal><natural-id></literal> ã使ã£ã¦ã ã¨ã³ãã£ãã£ã®èªç¶ãã¼ãããããã¦ãã ããã ããã¦ãäºæ¬¡ãã£ãã·ã¥ãæå¹ã«ãã¾ãã"
+
+#: index.docbook:260
+msgid ""
+ "<![CDATA[<class name=\"User\">\n"
+ " <cache usage=\"read-write\"/>\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <natural-id>\n"
+ " <property name=\"name\"/>\n"
+ " <property name=\"org\"/>\n"
+ " </natural-id>\n"
+ " <property name=\"password\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"User\">\n"
+ " <cache usage=\"read-write\"/>\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <natural-id>\n"
+ " <property name=\"name\"/>\n"
+ " <property name=\"org\"/>\n"
+ " </natural-id>\n"
+ " <property name=\"password\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:262
+msgid "Note that this functionality is not intended for use with entities with <emphasis>mutable</emphasis> natural keys."
+msgstr "注æï¼ <emphasis>å¤æ´ããã</emphasis> èªç¶ãã¼ãæã¤ã¨ã³ãã£ãã£ã« ãã®æ©è½ã使ãã®ã¯ãæå³ããã¦ããªã使ãæ¹ã§ãã"
+
+#: index.docbook:267
+msgid "Next, enable the Hibernate query cache."
+msgstr "次ã«ãHibernateã¯ã¨ãªãã£ãã·ã¥ãæå¹ã«ãã¾ãã"
+
+#: index.docbook:271
+msgid "Now, <literal>Restrictions.naturalId()</literal> allows us to make use of the more efficient cache algorithm."
+msgstr "ããã§ã<literal>Restrictions.naturalId()</literal> ã«ããã ããå¹ççãªãã£ãã·ã¥ã¢ã«ã´ãªãºã ã使ç¨ã§ãã¾ãã"
+
+#: index.docbook:276
+msgid ""
+ "<![CDATA[session.createCriteria(User.class)\n"
+ " .add( Restrictions.naturalId()\n"
+ " .set(\"name\", \"gavin\")\n"
+ " .set(\"org\", \"hb\") \n"
+ " ).setCacheable(true)\n"
+ " .uniqueResult();]]>"
+msgstr ""
+ "<![CDATA[session.createCriteria(User.class)\n"
+ " .add( Restrictions.naturalId()\n"
+ " .set(\"name\", \"gavin\")\n"
+ " .set(\"org\", \"hb\") \n"
+ " ).setCacheable(true)\n"
+ " .uniqueResult();]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/query_hql.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/query_hql.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/query_hql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1694 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "HQL: The Hibernate Query Language"
+msgstr "HQL: The Hibernate Query Language"
+
+#: index.docbook:7
+msgid "Hibernate is equipped with an extremely powerful query language that (quite intentionally) looks very much like SQL. But don't be fooled by the syntax; HQL is fully object-oriented, understanding notions like inheritence, polymorphism and association."
+msgstr "Hibernateã¯SQLã«é常ã«ããä¼¼ã(æå³çã«ä¼¼ãã)å¼·åãªåãåããè¨èªãåãã¦ãã¾ãã ãããSQLã«ä¼¼ãæ§æã«æããããªãã§ãã ãããHQLã¯å®å
¨ã«ãªãã¸ã§ã¯ãæåã§ããã ç¶æ¿ãããªã¢ã¼ãã£ãºã ãé¢é£ã¨ãã£ãæ¦å¿µãç解ãã¾ãã"
+
+#: index.docbook:14
+msgid "Case Sensitivity"
+msgstr "大æåã¨å°æåã®åºå¥"
+
+#: index.docbook:16
+msgid "Queries are case-insensitive, except for names of Java classes and properties. So <literal>SeLeCT</literal> is the same as <literal>sELEct</literal> is the same as <literal>SELECT</literal> but <literal>org.hibernate.eg.FOO</literal> is not <literal>org.hibernate.eg.Foo</literal> and <literal>foo.barSet</literal> is not <literal>foo.BARSET</literal>."
+msgstr "ã¯ã¨ãªã¯Javaã®ã¯ã©ã¹åã¨ããããã£åãé¤ãã¦å¤§æåãå°æåãåºå¥ãã¾ããã å¾ã£ã¦ <literal>SeLeCT</literal> 㯠<literal>sELEct</literal> ã¨åãã§ãã㤠<literal>SELECT</literal> ã¨ãåãã§ãã <literal>net.sf.hibernate.eg.FOO</literal> 㯠<literal>net.sf.hibernate.eg.Foo</literal> ã¨ã¯éããã㤠<literal>foo.barSet</literal> 㯠<literal>foo.BARSET</literal> ã¨ãéãã¾ãã"
+
+#: index.docbook:27
+msgid "This manual uses lowercase HQL keywords. Some users find queries with uppercase keywords more readable, but we find this convention ugly when embedded in Java code."
+msgstr "ãã®ããã¥ã¢ã«ã§ã¯å°æåã®HQLãã¼ã¯ã¼ãã使ç¨ãã¾ãã 大æåã®ãã¼ã¯ã¼ãã®ã¯ã¨ãªã®æ¹ãèªã¿ãããã¨æããã¦ã¼ã¶ã¼ãããã¨æãã¾ãã ã§ãããJavaã³ã¼ãå
ã«åãè¾¼ã¾ããã¨ãã«ã¯è¦ã¥ããã¨æãã¾ãã"
+
+#: index.docbook:35
+msgid "The from clause"
+msgstr "fromç¯"
+
+#: index.docbook:37
+msgid "The simplest possible Hibernate query is of the form:"
+msgstr "ãã£ã¨ãåç´ãªHibernateã¯ã¨ãªã¯æ¬¡ã®å½¢å¼ã§ãã"
+
+#: index.docbook:41
+msgid "<![CDATA[from eg.Cat]]>"
+msgstr "<![CDATA[from eg.Cat]]>"
+
+#: index.docbook:43
+msgid "which simply returns all instances of the class <literal>eg.Cat</literal>. We don't usually need to qualify the class name, since <literal>auto-import</literal> is the default. So we almost always just write:"
+msgstr "ããã¯åç´ã«ã<literal>eg.Cat</literal>ãã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ããã¹ã¦è¿ãã¾ãã å¿
ãããã¯ã©ã¹åã修飾ããï¼ã¯ã©ã¹ã«ããã±ã¼ã¸åãä»ããï¼å¿
è¦ã¯ããã¾ããã ã¨ããã®ãã<literal>auto-import</literal> ãããã©ã«ãã«ãªã£ã¦ããããã§ãã ãã®ããã»ã¨ãã©ã®å ´åããã®ããã«æ¸ãã ãã§ååã§ãã"
+
+#: index.docbook:49
+msgid "<![CDATA[from Cat]]>"
+msgstr "<![CDATA[from Cat]]>"
+
+#: index.docbook:51
+msgid "Most of the time, you will need to assign an <emphasis>alias</emphasis>, since you will want to refer to the <literal>Cat</literal> in other parts of the query."
+msgstr "ã»ã¨ãã©ã®å ´åã¯ã¨ãªã®ã»ãã®é¨åã§ã<literal>Cat</literal>ããåç
§ããã®ã§ãå¥åãå²ãå½ã¦ãå¿
è¦ãããã§ãããã"
+
+#: index.docbook:57, index.docbook:372
+msgid "<![CDATA[from Cat as cat]]>"
+msgstr "<![CDATA[from Cat as cat]]>"
+
+#: index.docbook:59
+msgid "This query assigns the alias <literal>cat</literal> to <literal>Cat</literal> instances, so we could use that alias later in the query. The <literal>as</literal> keyword is optional; we could also write:"
+msgstr "ãã®ã¯ã¨ãªã§ã¯ <literal>Cat</literal> ã¤ã³ã¹ã¿ã³ã¹ã« <literal>cat</literal> ã¨ããå¥åãä»ãã¦ãã¾ãã ãã®ãããå¾ã§ãã®ã¯ã¨ãªå
ã§ããã®å¥åã使ããã¨ãã§ãã¾ãã <literal>as</literal> ãã¼ã¯ã¼ãã¯ãªãã·ã§ã³ã§ããã¤ã¾ããã®ããã«æ¸ããã¨ãã§ãã¾ãï¼"
+
+#: index.docbook:65
+msgid "<![CDATA[from Cat cat]]>"
+msgstr "<![CDATA[from Cat cat]]>"
+
+#: index.docbook:67
+msgid "Multiple classes may appear, resulting in a cartesian product or \"cross\" join."
+msgstr "ç´ç©ããããã¯ã¯ãã¹çµåã«ãã£ã¦å¤æ°ã®ã¯ã©ã¹ãåºç¾ãããã¨ãããã¾ãã"
+
+#: index.docbook:71
+msgid "<![CDATA[from Formula, Parameter]]>"
+msgstr "<![CDATA[from Formula, Parameter]]>"
+
+#: index.docbook:72
+msgid "<![CDATA[from Formula as form, Parameter as param]]>"
+msgstr "<![CDATA[from Formula as form, Parameter as param]]>"
+
+#: index.docbook:74
+msgid "It is considered good practice to name query aliases using an initial lowercase, consistent with Java naming standards for local variables (eg. <literal>domesticCat</literal>)."
+msgstr "ãã¼ã«ã«å¤æ°ã®Javaã®ãã¼ãã³ã°åºæºã¨ä¸è´ããã é æåã«å°æåã使ã£ãã¯ã¨ãªã®å¥åãä»ãããã¨ã¯ããç¿æ
£ã§ã(ä¾ãã° <literal>domesticCat</literal> )ã"
+
+#: index.docbook:83
+msgid "Associations and joins"
+msgstr "é¢é£ã¨çµå"
+
+#: index.docbook:85
+msgid "We may also assign aliases to associated entities, or even to elements of a collection of values, using a <literal>join</literal>."
+msgstr "é¢é£ããã¨ã³ãã£ãã£ãããã¯å¤ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ã«ãã<literal>çµå</literal> ã使ã£ã¦å¥åãå²ãå½ã¦ããã¨ãåºæ¥ã¾ãã"
+
+#: index.docbook:90
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join cat.mate as mate\n"
+ " left outer join cat.kittens as kitten]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat
+\n"
+ " inner join cat.mate as mate
+\n"
+ " left outer join cat.kittens as kitten]]>"
+
+#: index.docbook:92
+msgid "<![CDATA[from Cat as cat left join cat.mate.kittens as kittens]]>"
+msgstr "<![CDATA[from Cat as cat left join cat.mate.kittens as kittens]]>"
+
+#: index.docbook:94
+msgid "<![CDATA[from Formula form full join form.parameter param]]>"
+msgstr "<![CDATA[from Formula form full join form.parameter param]]>"
+
+#: index.docbook:96
+msgid "The supported join types are borrowed from ANSI SQL"
+msgstr "ãµãã¼ããã¦ããçµåã®ã¿ã¤ãã¯ANSI SQLã¨åãã§ãã"
+
+#: index.docbook:103
+msgid "inner join"
+msgstr "inner join"
+
+#: index.docbook:108
+msgid "left outer join"
+msgstr "left outer join"
+
+#: index.docbook:113
+msgid "right outer join"
+msgstr "right outer join"
+
+#: index.docbook:117
+msgid "<literal>full join</literal> (not usually useful)"
+msgstr "<literal>full join</literal> (ããã¦ãã®å ´å使ãã¥ãã)"
+
+#: index.docbook:123
+msgid "The <literal>inner join</literal>, <literal>left outer join</literal> and <literal>right outer join</literal> constructs may be abbreviated."
+msgstr "<literal>inner join</literal>ã<literal>left outer join</literal>ã<literal>right outer join</literal>ã«ã¯çç¥å½¢ã使ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " join cat.mate as mate\n"
+ " left join cat.kittens as kitten]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat
+\n"
+ " join cat.mate as mate
+\n"
+ " left join cat.kittens as kitten]]>"
+
+#: index.docbook:130
+msgid "You may supply extra join conditions using the HQL <literal>with</literal> keyword."
+msgstr "HQLã® <literal>with</literal> ãã¼ã¯ã¼ãã使ãã¨ãçµåæ¡ä»¶ãä»ãå ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " left join cat.kittens as kitten\n"
+ " with kitten.bodyWeight > 10.0]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat
+\n"
+ " left join cat.kittens as kitten
+\n"
+ " with kitten.bodyWeight > 10.0]]>"
+
+#: index.docbook:137
+msgid "In addition, a \"fetch\" join allows associations or collections of values to be initialized along with their parent objects, using a single select. This is particularly useful in the case of a collection. It effectively overrides the outer join and lazy declarations of the mapping file for associations and collections. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "å ãã¦ãããã§ãããçµåã¯é¢é£ãå¤ã®ã³ã¬ã¯ã·ã§ã³ã親ãªãã¸ã§ã¯ãã¨ä¸ç·ã«1度ã®selectå¥ã§åæåãã¾ãã ããã¯ç¹ã«ã³ã¬ã¯ã·ã§ã³ã®å ´åã«æç¨ã§ããããã¯å®è³ªä¸ãé¢é£ã¨ã³ã¬ã¯ã·ã§ã³ã«å¯¾ãããããã³ã°å®ç¾©ãã¡ã¤ã«ã®å¤é¨çµåã¨lazyåæåã®å®ç¾©ãä¸æ¸ããããã¨ã«ãªãã¾ãã <xref linkend=\"performance-fetching\"/> ã«ããå¤ãã®æ
å ±ãããã¾ãã"
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat
+\n"
+ " inner join fetch cat.mate
+\n"
+ " left join fetch cat.kittens]]>"
+
+#: index.docbook:147
+msgid "A fetch join does not usually need to assign an alias, because the associated objects should not be used in the <literal>where</literal> clause (or any other clause). Also, the associated objects are not returned directly in the query results. Instead, they may be accessed via the parent object. The only reason we might need an alias is if we are recursively join fetching a further collection:"
+msgstr "çµåã«ãããã§ããã¯é¢é£ãããªãã¸ã§ã¯ãã <literal>where</literal> ç¯(ã¾ãã¯ä»ã®ã©ããªç¯ã§ã) ã§ä½¿ããã¦ã¯ãªããªãã®ã§ãé常å¥åãå²ãå½ã¦ãå¿
è¦ãããã¾ãããã¾ãé¢é£ãªãã¸ã§ã¯ãã¯åãåããçµæã¨ã㦠ç´æ¥è¿ããã¾ããã代ããã«è¦ªãªãã¸ã§ã¯ããéãã¦ã¢ã¯ã»ã¹ã§ãã¾ãã ã³ã¬ã¯ã·ã§ã³ãå帰çã«çµåãã§ããããå ´åã®ã¿ãå¥åãå¿
è¦ã«ãªãã¾ãã"
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens child\n"
+ " left join fetch child.kittens]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat
+\n"
+ " inner join fetch cat.mate
+\n"
+ " left join fetch cat.kittens child
+\n"
+ " left join fetch child.kittens]]>"
+
+#: index.docbook:157
+msgid "Note that the <literal>fetch</literal> construct may not be used in queries called using <literal>iterate()</literal> (though <literal>scroll()</literal> can be used). Nor should <literal>fetch</literal> be used together with <literal>setMaxResults()</literal> or <literal>setFirstResult()</literal> as these operations are based on the result rows, which usually contain duplicates for eager collection fetching, hence, the number of rows is not what you'd expect. Nor may <literal>fetch</literal> be used together with an ad hoc <literal>with</literal> condition. It is possible to create a cartesian product by join fetching more than one collection in a query, so take care in this case. Join fetching multiple collection roles also sometimes gives unexpected results for bag mappings, so be careful about how you formulate your queries in this case. Finally, note that <literal>full join fetch</literal> and <literal>right join fetch</literal> are not meaningful."
+msgstr "<literal>fetch</literal> æ§æ㯠<literal>iterate()</literal> ã使ã£ãã¯ã¨ãªå¼ã³åºãã§ä½¿ç¨ã§ããªããã¨ã«æ³¨æãã¦ãã ãã ï¼ä¸æ¹ã§ <literal>scroll()</literal> ã¯ä½¿ç¨ã§ãã¾ãï¼ã ã¾ãããããã®æä½ã¯çµæã®è¡ã«åºã¥ãã¦ããããã <literal>fetch</literal> 㯠<literal>setMaxResults()</literal> ã <literal>setFirstResult()</literal> ã¨ä¸ç·ã«ä½¿ç¨ãã¹ãã§ã¯ããã¾ããã é常eagerãªã³ã¬ã¯ã·ã§ã³ãã§ãããããã¨éè¤ãåºã¦ãã¾ããããããªããæå¾
ãããããªè¡æ°ã«ã¯ãªããªãã®ã§ãã ããã¦ã¾ã <literal>fetch</literal> ã¯ãã¢ãããã¯ãª <literal>with</literal> æ¡ä»¶ã ä¸ç·ã«ä½¿ããã¨ãã§ãã¾ããã ä¸ã¤ã®ã¯ã¨ãªã§è¤æ°ã®ã³ã¬ã¯ã·ã§ã³ãçµåãã§ãããããã¨ã«ããç´ç©ãä½æã§ããã®ã§ããã®å ´å注æãã¦ãã ããã ã¾ããè¤æ°ã®ã³ã¬ã¯ã·ã§ã³ã«å¯¾ããçµåãã§ãã!
ã¯bagãããã³ã°ã«å¯¾ãã¦äºæãã¬çµæããããããã¨ãããã®ã§ã ãã®å ´åã®ã¯ã¨ãªã®ä½æã«ã¯æ³¨æãã¦ãã ããã æå¾ã« <literal>å
¨å¤é¨çµåã«ãããã§ãã</literal> 㨠<literal>å³å¤é¨çµåã«ãããã§ãã</literal> ã¯æç¨ã§ã¯ãªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:172
+msgid "If you are using property-level lazy fetching (with bytecode instrumentation), it is possible to force Hibernate to fetch the lazy properties immediately (in the first query) using <literal>fetch all properties</literal>."
+msgstr "ããããããã£ã¬ãã«ã®é
延ãã§ããã使ãå ´åï¼å
é¨çã«ãã¤ãã³ã¼ãå¦çãããå ´åï¼ã <literal>fetch all properties</literal> ã使ããã¨ã§ Hibernateã«é
延ããããã£ãéããã«ï¼æåã®ã¯ã¨ãªã§ï¼ãã§ããããããã¨ãã§ãã¾ãã"
+
+#: index.docbook:178
+msgid "<![CDATA[from Document fetch all properties order by name]]>"
+msgstr "<![CDATA[from Document fetch all properties order by name]]>"
+
+#: index.docbook:179
+msgid "<![CDATA[from Document doc fetch all properties where lower(doc.name) like '%cats%']]>"
+msgstr "<![CDATA[from Document doc fetch all properties where lower(doc.name) like '%cats%']]>"
+
+#: index.docbook:184
+msgid "Forms of join syntax"
+msgstr "çµåæ§æã®å½¢å¼"
+
+#: index.docbook:186
+msgid "HQL supports two forms of association joining: <literal>implicit</literal> and <literal>explicit</literal>."
+msgstr "HQLã¯ï¼ã¤ã®é¢é£çµåå½¢å¼ããµãã¼ããã¾ãï¼<literal>æé»ç</literal> 㨠<literal>æ示ç</literal>ã"
+
+#: index.docbook:190
+msgid "The queries shown in the previous section all use the <literal>explicit</literal> form where the join keyword is explicitly used in the from clause. This is the recommended form."
+msgstr "ããã¾ã§ã®ã»ã¯ã·ã§ã³ã§ãè¦ããã使ãæ¹ã¯ãã¹ã¦ <literal>æ示çãª</literal> å½¢å¼ã§ã fromç¯ã§æ示çã«joinãã¼ã¯ã¼ãã使ã£ã¦ãã¾ãã ãã®å½¢å¼ããããããã¾ãã"
+
+#: index.docbook:195
+msgid "The <literal>implicit</literal> form does not use the join keyword. Instead, the associations are \"dereferenced\" using dot-notation. <literal>implicit</literal> joins can appear in any of the HQL clauses. <literal>implicit</literal> join result in inner joins in the resulting SQL statement."
+msgstr "<literal>æé»ç</literal> ãã©ã¼ã ã¯ãjoinãã¼ã¯ã¼ãã使ãã¾ããã代ããã«ãåç
§ããé¢é£ã« ããã表è¨ã使ãã¾ãã<literal>æé»ç</literal> çµåã¯ããã¾ãã¾ãªHQLã«åºã¦ãã¾ãã <literal>æé»ç</literal> çµåã®çµæã¯ãSQLã¹ãã¼ãã¡ã³ãã®å
é¨çµåçµæã§ãã"
+
+#: index.docbook:202
+msgid "<![CDATA[from Cat as cat where cat.mate.name like '%s%']]>"
+msgstr "<![CDATA[from Cat as cat where cat.mate.name like '%s%']]>"
+
+#: index.docbook:206
+msgid "Refering to identifier property"
+msgstr "Selectç¯"
+
+#: index.docbook:208
+msgid "There are, generally speaking, 2 ways to refer to an entity's identifier property:"
+msgstr "<literal>select</literal> ç¯ã¯ä»¥ä¸ã®ããã«ã©ã®ãªãã¸ã§ã¯ãã¨å±æ§ãã¯ã¨ãªãªã¶ã«ãã»ããã«è¿ãããé¸æãã¾ãã:"
+
+#: index.docbook:213
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the identifier property of an entity <emphasis>provided that entity does not define a non-identifier property named id</emphasis>."
+msgstr ""
+ "<![CDATA[select mate
+\n"
+ "from Cat as cat
+\n"
+ " inner join cat.mate as mate]]>"
+
+#: index.docbook:220
+msgid "If the entity defines a named identifier property, you may use that property name."
+msgstr "ä¸è¨ã®ã¯ã¨ãªã¯ä»ã® <literal>Cat</literal> ã® <literal>mate</literal> ãé¸æãã¾ãã å®éã«ã¯æ¬¡ã®ããã«ãããç°¡æ½ã«è¡¨ç¾ã§ãã¾ãã:"
+
+#: index.docbook:226
+msgid "References to composite identifier properties follow the same naming rules. If the entity has a non-identifier property named id, the composite identifier property can only be referenced by its defined named; otherwise, the special <literal>id</literal> property can be used to rerference the identifier property."
+msgstr "<![CDATA[select cat.mate from Cat cat]]>"
+
+#: index.docbook:233
+msgid "Note: this has changed significantly starting in version 3.2.2. In previous versions, <literal>id</literal> <emphasis>always</emphasis> referred to the identifier property no matter what its actual name. A ramification of that decision was that non-identifier properties named <literal>id</literal> could never be referenced in Hibernate queries."
+msgstr "ã¯ã¨ãªã¯ã³ã³ãã¼ãã³ãåã®ããããã£ãå«ããããããå¤åã®ããããã£ãè¿ãã¾ãã:"
+
+#: index.docbook:242
+msgid "The select clause"
+msgstr ""
+ "<![CDATA[select cat.name from DomesticCat cat
+\n"
+ "where cat.name like 'fri%']]>"
+
+#: index.docbook:244
+msgid "The <literal>select</literal> clause picks which objects and properties to return in the query result set. Consider:"
+msgstr "<![CDATA[select cust.name.firstName from Customer as cust]]>"
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[select mate\n"
+ "from Cat as cat\n"
+ " inner join cat.mate as mate]]>"
+msgstr "ã¯ã¨ãªã¯è¤æ°ã®ãªãã¸ã§ã¯ãã¨(ã¾ãã¯)ããããã£ã <literal>Object[]</literal> åã®é
åã¨ãã¦è¿ãã¾ãã"
+
+#: index.docbook:251
+msgid "The query will select <literal>mate</literal>s of other <literal>Cat</literal>s. Actually, you may express this query more compactly as:"
+msgstr ""
+ "<![CDATA[select mother, offspr, mate.name
+\n"
+ "from DomesticCat as mother
+\n"
+ " inner join mother.mate as mate
+\n"
+ " left outer join mother.kittens as offspr]]>"
+
+#: index.docbook:256
+msgid "<![CDATA[select cat.mate from Cat cat]]>"
+msgstr "ããã㯠<literal>List</literal> ã¨ãã¦ã"
+
+#: index.docbook:258
+msgid "Queries may return properties of any value type including properties of component type:"
+msgstr ""
+ "<![CDATA[select new list(mother, offspr, mate.name)
+\n"
+ "from DomesticCat as mother
+\n"
+ " inner join mother.mate as mate
+\n"
+ " left outer join mother.kittens as offspr]]>"
+
+#: index.docbook:262
+msgid ""
+ "<![CDATA[select cat.name from DomesticCat cat\n"
+ "where cat.name like 'fri%']]>"
+msgstr "ã¾ãã¯ãã¿ã¤ãã»ã¼ããªJavaãªãã¸ã§ã¯ããè¿ãã¾ãã"
+
+#: index.docbook:264
+msgid "<![CDATA[select cust.name.firstName from Customer as cust]]>"
+msgstr ""
+ "<![CDATA[select new Family(mother, mate, offspr)
+\n"
+ "from DomesticCat as mother
+\n"
+ " join mother.mate as mate
+\n"
+ " left join mother.kittens as offspr]]>"
+
+#: index.docbook:266
+msgid "Queries may return multiple objects and/or properties as an array of type <literal>Object[]</literal>,"
+msgstr "ããã㯠<literal>Family</literal> ã¯ã©ã¹ãé©åãªã³ã³ã¹ãã©ã¯ã¿ãæã£ã¦ããã¨ãããªãã°ã"
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[select mother, offspr, mate.name\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr "selectç¯ã« <literal>as</literal> ã使ã£ã¦å¥åãã¤ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:273
+msgid "or as a <literal>List</literal>,"
+msgstr ""
+ "<![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n
+\n"
+ "from Cat cat]]>"
+
+#: index.docbook:277
+msgid ""
+ "<![CDATA[select new list(mother, offspr, mate.name)\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr "<literal>select new map</literal> ã¨ä¸ç·ã«ä½¿ãã¨ãã«æãå½¹ç«ã¡ã¾ãï¼"
+
+#: index.docbook:279
+msgid "or as an actual typesafe Java object,"
+msgstr ""
+ "<![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )
+\n"
+ "from Cat cat]]>"
+
+#: index.docbook:283
+msgid ""
+ "<![CDATA[select new Family(mother, mate, offspr)\n"
+ "from DomesticCat as mother\n"
+ " join mother.mate as mate\n"
+ " left join mother.kittens as offspr]]>"
+msgstr "ãã®ã¯ã¨ãªã¯å¥åããselectããå¤ã¸ <literal>Map</literal> ãè¿ãã¾ãã"
+
+#: index.docbook:285
+msgid "assuming that the class <literal>Family</literal> has an appropriate constructor."
+msgstr "éç´é¢æ°"
+
+#: index.docbook:289
+msgid "You may assign aliases to selected expressions using <literal>as</literal>:"
+msgstr "HQLã®ã¯ã¨ãªã¯ããããã£ã®éç´é¢æ°ã®çµæãè¿ãã¾ãï¼"
+
+#: index.docbook:293
+msgid ""
+ "<![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n\n"
+ "from Cat cat]]>"
+msgstr ""
+ "<![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)
+\n"
+ "from Cat cat]]>"
+
+#: index.docbook:295
+msgid "This is most useful when used together with <literal>select new map</literal>:"
+msgstr "ãµãã¼ããã¦ããéç´é¢æ°ã¯ä»¥ä¸ã®ãã®ã§ãã"
+
+#: index.docbook:299
+msgid ""
+ "<![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )\n"
+ "from Cat cat]]>"
+msgstr "avg(...), sum(...), min(...), max(...)"
+
+#: index.docbook:301
+msgid "This query returns a <literal>Map</literal> from aliases to selected values."
+msgstr "count(*)"
+
+#: index.docbook:308
+msgid "Aggregate functions"
+msgstr "count(...), count(distinct ...), count(all...)"
+
+#: index.docbook:310
+msgid "HQL queries may even return the results of aggregate functions on properties:"
+msgstr "selectç¯ã«ããã¦ç®è¡æä½ãé£çµã¨æ¿èªãããSQLé¢æ°ã使ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:314
+msgid ""
+ "<![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)\n"
+ "from Cat cat]]>"
+msgstr ""
+ "<![CDATA[select cat.weight + sum(kitten.weight)
+\n"
+ "from Cat cat
+\n"
+ " join cat.kittens kitten
+\n"
+ "group by cat.id, cat.weight]]>"
+
+#: index.docbook:325
+msgid "The supported aggregate functions are"
+msgstr "<![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]>"
+
+#: index.docbook:332
+msgid "avg(...), sum(...), min(...), max(...)"
+msgstr "SQLã¨åãæå³ãæ㤠<literal>distinct</literal> 㨠<literal>all</literal> ãã¼ã¯ã¼ãã使ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:337
+msgid "count(*)"
+msgstr ""
+ "<![CDATA[select distinct cat.name from Cat cat
+\n"
+ "
+\n"
+ "select count(distinct cat.name), count(cat) from Cat cat]]>"
+
+#: index.docbook:342
+msgid "count(...), count(distinct ...), count(all...)"
+msgstr "ããªã¢ã¼ãã£ãã¯ãªã¯ã¨ãª"
+
+#: index.docbook:347
+msgid "You may use arithmetic operators, concatenation, and recognized SQL functions in the select clause:"
+msgstr "次ã®ãããªã¯ã¨ãªï¼"
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[select cat.weight + sum(kitten.weight)\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.weight]]>"
+msgstr "<![CDATA[from Cat as cat]]>"
+
+#: index.docbook:354
+msgid "<![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]>"
+msgstr "<literal>Cat</literal> ã¤ã³ã¹ã¿ã³ã¹ã ãã§ã¯ãªãã<literal>DomesticCat</literal> ã®ãããªãµãã¯ã©ã¹ãè¿ããã¾ããHibernateã¯ã¨ãªã¯ <emphasis>ã©ããª</emphasis> Javaã¯ã©ã¹ãã¤ã³ã¿ã¼ãã§ã¤ã¹ã <literal>from</literal> ç¯ã«å
¥ãããã¨ãã§ãã¾ãã ã¯ã¨ãªã¯ãã®ã¯ã©ã¹ãæ¡å¼µããããããã¯ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®è£
ããå
¨ã¦ã®æ°¸ç¶ã¯ã©ã¹ãè¿ãã¾ãã 次ã®ã¯ã¨ãªã¯æ°¸ç¶ãªãã¸ã§ã¯ãããã¹ã¦è¿ãã¾ã:"
+
+#: index.docbook:356
+msgid "The <literal>distinct</literal> and <literal>all</literal> keywords may be used and have the same semantics as in SQL."
+msgstr "<![CDATA[from java.lang.Object o]]>"
+
+#: index.docbook:361
+msgid ""
+ "<![CDATA[select distinct cat.name from Cat cat\n"
+ "\n"
+ "select count(distinct cat.name), count(cat) from Cat cat]]>"
+msgstr "<literal>Named</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯æ§ã
ãªæ°¸ç¶ã¯ã©ã¹ã«ãã£ã¦å®è£
ããã¾ãã:"
+
+#: index.docbook:366
+msgid "Polymorphic queries"
+msgstr "<![CDATA[from Named n, Named m where n.name = m.name]]>"
+
+#: index.docbook:368
+msgid "A query like:"
+msgstr "æå¾ã®äºã¤ã®ã¯ã¨ãªã¯ãäºã¤ä»¥ä¸ã®SQL <literal>SELECT</literal> ãè¦æ±ãã¦ãããã¨ã«æ³¨æãã¦ãã ããã ãã®ãã¨ã¯ <literal>order by</literal> ç¯ããªã¶ã«ãã»ããå
¨ä½ãæ£ç¢ºã«ã¯æ´åããªããã¨ãæå³ãã¾ã (ããã«ããã¯ã<literal>Query.scroll()</literal> ã使ç¨ãã¦ãããã®ã¯ã¨ãªãå¼ã¶ãã¨ãã§ããªããã¨ãæå³ãã¾ãã)ã"
+
+#: index.docbook:374
+msgid "returns instances not only of <literal>Cat</literal>, but also of subclasses like <literal>DomesticCat</literal>. Hibernate queries may name <emphasis>any</emphasis> Java class or interface in the <literal>from</literal> clause. The query will return instances of all persistent classes that extend that class or implement the interface. The following query would return all persistent objects:"
+msgstr "<literal>where</literal> ç¯ã¯è¿ãããã¤ã³ã¹ã¿ã³ã¹ã®ãªã¹ããçµããã¨ãã§ãã¾ãã ããå¥åããªãå ´åãååã§ããããã£ãåç
§ãã¾ãã"
+
+#: index.docbook:382
+msgid "<![CDATA[from java.lang.Object o]]>"
+msgstr "<![CDATA[from Cat where name='Fritz']]>"
+
+#: index.docbook:384
+msgid "The interface <literal>Named</literal> might be implemented by various persistent classes:"
+msgstr "ããå¥åãããå ´åã修飾åã使ã£ã¦ãã ããã"
+
+#: index.docbook:389
+msgid "<![CDATA[from Named n, Named m where n.name = m.name]]>"
+msgstr "<![CDATA[from Cat as cat where cat.name='Fritz']]>"
+
+#: index.docbook:391
+msgid "Note that these last two queries will require more than one SQL <literal>SELECT</literal>. This means that the <literal>order by</literal> clause does not correctly order the whole result set. (It also means you can't call these queries using <literal>Query.scroll()</literal>.)"
+msgstr "ååã'Fritz'ã¨ãã <literal>Cat</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ãè¿ãã¾ãã"
+
+#: index.docbook:400
+msgid "The where clause"
+msgstr ""
+ "<![CDATA[select foo
+\n"
+ "from Foo foo, Bar bar
+\n"
+ "where foo.startDate = bar.date]]>"
+
+#: index.docbook:402
+msgid "The <literal>where</literal> clause allows you to narrow the list of instances returned. If no alias exists, you may refer to properties by name:"
+msgstr "ä¸ã®HQLã¯ã<literal>Foo</literal> ã® <literal>startDate</literal> ããããã£ã¨çãã <literal>date</literal> ããããã£ãæã£ã <literal>bar</literal> ã¤ã³ã¹ã¿ã³ã¹ãåå¨ããã ãã¹ã¦ã® <literal>Foo</literal> ã¤ã³ã¹ã¿ã³ã¹ãè¿ãã¾ãã ã³ã³ãã¦ã³ããã¹å¼ï¼ä¾ãã°ãcat.mate.nameãï¼ã¯ <literal>where</literal> ç¯ãé常ã«å¼·åã«ãã¾ãã注ç®ï¼"
+
+#: index.docbook:407
+msgid "<![CDATA[from Cat where name='Fritz']]>"
+msgstr "<![CDATA[from Cat cat where cat.mate.name is not null]]>"
+
+#: index.docbook:409
+msgid "If there is an alias, use a qualified property name:"
+msgstr "ãã®ã¯ã¨ãªã¯ãã¼ãã«çµåï¼å
é¨çµåï¼ãæã¤SQLã¯ã¨ãªã«å¤æããã¾ãã ãã®ä»£ããã«ä»¥ä¸ã®ããã«æ¸ãã¨ã"
+
+#: index.docbook:413
+msgid "<![CDATA[from Cat as cat where cat.name='Fritz']]>"
+msgstr ""
+ "<![CDATA[from Foo foo
+\n"
+ "where foo.bar.baz.customer.address.city is not null]]>"
+
+#: index.docbook:415
+msgid "returns instances of <literal>Cat</literal> named 'Fritz'."
+msgstr "ããä¸ã®ã¯ã¨ãªãè¨è¿°ãããã¯ã¨ãªå
ã«4ã¤ã®ãã¼ãã«çµåãå¿
è¦ã¨ããSQLã¯ã¨ãªã«å¤æããã¾ãã"
+
+#: index.docbook:419
+msgid ""
+ "<![CDATA[select foo\n"
+ "from Foo foo, Bar bar\n"
+ "where foo.startDate = bar.date]]>"
+msgstr "<literal>=</literal> æ¼ç®åã¯ä»¥ä¸ã®ããã«ãããããã£ã ãã§ãªãã¤ã³ã¹ã¿ã³ã¹ãæ¯è¼ããããã«ã使ããã¾ããï¼"
+
+#: index.docbook:421
+msgid "will return all instances of <literal>Foo</literal> for which there exists an instance of <literal>bar</literal> with a <literal>date</literal> property equal to the <literal>startDate</literal> property of the <literal>Foo</literal>. Compound path expressions make the <literal>where</literal> clause extremely powerful. Consider:"
+msgstr "<![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]>"
+
+#: index.docbook:430
+msgid "<![CDATA[from Cat cat where cat.mate.name is not null]]>"
+msgstr ""
+ "<![CDATA[select cat, mate
+\n"
+ "from Cat cat, Cat mate
+\n"
+ "where cat.mate = mate]]>"
+
+#: index.docbook:432
+msgid "This query translates to an SQL query with a table (inner) join. If you were to write something like"
+msgstr "<literal>id</literal> (å°æå)ã¯ç¹å¥ãªããããã£ã§ããã ãªãã¸ã§ã¯ãã®ã¦ãã¼ã¯ãªèå¥åãåç
§ããããã«ä½¿ç¨ã§ãã¾ãã(ããã«ããã®ããããã£åã使ç¨ã§ãã¾ãã)"
+
+#: index.docbook:437
+msgid ""
+ "<![CDATA[from Foo foo\n"
+ "where foo.bar.baz.customer.address.city is not null]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat where cat.id = 123
+\n"
+ "
+\n"
+ "from Cat as cat where cat.mate.id = 69]]>"
+
+#: index.docbook:439
+msgid "you would end up with a query that would require four table joins in SQL."
+msgstr "2çªç®ã®ã¯ã¨ãªã¯å¹ççã§ãããã¼ãã«çµåãå¿
è¦ããã¾ããï¼"
+
+#: index.docbook:443
+msgid "The <literal>=</literal> operator may be used to compare not only properties, but also instances:"
+msgstr "ã¾ãè¤åèå¥åã®ããããã£ã使ç¨ã§ãã¾ãããã㧠<literal>Person</literal> ã <literal>country</literal> 㨠<literal>medicareNumber</literal> ãããªãè¤åèå¥åãæã¤ã¨ä»®å®ãã¾ãã"
+
+#: index.docbook:448
+msgid "<![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]>"
+msgstr ""
+ "<![CDATA[from bank.Person person
+\n"
+ "where person.id.country = 'AU'
+\n"
+ " and person.id.medicareNumber = 123456]]>"
+
+#: index.docbook:450
+msgid ""
+ "<![CDATA[select cat, mate\n"
+ "from Cat cat, Cat mate\n"
+ "where cat.mate = mate]]>"
+msgstr ""
+ "<![CDATA[from bank.Account account
+\n"
+ "where account.owner.id.country = 'AU'
+\n"
+ " and account.owner.id.medicareNumber = 123456]]>"
+
+#: index.docbook:452
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the unique identifier of an object. See <xref linkend=\"queryhql-identifier-property\"/> for more information."
+msgstr "ããä¸åº¦è¨ãã¾ããã2çªç®ã®ã¯ã¨ãªã«ã¯ãã¼ãã«çµåãå¿
è¦ããã¾ããã"
+
+#: index.docbook:458
+msgid ""
+ "<![CDATA[from Cat as cat where cat.id = 123\n"
+ "\n"
+ "from Cat as cat where cat.mate.id = 69]]>"
+msgstr "åæ§ã« <literal>class</literal> ã¯ç¹å¥ãªããããã£ã§ããã ããªã¢ã¼ãã£ãã¯ãªæ°¸ç¶åã«ãããã¤ã³ã¹ã¿ã³ã¹ã®discriminatorå¤ã«ã¢ã¯ã»ã¹ãã¾ãã whereç¯ã«åãè¾¼ã¾ããJavaã®ã¯ã©ã¹åã¯ãã®discriminatorå¤ã«å¤æããã¾ãã"
+
+#: index.docbook:460
+msgid "The second query is efficient. No table join is required!"
+msgstr "<![CDATA[from Cat cat where cat.class = DomesticCat]]>"
+
+#: index.docbook:464
+msgid "Properties of composite identifiers may also be used. Suppose <literal>Person</literal> has a composite identifier consisting of <literal>country</literal> and <literal>medicareNumber</literal>. Again, see <xref linkend=\"queryhql-identifier-property\"/> for more information regarding referencing identifier properties."
+msgstr "ã¾ãã³ã³ãã¼ãã³ããè¤åã¦ã¼ã¶å(ã¾ããã®ã³ã³ãã¼ãã³ãã®ã³ã³ãã¼ãã³ããªã©)ã®ããããã£ãæå®ã§ãã¾ãã ããã決ãã¦ï¼ã³ã³ãã¼ãã³ãã®ããããã£ã§ã¯ãªãï¼ã³ã³ãã¼ãã³ãåã®ããããã£ã§çµäºãããã¹å¼ã使ããªãã§ãã ããã ä¾ãã°ãã <literal>store.owner</literal> ã <literal>address</literal> ã³ã³ãã¼ãã³ããæã¤ã¨ã³ãã£ãã£ãªãã°ä»¥ä¸ã®ãããªçµæã¨ãªãã¾ãã"
+
+#: index.docbook:471
+msgid ""
+ "<![CDATA[from bank.Person person\n"
+ "where person.id.country = 'AU'\n"
+ " and person.id.medicareNumber = 123456]]>"
+msgstr ""
+ "<![CDATA[store.owner.address.city // okay
+\n"
+ "store.owner.address // error!]]>"
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[from bank.Account account\n"
+ "where account.owner.id.country = 'AU'\n"
+ " and account.owner.id.medicareNumber = 123456]]>"
+msgstr "\"any\"åã¯ç¹å¥ãªããããã£ã§ãã <literal>id</literal> 㨠<literal>class</literal> ãæã¡ã 以ä¸ã®æ¹æ³ã§çµåã表ç¾ãããã¨ãå¯è½ã«ãã¾ã(<literal>AuditLog.item</literal> 㯠<literal><any></literal> ã§ãããã³ã°ãããããããã£ã§ã)ã"
+
+#: index.docbook:475
+msgid "Once again, the second query requires no table join."
+msgstr ""
+ "<![CDATA[from AuditLog log, Payment payment
+\n"
+ "where log.item.class = 'Payment' and log.item.id = payment.id]]>"
+
+#: index.docbook:479
+msgid "Likewise, the special property <literal>class</literal> accesses the discriminator value of an instance in the case of polymorphic persistence. A Java class name embedded in the where clause will be translated to its discriminator value."
+msgstr "<literal>log.item.class</literal> 㨠<literal>payment.class</literal> ã ä¸è¨ã®ã¯ã¨ãªä¸ã§å
¨ãç°ãªããã¼ã¿ãã¼ã¹ã«ã©ã ã®å¤ãåç
§ããã¨ãããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:485
+msgid "<![CDATA[from Cat cat where cat.class = DomesticCat]]>"
+msgstr "Expressions å¼"
+
+#: index.docbook:487
+msgid "You may also use components or composite user types, or properties of said component types. See <xref linkend=\"queryhql-coomponents\"/> for more details."
+msgstr "SQLã® <literal>where</literal> ç¯ã§è¨è¿°ãããã¨ãåºæ¥ãå¼ã®ã»ã¨ãã©ãHQLã§ãè¨è¿°ã§ãã¾ãã:"
+
+#: index.docbook:492
+msgid "An \"any\" type has the special properties <literal>id</literal> and <literal>class</literal>, allowing us to express a join in the following way (where <literal>AuditLog.item</literal> is a property mapped with <literal><any></literal>)."
+msgstr "ç®è¡æ¼ç®åï¼<literal>+, -, *, /</literal>"
+
+#: index.docbook:498
+msgid ""
+ "<![CDATA[from AuditLog log, Payment payment\n"
+ "where log.item.class = 'Payment' and log.item.id = payment.id]]>"
+msgstr "2é
æ¯è¼æ¼ç®åï¼<literal>=, >=, <=, <>, !=, like</literal>"
+
+#: index.docbook:500
+msgid "Notice that <literal>log.item.class</literal> and <literal>payment.class</literal> would refer to the values of completely different database columns in the above query."
+msgstr "è«çæ¼ç®åï¼<literal>and, or, not</literal>"
+
+#: index.docbook:508
+msgid "Expressions"
+msgstr "ã°ã«ã¼ãåãã表ãæ¬å¼§ï¼<literal>( )</literal>"
+
+#: index.docbook:510
+msgid "Expressions allowed in the <literal>where</literal> clause include most of the kind of things you could write in SQL:"
+msgstr "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> and <literal>not member of</literal>"
+
+#: index.docbook:517
+msgid "mathematical operators <literal>+, -, *, /</literal>"
+msgstr "\"ã·ã³ãã«\"ãªcase <literal>case ... when ... then ... else ... end</literal>ã \"æ¢ç´¢ç\"ãªcase <literal>case when ... then ... else ... end</literal>"
+
+#: index.docbook:522
+msgid "binary comparison operators <literal>=, >=, <=, <>, !=, like</literal>"
+msgstr "ã¹ããªã³ã°ã®é£çµ <literal>...||...</literal> ã¾ã㯠<literal>concat(...,...)</literal>"
+
+#: index.docbook:527
+msgid "logical operations <literal>and, or, not</literal>"
+msgstr "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+
+#: index.docbook:532
+msgid "Parentheses <literal>( )</literal>, indicating grouping"
+msgstr "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+
+#: index.docbook:537
+msgid "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> and <literal>not member of</literal>"
+msgstr "EJB-QL 3.0ã§å®ç¾©ããã¦ããé¢æ°ãæ¼ç®å: <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length()</literal>"
+
+#: index.docbook:550
+msgid "\"Simple\" case, <literal>case ... when ... then ... else ... end</literal>, and \"searched\" case, <literal>case when ... then ... else ... end</literal>"
+msgstr "<literal>coalesce()</literal> 㨠<literal>nullif()</literal>"
+
+#: index.docbook:556
+msgid "string concatenation <literal>...||...</literal> or <literal>concat(...,...)</literal>"
+msgstr "æ°åãæéã®å¤ãStringã«ã³ã³ãã¼ããã <literal>str()</literal>ï¼"
+
+#: index.docbook:561
+msgid "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+msgstr "2çªç®ã®å¼æ°ãHibernateåã®ååã§ãã <literal>cast(... as ...)</literal> 㨠<literal>extract(... from ...)</literal>ã ãã ã使ç¨ãããã¼ã¿ãã¼ã¹ãANSI <literal>cast()</literal> 㨠<literal>extract()</literal> ããµãã¼ãããå ´åã«éãã¾ãã"
+
+#: index.docbook:567
+msgid "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+msgstr "çµåããã¤ã³ããã¯ã¹ä»ãã®ã³ã¬ã¯ã·ã§ã³ã®å¥åã«é©ç¨ãããHQLã® <literal>index()</literal> é¢æ°ã"
+
+#: index.docbook:574
+msgid "Any function or operator defined by EJB-QL 3.0: <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()</literal>"
+msgstr "ã³ã¬ã¯ã·ã§ã³å¤ã®ãã¹å¼ãåãHQLé¢æ°ï¼ <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal> ã <literal>some, all, exists, any, in</literal> ã使ã£ã¦ä¿®é£¾ãããã¨ãã§ããç¹å¥ãª <literal>elements()</literal> 㨠<literal>indices</literal> é¢æ°ã¨ä¸ç·ã«ä½¿ãã¾ãã"
+
+#: index.docbook:580
+msgid "<literal>coalesce()</literal> and <literal>nullif()</literal>"
+msgstr "<literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal> ã®ãããªãã¼ã¿ãã¼ã¹ããµãã¼ãããSQLã¹ã«ã©é¢æ°ã"
+
+#: index.docbook:585
+msgid "<literal>str()</literal> for converting numeric or temporal values to a readable string"
+msgstr "JDBCã¹ã¿ã¤ã«ã®ä½ç½®ãã©ã¡ã¼ã¿ <literal>?</literal>"
+
+#: index.docbook:591
+msgid "<literal>cast(... as ...)</literal>, where the second argument is the name of a Hibernate type, and <literal>extract(... from ...)</literal> if ANSI <literal>cast()</literal> and <literal>extract()</literal> is supported by the underlying database"
+msgstr "ååä»ããã©ã¡ã¼ã¿: <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+
+#: index.docbook:599
+msgid "the HQL <literal>index()</literal> function, that applies to aliases of a joined indexed collection"
+msgstr "SQLãªãã©ã«ï¼<literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+
+#: index.docbook:605
+msgid "HQL functions that take collection-valued path expressions: <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal>, along with the special <literal>elements()</literal> and <literal>indices</literal> functions which may be quantified using <literal>some, all, exists, any, in</literal>."
+msgstr "Javaã® <literal>public static final</literal> å®æ°ï¼<literal>eg.Color.TABBY</literal>"
+
+#: index.docbook:613
+msgid "Any database-supported SQL scalar function like <literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>"
+msgstr "<literal>in</literal> 㨠<literal>between</literal> ã¯ä»¥ä¸ã®ããã«ä½¿ç¨ã§ãã¾ãã:"
+
+#: index.docbook:619
+msgid "JDBC-style positional parameters <literal>?</literal>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]>"
+
+#: index.docbook:624
+msgid "named parameters <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]>"
+
+#: index.docbook:629
+msgid "SQL literals <literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+msgstr "ã¾ããå¦å®å½¢ã§è¨è¿°ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:635
+msgid "Java <literal>public static final</literal> constants <literal>eg.Color.TABBY</literal>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]>"
+
+#: index.docbook:641
+msgid "<literal>in</literal> and <literal>between</literal> may be used as follows:"
+msgstr "<![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]>"
+
+#: index.docbook:645
+msgid "<![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]>"
+msgstr "åæ§ã« <literal>is null</literal> ã <literal>is not null</literal> ã¯nullå¤ããã¹ãããããã«ä½¿ç¨ã§ãã¾ãã"
+
+#: index.docbook:647
+msgid "<![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr "Hibernateè¨å®ãã¡ã¤ã«ã§HQL query substitutionsãå®ç¾©ããã°ãbooleanå¤ãå¼ã®ä¸ã§ç°¡åã«ä½¿ç¨ã§ãã¾ãï¼"
+
+#: index.docbook:649
+msgid "and the negated forms may be written"
+msgstr "<![CDATA[<property name=\"hibernate.query.substitutions\">true 1, false 0</property>]]>"
+
+#: index.docbook:653
+msgid "<![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]>"
+msgstr "ãããããã¨ã§ä¸è¨ã®HQLãSQLã«å¤æããã¨ãã« <literal>true</literal> , <literal>false</literal> ãã¼ã¯ã¼ã㯠<literal>1</literal> , <literal>0</literal> ã«ç½®ãæãããã¾ãã:"
+
+#: index.docbook:655
+msgid "<![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr "<![CDATA[from Cat cat where cat.alive = true]]>"
+
+#: index.docbook:657
+msgid "Likewise, <literal>is null</literal> and <literal>is not null</literal> may be used to test for null values."
+msgstr "ç¹å¥ãªãããã㣠<literal>size</literal>ãã¾ãã¯ç¹å¥ãªé¢æ° <literal>size()</literal> ã使ã£ã¦ã³ã¬ã¯ã·ã§ã³ã®ãµã¤ãºããã¹ãã§ãã¾ãã:"
+
+#: index.docbook:662
+msgid "Booleans may be easily used in expressions by declaring HQL query substitutions in Hibernate configuration:"
+msgstr "<![CDATA[from Cat cat where cat.kittens.size > 0]]>"
+
+#: index.docbook:667
+msgid "<![CDATA[<property name=\"hibernate.query.substitutions\">true 1, false 0</property>]]>"
+msgstr "<![CDATA[from Cat cat where size(cat.kittens) > 0]]>"
+
+#: index.docbook:669
+msgid "This will replace the keywords <literal>true</literal> and <literal>false</literal> with the literals <literal>1</literal> and <literal>0</literal> in the translated SQL from this HQL:"
+msgstr "ã¤ã³ããã¯ã¹ä»ãã®ã³ã¬ã¯ã·ã§ã³ã§ã¯ã<literal>minindex</literal> 㨠<literal>maxindex</literal> é¢æ°ã使ã£ã¦ãã¤ã³ããã¯ã¹ã®æå°å¤ã¨æ大å¤ãåç
§ã§ãã¾ãã åæ§ã«ã<literal>minelement</literal> 㨠<literal>maxelement</literal> ã使ã£ã¦ã åºæ¬åã®ã³ã¬ã¯ã·ã§ã³è¦ç´ ã®æå°å¤ã¨æ大å¤ãåç
§ã§ãã¾ãã"
+
+#: index.docbook:674
+msgid "<![CDATA[from Cat cat where cat.alive = true]]>"
+msgstr "<![CDATA[from Calendar cal where maxelement(cal.holidays) > current_date]]>"
+
+#: index.docbook:676
+msgid "You may test the size of a collection with the special property <literal>size</literal>, or the special <literal>size()</literal> function."
+msgstr "<![CDATA[from Order order where maxindex(order.items) > 100]]>"
+
+#: index.docbook:681
+msgid "<![CDATA[from Cat cat where cat.kittens.size > 0]]>"
+msgstr "<![CDATA[from Order order where minelement(order.items) > 10000]]>"
+
+#: index.docbook:683
+msgid "<![CDATA[from Cat cat where size(cat.kittens) > 0]]>"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ãã¤ã³ããã¯ã¹ã®ã»ããï¼<literal>elements</literal> 㨠<literal>indices</literal> é¢æ°ï¼ãã¾ãã¯å¯åãåããï¼å¾è¿°ï¼ã®çµæãåãåããã¨ãã¯ã SQLé¢æ° <literal>any, some, all, exists, in</literal> ããµãã¼ãããã¾ãã"
+
+#: index.docbook:685
+msgid "For indexed collections, you may refer to the minimum and maximum indices using <literal>minindex</literal> and <literal>maxindex</literal> functions. Similarly, you may refer to the minimum and maximum elements of a collection of basic type using the <literal>minelement</literal> and <literal>maxelement</literal> functions."
+msgstr ""
+ "<![CDATA[select mother from Cat as mother, Cat as kit
+\n"
+ "where kit in elements(foo.kittens)]]>"
+
+#: index.docbook:693
+msgid "<![CDATA[from Calendar cal where maxelement(cal.holidays) > current_date]]>"
+msgstr ""
+ "<![CDATA[select p from NameList list, Person p
+\n"
+ "where p.name = some elements(list.names)]]>"
+
+#: index.docbook:695
+msgid "<![CDATA[from Order order where maxindex(order.items) > 100]]>"
+msgstr "<![CDATA[from Cat cat where exists elements(cat.kittens)]]>"
+
+#: index.docbook:697
+msgid "<![CDATA[from Order order where minelement(order.items) > 10000]]>"
+msgstr "<![CDATA[from Player p where 3 > all elements(p.scores)]]>"
+
+#: index.docbook:699
+msgid "The SQL functions <literal>any, some, all, exists, in</literal> are supported when passed the element or index set of a collection (<literal>elements</literal> and <literal>indices</literal> functions) or the result of a subquery (see below)."
+msgstr "<![CDATA[from Show show where 'fizard' in indices(show.acts)]]>"
+
+#: index.docbook:705
+msgid ""
+ "<![CDATA[select mother from Cat as mother, Cat as kit\n"
+ "where kit in elements(foo.kittens)]]>"
+msgstr "<literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal> ã¯Hibernate3ã®whereç¯ã ãã§å©ç¨å¯è½ã§ãããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:707
+msgid ""
+ "<![CDATA[select p from NameList list, Person p\n"
+ "where p.name = some elements(list.names)]]>"
+msgstr "ã¤ã³ããã¯ã¹ä»ãã®ã³ã¬ã¯ã·ã§ã³ï¼arrays, lists, mapsï¼ã®è¦ç´ ã¯ã ã¤ã³ããã¯ã¹ã§åç
§ã§ãã¾ãï¼whereç¯å
ã§ã®ã¿ï¼ã"
+
+#: index.docbook:709
+msgid "<![CDATA[from Cat cat where exists elements(cat.kittens)]]>"
+msgstr "<![CDATA[from Order order where order.items[0].id = 1234]]>"
+
+#: index.docbook:711
+msgid "<![CDATA[from Player p where 3 > all elements(p.scores)]]>"
+msgstr ""
+ "<![CDATA[select person from Person person, Calendar calendar
+\n"
+ "where calendar.holidays['national day'] = person.birthDay
+\n"
+ " and person.nationality.calendar = calendar]]>"
+
+#: index.docbook:713
+msgid "<![CDATA[from Show show where 'fizard' in indices(show.acts)]]>"
+msgstr ""
+ "<![CDATA[select item from Item item, Order order
+\n"
+ "where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11]]>"
+
+#: index.docbook:715
+msgid "Note that these constructs - <literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal> - may only be used in the where clause in Hibernate3."
+msgstr ""
+ "<![CDATA[select item from Item item, Order order
+\n"
+ "where order.items[ maxindex(order.items) ] = item and order.id = 11]]>"
+
+#: index.docbook:722
+msgid "Elements of indexed collections (arrays, lists, maps) may be referred to by index (in a where clause only):"
+msgstr "<literal>[]</literal> å
é¨ã®å¼ã¯ãç®è¡å¼ã§ãæ§ãã¾ããã"
+
+#: index.docbook:727
+msgid "<![CDATA[from Order order where order.items[0].id = 1234]]>"
+msgstr ""
+ "<![CDATA[select item from Item item, Order order
+\n"
+ "where order.items[ size(order.items) - 1 ] = item]]>"
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[select person from Person person, Calendar calendar\n"
+ "where calendar.holidays['national day'] = person.birthDay\n"
+ " and person.nationality.calendar = calendar]]>"
+msgstr "ä¸å¯¾å¤é¢é£ãå¤ã®ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ã«å¯¾ãã¦ã¯ãHQLã¯çµã¿è¾¼ã¿ã® <literal>index()</literal> é¢æ°ãç¨æãã¦ãã¾ãã"
+
+#: index.docbook:731
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11]]>"
+msgstr ""
+ "<![CDATA[select item, index(item) from Order order
+\n"
+ " join order.items item
+\n"
+ "where index(item) < 5]]>"
+
+#: index.docbook:733
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ maxindex(order.items) ] = item and order.id = 11]]>"
+msgstr "ãã¼ã¹ã¨ãªããã¼ã¿ãã¼ã¹ããµãã¼ããã¦ããã¹ã«ã©ã¼SQLé¢æ°ã使ç¨ã§ãã¾ã"
+
+#: index.docbook:735
+msgid "The expression inside <literal>[]</literal> may even be an arithmetic expression."
+msgstr "<![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]>"
+
+#: index.docbook:739
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ size(order.items) - 1 ] = item]]>"
+msgstr "ããã¾ã å
¨ã¦ãç解ãã¦ããªããªããä¸ã®ã¯ã¨ãªãSQLã§ã©ãã ãé·ããèªã¿ã¥ããåºæ¥ããèãã¦ãã ããã:"
+
+#: index.docbook:741
+msgid "HQL also provides the built-in <literal>index()</literal> function, for elements of a one-to-many association or collection of values."
+msgstr ""
+ "<![CDATA[select cust
+\n"
+ "from Product prod,
+\n"
+ " Store store
+\n"
+ " inner join store.customers cust
+\n"
+ "where prod.name = 'widget'
+\n"
+ " and store.location.name in ( 'Melbourne', 'Sydney' )
+\n"
+ " and prod = all elements(cust.currentOrder.lineItems)]]>"
+
+#: index.docbook:746
+msgid ""
+ "<![CDATA[select item, index(item) from Order order\n"
+ " join order.items item\n"
+ "where index(item) < 5]]>"
+msgstr "<emphasis>ãã³ã:</emphasis> ä¾ãã°ãã®ããã«åºæ¥ã¾ãã"
+
+#: index.docbook:748
+msgid "Scalar SQL functions supported by the underlying database may be used"
+msgstr ""
+ "<![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order
+\n"
+ "FROM customers cust,
+\n"
+ " stores store,
+\n"
+ " locations loc,
+\n"
+ " store_customers sc,
+\n"
+ " product prod
+\n"
+ "WHERE prod.name = 'widget'
+\n"
+ " AND store.loc_id = loc.id
+\n"
+ " AND loc.name IN ( 'Melbourne', 'Sydney' )
+\n"
+ " AND sc.store_id = store.id
+\n"
+ " AND sc.cust_id = cust.id
+\n"
+ " AND prod.id = ALL(
+\n"
+ " SELECT item.prod_id
+\n"
+ " FROM line_items item, orders o
+\n"
+ " WHERE item.order_id = o.id
+\n"
+ " AND cust.current_order = o.id
+\n"
+ " )]]>"
+
+#: index.docbook:752
+msgid "<![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]>"
+msgstr "order byç¯"
+
+#: index.docbook:754
+msgid "If you are not yet convinced by all this, think how much longer and less readable the following query would be in SQL:"
+msgstr "ã¯ã¨ãªãè¿ãlistã¯ãè¿ãããã¯ã©ã¹ãã³ã³ãã¼ãã³ãã®ä»»æã®å±æ§ã«ãã£ã¦ä¸¦ã¹æ¿ãããã¾ããï¼"
+
+#: index.docbook:759
+msgid ""
+ "<![CDATA[select cust\n"
+ "from Product prod,\n"
+ " Store store\n"
+ " inner join store.customers cust\n"
+ "where prod.name = 'widget'\n"
+ " and store.location.name in ( 'Melbourne', 'Sydney' )\n"
+ " and prod = all elements(cust.currentOrder.lineItems)]]>"
+msgstr ""
+ "<![CDATA[from DomesticCat cat
+\n"
+ "order by cat.name asc, cat.weight desc, cat.birthdate]]>"
+
+#: index.docbook:761
+msgid "<emphasis>Hint:</emphasis> something like"
+msgstr "ãªãã·ã§ã³ã® <literal>asc</literal> 㨠<literal>desc</literal> ã¯ããããæé ãéé ã®æ´åã示ãã¾ãã"
+
+#: index.docbook:765
+msgid ""
+ "<![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order\n"
+ "FROM customers cust,\n"
+ " stores store,\n"
+ " locations loc,\n"
+ " store_customers sc,\n"
+ " product prod\n"
+ "WHERE prod.name = 'widget'\n"
+ " AND store.loc_id = loc.id\n"
+ " AND loc.name IN ( 'Melbourne', 'Sydney' )\n"
+ " AND sc.store_id = store.id\n"
+ " AND sc.cust_id = cust.id\n"
+ " AND prod.id = ALL(\n"
+ " SELECT item.prod_id\n"
+ " FROM line_items item, orders o\n"
+ " WHERE item.order_id = o.id\n"
+ " AND cust.current_order = o.id\n"
+ " )]]>"
+msgstr "group byç¯"
+
+#: index.docbook:770
+msgid "The order by clause"
+msgstr "éç´å¤ãè¿ãã¯ã¨ãªã¯ãè¿ãããã¯ã©ã¹ãã³ã³ãã¼ãã³ãã®ä»»æã®ããããã£ã«ãã£ã¦ã°ã«ã¼ãåã§ãã¾ãã:"
+
+#: index.docbook:772
+msgid "The list returned by a query may be ordered by any property of a returned class or components:"
+msgstr ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)
+\n"
+ "from Cat cat
+\n"
+ "group by cat.color]]>"
+
+#: index.docbook:776
+msgid ""
+ "<![CDATA[from DomesticCat cat\n"
+ "order by cat.name asc, cat.weight desc, cat.birthdate]]>"
+msgstr ""
+ "<![CDATA[select foo.id, avg(name), max(name)
+\n"
+ "from Foo foo join foo.names name
+\n"
+ "group by foo.id]]>"
+
+#: index.docbook:778
+msgid "The optional <literal>asc</literal> or <literal>desc</literal> indicate ascending or descending order respectively."
+msgstr "<literal>having</literal> ç¯ã使ãã¾ãã"
+
+#: index.docbook:785
+msgid "The group by clause"
+msgstr ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)
+\n"
+ "from Cat cat
+\n"
+ "group by cat.color
+\n"
+ "having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]>"
+
+#: index.docbook:787
+msgid "A query that returns aggregate values may be grouped by any property of a returned class or components:"
+msgstr "ãã使ç¨ãããã¼ã¿ãã¼ã¹ããµãã¼ããã¦ãããªãã <literal>having</literal> 㨠<literal>order by</literal> ç¯ã§SQLé¢æ°ã¨éç´é¢æ°ã使ãã¾ã ï¼ä¾ãã°MySQLã«ã¯ããã¾ããï¼ã"
+
+#: index.docbook:791
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color]]>"
+msgstr ""
+ "<![CDATA[select cat
+\n"
+ "from Cat cat
+\n"
+ " join cat.kittens kitten
+\n"
+ "group by cat
+\n"
+ "having avg(kitten.weight) > 100
+\n"
+ "order by count(kitten) asc, sum(kitten.weight) desc]]>"
+
+#: index.docbook:793
+msgid ""
+ "<![CDATA[select foo.id, avg(name), max(name)\n"
+ "from Foo foo join foo.names name\n"
+ "group by foo.id]]>"
+msgstr "<literal>group by</literal> ç¯ã <literal>order by</literal> ç¯ã« ç®è¡å¼ãå«ããã¨ãã§ããªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:795
+msgid "A <literal>having</literal> clause is also allowed."
+msgstr "å¯åãåãã"
+
+#: index.docbook:799
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color\n"
+ "having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]>"
+msgstr "ãµãã»ã¬ã¯ãããµãã¼ããããã¼ã¿ãã¼ã¹ã®ãããHibernateã¯å¯åãåããããµãã¼ããã¦ãã¾ãã å¯åãåããã¯æ¬å¼§ã§å²ã¾ãªããã°ãªãã¾ããï¼SQLã®éç´é¢æ°å¼ã³åºãã«ããäºãå¤ãã§ãï¼ã é¢é£å¯åãåãã(å¤é¨ã¯ã¨ãªä¸ã®å¥åãåç
§ããå¯åãåããã®ãã¨)ãã許å¯ããã¾ãã"
+
+#: index.docbook:801
+msgid "SQL functions and aggregate functions are allowed in the <literal>having</literal> and <literal>order by</literal> clauses, if supported by the underlying database (eg. not in MySQL)."
+msgstr ""
+ "<![CDATA[from Cat as fatcat
+\n"
+ "where fatcat.weight > (
+\n"
+ " select avg(cat.weight) from DomesticCat cat
+\n"
+ ")]]>"
+
+#: index.docbook:807
+msgid ""
+ "<![CDATA[select cat\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.name, cat.other, cat.properties\n"
+ "having avg(kitten.weight) > 100\n"
+ "order by count(kitten) asc, sum(kitten.weight) desc]]>"
+msgstr ""
+ "<![CDATA[from DomesticCat as cat
+\n"
+ "where cat.name = some (
+\n"
+ " select name.nickName from Name as name
+\n"
+ ")]]>"
+
+#: index.docbook:809
+msgid "Note that neither the <literal>group by</literal> clause nor the <literal>order by</literal> clause may contain arithmetic expressions. Also note that Hibernate currently does not expand a grouped entity, so you can't write <literal>group by cat</literal> if all properties of <literal>cat</literal> are non-aggregated. You have to list all non-aggregated properties explicitly."
+msgstr ""
+ "<![CDATA[from Cat as cat
+\n"
+ "where not exists (
+\n"
+ " from Cat as mate where mate.mate = cat
+\n"
+ ")]]>"
+
+#: index.docbook:821
+msgid "Subqueries"
+msgstr ""
+ "<![CDATA[from DomesticCat as cat
+\n"
+ "where cat.name not in (
+\n"
+ " select name.nickName from Name as name
+\n"
+ ")]]>"
+
+#: index.docbook:823
+msgid "For databases that support subselects, Hibernate supports subqueries within queries. A subquery must be surrounded by parentheses (often by an SQL aggregate function call). Even correlated subqueries (subqueries that refer to an alias in the outer query) are allowed."
+msgstr ""
+ "<![CDATA[select cat.id, (select max(kit.weight) from cat.kitten kit)
+\n"
+ "from Cat as cat]]>"
+
+#: index.docbook:829
+msgid ""
+ "<![CDATA[from Cat as fatcat\n"
+ "where fatcat.weight > (\n"
+ " select avg(cat.weight) from DomesticCat cat\n"
+ ")]]>"
+msgstr "HQLå¯åãåããã¯ãselectã¾ãã¯whereç¯ã ãã§ä½¿ããããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:831
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name = some (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr "selectãªã¹ãã«è¤æ°ã®å¼ãæã¤å¯åãåããã«ã¯ãã¿ãã«ã使ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:833
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not exists (\n"
+ " from Cat as mate where mate.mate = cat\n"
+ ")]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat
+\n"
+ "where not ( cat.name, cat.color ) in (
+\n"
+ " select cat.name, cat.color from DomesticCat cat
+\n"
+ ")]]>"
+
+#: index.docbook:835
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name not in (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr "ããã¤ãã®ãã¼ã¿ãã¼ã¹ï¼OracleãHSQLã«ã¯ããã¾ããï¼ã§ã¯ã ä»ã®ã³ã³ããã¹ãã§ãã¿ãã«ã使ãã¾ãã ä¾ãã°ãã¯ã¨ãªã³ã³ãã¼ãã³ããè¤åã¦ã¼ã¶åã«ããã¦ã§ãã"
+
+#: index.docbook:837
+msgid ""
+ "<![CDATA[select cat.id, (select max(kit.weight) from cat.kitten kit)\n"
+ "from Cat as cat]]>"
+msgstr "<![CDATA[from Person where name = ('Gavin', 'A', 'King')]]>"
+
+#: index.docbook:839
+msgid "Note that HQL subqueries may occur only in the select or where clauses."
+msgstr "åçã§ãããããåé·ãªã¯ã¨ãªã§ãï¼"
+
+#: index.docbook:843
+msgid "Note that subqueries can also utilize <literal>row value constructor</literal> syntax. See <xref linkend=\"queryhql-tuple\"/> for more details."
+msgstr "<![CDATA[from Person where name.first = 'Gavin' and name.initial = 'A' and name.last = 'King')]]>"
+
+#: index.docbook:851
+msgid "HQL examples"
+msgstr "ãã®ãããªãã¨ãããããªãã®ã«ã¯2ã¤ã®çç±ãããã¾ãï¼ 1ã¤ç®ã¯ããã¼ã¿ãã¼ã¹ãã©ãããã©ã¼ã éã§å®å
¨ãªäºææ§ã¯ãªãããã§ãã 2ã¤ç®ã¯ãã¯ã¨ãªããããã³ã°ããã¥ã¡ã³ãã®ããããã£ã®é åºã«ä¾åããããã§ãã"
+
+#: index.docbook:853
+msgid "Hibernate queries can be quite powerful and complex. In fact, the power of the query language is one of Hibernate's main selling points. Here are some example queries very similar to queries that I used on a recent project. Note that most queries you will write are much simpler than these!"
+msgstr "HQLã®ä¾"
+
+#: index.docbook:859
+msgid "The following query returns the order id, number of items and total value of the order for all unpaid orders for a particular customer and given minimum total value, ordering the results by total value. In determining the prices, it uses the current catalog. The resulting SQL query, against the <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal> and <literal>PRICE</literal> tables has four inner joins and an (uncorrelated) subselect."
+msgstr "Hibernateã¯ã¨ãªã¯é常ã«å¼·åã§è¤éã«ã§ãã¾ããå®éãã¯ã¨ãªè¨èªã®å¨åã¯Hibernateã®ä¸»è¦ãªã»ã¼ã«ã¹ãã¤ã³ãã®ä¸ã¤ã§ãã ããã«æè¿ã®ããã¸ã§ã¯ãã§ä½¿ç¨ããã¯ã¨ãªã¨é常ã«ããä¼¼ãä¾ãããã¾ãã ã»ã¨ãã©ã®ã¯ã¨ãªã¯ãããã®ä¾ããç°¡åã«è¨è¿°ã§ãããã¨ã«æ³¨æãã¦ãã ãã!"
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog.effectiveDate < sysdate\n"
+ " and catalog.effectiveDate >= all (\n"
+ " select cat.effectiveDate\n"
+ " from Catalog as cat\n"
+ " where cat.effectiveDate < sysdate\n"
+ " )\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr "以ä¸ã®ã¯ã¨ãªã¯ç¹å®ã®é¡§å®¢ã¨ä¸ããããæå°ã®åè¨å¤ã«å¯¾ããæªæã注æã®æ³¨æIDã ååã®æ°ã注æã®åè¨ãåè¨å¤ã§æ´åãã¦è¿ãã¾ãã ä¾¡æ ¼ã決å®ããéãç¾å¨ã®ã«ã¿ãã°ã使ãã¾ããçµæã¨ãã¦è¿ãããSQLã¯ã¨ãªã¯ <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal> ããã³ <literal>PRICE</literal> ãã¼ãã«ã«å¯¾ã4ã¤ã®å
é¨çµå㨠(é¢é£ããªã)å¯åãåãããæã¡ã¾ãã"
+
+#: index.docbook:870
+msgid "What a monster! Actually, in real life, I'm not very keen on subqueries, so my query was really more like this:"
+msgstr ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)
+\n"
+ "from Order as order
+\n"
+ " join order.lineItems as item
+\n"
+ " join item.product as product,
+\n"
+ " Catalog as catalog
+\n"
+ " join catalog.prices as price
+\n"
+ "where order.paid = false
+\n"
+ " and order.customer = :customer
+\n"
+ " and price.product = product
+\n"
+ " and catalog.effectiveDate < sysdate
+\n"
+ " and catalog.effectiveDate >= all (
+\n"
+ " select cat.effectiveDate
+\n"
+ " from Catalog as cat
+\n"
+ " where cat.effectiveDate < sysdate
+\n"
+ " )
+\n"
+ "group by order
+\n"
+ "having sum(price.amount) > :minAmount
+\n"
+ "order by sum(price.amount) desc]]>"
+
+#: index.docbook:875
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog = :currentCatalog\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr "ä½ã¦å·¨å¤§ãªã¯ã¨ãªãªã®ã§ããã! æ®æ®µç§ã¯å¯åãåããããã¾ã使ãã¾ããããããã£ã¦ç§ã®ã¯ã¨ãªã¯å®éã«ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã:"
+
+#: index.docbook:877
+msgid "The next query counts the number of payments in each status, excluding all payments in the <literal>AWAITING_APPROVAL</literal> status where the most recent status change was made by the current user. It translates to an SQL query with two inner joins and a correlated subselect against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> and <literal>PAYMENT_STATUS_CHANGE</literal> tables."
+msgstr ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)
+\n"
+ "from Order as order
+\n"
+ " join order.lineItems as item
+\n"
+ " join item.product as product,
+\n"
+ " Catalog as catalog
+\n"
+ " join catalog.prices as price
+\n"
+ "where order.paid = false
+\n"
+ " and order.customer = :customer
+\n"
+ " and price.product = product
+\n"
+ " and catalog = :currentCatalog
+\n"
+ "group by order
+\n"
+ "having sum(price.amount) > :minAmount
+\n"
+ "order by sum(price.amount) desc]]>"
+
+#: index.docbook:885
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ " join payment.statusChanges as statusChange\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or (\n"
+ " statusChange.timeStamp = (\n"
+ " select max(change.timeStamp)\n"
+ " from PaymentStatusChange change\n"
+ " where change.payment = payment\n"
+ " )\n"
+ " and statusChange.user <> :currentUser\n"
+ " )\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr "次ã®ã¯ã¨ãªã¯åã¹ãã¼ã¿ã¹ã®æ¯æãæ°ãæ°ãã¾ãããã ããã¹ã¦ã®æ¯æããç¾å¨ã®å©ç¨è
ã«ãã ææ°ã®ã¹ãã¼ã¿ã¹å¤æ´ã§ãã <literal>AWAITING_APPROVAL</literal> ã§ããå ´åãé¤ãã¾ãã ãã®ã¯ã¨ãªã¯2ã¤ã®å
é¨çµå㨠<literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> ããã³ <literal>PAYMENT_STATUS_CHANGE</literal> ãã¼ãã«ã«å¯¾ããé¢é£å¯åãåãããåããSQLã¯ã¨ãªã«å¤æããã¾ãã"
+
+#: index.docbook:887
+msgid "If I would have mapped the <literal>statusChanges</literal> collection as a list, instead of a set, the query would have been much simpler to write."
+msgstr ""
+ "<![CDATA[select count(payment), status.name
+\n"
+ "from Payment as payment
+\n"
+ " join payment.currentStatus as status
+\n"
+ " join payment.statusChanges as statusChange
+\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL
+\n"
+ " or (
+\n"
+ " statusChange.timeStamp = (
+\n"
+ " select max(change.timeStamp)
+\n"
+ " from PaymentStatusChange change
+\n"
+ " where change.payment = payment
+\n"
+ " )
+\n"
+ " and statusChange.user <> :currentUser
+\n"
+ " )
+\n"
+ "group by status.name, status.sortOrder
+\n"
+ "order by status.sortOrder]]>"
+
+#: index.docbook:892
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr "ããç§ãsetã®ä»£ããã«listã¨ã㦠<literal>statusChanges</literal> ã³ã¬ã¯ã·ã§ã³ã ãããã³ã°ãããªãã°ãã¯ããã«ç°¡åã«ã¯ã¨ãªãè¨è¿°ã§ããã§ãããã"
+
+#: index.docbook:894
+msgid "The next query uses the MS SQL Server <literal>isNull()</literal> function to return all the accounts and unpaid payments for the organization to which the current user belongs. It translates to an SQL query with three inner joins, an outer join and a subselect against the <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> and <literal>ORG_USER</literal> tables."
+msgstr ""
+ "<![CDATA[select count(payment), status.name
+\n"
+ "from Payment as payment
+\n"
+ " join payment.currentStatus as status
+\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL
+\n"
+ " or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser
+\n"
+ "group by status.name, status.sortOrder
+\n"
+ "order by status.sortOrder]]>"
+
+#: index.docbook:903
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser in elements(account.holder.users)\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr "次ã®ã¯ã¨ãªã¯ç¾å¨ã®ã¦ã¼ã¶ãæå±ããçµç¹ã«å¯¾ããã¢ã«ã¦ã³ãããã³æªæãã®æ¯æãã ãã¹ã¦è¿ãMS SQL Server ã® <literal>isNull()</literal> é¢æ°ã使ç¨ãã¦ãã¾ãã ãã®ã¯ã¨ãªã¯3ã¤ã®å
é¨çµåã¨1ã¤ã®å¤é¨çµå ã ãã㦠<literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> ããã³ <literal>ORG_USER</literal> ãã¼ãã«ã«å¯¾ããå¯åãåããæã£ãSQLã«å¤æããã¾ãã"
+
+#: index.docbook:905
+msgid "For some databases, we would need to do away with the (correlated) subselect."
+msgstr ""
+ "<![CDATA[select account, payment
+\n"
+ "from Account as account
+\n"
+ " left outer join account.payments as payment
+\n"
+ "where :currentUser in elements(account.holder.users)
+\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)
+\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+
+#: index.docbook:909
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " join account.holder.users as user\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser = user\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr "ããã¤ãã®ãã¼ã¿ãã¼ã¹ã«ã¤ãã¦ã¯ã(é¢é£ããããã)å¯åãåããã®ä½¿ç¨ãé¿ããå¿
è¦ãããã§ãããã"
+
+#: index.docbook:914
+msgid "Bulk update and delete"
+msgstr ""
+ "<![CDATA[select account, payment
+\n"
+ "from Account as account
+\n"
+ " join account.holder.users as user
+\n"
+ " left outer join account.payments as payment
+\n"
+ "where :currentUser = user
+\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)
+\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+
+#: index.docbook:916
+msgid "HQL now supports <literal>update</literal>, <literal>delete</literal> and <literal>insert ... select ...</literal> statements. See <xref linkend=\"batch-direct\"/> for details."
+msgstr "大éã®UPDATEã¨DELETE"
+
+#: index.docbook:924
+msgid "Tips & Tricks"
+msgstr "HQLã¯ä»ã¯ <literal>update</literal> 㨠<literal>delete</literal>ã<literal>insert ... select ...</literal> ã¹ãã¼ãã¡ã³ããHQLã«å
¥ãããã¨ããµãã¼ããã¦ãã¾ãã <xref linkend=\"batch-direct\"/> ã«è©³ç´°ãããã¾ãã"
+
+#: index.docbook:926
+msgid "You can count the number of query results without actually returning them:"
+msgstr "Tips & Tricks"
+
+#: index.docbook:930
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue()]]>"
+msgstr "å®éã«çµæãè¿ããªãã¦ãã¯ã¨ãªã®çµææ°ãæ°ãããã¨ãã§ãã¾ãã:"
+
+#: index.docbook:932
+msgid "To order a result by the size of a collection, use the following query:"
+msgstr "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue()]]>"
+
+#: index.docbook:936
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "order by count(msg)]]>"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ãµã¤ãºã«ããçµæã並ã¹æ¿ããããã«ã¯ä»¥ä¸ã®ã¯ã¨ãªã使ç¨ãã¾ãã:"
+
+#: index.docbook:938
+msgid "If your database supports subselects, you can place a condition upon selection size in the where clause of your query:"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name
+\n"
+ "from User as usr
+\n"
+ " left join usr.messages as msg
+\n"
+ "group by usr.id, usr.name
+\n"
+ "order by count(msg)]]>"
+
+#: index.docbook:943
+msgid "<![CDATA[from User usr where size(usr.messages) >= 1]]>"
+msgstr "使ç¨ãã¦ãããã¼ã¿ãã¼ã¹ããµãã»ã¬ã¯ãããµãã¼ãããå ´åãã¯ã¨ãªã®whereç¯ã§ãµã¤ãºã«ããé¸ææ¡ä»¶ãè¨å®ã§ãã¾ã:"
+
+#: index.docbook:945
+msgid "If your database doesn't support subselects, use the following query:"
+msgstr "<![CDATA[from User usr where size(usr.messages) >= 1]]>"
+
+#: index.docbook:949
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User usr.name\n"
+ " join usr.messages msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) >= 1]]>"
+msgstr "使ç¨ãã¦ãããã¼ã¿ãã¼ã¹ããµãã»ã¬ã¯ãããµãã¼ãããªãå ´åã¯ã次ã®ã¯ã¨ãªã使ç¨ãã¦ãã ãã:"
+
+#: index.docbook:951
+msgid "As this solution can't return a <literal>User</literal> with zero messages because of the inner join, the following form is also useful:"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name
+\n"
+ "from User usr.name
+\n"
+ " join usr.messages msg
+\n"
+ "group by usr.id, usr.name
+\n"
+ "having count(msg) >= 1]]>"
+
+#: index.docbook:956
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) = 0]]>"
+msgstr "å
é¨çµåããã¦ããããã§ä¸ã®è§£æ±ºæ³ãmessageã®ä»¶æ°ã ã¼ãã® <literal>User</literal> ãè¿ããã¨ãã§ããªããªãã°ã以ä¸ã®å½¢å¼ã使ãã¾ãã"
+
+#: index.docbook:958
+msgid "Properties of a JavaBean can be bound to named query parameters:"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name
+\n"
+ "from User as usr
+\n"
+ " left join usr.messages as msg
+\n"
+ "group by usr.id, usr.name
+\n"
+ "having count(msg) = 0]]>"
+
+#: index.docbook:962
+msgid ""
+ "<![CDATA[Query q = s.createQuery(\"from foo Foo as foo where foo.name=:name and foo.size=:size\");\n"
+ "q.setProperties(fooBean); // fooBean has getName() and getSize()\n"
+ "List foos = q.list();]]>"
+msgstr "JavaBeanã®ããããã£ã¯ãååä»ãã®ã¯ã¨ãªãã©ã¡ã¼ã¿ã«çµã³ã¤ãããã¨ãåºæ¥ã¾ããï¼"
+
+#: index.docbook:964
+msgid "Collections are pageable by using the <literal>Query</literal> interface with a filter:"
+msgstr ""
+ "<![CDATA[Query q = s.createQuery(\"from foo Foo as foo where foo.name=:name and foo.size=:size\");
+\n"
+ "q.setProperties(fooBean); // fooBean has getName() and getSize()
+\n"
+ "List foos = q.list();]]>"
+
+#: index.docbook:968
+msgid ""
+ "<![CDATA[Query q = s.createFilter( collection, \"\" ); // the trivial filter\n"
+ "q.setMaxResults(PAGE_SIZE);\n"
+ "q.setFirstResult(PAGE_SIZE * pageNumber);\n"
+ "List page = q.list();]]>"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã¯ãã£ã«ã¿ä»ã <literal>Query</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ç¨ãããã¨ã§ãã¼ã¸ãã¤ãããã¨ãã§ãã¾ãã:"
+
+#: index.docbook:970
+msgid "Collection elements may be ordered or grouped using a query filter:"
+msgstr ""
+ "<![CDATA[Query q = s.createFilter( collection, \"\" ); // the trivial filter
+\n"
+ "q.setMaxResults(PAGE_SIZE);
+\n"
+ "q.setFirstResult(PAGE_SIZE * pageNumber);
+\n"
+ "List page = q.list();]]>"
+
+#: index.docbook:974
+msgid ""
+ "<![CDATA[Collection orderedCollection = s.filter( collection, \"order by this.amount\" );\n"
+ "Collection counts = s.filter( collection, \"select this.type, count(this) group by this.type\" );]]>"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ã¯ã¯ã¨ãªãã£ã«ã¿ã使ã£ã¦ã並ã¹æ¿ããã°ã«ã¼ãåããåºæ¥ã¾ãã:"
+
+#: index.docbook:976
+msgid "You can find the size of a collection without initializing it:"
+msgstr ""
+ "<![CDATA[Collection orderedCollection = s.filter( collection, \"order by this.amount\" );
+\n"
+ "Collection counts = s.filter( collection, \"select this.type, count(this) group by this.type\" );]]>"
+
+#: index.docbook:980
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue();]]>"
+msgstr "ã³ã¬ã¯ã·ã§ã³ãåæåããã«ã³ã¬ã¯ã·ã§ã³ã®ãµã¤ãºãå¾ããã¨ãã§ãã¾ãã:"
+
+#: index.docbook:985
+msgid "Components"
+msgstr "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue();]]>"
+
+#: index.docbook:987
+msgid "Components might be used in just about every way that simple value types can be used in HQL queries. They can appear in the <literal>select</literal> clause:"
+msgstr ""
+
+#: index.docbook:992, index.docbook:1038
+msgid "<![CDATA[select p.name from from Person p]]>"
+msgstr ""
+
+#: index.docbook:993
+msgid "<![CDATA[select p.name.first from from Person p]]>"
+msgstr ""
+
+#: index.docbook:995
+msgid "where the Person's name property is a component. Components can also be used in the <literal>where</literal> clause:"
+msgstr ""
+
+#: index.docbook:1000
+msgid "<![CDATA[from from Person p where p.name = :name]]>"
+msgstr ""
+
+#: index.docbook:1001
+msgid "<![CDATA[from from Person p where p.name.first = :firstName]]>"
+msgstr ""
+
+#: index.docbook:1003
+msgid "Components can also be used in the <literal>order by</literal> clause:"
+msgstr ""
+
+#: index.docbook:1007
+msgid "<![CDATA[from from Person p order by p.name]]>"
+msgstr ""
+
+#: index.docbook:1008
+msgid "<![CDATA[from from Person p order by p.name.first]]>"
+msgstr ""
+
+#: index.docbook:1010
+msgid "Another common use of components is in <xref linkend=\"queryhql-tuple\"/>row value constructors."
+msgstr ""
+
+#: index.docbook:1016
+msgid "Row value constructor syntax"
+msgstr ""
+
+#: index.docbook:1018
+msgid "HQL supports the use of ANSI SQL <literal>row value constructor</literal> syntax (sometimes called <literal>tuple</literal> syntax), even though the underlying database may not support that notion. Here we are generally referring to multi-valued comparisons, typically associated with components. Consider an entity Person which defines a name component:"
+msgstr ""
+
+#: index.docbook:1025
+msgid "<![CDATA[from Person p where p.name.first='John' and p.name.last='Jingleheimer-Schmidt']]>"
+msgstr ""
+
+#: index.docbook:1027
+msgid "That's valid syntax, although a little verbose. It be nice to make this a bit more concise and use <literal>row value constructor</literal> syntax:"
+msgstr ""
+
+#: index.docbook:1032
+msgid "<![CDATA[from Person p where p.name=('John', 'Jingleheimer-Schmidt')]]>"
+msgstr ""
+
+#: index.docbook:1034
+msgid "It can also be useful to specify this in the <literal>select</literal> clause:"
+msgstr ""
+
+#: index.docbook:1040
+msgid "Another time using <literal>row value constructor</literal> syntax can be beneficial is when using subqueries needing to compare against multiple values:"
+msgstr ""
+
+#: index.docbook:1045
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not ( cat.name, cat.color ) in (\n"
+ " select cat.name, cat.color from DomesticCat cat\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:1047
+msgid "One thing to consider when deciding if you want to use this syntax is that the query will be dependent upon the ordering of the component sub-properties in the metadata."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/query_sql.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/query_sql.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/query_sql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1044 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Native SQL"
+msgstr "ãã¤ãã£ãSQL"
+
+#: index.docbook:7
+msgid "You may also express queries in the native SQL dialect of your database. This is useful if you want to utilize database specific features such as query hints or the <literal>CONNECT</literal> keyword in Oracle. It also provides a clean migration path from a direct SQL/JDBC based application to Hibernate."
+msgstr "ãã¼ã¿ãã¼ã¹ã®ãã¤ãã£ãSQLæ¹è¨ã使ã£ã¦ã¯ã¨ãªã表ç¾ãããã¨ãã§ãã¾ãã ã¯ã¨ãªãã³ããOracleã® <literal>CONNECT</literal> ãã¼ã¯ã¼ãã®ããã«ã ãã¼ã¿ãã¼ã¹ç¬èªã®æ©è½ãå©ç¨ãããã¨ãã«ä½¿ãã¾ãã SQL/JDBCãç´æ¥ä½¿ç¨ãã¦ããã¢ããªã±ã¼ã·ã§ã³ããHibernateã¸ã®ç§»è¡ã容æã«ãã¦ãã¾ãã"
+
+#: index.docbook:13
+msgid "Hibernate3 allows you to specify handwritten SQL (including stored procedures) for all create, update, delete, and load operations."
+msgstr "Hibernate3ã§ã¯ãçæãæ´æ°ãåé¤ãèªã¿è¾¼ã¿å¦çã®ãããªãã¹ã¦ã® SQLï¼ã¹ãã¢ãããã·ã¼ã¸ã£ãå«ãï¼ãææ¸ãã§ãã¾ãã"
+
+#: index.docbook:17
+msgid "Using a <literal>SQLQuery</literal>"
+msgstr "<literal>SQLQuery</literal> ã®ä½¿ç¨"
+
+#: index.docbook:19
+msgid "Execution of native SQL queries is controlled via the <literal>SQLQuery</literal> interface, which is obtained by calling <literal>Session.createSQLQuery()</literal>. The following describes how to use this API for querying."
+msgstr "ãã¤ãã£ããªSQLã¯ã¨ãªã®å®è¡ã¯ <literal>SQLQuery</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ãéãã¦å¶å¾¡ãã¾ãã <literal>SQLQuery</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã¯ <literal>Session.createSQLQuery()</literal> ãå¼ã³åºãã¦åå¾ãã¾ãã ãã®APIã使ã£ã¦åãåããããæ¹æ³ã以ä¸ã§èª¬æãã¾ãã"
+
+#: index.docbook:25
+msgid "Scalar queries"
+msgstr "ã¹ã«ã©ã¼ã®ã¯ã¨ãª"
+
+#: index.docbook:27
+msgid "The most basic SQL query is to get a list of scalars (values)."
+msgstr "æãåºæ¬çãªSQLã¯ã¨ãªã¯ã¹ã«ã©ã¼ï¼å¤ï¼ã®ãªã¹ããå¾ããã¨ã§ãã"
+
+#: index.docbook:30
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").list();\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").list();\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").list();\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").list();\n"
+ "]]>"
+
+#: index.docbook:32
+msgid "These will both return a List of Object arrays (Object[]) with scalar values for each column in the CATS table. Hibernate will use ResultSetMetadata to deduce the actual order and types of the returned scalar values."
+msgstr "ãããã¯ã©ã¡ãããCATSãã¼ãã«ã®åã«ã©ã ã®ã¹ã«ã©ã¼å¤ãå«ã Objecté
åï¼Object[]ï¼ã®ãªã¹ããè¿ãã¾ãã è¿ãã¹ã«ã©ã¼å¤ã®å®éã®é çªã¨åãæ¨å®ããããã«ã Hibernateã¯ResultSetMetadataã使ç¨ãã¾ãã"
+
+#: index.docbook:37
+msgid "To avoid the overhead of using <literal>ResultSetMetadata</literal> or simply to be more explicit in what is returned one can use <literal>addScalar()</literal>."
+msgstr "<literal>ResultSetMetadata</literal> ã使ç¨ãããªã¼ãã¼ããããé¿ããããã ãããã¯åã«ä½ãè¿ããããæ確ã«ããããã<literal>addScalar()</literal> ã使ãã¾ãã"
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\", Hibernate.STRING)\n"
+ " .addScalar(\"BIRTHDATE\", Hibernate.DATE)\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\", Hibernate.STRING)\n"
+ " .addScalar(\"BIRTHDATE\", Hibernate.DATE)\n"
+ "]]>"
+
+#: index.docbook:43, index.docbook:89, index.docbook:170, index.docbook:321
+msgid "This query specified:"
+msgstr "ãã®ã¯ã¨ãªã§æå®ããã¦ãããã®ãä¸è¨ã«ç¤ºãã¾ãã"
+
+#: index.docbook:47, index.docbook:93, index.docbook:325
+msgid "the SQL query string"
+msgstr "SQLã¯ã¨ãªæåå"
+
+#: index.docbook:51
+msgid "the columns and types to return"
+msgstr "è¿ãããã«ã©ã ã¨å"
+
+#: index.docbook:55
+msgid "This will still return Object arrays, but now it will not use <literal>ResultSetMetdata</literal> but will instead explicitly get the ID, NAME and BIRTHDATE column as respectively a Long, String and a Short from the underlying resultset. This also means that only these three columns will be returned, even though the query is using <literal>*</literal> and could return more than the three listed columns."
+msgstr "ããã¯ã¾ã Objecté
åãè¿ãã¾ããã <literal>ResultSetMetdata</literal> ã使ç¨ãã¾ããã ãã ãããã®ä»£ããã«åºç¤ã«ãããªã¶ã«ãã»ãããã IDãNAMEãBIRTHDATE ã«ã©ã ããããã LongãStringãShort ã¨ãã¦æ示çã«åå¾ãã¾ãã ããã¯ï¼ã¤ã®ã«ã©ã ãè¿ãã®ã¿ã§ãããã¨ãæå³ãã¾ãã ãã¨ããã¯ã¨ãªã <literal>*</literal> ã使ç¨ãã åæããï¼ã¤ããå¤ãã®ã«ã©ã ãè¿ããã¨ãã¦ãã§ãã"
+
+#: index.docbook:63
+msgid "It is possible to leave out the type information for all or some of the scalars."
+msgstr "ã¹ã«ã©ã¼ã®åæ
å ±ãçããã¨ãã§ãã¾ãã"
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\")\n"
+ " .addScalar(\"BIRTHDATE\")\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\")\n"
+ " .addScalar(\"BIRTHDATE\")\n"
+ "]]>"
+
+#: index.docbook:68
+msgid "This is essentially the same query as before, but now <literal>ResultSetMetaData</literal> is used to decide the type of NAME and BIRTHDATE where as the type of ID is explicitly specified."
+msgstr "ããã¯æ¬è³ªçã«åã¨åãã¯ã¨ãªã§ãããã NAME 㨠BIRTHDATE ã®åã決ããããã« <literal>ResultSetMetaData</literal> ã使ç¨ãã¾ããä¸æ¹ãID ã®åã¯æ示çã«æå®ããã¦ãã¾ãã"
+
+#: index.docbook:72
+msgid "How the java.sql.Types returned from ResultSetMetaData is mapped to Hibernate types is controlled by the Dialect. If a specific type is not mapped or does not result in the expected type it is possible to customize it via calls to <literal>registerHibernateType</literal> in the Dialect."
+msgstr "ResultSetMetaData ããè¿ããã java.sql.Types ã Hibernate ã®åã« ãããã³ã°ãããã¨ã¯ãDialect ãå¶å¾¡ãã¾ãã æ示ãããåããããã³ã°ããã¦ããªãããçµæã®åãæå¾
ãããã®ã¨ç°ãªãå ´åã Dialect ã® <literal>registerHibernateType</literal> ãå¼ã³åºãã ã«ã¹ã¿ãã¤ãºã§ãã¾ãã"
+
+#: index.docbook:80
+msgid "Entity queries"
+msgstr "ã¨ã³ãã£ãã£ã®ã¯ã¨ãª"
+
+#: index.docbook:82
+msgid "The above queries were all about returning scalar values, basically returning the \"raw\" values from the resultset. The following shows how to get entity objects from a native sql query via <literal>addEntity()</literal>."
+msgstr "ããã¾ã§ã®ã¯ã¨ãªã¯ããã¹ã¦ã¹ã«ã©ã¼å¤ãè¿ããã®ã§ããã åºæ¬çã«ããªã¶ã«ãã»ãããããæªå å·¥ãã®å¤ãè¿ãã¾ãã 以éã§ã¯ã<literal>addEntity()</literal> ã«ããããã¤ãã£ãSQLã¯ã¨ãªãã ã¨ã³ãã£ãã£ãªãã¸ã§ã¯ããåå¾ããæ¹æ³ã示ãã¾ãã"
+
+#: index.docbook:87
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").addEntity(Cat.class);\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").addEntity(Cat.class);\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+
+#: index.docbook:97
+msgid "the entity returned by the query"
+msgstr "ã¯ã¨ãªãè¿ãã¨ã³ãã£ãã£ã¨SQLãã¼ãã«ã®å¥å"
+
+#: index.docbook:101
+msgid "Assuming that Cat is mapped as a class with the columns ID, NAME and BIRTHDATE the above queries will both return a List where each element is a Cat entity."
+msgstr "CatãID, NAME, BIRTHDATEã®ã«ã©ã ã使ã£ã¦ã¯ã©ã¹ã«ãããã³ã°ãããå ´åã ä¸è¨ã®ã¯ã¨ãªã¯ã©ã¡ãããè¦ç´ ãCatã¨ã³ãã£ãã£ã§ãããªã¹ããè¿ãã¾ãã"
+
+#: index.docbook:105
+msgid "If the entity is mapped with a <literal>many-to-one</literal> to another entity it is required to also return this when performing the native query, otherwise a database specific \"column not found\" error will occur. The additional columns will automatically be returned when using the * notation, but we prefer to be explicit as in the following example for a <literal>many-to-one</literal> to a <literal>Dog</literal>:"
+msgstr "ã¨ã³ãã£ãã£ãå¥ã®ã¨ã³ãã£ãã£ã« <literal>å¤å¯¾ä¸</literal> ã§ãããã³ã°ãã¦ããå ´åã¯ã ãã¤ãã£ãã¯ã¨ãªãå®è¡ããéã«ããã®å¥ã®ã¨ã³ãã£ãã£ãè¿ããã¨ãè¦æ±ãã¾ãã ãããªããã°ããã¼ã¿ãã¼ã¹åºæã®ãcolumn not found(ã«ã©ã ãè¦ã¤ããã¾ãã)ãã¨ã©ã¼ãçºçãã¾ãã * 表è¨ã使ç¨ããéã¯ã追å ã®ã«ã©ã ãèªåçã«è¿ããã¾ããã 次ã®ä¾ã®ããã«ã<literal>Dog</literal> ã« <literal>å¤å¯¾ä¸</literal> ã§ãããã¨ã æ示ãããã¨ãç§ãã¡ã¯å¥½ã¿ã¾ãã"
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+
+#: index.docbook:115
+msgid "This will allow cat.getDog() to function properly."
+msgstr "ããã«ãã cat.getDog() ãæ£ããæ©è½ãã¾ãã"
+
+#: index.docbook:119
+msgid "Handling associations and collections"
+msgstr "é¢é£ã¨ã³ã¬ã¯ã·ã§ã³ã®æä½"
+
+#: index.docbook:121
+msgid "It is possible to eagerly join in the <literal>Dog</literal> to avoid the possible extra roundtrip for initializing the proxy. This is done via the <literal>addJoin()</literal> method, which allows you to join in an association or collection."
+msgstr "ãããã·ãåæåããããã®ä½åãªå¦çãé¿ããããã <literal>Dog</literal> ã®ä¸ã§å³æçµåã§ãã¾ãã ãã㯠<literal>addJoin()</literal> ã¡ã½ããã«ããè¡ãã¾ãã é¢é£ãããã¯ã³ã¬ã¯ã·ã§ã³ã«çµåã§ãã¾ãã"
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.ID, NAME, BIRTHDATE, DOG_ID, D_ID, D_NAME FROM CATS c, DOGS d WHERE c.DOG_ID = d.D_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dog\");\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.ID, NAME, BIRTHDATE, DOG_ID, D_ID, D_NAME FROM CATS c, DOGS d WHERE c.DOG_ID = d.D_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dog\");\n"
+ "]]>"
+
+#: index.docbook:128
+msgid "In this example the returned <literal>Cat</literal>'s will have their <literal>dog</literal> property fully initialized without any extra roundtrip to the database. Notice that we added a alias name (\"cat\") to be able to specify the target property path of the join. It is possible to do the same eager joining for collections, e.g. if the <literal>Cat</literal> had a one-to-many to <literal>Dog</literal> instead."
+msgstr "ãã®ä¾ã®ä¸ã§ãè¿ããã <literal>Cat</literal> ã¯ã ãã¼ã¿ãã¼ã¹ã¸ã®ä½åå¦çãªãã§ã å®å
¨ã«åæåããã <literal>dog</literal> ããããã£ãæã¡ã¾ãã çµå対象ã®ããããã£ã¸ã®ãã¹ãæå®ã§ããããã«ã å¥åï¼ãcatãï¼ã追å ãããã¨ã«æ³¨æãã¦ãã ããã ã³ã¬ã¯ã·ã§ã³ã®å³æçµåãåãããã«ã§ãã¾ãã ãã¨ãã°ã<literal>Cat</literal> ãä¸å¯¾å¤ã§ <literal>Dog</literal> ãæã£ã¦ããå ´åã次ã®ããã«ãªãã¾ãã"
+
+#: index.docbook:136
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, D_ID, D_NAME, CAT_ID FROM CATS c, DOGS d WHERE c.ID = d.CAT_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dogs\");\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, D_ID, D_NAME, CAT_ID FROM CATS c, DOGS d WHERE c.ID = d.CAT_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dogs\");\n"
+ "]]>"
+
+#: index.docbook:138
+msgid "At this stage we are reaching the limits of what is possible with native queries without starting to enhance the sql queries to make them usable in Hibernate; the problems starts to arise when returning multiple entities of the same type or when the default alias/column names are not enough."
+msgstr "ç¾å¨ã®ã¨ããã Hibernateã§ä½¿ããããããããã®SQLã¯ã¨ãªã®æ¡å¼µãªãã«ã ãã¤ãã£ãã¯ã¨ãªã§ä½ããå¯è½ã«ããéçã«æ¥ã¦ãã¾ãã åãåã®ã¨ã³ãã£ãã£ãè¤æ°è¿ãéããããã©ã«ãã®å¥åãååã§ååã§ã¯ãªãå ´åã«ã åé¡ã¯èµ·ããå§ãã¾ãã"
+
+#: index.docbook:146
+msgid "Returning multiple entities"
+msgstr "è¤æ°ã¨ã³ãã£ãã£ã®åå¾"
+
+#: index.docbook:148
+msgid "Until now the result set column names are assumed to be the same as the column names specified in the mapping document. This can be problematic for SQL queries which join multiple tables, since the same column names may appear in more than one table."
+msgstr "ããã¾ã§ã¯ããªã¶ã«ãã»ããã®ã«ã©ã åã¯ã ãããã³ã°ãã¡ã¤ã«ã§æå®ãããã«ã©ã åã¨åãã§ããã¨ä»®å®ãã¦ãã¾ããã è¤æ°ã®ãã¼ãã«ãåãã«ã©ã åãæã¤å ´åãããããã è¤æ°ãã¼ãã«ãçµåããSQLã¯ã¨ãªã§åé¡ã¨ãªãå ´åãããã¾ãã"
+
+#: index.docbook:153
+msgid "Column alias injection is needed in the following query (which most likely will fail):"
+msgstr "ä¸è¨ã®ãããªï¼å¤±æããããªï¼ã¯ã¨ãªã§ã¯ã ã«ã©ã å¥åã¤ã³ã¸ã§ã¯ã·ã§ã³ï¼column alias injectionï¼ãå¿
è¦ã§ãã"
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.*, m.* FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.*, m.* FROM CATS c, CATS m WHERE c.MOTHER_ID = m.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+
+#: index.docbook:158
+msgid "The intention for this query is to return two Cat instances per row, a cat and its mother. This will fail since there is a conflict of names since they are mapped to the same column names and on some databases the returned column aliases will most likely be on the form \"c.ID\", \"c.NAME\", etc. which are not equal to the columns specificed in the mappings (\"ID\" and \"NAME\")."
+msgstr "ãã®ã¯ã¨ãªã®æå³ã¯ã ï¼è¡ãã¨ã«ï¼ã¤ã®Catã¤ã³ã¹ã¿ã³ã¹ãã¤ã¾ãç«ã¨ãã®æ¯è¦ªãè¿ãã¨ãããã¨ã§ãã åãã«ã©ã åã«ãããã³ã°ãããã¨ã«ããååãè¡çªããããããã®ã¯ã¨ãªã¯å¤±æãã¾ãã ãã¼ã¿ãã¼ã¹ã«ãã£ã¦ã¯ãè¿ãããã«ã©ã ã®å¥åã \"c.ID\"ã\"c.NAME\" ãªã©ã®å½¢å¼ã§ããã ãããã³ã°ã§æå®ãããã«ã©ã ï¼\"ID\" 㨠\"NAME\"ï¼ã¨çãããªãããã失æãã¾ãã"
+
+#: index.docbook:165
+msgid "The following form is not vulnerable to column name duplication:"
+msgstr "ä¸è¨ã®å½¢å¼ã¯ãã«ã©ã åãéè¤ãã¦ã大ä¸å¤«ã§ãã"
+
+#: index.docbook:168
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = m.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+
+#: index.docbook:174
+msgid "the SQL query string, with placeholders for Hibernate to inject column aliases"
+msgstr "SQLã¯ã¨ãªæåå ï¼Hibernateãã«ã©ã ã®å¥åãæ¿å
¥ããããã®ãã¬ã¼ã¹ãã«ããå«ãï¼"
+
+#: index.docbook:179
+msgid "the entities returned by the query"
+msgstr "ã¯ã¨ãªã«ãã£ã¦è¿ãããã¨ã³ãã£ãã£"
+
+#: index.docbook:183
+msgid "The {cat.*} and {mother.*} notation used above is a shorthand for \"all properties\". Alternatively, you may list the columns explicity, but even in this case we let Hibernate inject the SQL column aliases for each property. The placeholder for a column alias is just the property name qualified by the table alias. In the following example, we retrieve Cats and their mothers from a different table (cat_log) to the one declared in the mapping metadata. Notice that we may even use the property aliases in the where clause if we like."
+msgstr "ä¸è¨ã§ä½¿ç¨ãã¦ãã {cat.*} 㨠{mother.*} ã¨ãã表è¨ã¯ã ããã¹ã¦ã®ããããã£ãã表ãçç¥å½¢ã§ãã 代ããã«ãæ示çã«ã«ã©ã ãåæãã¦ãããã§ããã ãã®å ´åã¯ãHibernateã«åããããã£ã«å¯¾å¿ããSQLã«ã©ã ã®å¥åãæ¿å
¥ãããã¹ãã§ãããã ã«ã©ã ã®å¥åã®ããã®ãã¬ã¼ã¹ãã«ãã¯ããã¼ãã«ã®å¥åã«ãã£ã¦ä¿®é£¾ãããããããã£åã§ãã ä¸è¨ã®ä¾ã§ã¯ãå¥ã®ãã¼ãã« cat_log ãã ãããã³ã°ã¡ã¿ãã¼ã¿ã§å®ç¾©ããã Cat ã¨ãã®æ¯è¦ªã復å
ãã¾ãã ãã好ããªããwhereç¯ã®ä¸ã§ããããããã£ã®å¥åã使ãã¾ãã"
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[String sql = \"SELECT ID as {c.id}, NAME as {c.name}, \" + \n"
+ " \"BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} \" +\n"
+ " \"FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID\";\n"
+ "\n"
+ "List loggedCats = sess.createSQLQuery(sql)\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class).list()\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[String sql = \"SELECT ID as {c.id}, NAME as {c.name}, \" + \n"
+ " \"BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} \" +\n"
+ " \"FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID\";\n"
+ "\n"
+ "List loggedCats = sess.createSQLQuery(sql)\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class).list()\n"
+ "]]>"
+
+#: index.docbook:195
+msgid "Alias and property references"
+msgstr "å¥åã¨ããããã£ã®ãªãã¡ã¬ã³ã¹"
+
+#: index.docbook:197
+msgid "For most cases the above alias injection is needed, but for queries relating to more complex mappings like composite properties, inheritance discriminators, collections etc. there are some specific aliases to use to allow Hibernate to inject the proper aliases."
+msgstr "å¤ãã®å ´åãä¸è¨ã®ãããªå¥åã¤ã³ã¸ã§ã¯ã·ã§ã³ãå¿
è¦ã§ãã ãã ããè¤åããããã£ãç¶æ¿èå¥åãã³ã¬ã¯ã·ã§ã³ãªã©ã®ãã㪠ããè¤éãªãããã³ã°ã¨é¢é£ããã¯ã¨ãªããªããã°ã§ãã ããç¹å®ã®å¥åã使ç¨ãããã¨ã«ãããHibernateã¯é©åãªå¥åãæ¿å
¥ã§ãã¾ãã"
+
+#: index.docbook:202
+msgid "The following table shows the different possibilities of using the alias injection. Note: the alias names in the result are examples, each alias will have a unique and probably different name when used."
+msgstr "å¥åã¤ã³ã¸ã§ã¯ã·ã§ã³ã¨ãã¦ä½¿ç¨ã§ãããã®ãä¸è¡¨ã«ç¤ºãã¾ãã 注æï¼ä¸è¡¨ã®å¥åã¯ä¸ä¾ã§ãã ããããã®å¥åã¯ä¸æã§ããã使ç¨ããéã«ã¯ããããç°ãªãååãæã¡ã¾ãã"
+
+#: index.docbook:208
+msgid "Alias injection names"
+msgstr "å¥åã«æ¿å
¥ããåå"
+
+#: index.docbook:219
+msgid "Description"
+msgstr "<entry>説æ</entry>"
+
+#: index.docbook:221
+msgid "Syntax"
+msgstr "<entry>æ§æ</entry>"
+
+#: index.docbook:223
+msgid "Example"
+msgstr "<entry>ä¾</entry>"
+
+#: index.docbook:229
+msgid "A simple property"
+msgstr "åç´ãªããããã£"
+
+#: index.docbook:231
+msgid "{[aliasname].[propertyname]"
+msgstr "{[aliasname].[propertyname]}"
+
+#: index.docbook:233
+msgid "A_NAME as {item.name}"
+msgstr "A_NAME as {item.name}"
+
+#: index.docbook:237
+msgid "A composite property"
+msgstr "è¤åããããã£"
+
+#: index.docbook:239
+msgid "{[aliasname].[componentname].[propertyname]}"
+msgstr "{[aliasname].[componentname].[propertyname]}"
+
+#: index.docbook:241
+msgid "CURRENCY as {item.amount.currency}, VALUE as {item.amount.value}"
+msgstr "CURRENCY as {item.amount.currency}, VALUE as {item.amount.value}"
+
+#: index.docbook:246
+msgid "Discriminator of an entity"
+msgstr "ã¨ã³ãã£ãã£ã®ã¯ã©ã¹ãèå¥ããå¤"
+
+#: index.docbook:248
+msgid "{[aliasname].class}"
+msgstr "{[aliasname].class}"
+
+#: index.docbook:250
+msgid "DISC as {item.class}"
+msgstr "DISC as {item.class}"
+
+#: index.docbook:254
+msgid "All properties of an entity"
+msgstr "ã¨ã³ãã£ãã£ã®å
¨ããããã£"
+
+#: index.docbook:256, index.docbook:304
+msgid "{[aliasname].*}"
+msgstr "{[aliasname].*}"
+
+#: index.docbook:258
+msgid "{item.*}"
+msgstr "{item.*}"
+
+#: index.docbook:262
+msgid "A collection key"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ãã¼"
+
+#: index.docbook:264
+msgid "{[aliasname].key}"
+msgstr "{[aliasname].key}"
+
+#: index.docbook:266
+msgid "ORGID as {coll.key}"
+msgstr "ORGID as {coll.key}"
+
+#: index.docbook:270
+msgid "The id of an collection"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ID"
+
+#: index.docbook:272
+msgid "{[aliasname].id}"
+msgstr "{[aliasname].id}"
+
+#: index.docbook:274
+msgid "EMPID as {coll.id}"
+msgstr "EMPID as {coll.id}"
+
+#: index.docbook:278
+msgid "The element of an collection"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ "
+
+#: index.docbook:280
+msgid "{[aliasname].element}"
+msgstr "{[aliasname].element}"
+
+#: index.docbook:282
+msgid "XID as {coll.element}"
+msgstr "XID as {coll.element}"
+
+#: index.docbook:286
+msgid "roperty of the element in the collection"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ã®ããããã£"
+
+#: index.docbook:288
+msgid "{[aliasname].element.[propertyname]}"
+msgstr "{[aliasname].element.[propertyname]}"
+
+#: index.docbook:290
+msgid "NAME as {coll.element.name}"
+msgstr "NAME as {coll.element.name}"
+
+#: index.docbook:294
+msgid "All properties of the element in the collection"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ã®å
¨ããããã£"
+
+#: index.docbook:296
+msgid "{[aliasname].element.*}"
+msgstr "{[aliasname].element.*}"
+
+#: index.docbook:298
+msgid "{coll.element.*}"
+msgstr "{coll.element.*}"
+
+#: index.docbook:302
+msgid "All properties of the the collection"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®å
¨ããããã£"
+
+#: index.docbook:306
+msgid "{coll.*}"
+msgstr "{coll.*}"
+
+#: index.docbook:315
+msgid "Returning non-managed entities"
+msgstr "管çããã¦ããªãã¨ã³ãã£ãã£ã®åå¾"
+
+#: index.docbook:317
+msgid "It is possible to apply a ResultTransformer to native sql queries. Allowing it to e.g. return non-managed entities."
+msgstr "ãã¤ãã£ãSQLã¯ã¨ãªã« ResultTransformer ãé©ç¨ã§ãã¾ãã ä¸è¨ã®ããã«ãä¾ãã°ã管çããã¦ããªãã¨ã³ãã£ãã£ãè¿ãã¾ãã"
+
+#: index.docbook:319
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT NAME, BIRTHDATE FROM CATS\")\n"
+ " .setResultTransformer(Transformers.aliasToBean(CatDTO.class))]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT NAME, BIRTHDATE FROM CATS\")\n"
+ " .setResultTransformer(Transformers.aliasToBean(CatDTO.class))]]>"
+
+#: index.docbook:329
+msgid "a result transformer"
+msgstr "çµæãå¤æãããã®"
+
+#: index.docbook:333
+msgid "The above query will return a list of <literal>CatDTO</literal> which has been instantiated and injected the values of NAME and BIRTHNAME into its corresponding properties or fields."
+msgstr "ä¸è¨ã®ã¯ã¨ãªã¯ãã¤ã³ã¹ã¿ã³ã¹åããNAME 㨠BIRTHDATE ã®å¤ã 対å¿ããããããã£ãããã¯ãã£ã¼ã«ãã«æ¿å
¥ãã <literal>CatDTO</literal> ã®ãªã¹ããè¿ãã¾ãã"
+
+#: index.docbook:340
+msgid "Handling inheritance"
+msgstr "ç¶æ¿ã®å¶å¾¡"
+
+#: index.docbook:342
+msgid "Native sql queries which query for entities that is mapped as part of an inheritance must include all properties for the baseclass and all it subclasses."
+msgstr "ç¶æ¿ã®ä¸é¨ã¨ãã¦ãããã³ã°ãããã¨ã³ãã£ãã£ãåãåããããã¤ãã£ãSQLã¯ã¨ãªã¯ã ãã¼ã¹ã®ã¯ã©ã¹ã¨ãã®ãã¹ã¦ã®ãµãã¯ã©ã¹ã®ããããã£ãã¹ã¦ãå«ã¾ãªããã°ãªãã¾ããã"
+
+#: index.docbook:348
+msgid "Parameters"
+msgstr "ãã©ã¡ã¼ã¿"
+
+#: index.docbook:350
+msgid "Native sql queries support positional as well as named parameters:"
+msgstr "ãã¤ãã£ãSQLã¯ã¨ãªã¯ã以ä¸ã®ããã«ã ååä»ããã©ã¡ã¼ã¿ï¼:nameï¼ã¨åæ§ã«ä½ç½®ãã©ã¡ã¼ã¿ããµãã¼ããã¾ãã"
+
+#: index.docbook:353
+msgid ""
+ "<![CDATA[Query query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like ?\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(0, \"Pus%\").list();\n"
+ " \n"
+ "query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like :name\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(\"name\", \"Pus%\").list(); ]]>"
+msgstr ""
+ "<![CDATA[Query query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like ?\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(0, \"Pus%\").list();\n"
+ " \n"
+ "query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like :name\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(\"name\", \"Pus%\").list(); ]]>"
+
+#: index.docbook:361
+msgid "Named SQL queries"
+msgstr "ååä»ãSQLã¯ã¨ãª"
+
+#: index.docbook:363
+msgid "Named SQL queries may be defined in the mapping document and called in exactly the same way as a named HQL query. In this case, we do <emphasis>not</emphasis> need to call <literal>addEntity()</literal>."
+msgstr "ååä»ãSQLã¯ã¨ãªã¯ãããã³ã°ããã¥ã¡ã³ãã§å®ç¾©ãããã¨ãã§ãã ååä»ãHQLã¯ã¨ãªã¨å
¨ãåãæ¹æ³ã§å¼ã¶ãã¨ãã§ãã¾ãã ãã®å ´åã<literal>addEntity()</literal> ãå¼ã³åºãå¿
è¦ã¯ <emphasis>ãªã</emphasis> ã§ãã"
+
+#: index.docbook:368
+msgid ""
+ "<![CDATA[<sql-query name=\"persons\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex}\n"
+ " FROM PERSON person\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"persons\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex}\n"
+ " FROM PERSON person\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+
+#: index.docbook:370
+msgid ""
+ "<![CDATA[List people = sess.getNamedQuery(\"persons\")\n"
+ " .setString(\"namePattern\", namePattern)\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List people = sess.getNamedQuery(\"persons\")\n"
+ " .setString(\"namePattern\", namePattern)\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:372
+msgid "The <literal><return-join></literal> and <literal><load-collection></literal> elements are used to join associations and define queries which initialize collections, respectively."
+msgstr "é¢é£ãçµåããããã¨ã³ã¬ã¯ã·ã§ã³ãåæåããã¯ã¨ãªãå®ç¾©ããããã«ããããã <literal><return-join></literal> 㨠<literal><load-collection></literal> è¦ç´ ã使ãã¾ãã"
+
+#: index.docbook:377
+msgid ""
+ "<![CDATA[<sql-query name=\"personsWith\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"personsWith\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+
+#: index.docbook:379
+msgid "A named SQL query may return a scalar value. You must declare the column alias and Hibernate type using the <literal><return-scalar></literal> element:"
+msgstr "ååä»ãSQLã¯ã¨ãªã¯ã¹ã«ã©å¤ãè¿ããã¨ãã§ãã¾ãã <literal><return-scalar></literal> è¦ç´ ã使ã£ã¦ã åã®å¥åã¨Hibernateã®åã宣è¨ããªããã°ãªãã¾ããã"
+
+#: index.docbook:383
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return-scalar column=\"name\" type=\"string\"/>\n"
+ " <return-scalar column=\"age\" type=\"long\"/>\n"
+ " SELECT p.NAME AS name,\n"
+ " p.AGE AS age,\n"
+ " FROM PERSON p WHERE p.NAME LIKE 'Hiber%'\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return-scalar column=\"name\" type=\"string\"/>\n"
+ " <return-scalar column=\"age\" type=\"long\"/>\n"
+ " SELECT p.NAME AS name,\n"
+ " p.AGE AS age,\n"
+ " FROM PERSON p WHERE p.NAME LIKE 'Hiber%'\n"
+ "</sql-query>]]>"
+
+#: index.docbook:385
+msgid "You can externalize the resultset mapping informations in a <literal><resultset></literal> element to either reuse them accross several named queries or through the <literal>setResultSetMapping()</literal> API."
+msgstr "ãªã¶ã«ãã»ããã®ãããã³ã°æ
å ±ã <literal><resultset></literal> ã«å¤åºããããã¨ãã§ãã¾ãã è¤æ°ã®ååä»ãã¯ã¨ãªã§åå©ç¨ãããã<literal>setResultSetMapping()</literal> APIãéãã¦åå©ç¨ãããã§ãã¾ãã"
+
+#: index.docbook:390
+msgid ""
+ "<![CDATA[<resultset name=\"personAddress\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ "</resultset>\n"
+ "\n"
+ "<sql-query name=\"personsWith\" resultset-ref=\"personAddress\">\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<resultset name=\"personAddress\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ "</resultset>\n"
+ "\n"
+ "<sql-query name=\"personsWith\" resultset-ref=\"personAddress\">\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+
+#: index.docbook:392
+msgid "You can alternatively use the resultset mapping information in your hbm files directly in java code."
+msgstr "代ããã«ãhbmãã¡ã¤ã«å
ã®ãªã¶ã«ãã»ããã®ãããã³ã°æ
å ±ã ç´æ¥Javaã³ã¼ãã®ä¸ã§ä½¿ç¨ã§ãã¾ãã"
+
+#: index.docbook:395
+msgid ""
+ "<![CDATA[List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .setResultSetMapping(\"catAndKitten\")\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .setResultSetMapping(\"catAndKitten\")\n"
+ " .list();]]>"
+
+#: index.docbook:398
+msgid "Using return-property to explicitly specify column/alias names"
+msgstr "åã¨åã®å¥åãæ示çã«æå®ããããã« return-property ã使ã"
+
+#: index.docbook:401
+msgid "With <literal><return-property></literal> you can explicitly tell Hibernate what column aliases to use, instead of using the <literal>{}</literal>-syntax to let Hibernate inject its own aliases."
+msgstr "å¥åãæ¿å
¥ããããã« <literal>{}</literal> æ§æã使ã代ããã«ã <literal><return-property></literal> ã使ãã ã©ã®åã®å¥åã使ãã®ããæ示ã§ãã¾ãã"
+
+#: index.docbook:406
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return alias=\"person\" class=\"eg.Person\">\n"
+ " <return-property name=\"name\" column=\"myName\"/>\n"
+ " <return-property name=\"age\" column=\"myAge\"/>\n"
+ " <return-property name=\"sex\" column=\"mySex\"/>\n"
+ " </return>\n"
+ " SELECT person.NAME AS myName,\n"
+ " person.AGE AS myAge,\n"
+ " person.SEX AS mySex,\n"
+ " FROM PERSON person WHERE person.NAME LIKE :name\n"
+ "</sql-query>\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return alias=\"person\" class=\"eg.Person\">\n"
+ " <return-property name=\"name\" column=\"myName\"/>\n"
+ " <return-property name=\"age\" column=\"myAge\"/>\n"
+ " <return-property name=\"sex\" column=\"mySex\"/>\n"
+ " </return>\n"
+ " SELECT person.NAME AS myName,\n"
+ " person.AGE AS myAge,\n"
+ " person.SEX AS mySex,\n"
+ " FROM PERSON person WHERE person.NAME LIKE :name\n"
+ "</sql-query>\n"
+ "]]>"
+
+#: index.docbook:408
+msgid "<literal><return-property></literal> also works with multiple columns. This solves a limitation with the <literal>{}</literal>-syntax which can not allow fine grained control of multi-column properties."
+msgstr "<literal><return-property></literal> ã¯è¤æ°ã®åãæ±ãã¾ãã ããã¯ãè¤æ°åã®ããããã£ãããç´°ããå¶å¾¡ã§ããªãã¨ããã <literal>{}</literal> æ§æã®å¶éã解決ãã¾ãã"
+
+#: index.docbook:413
+msgid ""
+ "<![CDATA[<sql-query name=\"organizationCurrentEmployments\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " <return-property name=\"endDate\" column=\"myEndDate\"/>\n"
+ " </return>\n"
+ " SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},\n"
+ " STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},\n"
+ " REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT\n"
+ " WHERE EMPLOYER = :id AND ENDDATE IS NULL\n"
+ " ORDER BY STARTDATE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"organizationCurrentEmployments\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " <return-property name=\"endDate\" column=\"myEndDate\"/>\n"
+ " </return>\n"
+ " SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},\n"
+ " STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},\n"
+ " REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT\n"
+ " WHERE EMPLOYER = :id AND ENDDATE IS NULL\n"
+ " ORDER BY STARTDATE ASC\n"
+ "</sql-query>]]>"
+
+#: index.docbook:415
+msgid "Notice that in this example we used <literal><return-property></literal> in combination with the <literal>{}</literal>-syntax for injection. Allowing users to choose how they want to refer column and properties."
+msgstr "ãã®ä¾ã§ã¯ãæ¿å
¥ã®ããã® <literal>{}</literal> æ§æã¨ãã£ããã«ã <literal><return-property></literal> ã使ã£ã¦ãããã¨ã«æ³¨æãã¦ãã ããã åã¨ããããã£ãã©ã®ããã«åç
§ããããé¸ã¹ã¾ãã"
+
+#: index.docbook:420
+msgid "If your mapping has a discriminator you must use <literal><return-discriminator></literal> to specify the discriminator column."
+msgstr "ãããã³ã°ã« discriminator ãå«ã¾ãã¦ããå ´åã discriminator ã®åãæå®ããããã«ã<return-discriminator> ã使ããªããã°ãªãã¾ããã"
+
+#: index.docbook:426
+msgid "Using stored procedures for querying"
+msgstr "åãåããããããã«ã¹ãã¢ãããã·ã¼ã¸ã£ã使ã"
+
+#: index.docbook:428
+msgid "Hibernate 3 introduces support for queries via stored procedures and functions. Most of the following documentation is equivalent for both. The stored procedure/function must return a resultset as the first out-parameter to be able to work with Hibernate. An example of such a stored function in Oracle 9 and higher is as follows:"
+msgstr "Hibernateã¯ãã¼ã¸ã§ã³3ãããã¹ãã¢ãããã·ã¼ã¸ã£ã¨ã¹ãã¢ãé¢æ°çµç±ã®åãåããã ãµãã¼ãããã¾ããã 以éã®ææ¸ã®å¤ãã¯ã両æ¹ã«å½ã¦ã¯ã¾ãã¾ãã ã¹ãã¢ãããã·ã¼ã¸ã£ãã¹ãã¢ãé¢æ°ãHibernateã§ä½¿ãããã«ã¯ã 1çªç®ã®åºåãã©ã¡ã¼ã¿ã¨ãã¦ãªã¶ã«ãã»ãããè¿ããªããã°ãªãã¾ããã Oracle 9ï¼ãããã¯ãã以ä¸ã®ãã¼ã¸ã§ã³ï¼ã®ã¹ãã¢ãããã·ã¼ã¸ã£ã®ä¾ã以ä¸ã«ç¤ºãã¾ãã"
+
+#: index.docbook:434
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION selectAllEmployments\n"
+ " RETURN SYS_REFCURSOR\n"
+ "AS\n"
+ " st_cursor SYS_REFCURSOR;\n"
+ "BEGIN\n"
+ " OPEN st_cursor FOR\n"
+ " SELECT EMPLOYEE, EMPLOYER,\n"
+ " STARTDATE, ENDDATE,\n"
+ " REGIONCODE, EID, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT;\n"
+ " RETURN st_cursor;\n"
+ " END;]]>"
+msgstr ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION selectAllEmployments\n"
+ " RETURN SYS_REFCURSOR\n"
+ "AS\n"
+ " st_cursor SYS_REFCURSOR;\n"
+ "BEGIN\n"
+ " OPEN st_cursor FOR\n"
+ " SELECT EMPLOYEE, EMPLOYER,\n"
+ " STARTDATE, ENDDATE,\n"
+ " REGIONCODE, EID, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT;\n"
+ " RETURN st_cursor;\n"
+ " END;]]>"
+
+#: index.docbook:436
+msgid "To use this query in Hibernate you need to map it via a named query."
+msgstr "Hibernateã§ãã®ã¯ã¨ãªã使ãããã«ã¯ã ååä»ãã¯ã¨ãªã§ãããã³ã°ããå¿
è¦ãããã¾ãã"
+
+#: index.docbook:439
+msgid ""
+ "<![CDATA[<sql-query name=\"selectAllEmployees_SP\" callable=\"true\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"employee\" column=\"EMPLOYEE\"/>\n"
+ " <return-property name=\"employer\" column=\"EMPLOYER\"/>\n"
+ " <return-property name=\"startDate\" column=\"STARTDATE\"/>\n"
+ " <return-property name=\"endDate\" column=\"ENDDATE\"/>\n"
+ " <return-property name=\"regionCode\" column=\"REGIONCODE\"/>\n"
+ " <return-property name=\"id\" column=\"EID\"/>\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " </return>\n"
+ " { ? = call selectAllEmployments() }\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"selectAllEmployees_SP\" callable=\"true\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"employee\" column=\"EMPLOYEE\"/>\n"
+ " <return-property name=\"employer\" column=\"EMPLOYER\"/>\n"
+ " <return-property name=\"startDate\" column=\"STARTDATE\"/>\n"
+ " <return-property name=\"endDate\" column=\"ENDDATE\"/>\n"
+ " <return-property name=\"regionCode\" column=\"REGIONCODE\"/>\n"
+ " <return-property name=\"id\" column=\"EID\"/>\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " </return>\n"
+ " { ? = call selectAllEmployments() }\n"
+ "</sql-query>]]>"
+
+#: index.docbook:441
+msgid "Notice stored procedures currently only return scalars and entities. <literal><return-join></literal> and <literal><load-collection></literal> are not supported."
+msgstr "注æï¼ä»ã®ã¨ãããã¹ãã¢ãããã·ã¼ã¸ã£ã¯ã¹ã«ã©ã¨ã¨ã³ãã£ãã£ãè¿ãã®ã¿ã§ãã <literal><return-join></literal> 㨠<literal><load-collection></literal> ã¯ãµãã¼ãããã¦ãã¾ããã"
+
+#: index.docbook:446
+msgid "Rules/limitations for using stored procedures"
+msgstr "ã¹ãã¢ãããã·ã¼ã¸ã£ã使ãä¸ã§ã®ã«ã¼ã«ã¨å¶é"
+
+#: index.docbook:448
+msgid "To use stored procedures with Hibernate the procedures/functions have to follow some rules. If they do not follow those rules they are not usable with Hibernate. If you still want to use these procedures you have to execute them via <literal>session.connection()</literal>. The rules are different for each database, since database vendors have different stored procedure semantics/syntax."
+msgstr "Hibernateã§ã¹ãã¢ãããã·ã¼ã¸ã£ãé¢æ°ã使ãããã«ã¯ã ãã®ããã·ã¼ã¸ã£ã¯ããã¤ãã®ã«ã¼ã«ã«æºæ ããå¿
è¦ãããã¾ãã ã«ã¼ã«ã«æºæ ãã¦ããªãããã·ã¼ã¸ã£ã¯ãHibernateã§ä½¿ããã¨ã¯ã§ãã¾ããã ããã§ããæºæ ãã¦ããªãããã·ã¼ã¸ã£ã使ãããã®ã§ããã°ã <literal>session.connection()</literal> ãéãã¦å®è¡ããªããã°ãªãã¾ããã ã«ã¼ã«ã¯ãã¼ã¿ãã¼ã¹ãã¨ã«ç°ãªãã¾ãã ã¹ãã¢ãããã·ã¼ã¸ã£ã®ã»ãã³ãã£ãã¯ã¹ã¨ã·ã³ã¿ãã¯ã¹ã¯ã ãã¼ã¿ãã¼ã¹ãã³ããã¨ã«ç°ãªãããã§ãã"
+
+#: index.docbook:455
+msgid "Stored procedure queries can't be paged with <literal>setFirstResult()/setMaxResults()</literal>."
+msgstr "<literal>setFirstResult()/setMaxResults()</literal> ã使ã£ã¦ã ã¹ãã¢ãããã·ã¼ã¸ã£ã¯ã¨ãªããã¼ã¸åããããã¨ã¯ã§ãã¾ããã"
+
+#: index.docbook:458
+msgid "Recommended call form is standard SQL92: <literal>{ ? = call functionName(<parameters>) }</literal> or <literal>{ ? = call procedureName(<parameters>}</literal>. Native call syntax is not supported."
+msgstr "æ¨å¥¨ããå¼ã³åºãæ¹ã¯ãæ¨æºã§ããSQL92ã«å¾ããã¨ã§ãã <literal>{ ? = call functionName(<parameters>) }</literal> ã <literal>{ ? = call procedureName(<parameters>) }</literal> ã§ãã ãã¤ãã£ããªå¼ã³åºãæ§æã¯ãµãã¼ãããã¦ãã¾ããã"
+
+#: index.docbook:463
+msgid "For Oracle the following rules apply:"
+msgstr "Oracleã«ã¯ä¸è¨ã®ã«ã¼ã«ãé©ç¨ããã¾ãã"
+
+#: index.docbook:467
+msgid "A function must return a result set. The first parameter of a procedure must be an <literal>OUT</literal> that returns a result set. This is done by using a <literal>SYS_REFCURSOR</literal> type in Oracle 9 or 10. In Oracle you need to define a <literal>REF CURSOR</literal> type, see Oracle literature."
+msgstr "é¢æ°ã¯ãªã¶ã«ãã»ãããè¿ããªããã°ãªãã¾ããã ããã·ã¼ã¸ã£ã®ç¬¬ä¸å¼æ°ã¯ãªã¶ã«ãã»ãããè¿ãããã <literal>OUT</literal> ã§ãªããã°ãªãã¾ããã Oracle 9ã¨10ã§ã¯ã<literal>SYS_REFCURSOR</literal> ã使ããã¨ã«ãã£ã¦ã§ãã¾ãã Oracleã§ã¯ <literal>REF CURSOR</literal> åãå®ç¾©ããå¿
è¦ãããã¾ãã Oracleã®æç®ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:476
+msgid "For Sybase or MS SQL server the following rules apply:"
+msgstr "Sybaseã¨MS SQLãµã¼ãã¼ã«é©ç¨ãããã«ã¼ã«ãä¸è¨ã«ç¤ºãã¾ãã"
+
+#: index.docbook:480
+msgid "The procedure must return a result set. Note that since these servers can/will return multiple result sets and update counts, Hibernate will iterate the results and take the first result that is a result set as its return value. Everything else will be discarded."
+msgstr "ããã·ã¼ã¸ã£ã¯ãªã¶ã«ãã»ãããè¿ããªããã°ãªãã¾ããã ãµã¼ãã¼ã¯è¤æ°ã®ãªã¶ã«ãã»ããã¨æ´æ°ã«ã¦ã³ããè¿ãã¾ããã Hibernateã¯1ã¤ç®ã®ãªã¶ã«ãã»ããã ããè¿ããã¨ã«æ³¨æãã¦ãã ããã ãã®ä»ã¯ãã¹ã¦æ¨ã¦ããã¾ãã"
+
+#: index.docbook:488
+msgid "If you can enable <literal>SET NOCOUNT ON</literal> in your procedure it will probably be more efficient, but this is not a requirement."
+msgstr "ããã·ã¼ã¸ã£ã®ä¸ã§ <literal>SET NOCOUNT ON</literal> ãæå¹ã«ã§ããã°ã ããããå¹çããããªãã§ãããã ããããããã¯å¿
è¦æ¡ä»¶ã§ã¯ããã¾ããã"
+
+#: index.docbook:498
+msgid "Custom SQL for create, update and delete"
+msgstr "ä½æãæ´æ°ãåé¤ã®ããã®ã«ã¹ã¿ã SQL"
+
+#: index.docbook:500
+msgid "Hibernate3 can use custom SQL statements for create, update, and delete operations. The class and collection persisters in Hibernate already contain a set of configuration time generated strings (insertsql, deletesql, updatesql etc.). The mapping tags <literal><sql-insert></literal>, <literal><sql-delete></literal>, and <literal><sql-update></literal> override these strings:"
+msgstr "Hibernate3ã¯ä½æãæ´æ°ãåé¤å¦çã®ããã®ã«ã¹ã¿ã SQLæã使ç¨ã§ãã¾ãã ã¯ã©ã¹ã¨ã³ã¬ã¯ã·ã§ã³ã®æ°¸ç¶åæ©æ§ã¯ãã³ã³ãã£ã°ã¬ã¼ã·ã§ã³æã«çæãããæåå ï¼insertsqlãdeletesqlãupdatesqlãªã©ï¼ã®ã»ããããã§ã«ä¿æãã¦ãã¾ãã ãããã®æååããã <literal><sql-insert></literal>ã <literal><sql-delete></literal>ã <literal><sql-update></literal> ã¨ãããããã³ã°ã¿ã°ãåªå
ããã¾ãã"
+
+#: index.docbook:508
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>\n"
+ " <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>\n"
+ " <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>\n"
+ " <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>\n"
+ " <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>\n"
+ "</class>]]>"
+
+#: index.docbook:510
+msgid "The SQL is directly executed in your database, so you are free to use any dialect you like. This will of course reduce the portability of your mapping if you use database specific SQL."
+msgstr "SQLãç´æ¥ãã¼ã¿ãã¼ã¹ã§å®è¡ããããã好ã¿ã®æ¹è¨ãèªç±ã«ä½¿ç¨ã§ãã¾ãã ãã¼ã¿ãã¼ã¹ç¬èªã®SQLã使ãã°ãå½ç¶ãããã³ã°ã®ãã¼ã¿ããªãã£ãä¸ããã¾ãã"
+
+#: index.docbook:514
+msgid "Stored procedures are supported if the <literal>callable</literal> attribute is set:"
+msgstr "<literal>callable</literal> å±æ§ãã»ããããã°ã ã¹ãã¢ãããã·ã¼ã¸ã£ã使ç¨ã§ãã¾ãã"
+
+#: index.docbook:517
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert callable=\"true\">{call createPerson (?, ?)}</sql-insert>\n"
+ " <sql-delete callable=\"true\">{? = call deletePerson (?)}</sql-delete>\n"
+ " <sql-update callable=\"true\">{? = call updatePerson (?, ?)}</sql-update>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert callable=\"true\">{call createPerson (?, ?)}</sql-insert>\n"
+ " <sql-delete callable=\"true\">{? = call deletePerson (?)}</sql-delete>\n"
+ " <sql-update callable=\"true\">{? = call updatePerson (?, ?)}</sql-update>\n"
+ "</class>]]>"
+
+#: index.docbook:519
+msgid "The order of the positional parameters are currently vital, as they must be in the same sequence as Hibernate expects them."
+msgstr "ä»ã®ã¨ãããä½ç½®ãã©ã¡ã¼ã¿ã®é çªã¯ã¨ã¦ãéè¦ã§ãã ããªãã¡ãHibernateãæå¾
ããé åºã§ãªããã°ãªãã¾ããã"
+
+#: index.docbook:522
+msgid "You can see the expected order by enabling debug logging for the <literal>org.hibernate.persister.entity</literal> level. With this level enabled Hibernate will print out the static SQL that is used to create, update, delete etc. entities. (To see the expected sequence, remember to not include your custom SQL in the mapping files as that will override the Hibernate generated static sql.)"
+msgstr "<literal>org.hiberante.persister.entity</literal> ã¬ãã«ã®ãããã°ãã°ã æå¹ã«ãããã¨ã«ãã£ã¦ãæå¾
ãããé çªã確ããããã¾ãã ãã®ã¬ãã«ãæå¹ã«ãããã¨ã«ãããã¨ã³ãã£ãã£ã®ä½æãæ´æ°ãåé¤ãªã©ã§ 使ç¨ãããéçãªSQLãåºåããã¾ãã ï¼æå¾
ãããé åºã確èªããããã«ã¯ãHibernateãçæããéçãªSQLããªã¼ãã¼ã©ã¤ããã ã«ã¹ã¿ã SQLããããã³ã°ãã¡ã¤ã«ã«å«ããªããã¨ãå¿ããªãã§ãã ãããï¼"
+
+#: index.docbook:529
+msgid "The stored procedures are in most cases (read: better do it than not) required to return the number of rows inserted/updated/deleted, as Hibernate has some runtime checks for the success of the statement. Hibernate always registers the first statement parameter as a numeric output parameter for the CUD operations:"
+msgstr "ã¹ãã¢ãããã·ã¼ã¸ã£ã¯æ¿å
¥/æ´æ°/åé¤ãããè¡æ°ãè¿ãå¿
è¦ãããã¾ã ï¼èªã¿è¾¼ã¿ã®å ´åã¯ãè¿ããªãããã¯è¿ãæ¹ãããã§ãï¼ã å®è¡æã«HibernateãSQLæã®æåããã§ãã¯ããããã§ãã Hibernateã¯ãCUDå¦çã®ããã®æ°å¤ã®åºåãã©ã¡ã¼ã¿ã¨ãã¦ã SQLæã®æåã®ãã©ã¡ã¼ã¿ããã¤ãè¨é²ãã¾ãã"
+
+#: index.docbook:535
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)\n"
+ " RETURN NUMBER IS\n"
+ "BEGIN\n"
+ "\n"
+ " update PERSON\n"
+ " set\n"
+ " NAME = uname,\n"
+ " where\n"
+ " ID = uid;\n"
+ "\n"
+ " return SQL%ROWCOUNT;\n"
+ "\n"
+ "END updatePerson;]]>"
+msgstr ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)\n"
+ " RETURN NUMBER IS\n"
+ "BEGIN\n"
+ "\n"
+ " update PERSON\n"
+ " set\n"
+ " NAME = uname,\n"
+ " where\n"
+ " ID = uid;\n"
+ "\n"
+ " return SQL%ROWCOUNT;\n"
+ "\n"
+ "END updatePerson;]]>"
+
+#: index.docbook:539
+msgid "Custom SQL for loading"
+msgstr "ãã¼ãã®ããã®ã«ã¹ã¿ã SQL"
+
+#: index.docbook:541
+msgid "You may also declare your own SQL (or HQL) queries for entity loading:"
+msgstr "ã¨ã³ãã£ãã£ãèªã¿è¾¼ãããã®ç¬èªã®SQLï¼ãããã¯HQLï¼ã¯ã¨ãªã宣è¨ã§ãã¾ãã"
+
+#: index.docbook:544
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\" lock-mode=\"upgrade\"/>\n"
+ " SELECT NAME AS {pers.name}, ID AS {pers.id}\n"
+ " FROM PERSON\n"
+ " WHERE ID=?\n"
+ " FOR UPDATE\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\" lock-mode=\"upgrade\"/>\n"
+ " SELECT NAME AS {pers.name}, ID AS {pers.id}\n"
+ " FROM PERSON\n"
+ " WHERE ID=?\n"
+ " FOR UPDATE\n"
+ "</sql-query>]]>"
+
+#: index.docbook:546
+msgid "This is just a named query declaration, as discussed earlier. You may reference this named query in a class mapping:"
+msgstr "ããã¯ãã¾ãã«ï¼ä»¥åè°è«ããï¼ååä»ãã¯ã¨ãªã®å®£è¨ã§ãã ãã®ååä»ãã¯ã¨ãªãã¯ã©ã¹ã®ãããã³ã°ããåç
§ã§ãã¾ãã"
+
+#: index.docbook:549
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <loader query-ref=\"person\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <loader query-ref=\"person\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:551
+msgid "This even works with stored procedures."
+msgstr "ããã¯ã¹ãã¢ãããã·ã¼ã¸ã£ã§ãããåä½ãã¾ãã"
+
+#: index.docbook:553
+msgid "You may even define a query for collection loading:"
+msgstr "次ã®ããã«ãã³ã¬ã¯ã·ã§ã³ããã¼ãããããã®ã¯ã¨ãªããå®ç¾©ãã¦ããã§ãã"
+
+#: index.docbook:555
+msgid ""
+ "<![CDATA[<set name=\"employments\" inverse=\"true\">\n"
+ " <key/>\n"
+ " <one-to-many class=\"Employment\"/>\n"
+ " <loader query-ref=\"employments\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"employments\" inverse=\"true\">\n"
+ " <key/>\n"
+ " <one-to-many class=\"Employment\"/>\n"
+ " <loader query-ref=\"employments\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:557
+msgid ""
+ "<![CDATA[<sql-query name=\"employments\">\n"
+ " <load-collection alias=\"emp\" role=\"Person.employments\"/>\n"
+ " SELECT {emp.*}\n"
+ " FROM EMPLOYMENT emp\n"
+ " WHERE EMPLOYER = :id\n"
+ " ORDER BY STARTDATE ASC, EMPLOYEE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"employments\">\n"
+ " <load-collection alias=\"emp\" role=\"Person.employments\"/>\n"
+ " SELECT {emp.*}\n"
+ " FROM EMPLOYMENT emp\n"
+ " WHERE EMPLOYER = :id\n"
+ " ORDER BY STARTDATE ASC, EMPLOYEE ASC\n"
+ "</sql-query>]]>"
+
+#: index.docbook:559
+msgid "You could even define an entity loader that loads a collection by join fetching:"
+msgstr "次ã®ããã«ãçµåãã§ããã«ããã³ã¬ã¯ã·ã§ã³ããã¼ããã ã¨ã³ãã£ãã£ãã¼ãã¼ãå®ç¾©ã§ãã¾ãã"
+
+#: index.docbook:562
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\"/>\n"
+ " <return-join alias=\"emp\" property=\"pers.employments\"/>\n"
+ " SELECT NAME AS {pers.*}, {emp.*}\n"
+ " FROM PERSON pers\n"
+ " LEFT OUTER JOIN EMPLOYMENT emp\n"
+ " ON pers.ID = emp.PERSON_ID\n"
+ " WHERE ID=?\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\"/>\n"
+ " <return-join alias=\"emp\" property=\"pers.employments\"/>\n"
+ " SELECT NAME AS {pers.*}, {emp.*}\n"
+ " FROM PERSON pers\n"
+ " LEFT OUTER JOIN EMPLOYMENT emp\n"
+ " ON pers.ID = emp.PERSON_ID\n"
+ " WHERE ID=?\n"
+ "</sql-query>]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/quickstart.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/quickstart.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/quickstart.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,12 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/session_api.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/session_api.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/session_api.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1426 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Working with objects"
+msgstr "ãªãã¸ã§ã¯ããæ±ã"
+
+#: index.docbook:7
+msgid "Hibernate is a full object/relational mapping solution that not only shields the developer from the details of the underlying database management system, but also offers <emphasis>state management</emphasis> of objects. This is, contrary to the management of SQL <literal>statements</literal> in common JDBC/SQL persistence layers, a very natural object-oriented view of persistence in Java applications."
+msgstr "Hibernate ã¯å®å
¨ãªãªãã¸ã§ã¯ã/ãªã¬ã¼ã·ã§ãã«ãããã³ã°ã½ãªã¥ã¼ã·ã§ã³ã§ããã ãã¼ã¿ãã¼ã¹ç®¡çã·ã¹ãã ã®è©³ç´°ãéçºè
ããé è½ããã ãã§ãªãã ãªãã¸ã§ã¯ãã® <emphasis>ç¶æ
管ç</emphasis> ãè¡ãã¾ãã ããã¯ãJDBC/SQLæ°¸ç¶å±¤ã¨åããããªSQL <literal>æ</literal> ã®ç®¡çã¨ã¯ç°ãªãã Javaã¢ããªã±ã¼ã·ã§ã³ã«ãããæ°¸ç¶åã«å¯¾ãããã¨ã¦ãèªç¶ãªãªãã¸ã§ã¯ãæåã®èãæ¹ãæä¾ãã¾ãã"
+
+#: index.docbook:16
+msgid "In other words, Hibernate application developers should always think about the <emphasis>state</emphasis> of their objects, and not necessarily about the execution of SQL statements. This part is taken care of by Hibernate and is only relevant for the application developer when tuning the performance of the system."
+msgstr "è¨ããããã°ãHibernateãç¨ããã¢ããªã±ã¼ã·ã§ã³éçºè
ã¯ããªãã¸ã§ã¯ãã® <emphasis>ç¶æ
</emphasis> ã«ã¤ãã¦ã¯ 常ã«æèãã¹ãã§ãããSQLæã®å®è¡ã«ã¤ãã¦ã¯å¿
ãããããã§ã¯ããã¾ããã ãã®é¨åã¯ãé常ãHibernateãå¦çããã·ã¹ãã ã®ããã©ã¼ãã³ã¹ããã¥ã¼ãã³ã°ããã¨ãã«ã ãã åé¡ã«ãªã£ã¦ãã¾ãã"
+
+#: index.docbook:24
+msgid "Hibernate object states"
+msgstr "Hibernateã«ããããªãã¸ã§ã¯ãã®ç¶æ
"
+
+#: index.docbook:26
+msgid "Hibernate defines and supports the following object states:"
+msgstr "Hibernateã¯æ¬¡ã®ãããªãªãã¸ã§ã¯ãã®ç¶æ
ãå®ç¾©ãããµãã¼ããã¦ãã¾ãã"
+
+#: index.docbook:32
+msgid "<emphasis>Transient</emphasis> - an object is transient if it has just been instantiated using the <literal>new</literal> operator, and it is not associated with a Hibernate <literal>Session</literal>. It has no persistent representation in the database and no identifier value has been assigned. Transient instances will be destroyed by the garbage collector if the application doesn't hold a reference anymore. Use the Hibernate <literal>Session</literal> to make an object persistent (and let Hibernate take care of the SQL statements that need to be executed for this transition)."
+msgstr "<emphasis> ä¸æç(Transient) </emphasis> - <literal>new</literal> æ¼ç®åã使ã£ã¦ ã¤ã³ã¹ã¿ã³ã¹åãããã ãã§ã Hibernateã® <literal>Session</literal> ã«é¢é£ä»ãããã¦ããªããªãã¸ã§ã¯ãã¯ã ä¸æç(transient)ã§ãã ããã¯ããã¼ã¿ãã¼ã¹ã«æ°¸ç¶çãªè¡¨ç¾ãæãããèå¥åã¨ãªãå¤ã¯å²ãå½ã¦ããã¦ãã¾ããã ä¸æçãªã¤ã³ã¹ã¿ã³ã¹ã¯ãã¢ããªã±ã¼ã·ã§ã³ããã®åç
§ãã©ãã«ãä¿æããªãå ´åã«ã ã¬ãã¼ã¸ã³ã¬ã¯ã¿ã«ãã£ã¦ç ´æ£ããã¾ãã ãªãã¸ã§ã¯ããæ°¸ç¶ç(persistent)ãªç¶æ
ã«ããããã«ã¯ãHibernateã® <literal>Session</literal> ã使ãã¾ãããã ï¼ãã®ç¶æ
é·ç§»ã«å¿
è¦ã¨ãªãSQLæã®çºè¡ã¯ãHibernateã«ä»»ãã¾ããããï¼"
+
+#: index.docbook:44
+msgid "<emphasis>Persistent</emphasis> - a persistent instance has a representation in the database and an identifier value. It might just have been saved or loaded, however, it is by definition in the scope of a <literal>Session</literal>. Hibernate will detect any changes made to an object in persistent state and synchronize the state with the database when the unit of work completes. Developers don't execute manual <literal>UPDATE</literal> statements, or <literal>DELETE</literal> statements when an object should be made transient."
+msgstr "<emphasis>æ°¸ç¶ç(Persistent)</emphasis> - æ°¸ç¶çãªã¤ã³ã¹ã¿ã³ã¹ã¯ãã¼ã¿ãã¼ã¹ã« æ°¸ç¶çãªè¡¨ç¾ãæã¡ãèå¥åã¨ãªãå¤ãæã£ã¦ãã¾ãã ããã¯ãã»ã¼ãããããããã¼ãããããããããããã¾ãããã å®ç¾©ä¸ã¯ã <literal>Session</literal> ã®ã¹ã³ã¼ãã®ä¸ã«åå¨ãã¦ãã¾ãã Hibernateã¯ãä½æ¥åä½ï¼Unit of workï¼ãå®äºããã¨ãã«ã æ°¸ç¶ç¶æ
ã®ãªãã¸ã§ã¯ãã«å ããããå¤æ´ãæ¤åºãã ãªãã¸ã§ã¯ãã®ç¶æ
ã¨ãã¼ã¿ãã¼ã¹ãåæãã¾ãã ãªãã¸ã§ã¯ããä¸æç(transient)ã«ããã¨ãã¯ãéçºè
ã¯ãæä½æ¥ã§ <literal>UPDATE</literal> æã <literal>DELETE</literal> æãå®è¡ãã¾ããã"
+
+#: index.docbook:55
+msgid "<emphasis>Detached</emphasis> - a detached instance is an object that has been persistent, but its <literal>Session</literal> has been closed. The reference to the object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be reattached to a new <literal>Session</literal> at a later point in time, making it (and all the modifications) persistent again. This feature enables a programming model for long running units of work that require user think-time. We call them <emphasis>application transactions</emphasis>, i.e. a unit of work from the point of view of the user."
+msgstr "<emphasis>åé¢(Detached)</emphasis> - åé¢ãããã¤ã³ã¹ã¿ã³ã¹ã¨ã¯ãæ°¸ç¶åããã¦ãããã ããã¨é¢é£ä»ãã¦ãã <literal>Session</literal> ãã¯ãã¼ãºããã¦ãããªãã¸ã§ã¯ãã®ãã¨ã§ãã ãã®ãªãã¸ã§ã¯ãã¸ã®åç
§ã¯ãä¾ç¶ã¨ãã¦æå¹ã§ãã ããã¦ããã¡ãããåé¢ãããç¶æ
ã«ãããªãã¸ã§ã¯ãã¯ãä¿®æ£ãããã¨ããã§ãã¾ãã åé¢ãããã¤ã³ã¹ã¿ã³ã¹ã¯ãããä¸åº¦æ°¸ç¶åãããï¼ããã¦ããã¹ã¦ã®å¤æ´ãæ°¸ç¶åãããï¼ã¨ãã«ã æ°ãã <literal>Session</literal> ã«å追å ã§ãã¾ãã ãã®æ©è½ã¯ãã¦ã¼ã¶ãèããæéãå¿
è¦ã¨ãããããªãé·æéã«åã¶ä½æ¥åä½ã«å¯¾ãã ããã°ã©ãã³ã°ã¢ãã«ãå¯è½ã«ãã¾ãã æã
ã¯ãããã <emphasis>ã¢ããªã±ã¼ã·ã§ã³ã®ãã©ã³ã¶ã¯ã·ã§ã³ï¼application transactionsï¼</emphasis> ã¨å¼ãã§ãã¾ãã ããªãã¡ãã¦ã¼!
ã¶ããè¦ãä½æ¥åä½ã ã¨ãããã¨ã§ãã"
+
+#: index.docbook:69
+msgid "We'll now discuss the states and state transitions (and the Hibernate methods that trigger a transition) in more detail."
+msgstr "ãããããç¶æ
ã¨ç¶æ
é·ç§»ï¼ããã¦ãé·ç§»ã®ãã£ããã¨ãªãHibernateã®ã¡ã½ããï¼ã«ã¤ã㦠ã詳細ã«è¿°ã¹ã¾ãã"
+
+#: index.docbook:77
+msgid "Making objects persistent"
+msgstr "ãªãã¸ã§ã¯ããæ°¸ç¶ç¶æ
ã«ãã"
+
+#: index.docbook:79
+msgid "Newly instantiated instances of a a persistent class are considered <emphasis>transient</emphasis> by Hibernate. We can make a transient instance <emphasis>persistent</emphasis> by associating it with a session:"
+msgstr "æ°ããã¤ã³ã¹ã¿ã³ã¹åãããæ°¸ç¶ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ã Hibernateã§ã¯ <emphasis>ä¸æç(transient)</emphasis> ã¨è¦ãªããã¾ãã 以ä¸ã®ããã«ãã»ãã·ã§ã³ã¨é¢é£ã¥ãããã¨ã§ãä¸æçãªã¤ã³ã¹ã¿ã³ã¹ã <emphasis>æ°¸ç¶ç¶æ
(persistent)</emphasis> ã«ã§ãã¾ãã"
+
+#: index.docbook:86
+msgid ""
+ "<![CDATA[DomesticCat fritz = new DomesticCat();\n"
+ "fritz.setColor(Color.GINGER);\n"
+ "fritz.setSex('M');\n"
+ "fritz.setName(\"Fritz\");\n"
+ "Long generatedId = (Long) sess.save(fritz);]]>"
+msgstr ""
+ "<![CDATA[DomesticCat fritz = new DomesticCat();
+\n"
+ "fritz.setColor(Color.GINGER);
+\n"
+ "fritz.setSex('M');
+\n"
+ "fritz.setName(\"Fritz\");
+\n"
+ "Long generatedId = (Long) sess.save(fritz);]]>"
+
+#: index.docbook:88
+msgid "If <literal>Cat</literal> has a generated identifier, the identifier is generated and assigned to the <literal>cat</literal> when <literal>save()</literal> is called. If <literal>Cat</literal> has an <literal>assigned</literal> identifier, or a composite key, the identifier should be assigned to the <literal>cat</literal> instance before calling <literal>save()</literal>. You may also use <literal>persist()</literal> instead of <literal>save()</literal>, with the semantics defined in the EJB3 early draft."
+msgstr "<literal>Cat</literal> ã¯ã©ã¹ã®èå¥åãèªåçæãããã®ã§ããã°ã <literal>save()</literal> ãå¼ã°ããã¨ãã«ã èå¥åãçæããã <literal>cat</literal> ã¤ã³ã¹ã¿ã³ã¹ã«å²ãå½ã¦ããã¾ãã <literal>Cat</literal> ã®èå¥åãä»ããå²ãå½ã¦ãããï¼ <literal>assigned</literal> èå¥åãæã¤ï¼ããè¤åãã¼ã§ãããªãã <literal>save()</literal> ãå¼ã³åºãåã«ãèå¥åãå²ãå½ã¦ãªããã°ãªãã¾ããã <literal>save()</literal> ã®ä»£ããã«ãEJB3 ã®åæãã©ããã§å®ç¾©ããã <literal>persist()</literal> ã使ããã¨ãå¯è½ã§ãã"
+
+#: index.docbook:100
+msgid "<literal>persist()</literal> makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. <literal>persist()</literal> also guarantees that it will not execute an <literal>INSERT</literal> statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context."
+msgstr "代ããã«ãèå¥åãå¼æ°ã«ã¨ã <literal>save()</literal> ã¡ã½ããã使ã£ã¦ã èå¥åãå²ãå½ã¦ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:111
+msgid "<literal>save()</literal> does guarantee to return an identifier. If an INSERT has to be executed to get the identifier ( e.g. \"identity\" generator, not \"sequence\"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is problematic in a long-running conversation with an extended Session/persistence context."
+msgstr ""
+ "<![CDATA[DomesticCat pk = new DomesticCat();
+\n"
+ "pk.setColor(Color.TABBY);
+\n"
+ "pk.setSex('F');
+\n"
+ "pk.setName(\"PK\");
+\n"
+ "pk.setKittens( new HashSet() );
+\n"
+ "pk.addKitten(fritz);
+\n"
+ "sess.save( pk, new Long(1234) );]]>"
+
+#: index.docbook:121
+msgid "Alternatively, you may assign the identifier using an overloaded version of <literal>save()</literal>."
+msgstr "æ°¸ç¶åãããªãã¸ã§ã¯ããé¢é£ãªãã¸ã§ã¯ããæã£ã¦ããå ´å ï¼ä¾ãã°ãåã®ä¾ã«ããã <literal>kittens</literal> ã³ã¬ã¯ã·ã§ã³ã®ããã«ï¼ã å¤é¨ãã¼ã«ã©ã ã«ã <literal>NOT NULL</literal> å¶ç´ãã¤ããªãéãã¯ã ãããã®ä¸é£ã®ãªãã¸ã§ã¯ããã©ããªé çªã§æ°¸ç¶åãã¦ããã¾ãã¾ããã å¤é¨ãã¼å¶ç´ãéåããæãã¯ããã¾ããã ãããã <literal>NOT NULL</literal> å¶ç´ãããå ´åãééã£ãé çªã§ãªãã¸ã§ã¯ãã <literal>save()</literal> ãã¦ãã¾ãã¨ã å¶ç´ã«éåããããããã¾ããã"
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[DomesticCat pk = new DomesticCat();\n"
+ "pk.setColor(Color.TABBY);\n"
+ "pk.setSex('F');\n"
+ "pk.setName(\"PK\");\n"
+ "pk.setKittens( new HashSet() );\n"
+ "pk.addKitten(fritz);\n"
+ "sess.save( pk, new Long(1234) );]]>"
+msgstr "é¢é£ãããªãã¸ã§ã¯ããèªåçã«ä¿åããã Hibernateã® <emphasis>é·ç§»çãªæ°¸ç¶å(transitive persistence)</emphasis> æ©è½ã 使ãã¤ãããªãã°ããã®ãããªè©³ç´°ãæ°ã«ããå¿
è¦ã¯ããã¾ããã ããã¦ã <literal>NOT NULL</literal> å¶ç´ã®éåããèµ·ããã¾ããã Hibernateããã¹ã¦é¢åãã¿ã¦ããã¾ããé·ç§»çãªæ°¸ç¶åã¯ããã®ç« ã®å¾åã«æ¸ããã¦ãã¾ãã"
+
+#: index.docbook:128
+msgid "If the object you make persistent has associated objects (e.g. the <literal>kittens</literal> collection in the previous example), these objects may be made persistent in any order you like unless you have a <literal>NOT NULL</literal> constraint upon a foreign key column. There is never a risk of violating foreign key constraints. However, you might violate a <literal>NOT NULL</literal> constraint if you <literal>save()</literal> the objects in the wrong order."
+msgstr "ãªãã¸ã§ã¯ãã®ãã¼ã"
+
+#: index.docbook:138
+msgid "Usually you don't bother with this detail, as you'll very likely use Hibernate's <emphasis>transitive persistence</emphasis> feature to save the associated objects automatically. Then, even <literal>NOT NULL</literal> constraint violations don't occur - Hibernate will take care of everything. Transitive persistence is discussed later in this chapter."
+msgstr "æ°¸ç¶åãããã¤ã³ã¹ã¿ã³ã¹ã®èå¥åããããããåãã£ã¦ãããªãã <literal>Session</literal> ã® <literal>load()</literal> ã¡ã½ããã使ã£ã¦ã復å
ã§ãã¾ãã <literal>load()</literal> ã¯ãClass ãªãã¸ã§ã¯ããå¼æ°ã«ã¨ãã ãã®ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãæ°ãã«çæããç¶æ
ããã¼ããã¾ãã ãã®ã¤ã³ã¹ã¿ã³ã¹ã®ç¶æ
ã¯ãæ°¸ç¶(persistent)ç¶æ
ã§ãã"
+
+#: index.docbook:149
+msgid "Loading an object"
+msgstr "<![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]>"
+
+#: index.docbook:151
+msgid "The <literal>load()</literal> methods of <literal>Session</literal> gives you a way to retrieve a persistent instance if you already know its identifier. <literal>load()</literal> takes a class object and will load the state into a newly instantiated instance of that class, in persistent state."
+msgstr ""
+ "<![CDATA[// you need to wrap primitive identifiers
+\n"
+ "long id = 1234;
+\n"
+ "DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );]]>"
+
+#: index.docbook:158
+msgid "<![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]>"
+msgstr "ãããã¯ã以ä¸ã®ããã«ãæ¢åã®ã¤ã³ã¹ã¿ã³ã¹ã«ç¶æ
ããã¼ããããã¨ãã§ãã¾ãã"
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[// you need to wrap primitive identifiers\n"
+ "long id = 1234;\n"
+ "DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new DomesticCat();
+\n"
+ "// load pk's state into cat
+\n"
+ "sess.load( cat, new Long(pkId) );
+\n"
+ "Set kittens = cat.getKittens();]]>"
+
+#: index.docbook:162
+msgid "Alternatively, you can load state into a given instance:"
+msgstr "DBã«è©²å½ããè¡ãç¡ãå ´åã <literal>load()</literal> ã¯å復ä¸å¯è½ãªä¾å¤ã æãããã¨ã«æ³¨æãã¾ãããã ãã®ã¯ã©ã¹ããããã·ã使ã£ã¦ãããã³ã°ããã¦ããå ´åã <literal>load()</literal> ã¯åæåããã¦ããªããããã·ãè¿ãããããã·ã®ã¡ã½ãããå¼ã°ããã¾ã§å®éã«ã¯ ãã¼ã¿ãã¼ã¹ã«ã¢ã¯ã»ã¹ãã¾ããã ãããå®éã«ãã¼ã¿ãã¼ã¹ãããã¼ãããã«ããªãã¸ã§ã¯ãã«å¯¾ããé¢é£ãä½ãããå ´åã ãã®æ¯ãèãã¯ã¨ã¦ãå½¹ç«ã¡ã¾ãã <literal>batch-size</literal> ãã¯ã©ã¹ãããã³ã°ã«å®ç¾©ããã¦ãããªãã°ã è¤æ°ã®ã¤ã³ã¹ã¿ã³ã¹ãä¸æ¬ã§ãã¼ããããã¨ãå¯è½ã§ãã"
+
+#: index.docbook:166
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "// load pk's state into cat\n"
+ "sess.load( cat, new Long(pkId) );\n"
+ "Set kittens = cat.getKittens();]]>"
+msgstr "該å½ããè¡ãåå¨ãããã¨ã確信ã§ããªãå ´åã¯ã <literal>get()</literal> ã¡ã½ããã使ãã¹ãã§ãã ããã¯ããã¼ã¿ãã¼ã¹ã«ããã«ã¢ã¯ã»ã¹ãã該å½ããè¡ãç¡ãå ´åã¯nullãè¿ãã¾ãã"
+
+#: index.docbook:168
+msgid "Note that <literal>load()</literal> will throw an unrecoverable exception if there is no matching database row. If the class is mapped with a proxy, <literal>load()</literal> just returns an uninitialized proxy and does not actually hit the database until you invoke a method of the proxy. This behaviour is very useful if you wish to create an association to an object without actually loading it from the database. It also allows multiple instances to be loaded as a batch if <literal>batch-size</literal> is defined for the class mapping."
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);
+\n"
+ "if (cat==null) {
+\n"
+ " cat = new Cat();
+\n"
+ " sess.save(cat, id);
+\n"
+ "}
+\n"
+ "return cat;]]>"
+
+#: index.docbook:179
+msgid "If you are not certain that a matching row exists, you should use the <literal>get()</literal> method, which hits the database immediately and returns null if there is no matching row."
+msgstr "<literal>LockMode</literal> ã使ãã°ã <literal>SELECT ... FOR UPDATE</literal>ã¨ããSQLã 使ã£ã¦ãªãã¸ã§ã¯ãããã¼ããããã¨ãã§ãã¾ãã 詳細ãªæ
å ±ã¯ãAPIããã¥ã¡ã³ããåç
§ãã¦ãã ããã"
+
+#: index.docbook:185
+msgid ""
+ "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);\n"
+ "if (cat==null) {\n"
+ " cat = new Cat();\n"
+ " sess.save(cat, id);\n"
+ "}\n"
+ "return cat;]]>"
+msgstr "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]>"
+
+#: index.docbook:187
+msgid "You may even load an object using an SQL <literal>SELECT ... FOR UPDATE</literal>, using a <literal>LockMode</literal>. See the API documentation for more information."
+msgstr "é¢é£ã«å¯¾ããã«ã¹ã±ã¼ãæ¹æ³ã¨ã㦠<literal>lock</literal> ã <literal>all</literal> ã æå®ããªãéããé¢é£ããã¤ã³ã¹ã¿ã³ã¹ãå«ã¾ããã³ã¬ã¯ã·ã§ã³ã¯ <literal>FOR UPDATE</literal> ã§å¾©å
<emphasis>ãããªã</emphasis> ãã¨ã«æ³¨æãã¾ãããã"
+
+#: index.docbook:192
+msgid "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]>"
+msgstr "<literal>refresh()</literal> ã¡ã½ããã使ããã¨ã§ãã©ããªã¨ãã§ãããªãã¸ã§ã¯ãããã®ã³ã¬ã¯ã·ã§ã³ã ãªãã¼ããããã¨ãã§ãã¾ãã ãã¼ã¿ãã¼ã¹ã®ããªã¬ããã¼ãã«ãæ´æ°ããéã«ã ãã®ãã¼ãã«ã«å¯¾å¿ãããªãã¸ã§ã¯ãã®ããããã£ãåæããå ´åããã®ã¡ã½ãããå½¹ã«ç«ã¡ã¾ãã"
+
+#: index.docbook:194
+msgid "Note that any associated instances or contained collections are <emphasis>not</emphasis> selected <literal>FOR UPDATE</literal>, unless you decide to specify <literal>lock</literal> or <literal>all</literal> as a cascade style for the association."
+msgstr ""
+ "<![CDATA[sess.save(cat);
+\n"
+ "sess.flush(); //force the SQL INSERT
+\n"
+ "sess.refresh(cat); //re-read the state (after the trigger executes)]]>"
+
+#: index.docbook:201
+msgid "It is possible to re-load an object and all its collections at any time, using the <literal>refresh()</literal> method. This is useful when database triggers are used to initialize some of the properties of the object."
+msgstr "大åãªåé¡ã¯ããã¤ã次ã®ç¹ã«é¢ãããã®ã§ããããã¯ãHibernateããã¼ã¿ãã¼ã¹ããã ã©ã®ãããã®éã復å
ããã®ãã¨ãã©ã®ãããã®æ°ã®SQLã® <literal>SELECT</literal> æã使ãããã®ãã§ãã ããã¯ã <emphasis>ãã§ããã®æ¦ç¥</emphasis> ã«ããã¾ããããã«ã¤ãã¦ã¯ã<xref linkend=\"performance-fetching\"/> ã§èª¬æãã¦ãã¾ãã"
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[sess.save(cat);\n"
+ "sess.flush(); //force the SQL INSERT\n"
+ "sess.refresh(cat); //re-read the state (after the trigger executes)]]>"
+msgstr "<title>ã¯ã¨ãª</title>"
+
+#: index.docbook:209
+msgid "An important question usually appears at this point: How much does Hibernate load from the database and how many SQL <literal>SELECT</literal>s will it use? This depends on the <emphasis>fetching strategy</emphasis> and is explained in <xref linkend=\"performance-fetching\"/>."
+msgstr "æ¢ããããªãã¸ã§ã¯ãã®èå¥åãåãããªãå ´åã¯ãã¯ã¨ãªãå¿
è¦ã«ãªãã¾ãã Hibernateã¯ä½¿ããããã¦å¼·åãªãªãã¸ã§ã¯ãæåã®ã¯ã¨ãªè¨èª (HQL)ããµãã¼ããã¦ãã¾ãã ããã°ã©ã ã«ãã£ã¦ã¯ã¨ãªãä½æã§ããããã«ãHibernateã¯æ´ç·´ãããCriteriaã¨Exampleã¯ã¨ãªæ©è½(QBCã¨QBEï¼ã ãµãã¼ããã¦ãã¾ããResultSetããªãã¸ã§ã¯ãã«å¤æããHibernateã®ãªãã·ã§ã³æ©è½ã使ããã¨ã§ã ãã¼ã¿ãã¼ã¹ã®ãã¤ãã£ããªSQLã§ã¯ã¨ãªã表ç¾ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:219
+msgid "Querying"
+msgstr "ã¯ã¨ãªã®å®è¡"
+
+#: index.docbook:221
+msgid "If you don't know the identifiers of the objects you are looking for, you need a query. Hibernate supports an easy-to-use but powerful object oriented query language (HQL). For programmatic query creation, Hibernate supports a sophisticated Criteria and Example query feature (QBC and QBE). You may also express your query in the native SQL of your database, with optional support from Hibernate for result set conversion into objects."
+msgstr "HQLããã¤ãã£ããªSQLã¯ã¨ãªã¯ã <literal>org.hibernate.Query</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ã¨ãã¦è¡¨ç¾ããã¾ãã ãã®ã¤ã³ã¿ãã§ã¼ã¹ã¯ããã©ã¡ã¼ã¿ãã¤ã³ãã£ã³ã°ãResultSetã®ãã³ããªã³ã°ã ã¯ã¨ãªã®å®è¡ãè¡ãã¡ã½ãããç¨æãã¦ãã¾ãã é常ã <literal>Query</literal> ã¯ã以ä¸ã«ç¤ºãããã«ã ãã®æç¹ã® <literal>Session</literal> ã使ã£ã¦åå¾ãã¾ãã"
+
+#: index.docbook:231
+msgid "Executing queries"
+msgstr ""
+ "<![CDATA[List cats = session.createQuery(
+\n"
+ " \"from Cat as cat where cat.birthdate < ?\")
+\n"
+ " .setDate(0, date)
+\n"
+ " .list();
+\n"
+ "
+\n"
+ "List mothers = session.createQuery(
+\n"
+ " \"select mother from Cat as cat join cat.mother as mother where cat.name = ?\")
+\n"
+ " .setString(0, name)
+\n"
+ " .list();
+\n"
+ "
+\n"
+ "List kittens = session.createQuery(
+\n"
+ " \"from Cat as cat where cat.mother = ?\")
+\n"
+ " .setEntity(0, pk)
+\n"
+ " .list();
+\n"
+ "
+\n"
+ "Cat mother = (Cat) session.createQuery(
+\n"
+ " \"select cat.mother from Cat as cat where cat = ?\")
+\n"
+ " .setEntity(0, izi)
+\n"
+ " .uniqueResult();]]
+\n"
+ "
+\n"
+ "Query mothersWithKittens = (Cat) session.createQuery(
+\n"
+ " \"select mother from Cat as mother left join fetch mother.kittens\");
+\n"
+ "Set uniqueMothers = new HashSet(mothersWithKittens.list());
+\n"
+ "
+\n"
+ " ]]>"
+
+#: index.docbook:233
+msgid "HQL and native SQL queries are represented with an instance of <literal>org.hibernate.Query</literal>. This interface offers methods for parameter binding, result set handling, and for the execution of the actual query. You always obtain a <literal>Query</literal> using the current <literal>Session</literal>:"
+msgstr "ã¯ã¨ãªã¯ãæ®éã <literal>list()</literal> ãå¼ã³åºããã¨ã«ãã£ã¦å®è¡ããã¾ãã ã¯ã¨ãªã®çµæã¯ãã¡ã¢ãªä¸ã«ããã³ã¬ã¯ã·ã§ã³ã«ãã¹ã¦ãã¼ãããã¾ãã ã¯ã¨ãªã«ãã£ã¦å¾©å
ãããã¨ã³ãã£ãã£ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ãæ°¸ç¶ç¶æ
ã§ãã ãããã¯ã¨ãªããã£ã1åã®ã¤ã³ã¹ã¿ã³ã¹ãè¿ãã¨åãã£ã¦ãããªãã <literal>uniqueResult()</literal> ã¡ã½ãããæã£åãæ©ãæ¹æ³ã§ãã å³æãã§ãããå©ç¨ããã¯ã¨ãªã®å ´åããµã¤ããå¾ãããã³ã¬ã¯ã·ã§ã³ã«ã¯ã ã«ã¼ãã®ãªãã¸ã§ã¯ããéè¤ãã¦å«ã¾ãã¦ãã¾ã ï¼ããããã«ã¼ããæã¤ã³ã¬ã¯ã·ã§ã³ã¯åæå(ãã¼ãï¼ããã¦ãã¾ãï¼ã ãã®éè¤ã¯ <literal>Set</literal> ã使ã£ã¦åãé¤ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[List cats = session.createQuery(\n"
+ " \"from Cat as cat where cat.birthdate < ?\")\n"
+ " .setDate(0, date)\n"
+ " .list();\n"
+ "\n"
+ "List mothers = session.createQuery(\n"
+ " \"select mother from Cat as cat join cat.mother as mother where cat.name = ?\")\n"
+ " .setString(0, name)\n"
+ " .list();\n"
+ "\n"
+ "List kittens = session.createQuery(\n"
+ " \"from Cat as cat where cat.mother = ?\")\n"
+ " .setEntity(0, pk)\n"
+ " .list();\n"
+ "\n"
+ "Cat mother = (Cat) session.createQuery(\n"
+ " \"select cat.mother from Cat as cat where cat = ?\")\n"
+ " .setEntity(0, izi)\n"
+ " .uniqueResult();]]\n"
+ "\n"
+ "Query mothersWithKittens = (Cat) session.createQuery(\n"
+ " \"select mother from Cat as mother left join fetch mother.kittens\");\n"
+ "Set uniqueMothers = new HashSet(mothersWithKittens.list());]]>"
+msgstr "çµæãã¤ãã¬ã¼ããã"
+
+#: index.docbook:242
+msgid "A query is usually executed by invoking <literal>list()</literal>, the result of the query will be loaded completely into a collection in memory. Entity instances retrieved by a query are in persistent state. The <literal>uniqueResult()</literal> method offers a shortcut if you know your query will only return a single object. Note that queries that make use of eager fetching of collections usually return duplicates of the root objects (but with their collections initialized). You can filter these duplicates simply through a <literal>Set</literal>."
+msgstr "æã
ã <literal>iterate()</literal> ã¡ã½ããã使ã£ã¦ã¯ã¨ãªãå®è¡ãããã¨ã§ã ããè¯ãããã©ã¼ãã³ã¹ãå¾ããã¨ãã§ãã¾ãã ããã¯ãé常ãã¯ã¨ãªã«ãã£ã¦å¾ãããå®éã®ã¨ã³ãã£ãã£ã®ã¤ã³ã¹ã¿ã³ã¹ãã ãã§ã«ã»ãã·ã§ã³ã¾ãã¯äºæ¬¡ãã£ãã·ã¥ã«åå¨ãããã¨ãæå¾
ã§ããå ´åã ãã§ãã ãããããã¾ã ãã£ãã·ã¥ããã¦ããªããªãã <literal>iterate()</literal> ã¯ã <literal>list()</literal> ãããé
ããç°¡åãªã¯ã¨ãªã«å¯¾ãã¦ãå¤ãã®ãã¼ã¿ãã¼ã¹ã¢ã¯ã»ã¹ã å¿
è¦ã¨ãã¾ãããã®ã¢ã¯ã»ã¹ã¨ã¯ãèå¥åã ããåå¾ããããã®æåã®selectï¼åã¨ã å®éã®ã¤ã³ã¹ã¿ã³ã¹ãåæåããããã«å¾ããè¡ãnåã®selectã®ãã¨ã§ãã"
+
+#: index.docbook:254
+msgid "Iterating results"
+msgstr ""
+ "<![CDATA[// fetch ids
+\n"
+ "Iterator iter = sess.createQuery(\"from eg.Qux q order by q.likeliness\").iterate();
+\n"
+ "while ( iter.hasNext() ) {
+\n"
+ " Qux qux = (Qux) iter.next(); // fetch the object
+\n"
+ " // something we couldnt express in the query
+\n"
+ " if ( qux.calculateComplicatedAlgorithm() ) {
+\n"
+ " // delete the current instance
+\n"
+ " iter.remove();
+\n"
+ " // dont need to process the rest
+\n"
+ " break;
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:256
+msgid "Occasionally, you might be able to achieve better performance by executing the query using the <literal>iterate()</literal> method. This will only usually be the case if you expect that the actual entity instances returned by the query will already be in the session or second-level cache. If they are not already cached, <literal>iterate()</literal> will be slower than <literal>list()</literal> and might require many database hits for a simple query, usually <emphasis>1</emphasis> for the initial select which only returns identifiers, and <emphasis>n</emphasis> additional selects to initialize the actual instances."
+msgstr "ãªãã¸ã§ã¯ãã®çµï¼tupleï¼ãè¿ãã¯ã¨ãª"
+
+#: index.docbook:268
+msgid ""
+ "<![CDATA[// fetch ids\n"
+ "Iterator iter = sess.createQuery(\"from eg.Qux q order by q.likeliness\").iterate();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Qux qux = (Qux) iter.next(); // fetch the object\n"
+ " // something we couldnt express in the query\n"
+ " if ( qux.calculateComplicatedAlgorithm() ) {\n"
+ " // delete the current instance\n"
+ " iter.remove();\n"
+ " // dont need to process the rest\n"
+ " break;\n"
+ " }\n"
+ "}]]>"
+msgstr "Hibernateã®ã¯ã¨ãªã§ã¯ãæã
ããªãã¸ã§ã¯ãã®çµãè¿ããã¨ãããã¾ãã ãã®å ´åã¯ãåã¿ãã«ã¯é
åã¨ãã¦è¿ããã¾ãã"
+
+#: index.docbook:272
+msgid "Queries that return tuples"
+msgstr ""
+ "<![CDATA[Iterator kittensAndMothers = sess.createQuery(
+\n"
+ " \"select kitten, mother from Cat kitten join kitten.mother mother\")
+\n"
+ " .list()
+\n"
+ " .iterator();
+\n"
+ "
+\n"
+ "while ( kittensAndMothers.hasNext() ) {
+\n"
+ " Object[] tuple = (Object[]) kittensAndMothers.next();
+\n"
+ " Cat kitten = (Cat) tuple[0];
+\n"
+ " Cat mother = (Cat) tuple[1];
+\n"
+ " ....
+\n"
+ "}]]>"
+
+#: index.docbook:274
+msgid "Hibernate queries sometimes return tuples of objects, in which case each tuple is returned as an array:"
+msgstr "ã¹ã«ã©ã¼ã®çµæ"
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Iterator kittensAndMothers = sess.createQuery(\n"
+ " \"select kitten, mother from Cat kitten join kitten.mother mother\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( kittensAndMothers.hasNext() ) {\n"
+ " Object[] tuple = (Object[]) kittensAndMothers.next();\n"
+ " Cat kitten = (Cat) tuple[0];\n"
+ " Cat mother = (Cat) tuple[1];\n"
+ " ....\n"
+ "}]]>"
+msgstr "ã¯ã¨ãªã§ã¯ã <literal>select</literal> ç¯ã§ã¯ã©ã¹ã®ããããã£ãæå®ã§ãã¾ãã SQLã®éåé¢æ°ãå¼ã¶ãã¨ãã§ãã¾ããããããã£ãéåé¢æ°ã¯ã ï¼æ°¸ç¶ç¶æ
ã®ã¨ã³ãã£ãã£ã§ã¯ãªãï¼ãã¹ã«ã©ã¼å¤ãã§ããã¨è¦ãªããã¾ãã"
+
+#: index.docbook:284
+msgid "Scalar results"
+msgstr ""
+ "<![CDATA[Iterator results = sess.createQuery(
+\n"
+ " \"select cat.color, min(cat.birthdate), count(cat) from Cat cat \" +
+\n"
+ " \"group by cat.color\")
+\n"
+ " .list()
+\n"
+ " .iterator();
+\n"
+ "
+\n"
+ "while ( results.hasNext() ) {
+\n"
+ " Object[] row = (Object[]) results.next();
+\n"
+ " Color type = (Color) row[0];
+\n"
+ " Date oldest = (Date) row[1];
+\n"
+ " Integer count = (Integer) row[2];
+\n"
+ " .....
+\n"
+ "}]]>"
+
+#: index.docbook:286
+msgid "Queries may specify a property of a class in the <literal>select</literal> clause. They may even call SQL aggregate functions. Properties or aggregates are considered \"scalar\" results (and not entities in persistent state)."
+msgstr "ãã©ã¡ã¼ã¿ã®ãã¤ã³ã"
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[Iterator results = sess.createQuery(\n"
+ " \"select cat.color, min(cat.birthdate), count(cat) from Cat cat \" +\n"
+ " \"group by cat.color\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( results.hasNext() ) {\n"
+ " Object[] row = (Object[]) results.next();\n"
+ " Color type = (Color) row[0];\n"
+ " Date oldest = (Date) row[1];\n"
+ " Integer count = (Integer) row[2];\n"
+ " .....\n"
+ "}]]>"
+msgstr "<literal>Query</literal> ã¯ãååä»ãã®ãã©ã¡ã¼ã¿ãJDBCã¹ã¿ã¤ã«ã® <literal>?</literal> ãã©ã¡ã¼ã¿ã«å¤ããã¤ã³ãããããã®ã¡ã½ãããæã£ã¦ãã¾ãã <emphasis>JDBCã¨ã¯éããHibernateã¯ãã©ã¡ã¼ã¿ã«ã¼ãããçªå·ãæ¯ã£ã¦ããã¾ãã</emphasis> ååä»ãã®ãã©ã¡ã¼ã¿ã¨ã¯ãã¯ã¨ãªæååã®ãªãã«ãã <literal>:name</literal> å½¢å¼ã®èå¥åã§ãã ååä»ããã©ã¡ã¼ã¿ã®å©ç¹ã¯æ¬¡ã®éãã§ãã"
+
+#: index.docbook:297
+msgid "Bind parameters"
+msgstr "ååä»ããã©ã¡ã¼ã¿ã¯ãã¯ã¨ãªæååã«ç»å ´ããé çªã¨ç¡é¢ä¿ã§ã"
+
+#: index.docbook:299
+msgid "Methods on <literal>Query</literal> are provided for binding values to named parameters or JDBC-style <literal>?</literal> parameters. <emphasis>Contrary to JDBC, Hibernate numbers parameters from zero.</emphasis> Named parameters are identifiers of the form <literal>:name</literal> in the query string. The advantages of named parameters are:"
+msgstr "åãã¯ã¨ãªå
ã«è¤æ°åç»å ´ãããã¨ãã§ãã¾ã"
+
+#: index.docbook:309
+msgid "named parameters are insensitive to the order they occur in the query string"
+msgstr "èªåèªèº«ã説æãã¾ã"
+
+#: index.docbook:315
+msgid "they may occur multiple times in the same query"
+msgstr ""
+ "<![CDATA[//named parameter (preferred)
+\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = :name\");
+\n"
+ "q.setString(\"name\", \"Fritz\");
+\n"
+ "Iterator cats = q.iterate();]]>"
+
+#: index.docbook:320
+msgid "they are self-documenting"
+msgstr ""
+ "<![CDATA[//positional parameter
+\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = ?\");
+\n"
+ "q.setString(0, \"Izi\");
+\n"
+ "Iterator cats = q.iterate();]]>"
+
+#: index.docbook:326
+msgid ""
+ "<![CDATA[//named parameter (preferred)\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = :name\");\n"
+ "q.setString(\"name\", \"Fritz\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr ""
+ "<![CDATA[//named parameter list
+\n"
+ "List names = new ArrayList();
+\n"
+ "names.add(\"Izi\");
+\n"
+ "names.add(\"Fritz\");
+\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name in (:namesList)\");
+\n"
+ "q.setParameterList(\"namesList\", names);
+\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:328
+msgid ""
+ "<![CDATA[//positional parameter\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = ?\");\n"
+ "q.setString(0, \"Izi\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr "ãã¼ã¸åã"
+
+#: index.docbook:330
+msgid ""
+ "<![CDATA[//named parameter list\n"
+ "List names = new ArrayList();\n"
+ "names.add(\"Izi\");\n"
+ "names.add(\"Fritz\");\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name in (:namesList)\");\n"
+ "q.setParameterList(\"namesList\", names);\n"
+ "List cats = q.list();]]>"
+msgstr "ResultSetã«å¶éï¼å¾©å
ãããæ大è¡æ°ã復å
ãããæåã®è¡ï¼ãå ããå¿
è¦ãããã°ã 以ä¸ã®ããã«ã <literal>Query</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã使ãã¾ãã"
+
+#: index.docbook:335
+msgid "Pagination"
+msgstr ""
+ "<![CDATA[Query q = sess.createQuery(\"from DomesticCat cat\");
+\n"
+ "q.setFirstResult(20);
+\n"
+ "q.setMaxResults(10);
+\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:337
+msgid "If you need to specify bounds upon your result set (the maximum number of rows you want to retrieve and / or the first row you want to retrieve) you should use methods of the <literal>Query</literal> interface:"
+msgstr "å¶éä»ãã®ã¯ã¨ãªãDBMSã®ãã¤ãã£ããªSQLã«å¤æããæ¹æ³ããHibernateã¯ç¥ã£ã¦ãã¾ãã"
+
+#: index.docbook:343
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"from DomesticCat cat\");\n"
+ "q.setFirstResult(20);\n"
+ "q.setMaxResults(10);\n"
+ "List cats = q.list();]]>"
+msgstr "ã¹ã¯ãã¼ã«å¯è½ãªã¤ãã¬ã¼ã·ã§ã³"
+
+#: index.docbook:345
+msgid "Hibernate knows how to translate this limit query into the native SQL of your DBMS."
+msgstr "JDBCãã©ã¤ããã¹ã¯ãã¼ã«å¯è½ãª <literal>ResultSet</literal> ããµãã¼ããã¦ããã°ã <literal>Query</literal> ã¤ã³ã¿ã¼ãã§ã¤ã¹ã使ã£ã¦ã <literal>ScrollableResults</literal> ãªãã¸ã§ã¯ãã åå¾ã§ãã¾ããããã使ãã¨ãã¯ã¨ãªã®çµæã«å¯¾ãã¦æè»ã«ããã²ã¼ã·ã§ã³ã§ãã¾ãã"
+
+#: index.docbook:353
+msgid "Scrollable iteration"
+msgstr ""
+ "<![CDATA[Query q = sess.createQuery(\"select cat.name, cat from DomesticCat cat \" +
+\n"
+ " \"order by cat.name\");
+\n"
+ "ScrollableResults cats = q.scroll();
+\n"
+ "if ( cats.first() ) {
+\n"
+ "
+\n"
+ " // find the first name on each page of an alphabetical list of cats by name
+\n"
+ " firstNamesOfPages = new ArrayList();
+\n"
+ " do {
+\n"
+ " String name = cats.getString(0);
+\n"
+ " firstNamesOfPages.add(name);
+\n"
+ " }
+\n"
+ " while ( cats.scroll(PAGE_SIZE) );
+\n"
+ "
+\n"
+ " // Now get the first page of cats
+\n"
+ " pageOfCats = new ArrayList();
+\n"
+ " cats.beforeFirst();
+\n"
+ " int i=0;
+\n"
+ " while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );
+\n"
+ "
+\n"
+ "}
+\n"
+ "cats.close()]]>"
+
+#: index.docbook:355
+msgid "If your JDBC driver supports scrollable <literal>ResultSet</literal>s, the <literal>Query</literal> interface may be used to obtain a <literal>ScrollableResults</literal> object, which allows flexible navigation of the query results."
+msgstr "ãã®æ©è½ã«ã¯ãªã¼ãã³ç¶æ
ã®ãã¼ã¿ãã¼ã¹ã³ãã¯ã·ã§ã³ãå¿
è¦ã§ãããã¨ã«æ³¨æãã¦ãã ããã ããããªãã©ã¤ã³ã®ãã¼ã¸åãæ©è½ãå¿
è¦ã§ããã°ã <literal>setMaxResult()</literal> / <literal>setFirstResult()</literal> ã使ãã¾ãããã"
+
+#: index.docbook:362
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"select cat.name, cat from DomesticCat cat \" +\n"
+ " \"order by cat.name\");\n"
+ "ScrollableResults cats = q.scroll();\n"
+ "if ( cats.first() ) {\n"
+ "\n"
+ " // find the first name on each page of an alphabetical list of cats by name\n"
+ " firstNamesOfPages = new ArrayList();\n"
+ " do {\n"
+ " String name = cats.getString(0);\n"
+ " firstNamesOfPages.add(name);\n"
+ " }\n"
+ " while ( cats.scroll(PAGE_SIZE) );\n"
+ "\n"
+ " // Now get the first page of cats\n"
+ " pageOfCats = new ArrayList();\n"
+ " cats.beforeFirst();\n"
+ " int i=0;\n"
+ " while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );\n"
+ "\n"
+ "}\n"
+ "cats.close()]]>"
+msgstr "ååä»ãã¯ã¨ãªã®å¤åºã"
+
+#: index.docbook:364
+msgid "Note that an open database connection (and cursor) is required for this functionality, use <literal>setMaxResult()</literal>/<literal>setFirstResult()</literal> if you need offline pagination functionality."
+msgstr "ãããã³ã°ããã¥ã¡ã³ãã«ååä»ãã®ã¯ã¨ãªãå®ç¾©ãããã¨ãã§ãã¾ãã ï¼ãã¼ã¯ã¢ããã¨è§£éãããæåãã¯ã¨ãªã«å«ã¾ãããªãã <literal>CDATA</literal> ã»ã¯ã·ã§ã³ã 使ããã¨ãå¿ããªãããã«ãã¾ããããï¼"
+
+#: index.docbook:373
+msgid "Externalizing named queries"
+msgstr ""
+ "<![CDATA[<query name=\"ByNameAndMaximumWeight\"><![CDATA[
+\n"
+ " from eg.DomesticCat as cat
+\n"
+ " where cat.name = ?
+\n"
+ " and cat.weight > ?
+\n"
+ "] ]></query>]]>"
+
+#: index.docbook:375
+msgid "You may also define named queries in the mapping document. (Remember to use a <literal>CDATA</literal> section if your query contains characters that could be interpreted as markup.)"
+msgstr "ãã©ã¡ã¼ã¿ã®ãã¤ã³ãã£ã³ã°ã¨å®è¡ã¯ã以ä¸ã®ãããªããã°ã©ã ã§è¡ããã¾ãã"
+
+#: index.docbook:381
+msgid ""
+ "<![CDATA[<query name=\"ByNameAndMaximumWeight\"><![CDATA[\n"
+ " from eg.DomesticCat as cat\n"
+ " where cat.name = ?\n"
+ " and cat.weight > ?\n"
+ "] ]></query>]]>"
+msgstr ""
+ "<![CDATA[Query q = sess.getNamedQuery(\"ByNameAndMaximumWeight\");
+\n"
+ "q.setString(0, name);
+\n"
+ "q.setInt(1, minWeight);
+\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:383
+msgid "Parameter binding and executing is done programatically:"
+msgstr "å®éã®ããã°ã©ã ã³ã¼ãã¯ã使ãããã¯ã¨ãªè¨èªã«ä¾åãã¦ããªããã¨ã«æ³¨æãã¾ãããã ã¡ã¿ãã¼ã¿ã«ã¯ããã¤ãã£ãSQLã¯ã¨ãªãå®ç¾©ãããã¨ãã§ãã¾ãã ã¾ããæ¢åã®ã¯ã¨ãªããããã³ã°ãã¡ã¤ã«ã«ç§»ããã¨ã§ã Hibernateã«ç§»è¡ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:387
+msgid ""
+ "<![CDATA[Query q = sess.getNamedQuery(\"ByNameAndMaximumWeight\");\n"
+ "q.setString(0, name);\n"
+ "q.setInt(1, minWeight);\n"
+ "List cats = q.list();]]>"
+msgstr "<literal><hibernate-mapping></literal> ã®ä¸ã®ã¯ã¨ãªå®ç¾©ã¯ãã¯ã¨ãªã«å¯¾ãã ã¦ãã¼ã¯ãªååãå¿
è¦ãªãã¨ã«ã注æãã¦ãã ãããããã«å¯¾ãã¦ã <literal><class></literal> ã®ä¸ã® ã¯ã¨ãªå®ç¾©ã¯ãã¯ã©ã¹ã®å®å
¨éå®åãåã«ä»ããããã®ã§ãèªåçã«ã¦ãã¼ã¯ãªååã«ãªãã¾ãã ä¾ï¼ <literal>eg.Cat.ByNameAndMaximumWeight</literal>"
+
+#: index.docbook:389
+msgid "Note that the actual program code is independent of the query language that is used, you may also define native SQL queries in metadata, or migrate existing queries to Hibernate by placing them in mapping files."
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ãã£ã«ã¿ãªã³ã°"
+
+#: index.docbook:395
+msgid "Also note that a query declaration inside a <literal><hibernate-mapping></literal> element requires a global unique name for the query, while a query declaration inside a <literal><class></literal> element is made unique automatically by prepending the fully qualified name of the class, for example <literal>eg.Cat.ByNameAndMaximumWeight</literal>."
+msgstr "ã³ã¬ã¯ã·ã§ã³ <emphasis>ãã£ã«ã¿</emphasis> ã¯ãæ°¸ç¶åããã¦ããã³ã¬ã¯ã·ã§ã³ãé
åã«é©ç¨ããã ç¹æ®ãªã¿ã¤ãã®ã¯ã¨ãªã§ãããã®ã¯ã¨ãªæååã§ã¯ãã³ã¬ã¯ã·ã§ã³ã®ãã®æç¹ã§ã®è¦ç´ ãæå³ãã <literal>this</literal> ã使ãã¾ãã"
+
+#: index.docbook:408
+msgid "Filtering collections"
+msgstr ""
+ "<![CDATA[Collection blackKittens = session.createFilter(
+\n"
+ " pk.getKittens(),
+\n"
+ " \"where this.color = ?\")
+\n"
+ " .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )
+\n"
+ " .list()
+\n"
+ ");]]>"
+
+#: index.docbook:409
+msgid "A collection <emphasis>filter</emphasis> is a special type of query that may be applied to a persistent collection or array. The query string may refer to <literal>this</literal>, meaning the current collection element."
+msgstr "è¿ãããã³ã¬ã¯ã·ã§ã³ã¯Bagã¨ã¿ãªããã¾ããããã¦ãããã¯ãã¨ã®ã³ã¬ã¯ã·ã§ã³ã®ã³ãã¼ã«ãªãã¾ãã å
ã®ã³ã¬ã¯ã·ã§ã³ã¯ä¿®æ£ããã¾ããï¼ããã¯ã\"filter\"ã¨ããååã®æå³ã¨ã¯ç°ãªãã¾ããã æå¾
ãããåãã¨ã¯ä¸è´ãã¦ãã¾ãï¼ã"
+
+#: index.docbook:415
+msgid ""
+ "<![CDATA[Collection blackKittens = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"where this.color = ?\")\n"
+ " .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )\n"
+ " .list()\n"
+ ");]]>"
+msgstr "ãã£ã«ã¿ã«ã¯ <literal>from</literal> ç¯ãä¸è¦ã§ãããã¨ã«æ°ã¥ãã§ãããï¼å¿
è¦ãªããæã¤ãã¨ãå¯è½ã§ããï¼ã ãã£ã«ã¿ã¯ãã³ã¬ã¯ã·ã§ã³ã®è¦ç´ èªä½ãè¿ãã¦æ§ãã¾ããã"
+
+#: index.docbook:417
+msgid "The returned collection is considered a bag, and it's a copy of the given collection. The original collection is not modified (this is contrary to the implication of the name \"filter\", but consistent with expected behavior)."
+msgstr ""
+ "<![CDATA[Collection blackKittenMates = session.createFilter(
+\n"
+ " pk.getKittens(),
+\n"
+ " \"select this.mate where this.color = eg.Color.BLACK.intValue\")
+\n"
+ " .list();]]>"
+
+#: index.docbook:423
+msgid "Observe that filters do not require a <literal>from</literal> clause (though they may have one if required). Filters are not limited to returning the collection elements themselves."
+msgstr "ã¯ã¨ãªãå«ã¾ãªããã£ã«ã¿ãå½¹ã«ç«ã¡ã¾ãã ä¾ãã°ãé常ã«å¤§ããªã³ã¬ã¯ã·ã§ã³ã®é¨åéåããã¼ãããããã«ä½¿ãã¾ãã"
+
+#: index.docbook:428
+msgid ""
+ "<![CDATA[Collection blackKittenMates = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"select this.mate where this.color = eg.Color.BLACK.intValue\")\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Collection tenKittens = session.createFilter(
+\n"
+ " mother.getKittens(), \"\")
+\n"
+ " .setFirstResult(0).setMaxResults(10)
+\n"
+ " .list();]]>"
+
+#: index.docbook:430
+msgid "Even an empty filter query is useful, e.g. to load a subset of elements in a huge collection:"
+msgstr "ã¯ã©ã¤ããªã¢ã®ã¯ã¨ãª"
+
+#: index.docbook:435
+msgid ""
+ "<![CDATA[Collection tenKittens = session.createFilter(\n"
+ " mother.getKittens(), \"\")\n"
+ " .setFirstResult(0).setMaxResults(10)\n"
+ " .list();]]>"
+msgstr "HQLã¯é常ã«å¼·åã§ãããã¯ã¨ãªæååãä½ããããããªãã¸ã§ã¯ãæåã®APIã使ã£ã¦ åçã«ã¯ã¨ãªãä½ãæ¹ã好ãéçºè
ããã¾ãã ãããã£ãå ´åã®ããã«ãHibernateã¯ç´æç㪠<literal>Criteria</literal> ã¯ã¨ãªAPIãæä¾ãã¦ãã¾ãã"
+
+#: index.docbook:440
+msgid "Criteria queries"
+msgstr ""
+ "<![CDATA[Criteria crit = session.createCriteria(Cat.class);
+\n"
+ "crit.add( Restrictions.eq( \"color\", eg.Color.BLACK ) );
+\n"
+ "crit.setMaxResults(10);
+\n"
+ "List cats = crit.list();]]>"
+
+#: index.docbook:442
+msgid "HQL is extremely powerful but some developers prefer to build queries dynamically, using an object-oriented API, rather than building query strings. Hibernate provides an intuitive <literal>Criteria</literal> query API for these cases:"
+msgstr "<literal>Criteria</literal> 㨠<literal>Example</literal> APIã®è©³ç´°ã¯ã <xref linkend=\"querycriteria\"/> ã«è¿°ã¹ããã¦ãã¾ãã"
+
+#: index.docbook:448
+msgid ""
+ "<![CDATA[Criteria crit = session.createCriteria(Cat.class);\n"
+ "crit.add( Restrictions.eq( \"color\", eg.Color.BLACK ) );\n"
+ "crit.setMaxResults(10);\n"
+ "List cats = crit.list();]]>"
+msgstr "ãã¤ãã£ãSQLã®ã¯ã¨ãª"
+
+#: index.docbook:450
+msgid "The <literal>Criteria</literal> and the associated <literal>Example</literal> API are discussed in more detail in <xref linkend=\"querycriteria\"/>."
+msgstr "<literal>createSQLQuery()</literal> ã使ã£ã¦ãSQLã§ã¯ã¨ãªã表ç¾ãããã¨ãã§ãã¾ãã ããã¦ãHibernateã«ãResultSet ãããªãã¸ã§ã¯ãã¸ã®ãããã³ã°ãã¾ããã¾ãã <literal>session.connection()</literal> ãå¼ã¹ã°ã©ããªã¨ãã§ããç´æ¥ãJDBC <literal>Connection</literal> ã使ç¨ã§ãããã¨ãè¦ãã¦ããã¾ãããã ãããHibernate APIã使ãã®ã§ããã°ãä¸è¨ã®ããã«SQLã®å¥åãæ¬å¼§ã§ããããªããã°ãªãã¾ããã"
+
+#: index.docbook:458
+msgid "Queries in native SQL"
+msgstr ""
+ "<![CDATA[List cats = session.createSQLQuery(\"SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10\")
+\n"
+ " .addEntity(\"cat\", Cat.class)
+\n"
+ ".list();]]>"
+
+#: index.docbook:460
+msgid "You may express a query in SQL, using <literal>createSQLQuery()</literal> and let Hibernate take care of the mapping from result sets to objects. Note that you may at any time call <literal>session.connection()</literal> and use the JDBC <literal>Connection</literal> directly. If you chose to use the Hibernate API, you must enclose SQL aliases in braces:"
+msgstr ""
+ "<![CDATA[List cats = session.createSQLQuery(
+\n"
+ " \"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, \" +
+\n"
+ " \"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... \" +
+\n"
+ " \"FROM CAT {cat} WHERE ROWNUM<10\")
+\n"
+ " .addEntity(\"cat\", Cat.class)
+\n"
+ ".list()]]>"
+
+#: index.docbook:468
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\"SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list();]]>"
+msgstr "SQLã¯ã¨ãªã¯ãHibernateã¯ã¨ãªã¨åãããã«ãååä»ãã®ãã©ã¡ã¼ã¿ã¨ä½ç½®ãã©ã¡ã¼ã¿ãæã¤ãã¨ãã§ãã¾ãã Hibernateã«ããããã¤ãã£ããªSQLã¯ã¨ãªã®è©³ç´°ã«ã¤ãã¦ã¯ã <xref linkend=\"querysql\"/> ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:470
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\n"
+ " \"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, \" +\n"
+ " \"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... \" +\n"
+ " \"FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list()]]>"
+msgstr "æ°¸ç¶ãªãã¸ã§ã¯ãã®ä¿®æ£"
+
+#: index.docbook:472
+msgid "SQL queries may contain named and positional parameters, just like Hibernate queries. More information about native SQL queries in Hibernate can be found in <xref linkend=\"querysql\"/>."
+msgstr "<emphasis>å¦çä¸ã®æ°¸ç¶ã¤ã³ã¹ã¿ã³ã¹</emphasis> ï¼ä¾ï¼ <literal>Session</literal> ã«ãã£ã¦ã ãã¼ããã»ã¼ããä½æãã¯ã¨ãªããããªãã¸ã§ã¯ãï¼ã¯ãã¢ããªã±ã¼ã·ã§ã³ã«æä½ããã¾ãã ãã®éã«å¤æ´ãããæ°¸ç¶ç¶æ
ã¯ã <literal>Session</literal> ã <emphasis>ãã©ãã·ã¥</emphasis> ãããã¨ãã«ãæ°¸ç¶åããã¾ãï¼ããã¯ããã®ç« ã®å¾åã§è¿°ã¹ã¦ãã¾ãï¼ã å¤æ´ãæ°¸ç¶åããããã«ãç¹æ®ãªã¡ã½ããï¼ <literal>update()</literal> ã®ãããªãã®ãããã¯ãå¥ã®ç®çã§ä½¿ç¨ãã¾ãï¼ã å¼ã¶å¿
è¦ã¯ããã¾ããã ãªãã¸ã§ã¯ãã®ç¶æ
ãæ´æ°ããä¸çªç°¡åãªæ¹æ³ã¯ããªãã¸ã§ã¯ãã <literal>load()</literal> ãã <literal>Session</literal> ããªã¼ãã³ã«ãã¦ããéã«ãç´æ¥æä½ãããã¨ã§ãã"
+
+#: index.docbook:483
+msgid "Modifying persistent objects"
+msgstr ""
+ "<![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );
+\n"
+ "cat.setName(\"PK\");
+\n"
+ "sess.flush(); // changes to cat are automatically detected and persisted
+\n"
+ "]]>"
+
+#: index.docbook:485
+msgid "<emphasis>Transactional persistent instances</emphasis> (ie. objects loaded, saved, created or queried by the <literal>Session</literal>) may be manipulated by the application and any changes to persistent state will be persisted when the <literal>Session</literal> is <emphasis>flushed</emphasis> (discussed later in this chapter). There is no need to call a particular method (like <literal>update()</literal>, which has a different purpose) to make your modifications persistent. So the most straightforward way to update the state of an object is to <literal>load()</literal> it, and then manipulate it directly, while the <literal>Session</literal> is open:"
+msgstr "ï¼ãªãã¸ã§ã¯ãããã¼ãããããã®ï¼SQLã® <literal>SELECT</literal> ã¨ï¼æ´æ°ãããç¶æ
ãæ°¸ç¶åããããã®ï¼ SQLã® <literal>UPDATE</literal> ãåãã»ãã·ã§ã³ã§å¿
è¦ã¨ãªãã®ã§ããã®ããã°ã©ãã³ã°ã¢ãã«ã¯ã å¹çãæªããªãå ´åãããã¾ãã ãã®ãããHibernateã¯å¥ã®æ¹æ³ãç¨æãã¦ãã¾ããããã¯ãã¤ã³ã¹ã¿ã³ã¹ãåé¢ããï¼detachedï¼æ¹æ³ã§ãã"
+
+#: index.docbook:496
+msgid ""
+ "<![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );\n"
+ "cat.setName(\"PK\");\n"
+ "sess.flush(); // changes to cat are automatically detected and persisted]]>"
+msgstr "Hibernateã¯ã <literal>UPDATE</literal> æã <literal>DELETE</literal> æãç´æ¥å®è¡ããAPIãç¨æãã¦ãã¾ããã Hibernateã¯ã <emphasis>ç¶æ
管ç</emphasis> ãµã¼ãã¹ã§ããã使ãããSQL <emphasis>æ</emphasis> ã®ãã¨ãéçºè
ãèããå¿
è¦ã¯ããã¾ããã JDBCã¯SQLæãå®è¡ããå®ç§ãªAPIã§ããã <literal>session.connection()</literal> ãå¼ã¶ãã¨ã§ ãã¤ã§ããJDBC <literal>Connection</literal> ãéçºè
ã¯åå¾ã§ãã¾ãã ããã«ã大éã®ãã¼ã¿æä½ã®èãæ¹ã¯ããªã³ã©ã¤ã³ãã©ã³ã¶ã¯ã·ã§ã³å¦çåãã¢ããªã±ã¼ã·ã§ã³ã® ãªãã¸ã§ã¯ã/ãªã¬ã¼ã·ã§ãã«ãããã³ã°ã¨è¡çªãã¾ãã ããããHibernateã®ä»å¾ã®ãã¼ã¸ã§ã³ã§ã¯ã大éãã¼ã¿ãå¦çããç¹å¥ãªæ©è½ãæä¾ããããããã¾ããã ãããæä½ã«å©ç¨ã§ããããã¤ãã®å·¥å¤«ã«ã¤ãã¦ã¯ã <xref linkend=\"batch\"/> ãåç
§ãã¦ãã !
ããã"
+
+#: index.docbook:498
+msgid "Sometimes this programming model is inefficient since it would require both an SQL <literal>SELECT</literal> (to load an object) and an SQL <literal>UPDATE</literal> (to persist its updated state) in the same session. Therefore Hibernate offers an alternate approach, using detached instances."
+msgstr "åé¢ãªãã¸ã§ã¯ãã®ä¿®æ£"
+
+#: index.docbook:506
+msgid "Note that Hibernate does not offer its own API for direct execution of <literal>UPDATE</literal> or <literal>DELETE</literal> statements. Hibernate is a <emphasis>state management</emphasis> service, you don't have to think in <emphasis>statements</emphasis> to use it. JDBC is a perfect API for executing SQL statements, you can get a JDBC <literal>Connection</literal> at any time by calling <literal>session.connection()</literal>. Furthermore, the notion of mass operations conflicts with object/relational mapping for online transaction processing-oriented applications. Future versions of Hibernate may however provide special mass operation functions. See <xref linkend=\"batch\"/> for some possible batch operation tricks."
+msgstr "å¤ãã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯æ¬¡ã®ãã¨ãå¿
è¦ã«ãªãã¾ãã ããã¯ããããã©ã³ã¶ã¯ã·ã§ã³ã§ãªãã¸ã§ã¯ãã復å
ããæä½ããããã«ãããUI層ã«éãã ãã®å¾ã«ãæ°ãããã©ã³ã¶ã¯ã·ã§ã³ã§å¤æ´ãã»ã¼ãããã¨ãã£ããã¨ã§ãã 並è¡æ§ã®é«ãç°å¢ã§ããã®ã¿ã¤ãã®ã¢ããã¼ãã使ãã¢ããªã±ã¼ã·ã§ã³ã§ã¯ã \"æéã®é·ã\" ä½æ¥åä½ã®éé¢æ§ãä¿è¨¼ããããã«ããã¼ã¸ã§ã³ãã¼ã¿ãé常使ããã¾ãã"
+
+#: index.docbook:521
+msgid "Modifying detached objects"
+msgstr "Hibernateã¯ã <literal>Session.update()</literal> ã <literal>Session.merge()</literal> ã¡ã½ããã 使ã£ã¦ãåé¢ã¤ã³ã¹ã¿ã³ã¹ãå追å ãããã¨ã§ããã®ã¢ãã«ã«å¯¾å¿ãã¾ãã"
+
+#: index.docbook:523
+msgid "Many applications need to retrieve an object in one transaction, send it to the UI layer for manipulation, then save the changes in a new transaction. Applications that use this kind of approach in a high-concurrency environment usually use versioned data to ensure isolation for the \"long\" unit of work."
+msgstr ""
+ "<![CDATA[// in the first session
+\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catId);
+\n"
+ "Cat potentialMate = new Cat();
+\n"
+ "firstSession.save(potentialMate);
+\n"
+ "
+\n"
+ "// in a higher layer of the application
+\n"
+ "cat.setMate(potentialMate);
+\n"
+ "
+\n"
+ "// later, in a new session
+\n"
+ "secondSession.update(cat); // update cat
+\n"
+ "secondSession.update(mate); // update mate]]>"
+
+#: index.docbook:530
+msgid "Hibernate supports this model by providing for reattachment of detached instances using the <literal>Session.update()</literal> or <literal>Session.merge()</literal> methods:"
+msgstr "èå¥å<literal>catId</literal> ãæ㤠<literal>Cat</literal> ããæ¢ã« <literal>secondSession</literal> ã§ãã¼ãããã¦ããå ´åã¯ãå追å ãããã¨ããã¨ãã«ãä¾å¤ãæãããã¾ãã"
+
+#: index.docbook:536
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catId);\n"
+ "Cat potentialMate = new Cat();\n"
+ "firstSession.save(potentialMate);\n"
+ "\n"
+ "// in a higher layer of the application\n"
+ "cat.setMate(potentialMate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.update(cat); // update cat\n"
+ "secondSession.update(mate); // update mate]]>"
+msgstr "åãèå¥åãæã¤æ°¸ç¶ã¤ã³ã¹ã¿ã³ã¹ãã»ãã·ã§ã³ãæ¢ã«ä¿æãã¦ããªããã¨ã 確信ã§ãããªã <literal>update()</literal> ã使ãã¾ãããã ããã¦ãã»ãã·ã§ã³ã®ç¶æ
ãèããã«ãã©ããªå ´åã§ãå¤æ´ããã¼ã¸ãããå ´åã¯ã <literal>merge()</literal> ã使ãã¾ãããã ããªãã¡ãåé¢ãªãã¸ã§ã¯ãã®å追å æä½ããæåã«å®è¡ããããã¨ã確å®ã«ããããã«ã é常㯠<literal>update()</literal> ãæ°ããã»ãã·ã§ã³ã®ãªãã§æåã«å¼ã°ããã¡ã½ããã«ãªãã¾ãã"
+
+#: index.docbook:538
+msgid "If the <literal>Cat</literal> with identifier <literal>catId</literal> had already been loaded by <literal>secondSession</literal> when the application tried to reattach it, an exception would have been thrown."
+msgstr "åé¢ã¤ã³ã¹ã¿ã³ã¹ããå°éå¯è½ãªãåé¢ã¤ã³ã¹ã¿ã³ã¹ãã¢ããªã±ã¼ã·ã§ã³ã¯åå¥ã« <literal>update()</literal> ãã¹ãã§ããããã¯ããã®ç¶æ
ãæ´æ°ãããå ´åã« <emphasis>éã</emphasis> ã¾ãã <emphasis>é·ç§»çãªæ°¸ç¶å</emphasis> ã使ãã°ããã¡ããèªååã§ãã¾ãã <xref linkend=\"objectstate-transitive\"/> ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:544
+msgid "Use <literal>update()</literal> if you are sure that the session does not contain an already persistent instance with the same identifier, and <literal>merge()</literal> if you want to merge your modifications at any time without consideration of the state of the session. In other words, <literal>update()</literal> is usually the first method you would call in a fresh session, ensuring that reattachment of your detached instances is the first operation that is executed."
+msgstr "ã¡ã½ããã§ãã¾ããæ°ããã»ãã·ã§ã³ã«ãªãã¸ã§ã¯ããåé¢é£ä»ãã§ãã¾ãã ããããåé¢ã¤ã³ã¹ã¿ã³ã¹ã¯ç¡ä¿®æ£ã§ãªããã°ãªãã¾ããã"
+
+#: index.docbook:553
+msgid "The application should individually <literal>update()</literal> detached instances reachable from the given detached instance if and <emphasis>only</emphasis> if it wants their state also updated. This can be automated of course, using <emphasis>transitive persistence</emphasis>, see <xref linkend=\"objectstate-transitive\"/>."
+msgstr ""
+ "<![CDATA[//just reassociate:
+\n"
+ "sess.lock(fritz, LockMode.NONE);
+\n"
+ "//do a version check, then reassociate:
+\n"
+ "sess.lock(izi, LockMode.READ);
+\n"
+ "//do a version check, using SELECT ... FOR UPDATE, then reassociate:
+\n"
+ "sess.lock(pk, LockMode.UPGRADE);]]>"
+
+#: index.docbook:560
+msgid "The <literal>lock()</literal> method also allows an application to reassociate an object with a new session. However, the detached instance has to be unmodified!"
+msgstr "<literal>lock()</literal> ã¯ããã¾ãã¾ãª <literal>LockMode</literal> ã¨ã¨ãã«ä½¿ããã¨ãã§ãã¾ãã 詳細ã¯ãAPIããã¥ã¡ã³ãã¨ãã©ã³ã¶ã¯ã·ã§ã³å¦çã®ç« ãåç
§ãã¦ãã ããã å追å ã®ã¨ãã«ã ãã <literal>lock()</literal> ã使ãããããã§ã¯ããã¾ããã"
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[//just reassociate:\n"
+ "sess.lock(fritz, LockMode.NONE);\n"
+ "//do a version check, then reassociate:\n"
+ "sess.lock(izi, LockMode.READ);\n"
+ "//do a version check, using SELECT ... FOR UPDATE, then reassociate:\n"
+ "sess.lock(pk, LockMode.UPGRADE);]]>"
+msgstr "æéã®é·ãä½æ¥åä½ã®ããã®ä»ã®ã¢ãã«ã¯ã<xref linked=\"transactions-optimistic\"/> ã§è¿°ã¹ã¦ãã¾ãã"
+
+#: index.docbook:567
+msgid "Note that <literal>lock()</literal> can be used with various <literal>LockMode</literal>s, see the API documentation and the chapter on transaction handling for more information. Reattachment is not the only usecase for <literal>lock()</literal>."
+msgstr "èªåçãªç¶æ
æ¤åº"
+
+#: index.docbook:574
+msgid "Other models for long units of work are discussed in <xref linkend=\"transactions-optimistic\"/>."
+msgstr "Hibernateã®ã¦ã¼ã¶ã¯æ¬¡ã®2ã¤ã®ã±ã¼ã¹ã®ã©ã¡ãã«ã使ããæ±ç¨çãªã¡ã½ãããè¦æ±ãã¦ãã¾ããã ããã¯ãæ°ããèå¥åãçæãã¦ä¸æçãªã¤ã³ã¹ã¿ã³ã¹ãã»ã¼ããããã¨ã¨ã ãã®æç¹ã®èå¥åã¨é¢é£ã¥ãã¦ããåé¢ã¤ã³ã¹ã¿ã³ã¹ãæ´æ°/å追å ãããã¨ã®ã§ããã¡ã½ããã§ãã <literal>saveOrUpdate()</literal> ã¯ãã®ãããªæ©è½ãå®ç¾ããã¡ã½ããã§ãã"
+
+#: index.docbook:581
+msgid "Automatic state detection"
+msgstr ""
+ "<![CDATA[// in the first session
+\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catID);
+\n"
+ "
+\n"
+ "// in a higher tier of the application
+\n"
+ "Cat mate = new Cat();
+\n"
+ "cat.setMate(mate);
+\n"
+ "
+\n"
+ "// later, in a new session
+\n"
+ "secondSession.saveOrUpdate(cat); // update existing state (cat has a non-null id)
+\n"
+ "secondSession.saveOrUpdate(mate); // save the new instance (mate has a null id)]]>"
+
+#: index.docbook:583
+msgid "Hibernate users have requested a general purpose method that either saves a transient instance by generating a new identifier or updates/reattaches the detached instances associated with its current identifier. The <literal>saveOrUpdate()</literal> method implements this functionality."
+msgstr "<literal>saveOrUpdate()</literal> ã®ä½¿ç¨æ¹æ³ã¨æå³ã¯ã æ°ããã¦ã¼ã¶ã«ã¨ã£ã¦æ··ä¹±ãæãããããã¾ããã ã¾ã第ä¸ã«ãããã»ãã·ã§ã³ã§ä½¿ç¨ããã¤ã³ã¹ã¿ã³ã¹ãå¥ã®æ°ããã»ãã·ã§ã³ã§ä½¿ããã¨ããªãéãã <literal>update()</literal> ã <literal>saveOrUpdate()</literal> ã <literal>merge()</literal> ã使ãå¿
è¦ã¯ããã¾ããã ã¢ããªã±ã¼ã·ã§ã³å
¨ä½ãéãã¦ããããã®ã¡ã½ãããå
¨ã使ããªããã¨ãããã¾ãã"
+
+#: index.docbook:590
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catID);\n"
+ "\n"
+ "// in a higher tier of the application\n"
+ "Cat mate = new Cat();\n"
+ "cat.setMate(mate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.saveOrUpdate(cat); // update existing state (cat has a non-null id)\n"
+ "secondSession.saveOrUpdate(mate); // save the new instance (mate has a null id)]]>"
+msgstr "é常ã <literal>update()</literal> ã <literal>saveOrUpdate()</literal> ã¯æ¬¡ã®ã·ããªãªã§ 使ããã¾ãã"
+
+#: index.docbook:592
+msgid "The usage and semantics of <literal>saveOrUpdate()</literal> seems to be confusing for new users. Firstly, so long as you are not trying to use instances from one session in another new session, you should not need to use <literal>update()</literal>, <literal>saveOrUpdate()</literal>, or <literal>merge()</literal>. Some whole applications will never use either of these methods."
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ãæåã®ã»ãã·ã§ã³ã§ãªãã¸ã§ã¯ãããã¼ããã¾ãã"
+
+#: index.docbook:600
+msgid "Usually <literal>update()</literal> or <literal>saveOrUpdate()</literal> are used in the following scenario:"
+msgstr "ãªãã¸ã§ã¯ããUI層ã«éããã¾ãã"
+
+#: index.docbook:607
+msgid "the application loads an object in the first session"
+msgstr "ãªãã¸ã§ã¯ãã«å¯¾ãã¦å¤æ´ãå ãããã¾ãã"
+
+#: index.docbook:612
+msgid "the object is passed up to the UI tier"
+msgstr "ãªãã¸ã§ã¯ãããã¸ãã¹ãã¸ãã¯å±¤ã«éããã¾ãã"
+
+#: index.docbook:617
+msgid "some modifications are made to the object"
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ã¯ã2çªç®ã®ã»ãã·ã§ã³ã§ <literal>update()</literal> ãå¼ã¶ãã¨ã§ããããã®å¤æ´ãæ°¸ç¶åãã¾ãã"
+
+#: index.docbook:622
+msgid "the object is passed back down to the business logic tier"
+msgstr "<literal>saveOrUpdate()</literal> ã¯ä»¥ä¸ã®ãã¨ãè¡ãã¾ãã"
+
+#: index.docbook:627
+msgid "the application persists these modifications by calling <literal>update()</literal> in a second session"
+msgstr "ãªãã¸ã§ã¯ãããã®ã»ãã·ã§ã³ã§ããã§ã«æ°¸ç¶åããã¦ããã°ãä½ããã¾ããã"
+
+#: index.docbook:634
+msgid "<literal>saveOrUpdate()</literal> does the following:"
+msgstr "ãã®ã»ãã·ã§ã³ã«é¢é£ã¥ãã¦ããå¥ã®ãªãã¸ã§ã¯ããåãèå¥åãæã£ã¦ãããªãã ä¾å¤ãæãã¾ãã"
+
+#: index.docbook:640
+msgid "if the object is already persistent in this session, do nothing"
+msgstr "ãªãã¸ã§ã¯ãã®èå¥åãå¤ãæããªããªãã°ã <literal>save()</literal> ãã¾ãã"
+
+#: index.docbook:645
+msgid "if another object associated with the session has the same identifier, throw an exception"
+msgstr "ãªãã¸ã§ã¯ãã®èå¥åãå¤ãæã¡ããã®å¤ãæ°ãã«ã¤ã³ã¹ã¿ã³ã¹åããããªãã¸ã§ã¯ãã®ããã®å¤ã§ããå ´åã ãã®ãªãã¸ã§ã¯ãã <literal>save()</literal> ãã¾ãã"
+
+#: index.docbook:651
+msgid "if the object has no identifier property, <literal>save()</literal> it"
+msgstr "ãªãã¸ã§ã¯ããï¼ <literal><version></literal> ã <literal><timestamp></literal> ã«ãã£ã¦ï¼ ãã¼ã¸ã§ã³ã¥ãããã¦ãã¦ããã¼ã¸ã§ã³ã®ããããã£ãå¤ãæã¡ã ãã®å¤ãæ°ããã¤ã³ã¹ã¿ã³ã¹åããããªãã¸ã§ã¯ãã®ããã®å¤ã§ããå ´åã ãã®ãªãã¸ã§ã¯ãã <literal>save()</literal> ãã¾ãã"
+
+#: index.docbook:656
+msgid "if the object's identifier has the value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr "ããã§ãªãå ´åã¯ããã®ãªãã¸ã§ã¯ãã <literal>update()</literal> ãã¾ãã"
+
+#: index.docbook:662
+msgid "if the object is versioned (by a <literal><version></literal> or <literal><timestamp></literal>), and the version property value is the same value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr "ããã¦ã <literal>merge()</literal> ã¯ä»¥ä¸ã®ããã«ã¨ã¦ãç°ãªãã¾ãã"
+
+#: index.docbook:670
+msgid "otherwise <literal>update()</literal> the object"
+msgstr "åãèå¥åãæã¤æ°¸ç¶åã¤ã³ã¹ã¿ã³ã¹ããã®æç¹ã§ã»ãã·ã§ã³ã¨é¢é£ä»ãã¦ãããªãã°ã å¼æ°ã§åãåã£ããªãã¸ã§ã¯ãã®ç¶æ
ãæ°¸ç¶åã¤ã³ã¹ã¿ã³ã¹ã«ã³ãã¼ãã¾ãã"
+
+#: index.docbook:676
+msgid "and <literal>merge()</literal> is very different:"
+msgstr "æ°¸ç¶åã¤ã³ã¹ã¿ã³ã¹ããã®æç¹ã§ã»ãã·ã§ã³ã«é¢é£ä»ãã¦ããªããªãã ãã¼ã¿ãã¼ã¹ããããããã¼ããããããããã¯ãæ°ããæ°¸ç¶åã¤ã³ã¹ã¿ã³ã¹ãä½æãã¾ãã"
+
+#: index.docbook:682
+msgid "if there is a persistent instance with the same identifier currently associated with the session, copy the state of the given object onto the persistent instance"
+msgstr "æ°¸ç¶åã¤ã³ã¹ã¿ã³ã¹ãè¿ããã¾ãã"
+
+#: index.docbook:689
+msgid "if there is no persistent instance currently associated with the session, try to load it from the database, or create a new persistent instance"
+msgstr "å¼æ°ã¨ãã¦ä¸ããã¤ã³ã¹ã¿ã³ã¹ã¯ã»ãã·ã§ã³ã¨é¢é£ãæã¡ã¾ããã ããã¯ãåé¢ç¶æ
ã®ã¾ã¾ã§ãã"
+
+#: index.docbook:695
+msgid "the persistent instance is returned"
+msgstr "æ°¸ç¶ãªãã¸ã§ã¯ãã®åé¤"
+
+#: index.docbook:700
+msgid "the given instance does not become associated with the session, it remains detached"
+msgstr "<literal>Session.delete()</literal> ã¯ãªãã¸ã§ã¯ãã®ç¶æ
ããã¼ã¿ãã¼ã¹ããåé¤ãã¾ãã ãã¡ãããåé¤ãããªãã¸ã§ã¯ããã¢ããªã±ã¼ã·ã§ã³ãä¿æããã¾ã¾ã§ãããã§ãã ãã®ããã <literal>delete()</literal> ã¯æ°¸ç¶ã¤ã³ã¹ã¿ã³ã¹ãä¸æçã«ãããã®ã¨èããã®ãä¸çªã§ãã"
+
+#: index.docbook:710
+msgid "Deleting persistent objects"
+msgstr "<![CDATA[sess.delete(cat);]]>"
+
+#: index.docbook:712
+msgid "<literal>Session.delete()</literal> will remove an object's state from the database. Of course, your application might still hold a reference to a deleted object. It's best to think of <literal>delete()</literal> as making a persistent instance transient."
+msgstr "å¤é¨ãã¼å¶ç´ã«éåãããªã¹ã¯ããªãã好ããªé çªã§ãªãã¸ã§ã¯ããåé¤ãããã¨ãã§ãã¾ãã ãã ããééã£ãé çªã§ãªãã¸ã§ã¯ããåé¤ããã¨ãå¤é¨ãã¼ã«ã©ã ã® <literal>NOT NULL</literal> å¶ç´ã«éåããå¯è½æ§ãããã¾ãã ä¾ãã°ã親ãªãã¸ã§ã¯ããåé¤ããã¨ãã«ãåä¾ãªãã¸ã§ã¯ããåé¤ãå¿ããå ´åã§ãã"
+
+#: index.docbook:719
+msgid "<![CDATA[sess.delete(cat);]]>"
+msgstr "ç°ãªãäºã¤ã®ãã¼ã¿ã¹ãã¢éã§ã®ãªãã¸ã§ã¯ãã®ã¬ããªã±ã¼ã·ã§ã³"
+
+#: index.docbook:721
+msgid "You may delete objects in any order you like, without risk of foreign key constraint violations. It is still possible to violate a <literal>NOT NULL</literal> constraint on a foreign key column by deleting objects in the wrong order, e.g. if you delete the parent, but forget to delete the children."
+msgstr "æ°¸ç¶ã¤ã³ã¹ã¿ã³ã¹ã®ã°ã©ããå¥ã®ãã¼ã¿ã¹ãã¢ã«æ°¸ç¶åããå ´åã«ã èå¥åã®å¤ãåçæããã«ããã¨ä¾¿å©ãªå ´åãããã¾ãã"
+
+#: index.docbook:732
+msgid "Replicating object between two different datastores"
+msgstr ""
+ "<![CDATA[//retrieve a cat from one database
+\n"
+ "Session session1 = factory1.openSession();
+\n"
+ "Transaction tx1 = session1.beginTransaction();
+\n"
+ "Cat cat = session1.get(Cat.class, catId);
+\n"
+ "tx1.commit();
+\n"
+ "session1.close();
+\n"
+ "
+\n"
+ "//reconcile with a second database
+\n"
+ "Session session2 = factory2.openSession();
+\n"
+ "Transaction tx2 = session2.beginTransaction();
+\n"
+ "session2.replicate(cat, ReplicationMode.LATEST_VERSION);
+\n"
+ "tx2.commit();
+\n"
+ "session2.close();]]>"
+
+#: index.docbook:734
+msgid "It is occasionally useful to be able to take a graph of persistent instances and make them persistent in a different datastore, without regenerating identifier values."
+msgstr "ã¬ããªã±ã¼ã·ã§ã³å
ã®ãã¼ã¿ãã¼ã¹ã«è¡ãæ¢ã«ããå ´åã <literal>replicate()</literal> ãè¡çªãã©ã®ããã«æ±ããã <literal>ReplicationMode</literal> ã§æå®ãã¾ãã"
+
+#: index.docbook:740
+msgid ""
+ "<![CDATA[//retrieve a cat from one database\n"
+ "Session session1 = factory1.openSession();\n"
+ "Transaction tx1 = session1.beginTransaction();\n"
+ "Cat cat = session1.get(Cat.class, catId);\n"
+ "tx1.commit();\n"
+ "session1.close();\n"
+ "\n"
+ "//reconcile with a second database\n"
+ "Session session2 = factory2.openSession();\n"
+ "Transaction tx2 = session2.beginTransaction();\n"
+ "session2.replicate(cat, ReplicationMode.LATEST_VERSION);\n"
+ "tx2.commit();\n"
+ "session2.close();]]>"
+msgstr "<literal>ReplicationMode.IGNORE</literal> - åãèå¥åãæã¤è¡ããã¼ã¿ãã¼ã¹ã«åå¨ãããªãã ãã®ãªãã¸ã§ã¯ããç¡è¦ãã¾ãã"
+
+#: index.docbook:742
+msgid "The <literal>ReplicationMode</literal> determines how <literal>replicate()</literal> will deal with conflicts with existing rows in the database."
+msgstr "<literal>ReplicationMode.OVERWRITE</literal> - åãèå¥åãæã¤æ¢åã®è¡ã ãã¹ã¦ä¸æ¸ããã¾ãã"
+
+#: index.docbook:749
+msgid "<literal>ReplicationMode.IGNORE</literal> - ignore the object when there is an existing database row with the same identifier"
+msgstr "<literal>ReplicationMode.EXCEPTION</literal> - åãèå¥åãæã¤è¡ããã¼ã¿ãã¼ã¹ã«åå¨ãããªãã ä¾å¤ãæãã¾ãã"
+
+#: index.docbook:755
+msgid "<literal>ReplicationMode.OVERWRITE</literal> - overwrite any existing database row with the same identifier"
+msgstr "<literal>ReplicationMode.LATEST_VERSION</literal> - è¡ã«ä¿åããã¦ãããã¼ã¸ã§ã³çªå·ãã å¼æ°ã®ãªãã¸ã§ã¯ãã®ãã¼ã¸ã§ã³çªå·ããå¤ããªãã°ããã®è¡ãä¸æ¸ããã¾ãã"
+
+#: index.docbook:761
+msgid "<literal>ReplicationMode.EXCEPTION</literal> - throw an exception if there is an existing database row with the same identifier"
+msgstr "次ã®ãããªã±ã¼ã¹ã§ããã®æ©è½ã使ç¨ãã¾ãã ç°ãªããã¼ã¿ãã¼ã¹ã¤ã³ã¹ã¿ã³ã¹ã«å
¥ãããããã¼ã¿ã®åæã 製åæ´æ°æã«ãããã·ã¹ãã è¨å®æ
å ±ã®æ´æ°ãéACIDãã©ã³ã¶ã¯ã·ã§ã³ã®ãªãã§å ããããå¤æ´ã®ãã¼ã«ããã¯ãªã©ã§ãã"
+
+#: index.docbook:767
+msgid "<literal>ReplicationMode.LATEST_VERSION</literal> - overwrite the row if its version number is earlier than the version number of the object, or ignore the object otherwise"
+msgstr "ã»ãã·ã§ã³ã®ãã©ãã·ã¥"
+
+#: index.docbook:775
+msgid "Usecases for this feature include reconciling data entered into different database instances, upgrading system configuration information during product upgrades, rolling back changes made during non-ACID transactions and more."
+msgstr "JDBCã³ãã¯ã·ã§ã³ã®ç¶æ
ã¨ã¡ã¢ãªä¸ã®ãªãã¸ã§ã¯ãã®ç¶æ
ãåæãããããã«å¿
è¦ãª SQLæã <literal>Session</literal> ãå®è¡ãããã¨ãã¨ãã©ãããã¾ãã ãã®å¦ç <emphasis>flush</emphasis> ã¯ãããã©ã«ãã§ã¯æ¬¡ã®ã¨ãã«èµ·ããã¾ãã"
+
+#: index.docbook:784
+msgid "Flushing the Session"
+msgstr "ã¯ã¨ãªãå®è¡ããå"
+
+#: index.docbook:786
+msgid "From time to time the <literal>Session</literal> will execute the SQL statements needed to synchronize the JDBC connection's state with the state of objects held in memory. This process, <emphasis>flush</emphasis>, occurs by default at the following points"
+msgstr "<literal>org.hibernate.Transaction.commit()</literal> ãå®è¡ããã¨ã"
+
+#: index.docbook:795
+msgid "before some query executions"
+msgstr "<literal>Session.flush()</literal> ãå®è¡ããã¨ã"
+
+#: index.docbook:800
+msgid "from <literal>org.hibernate.Transaction.commit()</literal>"
+msgstr "SQLæã¯ä»¥ä¸ã®é çªã§çºè¡ããã¾ãã"
+
+#: index.docbook:805
+msgid "from <literal>Session.flush()</literal>"
+msgstr "ãã¹ã¦ã®ã¨ã³ãã£ãã£ã®æ¿å
¥ãããã¯ã <literal>Session.save()</literal> ã使ã£ã¦ã»ã¼ããã ãªãã¸ã§ã¯ãã®é ã«å®è¡ãã¦ããã¾ãã"
+
+#: index.docbook:811
+msgid "The SQL statements are issued in the following order"
+msgstr "ãã¹ã¦ã®ã¨ã³ãã£ãã£ã®æ´æ°"
+
+#: index.docbook:817
+msgid "all entity insertions, in the same order the corresponding objects were saved using <literal>Session.save()</literal>"
+msgstr "ãã¹ã¦ã®ã³ã¬ã¯ã·ã§ã³ã®åé¤"
+
+#: index.docbook:823
+msgid "all entity updates"
+msgstr "ãã¹ã¦ã®ã³ã¬ã¯ã·ã§ã³ã®è¦ç´ ã«å¯¾ããåé¤ãæ´æ°ãæ¿å
¥"
+
+#: index.docbook:828
+msgid "all collection deletions"
+msgstr "ãã¹ã¦ã®ã³ã¬ã¯ã·ã§ã³ã®æ¿å
¥"
+
+#: index.docbook:833
+msgid "all collection element deletions, updates and insertions"
+msgstr "ãã¹ã¦ã®ã¨ã³ãã£ãã£ã®åé¤ãããã¯ã<literal>Session.delete()</literal> ã使ã£ã¦ åé¤ãããªãã¸ã§ã¯ãã®é ã«å®è¡ãã¦ããã¾ãã"
+
+#: index.docbook:838
+msgid "all collection insertions"
+msgstr "(ï¼ã¤ä¾å¤ãããã¾ãã <literal>native</literal> ID çæã使ã£ããªãã¸ã§ã¯ãã¯ã ããããã»ã¼ããããã¨ãã«æ¿å
¥ããã¾ããï¼"
+
+#: index.docbook:843
+msgid "all entity deletions, in the same order the corresponding objects were deleted using <literal>Session.delete()</literal>"
+msgstr "æ示çã« <literal>flush()</literal> ããã¨ããé¤ãã¦ã <emphasis>ãã¤</emphasis> <literal>Session</literal> ãJDBCãã³ã¼ã«ããã®ãã«ã¤ã㦠絶対çãªä¿è¨¼ã¯ããã¾ããããã ããããããå®è¡ããã <emphasis>é çª</emphasis> ã ã㯠ä¿è¨¼ããã¾ãã ã¾ããHibernate ã¯ã <literal>Query.list(..)</literal> ãå¤ããã¼ã¿ãééã£ããã¼ã¿è¿ããªããã¨ã ä¿è¨¼ãã¦ãã¾ãã"
+
+#: index.docbook:850
+msgid "(An exception is that objects using <literal>native</literal> ID generation are inserted when they are saved.)"
+msgstr "ãã©ãã·ã¥ãé »ç¹ã«èµ·ãããªãããã«ããã©ã«ãã®æ¯ãèããå¤ãããã¨ãã§ãã¾ãã <literal>FlushMode</literal> ã¯ã©ã¹ã¯3ã¤ã®ç°ãªãã¢ã¼ããå®ç¾©ãã¾ãã ããã¯ãã³ãããæã«ã ããã©ãã·ã¥ããã¢ã¼ã ï¼Hibernateã® <literal>Transaction</literal> APIã使ãããå ´åã ãã§ãï¼ã 説æã®ãã£ãå¦çé ã«åºã¥ãã¦èªåã§ãã©ãã·ã¥ããã¢ã¼ãã <literal>flush()</literal> ãæ示çã«å¼ã°ããªãéããã©ãã·ã¥ããªãã¢ã¼ãã®ï¼ã¤ã§ãã æå¾ã®ã¢ã¼ãã¯ãä½æ¥åä½ãé·æéã«åã¶å ´åã«å½¹ã«ç«ã¡ã¾ã ( <xref linkend=\"transactions-optimistic-longsession\"/> ãåç
§ãã¦ãã ãã)ã"
+
+#: index.docbook:855
+msgid "Except when you explicity <literal>flush()</literal>, there are absolutely no guarantees about <emphasis>when</emphasis> the <literal>Session</literal> executes the JDBC calls, only the <emphasis>order</emphasis> in which they are executed. However, Hibernate does guarantee that the <literal>Query.list(..)</literal> will never return stale data; nor will they return the wrong data."
+msgstr ""
+ "<![CDATA[sess = sf.openSession();
+\n"
+ "Transaction tx = sess.beginTransaction();
+\n"
+ "sess.setFlushMode(FlushMode.COMMIT); // allow queries to return stale state
+\n"
+ "
+\n"
+ "Cat izi = (Cat) sess.load(Cat.class, id);
+\n"
+ "izi.setName(iznizi);
+\n"
+ "
+\n"
+ "// might return stale data
+\n"
+ "sess.find(\"from Cat as cat left outer join cat.kittens kitten\");
+\n"
+ "
+\n"
+ "// change to izi is not flushed!
+\n"
+ "...
+\n"
+ "tx.commit(); // flush occurs
+\n"
+ "sess.close();]]>"
+
+#: index.docbook:863
+msgid "It is possible to change the default behavior so that flush occurs less frequently. The <literal>FlushMode</literal> class defines three different modes: only flush at commit time (and only when the Hibernate <literal>Transaction</literal> API is used), flush automatically using the explained routine, or never flush unless <literal>flush()</literal> is called explicitly. The last mode is useful for long running units of work, where a <literal>Session</literal> is kept open and disconnected for a long time (see <xref linkend=\"transactions-optimistic-longsession\"/>)."
+msgstr "ãã©ãã·ã¥ã®ã¨ããä¾å¤ãçºçããããããã¾ããã ï¼ä¾ãã°ãDMLæä½ãå¶ç´ãéåãããããªå ´åã§ããï¼ ä¾å¤å¦çãç解ããããã«ã¯ãHibernateã®ãã©ã³ã¶ã¯ã·ã§ã³ã®æ¯ãèããç解ããå¿
è¦ãããããã <xref linkend=\"transactions\"/> ã§èª¬æãã¾ãã"
+
+#: index.docbook:873
+msgid ""
+ "<![CDATA[sess = sf.openSession();\n"
+ "Transaction tx = sess.beginTransaction();\n"
+ "sess.setFlushMode(FlushMode.COMMIT); // allow queries to return stale state\n"
+ "\n"
+ "Cat izi = (Cat) sess.load(Cat.class, id);\n"
+ "izi.setName(iznizi);\n"
+ "\n"
+ "// might return stale data\n"
+ "sess.find(\"from Cat as cat left outer join cat.kittens kitten\");\n"
+ "\n"
+ "// change to izi is not flushed!\n"
+ "...\n"
+ "tx.commit(); // flush occurs\n"
+ "sess.close();]]>"
+msgstr "é£éçãªæ°¸ç¶å"
+
+#: index.docbook:875
+msgid "During flush, an exception might occur (e.g. if a DML operation violates a constraint). Since handling exceptions involves some understanding of Hibernate's transactional behavior, we discuss it in <xref linkend=\"transactions\"/>."
+msgstr "åã
ã®ãªãã¸ã§ã¯ããã»ã¼ãããããåé¤ããããå追å ããããããã¨ã¯ ããªãé¢åã§ããç¹ã«ãé¢é£ãããªãã¸ã§ã¯ããæ±ããããªå ´åã«ã¯éç«ã¡ã¾ãã ããããã®ã¯ã親åé¢ä¿ãæ±ãã±ã¼ã¹ã§ãã 以ä¸ã®ä¾ãèãã¦ã¿ã¾ãããã"
+
+#: index.docbook:884
+msgid "Transitive persistence"
+msgstr "ããã親åé¢ä¿ã®åãå¤åãªãï¼ä¾ãã°ãä½æãæååã®ã³ã¬ã¯ã·ã§ã³ï¼ã ãããã®ã©ã¤ããµã¤ã¯ã«ã¯è¦ªã«ä¾åãã¦ããã便å©ãªç¶æ
å¤åã®\"ã«ã¹ã±ã¼ã\"ã使ãããã«ã 追å ã®ä½æ¥ã¯å¿
è¦ã¯ããã¾ããã 親ãã»ã¼ããããã¨ããå¤åã®åãªãã¸ã§ã¯ããåãããã«ã»ã¼ãããã¾ããã 親ãåé¤ãããã¨ãã¯ãåãåé¤ããã¾ãããã®ä»ã®æä½ãåãã§ãã ã³ã¬ã¯ã·ã§ã³ãã1ã¤ã®åãåé¤ãããããªæä½ã§ããã¾ãããã¾ãã ããªãã¡ãHibernateã¯ãã®åé¤æä½ãæ¤åºããã¨ã å¤åã®ãªãã¸ã§ã¯ãã¯åç
§ãå
±æã§ããªãã®ã§ããã¼ã¿ãã¼ã¹ãããã®åä¾ãåé¤ãã¾ãã"
+
+#: index.docbook:886
+msgid "It is quite cumbersome to save, delete, or reattach individual objects, especially if you deal with a graph of associated objects. A common case is a parent/child relationship. Consider the following example:"
+msgstr "ããã§ã親ã¨åãå¤åã§ãªãã¨ã³ãã£ãã£ã§ããã¨ãã¦åãã·ããªãªãèãã¦ã¿ã¾ãããã ï¼ä¾ãã°ãã«ãã´ãªã¼ã¨åç®ã®é¢ä¿ã親ã¨åã®ç«ã®é¢ä¿ã§ããï¼ ã¨ã³ãã£ãã£ã¯ãããèªèº«ãã©ã¤ããµã¤ã¯ã«ãæã¡ãåç
§ã®å
±æããµãã¼ããã¾ãã ï¼ãã®ãããã³ã¬ã¯ã·ã§ã³ããã¨ã³ãã£ãã£ãåé¤ãããã¨ã¯ã ã¨ã³ãã£ãã£èªèº«ã®åé¤ãæå³ãã¾ãããï¼ ã¾ããã¨ã³ãã£ãã£ã¯ãããã©ã«ãã§ã¯ãé¢é£ããä»ã®ã¨ã³ãã£ãã£ã¸ ç¶æ
ãã«ã¹ã±ã¼ããããã¨ã¯ããã¾ããã Hibernate㯠<emphasis>å°éå¯è½æ§ã«ããæ°¸ç¶å</emphasis> ãããã©ã«ãã§ã¯å®è¡ãã¾ããã"
+
+#: index.docbook:892
+msgid "If the children in a parent/child relationship would be value typed (e.g. a collection of addresses or strings), their life cycle would depend on the parent and no further action would be required for convenient \"cascading\" of state changes. When the parent is saved, the value-typed child objects are saved as well, when the parent is deleted, the children will be deleted, etc. This even works for operations such as the removal of a child from the collection; Hibernate will detect this and, since value-typed objects can't have shared references, delete the child from the database."
+msgstr "Hibernateã®Sessionã®åºæ¬æä½ï¼ <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal> ãå«ã¾ãã¾ãï¼ã«å¯¾ãã¦ã ããããã«å¯¾å¿ããã«ã¹ã±ã¼ãã¹ã¿ã¤ã«ãããã¾ãã ããããã®ã«ã¹ã±ã¼ãã¹ã¿ã¤ã«ã«ã¯ã <literal>create, merge, save-update, delete, lock, refresh, evict, replicate</literal> ã¨ããååãã¤ãã¦ãã¾ãã ãããé¢é£ã«æ²¿ã£ã¦ã«ã¹ã±ã¼ãããããæä½ããããªãããããã³ã°ãã¡ã¤ã«ã«ããæå®ããªããã°ãªãã¾ããã ä¾ãã°ã以ä¸ã®ããã«ãã¾ãã"
+
+#: index.docbook:903
+msgid "Now consider the same scenario with parent and child objects being entities, not value-types (e.g. categories and items, or parent and child cats). Entities have their own life cycle, support shared references (so removing an entity from the collection does not mean it can be deleted), and there is by default no cascading of state from one entity to any other associated entities. Hibernate does not implement <emphasis>persistence by reachability</emphasis> by default."
+msgstr "<![CDATA[<one-to-one name=\"person\" cascade=\"persist\"/>]]>"
+
+#: index.docbook:912
+msgid "For each basic operation of the Hibernate session - including <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal> - there is a corresponding cascade style. Respectively, the cascade styles are named <literal>create, merge, save-update, delete, lock, refresh, evict, replicate</literal>. If you want an operation to be cascaded along an association, you must indicate that in the mapping document. For example:"
+msgstr "ã«ã¹ã±ã¼ãã¹ã¿ã¤ã«ã¯ãçµã¿åããããã¨ãã§ãã¾ãã"
+
+#: index.docbook:921
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist\"/>]]>"
+msgstr "<![CDATA[<one-to-one name=\"person\" cascade=\"persist,delete,lock\"/>]]>"
+
+#: index.docbook:923
+msgid "Cascade styles my be combined:"
+msgstr "<emphasis>ãã¹ã¦ã®</emphasis> æä½ãé¢é£ã«æ²¿ã£ã¦ã«ã¹ã±ã¼ãããããæå®ããã¨ãã¯ã <literal>cascade=\"all\"</literal> ã使ãã¾ãã ããã©ã«ãã® <literal>cascade=\"none\"</literal> ã¯ãã©ã®æä½ãã«ã¹ã±ã¼ãããªããã¨ãæå³ãã¾ãã"
+
+#: index.docbook:927
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist,delete,lock\"/>]]>"
+msgstr "ç¹æ®ãªã«ã¹ã±ã¼ãã¹ã¿ã¤ã« <literal>delete-orphan</literal> ã¯ãä¸å¯¾å¤é¢é£ã«ã ã é©ç¨ã§ãã¾ãã ããã¯ãé¢é£ããåé¤ãããåä¾ã®ãªãã¸ã§ã¯ãã«å¯¾ãã¦ã <literal>delete()</literal> æä½ãé©ç¨ããããã¨ãæå³ãã¾ãã"
+
+#: index.docbook:929
+msgid "You may even use <literal>cascade=\"all\"</literal> to specify that <emphasis>all</emphasis> operations should be cascaded along the association. The default <literal>cascade=\"none\"</literal> specifies that no operations are to be cascaded."
+msgstr "ããããï¼"
+
+#: index.docbook:935
+msgid "A special cascade style, <literal>delete-orphan</literal>, applies only to one-to-many associations, and indicates that the <literal>delete()</literal> operation should be applied to any child object that is removed from the association."
+msgstr "æ®éã <literal><many-to-one></literal> ã <literal><many-to-many></literal> é¢é£ã«å¯¾ãã¦ã¯ã ã«ã¹ã±ã¼ããè¨å®ããæå³ã¯ããã¾ããã <literal><one-to-one></literal> 㨠<literal><one-to-many></literal> é¢é£ã«å¯¾ãã¦ã¯ã ã«ã¹ã±ã¼ããå½¹ã«ç«ã¤ãã¨ãããã¾ãã"
+
+#: index.docbook:942
+msgid "Recommendations:"
+msgstr "åä¾ãªãã¸ã§ã¯ãã®å¯¿å½ã親ãªãã¸ã§ã¯ãã®å¯¿å½ã«å¶éãåãããªãã°ã <literal>cascade=\"all,delete-orphan\"</literal> ãæå®ãã åä¾ãªãã¸ã§ã¯ãã <emphasis>ã©ã¤ããµã¤ã¯ã«ãªãã¸ã§ã¯ã</emphasis> ã«ãã¾ãã"
+
+#: index.docbook:948
+msgid "It doesn't usually make sense to enable cascade on a <literal><many-to-one></literal> or <literal><many-to-many></literal> association. Cascade is often useful for <literal><one-to-one></literal> and <literal><one-to-many></literal> associations."
+msgstr ". ãã以å¤ã®å ´åã¯ãã«ã¹ã±ã¼ãã¯ã»ã¨ãã©å¿
è¦ãªãã§ãããã ããããåããã©ã³ã¶ã¯ã·ã§ã³ã®ãªãã§è¦ªã¨åãä¸ç·ã«åä½ãããã¨ãå¤ãã¨æãã ããããã®ã³ã¼ããæ¸ãæéãçãããã®ã§ããã°ã <literal>cascade=\"persist,merge,save-update\"</literal> ã使ããã¨ãèãã¾ãããã"
+
+#: index.docbook:956
+msgid "If the child object's lifespan is bounded by the lifespan of the parent object, make it a <emphasis>life cycle object</emphasis> by specifying <literal>cascade=\"all,delete-orphan\"</literal>."
+msgstr "<literal>cascade=\"all\"</literal> ã§ãããã³ã°ããé¢é£ï¼åå¤é¢é£ãã³ã¬ã¯ã·ã§ã³ï¼ã¯ã <emphasis>親å</emphasis> ã¹ã¿ã¤ã«ã®é¢é£ã¨ãã¼ã¯ããã¾ãã ããã¯ã親ã®ã»ã¼ã/æ´æ°/åé¤ããåã®ã»ã¼ã/æ´æ°/åé¤ãå¼ãèµ·ããé¢ä¿ã®ãã¨ã§ãã"
+
+#: index.docbook:963
+msgid "Otherwise, you might not need cascade at all. But if you think that you will often be working with the parent and children together in the same transaction, and you want to save yourself some typing, consider using <literal>cascade=\"persist,merge,save-update\"</literal>."
+msgstr "ããã«ãæ°¸ç¶åããã親ãåãåã«åç
§ãã¦ããã ãã§ãåã®ã»ã¼ã/æ´æ°ãå¼ãèµ·ããã¾ãã ãããããã®ã¡ã¿ãã¡ã¼ã¯ä¸å®å
¨ã§ãã親ããåç
§ãããªããªã£ãåã¯ãèªåçã«åé¤ <emphasis>ããã¾ãã</emphasis> ã ãã ãã <literal>cascade=\"delete-orphan\"</literal> ã§ãããã³ã°ããã <literal><one-to-many></literal> é¢é£ã é¤ãã¦ã§ãã 親åé¢ä¿ã®ã«ã¹ã±ã¼ãæä½ã®æ£ç¢ºãªæå³ã¯ä»¥ä¸ã®ããã«ãªãã¾ãã"
+
+#: index.docbook:971
+msgid "Mapping an association (either a single valued association, or a collection) with <literal>cascade=\"all\"</literal> marks the association as a <emphasis>parent/child</emphasis> style relationship where save/update/delete of the parent results in save/update/delete of the child or children."
+msgstr "親ã <literal>persist()</literal> ã«æ¸¡ããããªãã°ã ãã¹ã¦ã®å㯠<literal>persist()</literal> ã«æ¸¡ããã¾ãã"
+
+#: index.docbook:977
+msgid "Futhermore, a mere reference to a child from a persistent parent will result in save/update of the child. This metaphor is incomplete, however. A child which becomes unreferenced by its parent is <emphasis>not</emphasis> automatically deleted, except in the case of a <literal><one-to-many></literal> association mapped with <literal>cascade=\"delete-orphan\"</literal>. The precise semantics of cascading operations for a parent/child relationship are as follows:"
+msgstr "<literal>merge()</literal> ã«æ¸¡ããããªãã°ã ãã¹ã¦ã®å㯠<literal>merge()</literal> ã«æ¸¡ããã¾ãã"
+
+#: index.docbook:988
+msgid "If a parent is passed to <literal>persist()</literal>, all children are passed to <literal>persist()</literal>"
+msgstr "親ã <literal>save()</literal> ã <literal>update()</literal> ã <literal>saveOrUpdate()</literal> ã«æ¸¡ããããªãã°ããã¹ã¦ã®å㯠<literal>saveOrUpdate()</literal> ã«æ¸¡ããã¾ãã"
+
+#: index.docbook:994
+msgid "If a parent is passed to <literal>merge()</literal>, all children are passed to <literal>merge()</literal>"
+msgstr "ä¸æçã¾ãã¯åé¢ç¶æ
ã®åããæ°¸ç¶åããã親ã«åç
§ããããªãã°ã <literal>saveOrUpdate()</literal> ã«æ¸¡ããã¾ãã"
+
+#: index.docbook:1000
+msgid "If a parent is passed to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal>, all children are passed to <literal>saveOrUpdate()</literal>"
+msgstr "親ãåé¤ããããªãã°ããã¹ã¦ã®åã¯ã <literal>delete()</literal> ã«æ¸¡ããã¾ãã"
+
+#: index.docbook:1006
+msgid "If a transient or detached child becomes referenced by a persistent parent, it is passed to <literal>saveOrUpdate()</literal>"
+msgstr "åãæ°¸ç¶åããã親ããåç
§ãããªããªã£ãã¨ãã¯ã <emphasis>ç¹ã«ä½ãèµ·ããã¾ãã</emphasis> ã ãã£ã¦ãã¢ããªã±ã¼ã·ã§ã³ãå¿
è¦ã§ããã°ãæ示çã«åé¤ããå¿
è¦ãããã¾ãã ãã ãã <literal>cascade=\"delete-orphan\"</literal> ã®å ´åãé¤ãã¾ãã ãã®å ´åãã親ã®ãªããåã¯åé¤ããã¾ãã"
+
+#: index.docbook:1012
+msgid "If a parent is deleted, all children are passed to <literal>delete()</literal>"
+msgstr "æå¾ã«ãæä½ã®ã«ã¹ã±ã¼ãããªãã¸ã§ã¯ãã°ã©ãã«é©ç¨ãããã®ã¯ã <emphasis>ã³ã¼ã«ããæ</emphasis> ãããã¯ã <emphasis>flushããæ</emphasis> ã§ãããã¨ã«æ³¨æãã¦ãã ããã ãã¹ã¦ã®æä½ã¯ããã®æä½ãå®è¡ãããã¨ãã«ãå°éå¯è½ãªé¢é£ããã¨ã³ãã£ãã£ã«å¯¾ã㦠ã«ã¹ã±ã¼ããå¯è½ãªãã«ã¹ã±ã¼ããã¾ãã ãããã <literal>save-upate</literal> 㨠<literal>delete-orphan</literal> ã¯ã <literal>Session</literal> ãflushãã¦ããéã«ã ãã¹ã¦ã®å°éå¯è½ãªé¢é£ããã¨ã³ãã£ãã£ã«ä¼æãã¾ãã"
+
+#: index.docbook:1017
+msgid "If a child is dereferenced by a persistent parent, <emphasis>nothing special happens</emphasis> - the application should explicitly delete the child if necessary - unless <literal>cascade=\"delete-orphan\"</literal>, in which case the \"orphaned\" child is deleted."
+msgstr "ã¡ã¿ãã¼ã¿ã®ä½¿ç¨"
+
+#: index.docbook:1026
+msgid "Finally, note that cascading of operations can be applied to an object graph at <emphasis>call time</emphasis> or at <emphasis>flush time</emphasis>. All operations, if enabled, are cascaded to associated entities reachable when the operation is executed. However, <literal>save-upate</literal> and <literal>delete-orphan</literal> are transitive for all associated entities reachable during flush of the <literal>Session</literal>."
+msgstr "Hibernateã¯ããã¹ã¦ã®ã¨ã³ãã£ãã£ã¨å¤åã®é常ã«ãªãããªã¡ã¿ã¬ãã«ã®ã¢ãã«ãå¿
è¦ã¨ãã¾ãã ã¨ãã©ãããã®ã¢ãã«ã¯ã¢ããªã±ã¼ã·ã§ã³ã«ã¨ã£ã¦ã¨ã¦ãå½¹ã«ç«ã¡ã¾ãã ä¾ãã°ãã¢ããªã±ã¼ã·ã§ã³ã¯ãHibernateã®ã¡ã¿ãã¼ã¿ã使ã£ã¦ã\"è³¢ã\" ãã£ã¼ãã³ãã¼ã¢ã«ã´ãªãºã ã å®è£
ã§ãããããã¾ããããã®ã¢ã«ã´ãªãºã ã¨ã¯ãã©ã®ãªãã¸ã§ã¯ããã³ãã¼ãããã¹ããï¼ä¾ï¼å¯å¤ã®å¤åï¼ã ã©ã®ãªãã¸ã§ã¯ãã¯ã³ãã¼ãããªãã¹ããï¼ä¾ï¼ä¸å¤ãªå¤åãå¯è½ãªãé¢é£ããã¨ã³ãã£ãã£ï¼ã å¤æã§ãããã®ã§ãã"
+
+#: index.docbook:1038
+msgid "Using metadata"
+msgstr "Hibernateã¯<literal>ClassMetadata</literal> ã¨<literal>CollectionMetadata</literal> ã¤ã³ã¿ãã§ã¼ã¹ã¨ <literal>Type</literal> é層ãéãã¦ã¡ã¿ãã¼ã¿ãå
¬éãã¾ãã ã¡ã¿ãã¼ã¿ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ã <literal>SessionFactory</literal> ããå¾ããã¾ãã"
+
+#: index.docbook:1040
+msgid "Hibernate requires a very rich meta-level model of all entity and value types. From time to time, this model is very useful to the application itself. For example, the application might use Hibernate's metadata to implement a \"smart\" deep-copy algorithm that understands which objects should be copied (eg. mutable value types) and which should not (eg. immutable value types and, possibly, associated entities)."
+msgstr ""
+ "<![CDATA[Cat fritz = ......;
+\n"
+ "ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);
+\n"
+ "
+\n"
+ "Object[] propertyValues = catMeta.getPropertyValues(fritz);
+\n"
+ "String[] propertyNames = catMeta.getPropertyNames();
+\n"
+ "Type[] propertyTypes = catMeta.getPropertyTypes();
+\n"
+ "
+\n"
+ "// get a Map of all properties which are not collections or associations
+\n"
+ "Map namedValues = new HashMap();
+\n"
+ "for ( int i=0; i<propertyNames.length; i++ ) {
+\n"
+ " if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {
+\n"
+ " namedValues.put( propertyNames[i], propertyValues[i] );
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:1047
+msgid "Hibernate exposes metadata via the <literal>ClassMetadata</literal> and <literal>CollectionMetadata</literal> interfaces and the <literal>Type</literal> hierarchy. Instances of the metadata interfaces may be obtained from the <literal>SessionFactory</literal>."
+msgstr ""
+
+#: index.docbook:1054
+msgid ""
+ "<![CDATA[Cat fritz = ......;\n"
+ "ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);\n"
+ "\n"
+ "Object[] propertyValues = catMeta.getPropertyValues(fritz);\n"
+ "String[] propertyNames = catMeta.getPropertyNames();\n"
+ "Type[] propertyTypes = catMeta.getPropertyTypes();\n"
+ "\n"
+ "// get a Map of all properties which are not collections or associations\n"
+ "Map namedValues = new HashMap();\n"
+ "for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {\n"
+ " namedValues.put( propertyNames[i], propertyValues[i] );\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/toolset_guide.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/toolset_guide.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/toolset_guide.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,807 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Toolset Guide"
+msgstr "Toolset Guide ãã¼ã«ã»ããã¬ã¤ã"
+
+#: index.docbook:7
+msgid "Roundtrip engineering with Hibernate is possible using a set of Eclipse plugins, commandline tools, as well as Ant tasks."
+msgstr "Hibernateã使ã£ãã©ã¦ã³ãããªããã¨ã³ã¸ãã¢ãªã³ã°ã¯ã Eclipseãã©ã°ã¤ã³ãã³ãã³ãã©ã¤ã³ãã¼ã«ããã¡ããAntã¿ã¹ã¯ã使ããã¨ã§å¯è½ã§ãã"
+
+#: index.docbook:12
+msgid "The <emphasis>Hibernate Tools</emphasis> currently include plugins for the Eclipse IDE as well as Ant tasks for reverse engineering of existing databases:"
+msgstr "<emphasis>Hibernate Tools</emphasis> ã¯ç¾å¨ãæ¢åãã¼ã¿ãã¼ã¹ã®ãªãã¼ã¹ã¨ã³ã¸ãã¢ãªã³ã°ã®Antã¿ã¹ã¯ã«å ãã¦ãEclipseIDEã®ãã©ã°ã¤ã³ãå«ã¿ã¾ãã"
+
+#: index.docbook:18
+msgid "<emphasis>Mapping Editor:</emphasis> An editor for Hibernate XML mapping files, supporting auto-completion and syntax highlighting. It also supports semantic auto-completion for class names and property/field names, making it much more versatile than a normal XML editor."
+msgstr "<emphasis>ãããã³ã°ã¨ãã£ã¿:</emphasis> Hibernateã®XMLãããã³ã°ãã¡ã¤ã«ç¨ã®ã¨ãã£ã¿ã§ã èªåè£å®ã¨æ§æ強調表示ããµãã¼ããã¦ãã¾ããã¯ã©ã¹åãããããã£/ãã£ã¼ã«ãåã«å¯¾ããèªåè£å®ããµãã¼ããã é常ã®XMLã¨ãã£ã¿ãããå¼·åã§ãã"
+
+#: index.docbook:23
+msgid "<emphasis>Console:</emphasis> The console is a new view in Eclipse. In addition to a tree overview of your console configurations, you also get an interactive view of your persistent classes and their relationships. The console allows you to execute HQL queries against your database and browse the result directly in Eclipse."
+msgstr "<emphasis>Console:</emphasis> ã³ã³ã½ã¼ã«ã¯ã¨ã¯ãªãã¹ã®æ°ãããã¥ã¼ã§ãã ã³ã³ã½ã¼ã«ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã®ããªã¼ãªã¼ãã¼ãã¥ã¼ã«å ãã¦ãæ°¸ç¶ã¯ã©ã¹ã¨ãã®é¢é£ã®ç¸äºä½ç¨ãã¥ã¼ãå¾ããã¾ãã ãã¼ã¿ãã¼ã¹ã«HQLãå®è¡ããçµæãç´æ¥ã¨ã¯ãªãã¹ä¸ã§è¦ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:30
+msgid "<emphasis>Development Wizards:</emphasis> Several wizards are provided with the Hibernate Eclipse tools; you can use a wizard to quickly generate Hibernate configuration (cfg.xml) files, or you may even completely reverse engineer an existing database schema into POJO source files and Hibernate mapping files. The reverse engineering wizard supports customizable templates."
+msgstr "<emphasis>éçºã¦ã£ã¶ã¼ã</emphasis> Hibernateã®Eclipseãã¼ã«ã¯ããã¤ãã®ã¦ã£ã¶ã¼ããæä¾ãã¾ãã ã¦ã£ã¶ã¼ãã使ã£ã¦Hibernateã®è¨å®ãã¡ã¤ã«(cfg.xml)ããã°ããçæãããã æ¢åã®ãã¼ã¿ãã¼ã¹ã¹ãã¼ããPOJOã®ã½ã¼ã¹ãã¡ã¤ã«ã¨Hibernateã®ãããã³ã°ãã¡ã¤ã«ã¸ã¨ã å®å
¨ã«ãªãã¼ã¹ã¨ã³ã¸ãã¢ãªã³ã°ãããã¨ãã§ãã¾ãã ãªãã¼ã¹ã¨ã³ã¸ãã¢ãªã³ã°ã¦ã£ã¶ã¼ãã¯ã«ã¹ã¿ãã¤ãºå¯è½ãªãã³ãã¬ã¼ãããµãã¼ããã¾ãã"
+
+#: index.docbook:38
+msgid "Ant Tasks:"
+msgstr "Ant Tasks:"
+
+#: index.docbook:43
+msgid "Please refer to the <emphasis>Hibernate Tools</emphasis> package and it's documentation for more information."
+msgstr "ãã詳ããæ
å ±ã¯ <emphasis>Hibernate Tools</emphasis> ããã±ã¼ã¸ã¨ãã®ããã¥ã¡ã³ããåç
§ãã¦ãã ããã"
+
+#: index.docbook:48
+msgid "However, the Hibernate main package comes bundled with an integrated tool (it can even be used from \"inside\" Hibernate on-the-fly): <emphasis>SchemaExport</emphasis> aka <literal>hbm2ddl</literal>."
+msgstr "ããããHibernateã®ã¡ã¤ã³ããã±ã¼ã¸ã¯ <emphasis>SchemaExport</emphasis> ã å¥å <literal>hbm2ddl</literal> ãå«ã¿ã¾ã(Hibernateå
ã§ãªã³ã¶ãã©ã¤ã§ä½¿ç¨ã§ãã¾ã)ã"
+
+#: index.docbook:55
+msgid "Automatic schema generation"
+msgstr "ã¹ãã¼ãã®èªåçæ"
+
+#: index.docbook:57
+msgid "DDL may be generated from your mapping files by a Hibernate utility. The generated schema includes referential integrity constraints (primary and foreign keys) for entity and collection tables. Tables and sequences are also created for mapped identifier generators."
+msgstr "DDLã¯Hibernateã¦ã¼ãã£ãªãã£ã«ãããããã³ã°ãã¡ã¤ã«ããçæãããã¨ãã§ãã¾ãã çæãããã¹ãã¼ãã¯ã¨ã³ãã£ãã£ãã³ã¬ã¯ã·ã§ã³ã®ãã¼ãã«ã«å¯¾ããåç
§æ´åæ§å¶ç´(主ãã¼ã¨å¤é¨ãã¼)ãå«ã¿ã¾ãã ãã¼ãã«ã¨ã·ã¼ã±ã³ã¹ã¯ãããã³ã°ããèå¥åã¸ã§ãã¬ã¼ã¿ã«å¯¾ãã¦çæããã¾ãã"
+
+#: index.docbook:64
+msgid "You <emphasis>must</emphasis> specify a SQL <literal>Dialect</literal> via the <literal>hibernate.dialect</literal> property when using this tool, as DDL is highly vendor specific."
+msgstr "DDLã¯ãã³ãã¼ä¾åãªã®ã§ããã®ãã¼ã«ã使ãã¨ãã¯ã<literal>hibernate.dialect</literal> ããããã£ã§SQLã® <literal>æ¹è¨</literal> ãæå® <emphasis>ããªããã°ãªãã¾ãã</emphasis> ã"
+
+#: index.docbook:70
+msgid "First, customize your mapping files to improve the generated schema."
+msgstr "ã¾ããçæãããã¹ãã¼ããæ¹åããããã«ããããã³ã°ãã¡ã¤ã«ãã«ã¹ã¿ãã¤ãºãã¦ãã ããã"
+
+#: index.docbook:75
+msgid "Customizing the schema"
+msgstr "ã¹ãã¼ãã®ã«ã¹ã¿ãã¤ãº"
+
+#: index.docbook:77
+msgid "Many Hibernate mapping elements define optional attributes named <literal>length</literal>, <literal>precision</literal> and <literal>scale</literal>. You may set the length, precision and scale of a column with this attribute."
+msgstr "å¤ãã®Hibernateã®ãããã³ã°è¦ç´ ã§ã¯ããªãã·ã§ã³ã® <literal>length</literal> ã¨ããåã®å±æ§ãå®ç¾©ãã¦ãã¾ãã ãã®å±æ§ã§ã«ã©ã é·ãè¨å®ãããã¨ãã§ãã¾ã(ã¾ãã¯NUMERIC/DECIMALåã®ãã¼ã¿ã®ç²¾åº¦ãè¨å®ã§ãã¾ã)ã"
+
+#: index.docbook:84
+msgid "<![CDATA[<property name=\"zip\" length=\"5\"/>]]>"
+msgstr "<literal>not-null</literal> å±æ§ï¼ãã¼ãã«ã®ã«ã©ã 㸠<literal>NOT NULL</literal> å¶ç´ãçæããï¼ã¨ <literal>unique</literal> å±æ§ï¼ãã¼ãã«ã®ã«ã©ã 㸠<literal>UNIQUE</literal> å¶ç´ãçæããï¼ãè¨å®ã§ããã¿ã°ãããã¾ãã"
+
+#: index.docbook:85
+msgid "<![CDATA[<property name=\"balance\" precision=\"12\" scale=\"2\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" not-null=\"true\"/>]]>"
+
+#: index.docbook:87
+msgid "Some tags also accept a <literal>not-null</literal> attribute (for generating a <literal>NOT NULL</literal> constraint on table columns) and a <literal>unique</literal> attribute (for generating <literal>UNIQUE</literal> constraint on table columns)."
+msgstr "<![CDATA[<element column=\"serialNumber\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+
+#: index.docbook:93
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" not-null=\"true\"/>]]>"
+msgstr "<literal>unique-key</literal> å±æ§ã¯ã«ã©ã ãã°ã«ã¼ãåãã¦ä¸ã¤ã®ãã¼å¶ç´ã«ããããã«ä½¿ããã¾ãã ç¾å¨ã<literal>unique-key</literal> å±æ§ã§æå®ãããå¤ã¯å¶ç´ã®æå®ã«ã¯ <emphasis>使ããã</emphasis> ã ãããã³ã°ãã¡ã¤ã«ã§ã«ã©ã ãã°ã«ã¼ãåãããã¨ã«ã®ã¿ä½¿ããã¾ãã"
+
+#: index.docbook:95
+msgid "<![CDATA[<element column=\"serialNumber\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"org\" column=\"orgId\" unique-key=\"OrgEmployeeId\"/>
+\n"
+ "<property name=\"employeeId\" unique-key=\"OrgEmployeeId\"/>]]>"
+
+#: index.docbook:97
+msgid "A <literal>unique-key</literal> attribute may be used to group columns in a single unique key constraint. Currently, the specified value of the <literal>unique-key</literal> attribute is <emphasis>not</emphasis> used to name the constraint in the generated DDL, only to group the columns in the mapping file."
+msgstr "<literal>index</literal> å±æ§ã¯ãããã³ã°ããã«ã©ã ã使ã£ã¦çæããã¤ã³ããã¯ã¹ã®ååãæå®ãã¾ãã è¤æ°ã«ã©ã ãï¼ã¤ã®ã¤ã³ããã¯ã¹ã«ã°ã«ã¼ãåã§ãã¾ããåã«ãåãã¤ã³ããã¯ã¹åãæå®ããã ãã§ãã"
+
+#: index.docbook:105
+msgid ""
+ "<![CDATA[<many-to-one name=\"org\" column=\"orgId\" unique-key=\"OrgEmployeeId\"/>\n"
+ "<property name=\"employeeId\" unique-key=\"OrgEmployee\"/>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"lastName\" index=\"CustName\"/>
+\n"
+ "<property name=\"firstName\" index=\"CustName\"/>]]>"
+
+#: index.docbook:107
+msgid "An <literal>index</literal> attribute specifies the name of an index that will be created using the mapped column or columns. Multiple columns may be grouped into the same index, simply by specifying the same index name."
+msgstr "<literal>foreign-key</literal> å±æ§ã¯ãçæãããå¤é¨ãã¼å¶ç´ã®ååããªã¼ãã¼ã©ã¤ãããããã«ä½¿ç¨ã§ãã¾ãã"
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[<property name=\"lastName\" index=\"CustName\"/>\n"
+ "<property name=\"firstName\" index=\"CustName\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" foreign-key=\"FKFooBar\"/>]]>"
+
+#: index.docbook:115
+msgid "A <literal>foreign-key</literal> attribute may be used to override the name of any generated foreign key constraint."
+msgstr "å¤ãã®ãããã³ã°è¦ç´ ã¯ãå <literal><column></literal> è¦ç´ ãè¨è¿°ã§ãã¾ããããã¯è¤æ°ã«ã©ã åã®ãããã³ã°ã«ã¯ç¹ã«æç¨ã§ãã"
+
+#: index.docbook:120
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" foreign-key=\"FKFooBar\"/>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"name\" type=\"my.customtypes.Name\"/>
+\n"
+ " <column name=\"last\" not-null=\"true\" index=\"bar_idx\" length=\"30\"/>
+\n"
+ " <column name=\"first\" not-null=\"true\" index=\"bar_idx\" length=\"20\"/>
+\n"
+ " <column name=\"initial\"/>
+\n"
+ "</property>]]>"
+
+#: index.docbook:122
+msgid "Many mapping elements also accept a child <literal><column></literal> element. This is particularly useful for mapping multi-column types:"
+msgstr "<literal>default</literal> å±æ§ã¯ã«ã©ã ã®ããã©ã«ãå¤ãæå®ãã¾ã (ãããã³ã°ããã¯ã©ã¹ã®æ°ããã¤ã³ã¹ã¿ã³ã¹ãä¿åããåã«ã ãããã³ã°ããããããã£ã¸åãå¤ã代å
¥ãã¹ãã§ã)ã"
+
+#: index.docbook:127
+msgid ""
+ "<![CDATA[<property name=\"name\" type=\"my.customtypes.Name\"/>\n"
+ " <column name=\"last\" not-null=\"true\" index=\"bar_idx\" length=\"30\"/>\n"
+ " <column name=\"first\" not-null=\"true\" index=\"bar_idx\" length=\"20\"/>\n"
+ " <column name=\"initial\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"credits\" type=\"integer\" insert=\"false\">
+\n"
+ " <column name=\"credits\" default=\"10\"/>
+\n"
+ "</property>]]>"
+
+#: index.docbook:129
+msgid "The <literal>default</literal> attribute lets you specify a default value for a column (you should assign the same value to the mapped property before saving a new instance of the mapped class)."
+msgstr ""
+ "<![CDATA[<version name=\"version\" type=\"integer\" insert=\"false\">
+\n"
+ " <column name=\"version\" default=\"0\"/>
+\n"
+ "</property>]]>"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<property name=\"credits\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"credits\" default=\"10\"/>\n"
+ "</property>]]>"
+msgstr "<literal>sql-type</literal> å±æ§ã§ãããã©ã«ãã®HibernateåããSQLã®ãã¼ã¿åã¸ã®ãããã³ã°ããªã¼ãã¼ã©ã¤ãã§ãã¾ãã"
+
+#: index.docbook:137
+msgid ""
+ "<![CDATA[<version name=\"version\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"version\" default=\"0\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"balance\" type=\"float\">
+\n"
+ " <column name=\"balance\" sql-type=\"decimal(13,3)\"/>
+\n"
+ "</property>]]>"
+
+#: index.docbook:139
+msgid "The <literal>sql-type</literal> attribute allows the user to override the default mapping of a Hibernate type to SQL datatype."
+msgstr "<literal>check</literal> å±æ§ã§ãã§ãã¯å¶ç´ãæå®ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<property name=\"balance\" type=\"float\">\n"
+ " <column name=\"balance\" sql-type=\"decimal(13,3)\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">
+\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>
+\n"
+ "</property>]]>"
+
+#: index.docbook:146
+msgid "The <literal>check</literal> attribute allows you to specify a check constraint."
+msgstr ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">
+\n"
+ " ...
+\n"
+ " <property name=\"bar\" type=\"float\"/>
+\n"
+ "</class>]]>"
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>\n"
+ "</property>]]>"
+msgstr "<title>ã¾ã¨ã</title>"
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">\n"
+ " ...\n"
+ " <property name=\"bar\" type=\"float\"/>\n"
+ "</class>]]>"
+msgstr "<entry>å±æ§</entry>"
+
+#: index.docbook:156
+msgid "Summary"
+msgstr "<entry>å¤</entry>"
+
+#: index.docbook:163
+msgid "Attribute"
+msgstr "<entry>説æ</entry>"
+
+#: index.docbook:164
+msgid "Values"
+msgstr "length"
+
+#: index.docbook:165
+msgid "Interpretation"
+msgstr "<entry>æ°å¤</entry>"
+
+#: index.docbook:170
+msgid "length"
+msgstr "ã«ã©ã ã®é·ã"
+
+#: index.docbook:171, index.docbook:176, index.docbook:181
+msgid "number"
+msgstr "precision"
+
+#: index.docbook:172
+msgid "column length"
+msgstr "<entry>æ°å¤</entry>"
+
+#: index.docbook:175
+msgid "precision"
+msgstr "ã«ã©ã ã®DECIMALåã®ç²¾åº¦ï¼precisionï¼"
+
+#: index.docbook:177
+msgid "column decimal precision"
+msgstr "<entry>æ°å¤</entry>"
+
+#: index.docbook:180
+msgid "scale"
+msgstr "ã«ã©ã ã®DECIMALåã®ã¹ã±ã¼ã«ï¼scaleï¼"
+
+#: index.docbook:182
+msgid "column decimal scale"
+msgstr "true|false"
+
+#: index.docbook:185
+msgid "not-null"
+msgstr "ã«ã©ã ãnullå¤ãåããªããã¨ãæå®ãã¾ã"
+
+#: index.docbook:186, index.docbook:191
+msgid "true|false"
+msgstr "unique"
+
+#: index.docbook:187
+msgid "specfies that the column should be non-nullable"
+msgstr "true|false"
+
+#: index.docbook:190
+msgid "unique"
+msgstr "ã«ã©ã ãã¦ãã¼ã¯å¶ç´ãæã¤ãã¨ãæå®ãã¾ã"
+
+#: index.docbook:192
+msgid "specifies that the column should have a unique constraint"
+msgstr "ã¤ã³ããã¯ã¹å"
+
+#: index.docbook:195
+msgid "index"
+msgstr "(è¤æ°ã«ã©ã ã®)ã¤ã³ããã¯ã¹ã®ååãæå®ãã¾ã"
+
+#: index.docbook:196
+msgid "index_name"
+msgstr "unique-key"
+
+#: index.docbook:197
+msgid "specifies the name of a (multi-column) index"
+msgstr "ã¦ãã¼ã¯ãã¼å"
+
+#: index.docbook:200
+msgid "unique-key"
+msgstr "è¤æ°ã«ã©ã ã®ã¦ãã¼ã¯å¶ç´ã®ååãæå®ãã¾ã"
+
+#: index.docbook:201
+msgid "unique_key_name"
+msgstr "foreign-key"
+
+#: index.docbook:202
+msgid "specifies the name of a multi-column unique constraint"
+msgstr "å¤é¨ãã¼å"
+
+#: index.docbook:205
+msgid "foreign-key"
+msgstr "<one-to-one>ã<many-to-one>ã<many-to-many>ãããã³ã°è¦ç´ ã使ã£ã¦ã é¢é£ã«å¯¾ãçæãããå¤é¨ãã¼å¶ç´ã®ååãæå®ãã¾ãã <literal>SchemaExport</literal> 㯠<literal>inverse=\"true\"</literal> å´ãèæ
®ããªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:206
+msgid "foreign_key_name"
+msgstr "sql-type"
+
+#: index.docbook:207
+msgid "specifies the name of the foreign key constraint generated for an association, for a <literal><one-to-one></literal>, <literal><many-to-one></literal>, <literal><key></literal>, or <literal><many-to-many></literal> mapping element. Note that <literal>inverse=\"true\"</literal> sides will not be considered by <literal>SchemaExport</literal>."
+msgstr "SQLã®ã«ã©ã å"
+
+#: index.docbook:217
+msgid "sql-type"
+msgstr "ããã©ã«ãã®ã«ã©ã åããªã¼ãã¼ã©ã¤ããã¾ã( <literal><column></literal> è¦ç´ ã®å±æ§ã®ã¿)"
+
+#: index.docbook:218
+msgid "SQL column type"
+msgstr "default"
+
+#: index.docbook:219
+msgid "overrides the default column type (attribute of <literal><column></literal> element only)"
+msgstr "SQLå¼"
+
+#: index.docbook:225
+msgid "default"
+msgstr "ã«ã©ã ã®ããã©ã«ãå¤ãæå®ãã¾ã"
+
+#: index.docbook:226, index.docbook:233
+msgid "SQL expression"
+msgstr "check"
+
+#: index.docbook:227
+msgid "specify a default value for the column"
+msgstr "SQLå¼"
+
+#: index.docbook:232
+msgid "check"
+msgstr "ã«ã©ã ããã¼ãã«ã«SQLã®ãã§ãã¯å¶ç´ãä½æãã¾ã"
+
+#: index.docbook:234
+msgid "create an SQL check constraint on either column or table"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">
+\n"
+ " <comment>Current customers only</comment>
+\n"
+ " ...
+\n"
+ "</class>]]>"
+
+#: index.docbook:242
+msgid "The <literal><comment></literal> element allows you to specify comments for the generated schema."
+msgstr ""
+ "<![CDATA[<property name=\"balance\">
+\n"
+ " <column name=\"bal\">
+\n"
+ " <comment>Balance in USD</comment>
+\n"
+ " </column>
+\n"
+ "</property>]]>"
+
+#: index.docbook:247
+msgid ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">\n"
+ " <comment>Current customers only</comment>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr "ããã«ãããçæããDDLã« <literal>comment on table</literal> ã <literal>comment on column</literal> æãæ¸ããã¾ãã"
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[<property name=\"balance\">\n"
+ " <column name=\"bal\">\n"
+ " <comment>Balance in USD</comment>\n"
+ " </column>\n"
+ "</property>]]>"
+msgstr "ãã¼ã«ã®å®è¡"
+
+#: index.docbook:251
+msgid "This results in a <literal>comment on table</literal> or <literal>comment on column</literal> statement in the generated DDL (where supported)."
+msgstr "<literal>SchemaExport</literal> ã¯æ¨æºåºåã«å¯¾ãã¦DDLã¹ã¯ãªãããæ¸ãåºããDDLæãå®è¡ãããããã¾ãã"
+
+#: index.docbook:260
+msgid "Running the tool"
+msgstr "<literal>java -cp </literal> <emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>options mapping_files</emphasis>"
+
+#: index.docbook:262
+msgid "The <literal>SchemaExport</literal> tool writes a DDL script to standard out and/or executes the DDL statements."
+msgstr "<literal>SchemaExport</literal> Command Line Options <literal>SchemaExport</literal> ã®ã³ãã³ãã©ã¤ã³ãªãã·ã§ã³"
+
+#: index.docbook:267
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "ãªãã·ã§ã³"
+
+#: index.docbook:273
+msgid "<literal>SchemaExport</literal> Command Line Options"
+msgstr "<entry>説æ</entry>"
+
+#: index.docbook:279, index.docbook:429, index.docbook:498
+msgid "Option"
+msgstr "--quiet"
+
+#: index.docbook:280, index.docbook:367, index.docbook:430, index.docbook:499
+msgid "Description"
+msgstr "ã¹ã¯ãªãããæ¨æºåºåã«åºåãã¾ãã"
+
+#: index.docbook:285, index.docbook:435
+msgid "--quiet"
+msgstr "--drop"
+
+#: index.docbook:286, index.docbook:436
+msgid "don't output the script to stdout"
+msgstr "ãã¼ãã«ã®åé¤ã ããè¡ãã¾ã"
+
+#: index.docbook:289
+msgid "--drop"
+msgstr "--create"
+
+#: index.docbook:290
+msgid "only drop the tables"
+msgstr "ãã¼ãã«ã®çæã®ã¿ãè¡ãã¾ãã"
+
+#: index.docbook:293
+msgid "--create"
+msgstr "--text"
+
+#: index.docbook:294
+msgid "only create the tables"
+msgstr "ãã¼ã¿ãã¼ã¹ã«ã¨ã¯ã¹ãã¼ããã¾ãã"
+
+#: index.docbook:297, index.docbook:439
+msgid "--text"
+msgstr "--output=my_schema.ddl"
+
+#: index.docbook:298
+msgid "don't export to the database"
+msgstr "DDLã¹ã¯ãªããããã¡ã¤ã«ã«åºåãã¾ã"
+
+#: index.docbook:301
+msgid "--output=my_schema.ddl"
+msgstr "--naming=eg.MyNamingStrategy"
+
+#: index.docbook:302
+msgid "output the ddl script to a file"
+msgstr "<literal>NamingStrategy</literal> ãé¸æãã¾ã"
+
+#: index.docbook:305, index.docbook:443, index.docbook:504
+msgid "--naming=eg.MyNamingStrategy"
+msgstr "--config=hibernate.cfg.xml"
+
+#: index.docbook:306, index.docbook:444, index.docbook:505
+msgid "select a <literal>NamingStrategy</literal>"
+msgstr "XMLãã¡ã¤ã«ããHibernateã®å®ç¾©æ
å ±ãèªã¿è¾¼ã¿ã¾ã"
+
+#: index.docbook:309, index.docbook:451, index.docbook:512
+msgid "--config=hibernate.cfg.xml"
+msgstr "--properties=hibernate.properties"
+
+#: index.docbook:310
+msgid "read Hibernate configuration from an XML file"
+msgstr "ãã¡ã¤ã«ãããã¼ã¿ãã¼ã¹ããããã£ãèªã¿è¾¼ã¿ã¾ã"
+
+#: index.docbook:313, index.docbook:447, index.docbook:508
+msgid "--properties=hibernate.properties"
+msgstr "--format"
+
+#: index.docbook:314, index.docbook:448, index.docbook:509
+msgid "read database properties from a file"
+msgstr "ã¹ã¯ãªããå
ã«çæããSQLãèªã¿ãããããã«ãã©ã¼ããããã¾ã"
+
+#: index.docbook:317
+msgid "--format"
+msgstr "--delimiter=x"
+
+#: index.docbook:318
+msgid "format the generated SQL nicely in the script"
+msgstr "ã¹ã¯ãªããã®è¡åºåãæåãè¨å®ãã¾ã"
+
+#: index.docbook:321
+msgid "--delimiter=;"
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ã« <literal>SchemaExport</literal> ãçµã¿è¾¼ããã¨ãã§ãã¾ãï¼"
+
+#: index.docbook:322
+msgid "set an end of line delimiter for the script"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;
+\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+
+#: index.docbook:328
+msgid "You may even embed <literal>SchemaExport</literal> in your application:"
+msgstr "ããããã£"
+
+#: index.docbook:332
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+msgstr "次ã®ããã«ããã¼ã¿ãã¼ã¹ã®ããããã£ãæå®ãããã¨ãã§ãã¾ãã"
+
+#: index.docbook:337
+msgid "Properties"
+msgstr "<literal>-D</literal> <emphasis><property></emphasis> ã使ã£ã¦ãã·ã¹ãã ããããã£ã¨ãã¦"
+
+#: index.docbook:339
+msgid "Database properties may be specified"
+msgstr "<literal>hibernate.properties</literal> ãã¡ã¤ã«å
ã§"
+
+#: index.docbook:345
+msgid "as system properties with <literal>-D</literal><emphasis><property></emphasis>"
+msgstr "<literal>--properties</literal> ã使ã£ã¦æå®ããããããã£ãã¡ã¤ã«å
ã§"
+
+#: index.docbook:348
+msgid "in <literal>hibernate.properties</literal>"
+msgstr "å¿
è¦ãªããããã£ã¯ä»¥ä¸ã®ãã®ã§ãï¼"
+
+#: index.docbook:351
+msgid "in a named properties file with <literal>--properties</literal>"
+msgstr "SchemaExportã³ãã¯ã·ã§ã³ããããã£"
+
+#: index.docbook:355
+msgid "The needed properties are:"
+msgstr "ããããã£å"
+
+#: index.docbook:360
+msgid "SchemaExport Connection Properties"
+msgstr "<entry>説æ</entry>"
+
+#: index.docbook:366
+msgid "Property Name"
+msgstr "hibernate.connection.driver_class"
+
+#: index.docbook:372
+msgid "hibernate.connection.driver_class"
+msgstr "hibernate.connection.url"
+
+#: index.docbook:373
+msgid "jdbc driver class"
+msgstr "jdbcã®url"
+
+#: index.docbook:376
+msgid "hibernate.connection.url"
+msgstr "hibernate.connection.username"
+
+#: index.docbook:377
+msgid "jdbc url"
+msgstr "ãã¼ã¿ãã¼ã¹ã®ã¦ã¼ã¶"
+
+#: index.docbook:380
+msgid "hibernate.connection.username"
+msgstr "hibernate.connection.password"
+
+#: index.docbook:381
+msgid "database user"
+msgstr "ã¦ã¼ã¶ãã¹ã¯ã¼ã"
+
+#: index.docbook:384
+msgid "hibernate.connection.password"
+msgstr "hibernate.dialect"
+
+#: index.docbook:385
+msgid "user password"
+msgstr "ãã¼ã¿ãã¼ã¹æ¹è¨"
+
+#: index.docbook:388
+msgid "hibernate.dialect"
+msgstr "Antã使ç¨ãã"
+
+#: index.docbook:389
+msgid "dialect"
+msgstr "Antã®ãã«ãã¹ã¯ãªãããã <literal>SchemaExport</literal> ãå¼ã³åºããã¨ãã§ãã¾ãã:"
+
+#: index.docbook:398
+msgid "Using Ant"
+msgstr ""
+ "<![CDATA[<target name=\"schemaexport\">
+\n"
+ " <taskdef name=\"schemaexport\"
+\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"
+\n"
+ " classpathref=\"class.path\"/>
+\n"
+ "
+\n"
+ " <schemaexport
+\n"
+ " properties=\"hibernate.properties\"
+\n"
+ " quiet=\"no\"
+\n"
+ " text=\"no\"
+\n"
+ " drop=\"no\"
+\n"
+ " delimiter=\";\"
+\n"
+ " output=\"schema-export.sql\">
+\n"
+ " <fileset dir=\"src\">
+\n"
+ " <include name=\"**/*.hbm.xml\"/>
+\n"
+ " </fileset>
+\n"
+ " </schemaexport>
+\n"
+ "</target>]]>"
+
+#: index.docbook:400
+msgid "You can call <literal>SchemaExport</literal> from your Ant build script:"
+msgstr "ã¤ã³ã¯ãªã¡ã³ã¿ã«ãªã¹ãã¼ãæ´æ°"
+
+#: index.docbook:404
+msgid ""
+ "<![CDATA[<target name=\"schemaexport\">\n"
+ " <taskdef name=\"schemaexport\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaexport\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\"\n"
+ " text=\"no\"\n"
+ " drop=\"no\"\n"
+ " delimiter=\";\"\n"
+ " output=\"schema-export.sql\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaexport>\n"
+ "</target>]]>"
+msgstr "<literal>SchemaUpdate</literal> ãã¼ã«ã¯æ¢åã®ã¹ãã¼ããã¤ã³ã¯ãªã¡ã³ã¿ã«ã«æ´æ°ãã¾ãã <literal>SchemaUpdate</literal> ã¯JDBCã®ã¡ã¿ãã¼ã¿APIã«å¼·ãä¾åãã¾ãã ãã®ããããã¹ã¦ã®JDBCãã©ã¤ãã§ãã¾ãããã¨ã¯éããªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:409
+msgid "Incremental schema updates"
+msgstr "<literal>java -cp </literal> <emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>options mapping_files</emphasis>"
+
+#: index.docbook:411
+msgid "The <literal>SchemaUpdate</literal> tool will update an existing schema with \"incremental\" changes. Note that <literal>SchemaUpdate</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers."
+msgstr "<literal>SchemaUpdate</literal> ã®ã³ãã³ãã©ã¤ã³ï½¥ãªãã·ã§ã³"
+
+#: index.docbook:417
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "ãªãã·ã§ã³"
+
+#: index.docbook:423
+msgid "<literal>SchemaUpdate</literal> Command Line Options"
+msgstr "<entry>説æ</entry>"
+
+#: index.docbook:440
+msgid "don't export the script to the database"
+msgstr "<literal>NamingStrategy</literal> ãé¸æãã¾ãã"
+
+#: index.docbook:452, index.docbook:513
+msgid "specify a <literal>.cfg.xml</literal> file"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;
+\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+
+#: index.docbook:458
+msgid "You may embed <literal>SchemaUpdate</literal> in your application:"
+msgstr "ã¤ã³ã¯ãªã¡ã³ã¿ã«ãªã¹ãã¼ãæ´æ°ã«å¯¾ããAntã®ä½¿ç¨"
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+msgstr "Antã¹ã¯ãªãããã <literal>SchemaUpdate</literal> ãå¼ã³åºããã¨ãã§ãã¾ãï¼"
+
+#: index.docbook:467
+msgid "Using Ant for incremental schema updates"
+msgstr ""
+ "<![CDATA[<target name=\"schemaupdate\">
+\n"
+ " <taskdef name=\"schemaupdate\"
+\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"
+\n"
+ " classpathref=\"class.path\"/>
+\n"
+ "
+\n"
+ " <schemaupdate
+\n"
+ " properties=\"hibernate.properties\"
+\n"
+ " quiet=\"no\">
+\n"
+ " <fileset dir=\"src\">
+\n"
+ " <include name=\"**/*.hbm.xml\"/>
+\n"
+ " </fileset>
+\n"
+ " </schemaupdate>
+\n"
+ "</target>]]>"
+
+#: index.docbook:469
+msgid "You can call <literal>SchemaUpdate</literal> from the Ant script:"
+msgstr "Schema validation"
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[<target name=\"schemaupdate\">\n"
+ " <taskdef name=\"schemaupdate\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaupdate\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaupdate>\n"
+ "</target>]]>"
+msgstr "<literal>SchemaValidator</literal> ãã¼ã«ã¯ãæ¢åã®ãã¼ã¿ãã¼ã¹ã¹ãã¼ãã¨ä½æãããããã³ã°ããã¥ã¡ã³ãã\"ä¸è´ãã\"ãã¨ãæ¤è¨¼ãã¾ãã <literal>SchemaValidator</literal> ã¯JDBCã®ã¡ã¿ãã¼ã¿APIã«å¼·ãä¾åãããã¨ã«æ³¨æãã¦ãã ããããã®ããããã¹ã¦ã®JDBCãã©ã¤ãã¼ã§ä½åãããã®ã§ã¯ããã¾ããããã®ãã¼ã«ã¯ãã¹ãæã«é常ã«æç¨ã§ãã"
+
+#: index.docbook:478
+msgid "Schema validation"
+msgstr "<literal>java -cp </literal> <emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaValidator</literal> <emphasis>options mapping_files</emphasis>"
+
+#: index.docbook:480
+msgid "The <literal>SchemaValidator</literal> tool will validate that the existing database schema \"matches\" your mapping documents. Note that <literal>SchemaValidator</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers. This tool is extremely useful for testing."
+msgstr "<literal>SchemaValidator</literal> ã®ã³ãã³ãã©ã¤ã³ã»ãªãã·ã§ã³"
+
+#: index.docbook:486
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaValidator</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "ãªãã·ã§ã³"
+
+#: index.docbook:492
+msgid "<literal>SchemaValidator</literal> Command Line Options"
+msgstr "<entry>説æ</entry>"
+
+#: index.docbook:519
+msgid "You may embed <literal>SchemaValidator</literal> in your application:"
+msgstr "ã¹ãã¼ãã®ããªãã¼ã·ã§ã³ã«Antã使ç¨ãã¾ã"
+
+#: index.docbook:523
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaValidator(cfg).validate();]]>"
+msgstr "Antã¹ã¯ãªãããã <literal>SchemaValidator</literal> ãå¼ã³åºãã¾ã:"
+
+#: index.docbook:528
+msgid "Using Ant for schema validation"
+msgstr ""
+ "<![CDATA[<target name=\"schemavalidate\">
+\n"
+ " <taskdef name=\"schemavalidator\"
+\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaValidatorTask\"
+\n"
+ " classpathref=\"class.path\"/>
+\n"
+ "
+\n"
+ " <schemavalidator
+\n"
+ " properties=\"hibernate.properties\">
+\n"
+ " <fileset dir=\"src\">
+\n"
+ " <include name=\"**/*.hbm.xml\"/>
+\n"
+ " </fileset>
+\n"
+ " </schemavalidator>
+\n"
+ "</target>]]>"
+
+#: index.docbook:530
+msgid "You can call <literal>SchemaValidator</literal> from the Ant script:"
+msgstr ""
+
+#: index.docbook:534
+msgid ""
+ "<![CDATA[<target name=\"schemavalidate\">\n"
+ " <taskdef name=\"schemavalidator\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaValidatorTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemavalidator\n"
+ " properties=\"hibernate.properties\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemavalidator>\n"
+ "</target>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/transactions.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/transactions.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/transactions.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,794 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Transactions And Concurrency"
+msgstr "ãã©ã³ã¶ã¯ã·ã§ã³ã¨ä¸¦è¡æ§"
+
+#: index.docbook:7
+msgid "The most important point about Hibernate and concurrency control is that it is very easy to understand. Hibernate directly uses JDBC connections and JTA resources without adding any additional locking behavior. We highly recommend you spend some time with the JDBC, ANSI, and transaction isolation specification of your database management system."
+msgstr "Hibernateã¨åæå®è¡å¶å¾¡ã«ã¤ãã¦æãéè¦ãªç¹ã¯ã容æã«ç解ã§ãããã¨ã§ãã Hibernateã¯æ°ããªããã¯ã®æ¯ãèãã追å ãã¦ããããç´æ¥JDBCã³ãã¯ã·ã§ã³ã¨JTAãªã½ã¼ã¹ã使ç¨ãã¾ãã JDBCãANSIãããã³ãã¼ã¿ãã¼ã¹ç®¡çã·ã¹ãã ï¼DBMSï¼ã®ãã©ã³ã¶ã¯ã·ã§ã³åé¢ã®ä»æ§ã å°ãæéãããã¦åå¼·ãããã¨ãå¼·ãæ¨å¥¨ãã¾ãã"
+
+#: index.docbook:14
+msgid "Hibernate does not lock objects in memory. Your application can expect the behavior as defined by the isolation level of your database transactions. Note that thanks to the <literal>Session</literal>, which is also a transaction-scoped cache, Hibernate provides repeatable reads for lookup by identifier and entity queries (not reporting queries that return scalar values)."
+msgstr "Hibernateã¯ã¡ã¢ãªå
ã®ãªãã¸ã§ã¯ããããã¯ãã¾ããã ã¢ããªã±ã¼ã·ã§ã³ã¯ããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®åé¢ã¬ãã«ã§ å®ç¾©ããæ¯ãèããæå¾
ã§ãã¾ãã ãã©ã³ã¶ã¯ã·ã§ã³ã¹ã³ã¼ãã®ãã£ãã·ã¥ã§ããã <literal>Session</literal> ã®ãé°ã§ã èå¥åãã¯ã¨ãªã«ããæ¤ç´¢ããã¨ã³ãã£ãã£ã¯ãªãã¼ã¿ãã«ãªã¼ãã«ãªãã¾ã ï¼ã¹ã«ã©ã¼å¤ãè¿ããããªã¬ãã¼ãã¯ã¨ãªã¯éãã¾ãï¼ã"
+
+#: index.docbook:22
+msgid "In addition to versioning for automatic optimistic concurrency control, Hibernate also offers a (minor) API for pessimistic locking of rows, using the <literal>SELECT FOR UPDATE</literal> syntax. Optimistic concurrency control and this API are discussed later in this chapter."
+msgstr "ãã¼ã¸ã§ãã³ã°ã«ããèªåçãªæ¥½è¦³çåæå®è¡å¶å¾¡ã«å ãã¦ã <literal>SELECT FOR UPDATE</literal> æã使ç¨ãã¦ã è¡ãæ²è¦³çããã¯ããããã®ï¼ãã¤ãã¼ãªï¼APIãæä¾ãã¾ãã 楽観çåæå®è¡å¶å¾¡ã¨ãã®APIã«ã¤ãã¦ã¯ããã®ç« ã®å¾ã®ã»ãã§è°è«ãã¾ãã"
+
+#: index.docbook:29
+msgid "We start the discussion of concurrency control in Hibernate with the granularity of <literal>Configuration</literal>, <literal>SessionFactory</literal>, and <literal>Session</literal>, as well as database transactions and long conversations."
+msgstr "ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãé·ã対話ï¼conversationããã³ã°ãã©ã³ã¶ã¯ã·ã§ã³ï¼ã ãã§ãªãã <literal>Configuration</literal>ã<literal>SessionFactory</literal>ãããã³ <literal>Session</literal> ã¨ããç²åº¦ã§Hibernateãè¡ãåæå®è¡å¶å¾¡ã®è°è«ãå§ãã¾ãã"
+
+#: index.docbook:36
+msgid "Session and transaction scopes"
+msgstr "sessionã¹ã³ã¼ãã¨transactionã¹ã³ã¼ã"
+
+#: index.docbook:38
+msgid "A <literal>SessionFactory</literal> 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</literal> instance."
+msgstr "<literal>SessionFactory</literal> ã¯çæãããã¨ãé«ä¾¡ã§ã ã¹ã¬ããã»ã¼ããªãªãã¸ã§ã¯ãã§ãã ãã£ã¦ãã¢ããªã±ã¼ã·ã§ã³ã®ãã¹ã¦ã®ã¹ã¬ããã§å
±æãã¹ãã§ãã é常ãã¢ããªã±ã¼ã·ã§ã³ã®èµ·åæã«ã <literal>Configuration</literal> ã¤ã³ã¹ã¿ã³ã¹ããï¼åº¦ã ãçæãã¾ãã"
+
+#: index.docbook:44
+msgid "A <literal>Session</literal> is an inexpensive, non-threadsafe object that should be used once, for a single request, a conversation, single unit of work, and then discarded. A <literal>Session</literal> will not obtain a JDBC <literal>Connection</literal> (or a <literal>Datasource</literal>) unless it is needed, hence consume no resources until used."
+msgstr "<literal>Session</literal> ã¯é«ä¾¡ã§ã¯ãªããã¹ã¬ããã»ã¼ããªãªãã¸ã§ã¯ãã§ãããã¾ããã ãã£ã¦ãï¼ã¤ã®è¦æ±ãï¼ã¤ã®å¯¾è©±ãï¼ã¤ã®ä½æ¥åä½ï¼unit of workï¼ã«å¯¾ãã¦ï¼åº¦ã ã使ãã ãã®å¾ã§æ¨ã¦ãã¹ãã§ãã <literal>Session</literal> ã¯å¿
è¦ã«ãªãã¾ã§ã JDBC <literal>Connection</literal>ï¼ããã㯠<literal>DataSource</literal>ï¼ãç²å¾ãã¾ããã ããã«ãå®éã«ä½¿ç¨ããã¨ãã¾ã§ãªã½ã¼ã¹ãæ¶è²»ãã¾ããã"
+
+#: index.docbook:52
+msgid "To complete this picture you also have to think about database transactions. A database transaction has to be as short as possible, to reduce lock contention in the database. Long database transactions will prevent your application from scaling to highly concurrent load. Hence, it is almost never good design to hold a database transaction open during user think time, until the unit of work is complete."
+msgstr "ãã®ç¶æ³ãå®äºãããããã«ã ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã«ã¤ãã¦ãèããªããã°ãªãã¾ããã ãã¼ã¿ãã¼ã¹å
ã®ããã¯ã®ç«¶åãå°ãªãããããã«ã ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯å¯è½ãªéãçãããã¹ãã§ãã é·ããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãã¢ããªã±ã¼ã·ã§ã³ã®é«ã並åå®è¡æ§ãé»å®³ãã¾ãã ããã«ãã¦ã¼ã¶ã¼ãèãã¦ããéï¼ä½æ¥åä½ãå®äºããã¾ã§ï¼ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã éããã¾ã¾ã«ããã®ã¯ãããã¦ãã®å ´åããè¨è¨ã¨ã¯ããã¾ããã"
+
+#: index.docbook:61
+msgid "What is the scope of a unit of work? Can a single Hibernate <literal>Session</literal> span several database transactions or is this a one-to-one relationship of scopes? When should you open and close a <literal>Session</literal> and how do you demarcate the database transaction boundaries?"
+msgstr "ä½æ¥åä½ã¨ããã¹ã³ã¼ãã¨ã¯ä½ã§ããããï¼ ï¼ã¤ã®Hibernate <literal>Session</literal> ã¯ã ããã¤ãã®ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãã¾ããããã¨ãã§ããã§ããããï¼ ã¾ãã¯ãã¹ã³ã¼ãã¨ä¸å¯¾ä¸ã®é¢ä¿ã§ããããï¼ ã㤠<literal>Session</literal> ãéããéããã¹ãã§ããããï¼ ããã¦ããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³å¢çãã©ã®ããã«åããã®ã§ããããï¼"
+
+#: index.docbook:69
+msgid "Unit of work"
+msgstr "ä½æ¥åä½ï¼Unit of workï¼"
+
+#: index.docbook:71
+msgid "First, don't use the <emphasis>session-per-operation</emphasis> antipattern, that is, don't open and close a <literal>Session</literal> for every simple database call in a single thread! Of course, 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. (Note that this also means that auto-commit after every single SQL statement is useless in an application, this mode is intended for ad-hoc SQL console work. Hibernate disables, or expects the application server to do so, auto-commit mode immediately.) Database transactions are never optional, all communication with a database has to occur inside a transaction, no matter if you read or write data. As explained, 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 much more maintainable and extensible."
+msgstr "ï¼ã¤ç®ã¯ã<emphasis>session-per-operation</emphasis> ã¢ã³ããã¿ã¼ã³ã使ã£ã¦ã¯ããã¾ããã ããªãã¡ãï¼ã¤ã®ã¹ã¬ããã®ä¸ã§ãåç´ãªãã¼ã¿ãã¼ã¹å¼ã³åºãã®ãã³ã« <literal>Session</literal> ãéãã¦ãéãã¦ã¯ããã¾ããï¼ ãã¡ããããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã«ã¤ãã¦ãåæ§ã§ãã ã¢ããªã±ã¼ã·ã§ã³ä¸ã®ãã¼ã¿ãã¼ã¹å¼ã³åºãã¯ã è¨ç»ãããã·ã¼ã±ã³ã¹ï¼planned sequenceï¼ã使ãã ã¢ãããã¯ãªä½æ¥åä½ã«åé¡ããã¾ãã ï¼ï¼ã¤ã®SQLæãã¨ã«ã³ãããããèªåã³ããããã 使ãããªãã¨ããæå³ã§ããããã¨ã«æ³¨æãã¦ãã ããã èªåã³ãããã¯ãSQLã³ã³ã½ã¼ã«ã§ã¢ãããã¯ãªä½æ¥ãããéã«ä½¿ããã®ã§ãã Hibernateã¯ç´ã¡ã«èªåã³ãããã¢ã¼ããç¡å¹ã«ãã¾ãã ãããã¯ãã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¼ãç¡å¹åãããã¨ãæå¾
ãã¾ã!
ãï¼ ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯ãªãã·ã§ã³ã§ã¯ããã¾ããã ãã¼ã¿ãã¼ã¹ã¨ã®ãã¹ã¦ã®éä¿¡ã¯ããã¼ã¿ã®èªã¿è¾¼ã¿ã§ãã£ã¦ããæ¸ãè¾¼ã¿ã§ãã£ã¦ãã ãã©ã³ã¶ã¯ã·ã§ã³ã®ä¸ã§è¡ããªããã°ãªãã¾ããã 説æããã¨ããã¼ã¿èªã¿è¾¼ã¿ã«å¯¾ãã¦ãèªåã³ãããã¯é¿ããã¹ãã§ãã ãªããªããå¤æ°ã®å°ããªãã©ã³ã¶ã¯ã·ã§ã³ã¯ãæ確ã«å®ç¾©ãããï¼ã¤ã®ä½æ¥åä½ã¨æ¯ã¹ã¦ã ããã©ã¼ãã³ã¹ããããªããã¨ã¯ããã¾ããã å¾è
ã¯ä¿å®æ§ãæ¡å¼µæ§ããããããã¦ãã¾ãã"
+
+#: index.docbook:87
+msgid "The most common pattern in a multi-user client/server application is <emphasis>session-per-request</emphasis>. In this model, a request from the client is send to the server (where the Hibernate persistence layer runs), a new Hibernate <literal>Session</literal> is opened, and all database operations are executed in this unit of work. Once the work has been completed (and the response for the client has been prepared), the session is flushed and closed. You would also use a single database transaction to serve the clients request, starting and committing it when you open and close the <literal>Session</literal>. The relationship between the two is one-to-one and this model is a perfect fit for many applications."
+msgstr "ãã«ãã¦ã¼ã¶ã¼ã®ã¯ã©ã¤ã¢ã³ãï¼ãµã¼ãã¼ã¢ããªã±ã¼ã·ã§ã³ã®ä¸ã§ã æããã使ããããã¿ã¼ã³ã¯ã<emphasis>session-per-request</emphasis> ã§ãã ãã®ã¢ãã«ã®ä¸ã§ã¯ã ã¯ã©ã¤ã¢ã³ãããï¼Hibernateæ°¸ç¶å層ãåä½ããï¼ãµã¼ãã¼ã¸ãªã¯ã¨ã¹ããéããã æ°ããHibernate <literal>Session</literal> ãéããã¾ãã ããã¦ããã®ä½æ¥åä½ã®ä¸ã§ãã¹ã¦ã®ãã¼ã¿ãã¼ã¹å¦çãå®è¡ããã¾ãã ä½æ¥ãå®äºããï¼ããã¦ãã¯ã©ã¤ã¢ã³ãã¸ã®ã¬ã¹ãã³ã¹ãæºåã§ããï¼æç¹ã§ã session ããã©ãã·ã¥ããéãã¾ãã ã¯ã©ã¤ã¢ã³ãã®è¦æ±ãå¦çããããã«ãï¼ã¤ã®ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã使ç¨ããã§ãããã <literal>Session</literal> ãéããéããéã«ã ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããã³ããããã¾ãã äºã¤ã®é¢ä¿ã¯ä¸å¯¾ä¸ã§ãã ãã®ã¢ã!
ã«ã¯å¤ãã®ã¢ããªã±ã¼ã·ã§ã³ã«å®å
¨ã«é©åãã¾ãã"
+
+#: index.docbook:99
+msgid "The challenge lies in the implementation. Hibernate provides built-in management of the \"current session\" to simplify this pattern. All you have to do is start a transaction when a server request has to be processed, and end the transaction before the response is send to the client. You can do this in any way you like, common solutions are <literal>ServletFilter</literal>, 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 decide to use programmatic transaction demarcation, prefer the Hibernate <literal>Transaction</literal> API shown later in this chapter, for ease of use and code portability."
+msgstr "以éã®å®è£
ã«ãã£ã¬ã³ã¸ãã¦ãã ããã <literal>Session</literal> ãæã¡ããã©ã³ã¶ã¯ã·ã§ã³ãæ£ç¢ºã«éå§ããçµããããã ãã§ãªãã ãã¼ã¿ã¢ã¯ã»ã¹æä½ãå¾ãããããå¿
è¦ãããã¾ãã ãªã¯ã¨ã¹ãããµã¼ãã¼ã«ãããããéã¨ãã¬ã¹ãã³ã¹ãéä¿¡ããåã«ãå®è¡ãããinterceptor ï¼ä¾ãã°ã<literal>ServletFilter</literal>ï¼ã使ã£ã¦ãä½æ¥åä½ã®å¢çãå®è£
ããã®ãçæ³çã§ãã <literal>ThreadLocal</literal> å¤æ°ã使ã£ã¦ã ãªã¯ã¨ã¹ããå¦çããã¹ã¬ããã« <literal>Session</literal> ãçµã³ã¤ãããã¨ãæ¨å¥¨ãã¾ãã ããã«ãããã¹ã¬ããå
ã§å®è¡ããããã¹ã¦ã®ã³ã¼ãã§ã ï¼staticå¤æ°ã«ã¢ã¯ã»ã¹ããããã«ï¼ç°¡åã« <literal>Session</literal> ã«ã¢ã¯ã»ã¹ã§ããããã«ãªãã¾ãã é¸æãããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³å¢çã®æ©æ§æ¬¡ç¬¬ã§ã<literal>ThreadL!
ocal</literal> å¤æ°ã®ä¸ã«ãã©ã³ã¶ã¯ã·ã§ã³ã³ã³ããã¹ããä¿æããããããã¾ããã ãã®å®è£
ãã¿ã¼ã³ã¯ã<emphasis>ThreadLocal Session</emphasis> ããã³ <emphasis>Open Session in View</emphasis> ã¨ããååã§ç¥ããã¦ãã¾ãã æ¬ããã¥ã¡ã³ãã§å
ã«è¦ãã <literal>HibernateUtil</literal> ãã«ãã¼ã¯ã©ã¹ãæ¡å¼µãããã¨ã§ã ãã®ãã¿ã¼ã³ã容æã«å®è£
ã§ãã¾ãã ãã¡ãããinterceptor ãå®è£
ããæ¹æ³ãè¦ã¤ããç°å¢ãã»ããã¢ããããå¿
è¦ãããã¾ãã Hibernateã®Webãµã¤ãã«ããtipsã¨ä¾ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:112
+msgid "Your application code can access a \"current session\" to process the request by simply calling <literal>sessionFactory.getCurrentSession()</literal> anywhere and as often as needed. You will always get a <literal>Session</literal> 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 "以éã®å®è£
ã«ãã£ã¬ã³ã¸ãã¦ãã ããã Hibernateã¯åç´ãªãã®ãã¿ã¼ã³ã®ããã«ãäºãçµã¿è¾¼ã¾ãã ãcurrent sessionãã®ç®¡çãæä¾ãã¾ãã ãµã¼ãã¼ãªã¯ã¨ã¹ããå¦çããéã¯ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããªããã°ãªãã¾ããã ããã¦ãã¬ã¹ãã³ã¹ãã¯ã©ã¤ã¢ã³ãã«éä¿¡ããåã«ãã©ã³ã¶ã¯ã·ã§ã³ãçµãããã¾ãã 好ããªæ¹æ³ã§å®ç¾ã§ãã¾ããä¸è¬çãªè§£æ±ºç㯠<literal>ServletFilter</literal> ã ãµã¼ãã¹ã¡ã½ããããã¤ã³ãã«ãããã¦AOPã¤ã³ã¿ã¼ã»ãã¿ã¼ã proxy/interception ã³ã³ããã§ãã EJBã³ã³ããã¯EJBã»ãã·ã§ã³ãã¼ã³ããã©ã³ã¶ã¯ã·ã§ã³å¢çã¨ã㦠ã¢ã¹ãã¯ããã¯ãã¹ã«ããããå®è£
ã®æ¨æºçãªæ¹æ³ã§ãï¼CMTã«ãã宣è¨çï¼ã ããã°ã©ã ã«ãããã©ã³ã¶ã¯ã·ã§ã³å¢çã使ãã¨æ±ºããå ´åã ç°¡åã«ä½¿ããããäºææ§ã®ããã³ã¼ãã«ã!
ãããã«ã ãã®ç« ã®å¾ã®ã»ãã«ããHibernate <literal>Transaction</literal> APIã®ã»ããããã§ãã"
+
+#: index.docbook:120
+msgid "Sometimes it is convenient to extend the scope of a <literal>Session</literal> 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 complete is easy to do if you implement your own interceptor. However, it is not easily doable if you rely on EJBs with container-managed transactions, as 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 around this <emphasis>Open Session in View</emphasis> pattern."
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ã®ã³ã¼ãã¯ãå¿
è¦ãªã¨ãã«ã©ãã§ããä½åã§ãã åã« <literal>sessionFactory.getCurrentSession()</literal> ãå¼ã³åºãã ã㧠ãç¾å¨ã®ã»ãã·ã§ã³ãã«ã¢ã¯ã»ã¹ã§ãã¾ãã ç¾å¨ã®ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¸ã® <literal>ã»ãã·ã§ã³</literal> ã常ã«åå¾ãã¾ãã ãªã½ã¼ã¹ã»ãã¼ã«ã«ãªç°å¢ããããã¯JTAç°å¢ãæ§æããªããã°ãªãã¾ãã ï¼<xref linkend=\"architecture-current-session\"/> ãåç
§ãã¦ãã ããï¼ã"
+
+#: index.docbook:135
+msgid "Long conversations"
+msgstr "ã¨ãã©ããããã¥ã¼ãæç»ãããã¾ã§ <literal>ã»ãã·ã§ã³</literal> ã¨ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¹ã³ã¼ããæ¡å¼µããã¨ä¾¿å©ãªãã¨ãããã¾ãã ããã¯ãè¦æ±ã®å¦çã¨æç»ã®ãã§ã¼ãºãåãã¦ãã ãµã¼ãã¬ããã¢ããªã±ã¼ã·ã§ã³ã«ããã¦ç¹ã«å½¹ç«ã¡ã¾ãã ç¬èªã®ã¤ã³ã¿ã¼ã»ãã¿ãå®è£
ããã°ã ãã¥ã¼ãæç»ããã¾ã§ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãæ¡å¼µããã®ã¯ç°¡åã§ãã ããããã³ã³ãã管çãã©ã³ã¶ã¯ã·ã§ã³ã®EJBã«é ¼ãå ´åã¯ãç°¡åã«ã¯ã§ãã¾ããã ãªããªãããã¥ã¼ã®æç»ãéå§ããåã«ãEJBã®ã¡ã½ããããªã¿ã¼ã³ããéã«ã ãã©ã³ã¶ã¯ã·ã§ã³ãå®äºããããã§ãã ãã® <emphasis>Open Session in View</emphasis> ãã¿ã¼ã³ã«é¢é£ãããã³ãã¨ä¾ã«ã¤ãã¦ã¯ã Hibernateã®Webãµã¤ãããã©ã¼ã©ã ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:137
+msgid "The session-per-request pattern is not the only useful concept you can use to design units of work. Many business processes require a whole series of interactions with the user interleaved with database accesses. In web and enterprise applications it is not acceptable for a database transaction to span a user interaction. Consider the following example:"
+msgstr "é·ã対話"
+
+#: index.docbook:147
+msgid "The first screen of a dialog opens, the data seen by the user has been loaded in a particular <literal>Session</literal> and database transaction. The user is free to modify the objects."
+msgstr "session-per-requestãã¿ã¼ã³ã¯ãä½æ¥åä½ãè¨è¨ããéã«å½¹ç«ã¤èãã¨ããã ãã§ã¯ããã¾ããã å¤ãã®ãã¸ãã¹ããã»ã¹ã¯ãã¦ã¼ã¶ã¼ã¨ã®ä¸é£ã®ç¸äºä½ç¨å
¨ä½ãè¦æ±ãã¾ãã ãã®ç¸äºä½ç¨ã«ã¯ããã¼ã¿ãã¼ã¹ã¢ã¯ã»ã¹ãå«ã¾ãã¾ãã Webã¨ã¨ã³ã¿ã¼ãã©ã¤ãºã¢ããªã±ã¼ã·ã§ã³ã§ã¯ããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã ã¦ã¼ã¶ã¨ã®ç¸äºä½ç¨ã«ã¾ã§æ¸¡ããã¨ã¯è¨±ããã¾ããã 次ã®ä¾ãããèãã¦ã¿ã¦ãã ããã"
+
+#: index.docbook:154
+msgid "The user clicks \"Save\" after 5 minutes and expects his modifications to be made persistent; he also expects that he was the only person editing this information and that no conflicting modification can occur."
+msgstr "ãã¤ã¢ãã°ã®æåã®ç»é¢ãéããåã
ã® <literal>Session</literal> ã¨ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ä¸ã§ãã¼ãããããã¼ã¿ãã¦ã¼ã¶ã¼ã«è¦ãã¾ãã ã¦ã¼ã¶ã¼ã¯ãªãã¸ã§ã¯ããèªç±ã«ä¿®æ£ã§ãã¾ãã"
+
+#: index.docbook:162
+msgid "We call this unit of work, from the point of view of the user, a long running <emphasis>conversation</emphasis> (or <emphasis>application transaction</emphasis>). There are many ways how you can implement this in your application."
+msgstr "5åå¾ã«ã¦ã¼ã¶ã¼ã¯ãSaveããã¯ãªãã¯ããä¿®æ£ãæ°¸ç¶åãããã®ãæå¾
ãã¾ãã ã¾ãããã®æ
å ±ãç·¨éããã®ã¯èªåï¼äººã ãã§ã ä¿®æ£ã®ã³ã³ããªã¯ãã¯çºçããªãã¨æå¾
ãã¾ãã"
+
+#: index.docbook:168
+msgid "A first naive implementation might keep the <literal>Session</literal> 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 of course an anti-pattern, since lock contention would not allow the application to scale with the number of concurrent users."
+msgstr "ãã®ä½æ¥åä½ãï¼ã¦ã¼ã¶ã¼ã®è¦ç¹ã§ï¼é·æã® <emphasis>対話</emphasis> ï¼ãããã¯ã<emphasis>ã¢ããªã±ã¼ã·ã§ã³ãã©ã³ã¶ã¯ã·ã§ã³</emphasis> ï¼ã¨å¼ã³ã¾ãã ã¢ããªã±ã¼ã·ã§ã³ã«ãããå®è£
ããæ¹æ³ã¯ããããããã¾ãã"
+
+#: index.docbook:176
+msgid "Clearly, we have to use several database transactions to implement the converastion. 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 (e.g. in a wizard-style dialog spanning several request/response cycles). This is easier to implement than it might sound, especially if you use Hibernate's features:"
+msgstr "æåã«æãã¤ãå®è£
ã¯ãã¦ã¼ã¶ã¼ãèãã¦ããéã<literal>Session</literal> ã¨ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãéããã¾ã¾ã«ãã¦ãããã¨ã§ãã åæã«ä¿®æ£ããããåé¢ã¨ååæ§ãä¿è¨¼ãããããã«ã ãã¼ã¿ãã¼ã¹å
ã®ããã¯ã¯ä¿æããã¾ã¾ã«ãã¾ãã ãã¡ãããããã¯ã¢ã³ããã¿ã¼ã³ã§ãã ãªããªããããã¯ã®ç«¶åãçºçããã¨ã ã¢ããªã±ã¼ã·ã§ã³ãåæã¦ã¼ã¶ã¼æ°ã«å¿ãã¦ã¹ã±ã¼ã«ã¢ããã§ããªããªãããã§ãã"
+
+#: index.docbook:189
+msgid "<emphasis>Automatic Versioning</emphasis> - Hibernate can do automatic optimistic concurrency control for you, it can automatically detect if a concurrent modification occured during user think time. Usually we only check at the end of the conversation."
+msgstr "æããã«ã対話ãå®è£
ããããã«ã¯ã ããã¤ãã®ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã使ç¨ããã¹ãã§ãã ãã®å ´åããã¸ãã¹ããã»ã¹ã®åé¢ãç¶æãããã¨ã¯ã ã¢ããªã±ã¼ã·ã§ã³å±¤ã®è²¬åã®ï¼ã¤ã«ãªãã¾ãã ï¼ã¤ã®å¯¾è©±ã¯ã é常ããã¤ãã®ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã«åã³ã¾ãã ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ï¼ã¤ã®ã¿ï¼æå¾ã®ï¼ã¤ï¼ãæ´æ°ãããã¼ã¿ãä¿åãã ä»ã¯ãã¼ã¿ãèªãã ãã§ããã°ãããã¯ã¢ãããã¯ã§ã ï¼ä¾ãã°ãããã¤ãã®è¦æ±ï¼å¿çãç¹°ãè¿ãã¦ã£ã¶ã¼ãå½¢å¼ã®ãã¤ã¢ãã°ï¼ã ããã¯èããããå®è£
ããã»ããç°¡åã§ãã Hibernateã®æ©è½ã使ãã®ã§ããã°ãç¹ã«ç°¡åã§ãã"
+
+#: index.docbook:197
+msgid "<emphasis>Detached Objects</emphasis> - If you decide to use the already discussed <emphasis>session-per-request</emphasis> pattern, all loaded instances will be in 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</emphasis>. Automatic versioning is used to isolate concurrent modifications."
+msgstr "<emphasis>èªåãã¼ã¸ã§ãã³ã°</emphasis> - Hibernateã¯èªåçã«æ¥½è¦³çåæå®è¡å¶å¾¡ãã§ãã¾ãã ã¦ã¼ã¶ã¼ãèãã¦ããéã«åæã«ä¿®æ£ããããå ´åãèªåçã«æ¤åºã§ãã¾ãã é常ã対話ã®çµäºæã«ãã§ãã¯ããã ãã§ãã"
+
+#: index.docbook:207
+msgid "<emphasis>Extended (or Long) Session</emphasis> - The Hibernate <literal>Session</literal> may 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</literal> is usually not allowed to be flushed automatically, but explicitely."
+msgstr "<emphasis>åé¢ï¼Detachedï¼ãªãã¸ã§ã¯ã</emphasis> - ãã§ã«è°è«ãã <emphasis>session-per-request</emphasis> ãã¿ã¼ã³ã使ãã¨æ±ºå®ããå ´åã ãã¼ãããããã¹ã¦ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ãã¦ã¼ã¶ãèãã¦ããéã¯ã ã»ãã·ã§ã³ããåé¢ãããç¶æ
ã«ãªãã¾ãã ãªãã¸ã§ã¯ããã»ãã·ã§ã³ã«å追å ããä¿®æ£ãæ°¸ç¶åã§ãã¾ãã ããã <emphasis>session-per-request-with-detached-objects</emphasis> ãã¿ã¼ã³ã¨å¼ã³ã¾ãã èªåãã¼ã¸ã§ãã³ã°ã使ããã¨ã§ãåæã«è¡ãããä¿®æ£ãåé¢ã§ãã¾ãã"
+
+#: index.docbook:220
+msgid "Both <emphasis>session-per-request-with-detached-objects</emphasis> and <emphasis>session-per-conversation</emphasis> have advantages and disadvantages, we discuss them later in this chapter in the context of optimistic concurrency control."
+msgstr "<emphasis>æ¡å¼µï¼ãããã¯ãé·ãï¼ã»ãã·ã§ã³</emphasis> - Hibernateã® <literal>Session</literal> ã¯ã ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãã³ãããããå¾ã è£ã§çµã³ã¤ãã¦ããJDBCã³ãã¯ã·ã§ã³ãåæã§ãã¾ãã ããã¦ãã¯ã©ã¤ã¢ã³ãããã®æ°ããè¦æ±ãçºçããéã«ãåæ¥ç¶ã§ãã¾ãã ãã®ãã¿ã¼ã³ã¯ã<emphasis>session-per-conversation</emphasis> ã¨ããåã§ç¥ããã¦ããããªãã¸ã§ã¯ããã»ãã·ã§ã³ã¸å追å ãããã¨ããä¸è¦ã«ãã¾ãã èªåãã¼ã¸ã§ãã³ã°ã使ããã¨ã§ãåæã«è¡ãããä¿®æ£ãåé¢ã§ãã¾ãã é常 <literal>Session</literal> ãèªåçã«ãã©ãã·ã¥ãããã æ示çã«ãã©ãã·ã¥ãã¾ãã"
+
+#: index.docbook:229
+msgid "Considering object identity"
+msgstr "<emphasis>session-per-request-with-detached-objects</emphasis> 㨠<emphasis>session-per-conversation</emphasis> ã®ï¼ã¤ã¯ã å©ç¹ã¨æ¬ ç¹ãæã£ã¦ãã¾ãã ããã«ã¤ãã¦ã¯ããã®ç« ã®å¾ã®ã»ãã§ã楽観çåæå®è¡å¶å¾¡ã®æèã®ä¸ã§è°è«ãã¾ãã"
+
+#: index.docbook:231
+msgid "An application may concurrently access the same persistent state in two different <literal>Session</literal>s. However, an instance of a persistent class is never shared between two <literal>Session</literal> instances. Hence there are two different notions of identity:"
+msgstr "ãªãã¸ã§ã¯ãèå¥åãèãã"
+
+#: index.docbook:240
+msgid "Database Identity"
+msgstr "ã¢ããªã±ã¼ã·ã§ã³ã¯ãï¼ã¤ã®ç°ãªã <literal>Session</literal> ãã åãæ°¸ç¶ç¶æ
ã«åæã«ã¢ã¯ã»ã¹ã§ãã¾ãã ããããï¼ã¤ã® <literal>Session</literal> ã¤ã³ã¹ã¿ã³ã¹ã æ°¸ç¶æ§ã¯ã©ã¹ã®ï¼ã¤ã®ã¤ã³ã¹ã¿ã³ã¹ãå
±æãããã¨ã¯ã§ãã¾ããã ããã«ãèå¥åã«ã¯ï¼ã¤ã®ç°ãªãæ¦å¿µãããã¨ãããã¨ã«ãªãã¾ãã"
+
+#: index.docbook:243
+msgid "foo.getId().equals( bar.getId() )"
+msgstr "ãã¼ã¿ãã¼ã¹èå¥å"
+
+#: index.docbook:248
+msgid "JVM Identity"
+msgstr "foo.getId().equals( bar.getId() )"
+
+#: index.docbook:251
+msgid "foo==bar"
+msgstr "JVMèå¥å"
+
+#: index.docbook:257
+msgid "Then for objects attached to a <emphasis>particular</emphasis> <literal>Session</literal> (i.e. in the scope of a <literal>Session</literal>) the two notions are equivalent, and JVM identity for database identity is guaranteed by Hibernate. However, 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 (automatic versioning) at flush/commit time, using an optimistic approach."
+msgstr "foo==bar"
+
+#: index.docbook:266
+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 only doesn't need expensive locking or other means of synchronization. The application never needs to synchronize on any business object, as long as it sticks to a single thread per <literal>Session</literal>. Within a <literal>Session</literal> the application may safely use <literal>==</literal> to compare objects."
+msgstr "<emphasis>åã
ã®</emphasis> <literal>Session</literal> ã«è¿½å ããããªãã¸ã§ã¯ãã«ã¨ã£ã¦ ï¼ããªãã¡ãï¼ã¤ã® <literal>Session</literal> ã®ã¹ã³ã¼ãã®ä¸ã§ã¯ï¼ãï¼ã¤ã®æ¦å¿µã¯åãã§ãã ãã¼ã¿ãã¼ã¹åä¸æ§ã¨JVMåä¸æ§ãä¸è´ãããã¨ããHibernateãä¿è¨¼ãã¾ãã ããããã¢ããªã±ã¼ã·ã§ã³ãï¼ã¤ã®ç°ãªãã»ãã·ã§ã³ãã ãåããï¼æ°¸ç¶æ§èå¥åã®ï¼ãã¸ãã¹ãªãã¸ã§ã¯ãã«åæã«ã¢ã¯ã»ã¹ããéãã ï¼ã¤ã®ã¤ã³ã¹ã¿ã³ã¹ã¯å®éã«ï¼JVMèå¥åãï¼ãç°ãªããã¾ãã 楽観çã¢ããã¼ãã«ãã£ã¦ãï¼èªåãã¼ã¸ã§ãã³ã°ã®ï¼ãã©ãã·ã¥ï¼ã³ãããæã« ã³ã³ããªã¯ãã解決ããã¾ãã"
+
+#: index.docbook:275
+msgid "However, an application that uses <literal>==</literal> outside of a <literal>Session</literal>, might see unexpected results. This might occur even in some unexpected places, for example, if you put two detached instances into the same <literal>Set</literal>. Both might have the same database identity (i.e. they represent the same row), but JVM identity is by definition not guaranteed for instances in detached state. The developer has to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods in persistent classes and implement his own notion of object equality. There is one caveat: Never use the database identifier to implement equality, use a business key, 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</literal>, changing the hashcode breaks the contract of t!
he <literal>Set</literal>. Attributes for business keys don't 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</literal>. See the Hibernate website for a more thorough discussion of this issue. Also note that this is not a Hibernate issue, but simply how Java object identity and equality has to be implemented."
+msgstr "ãã®ã¢ããã¼ãã§ã¯ãHibernateã¨ãã¼ã¿ãã¼ã¹ã«åæå®è¡ã«ã¤ãã¦ã®å¿é
ãæ®ãã¾ãã ä¸æ¹ã§ãæé«ã®ã¹ã±ã¼ã©ããªãã£ãæä¾ããã¾ãã ãªããªããï¼ã¹ã¬ããã®ä½æ¥åä½ã®ä¸ã§ä¸ææ§ãä¿è¨¼ãããã°ã é«ä¾¡ãªããã¯ãåæåãä¸è¦ã«ãªãããã§ãã <literal>Session</literal> ãã¨ã«ï¼ã¤ã®ã¹ã¬ãããè²¼ãä»ããéãã ã¢ããªã±ã¼ã·ã§ã³ã¯ãã¸ãã¹ãªãã¸ã§ã¯ããsynchronizeããå¿
è¦ã¯ããã¾ããã <literal>Session</literal> å
ã§ã¯ãã¢ããªã±ã¼ã·ã§ã³ã¯ãªãã¸ã§ã¯ããæ¯è¼ããããã«ã <literal>==</literal> ãå®å
¨ã«ä½¿ç¨ã§ãã¾ãã"
+
+#: index.docbook:296
+msgid "Common issues"
+msgstr "ããã©ãã<literal>Session</literal> ã®å¤ã§ <literal>==</literal> ã使ãã¢ããªã±ã¼ã·ã§ã³ã¯ãäºæããªãçµæã«ééãã¾ãã ããã¯äºæããªãå ´æã§èµ·ãããã¾ãã ä¾ãã°ãï¼ã¤ã®åé¢ã¤ã³ã¹ã¿ã³ã¹ãåã <literal>Set</literal> ã« putããã¨ããªã©ã§ãã 両æ¹ã¨ãåããã¼ã¿ãã¼ã¹èå¥åãæã¡ã¾ãï¼ããªãã¡ãåãè¡ã表ãã¾ãï¼ã ããããåé¢ç¶æ
ã®ã¤ã³ã¹ã¿ã³ã¹ã®JVMèå¥åã¯å½ç¶ä¿è¨¼ããã¾ããã éçºè
ã¯ãæ°¸ç¶æ§ã¯ã©ã¹ã® <literal>equals()</literal> 㨠<literal>hashCode()</literal> ã¡ã½ããããªã¼ãã¼ã©ã¤ããããªãã¸ã§ã¯ãç価æ§ã®æ¦å¿µãå®è£
ãã¹ãã§ãã è¦åãï¼ã¤ããã¾ããç価æ§ã®å®è£
ã«ãã¼ã¿ãã¼ã¹èå¥åã使ããªãã§ãã ããã ã¦ãã¼ã¯ãªï¼æ®éã¯ä¸å¤ã®ï¼å±æ§ã®çµã¿åããã§ãããã¸ãã¹ãã¼ã使ã£ã¦ãã ããã ãããä¸æãª!
ãã¸ã§ã¯ããæ°¸ç¶åãããå ´åããã¼ã¿ãã¼ã¹èå¥åãå¤ããã¾ãã ä¸æãªãã¸ã§ã¯ããï¼é常åé¢ã¤ã³ã¹ã¿ã³ã¹ã¨å
±ã«ï¼ <literal>Set</literal> ã«ä¿æããå ´åãããã·ã¥ã³ã¼ããå¤ããã¨ãããã¨ã¯ã<literal>Set</literal> ã®å¥ç´ãç ´ãã¨ãããã¨ã§ãã ãã¸ãã¹ãã¼ã®ããã®å±æ§ã¯ããã¼ã¿ãã¼ã¹ã®ä¸»ãã¼ã»ã©å®å®ãã¹ãã§ã¯ãªãã§ãã ãªãã¸ã§ã¯ããåã <literal>Set</literal> ã®ä¸ã«ããéã ããå®å®ãä¿è¨¼ãã¹ãã§ãã ãã®åé¡ã®ããå¾¹åºçãªè°è«ã¯ãHibernateã®Webãµã¤ããåç
§ãã¦ãã ããã ã¾ããããã¯Hibernateã®åé¡ã§ã¯ãªããåã«Javaãªãã¸ã§ã¯ãã®èå¥åãç価æ§ã ã©ã®ããã«å®è£
ãã¹ããã¨ãããã¨ã§ãã"
+
+#: index.docbook:298
+msgid "Never use the anti-patterns <emphasis>session-per-user-session</emphasis> or <emphasis>session-per-application</emphasis> (of course, there are rare exceptions to this rule). Note that some of the following issues might also appear with the recommended patterns, make sure you understand the implications before making a design decision:"
+msgstr "ä¸è¬çãªåé¡"
+
+#: index.docbook:307
+msgid "A <literal>Session</literal> is not thread-safe. Things which are supposed to work concurrently, like HTTP requests, session beans, or Swing workers, will cause race conditions if a <literal>Session</literal> instance would be shared. If you keep your Hibernate <literal>Session</literal> in your <literal>HttpSession</literal> (discussed later), you should consider synchronizing access to your Http session. Otherwise, a user that clicks reload fast enough may use the same <literal>Session</literal> in two concurrently running threads."
+msgstr "<emphasis>session-per-user-session</emphasis> 㨠<emphasis>session-per-application</emphasis> ã¢ã³ããã¿ã¼ã³ ã¯ä½¿ã£ã¦ã¯ããã¾ããï¼ãã¡ãããã¾ãã«ä¾å¤ãããã¾ãï¼ã 注æï¼ä¸è¨ã®åé¡ã®ããã¤ãã¯ãæ¨å¥¨ããããã¿ã¼ã³ã¨ãã¦ãåºç¾ãã¾ãã è¨è¨ã決å®ããåã«ãè£ã®æå³ãç解ããããã«ãã¦ãã ããã"
+
+#: index.docbook:318
+msgid "An exception thrown by Hibernate means you have to rollback your database transaction and close the <literal>Session</literal> immediately (discussed later in more detail). If your <literal>Session</literal> is bound to the application, you have to stop the application. Rolling back the database transaction doesn't put your business objects back into the state they were at the start of the transaction. This means the database state and the business objects do get out of sync. Usually this is not a problem, because exceptions are not recoverable and you have to start over after rollback anyway."
+msgstr "<literal>Session</literal> ã¯ã¹ã¬ããã»ã¼ãã§ã¯ããã¾ããã HTTPãªã¯ã¨ã¹ããã»ãã·ã§ã³BeanãSwingã¯ã¼ã«ã¼ã®ããã«ã åæå®è¡ãå¯è½ãªãã®ã <literal>Session</literal> ã¤ã³ã¹ã¿ã³ã¹ãå
±æããã¨ã 競åç¶æ
ãå¼ãèµ·ããã¾ãã ï¼å¾ã§è°è«ããï¼<literal>HttpSession</literal> ã®ä¸ã§ Hibernate <literal>Session</literal> ãä¿æããå ´åã HttpSessionã¸ã®ã¢ã¯ã»ã¹ãåæåãããã¨ãèæ
®ãã¹ãã§ãã ãããªããã°ãã¦ã¼ã¶ã¼ãååæ©ããªãã¼ããã¯ãªãã¯ããã¨ã åæã«èµ°ãï¼ã¤ã®ã¹ã¬ããã®ä¸ã§ãåã <literal>Session</literal> ã使ããã¾ãã"
+
+#: index.docbook:330
+msgid "The <literal>Session</literal> caches every object that is in persistent state (watched and checked for dirty state by Hibernate). This means it grows endlessly until you get an OutOfMemoryException, if you keep it open for a long time or simply load too much data. One solution for this is to call <literal>clear()</literal> and <literal>evict()</literal> to manage the <literal>Session</literal> cache, but you most likely should consider a Stored Procedure if you need mass data operations. Some solutions are shown in <xref linkend=\"batch\"/>. Keeping a <literal>Session</literal> open for the duration of a user session also means a high probability of stale data."
+msgstr "Hibernateãä¾å¤ãæããå ´åã¯ããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ããã¼ã«ããã¯ãã ç´ã¡ã« <literal>Session</literal> ãéããã¹ãã§ãï¼è©³ç´°ãå¾ã§è°è«ãã¾ãï¼ã <literal>Session</literal> ãã¢ããªã±ã¼ã·ã§ã³ã«çµã³ä»ãããã¦ããã®ã§ããã°ã ã¢ããªã±ã¼ã·ã§ã³ãåæ¢ãã¹ãã§ãã ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ããã¼ã«ããã¯ãã¦ãããã¸ãã¹ãªãã¸ã§ã¯ã㯠ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããã¨ãã®ç¶æ
ã«æ»ãã¾ããã ããã¯ããã¼ã¿ãã¼ã¹ã®ç¶æ
ã¨ãã¸ãã¹ãªãã¸ã§ã¯ãã¯åæãã¦ããªããã¨ãæå³ãã¾ãã é常ããã¯åé¡ã«ãªãã¾ããã ãªããªããä¾å¤ã¯å復ã§ããªãããã§ãã ã¨ã«ãããã¼ã«ããã¯ããå¾ã«ããç´ãã¹ãã§ãã"
+
+#: index.docbook:348
+msgid "Database transaction demarcation"
+msgstr "<literal>Session</literal> ã¯æ°¸ç¶ï¼persistentï¼ç¶æ
ã®ãã¹ã¦ã®ãªãã¸ã§ã¯ãã ãã£ãã·ã¥ãã¾ãï¼Hibernateã¯ç£è¦ãããã¼ãã£ç¶æ
ããã§ãã¯ãã¾ãï¼ã ããã¯ãé·ãéã»ãã·ã§ã³ãéããã¾ã¾ã«ãããã é常ã«å¤ãã®ãã¼ã¿ããã¼ããç¶ãããããå ´åã¯ã OutOfMemoryExceptionãçºçããã¾ã§ç¡éã«å¤§ãããªããã¨ãæå³ãã¾ãã 解決çã®ï¼ã¤ã¯ã<literal>Session</literal> ãã£ãã·ã¥ã管çããããã«ã <literal>clear()</literal> ã <literal>evict()</literal> ãå¼ã¶ãã¨ã§ãã ãããã大ããªãã¼ã¿ãå¦çããå¿
è¦ããããªãã ãã¶ãã¹ãã¢ãããã·ã¼ã¸ã£ãèæ
®ããã¹ãã§ãããã ããã¤ãã®è§£æ±ºçã¯ã<xref linkend=\"batch\"/> ã§ç´¹ä»ããã¦ãã¾ãã ã¦ã¼ã¶ã¼ã»ãã·ã§ã³ã®éã<literal>Session</literal> ãéããã¾ã¾ã«ããã¨ãããã¨ã¯ã ãã¼ã¿ãæ°é®®ã§ãªã!
ãªã確çãé«ããªããã¨ãæå³ãã¾ãã"
+
+#: index.docbook:350
+msgid "Datatabase (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 "ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³å¢ç"
+
+#: index.docbook:360
+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, in other words, begin, commit, or rollback database transactions himself. 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 "ãã¼ã¿ãã¼ã¹ï¼ãããã¯ã·ã¹ãã ï¼ãã©ã³ã¶ã¯ã·ã§ã³ã®å¢çã¯ã常ã«å¿
è¦ã§ãã ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®å¤ã§ããã¼ã¿ãã¼ã¹ã¨ã®éä¿¡ã¯èµ·ãã¾ãã ï¼ããã¯èªåã³ãããã¢ã¼ãã«æ
£ãã¦ããå¤ãã®éçºè
ãæ··ä¹±ãããããããã¾ããï¼ã èªã¿è¾¼ãã ãã®æä½ã«ã§ãããã¤ãæ確ãªãã©ã³ã¶ã¯ã·ã§ã³å¢çã使ç¨ãã¦ãã ããã åé¢ã¬ãã«ã¨ãã¼ã¿ãã¼ã¹ã®è½å次第ã§ãããã¯å¿
è¦ãªãããããã¾ãããã 常ã«ãã©ã³ã¶ã¯ã·ã§ã³å¢çãæ示çã«æå®ãã¦ãããã¤ãã¹é¢ã¯å
¨ãããã¾ããã 確ãã«ãï¼ã¤ã®ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã¯å¤æ°ã®å°ããªãã©ã³ã¶ã¯ã·ã§ã³ãã ï¼ãã¼ã¿ã®èªã¿è¾¼ã¿ã§ãã£ã¦ãï¼ããã©ã¼ãã³ã¹ããããã¦ãã¾ãã"
+
+#: index.docbook:370
+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 you'd use programmatic transaction demaracation. Hibernate offers a wrapper API called <literal>Transaction</literal> 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 "J2EEç°å¢ã«ç®¡çããã¦ããªãç¶æ
ï¼ããªãã¡ãã¹ã¿ã³ãã¢ãã³ãåç´ãªWebãSwingã¢ããªã±ã¼ã·ã§ã³ï¼ã§ãã 管çãããç¶æ
ã§ããHibernateã¢ããªã±ã¼ã·ã§ã³ãå®è¡ã§ãã¾ãã 管çããã¦ããªãç°å¢ã§ã¯ãHiberanteããã¼ã¿ãã¼ã¹ã®ã³ãã¯ã·ã§ã³ãã¼ã«ãæä¾ãã¾ãã ã¢ããªã±ã¼ã·ã§ã³éçºè
ã¯ããã©ã³ã¶ã¯ã·ã§ã³å¢çãæåã§è¨å®ããªããã°ãªãã¾ããã è¨ãæããã¨ããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®éå§ãã³ãããããã¼ã«ããã¯ã éçºè
èªèº«ãè¨å®ããå¿
è¦ãããã¨ãããã¨ã§ãã é常ã管çãããç°å¢ã§ã¯ãã³ã³ãã管çã«ãããã©ã³ã¶ã¯ã·ã§ã³ï¼CMTï¼ãæä¾ããã¾ãã ä¾ãã°ãã»ãã·ã§ã³Beanã®ãããã¤ã¡ã³ããã£ã¹ã¯ãªãã¿ã§å®£è¨çã«å®ç¾©ãã ãã©ã³ã¶ã¯ã·ã§ã³ãçµã¿ç«ã¦ã¾ãã ããã°ã©ã ã«ãããã©ã³ã¶ã¯ã·ã§ã³!
å¢çã¯ããå¿
è¦ããã¾ããã"
+
+#: index.docbook:379
+msgid "Usually, ending a <literal>Session</literal> involves four distinct phases:"
+msgstr "ããããªããã管çããã¦ããªããªã½ã¼ã¹ã»ãã¼ã«ã«ãªç°å¢ã¨ JTAã«ä¾åããã·ã¹ãã ï¼CMTã§ã¯ãªãBMTï¼ã®ä¸¡æ¹ã«ã æ°¸ç¶å層ããã¼ã¿ãã«ã«ä¿ã¤ã®ã¯ããã°ãã°æã¾ãããã¨ã§ãã ãããã¤ç°å¢ã®ãã¤ãã£ãã®ãã©ã³ã¶ã¯ã·ã§ã³ã·ã¹ãã ãå¼ã³åºã <literal>Transaction</literal> ã¨ããã©ããã¼APIãHibernateãæä¾ãã¾ãã ãã®APIã使ããã¯ä»»æã§ãããCMTã®ã»ãã·ã§ã³Beanã使ããªãã®ã§ããã°ã使ããã¨ãå¼·ãæ¨å¥¨ãã¾ãã"
+
+#: index.docbook:385
+msgid "flush the session"
+msgstr "é常ã<literal>Session</literal> çµäºã¯ãï¼ã¤ã®ç°ãªããã§ã¼ãºãå«ã¿ã¾ãã"
+
+#: index.docbook:390
+msgid "commit the transaction"
+msgstr "ã»ãã·ã§ã³ã®ãã©ãã·ã¥"
+
+#: index.docbook:395
+msgid "close the session"
+msgstr "ãã©ã³ã¶ã¯ã·ã§ã³ã®ã³ããã"
+
+#: index.docbook:400
+msgid "handle exceptions"
+msgstr "ã»ãã·ã§ã³ã®ã¯ãã¼ãº"
+
+#: index.docbook:406
+msgid "Flushing the session has been discussed earlier, we'll now have a closer look at transaction demarcation and exception handling in both managed- and non-managed environments."
+msgstr "ä¾å¤ã®ãã³ããªã³ã°"
+
+#: index.docbook:413
+msgid "Non-managed environment"
+msgstr "ã»ãã·ã§ã³ã®ãã©ãã·ã¥ã«ã¤ãã¦ã¯ãåã®ã»ãã§ãã§ã«è°è«ãã¾ããã 管çãããç°å¢ã¨ç®¡çããã¦ããªãç°å¢ã®ä¸¡æ¹ã«ã¤ãã¦ã ãã©ã³ã¶ã¯ã·ã§ã³å¢çã¨ä¾å¤ãã³ããªã³ã°ããã£ã¨è©³ããè¦ã¦ããã¾ãããã"
+
+#: index.docbook:415
+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 "管çããã¦ããªãç°å¢"
+
+#: index.docbook:422
+msgid ""
+ "<![CDATA[// Non-managed environment idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr "Hibernateæ°¸ç¶å層ã管çããã¦ããªãç°å¢ã§å®è£
ããå ´åã¯ã é常åç´ãªã³ãã¯ã·ã§ã³ãã¼ã«ï¼ããªãã¡DataSourceã§ã¯ãªãï¼ã«ãã£ã¦ã ãã¼ã¿ãã¼ã¹ã³ãã¯ã·ã§ã³ãå¶å¾¡ãã¾ãã Hibernateã¯ãã®ã³ãã¯ã·ã§ã³ãã¼ã«ããå¿
è¦ãªã³ãã¯ã·ã§ã³ãåå¾ãã¾ãã ã»ãã·ã§ã³ï¼ãã©ã³ã¶ã¯ã·ã§ã³å¶å¾¡ã®ã¤ãã£ãªã ã¯æ¬¡ã®ããã«ãªãã¾ãã"
+
+#: index.docbook:424
+msgid "You don't have to <literal>flush()</literal> the <literal>Session</literal> explicitly - the call to <literal>commit()</literal> automatically triggers the synchronization (depending upon the <xref linkend=\"objectstate-flushing\"/>FlushMode for the session. A call to <literal>close()</literal> marks the end of a session. The main implication of <literal>close()</literal> is that the JDBC connection will be relinquished by the session. This Java code is portable and runs in both non-managed and JTA environments."
+msgstr ""
+ "<![CDATA[// Non-managed environment idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+
+#: index.docbook:433
+msgid "A much more flexible solution is Hibernate's built-in \"current session\" context management, as described earlier:"
+msgstr "æ示çã« <literal>Session</literal> ã® <literal>flush()</literal> ãå¼ã³åºãã¹ãã§ã¯ãªãã <literal>commit()</literal> ãå¼ã³åºããã¨ã«ãããèªåçã«åæåå¦çãå®è¡ããã¾ã ï¼ã»ãã·ã§ã³ã® <xref linkend=\"objectstate-flushing\"/>FlushMode ã«ä¾åãã¦ããï¼ã <literal>close()</literal> ãå¼ã³åºããã¨ã«ãããã»ãã·ã§ã³ã®çµãããæ確ã«ãã¾ãã <literal>close()</literal> ãæé»çã«è¡ã主ãªãã¨ã¯ã ã»ãã·ã§ã³ãJDBCã³ãã¯ã·ã§ã³ãéæ¾ãããã¨ã§ãã ä¸è¨ã®Javaã³ã¼ãã¯ãã¼ã¿ãã«ã§ããã管çããã¦ããªãç°å¢ã¨JTAç°å¢ã®ä¸¡æ¹ã§å®è¡ã§ãã¾ãã"
+
+#: index.docbook:438
+msgid ""
+ "<![CDATA[// Non-managed environment idiom with getCurrentSession()\n"
+ "try {\n"
+ " factory.getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " factory.getCurrentSession().getTransaction().commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " factory.getCurrentSession().getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr "ããé©å¿æ§ã®ãã解決çã¯ãHibernateã«äºãçµã¿è¾¼ã¾ãã¦ãã ãcurrent sessionãã³ã³ããã¹ã管çã§ãã è¨èã§èª¬æããããä¸è¨ãè¦ãã»ããéãã§ãããã"
+
+#: index.docbook:440
+msgid "You will very likely never 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</literal> (and usually can only clean up and exit) are in different layers. The current context management by Hibernate can significantly simplify this design, as all you need is access to a <literal>SessionFactory</literal>. Exception handling is discussed later in this chapter."
+msgstr ""
+ "<![CDATA[// Non-managed environment idiom with getCurrentSession()\n"
+ "try {\n"
+ " factory.getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " factory.getCurrentSession().getTransaction().commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " factory.getCurrentSession().getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+
+#: index.docbook:450
+msgid "Note that you should select <literal>org.hibernate.transaction.JDBCTransactionFactory</literal> (which is the default), and for the second example <literal>\"thread\"</literal> as your <literal>hibernate.current_session_context_class</literal>."
+msgstr "æ£è¦ã®ã¢ããªã±ã¼ã·ã§ã³ã®ä¸ã§ã¯ããã®ãããªã³ã¼ãã®åã端ã決ãã¦è¦ãªãã§ãããã è´å½çãªï¼ã·ã¹ãã ï¼ä¾å¤ã¯ã常ã«ãæä¸ä½ãã§ãã£ãããã¹ãã§ãã è¨ãæããã°ãï¼æ°¸ç¶å層ã§ï¼Hibernateå¼ã³åºããå®è¡ããã³ã¼ãã¨ã <literal>RuntimeException</literal> ãå¶å¾¡ãã ï¼é常ã¯ã¯ãªã¼ã³ã¢ããã¨çµäºã®ã¿è¡ããã¨ãã§ããï¼ã³ã¼ãã¯ãå¥ã
ã®å±¤ã®ä¸ã«ããã¾ãã Hibernateã«ããã«ã¬ã³ãã³ã³ããã¹ã管çã¯ããã®è¨è¨ãããªãåç´ã«ãã¾ãã å¿
è¦ãªã®ã¯ã<literal>SessionFactory</literal> ã«ã¢ã¯ã»ã¹ãããã¨ã ãã§ãã ä¾å¤å¦çã¯ããã®ç« ã®å¾ã®ã»ãã§è°è«ãã¾ãã"
+
+#: index.docbook:459
+msgid "Using JTA"
+msgstr "注æï¼ï¼ããã©ã«ãã§ããï¼ <literal>org.hibernate.transaction.JDBCTransactionFactory</literal> ãé¸æããã¹ãã§ãã 第2ã®ç¨ä¾ã¨ãã¦ã¯ã <literal>hibernate.current_session_context_class</literal> ã <literal>\"thread\"</literal> ã¨ããã¨ããã§ãããã"
+
+#: index.docbook:461
+msgid "If your persistence layer runs in an application server (e.g. 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 "JTAã使ç¨ãã"
+
+#: index.docbook:468
+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</literal> API. So, the transaction management code is identical to the non-managed environment."
+msgstr "æ°¸ç¶å層ãã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¼ï¼ä¾ãã°ãEJBã»ãã·ã§ã³Beanã®èå¾ï¼ã§å®è¡ããå ´åã Hibernateããåå¾ãããã¹ã¦ã®ãã¼ã¿ã½ã¼ã¹ã³ãã¯ã·ã§ã³ã¯ã èªåçã«ã°ãã¼ãã«JTAãã©ã³ã¶ã¯ã·ã§ã³ã®ä¸é¨ã«ãªãã¾ãã EJBã使ããã«ãã¹ã¿ã³ãã¢ãã³ã®JTAå®è£
ãå°å
¥ãããã¨ãã§ãã¾ãã JTAçµ±åã®ããã«ãHibernateã¯ï¼ã¤ã®æ¦ç¥ãæä¾ãã¾ãã"
+
+#: index.docbook:474
+msgid ""
+ "<![CDATA[// BMT idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr "Bean管çãã©ã³ã¶ã¯ã·ã§ã³ï¼BMTï¼ã使ãã<literal>Transaction</literal> APIã使ãå ´åã Hibernateã¯ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¼ã«BMTãã©ã³ã¶ã¯ã·ã§ã³ã®éå§ã¨çµãããåãã¾ãã ããªãã¡ããã©ã³ã¶ã¯ã·ã§ã³ç®¡çã®ã³ã¼ãã¯ã管çãããªãç°å¢ã¨åãã«ãªãã¾ãã"
+
+#: index.docbook:476
+msgid "If you want to use a transaction-bound <literal>Session</literal>, that is, the <literal>getCurrentSession()</literal> functionality for easy context propagation, you will have to use the JTA <literal>UserTransaction</literal> API directly:"
+msgstr ""
+ "<![CDATA[// BMT idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[// BMT idiom with getCurrentSession()\n"
+ "try {\n"
+ " UserTransaction tx = (UserTransaction)new InitialContext()\n"
+ " .lookup(\"java:comp/UserTransaction\");\n"
+ "\n"
+ " tx.begin();\n"
+ "\n"
+ " // Do some work on Session bound to transaction\n"
+ " factory.getCurrentSession().load(...);\n"
+ " factory.getCurrentSession().persist(...);\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr "ãã©ã³ã¶ã¯ã·ã§ã³å¢çã¨ã㦠<literal>Session</literal> ã使ãããå ´åã ç°¡åã«ã³ã³ããã¹ããä¼æããæ©è½ã§ãã <literal>getCurrentSession()</literal> ãããã®ã§ã JTAã® <literal>UserTransaction</literal> APIãç´æ¥ä½¿ç¨ãã¹ãã§ãããã"
+
+#: index.docbook:484
+msgid "With CMT, transaction demarcation is done in session bean deployment descriptors, not programatically, hence, the code is reduced to:"
+msgstr ""
+ "<![CDATA[// BMT idiom with getCurrentSession()\n"
+ "try {\n"
+ " UserTransaction tx = (UserTransaction)new InitialContext()\n"
+ " .lookup(\"java:comp/UserTransaction\");\n"
+ "\n"
+ " tx.begin();\n"
+ "\n"
+ " // Do some work on Session bound to transaction\n"
+ " factory.getCurrentSession().load(...);\n"
+ " factory.getCurrentSession().persist(...);\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+
+#: index.docbook:489
+msgid ""
+ "<![CDATA[// CMT idiom\n"
+ " Session sess = factory.getCurrentSession();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "]]>"
+msgstr "CMTã§ã¯ããã©ã³ã¶ã¯ã·ã§ã³å¢çãã»ãã·ã§ã³Beanã®ãããã¤ã¡ã³ããã£ã¹ã¯ãªãã¿ã§å®ç¾©ãã ããã°ã©ã ã§ã¯è¡ãã¾ããã ããã«ãã³ã¼ãã¯æ¬¡ã®ããã«å°ãªããªãã¾ãã"
+
+#: index.docbook:491
+msgid "In a CMT/EJB even rollback happens automatically, since an unhandled <literal>RuntimeException</literal> thrown by a session bean method tells the container to set the global transaction to rollback. <emphasis>This means you do not need to use the Hibernate <literal>Transaction</literal> API at all with BMT or CMT, and you get automatic propagation of the \"current\" Session bound to the transaction.</emphasis>"
+msgstr ""
+ "<![CDATA[// CMT idiom\n"
+ " Session sess = factory.getCurrentSession();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "]]>"
+
+#: index.docbook:499
+msgid "Note that you should 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, when you configure Hibernate's transaction factory. Remember to also set <literal>hibernate.transaction.manager_lookup_class</literal>. Furthermore, make sure that your <literal>hibernate.current_session_context_class</literal> is either unset (backwards compatiblity), or set to <literal>\"jta\"</literal>."
+msgstr "CMT/EJBã®ä¸ã§ã¯ã常ã«ãã¼ã«ããã¯ãèªåçã«å®æ½ããã¾ãã ãªããªããã»ãã·ã§ã³ãã¼ã³ã®ã¡ã½ããã«ããæããããå¶å¾¡ããã¦ããªã <literal>RuntimeException</literal> ã¯ãã°ãã¼ãã«ãã©ã³ã¶ã¯ã·ã§ã³ã ãã¼ã«ããã¯ããããã«ã³ã³ããã«ä¼ããããã§ãã <emphasis>ããã¯ãBMTãããã¯CMTã¨ãã£ããã«Hibernate <literal>Transaction</literal> APIã使ãå¿
è¦ã¯å°ãããªãã¨ããæå³ã§ãã</emphasis>"
+
+#: index.docbook:508
+msgid "The <literal>getCurrentSession()</literal> operation has one downside in a JTA environment. There is one caveat to the use of <literal>after_statement</literal> connection release mode, which is then used by default. Due to a silly limitation of the JTA spec, it is not possible for Hibernate to automatically clean up any unclosed <literal>ScrollableResults</literal> or <literal>Iterator</literal> instances returned by <literal>scroll()</literal> or <literal>iterate()</literal>. You <emphasis>must</emphasis> release the underlying database cursor by calling <literal>ScrollableResults.close()</literal> or <literal>Hibernate.close(Iterator)</literal> explicity from a <literal>finally</literal> block. (Of course, most applications can easily avoid using <literal>scroll()</literal> or <literal>iterate()</literal> at all from the JTA or CMT code.)"
+msgstr "Hibernateã®ãã©ã³ã¶ã¯ã·ã§ã³ãã¡ã¯ããªãè¨å®ããéã«ã JTAãç´æ¥ä½¿ãï¼BMTã®ï¼å ´å㯠<literal>org.hibernate.transaction.JTATransactionFactory</literal> ãã CMTã»ãã·ã§ã³ãã¼ã³ã®ä¸ã§ã¯ <literal>org.hibernate.transaction.CMTTransactionFactory</literal> ã é¸æãã¹ãã ã¨ãããã¨ã«æ³¨æãã¦ãã ããã <literal>hibernate.transaction.manager_lookup_class</literal> ãã»ãããããã¨ãæãåºãã¦ãã ããã ãªãã<literal>hibernate.current_session_context_class</literal> ã¯ã ã»ããããªããï¼å¾æ¹äºæï¼ã<literal>\"jta\"</literal> ãã»ãããã¦ãã ããã"
+
+#: index.docbook:524
+msgid "Exception handling"
+msgstr "<literal>getCurrentSession()</literal> ãªãã¬ã¼ã·ã§ã³ã¯ãJTAç°å¢ã§ã¯ï¼ã¤ã®æ¬ ç¹ãæã¡ã¾ãã ããã©ã«ãã§ä½¿ããã <literal>after_statement</literal> ã³ãã¯ã·ã§ã³ãªãªã¼ã¹ã¢ã¼ãã使ç¨ããä¸ã§ã è¦åãï¼ã¤ããã¾ãã JTAä»æ§ã®æããªå¶ç´ã®ããã«ã <literal>scroll()</literal> ã¾ã㯠<literal>iterate()</literal> ãè¿ããã éãããã¦ããªã <literal>ScrollableResults</literal> ã¾ã㯠<literal>Iterator</literal> ã¤ã³ã¹ã¿ã³ã¹ãHibernateãèªåçã«ã¯ãªã¼ã³ã¢ãããããã¨ã¯ã§ãã¾ããã <literal>finally</literal> ãããã¯ã®ä¸ã§ã <literal>ScrollableResults.close()</literal> ã¾ã㯠<literal>Hibernate.close(Iterator)</literal> ãæ示çã«å¼ã³åºãã¦ã è£ã«æ½ãã ãã¼ã¿ãã¼ã¹ã«ã¼ã½ã«ãè§£æ¾ <emphasis>ããªããã°ãªãã¾ãã</emphasis>ã ï¼ãã¡ãããå¤ãã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ãJTAãCMTã³ã¼ã㧠!
<literal>scroll()</literal> ã <literal>iterate()</literal> ã®ä½¿ç¨ãé¿ããã®ã¯å®¹æã§ããï¼"
+
+#: index.docbook:526
+msgid "If the <literal>Session</literal> throws an exception (including any <literal>SQLException</literal>), you should immediately rollback the database transaction, call <literal>Session.close()</literal> and discard the <literal>Session</literal> instance. Certain methods of <literal>Session</literal> will <emphasis>not</emphasis> leave the session in a consistent state. No exception thrown by Hibernate can be treated as recoverable. Ensure that the <literal>Session</literal> will be closed by calling <literal>close()</literal> in a <literal>finally</literal> block."
+msgstr "ä¾å¤ãã³ããªã³ã°"
+
+#: index.docbook:537
+msgid "The <literal>HibernateException</literal>, which wraps most of the errors that can occur in a Hibernate persistence layer, is an unchecked exception (it wasn't in older versions of Hibernate). In our opinion, we shouldn't 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 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 which are not a <literal>HibernateException</literal>. These are, again, not recoverable and appropriate action should be taken."
+msgstr "<literal>Session</literal> ãä¾å¤ï¼<literal>SQLException</literal>ãå«ãï¼ãæããå ´åã ç´ã¡ã«ããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ããã¼ã«ããã¯ãã<literal>Session.close()</literal> ãå¼ã³ã<literal>Session</literal> ã¤ã³ã¹ã¿ã³ã¹ãç ´æ£ãã¹ãã§ãã <literal>Session</literal> ã®ããã¤ãã®ã¡ã½ããã¯ã ã»ãã·ã§ã³ã®ç¶æ
ã <emphasis>çç¾ããã¾ã¾</emphasis> ã«ãã¾ãã Hibernateãæããä¾å¤ããå復ã§ãããã®ã¨ãã¦æ±ããã¨ã¯ã§ãã¾ããã <literal>finally</literal> ãããã¯ã®ä¸ã§ <literal>close()</literal> ãå¼ãã§ã <literal>Session</literal> ã確å®ã«éãã¦ãã ããã"
+
+#: index.docbook:549
+msgid "Hibernate wraps <literal>SQLException</literal>s thrown while interacting with the database in a <literal>JDBCException</literal>. In fact, Hibernate will attempt to convert the eexception into a more meningful subclass of <literal>JDBCException</literal>. The underlying <literal>SQLException</literal> is always available via <literal>JDBCException.getCause()</literal>. Hibernate converts the <literal>SQLException</literal> into an appropriate <literal>JDBCException</literal> subclass using the <literal>SQLExceptionConverter</literal> attached to the <literal>SessionFactory</literal>. By default, the <literal>SQLExceptionConverter</literal> is defined by the configured dialect; however, it is also possible to plug in a custom implementation (see the javadocs for the <literal>SQLExceptionConverterFactory</literal> class for details). The standard <literal>JDBCException</literal> subtypes are:"
+msgstr "<literal>HibernateException</literal> ã¯ãHibernateæ°¸ç¶å層ã®ä¸ã§çºçããå¤ãã®ã¨ã©ã¼ã ã©ãããããæ¤æ»ãããªãä¾å¤ã§ãï¼Hibernateã®å¤ããã¼ã¸ã§ã³ã¯éãã¾ããï¼ã ç§ãã¡ã®æè¦ã¯ãã¢ããªã±ã¼ã·ã§ã³éçºè
ã«å復ä¸å¯è½ãªä¾å¤ã ä¸å±¤ã§ãã£ãããããã¨ãå¼·è¦ãã¹ãã§ã¯ãªãã¨ãããã¨ã§ãã å¤ãã®ã·ã¹ãã ã§ã¯ãæ¤æ»ãããªãä¾å¤ã¨è´å½çãªä¾å¤ã¯ã ã³ã¼ã«ã¹ã¿ãã¯ã®æåã®ãã¬ã¼ã ã®ï¼ã¤ï¼ä¾ãã°ãæä¸ä½ã®å±¤ã§ï¼ã§ãã³ããªã³ã°ãã ã¨ã©ã¼ã¡ãã»ã¼ã¸ãã¢ããªã±ã¼ã·ã§ã³ã¦ã¼ã¶ã¼ã«è¡¨ç¤ºãã¾ã ï¼ãããã¯ãä»ã®é©åãªå¦çãå®æ½ãã¾ãï¼ã Hibernateã¯ã<literal>HibernateException</literal> 以å¤ã®æ¤æ»ãããªãä¾å¤ã æãããã¨ã«æ³¨æãã¦ãã ããã ããããã¾ããå復ä¸å¯è½ã§ãããé©åãªå¦çãå®æ½ãã¹ãã§ãã"
+
+#: index.docbook:565
+msgid "<literal>JDBCConnectionException</literal> - indicates an error with the underlying JDBC communication."
+msgstr "Hibernateã¯ããã¼ã¿ãã¼ã¹ã¨ã®å¯¾è©±ä¸ã«æãããã <literal>SQLException</literal> ã <literal>JDBCException</literal> ã§ã©ãããã¾ãã å®ã¯ãä¾å¤ãããæå³ã®ãã <literal>JDBCException</literal> ã®ãµãã¯ã©ã¹ã« å¤æãããã¨è©¦ã¿ã¾ãã å
ã® <literal>SQLException</literal> ã¯ã<literal>JDBCException.getCause()</literal> ã«ãããã¤ã§ãå¾ããã¾ãã Hibernateã¯ã<literal>SessionFactory</literal> ã«è¿½å ããã¦ãã <literal>SQLExceptionConverter</literal> ã使ãã<literal>SQLException</literal> ã é©å½ãª <literal>JDBCException</literal> ãµãã¯ã©ã¹ã«å¤æãã¾ãã ããã©ã«ãã§ã¯ã<literal>SQLExceptionConverter</literal> ã¯è¨å®ããã¦ããSQLæ¹è¨ã«ãã å®ç¾©ããã¾ãã ä¸æ¹ã§ãç¬èªã®å®è£
ã«å·®ãæ¿ãããã¨ãã§ãã¾ã ï¼è©³ç´°ã¯ã<literal>SQLExceptionConverterFactory</literal> ã¯ã©ã¹ã®Javadocãåç
§ãã¦ãã ããï¼ã æ¨æº!
ç㪠<literal>JDBCException</literal> ã®ãµãã¿ã¤ããä¸è¨ã«ç¤ºãã¾ãã"
+
+#: index.docbook:571
+msgid "<literal>SQLGrammarException</literal> - indicates a grammar or syntax problem with the issued SQL."
+msgstr "<literal>JDBCConnectionException</literal> - åºç¤ã¨ãªãJDBCéä¿¡ã®ã¨ã©ã¼ã表ãã¾ãã"
+
+#: index.docbook:577
+msgid "<literal>ConstraintViolationException</literal> - indicates some form of integrity constraint violation."
+msgstr "<literal>SQLGrammarException</literal> - çºè¡ããSQLã®ææ³ãããã¯æ§æã®åé¡ã表ãã¾ãã"
+
+#: index.docbook:583
+msgid "<literal>LockAcquisitionException</literal> - indicates an error acquiring a lock level necessary to perform the requested operation."
+msgstr "<literal>ConstraintViolationException</literal> - ä½ããã®å½¢å¼ã®å®å
¨æ§å¶ç´éåã表ãã¾ãã"
+
+#: index.docbook:589
+msgid "<literal>GenericJDBCException</literal> - a generic exception which did not fall into any of the other categories."
+msgstr "<literal>LockAcquisitionException</literal> - è¦æ±ãããæä½ãå®æ½ããã®ã«å¿
è¦ãªããã¯ã¬ãã«ãå¾ãéã®ã¨ã©ã¼ã表ãã¾ãã"
+
+#: index.docbook:599
+msgid "Transaction timeout"
+msgstr "<literal>GenericJDBCException</literal> - ä»ã®ã«ãã´ãªã«ä¸è´ããªãã£ãä¸è¬çãªä¾å¤ã§ãã"
+
+#: index.docbook:601
+msgid "One extremely 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 functioanlity is abstracted by the Hibernate <literal>Transaction</literal> object."
+msgstr "ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ã¤ã ã¢ã¦ã"
+
+#: index.docbook:614
+msgid ""
+ "<![CDATA[\n"
+ "Session sess = factory.openSession();\n"
+ "try {\n"
+ " //set transaction timeout to 3 seconds\n"
+ " sess.getTransaction().setTimeout(3);\n"
+ " sess.getTransaction().begin();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " sess.getTransaction().commit()\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " sess.getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr "EJBã®ãããªç®¡çãããç°å¢ãæä¾ãããããã¦éè¦ãªç¹å¾´ã®ï¼ã¤ã¯ã ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ã¤ã ã¢ã¦ãã§ãã ããã¯ç®¡çããã¦ããªãã³ã¼ãã«ã¯æä¾ã§ãã¾ããã ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã¤ã ã¢ã¦ãã¯ãä¸åè¡ãªãã©ã³ã¶ã¯ã·ã§ã³ã ã¦ã¼ã¶ã¼ã«ã¬ã¹ãã³ã¹ãè¿ããªãã¾ã¾ãç¡æéã«ãªã½ã¼ã¹ã使ãç¶ããªã ãã¨ãä¿éãã¾ãã 管çãããç°å¢ï¼JTAï¼ã®å¤ã§ã¯ãHibernateã¯ãã®æ©è½ããã«ã«æä¾ã§ãã¾ããã ããããªãããHibernateã¯æ¬¡ã®ãããªãã¼ã¿ã¢ã¯ã»ã¹æä½ã®å¶å¾¡ãããã¯ã§ãã¾ãã ãã¼ã¿ãã¼ã¹ã¬ãã«ã®ãããããã¯ã大ããªãªã¶ã«ãã»ãããè¿ãã¯ã¨ãªã å®ç¾©ãããã¿ã¤ã ã¢ã¦ãã«ãã£ã¦ç¢ºå®ã«å¶éãã¾ãã 管çãããç°å¢ã§ã¯ãHibernateã¯ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã¤ã ã¢ã¦ããJTAã«å§è²ãã¾ãã ãã®æ©è½ã¯ãHibernateã® <lite!
ral>Transaction</literal> ãªãã¸ã§ã¯ãã« ãã£ã¦æ½è±¡åããã¦ãã¾ãã"
+
+#: index.docbook:616
+msgid "Note that <literal>setTimeout()</literal> may not be called in a CMT bean, where transaction timeouts must be defined declaratively."
+msgstr ""
+ "<![CDATA[\n"
+ "Session sess = factory.openSession();\n"
+ "try {\n"
+ " //set transaction timeout to 3 seconds\n"
+ " sess.getTransaction().setTimeout(3);\n"
+ " sess.getTransaction().begin();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " sess.getTransaction().commit()\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " sess.getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+
+#: index.docbook:626
+msgid "Optimistic concurrency control"
+msgstr "CMTãã¼ã³ã®ä¸ã§ã¯ <literal>setTimeout()</literal> ã å¼ã³åºããªããã¨ã«æ³¨æãã¦ãã ããã ãã©ã³ã¶ã¯ã·ã§ã³ã¿ã¤ã ã¢ã¦ãã¯å®£è¨çã«å®ç¾©ãããã¹ãã§ãã"
+
+#: index.docbook:628
+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 for three possible approaches to writing application code that uses optimistic concurrency. The use cases we show are in the context of long conversations, but version checking also has the benefit of preventing lost updates in single database transactions."
+msgstr "楽観çåæå®è¡å¶å¾¡"
+
+#: index.docbook:639
+msgid "Application version checking"
+msgstr "é«ã並åæ§ã¨é«ãã¹ã±ã¼ã©ããªãã£ã®ä¸¡æ¹ãå®ç¾ããã¢ããã¼ãã¯ã ãã¼ã¸ã§ãã³ã°ã使ã£ã楽観çåæå®è¡å¶å¾¡ã®ã¿ã§ãã æ´æ°ã®è¡çªãè¦ã¤ããããã«ï¼ããã³ãæ´æ°ã失ãããã®ãé²ãããã«ï¼ã ãã¼ã¸ã§ã³çªå·ãããã¯ã¿ã¤ã ã¹ã¿ã³ãã使ã£ã¦ããã¼ã¸ã§ã³ããã§ãã¯ãã¾ãã Hibernateã¯ã楽観çåæå®è¡ãè¡ãã¢ããªã±ã¼ã·ã§ã³ã³ã¼ããæ¸ãããã® ã¢ããã¼ããï¼ã¤æä¾ãã¾ãã ç§ãã¡ãè¦ããã¦ã¼ã¹ã±ã¼ã¹ã¯ãé·ã対話ãæã¡ã¾ããã ãã¼ã¸ã§ã³ãã§ãã¯ã¯ã¾ã ï¼ã¤ã®ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ä¸ã§æ´æ°ã失ããã¨ãé²ã å©ç¹ãæã£ã¦ãã¾ãã"
+
+#: index.docbook:641
+msgid "In an implementation without much help from Hibernate, each interaction with the database occurs in a new <literal>Session</literal> and the developer is responsible for reloading all persistent instances from the database before manipulating them. This approach forces the application 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 "ã¢ããªã±ã¼ã·ã§ã³ã«ãããã¼ã¸ã§ã³ãã§ãã¯"
+
+#: index.docbook:650
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "\n"
+ "int oldVersion = foo.getVersion();\n"
+ "session.load( foo, foo.getKey() ); // load the current state\n"
+ "if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr "Hibernateã«ã»ã¨ãã©å©ãã¦ããããã«å®è£
ããã±ã¼ã¹ã§ãã ãã¼ã¿ãã¼ã¹ã¨ã®ããåãã¯ãããããæ°ãã <literal>Session</literal> ã®ä¸ã§èµ·ããã¾ãã éçºè
ã¯ããã¹ã¦ã®æ°¸ç¶æ§ã¤ã³ã¹ã¿ã³ã¹ãæä½ããåã«ã ãã¼ã¿ãã¼ã¹ããåèªã¿è¾¼ã¿ãã責åãããã¾ãã ãã®ã¢ããã¼ãã§ã¯ã対話ãã©ã³ã¶ã¯ã·ã§ã³ã®åé¢ãå®ãããã«ã ã¢ããªã±ã¼ã·ã§ã³èªèº«ããã¼ã¸ã§ã³ãã§ãã¯ãè¡ãå¿
è¦ãããã¾ãã ãã®ã¢ããã¼ãã¯ããã¼ã¿ãã¼ã¹ã¢ã¯ã»ã¹ã®ä¸ã§ã¯ãæãéå¹çã§ãã ã¨ã³ãã£ãã£EJBã¨æãä¼¼ã¦ããã¢ããã¼ãã§ãã"
+
+#: index.docbook:652
+msgid "The <literal>version</literal> property is mapped using <literal><version></literal>, and Hibernate will automatically increment it during flush if the entity is dirty."
+msgstr ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "\n"
+ "int oldVersion = foo.getVersion();\n"
+ "session.load( foo, foo.getKey() ); // load the current state\n"
+ "if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "t.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:658
+msgid "Of course, if you are operating in a low-data-concurrency environment and don't require version checking, you may use this approach and just skip the version check. In that case, <emphasis>last commit wins</emphasis> will be the default strategy for your long conversations. Keep in mind 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 "<literal><version></literal> ã使ã£ã¦ã<literal>version</literal> ããããã£ããããã³ã°ãã¾ãã Hibernateã¯ãã¨ã³ãã£ãã£ããã¼ãã£ã§ããå ´åããã©ãã·ã¥ãã ãã®éã« <literal>version</literal> ããããã£ãèªåçã«ã¤ã³ã¯ãªã¡ã³ããã¾ãã"
+
+#: index.docbook:667
+msgid "Clearly, manual version checking is only feasible in very trivial circumstances and not practical for most applications. Often not only single instances, but complete graphs of modified ojects have to be checked. Hibernate offers automatic version checking with either an extended <literal>Session</literal> or detached instances as the design paradigm."
+msgstr "ãã¡ããããã¼ã¿ã®ä¸¦åæ§ãä½ãç°å¢ã§éç¨ãã¦ããããã¼ã¸ã§ã³ãã§ãã¯ãä¸è¦ãªãã ãã®ã¢ããã¼ãã使ãããã¼ã¸ã§ã³ãã§ãã¯ãã¹ãããããã ãã§ãã ãã®å ´åã¯ãé·ã対話ã«ã¯ã <emphasis>ãæå¾ã«ã³ããããããã®ãåã¤ã</emphasis> ãããã©ã«ãã®æ¦ç¥ã§ãããã ãã®ã¢ããã¼ãã¯ãã¢ããªã±ã¼ã·ã§ã³ã®ã¦ã¼ã¶ã¼ãæ··ä¹±ããããããããªããã¨ã å¿ã«çãã¦ç½®ãã¦ãã ãããããã¯ãã¨ã©ã¼ã¡ãã»ã¼ã¸ã競åããå¤æ´ããã¼ã¸ããæ©ä¼ã ãªãã¾ã¾ãæ´æ°ã失ãçµé¨ãããããã§ãã"
+
+#: index.docbook:678
+msgid "Extended session and automatic versioning"
+msgstr "確ãã«ãããã¥ã¢ã«ã«ãããã¼ã¸ã§ã³ãã§ãã¯ã¯ãäºç´°ãªåå¼ã ãã§å®è¡ã§ãã¾ããã å¤ãã®ã¢ããªã±ã¼ã·ã§ã³ã«ã¨ã£ã¦å®ç¨çã§ã¯ããã¾ããã ãã°ãã°ãï¼ã¤ã®ã¤ã³ã¹ã¿ã³ã¹ã ãã§ãªãã ä¿®æ£ããããªãã¸ã§ã¯ãã®å®å
¨ãªã°ã©ãããã§ãã¯ããªããã°ãªãã¾ããã Hibernateã¯ãè¨è¨ãã©ãã¤ã ã¨ãã¦ãæ¡å¼µ <literal>Session</literal> ã åé¢ãããã¤ã³ã¹ã¿ã³ã¹ãèªåçã«ãã¼ã¸ã§ã³ãã§ãã¯ãã¾ãã"
+
+#: index.docbook:680
+msgid "A single <literal>Session</literal> instance and its persistent instances are used for the whole conversation, known as <emphasis>session-per-conversation</emphasis>. Hibernate checks instance versions at flush time, throwing an exception if concurrent modification is detected. It's 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 "æ¡å¼µã»ãã·ã§ã³ã¨èªåãã¼ã¸ã§ãã³ã°"
+
+#: index.docbook:689
+msgid "The <literal>Session</literal> 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 need not concern itself with version checking or with reattaching detached instances, nor does it have to reload instances in every database transaction."
+msgstr "ï¼ã¤ã® <literal>Session</literal> ã¤ã³ã¹ã¿ã³ã¹ã¨ãã®æ°¸ç¶æ§ã¤ã³ã¹ã¿ã³ã¹ã¯ã <emphasis>session-per-conversation</emphasis> ã¨ãã¦ç¥ãããã 対話å
¨ä½ã§ä½¿ããã¾ãã Hibernateã¯ãã©ãã·ã¥ããéã«ãã¤ã³ã¹ã¿ã³ã¹ã®ãã¼ã¸ã§ã³ããã§ãã¯ãã¾ãã åæã«ä¿®æ£ããããã¨ãæ¤åºããã¨ãä¾å¤ãæãã¾ãã ãã®ä¾å¤ããã£ãããã¦æ±ãã®ã¯ãéçºè
ã®è²¬ä»»ã§ã ï¼ä¸è¬çãªé¸æè¢ã¯ãå¤æ´ããã¼ã¸ãããå¤ããªããã¼ã¿ã§ãã¸ãã¹å¯¾è©±ã åã¹ã¿ã¼ãããæ©ä¼ãã¦ã¼ã¶ã¼ã«æä¾ãããã¨ã§ãï¼ã"
+
+#: index.docbook:697
+msgid ""
+ "<![CDATA[// foo is an instance loaded earlier by the old session\n"
+ "Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction\n"
+ "\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "session.flush(); // Only for last transaction in conversation\n"
+ "t.commit(); // Also return JDBC connection\n"
+ "session.close(); // Only for last transaction in conversation]]>"
+msgstr "ã¦ã¼ã¶ã¼ã®å¯¾è©±ãå¾
ã£ã¦ããã¨ãã¯ã <literal>Session</literal> ãåºç¤ã¨ãªãJDBCã³ãã¯ã·ã§ã³ããåãé¢ãã¾ãã ãã®ã¢ããã¼ãã¯ããã¼ã¿ãã¼ã¹ã¢ã¯ã»ã¹ã®ä¸ã§ã¯ãæãå¹ççã§ãã ã¢ããªã±ã¼ã·ã§ã³ã¯ããã¼ã¸ã§ã³ãã§ãã¯ãåé¢ãããã¤ã³ã¹ã¿ã³ã¹ãå追å ããã㨠ã«é¢å¿ãæã¤å¿
è¦ã¯ããã¾ãããã¾ãããããããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ä¸ã§ ã¤ã³ã¹ã¿ã³ã¹ãåèªã¿è¾¼ã¿ããå¿
è¦ã¯ããã¾ããã"
+
+#: index.docbook:698
+msgid "The <literal>foo</literal> object still knows which <literal>Session</literal> 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 aren't updating, you may call <literal>Session.lock()</literal> with <literal>LockMode.READ</literal> on any objects that might have been updated by another transaction. You don't need to lock any data that you <emphasis>are</emphasis> updating. Usually you would set <literal>FlushMode.MANUAL</literal> on an extended <literal>Session</literal>, so that only the last database transaction cycle is allowed to actually persist all modifications made in this conversation. Hence, only this last database transaction would include the <literal>flush()</literal> operation, and then also <literal>close()!
</literal> the session to end the conversation."
+msgstr ""
+ "<![CDATA[// foo is an instance loaded earlier by the old session\n"
+ "Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction\n"
+ "\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "session.flush(); // Only for last transaction in conversation\n"
+ "t.commit(); // Also return JDBC connection\n"
+ "session.close(); // Only for last transaction in conversation]]>"
+
+#: index.docbook:713
+msgid "This pattern is problematic if the <literal>Session</literal> is too big to be stored during user think time, e.g. an <literal>HttpSession</literal> should be kept as small as possible. As the <literal>Session</literal> is also the (mandatory) first-level cache and contains all loaded objects, we can probably use this strategy only for a few request/response cycles. You should use a <literal>Session</literal> only for a single conversation, as it will soon also have stale data."
+msgstr "<literal>foo</literal> ãªãã¸ã§ã¯ãã¯ãèªåããã¼ããã <literal>Session</literal> ãã¾ã ç¥ã£ã¦ãã¾ãã å¤ãã»ãã·ã§ã³ã®ä¸ã§æ°ãããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ãããã¨ã§ã æ°ããã³ãã¯ã·ã§ã³ãåå¾ãããã®ã»ãã·ã§ã³ãåéããã¾ãã ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãã³ããããããã¨ã§ã ã»ãã·ã§ã³ããJDBCã³ãã¯ã·ã§ã³ãåæããã³ãã¯ã·ã§ã³ããã¼ã«ã«è¿ãã¾ãã åæ¥ç¶ããå¾ãæ´æ°ãã¦ããªããã¼ã¿ã®ãã¼ã¸ã§ã³ãã§ãã¯ãå¼·å¶ããããã«ã ä»ã®ãã©ã³ã¶ã¯ã·ã§ã³ã«ããæ´æ°ããã¦ãããããããªããªãã¸ã§ã¯ãã«é¢ãã¦ã <literal>LockMode.READ</literal> ãã¤ã㦠<literal>Session.lock()</literal> ãå¼ã³åºããã¨ãã§ãã¾ãã æ´æ°ã㦠<emphasis>ãã</emphasis> ãã¼ã¿ãããã¯ããå¿
è¦ã¯ããã¾ããã é常ãæ¡å¼µ <literal>Session<!
/literal> ã« <literal>FlushMode.MANUAL</literal> ãã»ãããã¾ãã æå¾ã®ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®å¨æã§ã®ã¿ã 対話ã®ä¸ã§å¤æ´ããããã¹ã¦ãå®éã«æ°¸ç¶åãããããã§ãã ããã«ãæå¾ã®ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ã¿ <literal>flush()</literal> ãªãã¬ã¼ã·ã§ã³ãå«ã¿ã¾ããããã¦ã対話ãçµããããããã«ã ã»ãã·ã§ã³ã <literal>close()</literal> ãã¾ãã"
+
+#: index.docbook:723
+msgid "(Note that earlier Hibernate versions required explicit disconnection and reconnection of a <literal>Session</literal>. These methods are deprecated, as beginning and ending a transaction has the same effect.)"
+msgstr "ã¦ã¼ã¶ã¼ãèæ
®ä¸ã«ãæ ¼ç´ãããã¨ãã§ããªãããã <literal>Session</literal> ã大ããã®ã§ããã°ããã®ãã¿ã¼ã³ã¯åé¡ãããã¾ãã ä¾ãã°ã<literal>HttpSession</literal> ã¯å¯è½ãªéãå°ããä¿ã¤ã¹ãã§ãã <literal>Session</literal> ã¯ï¼å¼·å¶çã«ï¼ï¼æ¬¡ãã£ãã·ã¥ã§ãããã ãã¼ããããªãã¸ã§ã¯ãããã¹ã¦ä¿æãã¾ãã ããããããªã¯ã¨ã¹ãï¼ã¬ã¹ãã³ã¹ã®ãµã¤ã¯ã«ãæ°åã§ããã°ããã®æ¦ç¥ã使ãã¾ãã ï¼ã¤ã®å¯¾è©±ã®ããã ãã« <literal>Session</literal> ã使ãã¹ãã§ãã ãªããªããããã«æ°é®®ã§ãªããã¼ã¿ãæã¤ããã§ãã"
+
+#: index.docbook:729
+msgid "Also note that you should keep the disconnected <literal>Session</literal> close to the persistence layer. In other words, use an EJB stateful session bean to hold the <literal>Session</literal> in a three-tier environment, and don't transfer it to the web layer (or even serialize it to a separate tier) to store it in the <literal>HttpSession</literal>."
+msgstr "ï¼Hibernateã®ä»¥åã®ãã¼ã¸ã§ã³ã¯ãæ示ç㪠<literal>Session</literal> ã® åæã¨åæ¥ç¶ãå¿
è¦ã ã£ããã¨ã«æ³¨æãã¦ãã ããã ãããã®ã¡ã½ããã¯éæ¨å¥¨ã«ãªãã¾ããã ãªããªãããã©ã³ã¶ã¯ã·ã§ã³ã®éå§ã¨çµäºã¯åãå¹æãããããã§ããï¼"
+
+#: index.docbook:737
+msgid "The extended session pattern, or <emphasis>session-per-conversation</emphasis>, is more difficult to implement with automatic current session context management. You need to supply your own implementation of the <literal>CurrentSessionContext</literal> for this, see the Hibernate Wiki for examples."
+msgstr "åæãã <literal>Session</literal> ãæ°¸ç¶å層ã®è¿ãã§ä¿æãã¹ãã§ãããã¨ã« 注æãã¦ãã ããã è¨ãæããã¨ãï¼å±¤ç°å¢ã®ä¸ã§ <literal>Session</literal> ãä¿æããããã«ã EJBã¹ãã¼ããã«ã»ãã·ã§ã³Beanã使ã£ã¦ãã ããã <literal>HttpSession</literal> ã«æ ¼ç´ããããã«ãWeb層ã«è»¢éããªãã§ãã ãã ï¼å¥ã®å±¤ã¸ã®ã·ãªã¢ã©ã¤ãºãããªãã§ãã ããï¼ã"
+
+#: index.docbook:747
+msgid "Detached objects and automatic versioning"
+msgstr "æ¡å¼µã»ãã·ã§ã³ãã¿ã¼ã³ï¼ãããã¯ã<emphasis>session-per-conversation</emphasis>ï¼ã¯ã èªåçãªã«ã¬ã³ãã»ãã·ã§ã³ã³ã³ããã¹ã管çãå®æ½ããããé£ããã ãã®ããã«ãããªã㯠<literal>CurrentSessionContext</literal> ã®å®è£
ãä¾çµ¦ããå¿
è¦ãããã¾ãã Hibernate Wikiã«ããä¾ãåç
§ãã¦ãã ããã"
+
+#: index.docbook:749
+msgid "Each interaction with the persistent store occurs in a new <literal>Session</literal>. However, the same persistent instances are reused for each interaction with the database. The application manipulates the state of detached instances originally loaded in another <literal>Session</literal> and then reattaches them using <literal>Session.update()</literal>, <literal>Session.saveOrUpdate()</literal>, or <literal>Session.merge()</literal>."
+msgstr "ãã¿ããããããªãã¸ã§ã¯ãã¨èªåãã¼ã¸ã§ãã³ã°"
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "foo.setProperty(\"bar\");\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "session.saveOrUpdate(foo); // Use merge() if \"foo\" might have been loaded already\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr "æ°ãã <literal>Session</literal>ã«ãããæ°¸ç¶åã¹ãã¢ï¼è¨³æ³¨ï¼ï¼¤ï¼¢ï¼ã¨ã®å¯¾è©±ãçºçãã¾ãã ã¾ãä¸æ¹ãåãæ°¸ç¶æ§ã¤ã³ã¹ã¿ã³ã¹ãããã¼ã¿ãã¼ã¹ã¨ã®å¯¾è©±ãã¨ã«åå©ç¨ããã¾ãã ã¢ããªã±ã¼ã·ã§ã³ã¯ãå
ã
ã¯ä»ã® <literal>Session</literal> ã§ãã¼ãããã ãã¿ãããããã¤ã³ã¹ã¿ã³ã¹ã®ç¶æ
ãæä½ãã¾ãã ããã¦ã<literal>Session.update()</literal> ãããã¯ã<literal>Session.saveOrUpdate()</literal>ã <literal>Session.merge()</literal> ã使ã£ã¦ããããã®ã¤ã³ã¹ã¿ã³ã¹ãå追å ãã¾ãã"
+
+#: index.docbook:759
+msgid "Again, Hibernate will check instance versions during flush, throwing an exception if conflicting updates occured."
+msgstr ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "foo.setProperty(\"bar\");\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "session.saveOrUpdate(foo); // Use merge() if \"foo\" might have been loaded already\n"
+ "t.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:764
+msgid "You may also call <literal>lock()</literal> instead of <literal>update()</literal> and use <literal>LockMode.READ</literal> (performing a version check, bypassing all caches) if you are sure that the object has not been modified."
+msgstr "ãã®å ´åããã¯ããHibernateã¯ãã©ãã·ã¥ããéã«ãã¤ã³ã¹ã¿ã³ã¹ã®ãã¼ã¸ã§ã³ããã§ãã¯ãã¾ãã æ´æ°ã®ç«¶åãçºçããå ´åã«ã¯ãä¾å¤ãæãã¾ãã"
+
+#: index.docbook:773
+msgid "Customizing automatic versioning"
+msgstr "ãªãã¸ã§ã¯ããä¿®æ£ããã¦ããªããã¨ã確信ãã¦ããå ´åã¯ã <literal>update()</literal> ã®ä»£ããã«ã<literal>LockMode.READ</literal> ã使ã£ã¦ã <literal>lock()</literal> ãå¼ã³åºããã¨ãã§ãã¾ã ï¼ãã¹ã¦ã®ãã£ãã·ã¥ãè¿åãããã¼ã¸ã§ã³ãã§ãã¯ãå®æ½ãã¾ãï¼ã"
+
+#: index.docbook:775
+msgid "You may disable Hibernate's automatic version increment for particular properties and collections by setting the <literal>optimistic-lock</literal> mapping attribute to <literal>false</literal>. Hibernate will then no longer increment versions if the property is dirty."
+msgstr "èªåãã¼ã¸ã§ãã³ã°ã®ã«ã¹ã¿ãã¤ãº"
+
+#: index.docbook:782
+msgid "Legacy database schemas are often static and can't be modified. Or, other applications might also access the same database and don't know how to handle version numbers or even timestamps. In both cases, versioning can't rely on a particular column in a table. To force a version check without a version or timestamp property mapping, with a comparison of the state of all fields in a row, turn on <literal>optimistic-lock=\"all\"</literal> in the <literal><class></literal> mapping. Note that this concepetually only works if Hibernate can compare the old and new state, i.e. if you use a single long <literal>Session</literal> and not session-per-request-with-detached-objects."
+msgstr "ãããã³ã°ã® <literal>optimistic-lock</literal> å±æ§ã« <literal>false</literal> ãè¨å®ãããã¨ã«ãããç¹å®ã®ããããã£ãã³ã¬ã¯ã·ã§ã³ã®ããã« èªåãã¼ã¸ã§ã³ã¤ã³ã¯ãªã¡ã³ããç¡å¹ã«ã§ãã¾ãã ããããã£ããã¼ãã£ã§ãã£ã¦ãããã¼ã¸ã§ã³ãã¤ã³ã¯ãªã¡ã³ããã¾ããã"
+
+#: index.docbook:793
+msgid "Sometimes concurrent modification can be permitted as long as the changes that have been made don't overlap. If you set <literal>optimistic-lock=\"dirty\"</literal> when mapping the <literal><class></literal>, Hibernate will only compare dirty fields during flush."
+msgstr "ã¬ã¬ã·ã¼ã®ãã¼ã¿ãã¼ã¹ã¹ãã¼ãã¯ããã°ãã°åºå®çã§ãããå¤æ´ã§ãã¾ããã ã¾ãã¯ãä»ã®ã¢ããªã±ã¼ã·ã§ã³ãåããã¼ã¿ãã¼ã¹ã«ã¢ã¯ã»ã¹ããªããã°ãªããã ãã®ã¢ããªã±ã¼ã·ã§ã³ã¯ãã¼ã¸ã§ã³çªå·ãã¿ã¤ã ã¹ã¿ã³ãããæä½ããæ¹æ³ãç¥ãã¾ããã ã©ã¡ãã®å ´åãããã¼ãã«ã®ç¹å®ã®ã«ã©ã ãå½ã¦ã«ãã¦ããã¼ã¸ã§ãã³ã°ãè¡ãã¾ããã ãã¼ã¸ã§ã³ãã¿ã¤ã ã¹ã¿ã³ãã®ããããã£ããããã³ã°ããã«ããã¼ã¸ã§ã³ãã§ãã¯ãããããã«ã <literal><class></literal> ãããã³ã°ã« <literal>optimistic-lock=\"all\"</literal> ã æå®ãã¦ãã ããã è¡ã®ãã¹ã¦ã®ãã£ã¼ã«ãã®ç¶æ
ãæ¯è¼ããããã«ãªãã¾ãã ããã¯ãHibernateãå¤ãç¶æ
ã¨æ°ããç¶æ
ãæ¯è¼ã§ããå ´åã«ã çè«çã«åä½ããã ãã§ãããã¨ã«æ³¨æãã¦ãã ããã ä¾ãã!
°ãsession-per-request-with-detached-objects ã§ã¯ãªãã ï¼ã¤ã®é·ã <literal>Session</literal> ã使ãå ´åã§ãã"
+
+#: index.docbook:799
+msgid "In both cases, with dedicated version/timestamp columns or with full/dirty field comparison, Hibernate uses a single <literal>UPDATE</literal> statement (with an appropriate <literal>WHERE</literal> clause) per entity to execute the version check and update the information. If you use transitive persistence to cascade reattachment to associated entities, Hibernate might execute uneccessary updates. This is usually not a problem, but <emphasis>on update</emphasis> 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\"</literal> in the <literal><class></literal> mapping, forcing Hibernate to <literal>SELECT</literal> the instance to ensure that changes did actually occur, before updating the row."
+msgstr "ã¨ãã©ããè¡ãããå¤æ´ãéãªããªãéããåæã«è¡ãããå¤æ´ãåãå
¥ãããã¨ãã§ãã¾ãã <literal><class></literal> ãããã³ã°ã« <literal>optimistic-lock=\"dirty\"</literal> ãè¨å®ããå ´åããã©ãã·ã¥ããéã«ãHibernateã¯ãã¼ãã£ãã£ã¼ã«ãã®ã¿ãæ¯è¼ãã¾ãã"
+
+#: index.docbook:817
+msgid "Pessimistic Locking"
+msgstr "å°ç¨ã®ãã¼ã¸ã§ã³ï¼ã¿ã¤ã ã¹ã¿ã³ãã®ã«ã©ã ã使ãå ´åã ãããã¯ãã¹ã¦ï¼ãã¼ãã£ã®ãã£ã¼ã«ããæ¯è¼ããå ´åã©ã¡ãã§ãã£ã¦ãã Hibernateã¯ã¨ã³ãã£ãã£ãã¨ã«1ã¤ã® <literal>UPDATE</literal> æã ï¼é©å㪠<literal>WHERE</literal> ç¯ã¨å
±ã«ï¼ä½¿ãã ãã¼ã¸ã§ã³ãã§ãã¯ã¨æ
å ±ã®æ´æ°ãè¡ãã¾ãã é¢é£ããã¨ã³ãã£ãã£ã®å追å ãã«ã¹ã±ã¼ãããããã«ã é£éçãªæ°¸ç¶åã使ç¨ããå ´åãä¸å¿
è¦ãªæ´æ°ãå®è¡ããããããã¾ããã ããã¯é常åé¡ã«ãªãã¾ããã ããããåé¢ããã¤ã³ã¹ã¿ã³ã¹ãå¤æ´ãã¦ããªãã¨ãã ãã¼ã¿ãã¼ã¹ã® <emphasis>on update</emphasis> ããªã¬ã¼ãå®è¡ãããããããã¾ããã <literal><class></literal> ãããã³ã°ã« <literal>select-before-update=\"true\"</literal> ãè¨å®ãããã¨ã«ãã£ã¦ã ãã®æ¯ãèããã«ã¹ã¿ãã¤ãºã§ã!
ã¾ãã 確å®ã«å¤æ´ããããã確èªããããã«ãè¡ãæ´æ°ããåã«ã å¿
ãã¤ã³ã¹ã¿ã³ã¹ã <literal>SELECT</literal> ãã¾ãã"
+
+#: index.docbook:819
+msgid "It is not intended that users spend much time worring about locking strategies. Its 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 sometimes wish to obtain exclusive pessimistic locks, or re-obtain locks at the start of a new transaction."
+msgstr "æ²è¦³çããã¯"
+
+#: index.docbook:826
+msgid "Hibernate will always use the locking mechanism of the database, never lock objects in memory!"
+msgstr "ã¦ã¼ã¶ãããã¯æ¦ç¥ã«æ©ãã®ã«å¤ãã®æéãè²»ãããã¨ãæå³ãã¦ãã¾ããã é常ã¯ãJDBCã³ãã¯ã·ã§ã³ã«åé¢ã¬ãã«ãæå®ãã åã«ãã¼ã¿ãã¼ã¹ã«ãã¹ã¦ã®ä»äºããããã°ååã§ãã ããããªãããé«åº¦ãªã¦ã¼ã¶ã¯ãæä»çãªæ²è¦³çããã¯ãç²å¾ãããã¨ãã æ°ãããã©ã³ã¶ã¯ã·ã§ã³ãéå§ãããéã«ããã¯ãåç²å¾ãããã¨ã ã¨ãã©ãæãããããã¾ããã"
+
+#: index.docbook:831
+msgid "The <literal>LockMode</literal> class defines the different lock levels that may be acquired by Hibernate. A lock is obtained by the following mechanisms:"
+msgstr "Hibernateã¯ãã¤ããã¼ã¿ãã¼ã¹ã®ããã¯ã®ä»çµã¿ã使ãã¾ãã ã¡ã¢ãªå
ã®ãªãã¸ã§ã¯ãã決ãã¦ããã¯ãã¾ããï¼"
+
+#: index.docbook:838
+msgid "<literal>LockMode.WRITE</literal> is acquired automatically when Hibernate updates or inserts a row."
+msgstr "<literal>LockMode</literal> ã¯ã©ã¹ã¯ãHibernateãç²å¾ã§ããç°ãªãããã¯ã¬ãã«ãå®ç¾©ãã¾ãã 以ä¸ã®ä»çµã¿ã«ãããããã¯ãç²å¾ã§ãã¾ãã"
+
+#: index.docbook:844
+msgid "<literal>LockMode.UPGRADE</literal> may be acquired upon explicit user request using <literal>SELECT ... FOR UPDATE</literal> on databases which support that syntax."
+msgstr "<literal>LockMode.WRITE</literal> ã¯ã Hibernateãè¡ãæ´æ°ãããã¯æ¿å
¥ããéã«èªåçã«å¾ããã¾ãã"
+
+#: index.docbook:850
+msgid "<literal>LockMode.UPGRADE_NOWAIT</literal> may be acquired upon explicit user request using a <literal>SELECT ... FOR UPDATE NOWAIT</literal> under Oracle."
+msgstr "<literal>LockMode.UPGRADE</literal> ã¯ã ãã¼ã¿ãã¼ã¹ã§ãµãã¼ãããã¦ããææ³ <literal>SELECT ... FOR UPDATE</literal> ã使ã£ããæ示çãªã¦ã¼ã¶ã¼è¦æ±ã«ããå¾ãããããããã¾ããã"
+
+#: index.docbook:856
+msgid "<literal>LockMode.READ</literal> is acquired automatically when Hibernate reads data under Repeatable Read or Serializable isolation level. May be re-acquired by explicit user request."
+msgstr "<literal>LockMode.UPGRADE_NOWAIT</literal> ã¯ã Oracle 㧠<literal>SELECT ... FOR UPDATE NOWAIT</literal> ã使ã£ãã æ示çãªã¦ã¼ã¶ã¼è¦æ±ã«ããå¾ãããããããã¾ããã"
+
+#: index.docbook:863
+msgid "<literal>LockMode.NONE</literal> represents the absence of a lock. All objects switch to this lock mode at the end of a <literal>Transaction</literal>. Objects associated with the session via a call to <literal>update()</literal> or <literal>saveOrUpdate()</literal> also start out in this lock mode."
+msgstr "<literal>LockMode.READ</literal> ã¯ã Repeatable Readãããã¯Serializableã®åé¢ã¬ãã«ã§ããã¼ã¿ãèªãã éã«èªåçã«å¾ããã¾ãã ãããããæ示çãªã¦ã¼ã¶ã¼è¦æ±ã«ãããååå¾ããã¾ãã"
+
+#: index.docbook:872
+msgid "The \"explicit user request\" is expressed in one of the following ways:"
+msgstr "<literal>LockMode.NONE</literal> ã¯ãããã¯ããªããã¨ã表ãã¾ãã <literal>Transaction</literal> ã®çµããã«ã ãã¹ã¦ã®ãªãã¸ã§ã¯ãã¯ãã®ããã¯ã¢ã¼ãã«åãæ¿ããã¾ãã <literal>update()</literal> ã <literal>saveOrUpdate()</literal> ãå¼ã³åºããã¨ã«ãã£ã¦ã ã»ãã·ã§ã³ã«é¢é£ä»ãããããªãã¸ã§ã¯ããããã®ããã¯ã¢ã¼ãã§åºçºãã¾ãã"
+
+#: index.docbook:878
+msgid "A call to <literal>Session.load()</literal>, specifying a <literal>LockMode</literal>."
+msgstr "ãæ示çãªã¦ã¼ã¶ã¼è¦æ±ãã¨ã¯ãä¸è¨ã®æ¹æ³ã®ï¼ã¤ã§è¨ã表ãã¾ãã"
+
+#: index.docbook:883
+msgid "A call to <literal>Session.lock()</literal>."
+msgstr "<literal>LockMode</literal> ãæå®ãã <literal>Session.load()</literal> ã®å¼ã³åºãã"
+
+#: index.docbook:888
+msgid "A call to <literal>Query.setLockMode()</literal>."
+msgstr "<literal>Session.lock()</literal> ã®å¼ã³åºãã"
+
+#: index.docbook:894
+msgid "If <literal>Session.load()</literal> is called with <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, and the requested object was not yet loaded by the session, the object is loaded using <literal>SELECT ... FOR UPDATE</literal>. If <literal>load()</literal> is called for an object that is already loaded with a less restrictive lock than the one requested, Hibernate calls <literal>lock()</literal> for that object."
+msgstr "<literal>Query.setLockMode()</literal> ã®å¼ã³åºãã"
+
+#: index.docbook:903
+msgid "<literal>Session.lock()</literal> performs a version number check if the specified lock mode is <literal>READ</literal>, <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>. (In the case of <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, <literal>SELECT ... FOR UPDATE</literal> is used.)"
+msgstr "<literal>UPGRADE</literal> ããã㯠<literal>UPGRADE_NOWAIT</literal> ãæå®ããã <literal>Session.load()</literal> ãå¼ã³åºããã ãã¤è¦æ±ããããªãã¸ã§ã¯ããã»ãã·ã§ã³ã«ãã£ã¦ã¾ã ãã¼ãããã¦ããªãã£ãå ´åã¯ã <literal>SELECT ... FOR UPDATE</literal> ã使ã£ã¦ããªãã¸ã§ã¯ãããã¼ãããã¾ãã <literal>load()</literal> ã§å¼ã³åºããããªãã¸ã§ã¯ããã è¦æ±ããã¦ããããå¶éãå°ãªãããã¯ã§ãã§ã«ãã¼ãããã¦ããå ´åã¯ã Hibernateã¯ãã®ãªãã¸ã§ã¯ãã®ããã«ã<literal>lock()</literal> ãå¼ã³åºãã¾ãã"
+
+#: index.docbook:910
+msgid "If the database does not support the requested lock mode, Hibernate will use an appropriate alternate mode (instead of throwing an exception). This ensures that applications will be portable."
+msgstr "æå®ãããããã¯ã¢ã¼ãã <literal>READ</literal> ãããã¯ã<literal>UPGRADE</literal>ã <literal>UPGRADE_NOWAIT</literal> ã ã£ãå ´åã<literal>Session.lock()</literal> ã¯ããã¼ã¸ã§ã³çªå·ã®ãã§ãã¯ãå®æ½ãã¾ãã ï¼<literal>UPGRADE</literal> ããã㯠<literal>UPGRADE_NOWAIT</literal> ã®å ´åã <literal>SELECT ... FOR UPDATE</literal> ã使ããã¾ããï¼"
+
+#: index.docbook:919
+msgid "Connection Release Modes"
+msgstr "ãã¼ã¿ãã¼ã¹ãè¦æ±ãããããã¯ã¢ã¼ãããµãã¼ããã¦ããªãå ´åã Hibernateã¯ï¼ä¾å¤ãæãã代ããã«ãï¼é©åãªä»£ããã®ã¢ã¼ãã使ãã¾ãã ããã¯ãã¢ããªã±ã¼ã·ã§ã³ããã¼ã¿ãã«ã§ãããã¨ãä¿è¨¼ãã¾ãã"
+
+#: index.docbook:921
+msgid "The legacy (2.x) behavior of Hibernate in regards to JDBC connection management was that a <literal>Session</literal> would obtain a connection when it was first needed and then hold unto that connection until the session was closed. Hibernate 3.x introduced the notion of connection release modes to tell a session how to handle its JDBC connections. Note that the following discussion is pertinent only to connections provided through a configured <literal>ConnectionProvider</literal>; 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</literal>:"
+msgstr "ã³ãã¯ã·ã§ã³éæ¾ã¢ã¼ã"
+
+#: index.docbook:935
+msgid "<literal>ON_CLOSE</literal> - is essentially the legacy behavior described above. The Hibernate session obatins a connection when it first needs to perform some JDBC access and holds unto that connection until the session is closed."
+msgstr "Hibernateã®ã¬ã¬ã·ã¼ï¼2.xï¼ã®JDBCã³ãã¯ã·ã§ã³ç®¡çã«é¢ããæ¯ãèãã¯ã æåã«å¿
è¦ã¨ããéã« <literal>Session</literal> ãã³ãã¯ã·ã§ã³ãå¾ãã¨ãããã®ã§ããã ããã¦ãã»ãã·ã§ã³ãéããããã¾ã§ããã®ã³ãã¯ã·ã§ã³ãä¿æãã¾ããã Hibernate 3.xã¯ãã»ãã·ã§ã³ã«JDBCã³ãã¯ã·ã§ã³ãã©ã®ããã«å¶å¾¡ããããä¼ãã ã³ãã¯ã·ã§ã³éæ¾ã¢ã¼ãã¨ããæ¦å¿µãå°å
¥ãã¾ããã 以éã®è°è«ã¯ãæ§æããã <literal>ConnectionProvider</literal> ãéãã¦æä¾ããã ã³ãã¯ã·ã§ã³ã«é©åã§ãããã¨ã«æ³¨æãã¦ãã ããã ç°ãªãéæ¾ã¢ã¼ãã¯ã<literal>org.hibernate.ConnectionReleaseMode</literal> ã« åæãããå¤ã«ãã確èªããã¾ãã"
+
+#: index.docbook:942
+msgid "<literal>AFTER_TRANSACTION</literal> - says to release connections after a <literal>org.hibernate.Transaction</literal> has completed."
+msgstr "<literal>ON_CLOSE</literal> - æ¬è³ªçã«ä¸è¨ã§è¿°ã¹ãã¬ã¬ã·ã¼ã®æ¯ãèãã§ãã Hibernateã»ãã·ã§ã³ã¯æåã«JDBCã¢ã¯ã»ã¹ãå®è¡ããå¿
è¦ãããéã«ã³ãã¯ã·ã§ã³ãå¾ã¾ãã ããã¦ãã»ãã·ã§ã³ãéããããã¾ã§ãã³ãã¯ã·ã§ã³ãä¿æãã¾ãã"
+
+#: index.docbook:948
+msgid "<literal>AFTER_STATEMENT</literal> (also referred to as aggressive release) - says to release connections after each and 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</literal>."
+msgstr "<literal>AFTER_TRANSACTION</literal> - <literal>org.hibernate.Transaction</literal> ãå®äºããå¾ã ã³ãã¯ã·ã§ã³ãéæ¾ãã¾ãã"
+
+#: index.docbook:958
+msgid "The configuration parameter <literal>hibernate.connection.release_mode</literal> is used to specify which release mode to use. The possible values:"
+msgstr "<literal>AFTER_STATEMENT</literal> ï¼ç©æ¥µçãªéæ¾ã¨ãå¼ã°ããï¼ - ãã¹ã¦ã®ã¹ãã¼ãã¡ã³ããããããå®è¡ãããå¾ãã³ãã¯ã·ã§ã³ãéæ¾ããã¾ãã ã¹ãã¼ãã¡ã³ããã»ãã·ã§ã³ã«é¢é£ãããªã½ã¼ã¹ãéããã¾ã¾ã«ããå ´åã¯ã ãã®ç©æ¥µçãªéæ¾ã¯ã¹ãããããã¾ãã ä»ã®ã¨ããããããèµ·ããã®ã¯ <literal>org.hibernate.ScrollableResults</literal> ã使ãããå ´åã®ã¿ã§ãã"
+
+#: index.docbook:965
+msgid "<literal>auto</literal> (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. It is rarely a good idea to 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>hibernate.connection.release_mode</literal> ã¯ã使ç¨ããéæ¾ã¢ã¼ããæå®ããããã«ä½¿ãã¾ãã æå®ã§ããå¤ã¯æ¬¡ã®éãã§ãã"
+
+#: index.docbook:975
+msgid "<literal>on_close</literal> - says to use ConnectionReleaseMode.ON_CLOSE. This setting is left for backwards compatibility, but its use is highly discouraged."
+msgstr "<literal>auto</literal> ï¼ããã©ã«ãï¼ - ãããé¸æãã㨠<literal>org.hibernate.transaction.TransactionFactory.getDefaultReleaseMode()</literal> ã¡ã½ããã«ãã£ã¦è¿ãããéæ¾ã¢ã¼ãã«å§è²ããã¾ãã ãã®ã¡ã½ããã¯ã JTATransactionFactoryã«ã¯ConnectionReleaseMode.AFTER_STATEMENTãè¿ãã JDBCTransactionFactoryã«ã¯ConnectionReleaseMode.AFTER_TRANSACTIONãè¿ãã¾ãã ãã®ããã©ã«ãã®æ¯ãèããå¤ãã¦ãã¾ããã£ã試ããããã¾ããã ããã¯ããã®è¨å®å¤ãåå ã§èµ·ããé害ã¯ã ã¦ã¼ã¶ã³ã¼ãã®ä¸ã§ãã°ãééã£ãæ¡ä»¶ã«ãªããããããã§ãã"
+
+#: index.docbook:981
+msgid "<literal>after_transaction</literal> - says to use 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>on_close</literal> - ConnectionReleaseMode.ON_CLOSEã使ãã¾ãã ãã®è¨å®ã¯å¾æ¹äºæã®ããã«æ®ããã¦ãã¾ããã使ããªããã¨ãå¼·ãå§ãã¾ãã"
+
+#: index.docbook:989
+msgid "<literal>after_statement</literal> - says to use ConnectionReleaseMode.AFTER_STATEMENT. Additionally, the configured <literal>ConnectionProvider</literal> is consulted to see if it supports this setting (<literal>supportsAggressiveRelease()</literal>). 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 we make a call into <literal>ConnectionProvider.getConnection()</literal> or in auto-commit environments where it does not matter whether we get back the same connection."
+msgstr "<literal>after_transaction</literal> - ConnectionReleaseMode.AFTER_TRANSACTIONã使ãã¾ãã ãã®è¨å®ã¯JTAç°å¢ã®ä¸ã§ã¯ä½¿ãã¹ãã§ã¯ããã¾ããã ConnectionReleaseMode.AFTER_TRANSACTIONãæå®ããèªåã³ãããã¢ã¼ãã®ä¸ã§ã¯ã éæ¾ã¢ã¼ããAFTER_STATEMENTã§ãããã®ããã«ãã³ãã¯ã·ã§ã³ã¯éæ¾ããããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:1153
+msgid "appended paragraph 1"
+msgstr "<literal>after_statement</literal> - ConnectionReleaseMode.AFTER_STATEMENTã使ãã¾ãã ããã«ãè¨å®ããã <literal>ConnectionProvider</literal> ã¯ã ãã®è¨å® (<literal>supportsAggressiveRelease()</literal>) ããµãã¼ããããã©ãã ã調ã¹ãããã«ä½¿ç¨ãã¾ãã ããããã§ãªãå ´åãéæ¾ã¢ã¼ãã¯ConnectionReleaseMode.AFTER_TRANSACTION ã«ãªã»ããããã¾ãã ãã®è¨å®ã¯æ¬¡ã®ç°å¢ã§ã®ã¿å®å
¨ã§ãã ããã¯ã<literal>ConnectionProvider.getConnection()</literal> ãå¼ã³åºããã³ã« åºç¤ã¨ãªãJDBCã³ãã¯ã·ã§ã³ãåããã®ãåå¾ã§ãããã åãã³ãã¯ã·ã§ã³ãå¾ããããã¨ãåé¡ã¨ãªããªãèªåã³ãããç°å¢ã®ä¸ã§ãã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/tutorial.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/tutorial.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/tutorial.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,2432 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:7
+msgid "Introduction to Hibernate"
+msgstr "Hibernateã®å°å
¥"
+
+#: index.docbook:10
+msgid "Preface"
+msgstr "<title>åæ¸ã</title>"
+
+#: index.docbook:12
+msgid "This chapter is an introductory tutorial for new users of Hibernate. We start with a simple command line application using an in-memory database and develop it in easy to understand steps."
+msgstr "ãã®ç« ã¯Hibernateãåãã¦ä½¿ãã¦ã¼ã¶åãã®å
¥éçãªãã¥ã¼ããªã¢ã«ã§ãã ã¤ã³ã¡ã¢ãªãã¼ã¿ãã¼ã¹ã使ãç°¡åãªã³ãã³ãã©ã¤ã³ã¢ããªã±ã¼ã·ã§ã³ããå§ãã ä¸æ©ä¸æ©ããããããããæ¹ã§éçºãé²ãã¾ãã"
+
+#: index.docbook:18
+msgid "This tutorial is intended for new users of Hibernate but requires Java and SQL knowledge. It is based on a tutorial by Michael Gloegl, the third-party libraries we name are for JDK 1.4 and 5.0. You might need others for JDK 1.3."
+msgstr "ãã®ãã¥ã¼ããªã¢ã«ã¯Hibernateãåãã¦ä½¿ãã¦ã¼ã¶ãæ³å®ãã¦ãã¾ããã ç解ããã«ã¯Javaã¨SQLã«ã¤ãã¦ã®ç¥èãå¿
è¦ã§ãã ããã¯Michael Gloeglã®æã«ãããã¥ã¼ããªã¢ã«ãä¸æ·ãã«ãã¦ãã¾ããã ããã§ãµã¼ããã¼ãã£ã©ã¤ãã©ãªã¨è¨ã£ã¦ããã®ã¯ãJDK 1.4ã¨5.0ç¨ã®ãã®ã§ãã JDK 1.3ãå©ç¨ããã®ã§ããã°ä»ã®ã©ã¤ãã©ãªãå¿
è¦ããããã¾ããã"
+
+#: index.docbook:24
+msgid "The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr "ãã¥ã¼ããªã¢ã«ã®ã½ã¼ã¹ã³ã¼ãã¯Hibernateãã£ã¹ããªãã¥ã¼ã·ã§ã³ã® <literal>doc/reference/tutorial/</literal> ã«ããã¾ãã"
+
+#: index.docbook:32
+msgid "Part 1 - The first Hibernate Application"
+msgstr "ãã¼ã1 - åãã¦ã®Hibernateã¢ããªã±ã¼ã·ã§ã³"
+
+#: index.docbook:34
+msgid "First, we'll create a simple console-based Hibernate application. We use an Java database (HSQL DB), so we do not have to install any database server."
+msgstr "æåã«ã³ã³ã½ã¼ã«ãã¼ã¹ã®ç°¡åãªHibernateã¢ããªã±ã¼ã·ã§ã³ãä½æãã¾ãã Javaãã¼ã¿ãã¼ã¹ï¼HSQL DBï¼ãå©ç¨ããã®ã§ã ãã¼ã¿ãã¼ã¹ãµã¼ããã¤ã³ã¹ãã¼ã«ããå¿
è¦ã¯ããã¾ããã"
+
+#: index.docbook:39
+msgid "Let's assume we need a small database application that can store events we want to attend, and information about the hosts of these events."
+msgstr "ä»®ã«å°ããªãã¼ã¿ãã¼ã¹ã¢ããªã±ã¼ã·ã§ã³ãå¿
è¦ã ã¨ãã¾ãããã ãã®ã¢ããªã±ã¼ã·ã§ã³ã«ã¯åºå¸ãããã¤ãã³ãã¨ã ãã®ã¤ãã³ãã®ãã¹ãã«ã¤ãã¦ã®æ
å ±ãæ ¼ç´ãããã®ã¨ãã¾ãã"
+
+#: index.docbook:44
+msgid "The first thing we do, is set up our development directory and put all the Java libraries we need into it. Download the Hibernate distribution from the Hibernate website. Extract the package and place all required libraries found in <literal>/lib</literal> into into the <literal>/lib</literal> directory of your new development working directory. It should look like this:"
+msgstr "ã¾ãæåã«ãããã¨ã¯éçºç¨ã®ãã£ã¬ã¯ããªãã»ããã¢ãããã¦ã å¿
è¦ã¨ãªããã¹ã¦ã®Javaã©ã¤ãã©ãªãé
ç½®ãããã¨ã§ãã Hibernateã¦ã§ããµã¤ãããHibernateãã£ã¹ããªãã¥ã¼ã·ã§ã³ããã¦ã³ãã¼ããã¦ãã ããã ãã¡ã¤ã«ã解åã㦠<literal>/lib</literal> ã«ããå¿
è¦ãªã©ã¤ãã©ãªã®ãã¹ã¦ãã æ°ããéçºç¨ãã£ã¬ã¯ããªã® <literal>/lib</literal> ãã£ã¬ã¯ããªã«é
ç½®ãã¦ãã ããã ãã®ããã«ãªã£ã¦ããã¯ãã§ãï¼"
+
+#: index.docbook:52
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " antlr.jar\n"
+ " cglib.jar\n"
+ " asm.jar\n"
+ " asm-attrs.jars\n"
+ " commons-collections.jar\n"
+ " commons-logging.jar\n"
+ " hibernate3.jar\n"
+ " jta.jar\n"
+ " dom4j.jar\n"
+ " log4j.jar ]]>"
+msgstr ""
+ "<![CDATA[.
+\n"
+ "+lib
+\n"
+ " antlr.jar
+\n"
+ " cglib.jar
+\n"
+ " asm.jar
+\n"
+ " asm-attrs.jars
+\n"
+ " commons-collections.jar
+\n"
+ " commons-logging.jar
+\n"
+ " hibernate3.jar
+\n"
+ " jta.jar
+\n"
+ " dom4j.jar
+\n"
+ " log4j.jar ]]>"
+
+#: index.docbook:54
+msgid "This is the minimum set of required libraries (note that we also copied hibernate3.jar, the main archive) for Hibernate <emphasis>at the time of writing</emphasis>. The Hibernate release you are using might require more or less libraries. See the <literal>README.txt</literal> file in the <literal>lib/</literal> directory of the Hibernate distribution for more information about required and optional third-party libraries. (Actually, Log4j is not required but preferred by many developers.)"
+msgstr "ããã <emphasis>æ¬ããã¥ã¡ã³ãå·çæç¹ã§ã®</emphasis> Hibernateã®å¿
è¦æä½éã®ã©ã¤ãã©ãªã§ã ï¼ã¡ã¤ã³ã¢ã¼ã«ã¤ãã®hibernate3.jarãã³ãã¼ãã¦ãããã¨ã«æ³¨æãã¦ãã ããï¼ã Hibernateã®ãã¼ã¸ã§ã³ã«ãã£ã¦ã¯ããã«å¿
è¦ãªã©ã¤ãã©ãªããä¸è¦ãªã©ã¤ãã©ãªãããããããã¾ããã Hibernateãã£ã¹ããªãã¥ã¼ã·ã§ã³ã® <literal>lib/</literal> ãã£ã¬ã¯ããªã«ãã <literal>README.txt</literal> ãã¡ã¤ã«ãè¦ã¦ãã ããã å¿
é ã¾ãã¯ãªãã·ã§ã³ã®ãµã¼ããã¼ãã£ã©ã¤ãã©ãªã«ã¤ãã¦ã®æ
å ±ãè¼ãã¦ãã¾ã ï¼å®éLog4jã¯å¿
é ã§ã¯ããã¾ããããå¤ãã®éçºè
ã好ãã§ãã¾ãï¼ã"
+
+#: index.docbook:63
+msgid "Next we create a class that represents the event we want to store in database."
+msgstr "次ã«ãã¼ã¿ãã¼ã¹ã«æ ¼ç´ããã¤ãã³ãã表ãã¯ã©ã¹ãä½æãã¾ãã"
+
+#: index.docbook:68
+msgid "The first class"
+msgstr "æåã®ã¯ã©ã¹"
+
+#: index.docbook:70
+msgid "Our first persistent class is a simple JavaBean class with some properties:"
+msgstr "æåã®æ°¸ç¶ã¯ã©ã¹ã¯ãããããã£ãããã¤ãæã¤ã·ã³ãã«ãªJavaBeanã§ãï¼"
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Event {\n"
+ " private Long id;\n"
+ "\n"
+ " private String title;\n"
+ " private Date date;\n"
+ "\n"
+ " public Event() {}\n"
+ "\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public Date getDate() {\n"
+ " return date;\n"
+ " }\n"
+ "\n"
+ " public void setDate(Date date) {\n"
+ " this.date = date;\n"
+ " }\n"
+ "\n"
+ " public String getTitle() {\n"
+ " return title;\n"
+ " }\n"
+ "\n"
+ " public void setTitle(String title) {\n"
+ " this.title = title;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package events;
+\n"
+ "
+\n"
+ "import java.util.Date;
+\n"
+ "
+\n"
+ "public class Event {
+\n"
+ " private Long id;
+\n"
+ "
+\n"
+ " private String title;
+\n"
+ " private Date date;
+\n"
+ "
+\n"
+ " public Event() {}
+\n"
+ "
+\n"
+ " public Long getId() {
+\n"
+ " return id;
+\n"
+ " }
+\n"
+ "
+\n"
+ " private void setId(Long id) {
+\n"
+ " this.id = id;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public Date getDate() {
+\n"
+ " return date;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public void setDate(Date date) {
+\n"
+ " this.date = date;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public String getTitle() {
+\n"
+ " return title;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public void setTitle(String title) {
+\n"
+ " this.title = title;
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:76
+msgid "You can see that this class uses standard JavaBean naming conventions for property getter and setter methods, as well as private visibility for the fields. This is a recommended design - but not required. Hibernate can also access fields directly, the benefit of accessor methods is robustness for refactoring. The no-argument constructor is required to instantiate an object of this class through reflection."
+msgstr "ã覧ã®ã¨ããããã®ã¯ã©ã¹ã¯ãã£ã¼ã«ããprivateã®å¯è¦æ§ãæã£ã¦ããã®ã¨åæã«ã JavaBeanæ¨æºã®ã²ãã¿ã¼ãã»ãã¿ã¼ã¡ã½ããã®å½åè¦ç´ã«å¾ã£ã¦ãã¾ãã ãã®ãããªè¨è¨ã¯æ¨å¥¨ããã¦ãã¾ããå¿
é ã§ã¯ããã¾ããã ã¢ã¯ã»ãµã¡ã½ãããè¨ããã®ã¯ãªãã¡ã¯ã¿ãªã³ã°ãèããé å¥æ§ã®ããã§ã Hibernateã¯ãã£ã¼ã«ãã«ç´æ¥ã¢ã¯ã»ã¹ãããã¨ãå¯è½ã§ãã å¼æ°ã®ãªãã³ã³ã¹ãã©ã¯ã¿ã¯ããªãã¬ã¯ã·ã§ã³ã§ãã®ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãä½æããããã« å¿
è¦ã§ãã"
+
+#: index.docbook:84
+msgid "The <literal>id</literal> property holds a unique identifier value for a particular event. All persistent entity classes (there are less important dependent classes as well) will need such an identifier property if we want to use the full feature set of Hibernate. In fact, most applications (esp. web applications) need to distinguish objects by identifier, so you should consider this a feature rather than a limitation. However, we usually don't manipulate the identity of an object, hence the setter method should be private. Only Hibernate will assign identifiers when an object is saved. You can see that Hibernate can access public, private, and protected accessor methods, as well as (public, private, protected) fields directly. The choice is up to you and you can match it to fit your application design."
+msgstr "<literal>id</literal> ããããã£ã¯ãããç¹å®ã®ã¤ãã³ãã«å¯¾ããã¦ãã¼ã¯ãªèå¥åã®å¤ãä¿æãã¾ãã Hibernateã®å®å
¨ãªæ©è½ã使ããããã°ããã¹ã¦ã®æ°¸ç¶ã¨ã³ãã£ãã£ã¯ã©ã¹ ï¼ããã»ã©éè¦ã§ã¯ãªãä¾åã¯ã©ã¹ã¨ãããã®ãããã¾ãï¼ ã«ãã®ãããªèå¥åããããã£ãå¿
è¦ã«ãªãã¾ãã äºå®ä¸ã»ã¨ãã©ã®ã¢ããªã±ã¼ã·ã§ã³ï¼ç¹ã«webã¢ããªã±ã¼ã·ã§ã³ï¼ã§ã¯ã èå¥åã§ãªãã¸ã§ã¯ããåºå¥ããå¿
è¦ããããããããã¯å¶éã¨ãããããç¹å¾´ã§ããã¨èããã¹ãã§ãã ãããé常ãªãã¸ã§ã¯ãã®IDãæä½ãããããªãã¨ã¯ãã¾ããã ãã®ããã»ãã¿ã¼ã¡ã½ããã¯privateã«ããã¹ãã§ãã Hibernateã ãããªãã¸ã§ã¯ããã»ã¼ããããã¨ãã«èå¥åã¸å¤ã代å
¥ãã¾ãã Hibernateãï¼public, private, protectedï¼ãã£ã¼ã«ãã«ç´æ¥ã¢ã¯ã»ã¹ã§ããã®ã!
¨åæ§ã«ã public, private, protectedã®ã¢ã¯ã»ãµã¡ã½ããã«ã¢ã¯ã»ã¹ã§ããã¨ãããã¨ããããã§ãããã é¸æã¯ããªãã«ä»»ããã¦ããã®ã§ãããªãã®ã¢ããªã±ã¼ã·ã§ã³ã®è¨è¨ã«åããããã¨ãã§ãã¾ãã"
+
+#: index.docbook:96
+msgid "The no-argument constructor is a requirement for all persistent classes; Hibernate has to create objects for you, using Java Reflection. The constructor can be private, however, package visibility is required for runtime proxy generation and efficient data retrieval without bytecode instrumentation."
+msgstr "å¼æ°ã®ãªãã³ã³ã¹ãã©ã¯ã¿ã¯ãã¹ã¦ã®æ°¸ç¶ã¯ã©ã¹ã«å¿
é ã§ãã ããã¯HibernateãJavaã®ãªãã¬ã¯ã·ã§ã³ã使ã£ã¦ããªãã¸ã§ã¯ããä½æããªããã°ãªããªãããã§ãã ã³ã³ã¹ãã©ã¯ã¿ãprivateã«ãããã¨ã¯å¯è½ã§ããã å®è¡æã®ãããã·çæã¨ããã¤ãã³ã¼ãæä½ãªãã®å¹ççãªãã¼ã¿ã®æ½åºã«ã¯ã packageå¯è¦æ§ãå¿
è¦ã§ãã"
+
+#: index.docbook:103
+msgid "Place this Java source file in a directory called <literal>src</literal> in the development folder, and in its correct package. The directory should now look like this:"
+msgstr "éçºãã©ã«ãã® <literal>src</literal> ã¨ãããã£ã¬ã¯ããªã®é©åãªããã±ã¼ã¸ã«ã ãã®Javaã½ã¼ã¹ãã¡ã¤ã«ãé
ç½®ãã¦ãã ããã ãã®æç¹ã§ãã£ã¬ã¯ããªã¯ä»¥ä¸ã®ããã«ãªã£ã¦ããã¯ãã§ãï¼"
+
+#: index.docbook:108
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java]]>"
+msgstr ""
+ "<![CDATA[.
+\n"
+ "+lib
+\n"
+ " <Hibernate and third-party libraries>
+\n"
+ "+src
+\n"
+ " +events
+\n"
+ " Event.java]]>"
+
+#: index.docbook:110
+msgid "In the next step, we tell Hibernate about this persistent class."
+msgstr "次ã®ã¹ãããã§ã¯ãHibernateã«ãã®æ°¸ç¶ã¯ã©ã¹ã®æ
å ±ãæãã¾ãã"
+
+#: index.docbook:117
+msgid "The mapping file"
+msgstr "ãããã³ã°ãã¡ã¤ã«"
+
+#: index.docbook:119
+msgid "Hibernate needs to know how to load and store objects of the persistent class. This is where the Hibernate mapping file comes into play. The mapping file tells Hibernate what table in the database it has to access, and what columns in that table it should use."
+msgstr "Hibernateã¯ãã©ã®ããã«æ°¸ç¶ã¯ã©ã¹ã®ãªãã¸ã§ã¯ãããã¼ããæ ¼ç´ããã°ããããç¥ãå¿
è¦ãããã¾ãã ããã§Hibernateãããã³ã°ãã¡ã¤ã«ãç»å ´ãã¾ãã ãããã³ã°ãã¡ã¤ã«ã¯ããã¼ã¿ãã¼ã¹å
ã®ã©ã®ãã¼ãã«ã«ã¢ã¯ã»ã¹ããªããã°ãªããªããã ãã®ãã¼ãã«ã®ã©ã®ã«ã©ã ã使ãã¹ããããHibernateã«æãã¾ãã"
+
+#: index.docbook:126
+msgid "The basic structure of a mapping file looks like this:"
+msgstr "ãããã³ã°ãã¡ã¤ã«ã®åºæ¬çãªæ§é ã¯ãã®ããã«ãªãã¾ãï¼"
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "[...]\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>
+\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC
+\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"
+\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">
+\n"
+ "
+\n"
+ "<hibernate-mapping>
+\n"
+ "[...]
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:132
+msgid "Note that the Hibernate DTD is very sophisticated. You can use it for auto-completion of XML mapping elements and attributes in your editor or IDE. You also should open up the DTD file in your text editor - it's the easiest way to get an overview of all elements and attributes and to see the defaults, as well as some comments. Note that Hibernate will not load the DTD file from the web, but first look it up from the classpath of the application. The DTD file is included in <literal>hibernate3.jar</literal> as well as in the <literal>src/</literal> directory of the Hibernate distribution."
+msgstr "Hibernate DTDãé常ã«æ´ç·´ããã¦ãããã¨ã«æ³¨ç®ãã¦ãã ããã ãã®DTDã¯ãã¨ãã£ã¿ãIDEã§ã®XMLãããã³ã°è¦ç´ ã¨å±æ§ã®ãªã¼ãã³ã³ããªã¼ã·ã§ã³æ©è½ã«å©ç¨ã§ãã¾ãã ã¾ãDTDãã¡ã¤ã«ãããã¹ãã¨ãã£ã¿ã§éãã¦ã¿ã¦ãã ããã ã¨ããã®ãããã¹ã¦ã®è¦ç´ ã¨å±æ§ãæ¦è¦³ãã ã³ã¡ã³ããããã©ã«ãã®å¤ãè¦ãã«ã¯ä¸çªç°¡åãªæ¹æ³ã ããã§ãã Hibernateã¯ãwebããDTDãã¡ã¤ã«ããã¼ãããã«ã ã¾ãã¢ããªã±ã¼ã·ã§ã³ã®ã¯ã©ã¹ãã¹ãããããæ¢ãåºããã¨ãããã¨ã«æ³¨æãã¦ãã ããã DTDãã¡ã¤ã«ã¯Hibernateãã£ã¹ããªãã¥ã¼ã·ã§ã³ã® <literal>src/</literal> ãã£ã¬ã¯ããªã¨åæ§ã<literal>hibernate3.jar</literal> ã«ãå«ã¾ãã¦ãã¾ãã"
+
+#: index.docbook:143
+msgid "We will omit the DTD declaration in future examples to shorten the code. It is of course not optional."
+msgstr "以éã®ä¾ã§ã¯ã³ã¼ããçãããããã«DTD宣è¨ãçç¥ãã¾ãã å½ç¶ã§ããããã¯ãªãã·ã§ã³ã§ã¯ããã¾ããã"
+
+#: index.docbook:148
+msgid "Between the two <literal>hibernate-mapping</literal> tags, include a <literal>class</literal> element. All persistent entity classes (again, there might be dependent classes later on, which are not first-class entities) need such a mapping, to a table in the SQL database:"
+msgstr "2ã¤ã® <literal>hibernate-mapping</literal> ã¿ã°ã®éã« <literal>class</literal> è¦ç´ ãå«ãã¦ãã ããã ãã¹ã¦ã®æ°¸ç¶ã¨ã³ãã£ãã£ã¯ã©ã¹ï¼å¿µãæ¼ãã¾ããã ãã¡ã¼ã¹ãã¯ã©ã¹ã®ã¨ã³ãã£ãã£ã§ã¯ãªãä¾åã¯ã©ã¹ã¨ãããã®ãå¾ã»ã©ç»å ´ãã¾ãï¼ ã¯SQLãã¼ã¿ãã¼ã¹å
ã®ãã¼ãã«ã¸ã®ãã®ãããªãããã³ã°ãå¿
è¦ã¨ãã¾ãã"
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ "
+\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">
+\n"
+ "
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:157
+msgid "So far we told Hibernate how to persist and load object of class <literal>Event</literal> to the table <literal>EVENTS</literal>, each instance represented by a row in that table. Now we continue with a mapping of the unique identifier property to the tables primary key. In addition, as we don't want to care about handling this identifier, we configure Hibernate's identifier generation strategy for a surrogate primary key column:"
+msgstr "ããã¾ã§ç§ãã¡ã¯ã<literal>Event</literal> ã¯ã©ã¹ã®ãªãã¸ã§ã¯ãã <literal>EVENTS</literal> ãã¼ãã«ã«å¯¾ãã¦ãã©ã®ããã«æ°¸ç¶åããããã¼ããããããã®ãã Hibernateã«æãã¦ãã¾ãããããã¦åã
ã®ã¤ã³ã¹ã¿ã³ã¹ã¯ãã¼ãã«ã®è¡ã¨ãã¦è¡¨ç¾ããã¾ãã ããã§ã¯å¼ãç¶ããã¼ãã«ã®ä¸»ãã¼ã«å¯¾ããã¦ãã¼ã¯ãªèå¥åããããã£ããããã³ã°ãã¦ããã¾ãã ããã«ããã®èå¥åã®æ±ãã«æ°ã使ããããªãã£ãã®ã¨åæ§ã«ã 代çã®ä¸»ãã¼ã«ã©ã ã«å¯¾ããHibernateã®èå¥åçææ¦ç¥ãè¨å®ãã¾ãã"
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ "
+\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">
+\n"
+ " <id name=\"id\" column=\"EVENT_ID\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:167
+msgid "The <literal>id</literal> element is the declaration of the identifer property, <literal>name=\"id\"</literal> declares the name of the Java property - Hibernate will use the getter and setter methods to access the property. The column attribute tells Hibernate which column of the <literal>EVENTS</literal> table we use for this primary key. The nested <literal>generator</literal> element specifies the identifier generation strategy, in this case we used <literal>native</literal>, which picks the best strategy depending on the configured database (dialect). Hibernate supports database generated, globally unique, as well as application assigned identifiers (or any strategy you have written an extension for)."
+msgstr "<literal>id</literal> è¦ç´ ã¯èå¥åããããã£ã®å®£è¨ã§ããã <literal>name=\"id\"</literal> ã§Javaããããã£ã®ååã宣è¨ãã¾ãã Hibernateã¯ãã®ããããã£ã¸ã¢ã¯ã»ã¹ããããã«ã²ãã¿ã¼ãã»ãã¿ã¼ã¡ã½ããã使ãã¾ãã ã«ã©ã å±æ§ã§ã¯ <literal>EVENTS</literal> ãã¼ãã«ã®ã©ã®ã«ã©ã ã主ãã¼ã¨ãã¦ä½¿ãã®ãã Hibernateã«æãã¾ãã å
¥ãåã«ãªã£ã¦ãã <literal>generator</literal> è¦ç´ ã¯ãèå¥åãçæããæã®æ¦ç¥ãæå®ãã¾ãã ï¼ãã®ä¾ã§ã¯ <literal>native</literal> ãç¨ãã¾ããï¼ã ãã®è¦ç´ ã¯ãè¨å®ãããã¼ã¿ãã¼ã¹ï¼dialectï¼ã«å¯¾ããæè¯ãªèå¥åçææ¦ç¥ãé¸å®ãããã®ã§ãã Hibernateã¯ãã¢ããªã±ã¼ã·ã§ã³ã§å¤ãå²ãå½ã¦ãæ¦ç¥ï¼ãããã¯ç¬èªã«æ¡å¼µããæ¦ç¥ï¼ã¨åæ§ã«ã ã°ãã¼ãã«ã«ã¦ãã¼ã¯ãªå¤ããã¼ã¿ãã¼ã¹ã«çæãããæ¦ç¥ããµãã¼ã!
ãã¦ãã¾ãã"
+
+#: index.docbook:180
+msgid "Finally we include declarations for the persistent properties of the class in the mapping file. By default, no properties of the class are considered persistent:"
+msgstr "æå¾ã«ã¯ã©ã¹ã®æ°¸ç¶ããããã£ã®å®£è¨ããããã³ã°ãã¡ã¤ã«ã«å«ãã¾ãã ããã©ã«ãã§ã¯ãã¯ã©ã¹ã®ããããã£ã¯æ°¸ç¶ã¨è¦ãªããã¾ããï¼"
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\" type=\"timestamp\" column=\"EVENT_DATE\"/>\n"
+ " <property name=\"title\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[
+\n"
+ "<hibernate-mapping>
+\n"
+ "
+\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">
+\n"
+ " <id name=\"id\" column=\"EVENT_ID\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <property name=\"date\" type=\"timestamp\" column=\"EVENT_DATE\"/>
+\n"
+ " <property name=\"title\"/>
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:188
+msgid "Just as with the <literal>id</literal> element, the <literal>name</literal> attribute of the <literal>property</literal> element tells Hibernate which getter and setter methods to use. So, in this case, Hibernate will look for <literal>getDate()/setDate()</literal>, as well as <literal>getTitle()/setTitle()</literal>."
+msgstr "<literal>id</literal> è¦ç´ ã®å ´åã¨åæ§ã«ã <literal>property</literal> è¦ç´ ã® <literal>name</literal> å±æ§ã§ãã©ã®ã²ãã¿ã¼ã¨ã»ãã¿ã¼ã¡ã½ããã使ãã¹ãããHibernateã«æãã¾ãã ãã®ä¾ã§ã¯ãHibernate㯠<literal>getDate()/setDate()</literal> 㨠<literal>getTitle()/setTitle()</literal> ã æ¢ãã¾ãã"
+
+#: index.docbook:195
+msgid "Why does the <literal>date</literal> property mapping include the <literal>column</literal> attribute, but the <literal>title</literal> doesn't? Without the <literal>column</literal> attribute Hibernate by default uses the property name as the column name. This works fine for <literal>title</literal>. However, <literal>date</literal> is a reserved keyword in most database, so we better map it to a different name."
+msgstr "ãªã <literal>date</literal> ããããã£ã®ãããã³ã°ã«ã¯ <literal>column</literal> å±æ§ãããã<literal>title</literal> ããããã£ã«ã¯ãªãã®ã§ããããï¼ <literal>column</literal> å±æ§ããªããã°ãHibernateã¯ããããã£åãã«ã©ã åã¨ãã¦ä½¿ãã¾ãã ãã㯠<literal>title</literal> ã§ã¯ä¸æãè¡ãã¾ãã ããã <literal>date</literal> ã¯ã»ã¨ãã©ã®ãã¼ã¿ãã¼ã¹ã§äºç´èªãªã®ã§ã éãååã§ãããã³ã°ããæ¹ãããã®ã§ãã"
+
+#: index.docbook:204
+msgid "The next interesting thing is that the <literal>title</literal> mapping also lacks a <literal>type</literal> attribute. The types we declare and use in the mapping files are not, as you might expect, Java data types. They are also not SQL database types. These types are so called <emphasis>Hibernate mapping types</emphasis>, converters which can translate from Java to SQL data types and vice versa. Again, Hibernate will try to determine the correct conversion and mapping type itself if the <literal>type</literal> attribute is not present in the mapping. In some cases this automatic detection (using Reflection on the Java class) might not have the default you expect or need. This is the case with the <literal>date</literal> property. Hibernate can't know if the property (which is of <literal>java.util.Date</literal>) should map to a SQL <literal>date</literal>, <literal>timestamp</literal>, or <literal>time</literal> column. We preserve full date and time information !
by mapping the property with a <literal>timestamp</literal> converter."
+msgstr "次ã«èå³æ·±ãã®ã¯ <literal>title</literal> ãããã³ã°ã <literal>type</literal> å±æ§ããæ¬ ãã¦ããç¹ã§ãã ãããã³ã°ãã¡ã¤ã«ã§å®£è¨ãã¦ä½¿ãtypeã¯ãããããããããã¾ãããJavaã®ãã¼ã¿åã§ã¯ããã¾ããã SQLãã¼ã¿ãã¼ã¹ã®åã§ãããã¾ããã ãã㯠<emphasis>Hibernateãããã³ã°å</emphasis> ã¨å¼ã°ããã JavaããSQLãã¼ã¿ã®åã¸ã¾ãã¯SQLããJavaãã¼ã¿åã¸ç¿»è¨³ããã³ã³ãã¼ã¿ã§ãã ç¹°ãè¿ãã«ãªãã¾ãããHibernate㯠<literal>type</literal> å±æ§ããããã³ã°ãã¡ã¤ã«å
ã«ãªããã°ã æ£ããã³ã³ãã¼ã¸ã§ã³ã¨ãããã³ã°åãèªåã§è§£æ±ºãããã¨ãã¾ãã ï¼Javaã¯ã©ã¹ã®ãªãã¬ã¯ã·ã§ã³ã使ã£ãï¼ãã®èªåæ¤ç¥ã¯ã å ´åã«ãã£ã¦ã¯ããªããæå¾
ã¾ãã¯å¿
è¦ã¨ããããã©ã«ãå¤ã«ãªããªãããããã¾ããã <literal>date</literal> ããããã£ã®å ´åã!
ããã§ããã Hibernateã¯ãã®ï¼ <literal>java.util.Date</literal> ã®ï¼ããããã£ã SQLã® <literal>date</literal> , <literal>timestamp</literal> , <literal>time</literal> ã®ãã¡ãã©ã®ã«ã©ã ã«ãããã³ã°ããã¹ããªã®ããããã¾ããã <literal>timestamp</literal> ã³ã³ãã¼ã¿ã§ããããã£ããããã³ã°ãããã¨ã«ãããå®å
¨ãªæ¥æãä¿åãã¾ãã"
+
+#: index.docbook:220
+msgid "This mapping file should be saved as <literal>Event.hbm.xml</literal>, right in the directory next to the <literal>Event</literal> Java class source file. The naming of mapping files can be arbitrary, however the <literal>hbm.xml</literal> suffix is a convention in the Hibernate developer community. The directory structure should now look like this:"
+msgstr "ãã®ãããã³ã°ãã¡ã¤ã«ã¯ã<literal>Event.hbm.xml</literal> ã¨ã㦠<literal>Event</literal> Javaã¯ã©ã¹ã½ã¼ã¹ãã¡ã¤ã«ã®ããé£ã«ã»ã¼ãããã¹ãã§ãã ãããã³ã°ãã¡ã¤ã«ã®å½åæ¹æ³ã¯ä»»æã§ããã<literal>hbm.xml</literal> ãµãã£ãã¯ã¹ãHibernateã®éçºè
ã®ã³ãã¥ããã£å
ã§ã®ç¿æ
£ã¨ãªã£ã¦ãã¾ãã ç¾å¨ãã£ã¬ã¯ããªæ§é ã¯ãã®ããã«ãªã£ã¦ããã¯ãã§ãï¼"
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml]]>"
+msgstr ""
+ "<![CDATA[.
+\n"
+ "+lib
+\n"
+ " <Hibernate and third-party libraries>
+\n"
+ "+src
+\n"
+ " +events
+\n"
+ " Event.java
+\n"
+ " Event.hbm.xml]]>"
+
+#: index.docbook:230
+msgid "We continue with the main configuration of Hibernate."
+msgstr "Hibernateã®ä¸»è¦ãªè¨å®ãç¶ãã¾ãã"
+
+#: index.docbook:237
+msgid "Hibernate configuration"
+msgstr "Hibernateã®è¨å®"
+
+#: index.docbook:239
+msgid "We now have a persistent class and its mapping file in place. It is time to configure Hibernate. Before we do this, we will need a database. HSQL DB, a java-based SQL DBMS, can be downloaded from the HSQL DB website(http://hsqldb.org/). Actually, you only need the <literal>hsqldb.jar</literal> from this download. Place this file in the <literal>lib/</literal> directory of the development folder."
+msgstr "ããã¾ã§ã§æ°¸ç¶ã¯ã©ã¹ã¨ãããã³ã°ãã¡ã¤ã«ãæãã¾ãããããããHibernateã®è¨å®ãè¡ãã¾ããã ãã®åã«ãã¼ã¿ãã¼ã¹ãå¿
è¦ã§ãã HSQL DBã¯Javaãã¼ã¹ã®ã¤ã³ã¡ã¢ãªSQL DBMSã§ãããHSQL DBã¦ã§ããµã¤ããããã¦ã³ãã¼ãã§ãã¾ãã å®éã«ã¯ãã¦ã³ãã¼ãããä¸ã® <literal>hsqldb.jar</literal> ã ããå¿
è¦ã§ãã ãã®ãã¡ã¤ã«ãéçºãã©ã«ãã® <literal>lib/</literal> ãã£ã¬ã¯ããªã«é
ç½®ãã¦ãã ããã"
+
+#: index.docbook:247
+msgid "Create a directory called <literal>data</literal> in the root of the development directory - this is where HSQL DB will store its data files. Now start the database by running <literal>java -classpath ../lib/hsqldb.jar org.hsqldb.Server</literal> in this data directory. You can see it start up and bind to a TCP/IP socket, this is where our application will connect later. If you want to start with a fresh database during this tutorial, shutdown HSQL DB (press <literal>CTRL + C</literal> in the window), delete all files in the <literal>data/</literal> directory, and start HSQL DB again."
+msgstr "<literal>data</literal> ã¨ãããã£ã¬ã¯ããªãéçºãã£ã¬ã¯ããªã®ã«ã¼ãã«ä½æãã¦ãã ããã HSQL DBã¯ããã«ãã¼ã¿ãã¡ã¤ã«ãæ ¼ç´ãã¾ãã ãã®ãã¼ã¿ãã£ã¬ã¯ããªã«ãã㦠<literal>java -classpath lib/hsqldb.jar org.hsqldb.Server</literal> ãå®è¡ãã ãã¼ã¿ãã¼ã¹ãèµ·åããã¦ãã ããã åä½ã®éå§ã¨ãTCP/IPã½ã±ããã®ãã¤ã³ãã確èªã§ãã¾ãã å¾ã»ã©ä½æããã¢ããªã±ã¼ã·ã§ã³ã¯ããã«æ¥ç¶ãã¾ãã ãããã®ãã¥ã¼ããªã¢ã«ä¸ã«ãã¼ã¿ãã¼ã¹ãåæåããããã°ã HSQL DBãã·ã£ãããã¦ã³ãã¦ï¼ä½æ¥ã¦ã£ã³ãã¦ã§ <literal>CTRL + C</literal> ãæ¼ãã¾ãï¼ <literal>data/</literal> ãã£ã¬ã¯ããªå
ã®ãã¡ã¤ã«ãå
¨ã¦æ¶å»ããå¾ã HSQL DBãåèµ·åãã¾ãã"
+
+#: index.docbook:257
+msgid "Hibernate is the layer in your application which connects to this database, so it needs connection information. The connections are made through a JDBC connection pool, which we also have to configure. The Hibernate distribution contains several open source JDBC connection pooling tools, but will use the Hibernate built-in connection pool for this tutorial. Note that you have to copy the required library into your classpath and use different connection pooling settings if you want to use a production-quality third party JDBC pooling software."
+msgstr "Hibernateã¯ã¢ããªã±ã¼ã·ã§ã³ã®ãã¼ã¿ãã¼ã¹ã«æ¥ç¶ãã層ãªã®ã§ã ã³ãã¯ã·ã§ã³ã®æ
å ±ãå¿
è¦ã«ãªãã¾ãã ã³ãã¯ã·ã§ã³ã¯JDBCã³ãã¯ã·ã§ã³ãã¼ã«ãéãã¦è¡ããã¾ããããããè¨å®ããå¿
è¦ãããã¾ãã Hibernateãã£ã¹ããªãã¥ã¼ã·ã§ã³ã«ã¯ããã¤ãã®ãªã¼ãã³ã½ã¼ã¹ã®JDBCã³ãã¯ã·ã§ã³ãã¼ã«ãã¼ã«ãå«ã¾ãã¦ãã¾ããã ãã®ãã¥ã¼ããªã¢ã«ã§ã¯Hibernateã«çµã¿è¾¼ã¾ããã³ãã¯ã·ã§ã³ãã¼ã«ã使ãã¾ãã ãã製åã¬ãã«ã®å質ã®ãµã¼ããã¼ãã£JDBCã³ãã¯ã·ã§ã³ãã¼ã«ã½ããã¦ã§ã¢ã使ããããã°ã ã¯ã©ã¹ãã¹ã«å¿
è¦ãªã©ã¤ãã©ãªãã³ãã¼ãã¦ãç°ãªãã³ãã¯ã·ã§ã³ãã¼ã«ãè¨å®ããªããã° ãªããªããã¨ã«æ³¨æãã¦ãã ããã"
+
+#: index.docbook:267
+msgid "For Hibernate's configuration, we can use a simple <literal>hibernate.properties</literal> file, a slightly more sophisticated <literal>hibernate.cfg.xml</literal> file, or even complete programmatic setup. Most users prefer the XML configuration file:"
+msgstr "Hibernateã®è¨å®ã§ã¯ãåç´ãª <literal>hibernate.properties</literal> ãã¡ã¤ã«ã ããããå°ãæ´ç·´ããã¦ãã <literal>hibernate.cfg.xml</literal> ãã¡ã¤ã«ã ã¾ãã¯å®å
¨ã«ããã°ã©ã ä¸ã§ã»ããã¢ããããæ¹æ³ãå©ç¨ã§ãã¾ãã ã»ã¨ãã©ã®ã¦ã¼ã¶ã好ãã®ã¯XMLè¨å®ãã¡ã¤ã«ã§ãï¼"
+
+#: index.docbook:273
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <!-- Database connection settings -->\n"
+ " <property name=\"connection.driver_class\">org.hsqldb.jdbcDriver</property>\n"
+ " <property name=\"connection.url\">jdbc:hsqldb:hsql://localhost</property>\n"
+ " <property name=\"connection.username\">sa</property>\n"
+ " <property name=\"connection.password\"></property>\n"
+ "\n"
+ " <!-- JDBC connection pool (use the built-in) -->\n"
+ " <property name=\"connection.pool_size\">1</property>\n"
+ "\n"
+ " <!-- SQL dialect -->\n"
+ " <property name=\"dialect\">org.hibernate.dialect.HSQLDialect</property>\n"
+ "\n"
+ " <!-- Enable Hibernate's automatic session context management -->\n"
+ " <property name=\"current_session_context_class\">thread</property>\n"
+ "\n"
+ " <!-- Disable the second-level cache -->\n"
+ " <property name=\"cache.provider_class\">org.hibernate.cache.NoCacheProvider</property>\n"
+ "\n"
+ " <!-- Echo all executed SQL to stdout -->\n"
+ " <property name=\"show_sql\">true</property>\n"
+ "\n"
+ " <!-- Drop and re-create the database schema on startup -->\n"
+ " <property name=\"hbm2ddl.auto\">create</property>\n"
+ "\n"
+ " <mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>
+\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC
+\n"
+ " \"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"
+\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">
+\n"
+ "
+\n"
+ "<hibernate-configuration>
+\n"
+ "
+\n"
+ " <session-factory>
+\n"
+ "
+\n"
+ " <!-- Database connection settings -->
+\n"
+ " <property name=\"connection.driver_class\">org.hsqldb.jdbcDriver</property>
+\n"
+ " <property name=\"connection.url\">jdbc:hsqldb:hsql://localhost</property>
+\n"
+ " <property name=\"connection.username\">sa</property>
+\n"
+ " <property name=\"connection.password\"></property>
+\n"
+ "
+\n"
+ " <!-- JDBC connection pool (use the built-in) -->
+\n"
+ " <property name=\"connection.pool_size\">1</property>
+\n"
+ "
+\n"
+ " <!-- SQL dialect -->
+\n"
+ " <property name=\"dialect\">org.hibernate.dialect.HSQLDialect</property>
+\n"
+ "
+\n"
+ " <!-- Enable Hibernate's automatic session context management -->
+\n"
+ " <property name=\"current_session_context_class\">thread</property>
+\n"
+ "
+\n"
+ " <!-- Disable the second-level cache -->
+\n"
+ " <property name=\"cache.provider_class\">org.hibernate.cache.NoCacheProvider</property>
+\n"
+ "
+\n"
+ " <!-- Echo all executed SQL to stdout -->
+\n"
+ " <property name=\"show_sql\">true</property>
+\n"
+ "
+\n"
+ " <!-- Drop and re-create the database schema on startup -->
+\n"
+ " <property name=\"hbm2ddl.auto\">create</property>
+\n"
+ "
+\n"
+ " <mapping resource=\"events/Event.hbm.xml\"/>
+\n"
+ "
+\n"
+ " </session-factory>
+\n"
+ "
+\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:275
+msgid "Note that this XML configuration uses a different DTD. We configure Hibernate's <literal>SessionFactory</literal> - a global factory responsible for a particular database. If you have several databases, use several <literal><session-factory></literal> configurations, usually in several configuration files (for easier startup)."
+msgstr "ãã®XMLã®è¨å®ãç°ãªãDTDã使ããã¨ã«æ³¨æãã¦ãã ããã ç¹å®ã®ãã¼ã¿ãã¼ã¹ãåãæã¤ã°ãã¼ãã«ãã¡ã¯ããªã§ããHibernateã® <literal>SessionFactory</literal> ãè¨å®ãã¾ãã ããè¤æ°ã®ãã¼ã¿ãã¼ã¹ãããå ´åã«ã¯ã ï¼ã¹ã¿ã¼ãã¢ãããç°¡åã«ããããï¼é常ããã¤ãã®è¨å®ãã¡ã¤ã«å
ã§ã ããã¤ãã® <literal><session-factory></literal> ã使ãè¨å®ã«ãã¦ãã ããã"
+
+#: index.docbook:283
+msgid "The first four <literal>property</literal> elements contain the necessary configuration for the JDBC connection. The dialect <literal>property</literal> element specifies the particular SQL variant Hibernate generates. Hibernate's automatic session management for persistence contexts will come in handy as you will soon see. The <literal>hbm2ddl.auto</literal> option turns on automatic generation of database schemas - directly into the database. This can of course also be turned off (by removing the config option) or redirected to a file with the help of the <literal>SchemaExport</literal> Ant task. Finally, we add the mapping file(s) for persistent classes to the configuration."
+msgstr "æåã®4ã¤ã® <literal>property</literal> è¦ç´ ã¯JDBCã³ãã¯ã·ã§ã³ã«å¿
è¦ãªè¨å®ãå«ãã§ãã¾ãã dialectã¨ããååã® <literal>property</literal> è¦ç´ ã¯ãHibernateãçæããç¹å®ã®SQLæ¹è¨ãæå®ãã¾ãã æ°¸ç¶çãªã³ã³ããã¹ãã«å¯¾ããHibernateã®ã»ãã·ã§ã³ã®èªå管çã¯ãå¾ã®ä¾ã§ããã«ãããããã«ãå½¹ã«ç«ã¤ãã¨ã§ãããã <literal>hbm2ddl.auto</literal> ãªãã·ã§ã³ã¯ãã¼ã¿ãã¼ã¹ã¹ãã¼ãã®èªåçæãonã«ãã¾ãã ããã¯ç´æ¥ãã¼ã¿ãã¼ã¹ã«å¯¾ãã¦çæããã¾ãã å½ç¶ï¼configãªãã·ã§ã³ãåé¤ãã¦ï¼offã«ãããã <literal>SchemaExport</literal> ã¨ããAntã¿ã¹ã¯ã®å©ããåãã¦ãã¡ã¤ã«ã«ãªãã¤ã¬ã¯ããããã§ãã¾ãã æå¾ã«æ°¸ç¶ã¯ã©ã¹ã®ããã®ãããã³ã°ãã¡ã¤ã«ãè¨å®ã«è¿½å ãã¾ãã"
+
+#: index.docbook:296
+msgid "Copy this file into the source directory, so it will end up in the root of the classpath. Hibernate automatically looks for a file called <literal>hibernate.cfg.xml</literal> in the root of the classpath, on startup."
+msgstr "ãã®ãã¡ã¤ã«ãã½ã¼ã¹ãã£ã¬ã¯ããªã«ã³ãã¼ãã¦ãã ããã ããã¨ããã¯ã¯ã©ã¹ãã¹ã®ã«ã¼ãã«ãããã¨ã«ãªãã¾ãã Hibernateã¯ãã¹ã¿ã¼ãã¢ããæã«ã¯ã©ã¹ãã¹ã®ã«ã¼ã㧠<literal>hibernate.cfg.xml</literal> ã¨ãããã¡ã¤ã«ãèªåçã«æ¢ãã¾ãã"
+
+#: index.docbook:305
+msgid "Building with Ant"
+msgstr "Antã«ãããã«ã"
+
+#: index.docbook:307
+msgid "We'll now build the tutorial with Ant. You will need to have Ant installed - get it from the <ulink url=\"http://ant.apache.org/bindownload.cgi\">Ant download page</ulink>. How to install Ant will not be covered here. Please refer to the <ulink url=\"http://ant.apache.org/manual/index.html\">Ant manual</ulink>. After you have installed Ant, we can start to create the buildfile. It will be called <literal>build.xml</literal> and placed directly in the development directory."
+msgstr "ããã§ã¯Antã使ã£ã¦ãã¥ã¼ããªã¢ã«ããã«ããã¾ãããã ããã«ã¯Antãã¤ã³ã¹ãã¼ã«ããã¦ããªããã°ãªãã¾ããã <ulink url=\"http://ant.apache.org/bindownload.cgi\">Antãã¦ã³ãã¼ããã¼ã¸</ulink> ãããã¦ã³ãã¼ããã¦ãã ããã Antã®ã¤ã³ã¹ãã¼ã«æ¹æ³ã¯ããã§ã¯èª¬æãã¾ããã®ã§ã <ulink url=\"http://ant.apache.org/manual/index.html\">Antããã¥ã¢ã«</ulink> ãåç
§ãã¦ãã ããã Antãã¤ã³ã¹ãã¼ã«ããã°ããã«ããã¡ã¤ã«ã®ä½æãéå§ã§ãã¾ãã ãã®ãã¡ã¤ã«ã¯ <literal>build.xml</literal> ã¨å¼ã°ããéçºãã£ã¬ã¯ããªã«ç´æ¥é
ç½®ãã¾ãã"
+
+#: index.docbook:316
+msgid "A basic build file looks like this:"
+msgstr "åºæ¬çãªãã«ããã¡ã¤ã«ã¯ãã®ããã«ãªãã¾ãï¼"
+
+#: index.docbook:320
+msgid ""
+ "<![CDATA[<project name=\"hibernate-tutorial\" default=\"compile\">\n"
+ "\n"
+ " <property name=\"sourcedir\" value=\"${basedir}/src\"/>\n"
+ " <property name=\"targetdir\" value=\"${basedir}/bin\"/>\n"
+ " <property name=\"librarydir\" value=\"${basedir}/lib\"/>\n"
+ "\n"
+ " <path id=\"libraries\">\n"
+ " <fileset dir=\"${librarydir}\">\n"
+ " <include name=\"*.jar\"/>\n"
+ " </fileset>\n"
+ " </path>\n"
+ "\n"
+ " <target name=\"clean\">\n"
+ " <delete dir=\"${targetdir}\"/>\n"
+ " <mkdir dir=\"${targetdir}\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"compile\" depends=\"clean, copy-resources\">\n"
+ " <javac srcdir=\"${sourcedir}\"\n"
+ " destdir=\"${targetdir}\"\n"
+ " classpathref=\"libraries\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"copy-resources\">\n"
+ " <copy todir=\"${targetdir}\">\n"
+ " <fileset dir=\"${sourcedir}\">\n"
+ " <exclude name=\"**/*.java\"/>\n"
+ " </fileset>\n"
+ " </copy>\n"
+ " </target>\n"
+ "\n"
+ "</project>]]>"
+msgstr ""
+ "<![CDATA[<project name=\"hibernate-tutorial\" default=\"compile\">
+\n"
+ "
+\n"
+ " <property name=\"sourcedir\" value=\"${basedir}/src\"/>
+\n"
+ " <property name=\"targetdir\" value=\"${basedir}/bin\"/>
+\n"
+ " <property name=\"librarydir\" value=\"${basedir}/lib\"/>
+\n"
+ "
+\n"
+ " <path id=\"libraries\">
+\n"
+ " <fileset dir=\"${librarydir}\">
+\n"
+ " <include name=\"*.jar\"/>
+\n"
+ " </fileset>
+\n"
+ " </path>
+\n"
+ "
+\n"
+ " <target name=\"clean\">
+\n"
+ " <delete dir=\"${targetdir}\"/>
+\n"
+ " <mkdir dir=\"${targetdir}\"/>
+\n"
+ " </target>
+\n"
+ "
+\n"
+ " <target name=\"compile\" depends=\"clean, copy-resources\">
+\n"
+ " <javac srcdir=\"${sourcedir}\"
+\n"
+ " destdir=\"${targetdir}\"
+\n"
+ " classpathref=\"libraries\"/>
+\n"
+ " </target>
+\n"
+ "
+\n"
+ " <target name=\"copy-resources\">
+\n"
+ " <copy todir=\"${targetdir}\">
+\n"
+ " <fileset dir=\"${sourcedir}\">
+\n"
+ " <exclude name=\"**/*.java\"/>
+\n"
+ " </fileset>
+\n"
+ " </copy>
+\n"
+ " </target>
+\n"
+ "
+\n"
+ "</project>]]>"
+
+#: index.docbook:322
+msgid "This will tell Ant to add all files in the lib directory ending with <literal>.jar</literal> to the classpath used for compilation. It will also copy all non-Java source files to the target directory, e.g. configuration and Hibernate mapping files. If you now run Ant, you should get this output:"
+msgstr "ãã㯠<literal>.jar</literal> ã§çµããlibãã£ã¬ã¯ããªã®ãã¹ã¦ã®ãã¡ã¤ã«ãã ã³ã³ãã¤ã«ã«ä½¿ç¨ããã¯ã©ã¹ãã¹ã«è¿½å ãããã¨ãAntã«æãã¾ãã ã¾ããJavaã½ã¼ã¹ãã¡ã¤ã«ã§ãªããã¹ã¦ã®ãã¡ã¤ã«ãã¿ã¼ã²ãããã£ã¬ã¯ããªã«ã³ãã¼ããã¨ãããã¨ã§ãããã¾ãã ä¾ãã°è¨å®ãã¡ã¤ã«ãHibernateãããã³ã°ãã¡ã¤ã«ãªã©ã§ãã ä»Antãå®è¡ããã¨ããã®ãããªåºåãããã¯ãã§ãï¼"
+
+#: index.docbook:329
+msgid ""
+ "<![CDATA[C:\\hibernateTutorial\\>ant\n"
+ "Buildfile: build.xml\n"
+ "\n"
+ "copy-resources:\n"
+ " [copy] Copying 2 files to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "compile:\n"
+ " [javac] Compiling 1 source file to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "BUILD SUCCESSFUL\n"
+ "Total time: 1 second ]]>"
+msgstr ""
+ "<![CDATA[C:¥hibernateTutorial¥>ant
+\n"
+ "Buildfile: build.xml
+\n"
+ "
+\n"
+ "copy-resources:
+\n"
+ " [copy] Copying 2 files to C:¥hibernateTutorial¥bin
+\n"
+ "
+\n"
+ "compile:
+\n"
+ " [javac] Compiling 1 source file to C:¥hibernateTutorial¥bin
+\n"
+ "
+\n"
+ "BUILD SUCCESSFUL
+\n"
+ "Total time: 1 second ]]>"
+
+#: index.docbook:334
+msgid "Startup and helpers"
+msgstr "ã¹ã¿ã¼ãã¢ããã¨ãã«ã"
+
+#: index.docbook:336
+msgid "It's time to load and store some <literal>Event</literal> objects, but first we have to complete the setup with some infrastructure code. We have to startup Hibernate. This startup includes building a global <literal>SessionFactory</literal> object and to store it somewhere for easy access in application code. A <literal>SessionFactory</literal> can open up new <literal>Session</literal>'s. A <literal>Session</literal> represents a single-threaded unit of work, the <literal>SessionFactory</literal> is a thread-safe global object, instantiated once."
+msgstr "ã㦠<literal>Event</literal> ãªãã¸ã§ã¯ãããã¼ããããæ ¼ç´ãããããæºåãã§ãã¾ããã ãããã¾ãã¯ã¤ã³ãã©ã¹ãã©ã¯ãã£ã®ã³ã¼ããæ¸ãã¦ãã»ããã¢ãããå®äºããå¿
è¦ãããã¾ãã ã¾ãã¯Hibernateãã¹ã¿ã¼ãã¢ããããªããã°ãªãã¾ããã ãã®ã¹ã¿ã¼ãã¢ããã«ã¯ãã°ãã¼ãã«ã® <literal>SessionFactory</literal> ãªãã¸ã§ã¯ããçæãã¦ã ãããã¢ããªã±ã¼ã·ã§ã³ã®ã³ã¼ãã§ã¢ã¯ã»ã¹ããããå ´æã«æ ¼ç´ãããã¨ãå«ã¾ãã¾ãã <literal>SessionFactory</literal> ã¯æ°ãã <literal>Session</literal> ããªã¼ãã³ãããã¨ãã§ãã¾ãã <literal>Session</literal> ã¯ã·ã³ã°ã«ã¹ã¬ããã®ä½æ¥åä½(Unit of Work)ã表ç¾ãã¾ãã ããã«å¯¾ã<literal>SessionFactory</literal> ã¯ã¹ã¬ããã»ã¼ãã®ã°ãã¼ãã«ãªãã¸ã§ã¯ãã§ããã ä¸åº¦ã ãã¤ã³ã¹ã¿ã³ã¹åããã¾ãã"
+
+#: index.docbook:346
+msgid "We'll create a <literal>HibernateUtil</literal> helper class which takes care of startup and makes accessing a <literal>SessionFactory</literal> convenient. Let's have a look at the implementation:"
+msgstr "ããã§ã¹ã¿ã¼ãã¢ãããè¡ãã 便å©ã« <literal>SessionFactory</literal> ã¸ã¢ã¯ã»ã¹ãã <literal>HibernateUtil</literal> ãã«ãã¯ã©ã¹ãä½æãã¾ãã å®è£
ãè¦ã¦ã¿ã¾ãããï¼"
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[package util;\n"
+ "\n"
+ "import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ "\n"
+ " private static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Create the SessionFactory from hibernate.cfg.xml\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " System.err.println(\"Initial SessionFactory creation failed.\" + ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static SessionFactory getSessionFactory() {\n"
+ " return sessionFactory;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package util;
+\n"
+ "
+\n"
+ "import org.hibernate.*;
+\n"
+ "import org.hibernate.cfg.*;
+\n"
+ "
+\n"
+ "public class HibernateUtil {
+\n"
+ "
+\n"
+ " private static final SessionFactory sessionFactory;
+\n"
+ "
+\n"
+ " static {
+\n"
+ " try {
+\n"
+ " // Create the SessionFactory from hibernate.cfg.xml
+\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();
+\n"
+ " } catch (Throwable ex) {
+\n"
+ " // Make sure you log the exception, as it might be swallowed
+\n"
+ " System.err.println(\"Initial SessionFactory creation failed.\" + ex);
+\n"
+ " throw new ExceptionInInitializerError(ex);
+\n"
+ " }
+\n"
+ " }
+\n"
+ "
+\n"
+ " public static SessionFactory getSessionFactory() {
+\n"
+ " return sessionFactory;
+\n"
+ " }
+\n"
+ "
+\n"
+ "}]]>"
+
+#: index.docbook:354
+msgid "This class does not only produce the global <literal>SessionFactory</literal> in its static initializer (called once by the JVM when the class is loaded), but also hides the fact that it uses a static singleton. It might as well lookup the <literal>SessionFactory</literal> from JNDI in an application server."
+msgstr "ãã®ã¯ã©ã¹ã¯éçåæåãããã¯ï¼ã¯ã©ã¹ããã¼ããããã¨ãã«JVMã«ãã£ã¦ä¸åº¦ã ãå¼ã°ããï¼ ã§ã°ãã¼ãã«ã® <literal>SessionFactory</literal> ãçæããã ãã§ã¯ãªãã éçã·ã³ã°ã«ãã³ã®ä½¿ç¨ãé è½ãã¾ãã ã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¼ã®JNDIãã <literal>SessionFactory</literal> ã ã«ãã¯ã¢ããããã®ã¨åæ§ã§ãã"
+
+#: index.docbook:361
+msgid "If you give the <literal>SessionFactory</literal> a name in your configuration file, Hibernate will in fact try to bind it to JNDI after it has been built. To avoid this code completely you could also use JMX deployment and let the JMX-capable container instantiate and bind a <literal>HibernateService</literal> to JNDI. These advanced options are discussed in the Hibernate reference documentation."
+msgstr "è¨å®ãã¡ã¤ã«å
㧠<literal>SessionFactory</literal> ã«ååãä¸ããã¨ã Hibernate㯠<literal>SessionFactory</literal> æ§ç¯å¾ã«JNDIã«å¯¾ããã¤ã³ããè¡ããã¨ãã¾ãã ãã®ã³ã¼ããå®å
¨ã«æé¤ããããã«ã¯ã JMXãããã¤ã¡ã³ããå©ç¨ã㦠JMXãå©ç¨ã§ããã³ã³ãããã¤ã³ã¹ã¿ã³ã¹åãã <literal>HibernateService</literal> ãJNDIã¸ãã¤ã³ããããã¨ãã§ãã¾ãã ãããã®é«åº¦ãªãªãã·ã§ã³ã¯ãHibernateã®ãªãã¡ã¬ã³ã¹ããã¥ã¡ã³ãã§èª¬æããã¦ãã¾ãã"
+
+#: index.docbook:370
+msgid "Place <literal>HibernateUtil.java</literal> in the development source directory, in a package next to <literal>events</literal>:"
+msgstr "<literal>HibernateUtil.java</literal> ãéçºã½ã¼ã¹ãã£ã¬ã¯ããªã«ãã <literal>events</literal> ããã±ã¼ã¸ã® é£ã«é
ç½®ãã¦ãã ããã"
+
+#: index.docbook:375
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml\n"
+ " +util\n"
+ " HibernateUtil.java\n"
+ " hibernate.cfg.xml\n"
+ "+data\n"
+ "build.xml]]>"
+msgstr ""
+ "<![CDATA[.
+\n"
+ "+lib
+\n"
+ " <Hibernate and third-party libraries>
+\n"
+ "+src
+\n"
+ " +events
+\n"
+ " Event.java
+\n"
+ " Event.hbm.xml
+\n"
+ " +util
+\n"
+ " HibernateUtil.java
+\n"
+ " hibernate.cfg.xml
+\n"
+ "+data
+\n"
+ "build.xml]]>"
+
+#: index.docbook:377
+msgid "This should again compile without problems. We finally need to configure a logging system - Hibernate uses commons logging and leaves you the choice between Log4j and JDK 1.4 logging. Most developers prefer Log4j: copy <literal>log4j.properties</literal> from the Hibernate distribution (it's in the <literal>etc/</literal> directory) to your <literal>src</literal> directory, next to <literal>hibernate.cfg.xml</literal>. Have a look at the example configuration and change the settings if you like to have more verbose output. By default, only Hibernate startup message are shown on stdout."
+msgstr "ããã¯åé¡ãªãåã³ã³ãã¤ã«ã§ããã¯ãã§ãã æå¾ã«ãã®ã³ã°ã·ã¹ãã ãè¨å®ããå¿
è¦ãããã¾ãã Hibernateã¯commons loggingã使ããããLog4jã¨JDK 1.4 loggingã®é¸æãããå¿
è¦ãããã¾ããã ã»ã¨ãã©ã®éçºè
ã好ãã®ã¯Log4jã§ãã Hibernateãã£ã¹ããªãã¥ã¼ã·ã§ã³ï¼ã®<literal>etc/</literal> ãã£ã¬ã¯ããªï¼ãã <literal>log4j.properties</literal> ãããªãã® <literal>src</literal> ãã£ã¬ã¯ããªå
ã® <literal>hibernate.cfg.xml</literal> ã®é£ã«ã³ãã¼ãã¦ãã ããã è¨å®ä¾ãè¦ã¦ãåé·ãªåºåããããã°è¨å®ãå¤æ´ãã¦ãã ããã ããã©ã«ãã§ã¯Hibernateã®ã¹ã¿ã¼ãã¢ããã¡ãã»ã¼ã¸ã ããæ¨æºåºåã«è¡¨ç¤ºããã¾ãã"
+
+#: index.docbook:387
+msgid "The tutorial infrastructure is complete - and we are ready to do some real work with Hibernate."
+msgstr "ãã¥ã¼ããªã¢ã«ã®ã¤ã³ãã©ã¯å®å
¨ã§ãã Hibernateã使ã£ã¦å®éã®ä½æ¥ãããæºåãæ´ãã¾ããã"
+
+#: index.docbook:395
+msgid "Loading and storing objects"
+msgstr "ãªãã¸ã§ã¯ãã®ãã¼ãã¨æ ¼ç´"
+
+#: index.docbook:397
+msgid "Finally, we can use Hibernate to load and store objects. We write an <literal>EventManager</literal> class with a <literal>main()</literal> method:"
+msgstr "ã¤ãã«ãªãã¸ã§ã¯ãã®ãã¼ãã¨æ ¼ç´ã«Hibernateã使ããã¨ãã§ãã¾ãã <literal>main()</literal> ã¡ã½ãããæ㤠<literal>EventManager</literal> ã¯ã©ã¹ãæ¸ãã¾ãï¼"
+
+#: index.docbook:402
+msgid ""
+ "<![CDATA[package events;\n"
+ "import org.hibernate.Session;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "import util.HibernateUtil;\n"
+ "\n"
+ "public class EventManager {\n"
+ "\n"
+ " public static void main(String[] args) {\n"
+ " EventManager mgr = new EventManager();\n"
+ "\n"
+ " if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " }\n"
+ "\n"
+ " HibernateUtil.getSessionFactory().close();\n"
+ " }\n"
+ "\n"
+ " private void createAndStoreEvent(String title, Date theDate) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " session.save(theEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package events;
+\n"
+ "import org.hibernate.Session;
+\n"
+ "
+\n"
+ "import java.util.Date;
+\n"
+ "
+\n"
+ "import util.HibernateUtil;
+\n"
+ "
+\n"
+ "public class EventManager {
+\n"
+ "
+\n"
+ " public static void main(String[] args) {
+\n"
+ " EventManager mgr = new EventManager();
+\n"
+ "
+\n"
+ " if (args[0].equals(\"store\")) {
+\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());
+\n"
+ " }
+\n"
+ "
+\n"
+ " HibernateUtil.getSessionFactory().close();
+\n"
+ " }
+\n"
+ "
+\n"
+ " private void createAndStoreEvent(String title, Date theDate) {
+\n"
+ "
+\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+\n"
+ "
+\n"
+ " session.beginTransaction();
+\n"
+ "
+\n"
+ " Event theEvent = new Event();
+\n"
+ " theEvent.setTitle(title);
+\n"
+ " theEvent.setDate(theDate);
+\n"
+ "
+\n"
+ " session.save(theEvent);
+\n"
+ "
+\n"
+ " session.getTransaction().commit();
+\n"
+ " }
+\n"
+ "
+\n"
+ "}]]>"
+
+#: index.docbook:404
+msgid "We create a new <literal>Event</literal> object, and hand it over to Hibernate. Hibernate now takes care of the SQL and executes <literal>INSERT</literal>s on the database. Let's have a look at the <literal>Session</literal> and <literal>Transaction</literal>-handling code before we run this."
+msgstr "æ°ãã <literal>Event</literal> ãªãã¸ã§ã¯ããçæãããããHibernateã«æ¸¡ãã¾ãã ä»ã§ã¯HibernateãSQLãå¦çãããã¼ã¿ãã¼ã¹ã§ <literal>INSERT</literal> ãå®è¡ãã¾ãã å®è¡åã« <literal>Session</literal> 㨠<literal>Transaction</literal> ãå¦çããã³ã¼ãã確èªãã¦ãã ããã"
+
+#: index.docbook:411
+msgid "A <literal>Session</literal> is a single unit of work. For now we'll keep things simple and assume a one-to-one granularity between a Hibernate <literal>Session</literal> and a database transaction. To shield our code from the actual underlying transaction system (in this case plain JDBC, but it could also run with JTA) we use the <literal>Transaction</literal> API that is available on the Hibernate <literal>Session</literal>."
+msgstr "<literal>Session</literal> ã¯1ã¤ã®ä½æ¥åä½(Unit of Work)ã§ãã å½åã®éã話ãç°¡åã«ããããã«ã <literal>Session</literal> 㨠<literal>Transaction</literal> ã®å¯¾å¿ãä¸å¯¾ä¸ã¨ä»®å®ãã¾ãã 使ç¨ãã¦ãããã©ã³ã¶ã¯ã·ã§ã³ã»ã·ã¹ãã ï¼ãã®ã±ã¼ã¹ã§ã¯JTAã¨å
±åã§ããåç´ãªJDBCï¼ããã³ã¼ããä¿è·ããããã«ã Hibernate <literal>Session</literal> ä¸ã§å©ç¨å¯è½ãª <literal>Transaction</literal> APIã使ç¨ãã¾ãã"
+
+#: index.docbook:419
+msgid "What does <literal>sessionFactory.getCurrentSession()</literal> do? First, you can call it as many times and anywhere you like, once you get hold of your <literal>SessionFactory</literal> (easy thanks to <literal>HibernateUtil</literal>). The <literal>getCurrentSession()</literal> method always returns the \"current\" unit of work. Remember that we switched the configuration option for this mechanism to \"thread\" in <literal>hibernate.cfg.xml</literal>? Hence, the current unit of work is bound to the current Java thread that executes our application. However, this is not the full picture, you also have to consider scope, when a unit of work begins and when it ends."
+msgstr "<literal>sessionFactory.getCurrentSession()</literal> ã¯ãªã«ãããã®ã§ããããï¼ ã¾ãããã£ãã <literal>SessionFactory</literal> ãåå¾ãä¿æããã° ï¼ <literal>HibernateUtil</literal> ã®ãããã§ç°¡åã§ãï¼ããã®ã¡ã½ãããä½åº¦ã§ãã ã©ãããã§ãå¼ã³åºããã¨ãåºæ¥ã¾ãã <literal>getCurrentSession()</literal> ã¡ã½ããã¯å¸¸ã«ãç¾å¨ã®ãä½æ¥åä½(Unit of Work)ãè¿ãã¾ãã <literal>hibernate.cfg.xml</literal> ã®ãã®æ©è½ã®è¨å®ã§ã\"thread\"ãæå®ãããã¨ãæãåºãã¦ãã ããã ãã®ããç¾å¨ã®ä½æ¥åä½ã®ã¹ã³ã¼ãã¯ããã®ã¢ããªã±ã¼ã·ã§ã³ãå®è¡ããç¾å¨ã®Javaã¹ã¬ããã§ãã ãããããã§å
¨ã¦ã§ã¯ããã¾ããã <literal>Session</literal> ã¯æåã«å¿
è¦ã¨ãªã£ãã¨ããã¤ã¾ãæåã« <literal>getCurrentSession()</literal> ã å¼ã°ããã¨ãã«éå§ãã¾ãã ãã®ã¨ãHibernateã«ããç¾å¨ã!
®ã¹ã¬ããã«çµã³ä»ãããã¾ãã ãã©ã³ã¶ã¯ã·ã§ã³ãçµäºï¼ã³ããããããã¯ãã¼ã«ããã¯ï¼ããã¨ãã Hibernateãã¹ã¬ãããã <literal>Session</literal> ãåãé¢ããã¯ãã¼ãºãã¾ãã åã³ <literal>getCurrentSession()</literal> ãå¼ã¶ã¨ã æ°ãã <literal>Session</literal> ãåå¾ãã¦æ°ããä½æ¥åä½ãã¹ã¿ã¼ãã§ãã¾ãã ãã® <emphasis>thread-bound</emphasis> ããã°ã©ãã³ã°ã»ã¢ãã«ã¯Hibernateãå©ç¨ããä¸ã§æã人æ°ãããã¾ãã"
+
+#: index.docbook:430
+msgid "A <literal>Session</literal> begins when it is first needed, when the first call to <literal>getCurrentSession()</literal> is made. It is then bound by Hibernate to the current thread. When the transaction ends, either through commit or rollback, Hibernate automatically unbinds the <literal>Session</literal> from the thread and closes it for you. If you call <literal>getCurrentSession()</literal> again, you get a new <literal>Session</literal> and can start a new unit of work. This <emphasis>thread-bound</emphasis> programming model is the most popular way of using Hibernate, as it allows flexible layering of your code (transaction demarcation code can be separated from data access code, we'll do this later in this tutorial)."
+msgstr "ãã©ã³ã¶ã¯ã·ã§ã³ã®æ±ãã¨å¢çã®è©³ããæ
å ±ã«ã¤ãã¦ã¯ã <xref linkend=\"transactions\"/> ãè¦ã¦ãã ããã ãã®ä¾ã§ã¯ã¨ã©ã¼å¦çããã¼ã«ããã¯ãå²æãã¾ãã"
+
+#: index.docbook:441
+msgid "Related to the unit of work scope, should the Hibernate <literal>Session</literal> be used to execute one or several database operations? The above example uses one <literal>Session</literal> for one operation. This is pure coincidence, the example is just not complex enough to show any other approach. The scope of a Hibernate <literal>Session</literal> is flexible but you should never design your application to use a new Hibernate <literal>Session</literal> for <emphasis>every</emphasis> database operation. So even if you see it a few more times in the following (very trivial) examples, consider <emphasis>session-per-operation</emphasis> an anti-pattern. A real (web) application is shown later in this tutorial."
+msgstr "ãã®æåã®ã«ã¼ãã³ãå®è¡ããã«ã¯ãAntã®ãã«ããã¡ã¤ã«ã«å¼ã³åºãå¯è½ãªã¿ã¼ã²ããã 追å ããªããã°ãªãã¾ããï¼"
+
+#: index.docbook:452
+msgid "Have a look at <xref linkend=\"transactions\"/> for more information about transaction handling and demarcation. We also skipped any error handling and rollback in the previous example."
+msgstr ""
+ "<![CDATA[<target name=\"run\" depends=\"compile\">
+\n"
+ " <java fork=\"true\" classname=\"events.EventManager\" classpathref=\"libraries\">
+\n"
+ " <classpath path=\"${targetdir}\"/>
+\n"
+ " <arg value=\"${action}\"/>
+\n"
+ " </java>
+\n"
+ "</target>]]>"
+
+#: index.docbook:458
+msgid "To run this first routine we have to add a callable target to the Ant build file:"
+msgstr "<literal>action</literal> å¼æ°ã®å¤ã¯ãã¿ã¼ã²ãããå¼ã¶ã¨ãã«ã³ãã³ãã©ã¤ã³ã§è¨å®ãã¾ãï¼"
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[<target name=\"run\" depends=\"compile\">\n"
+ " <java fork=\"true\" classname=\"events.EventManager\" classpathref=\"libraries\">\n"
+ " <classpath path=\"${targetdir}\"/>\n"
+ " <arg value=\"${action}\"/>\n"
+ " </java>\n"
+ "</target>]]>"
+msgstr "<![CDATA[C:¥hibernateTutorial¥>ant run -Daction=store]]>"
+
+#: index.docbook:464
+msgid "The value of the <literal>action</literal> argument is set on the command line when calling the target:"
+msgstr "ã³ã³ãã¤ã«ããã¨ãHibernateãã¹ã¿ã¼ãããããªãã®è¨å®ã«ããã¾ããã å¤ãã®ãã°åºåãããã¯ãã§ãã ãã®æå¾ã«ã¯ä»¥ä¸ã®è¡ãããã§ãããï¼"
+
+#: index.docbook:469
+msgid "<![CDATA[C:\\hibernateTutorial\\>ant run -Daction=store]]>"
+msgstr "<![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]>"
+
+#: index.docbook:471
+msgid "You should see, after compilation, Hibernate starting up and, depending on your configuration, lots of log output. At the end you will find the following line:"
+msgstr "ããã¯Hibernateãå®è¡ãã <literal>INSERT</literal> ã§ã ã¯ã¨ã¹ãã§ã³ãã¼ã¯ã¯JDBCãã¤ã³ããã©ã¡ã¼ã¿ã表ãã¦ãã¾ãã å¼æ°ã¨ãã¦ãã¤ã³ããããå¤ãè¦ãããããããã¯ãã°ã®åé·æ§ãæ¸ããããã«ã¯ã <literal>log4j.properties</literal> ããã§ãã¯ãã¦ãã ããã"
+
+#: index.docbook:476
+msgid "<![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]>"
+msgstr "ããã§ã¯åãããã«æ ¼ç´ãããã¤ãã³ãã®ä¸è¦§ãè¦ããã¨æãã¾ãã ãã®ããã¡ã¤ã³ã¡ã½ããã«ãªãã·ã§ã³ã追å ãã¾ãï¼"
+
+#: index.docbook:478
+msgid "This is the <literal>INSERT</literal> executed by Hibernate, the question marks represent JDBC bind parameters. To see the values bound as arguments, or to reduce the verbosity of the log, check your <literal>log4j.properties</literal>."
+msgstr ""
+ "<![CDATA[if (args[0].equals(\"store\")) {
+\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());
+\n"
+ "}
+\n"
+ "else if (args[0].equals(\"list\")) {
+\n"
+ " List events = mgr.listEvents();
+\n"
+ " for (int i = 0; i < events.size(); i++) {
+\n"
+ " Event theEvent = (Event) events.get(i);
+\n"
+ " System.out.println(\"Event: \" + theEvent.getTitle() +
+\n"
+ " \" Time: \" + theEvent.getDate());
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:484
+msgid "Now we'd like to list stored events as well, so we add an option to the main method:"
+msgstr "æ°ãã <literal>listEvents()ã¡ã½ãã</literal> ã追å ãã¾ãã"
+
+#: index.docbook:488
+msgid ""
+ "<![CDATA[if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ "}\n"
+ "else if (args[0].equals(\"list\")) {\n"
+ " List events = mgr.listEvents();\n"
+ " for (int i = 0; i < events.size(); i++) {\n"
+ " Event theEvent = (Event) events.get(i);\n"
+ " System.out.println(\"Event: \" + theEvent.getTitle() +\n"
+ " \" Time: \" + theEvent.getDate());\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private List listEvents() {
+\n"
+ "
+\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+\n"
+ "
+\n"
+ " session.beginTransaction();
+\n"
+ "
+\n"
+ " List result = session.createQuery(\"from Event\").list();
+\n"
+ "
+\n"
+ " session.getTransaction().commit();
+\n"
+ "
+\n"
+ " return result;
+\n"
+ "}]]>"
+
+#: index.docbook:490
+msgid "We also add a new <literal>listEvents() method</literal>:"
+msgstr "ããã§ãããã¨ã¯ããã¼ã¿ãã¼ã¹ããåå¨ãããã¹ã¦ã® <literal>Event</literal> ãªãã¸ã§ã¯ãããã¼ãããHQL (Hibernate Query Language) ã¯ã¨ãªã使ããã¨ã§ãã Hibernateã¯é©åãªSQLãçæããããããã¼ã¿ãã¼ã¹ã«éãã ãã®ãã¼ã¿ã使ã£ã¦ <literal>Event</literal> ãªãã¸ã§ã¯ããçæãã¾ãã å½ç¶HQLã§ããã«è¤éãªã¯ã¨ãªãä½æã§ãã¾ãã"
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[private List listEvents() {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " List result = session.createQuery(\"from Event\").list();\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " return result;\n"
+ "}]]>"
+msgstr "以ä¸ã®ã¹ãããã§ããã¹ã¦ã®å®è¡ã¨ãã¹ããè¡ãã¾ãã"
+
+#: index.docbook:496
+msgid "What we do here is use an HQL (Hibernate Query Language) query to load all existing <literal>Event</literal> objects from the database. Hibernate will generate the appropriate SQL, send it to the database and populate <literal>Event</literal> objects with the data. You can create more complex queries with HQL, of course."
+msgstr "hbm2ddlãéãåã«ãã¼ã¿ãã¼ã¹ã®ãã¼ã¿ãä½æãããã¼ã¿ãã¼ã¹ã¹ãã¼ããçæããããã«ã <literal>ant run -Daction=store</literal> ãå®è¡ãã¦ãã ããã"
+
+#: index.docbook:503
+msgid "Now, to execute and test all of this, follow these steps:"
+msgstr "ä»ã¯ <literal>hibernate.cfg.xml</literal> ãã¡ã¤ã«ã®ããããã£ãã³ã¡ã³ãã¢ã¦ããã¦hbm2ddlãç¡å¹ã«ãã¦ãã ããã é常ã¯ç¶ç¶çã«åä½ãã¹ãããã¦ããéã¯hbm2ddlãæå¹ã«ãã¦ããã®ã§ããã ãã以å¤ã®å ´åã«hbm2ddlãèµ·åããã¨æ ¼ç´ãã¦ãããå
¨ã¦ã®ãã¼ã¿ã <emphasis>ãããã</emphasis> ããã§ãããã è¨å®ã <literal>create</literal> ã«ããã¨ãçµæã¨ã㦠ãSessionFactoryçæã®éãã¹ãã¼ãããå
¨ã¦ã®ãã¼ãã«ããããããã¦åä½æãããã¨ããè¨å®ã«ãªãã¾ãã"
+
+#: index.docbook:509
+msgid "Run <literal>ant run -Daction=store</literal> to store something into the database and, of course, to generate the database schema before through hbm2ddl."
+msgstr "ä» <literal>-Daction=list</literal> ã¨æå®ãã¦Antãå¼ã¶ã¨ã ããã¾ã§æ ¼ç´ããã¤ãã³ããè¦ããã¯ãã§ãã <literal>store</literal> ã¢ã¯ã·ã§ã³ãæ°å以ä¸å¼ã¶ãã¨ãå¯è½ã§ãã"
+
+#: index.docbook:515
+msgid "Now disable hbm2ddl by commenting out the property in your <literal>hibernate.cfg.xml</literal> file. Usually you only leave it turned on in continous unit testing, but another run of hbm2ddl would <emphasis>drop</emphasis> everything you have stored - the <literal>create</literal> configuration setting actually translates into \"drop all tables from the schema, then re-create all tables, when the SessionFactory is build\"."
+msgstr "注æï¼åãã¦Hibernateã«è§¦ãã人ã
ã®å¤ããããã§å¤±æããããã<emphasis>Table not found</emphasis> ã¨ã©ã¼ã¡ãã»ã¼ã¸ã« é¢ãã質åãå®æçã«è¦ããã¾ãã ãããä¸è¨ã®ã¹ãããã«å¾ãã°ãhbm2ddlãæåã«å®è¡ãããã¨ãã«ãã¼ã¿ãã¼ã¹ã¹ãã¼ããä½æãã ãã®å¾ã®å®è¡ã«ããã¦ããã®ã¹ãã¼ãã使ç¨ããã®ã§ãåé¡ã¯èµ·ãããªãã§ãããã ãããã³ã°ããã¼ã¿ãã¼ã¹ã¹ãã¼ããå¤æ´ããã¨ãã¯ãããä¸åº¦hbm2ddlãæå¹ã«ãã¦ãã ããã"
+
+#: index.docbook:525
+msgid "If you now call Ant with <literal>-Daction=list</literal>, you should see the events you have stored so far. You can of course also call the <literal>store</literal> action a few times more."
+msgstr "ãã¼ã2 - é¢é£ã®ãããã³ã°"
+
+#: index.docbook:531
+msgid "Note: Most new Hibernate users fail at this point and we see questions about <emphasis>Table not found</emphasis> error messages regularly. However, if you follow the steps outlined above you will not have this problem, as hbm2ddl creates the database schema on the first run, and subsequent application restarts will use this schema. If you change the mapping and/or database schema, you have to re-enable hbm2ddl once again."
+msgstr "æ°¸ç¶ã¨ã³ãã£ãã£ã¯ã©ã¹ããã¼ãã«ã«ãããã³ã°ãã¾ããã ããã«ãã®ä¸ã«ããã¤ãã®ã¯ã©ã¹ã®é¢é£ã追å ãã¾ãããã ã¾ãåãã«ã¢ããªã±ã¼ã·ã§ã³ã«äººã
ã追å ããå½¼ããåå ããã¤ãã³ãã®ãªã¹ããæ ¼ç´ãã¾ãã"
+
+#: index.docbook:544
+msgid "Part 2 - Mapping associations"
+msgstr "Personã¯ã©ã¹ã®ãããã³ã°"
+
+#: index.docbook:546
+msgid "We mapped a persistent entity class to a table. Let's build on this and add some class associations. First we'll add people to our application, and store a list of events they participate in."
+msgstr "æåã® <literal>Person</literal> ã¯ã©ã¹ã¯åç´ã§ãï¼"
+
+#: index.docbook:552
+msgid "Mapping the Person class"
+msgstr ""
+ "<![CDATA[package events;
+\n"
+ "
+\n"
+ "public class Person {
+\n"
+ "
+\n"
+ " private Long id;
+\n"
+ " private int age;
+\n"
+ " private String firstname;
+\n"
+ " private String lastname;
+\n"
+ "
+\n"
+ " public Person() {}
+\n"
+ "
+\n"
+ " // Accessor methods for all properties, private setter for 'id'
+\n"
+ "
+\n"
+ "}]]>"
+
+#: index.docbook:554
+msgid "The first cut of the <literal>Person</literal> class is simple:"
+msgstr "<literal>Person.hbm.xml</literal> ã¨ããæ°ãããããã³ã°ãã¡ã¤ã«ãä½æãã¦ãã ãã ï¼ãã¡ã¤ã«ã®æåã«DTDã¸ã®åç
§ãå¿ããã«å
¥ãã¦ãã ããï¼ï¼"
+
+#: index.docbook:558
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "public class Person {\n"
+ "\n"
+ " private Long id;\n"
+ " private int age;\n"
+ " private String firstname;\n"
+ " private String lastname;\n"
+ "\n"
+ " public Person() {}\n"
+ "\n"
+ " // Accessor methods for all properties, private setter for 'id'\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>
+\n"
+ "
+\n"
+ " <class name=\"events.Person\" table=\"PERSON\">
+\n"
+ " <id name=\"id\" column=\"PERSON_ID\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <property name=\"age\"/>
+\n"
+ " <property name=\"firstname\"/>
+\n"
+ " <property name=\"lastname\"/>
+\n"
+ " </class>
+\n"
+ "
+\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:560
+msgid "Create a new mapping file called <literal>Person.hbm.xml</literal> (don't forget the DTD reference at the top):"
+msgstr "æå¾ã«Hibernateã®è¨å®ã«æ°ãããããã³ã°ã追å ãã¦ãã ããï¼"
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<mapping resource=\"events/Event.hbm.xml\"/>
+\n"
+ "<mapping resource=\"events/Person.hbm.xml\"/>]]>"
+
+#: index.docbook:567
+msgid "Finally, add the new mapping to Hibernate's configuration:"
+msgstr "ããã§ã¯ããã2ã¤ã®ã¨ã³ãã£ãã£éã®é¢é£ãä½æãã¾ãã 人ã
ãã¤ãã³ãã«åå ã§ããã¤ãã³ããåå è
ãæã¤ã®ã¯æããã§ãã æ±ããªããã°ãªããªãè¨è¨ã®åé¡ã¯ãæ¹åãå¤é度ãã³ã¬ã¯ã·ã§ã³ã®æ¯ãèãã§ãã"
+
+#: index.docbook:571
+msgid ""
+ "<![CDATA[<mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "<mapping resource=\"events/Person.hbm.xml\"/>]]>"
+msgstr "åæ¹åSetãã¼ã¹é¢é£"
+
+#: index.docbook:573
+msgid "We'll now create an association between these two entities. Obviously, persons can participate in events, and events have participants. The design questions we have to deal with are: directionality, multiplicity, and collection behavior."
+msgstr "ã¤ãã³ãã®ã³ã¬ã¯ã·ã§ã³ã <literal>Person</literal> ã¯ã©ã¹ã«è¿½å ãã¾ãã ãããã¦ããã¨ãæ示çãªã¯ã¨ãªãã¤ã¾ããããã<literal>aPerson.getEvents()</literal>ãå¼ã³åºããã«ã ç¹å®ã®äººã«ç´ä»ãã¤ãã³ããç°¡åã«ããã²ã¼ããããã¨ãã§ãã¾ãã ç§ãã¡ã¯Javaã®ã³ã¬ã¯ã·ã§ã³ã<literal>Set</literal> ã使ãã¾ãã ã³ã¬ã¯ã·ã§ã³ã¯éè¤è¦ç´ ãæããªãããé çªã¯ç§ãã¡ã«ã¯æå³ããªãããã§ãã"
+
+#: index.docbook:583
+msgid "A unidirectional Set-based association"
+msgstr "<literal>Set</literal> ã§å®è£
ãããåæ¹åãå¤å¤é¢é£ãå¿
è¦ã§ãã Javaã¯ã©ã¹å
ã«å¯¾å¿ããã³ã¼ããæ¸ãã¦ãããã³ã°ãã¾ãããï¼"
+
+#: index.docbook:585
+msgid "We'll add a collection of events to the <literal>Person</literal> class. That way we can easily navigate to the events for a particular person, without executing an explicit query - by calling <literal>aPerson.getEvents()</literal>. We use a Java collection, a <literal>Set</literal>, because the collection will not contain duplicate elements and the ordering is not relevant for us."
+msgstr ""
+ "<![CDATA[public class Person {
+\n"
+ "
+\n"
+ " private Set events = new HashSet();
+\n"
+ "
+\n"
+ " public Set getEvents() {
+\n"
+ " return events;
+\n"
+ " }
+\n"
+ "
+\n"
+ " public void setEvents(Set events) {
+\n"
+ " this.events = events;
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:592
+msgid "We need a unidirectional, many-valued associations, implemented with a <literal>Set</literal>. Let's write the code for this in the Java classes and then map it:"
+msgstr "ãã®é¢é£ããããã³ã°ããåã«ãå対å´ã«ã¤ãã¦èãã¦ãã ããã æãããªãã¨ã§ãããä»ã¯ãããåæ¹åã«ããã ãã§ãã éã«ã <literal>Event</literal> å´ã«ãå¥ã®ã³ã¬ã¯ã·ã§ã³ãä½ããã¨ãã§ãã¾ãã ä¾ãã° <literal>anEvent.getParticipants()</literal> ã®ããã«ã åæ¹åã«ããã²ã¼ãããããã°ããããããã¨ãã§ãã¾ãã ããã¯æ©è½çã«ã¿ã¦å¿
è¦ã§ã¯ããã¾ããã ç¹å®ã®ã¤ãã³ãã«é¢ä¿ãããã¼ã¿ãåå¾ããæ確ãªã¯ã¨ãªãããã¤ã§ãå®è¡ãããã¨ãåºæ¥ã¾ããã ãã®è¨è¨ã®é¸æã¯éçºè
ã«ä»»ããã¦ãã¦ããã®è°è«ã«ããæãããªã®ã¯é¢é£ã®å¤é度ã§ãã ã¤ã¾ã両å´ããå¤ãå¤ã«ããã <emphasis>å¤å¯¾å¤</emphasis> ã¨å¼ã°ããé¢é£ã§ãã ãã®ããHibernateã®many-to-manyãããã³ã°ã使ãã¾ãï¼"
+
+#: index.docbook:597
+msgid ""
+ "<![CDATA[public class Person {\n"
+ "\n"
+ " private Set events = new HashSet();\n"
+ "\n"
+ " public Set getEvents() {\n"
+ " return events;\n"
+ " }\n"
+ "\n"
+ " public void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[<class name=\"events.Person\" table=\"PERSON\">
+\n"
+ " <id name=\"id\" column=\"PERSON_ID\">
+\n"
+ " <generator class=\"native\"/>
+\n"
+ " </id>
+\n"
+ " <property name=\"age\"/>
+\n"
+ " <property name=\"firstname\"/>
+\n"
+ " <property name=\"lastname\"/>
+\n"
+ "
+\n"
+ " <set name=\"events\" table=\"PERSON_EVENT\">
+\n"
+ " <key column=\"PERSON_ID\"/>
+\n"
+ " <many-to-many column=\"EVENT_ID\" class=\"events.Event\"/>
+\n"
+ " </set>
+\n"
+ "
+\n"
+ "</class>]]>"
+
+#: index.docbook:599
+msgid "Before we map this association, think about the other side. Clearly, we could just keep this unidirectional. Or, we could create another collection on the <literal>Event</literal>, if we want to be able to navigate it bi-directional, i.e. <literal>anEvent.getParticipants()</literal>. This is not necessary, from a functional perspective. You could always execute an explicit query to retrieve the participants for a particular event. This is a design choice left to you, but what is clear from this discussion is the multiplicity of the association: \"many\" valued on both sides, we call this a <emphasis>many-to-many</emphasis> association. Hence, we use Hibernate's many-to-many mapping:"
+msgstr "Hibernateã¯ããã¨ãããã種é¡ã®ã³ã¬ã¯ã·ã§ã³ãããã³ã°ããµãã¼ããã¦ãã¾ããã æãä¸è¬çãªãã®ã <literal><set></literal> ã§ãã å¤å¯¾å¤é¢é£ï¼ã¾ã㯠<emphasis>n:m</emphasis> ã¨ã³ãã£ãã£ãªã¬ã¼ã·ã§ã³ã·ããï¼ã«ã¯ã é¢é£ãã¼ãã«ãå¿
è¦ã§ãã ãã®ãã¼ãã«ã®ããããã®è¡ã¯ã人ã¨ã¤ãã³ãéã®ãªã³ã¯ã表ç¾ãã¾ãã ãã¼ãã«å㯠<literal>set</literal> è¦ç´ ã® <literal>table</literal> å±æ§ã§è¨å®ãã¾ãã 人å´ã®é¢é£ã®èå¥åã«ã©ã å㯠<literal><key></literal> è¦ç´ ã§ã ã¤ãã³ãå´ã®ã«ã©ã å㯠<literal><many-to-many></literal> ã® <literal>column</literal> å±æ§ã§å®ç¾©ãã¾ãã Hibernateã«ã³ã¬ã¯ã·ã§ã³ã®ãªãã¸ã§ã¯ãã®ã¯ã©ã¹ ï¼æ£ç¢ºã«ã¯ãåç
§ã®ã³ã¬ã¯ã·ã§ã³ã®å対å´ã®ã¯ã©ã¹ï¼ãæããªããã°ãªãã¾ããã"
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ "\n"
+ " <set name=\"events\" table=\"PERSON_EVENT\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <many-to-many column=\"EVENT_ID\" class=\"events.Event\"/>\n"
+ " </set>\n"
+ "\n"
+ "</class>]]>"
+msgstr "ãã®ãããã®ãããã³ã°ã®ãã¼ã¿ãã¼ã¹ã¹ãã¼ãã¯ä»¥ä¸ã®ããã«ãªãã¾ããï¼"
+
+#: index.docbook:612
+msgid "Hibernate supports all kinds of collection mappings, a <literal><set></literal> being most common. For a many-to-many association (or <emphasis>n:m</emphasis> entity relationship), an association table is needed. Each row in this table represents a link between a person and an event. The table name is configured with the <literal>table</literal> attribute of the <literal>set</literal> element. The identifier column name in the association, for the person's side, is defined with the <literal><key></literal> element, the column name for the event's side with the <literal>column</literal> attribute of the <literal><many-to-many></literal>. You also have to tell Hibernate the class of the objects in your collection (correct: the class on the other side of the collection of references)."
+msgstr ""
+ "<![CDATA[
+\n"
+ " _____________ __________________
+\n"
+ " | | | | _____________
+\n"
+ " | EVENTS | | PERSON_EVENT | | |
+\n"
+ " |_____________| |__________________| | PERSON |
+\n"
+ " | | | | |_____________|
+\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | |
+\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |
+\n"
+ " | TITLE | |__________________| | AGE |
+\n"
+ " |_____________| | FIRSTNAME |
+\n"
+ " | LASTNAME |
+\n"
+ " |_____________|
+\n"
+ " ]]>"
+
+#: index.docbook:624
+msgid "The database schema for this mapping is therefore:"
+msgstr "é¢é£ãåããã"
+
+#: index.docbook:628
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | |\n"
+ " |_____________| |__________________| | PERSON |\n"
+ " | | | | |_____________|\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | |\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE |\n"
+ " |_____________| | FIRSTNAME |\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr "<literal>EventManager</literal> ã®æ°ããã¡ã½ããã§äººã
ã¨ã¤ãã³ããä¸ç·ã«ãã¾ãããï¼"
+
+#: index.docbook:633
+msgid "Working the association"
+msgstr ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {
+\n"
+ "
+\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+\n"
+ " session.beginTransaction();
+\n"
+ "
+\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);
+\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);
+\n"
+ "
+\n"
+ " aPerson.getEvents().add(anEvent);
+\n"
+ "
+\n"
+ " session.getTransaction().commit();
+\n"
+ "}]]>"
+
+#: index.docbook:635
+msgid "Let's bring some people and events together in a new method in <literal>EventManager</literal>:"
+msgstr "<literal>Person</literal> 㨠<literal>Event</literal> ããã¼ãããå¾ã æ®éã®ã³ã¬ã¯ã·ã§ã³ã¡ã½ããã使ã£ã¦åç´ã«ãã®ã³ã¬ã¯ã·ã§ã³ãä¿®æ£ãã¦ãã ããã ã覧ã®ã¨ãã <literal>update()</literal> ã <literal>save()</literal> ã®æ示çãªå¼ã³åºãã¯ããã¾ããã Hibernateã¯ãä¿®æ£ããããã¨ã«ããæ´æ°ããå¿
è¦ã®ããã³ã¬ã¯ã·ã§ã³ãèªåçã«æ¤ç¥ãã¾ãã ãã㯠<emphasis>èªåãã¼ãã£ãã§ãã¯</emphasis> ã¨å¼ã°ãã ãªãã¸ã§ã¯ãã®ååãdateããããã£ãä¿®æ£ãããã¨ã§è©¦ããã¨ãå¯è½ã§ãã ãããã <emphasis>æ°¸ç¶</emphasis> ç¶æ
ã«ããéãã ã¤ã¾ãç¹å®ã®Hibernate <literal>Session</literal> ã«ãã¤ã³ãããã¦ããéã ï¼ä¾ãã°ä½æ¥åä½(Unit of Work)ã®ä¸ã§åã«ãã¼ãã¾ãã¯ã»ã¼ããããï¼ã Hibernateã¯ã©ããªå¤æ´ãã¢ãã¿ã¼ããé
延æ¸ãè¾¼ã¿(write-behind)ã§SQLãå®è¡ãã!
¾ãã é常ãä½æ¥åä½(Unit of Work)ã®æå¾ã«ã ãè¡ããããã¼ã¿ãã¼ã¹ã¨ã¡ã¢ãªã®ç¶æ
ãåæãããå¦çã¯ã <emphasis>ãã©ãã·ã¥</emphasis> ã¨å¼ã°ãã¾ãã ãã®ã³ã¼ãã§ã¯ãä½æ¥åä½(Unit of Work)ã¯ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ã®ã³ãããï¼ãããã¯ãã¼ã«ããã¯ï¼ã§çµäºãã¾ãã ããã¯ã <literal>CurrentSessionContext</literal> ã¯ã©ã¹ã«å¯¾ã㦠<literal>thread</literal> ãè¨å®ããããã§ãã"
+
+#: index.docbook:639
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr "ç°ãªãä½æ¥åä½(Unit of Work)ã§äººã
ã¨ã¤ãã³ãããã¼ããããã¨ãå½ç¶ã§ãã¾ãã ããã§ãªããã°ãæ°¸ç¶ç¶æ
ã«ãªãã¨ãï¼ä»¥åã«æ°¸ç¶ã§ãã£ããªãããã®ç¶æ
ã <emphasis>åé¢ï¼detachedï¼</emphasis> ã¨å¼ã³ã¾ãï¼ã <literal>Session</literal> ã®å¤é¨ã§ãªãã¸ã§ã¯ããä¿®æ£ãã¾ãã åé¢ãããã¨ãã«ã¯ã³ã¬ã¯ã·ã§ã³ãå¤æ´ãããã¨ãå¯è½ã§ãï¼"
+
+#: index.docbook:641
+msgid "After loading a <literal>Person</literal> and an <literal>Event</literal>, simply modify the collection using the normal collection methods. As you can see, there is no explicit call to <literal>update()</literal> or <literal>save()</literal>, Hibernate automatically detects that the collection has been modified and needs to be updated. This is called <emphasis>automatic dirty checking</emphasis>, and you can also try it by modifying the name or the date property of any of your objects. As long as they are in <emphasis>persistent</emphasis> state, that is, bound to a particular Hibernate <literal>Session</literal> (i.e. they have been just loaded or saved in a unit of work), Hibernate monitors any changes and executes SQL in a write-behind fashion. The process of synchronizing the memory state with the database, usually only at the end of a unit of work, is called <emphasis>flushing</emphasis>. In our code, the unit of work ends with a commit (or rollback) of the dat!
abase transaction - as defined by the <literal>thread</literal> configuration option for the <literal>CurrentSessionContext</literal> class."
+msgstr ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {
+\n"
+ "
+\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+\n"
+ " session.beginTransaction();
+\n"
+ "
+\n"
+ " Person aPerson = (Person) session
+\n"
+ " .createQuery(\"select p from Person p left join fetch p.events where p.id = :pid\")
+\n"
+ " .setParameter(\"pid\", personId)
+\n"
+ " .uniqueResult(); // Eager fetch the collection so we can use it detached
+\n"
+ "
+\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);
+\n"
+ "
+\n"
+ " session.getTransaction().commit();
+\n"
+ "
+\n"
+ " // End of first unit of work
+\n"
+ "
+\n"
+ " aPerson.getEvents().add(anEvent); // aPerson (and its collection) is detached
+\n"
+ "
+\n"
+ " // Begin second unit of work
+\n"
+ "
+\n"
+ " Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();
+\n"
+ " session2.beginTransaction();
+\n"
+ "
+\n"
+ " session2.update(aPerson); // Reattachment of aPerson
+\n"
+ "
+\n"
+ " session2.getTransaction().commit();
+\n"
+ "}]]>"
+
+#: index.docbook:656
+msgid "You might of course load person and event in different units of work. Or you modify an object outside of a <literal>Session</literal>, when it is not in persistent state (if it was persistent before, we call this state <emphasis>detached</emphasis>). You can even modify a collection when it is detached:"
+msgstr "<literal>update</literal> ã®å¼ã³åºãã¯åé¢ãªãã¸ã§ã¯ããåã³æ°¸ç¶åãã¾ãã ããã¯ãæ°ããä½æ¥åä½(Unit of Work)ã«ãã¤ã³ãããã¨è¨ããã§ãããã ãã®ããåé¢ã®éã«å ããããã©ã®ãããªä¿®æ£ããã¼ã¿ãã¼ã¹ã«ã»ã¼ãã§ãã¾ãã ã¨ã³ãã£ãã£ãªãã¸ã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ã¸ã®ä¿®æ£ï¼è¿½å ï½¥åé¤ï¼ãåæ§ã«ã»ã¼ãã§ãã¾ãã"
+
+#: index.docbook:663
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session\n"
+ " .createQuery(\"select p from Person p left join fetch p.events where p.id = :pid\")\n"
+ " .setParameter(\"pid\", personId)\n"
+ " .uniqueResult(); // Eager fetch the collection so we can use it detached\n"
+ "\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " // End of first unit of work\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent); // aPerson (and its collection) is detached\n"
+ "\n"
+ " // Begin second unit of work\n"
+ "\n"
+ " Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session2.beginTransaction();\n"
+ "\n"
+ " session2.update(aPerson); // Reattachment of aPerson\n"
+ "\n"
+ " session2.getTransaction().commit();\n"
+ "}]]>"
+msgstr "ããã¯ä»ã¯ãã¾ã使ãã¿ã¡ãããã¾ãããã èªåã®ã¢ããªã±ã¼ã·ã§ã³ã®è¨è¨ã«çµã¿è¾¼ããã¨ãã§ããéè¦ãªã³ã³ã»ããã§ãã ããã§ã¯ãã®ã¨ã¯ãµãµã¤ãºã®æå¾ã«ã <literal>EventManager</literal> ã®ã¡ã¤ã³ã¡ã½ããã«æ°ããã¢ã¯ã·ã§ã³ã追å ã㦠ã³ãã³ãã©ã¤ã³ããå¼ã³åºãã¦ã¿ã¾ãããã 人ãã¤ãã³ãã®èå¥åãå¿
è¦ãªãã <literal>save()</literal> ã¡ã½ãããè¿ãã¦ããã¾ã ï¼å ´åã«ãã£ã¦ã¯èå¥åãè¿ãããã«ã¡ã½ãããä¿®æ£ããå¿
è¦ãããããããã¾ããï¼ã"
+
+#: index.docbook:665
+msgid "The call to <literal>update</literal> makes a detached object persistent again, you could say it binds it to a new unit of work, so any modifications you made to it while detached can be saved to the database. This includes any modifications (additions/deletions) you made to a collection of that entity object."
+msgstr ""
+ "<![CDATA[else if (args[0].equals(\"addpersontoevent\")) {
+\n"
+ " Long eventId = mgr.createAndStoreEvent(\"My Event\", new Date());
+\n"
+ " Long personId = mgr.createAndStorePerson(\"Foo\", \"Bar\");
+\n"
+ " mgr.addPersonToEvent(personId, eventId);
+\n"
+ " System.out.println(\"Added person \" + personId + \" to event \" + eventId);
+\n"
+ "}]]>"
+
+#: index.docbook:672
+msgid "Well, this is not much use in our current situation, but it's an important concept you can design into your own application. For now, complete this exercise by adding a new action to the <literal>EventManager</literal>'s main method and call it from the command line. If you need the identifiers of a person and an event - the <literal>save()</literal> method returns it (you might have to modify some of the previous methods to return that identifier):"
+msgstr "ããã¯åãããã«éè¦ãª2ã¤ã®ã¯ã©ã¹ãã¤ã¾ã2ã¤ã®ã¨ã³ãã£ãã£éã®é¢é£ã®ä¾ã§ããã åã«è¿°ã¹ãããã«ãå
¸åçãªã¢ãã«ã«ã¯ãæ®éãæ¯è¼çéè¦ã§ã¯ãªããä»ã®ã¯ã©ã¹ã¨åãããã¾ãã ããã¾ã§ã«è¦ããã㪠<literal>int</literal> ã <literal>String</literal> ã®ãããªãã®ã§ãã ãã®ãããªã¯ã©ã¹ã <emphasis>å¤å</emphasis> ã¨è¨ãã¾ãã ãã®ã¤ã³ã¹ã¿ã³ã¹ã¯ç¹å®ã®ã¨ã³ãã£ãã£ã« <emphasis>ä¾å</emphasis> ãã¾ãã ãã®åã®ã¤ã³ã¹ã¿ã³ã¹ã¯ç¬èªã®IDãæã¡ã¾ãããã ã¨ã³ãã£ãã£éã§å
±æããããã¨ãããã¾ãã ï¼ãã¡ã¼ã¹ããã¼ã ãåãã ã£ãã¨ãã¦ãã2人ã®äººã¯åã <literal>firstname</literal> ãªãã¸ã§ã¯ããåç
§ãã¾ããï¼ã å¤åã¯ãã¡ããJDKå
ã«è¦ã¤ããã¾ãããããã ãã§ã¯ãªã ï¼å®éãHibernateã¢ããªã±ã¼ã·ã§ã³ã«ããã¦ãã¹ã¦ã®JDKã!
¯ã©ã¹ã¯å¤åã¨è¦ãªãã¾ãï¼ã ä¾ãã° <literal>Address</literal> ã <literal>MonetaryAmount</literal> ã®ãããªç¬èªã®ä¾åã¯ã©ã¹ãæ¸ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:680
+msgid ""
+ "<![CDATA[else if (args[0].equals(\"addpersontoevent\")) {\n"
+ " Long eventId = mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " Long personId = mgr.createAndStorePerson(\"Foo\", \"Bar\");\n"
+ " mgr.addPersonToEvent(personId, eventId);\n"
+ " System.out.println(\"Added person \" + personId + \" to event \" + eventId);\n"
+ "}]]>"
+msgstr "å¤åã®ã³ã¬ã¯ã·ã§ã³ãè¨è¨ãããã¨ãã§ãã¾ãã ããã¯ä»ã®ã¨ã³ãã£ãã£ã¸ã®åç
§ã®ã³ã¬ã¯ã·ã§ã³ã¨ã¯æ¦å¿µçã«é常ã«ç°ãªãã¾ããã Javaã§ã¯ã»ã¨ãã©åãããã«è¦ãã¾ãã"
+
+#: index.docbook:682
+msgid "This was an example of an association between two equally important classes, two entities. As mentioned earlier, there are other classes and types in a typical model, usually \"less important\". Some you have already seen, like an <literal>int</literal> or a <literal>String</literal>. We call these classes <emphasis>value types</emphasis>, and their instances <emphasis>depend</emphasis> on a particular entity. Instances of these types don't have their own identity, nor are they shared between entities (two persons don't reference the same <literal>firstname</literal> object, even if they have the same first name). Of course, value types can not only be found in the JDK (in fact, in a Hibernate application all JDK classes are considered value types), but you can also write dependent classes yourself, <literal>Address</literal> or <literal>MonetaryAmount</literal>, for example."
+msgstr "å¤ã®ã³ã¬ã¯ã·ã§ã³"
+
+#: index.docbook:695
+msgid "You can also design a collection of value types. This is conceptually very different from a collection of references to other entities, but looks almost the same in Java."
+msgstr "å¤åãªãã¸ã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ã <literal>Person</literal> ã¨ã³ãã£ãã£ã¸è¿½å ãã¾ãã Eã¡ã¼ã«ã¢ãã¬ã¹ãæ ¼ç´ãããã®ã§ããã<literal>String</literal> åã使ã£ã¦ããã®ã§ã ã³ã¬ã¯ã·ã§ã³ã¯åã³ <literal>Set</literal> ã§ãï¼"
+
+#: index.docbook:703
+msgid "Collection of values"
+msgstr ""
+ "<![CDATA[private Set emailAddresses = new HashSet();
+\n"
+ "
+\n"
+ "public Set getEmailAddresses() {
+\n"
+ " return emailAddresses;
+\n"
+ "}
+\n"
+ "
+\n"
+ "public void setEmailAddresses(Set emailAddresses) {
+\n"
+ " this.emailAddresses = emailAddresses;
+\n"
+ "}]]>"
+
+#: index.docbook:705
+msgid "We add a collection of value typed objects to the <literal>Person</literal> entity. We want to store email addresses, so the type we use is <literal>String</literal>, and the collection is again a <literal>Set</literal>:"
+msgstr "ãã® <literal>Set</literal> ã®ãããã³ã°ã§ãï¼"
+
+#: index.docbook:710
+msgid ""
+ "<![CDATA[private Set emailAddresses = new HashSet();\n"
+ "\n"
+ "public Set getEmailAddresses() {\n"
+ " return emailAddresses;\n"
+ "}\n"
+ "\n"
+ "public void setEmailAddresses(Set emailAddresses) {\n"
+ " this.emailAddresses = emailAddresses;\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[<set name=\"emailAddresses\" table=\"PERSON_EMAIL_ADDR\">
+\n"
+ " <key column=\"PERSON_ID\"/>
+\n"
+ " <element type=\"string\" column=\"EMAIL_ADDR\"/>
+\n"
+ "</set>]]>"
+
+#: index.docbook:712
+msgid "The mapping of this <literal>Set</literal>:"
+msgstr "åã®ãããã³ã°ã¨æ¯ã¹ã¦éãã®ã¯ <literal>element</literal> ã®é¨åã§ããã Hibernateã«ãã®ã³ã¬ã¯ã·ã§ã³ãä»ã®ã¨ã³ãã£ãã£ã¸ã®åç
§ãå«ã¾ãã <literal>String</literal> åã®è¦ç´ ã®ã³ã¬ã¯ã·ã§ã³ãå«ããã¨ãæãã¾ãã ï¼å°æåã®åå(string)ã¯Hibernateã®ãããã³ã°åã¾ãã¯ã³ã³ãã¼ã¿ã§ããã¨ãããã¨ã§ãï¼ã ç¹°ãè¿ãã¾ããã<literal>set</literal> è¦ç´ ã® <literal>table</literal> å±æ§ã¯ã ã³ã¬ã¯ã·ã§ã³ã®ããã®ãã¼ãã«åãæå®ãã¾ãã <literal>key</literal> è¦ç´ ã¯ã³ã¬ã¯ã·ã§ã³ãã¼ãã«ã®å¤é¨ãã¼ã«ã©ã åãå®ç¾©ãã¾ãã <literal>element</literal> è¦ç´ ã® <literal>column</literal> å±æ§ã¯ <literal>String</literal> ã®å¤ãå®éã«æ ¼ç´ãããã«ã©ã ã®ååãå®ç¾©ãã¾ãã"
+
+#: index.docbook:716
+msgid ""
+ "<![CDATA[<set name=\"emailAddresses\" table=\"PERSON_EMAIL_ADDR\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <element type=\"string\" column=\"EMAIL_ADDR\"/>\n"
+ "</set>]]>"
+msgstr "æ´æ°ããã¹ãã¼ããè¦ã¦ãã ããï¼"
+
+#: index.docbook:718
+msgid "The difference compared with the earlier mapping is the <literal>element</literal> part, which tells Hibernate that the collection does not contain references to another entity, but a collection of elements of type <literal>String</literal> (the lowercase name tells you it's a Hibernate mapping type/converter). Once again, the <literal>table</literal> attribute of the <literal>set</literal> element determines the table name for the collection. The <literal>key</literal> element defines the foreign-key column name in the collection table. The <literal>column</literal> attribute in the <literal>element</literal> element defines the column name where the <literal>String</literal> values will actually be stored."
+msgstr ""
+ "<![CDATA[
+\n"
+ " _____________ __________________
+\n"
+ " | | | | _____________
+\n"
+ " | EVENTS | | PERSON_EVENT | | | ___________________
+\n"
+ " |_____________| |__________________| | PERSON | | |
+\n"
+ " | | | | |_____________| | PERSON_EMAIL_ADDR |
+\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | | |___________________|
+\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID | <--> | *PERSON_ID |
+\n"
+ " | TITLE | |__________________| | AGE | | *EMAIL_ADDR |
+\n"
+ " |_____________| | FIRSTNAME | |___________________|
+\n"
+ " | LASTNAME |
+\n"
+ " |_____________|
+\n"
+ " ]]>"
+
+#: index.docbook:728
+msgid "Have a look at the updated schema:"
+msgstr "ã³ã¬ã¯ã·ã§ã³ãã¼ãã«ã®ä¸»ãã¼ã¯ãå®éã¯ä¸¡æ¹ã®ã«ã©ã ã使ã£ãè¤åãã¼ã§ãããã¨ããããã¾ãã ããã¯äººãã¨ã«Eã¡ã¼ã«ã¢ãã¬ã¹ãéè¤ã§ããªãã¨ãããã¨ã§ã Javaã®setã«è¦æ±ãããã»ãã³ãã£ã¯ã¹ãã®ãã®ã§ãã"
+
+#: index.docbook:732
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | | ___________________\n"
+ " |_____________| |__________________| | PERSON | | |\n"
+ " | | | | |_____________| | PERSON_EMAIL_ADDR |\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | | |___________________|\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE | | *EMAIL_ADDR |\n"
+ " |_____________| | FIRSTNAME | |___________________|\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr "以å人ã¨ã¤ãã³ããé¢é£ã¥ããã¨ãã¨å
¨ãåãããã«ã ä»ã試ãã«ã³ã¬ã¯ã·ã§ã³ã«è¦ç´ ã追å ãããã¨ãã§ããããã«ãªãã¾ããã 両æ¹ã¨ãJavaã§ã¯åãã³ã¼ãã§ãã"
+
+#: index.docbook:734
+msgid "You can see that the primary key of the collection table is in fact a composite key, using both columns. This also implies that there can't be duplicate email addresses per person, which is exactly the semantics we need for a set in Java."
+msgstr ""
+ "<![CDATA[private void addEmailToPerson(Long personId, String emailAddress) {
+\n"
+ "
+\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();
+\n"
+ " session.beginTransaction();
+\n"
+ "
+\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);
+\n"
+ "
+\n"
+ " // The getEmailAddresses() might trigger a lazy load of the collection
+\n"
+ " aPerson.getEmailAddresses().add(emailAddress);
+\n"
+ "
+\n"
+ " session.getTransaction().commit();
+\n"
+ "}]]>"
+
+#: index.docbook:740
+msgid "You can now try and add elements to this collection, just like we did before by linking persons and events. It's the same code in Java:"
+msgstr "ä»åãã³ã¬ã¯ã·ã§ã³ã®åæåã« <emphasis>fetch</emphasis> ã¯ã¨ãªã使ç¨ãã¾ããã§ããã ãã®ãããgetterã¡ã½ããã®å¼ã³åºãã«ãã£ã¦ã³ã¬ã¯ã·ã§ã³ãåæåããããã®SELECTã å®è¡ãããã®ã§ãã³ã¬ã¯ã·ã§ã³ã«è¦ç´ ã追å ã§ãã¾ãã SQLã®ãã°ãç£è¦ãã¦ãå³æãã§ããã使ã£ã¦æé©åãã¦ãã ããã"
+
+#: index.docbook:745
+msgid ""
+ "<![CDATA[private void addEmailToPerson(Long personId, String emailAddress) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ "\n"
+ " // The getEmailAddresses() might trigger a lazy load of the collection\n"
+ " aPerson.getEmailAddresses().add(emailAddress);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr "åæ¹åé¢é£"
+
+#: index.docbook:747
+msgid "This time we didnt' use a <emphasis>fetch</emphasis> query to initialize the collection. Hence, the call to its getter method will trigger an additional select to initialize it, so we can add an element to it. Monitor the SQL log and try to optimize this with an eager fetch."
+msgstr "次ã«åæ¹åé¢é£ããããã³ã°ãã¾ãã Javaã§ä¸¡å´ãã人ã¨ã¤ãã³ãã®é¢é£ãåä½ããã¾ãã ãã¡ããããã¼ã¿ãã¼ã¹ã¹ãã¼ãã¯å¤ããã¾ããããå¤é度ã¯å¤å¯¾å¤ã®ã¾ã¾ã§ãã ãªã¬ã¼ã·ã§ãã«ãã¼ã¿ãã¼ã¹ã¯ãããã¯ã¼ã¯ããã°ã©ãã³ã°è¨èªãããæè»ãªã®ã§ã ããã²ã¼ã·ã§ã³ã®æ¹åã®ãããªãã®ãå¿
è¦ã¨ãã¾ããã ãã¼ã¿ã¯ããããã®æ¹æ³ã§è¦ãã復å
ã§ããã¨ãããã¨ã§ãã"
+
+#: index.docbook:757
+msgid "Bi-directional associations"
+msgstr "ã¾ã <literal>Event</literal> ã¤ãã³ãã¯ã©ã¹ã«åå è
ã®ã³ã¬ã¯ã·ã§ã³ã追å ãã¾ãï¼"
+
+#: index.docbook:759
+msgid "Next we are going to map a bi-directional association - making the association between person and event work from both sides in Java. Of course, the database schema doesn't change, we still have many-to-many multiplicity. A relational database is more flexible than a network programming language, so it doesn't need anything like a navigation direction - data can be viewed and retrieved in any possible way."
+msgstr ""
+ "<![CDATA[private Set participants = new HashSet();
+\n"
+ "
+\n"
+ "public Set getParticipants() {
+\n"
+ " return participants;
+\n"
+ "}
+\n"
+ "
+\n"
+ "public void setParticipants(Set participants) {
+\n"
+ " this.participants = participants;
+\n"
+ "}]]>"
+
+#: index.docbook:767
+msgid "First, add a collection of participants to the <literal>Event</literal> Event class:"
+msgstr "ããã§ã¯ <literal>Event.hbm.xml</literal> ã§é¢é£ã®ãã¡ãå´ããããã³ã°ãã¦ãã ããã"
+
+#: index.docbook:771
+msgid ""
+ "<![CDATA[private Set participants = new HashSet();\n"
+ "\n"
+ "public Set getParticipants() {\n"
+ " return participants;\n"
+ "}\n"
+ "\n"
+ "public void setParticipants(Set participants) {\n"
+ " this.participants = participants;\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[<set name=\"participants\" table=\"PERSON_EVENT\" inverse=\"true\">
+\n"
+ " <key column=\"EVENT_ID\"/>
+\n"
+ " <many-to-many column=\"PERSON_ID\" class=\"events.Person\"/>
+\n"
+ "</set>]]>"
+
+#: index.docbook:773
+msgid "Now map this side of the association too, in <literal>Event.hbm.xml</literal>."
+msgstr "ã覧ã®ã¨ããããããã®ãããã³ã°ããã¥ã¡ã³ã(XMLãã¡ã¤ã«)ã§ããæ®éã® <literal>set</literal> ãããã³ã°ã使ã£ã¦ãã¾ãã <literal>key</literal> 㨠<literal>many-to-many</literal> ã®ã«ã©ã åãã 両æ¹ã®ãããã³ã°ããã¥ã¡ã³ãã§å
¥ãæ¿ãã«ãªã£ã¦ãããã¨ã«æ³¨ç®ãã¦ãã ããã ããã§æãéè¦ãªè¿½å é
ç®ã¯ã <literal>Event</literal> ã®ã³ã¬ã¯ã·ã§ã³ãããã³ã°ã® <literal>set</literal> è¦ç´ ã«ãã <literal>inverse=\"true\"</literal> å±æ§ã§ãã"
+
+#: index.docbook:777
+msgid ""
+ "<![CDATA[<set name=\"participants\" table=\"PERSON_EVENT\" inverse=\"true\">\n"
+ " <key column=\"EVENT_ID\"/>\n"
+ " <many-to-many column=\"PERSON_ID\" class=\"events.Person\"/>\n"
+ "</set>]]>"
+msgstr "ãã®æå®ã®æå³ã¯ã2ã¤ã®éã®ã¨ã³ãã£ãã£éã®ãªã³ã¯ã«ã¤ãã¦ã®æ
å ±ãæ¢ãå¿
è¦ãããã¨ãã Hibernateã¯å対å´ã®ã¨ã³ãã£ãã£ãã¤ã¾ã <literal>Person</literal> ã¯ã©ã¹ããæ¢ãã¨ãããã¨ã§ãã ä¸åº¦2ã¤ã®ã¨ã³ãã£ãã£éã®åæ¹åãªã³ã¯ãã©ã®ããã«ä½æããããããããã°ã ãããç解ãããã¨ã¯ã¨ã¦ãç°¡åã§ãã"
+
+#: index.docbook:779
+msgid "As you see, these are normal <literal>set</literal> mappings in both mapping documents. Notice that the column names in <literal>key</literal> and <literal>many-to-many</literal> are swapped in both mapping documents. The most important addition here is the <literal>inverse=\"true\"</literal> attribute in the <literal>set</literal> element of the <literal>Event</literal>'s collection mapping."
+msgstr "åæ¹åãªã³ã¯ã®åä½"
+
+#: index.docbook:787
+msgid "What this means is that Hibernate should take the other side - the <literal>Person</literal> class - when it needs to find out information about the link between the two. This will be a lot easier to understand once you see how the bi-directional link between our two entities is created ."
+msgstr "ã¾ããHibernateãé常ã®Javaã®ã»ãã³ãã£ã¯ã¹ã«å½±é¿ãåã¼ããªããã¨ãå¿ã«çãã¦ããã¦ãã ããã ç§ãã¡ã¯ãåæ¹åã®ä¾ã¨ãã¦ã©ã®ããã« <literal>Person</literal> 㨠<literal>Event</literal> ã®éã®ãªã³ã¯ãä½æããã§ããããï¼ <literal>Person</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ã®ã¤ãã³ãã¸ã®åç
§ã®ã³ã¬ã¯ã·ã§ã³ã« <literal>Event</literal> ã®ã¤ã³ã¹ã¿ã³ã¹ã追å ãã¾ããã ãã®ãããã®ãªã³ã¯ãåæ¹åã«ããããã°ã å½ããåã§ããå対å´ã«ãåããã¨ãããªããã°ãªãã¾ããã <literal>Event</literal> ã®ã³ã¬ã¯ã·ã§ã³ã« <literal>Person</literal> ã¸ã® åç
§ã追å ããã¨ãããã¨ã§ãã ãã®ã両å´ã§ãªã³ã¯ãè¨å®ãããã¨ãã¯çµ¶å¯¾ã«å¿
è¦ãªã®ã§ã決ãã¦å¿ããªãã§ãã ããã"
+
+#: index.docbook:796
+msgid "Working bi-directional links"
+msgstr "å¤ãã®éçºè
ã¯æ
éã«ããã°ã©ã ããã®ã§ã ã¨ã³ãã£ãã£ã®ä¸¡å´ã«æ£ããé¢é£ãè¨å®ãããªã³ã¯ç®¡çã¡ã½ãããä½æãã¾ãã ä¾ãã° <literal>Person</literal> ã§ã¯ä»¥ä¸ã®ããã«ãªãã¾ããï¼"
+
+#: index.docbook:798
+msgid "First, keep in mind that Hibernate does not affect normal Java semantics. How did we create a link between a <literal>Person</literal> and an <literal>Event</literal> in the unidirectional example? We added an instance of <literal>Event</literal> to the collection of event references, of an instance of <literal>Person</literal>. So, obviously, if we want to make this link working bi-directional, we have to do the same on the other side - adding a <literal>Person</literal> reference to the collection in an <literal>Event</literal>. This \"setting the link on both sides\" is absolutely necessary and you should never forget doing it."
+msgstr ""
+ "<![CDATA[protected Set getEvents() {
+\n"
+ " return events;
+\n"
+ "}
+\n"
+ "
+\n"
+ "protected void setEvents(Set events) {
+\n"
+ " this.events = events;
+\n"
+ "}
+\n"
+ "
+\n"
+ "public void addToEvent(Event event) {
+\n"
+ " this.getEvents().add(event);
+\n"
+ " event.getParticipants().add(this);
+\n"
+ "}
+\n"
+ "
+\n"
+ "public void removeFromEvent(Event event) {
+\n"
+ " this.getEvents().remove(event);
+\n"
+ " event.getParticipants().remove(this);
+\n"
+ "}]]>"
+
+#: index.docbook:808
+msgid "Many developers program defensive and create link management methods to correctly set both sides, e.g. in <literal>Person</literal>:"
+msgstr "ã³ã¬ã¯ã·ã§ã³ã®ã²ããã¨ã»ããã¡ã½ãããç¾å¨protectedã«ãªã£ã¦ãããã¨ã«æ³¨æãã¦ãã ããã ããã¯åãããã±ã¼ã¸ã®ã¯ã©ã¹ããµãã¯ã©ã¹ã®ã¡ã½ããã¯ä¾ç¶ã¢ã¯ã»ã¹ãå¯è½ã§ããã ï¼ã»ã¨ãã©ï¼ãã®ããã±ã¼ã¸å¤ã®ã©ã®ã¯ã©ã¹ã§ãç´æ¥ãã®ã³ã¬ã¯ã·ã§ã³ãå°ç¡ãã«ãããã¨ãé²ãã¾ãã ããããå対å´ã®ã³ã¬ã¯ã·ã§ã³ã«ãåããã¨ãããæ¹ãããã§ãããã"
+
+#: index.docbook:813
+msgid ""
+ "<![CDATA[protected Set getEvents() {\n"
+ " return events;\n"
+ "}\n"
+ "\n"
+ "protected void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ "}\n"
+ "\n"
+ "public void addToEvent(Event event) {\n"
+ " this.getEvents().add(event);\n"
+ " event.getParticipants().add(this);\n"
+ "}\n"
+ "\n"
+ "public void removeFromEvent(Event event) {\n"
+ " this.getEvents().remove(event);\n"
+ " event.getParticipants().remove(this);\n"
+ "}]]>"
+msgstr "<literal>inverse</literal> ãããã³ã°å±æ§ã¨ã¯ãã£ããä½ã§ããããï¼ éçºè
ã¨Javaã«ã¨ã£ã¦ã¯ãåæ¹åãªã³ã¯ã¯åã«ä¸¡å´ã®åç
§ãæ£ããè¨å®ããã¨ãããã¨ã§ãã ãããHibernateã¯ï¼å¶ç´éåãé¿ããããã«ï¼SQLã® <literal>INSERT</literal> 㨠<literal>UPDATE</literal> æãæ£ç¢ºã«å¤æ´ããããã®ååãªæ
å ±ãæã£ã¦ããªãã®ã§ã åæ¹åé¢é£ããããã£ãæ±ãããã®ä½ããã®å©ããå¿
è¦ã¨ãã¾ãã é¢é£ã®çå´ã <literal>inverse</literal> ã«è¨å®ãããã¨ã§ãHibernateã¯åºæ¬çã«ã¯è¨å®ããå´ãç¡è¦ãã å対å´ã® <emphasis>é¡</emphasis> ã¨ãã¦èãã¾ãã ããã ãã§ãHibernateã¯æ¹åãæã¤ããã²ã¼ã·ã§ã³ã¢ãã«ãSQLãã¼ã¿ãã¼ã¹ã¹ãã¼ãã¸å¤æããã¨ãã® ãã¹ã¦ã®åé¡ã«ãã¾ã対å¦ã§ãã¾ãã è¦ãã¦ãããªããã°ãªããªãã«ã¼ã«ã¯ç°¡åã§ãã åæ¹åé¢é£ã¯å¿
ã!
çå´ã <literal>inverse</literal> ã«ããå¿
è¦ãããã¨ãããã¨ã§ãã ä¸å¯¾å¤é¢é£ã§ã¯ããã¯å¤å´ã§ãªããã°ãªãã¾ããã å¤å¯¾å¤é¢é£ã§ã¯ã©ã¡ãå´ã§ãæ§ãã¾ãããã©ã¡ãã§ãéãã¯ããã¾ããã"
+
+#: index.docbook:815
+msgid "Notice that the get and set methods for the collection are now protected - this allows classes in the same package and subclasses to still access the methods, but prevents everybody else from messing with the collections directly (well, almost). You should probably do the same with the collection on the other side."
+msgstr "ã§ã¯ãããå°ããªWebã¢ããªã±ã¼ã·ã§ã³ã«ãã¦ã¿ã¾ãããã"
+
+#: index.docbook:822
+msgid "What about the <literal>inverse</literal> mapping attribute? For you, and for Java, a bi-directional link is simply a matter of setting the references on both sides correctly. Hibernate however doesn't have enough information to correctly arrange SQL <literal>INSERT</literal> and <literal>UPDATE</literal> statements (to avoid constraint violations), and needs some help to handle bi-directional associations properly. Making one side of the association <literal>inverse</literal> tells Hibernate to basically ignore it, to consider it a <emphasis>mirror</emphasis> of the other side. That's all that is necessary for Hibernate to work out all of the issues when transformation a directional navigation model to a SQL database schema. The rules you have to remember are straightforward: All bi-directional associations need one side as <literal>inverse</literal>. In a one-to-many association it has to be the many-side, in many-to-many association you can pick either side, there!
is no difference."
+msgstr "ãã¼ã3 - EventManager Webã¢ããªã±ã¼ã·ã§ã³"
+
+#: index.docbook:837
+msgid "Let's turn this into a small web application."
+msgstr "Hibernateã®Webã¢ããªã±ã¼ã·ã§ã³ã¯ãã¹ã¿ã³ãã¢ãã¼ã³ã®ã¢ããªã±ã¼ã·ã§ã³ã®ããã« <literal>Session</literal> 㨠<literal>Transaction</literal> ã使ç¨ãã¾ãã ãããããã¤ãã®ä¸è¬çãªãã¿ã¼ã³ãå½¹ç«ã¡ã¾ãã ãã㧠<literal>EventManagerServlet</literal> ãä½æãã¾ãããã®ãµã¼ãã¬ããã¯ã ãã¼ã¿ãã¼ã¹ã«æ ¼ç´ããå
¨ã¦ã®ã¤ãã³ãããªã¹ãã«ã§ããããã«HTMLãã©ã¼ã ããæ°ããã¤ãã³ããå
¥åã§ãããã®ã§ãã"
+
+#: index.docbook:844
+msgid "Part 3 - The EventManager web application"
+msgstr "åºæ¬çãªServletã®è¨è¿°"
+
+#: index.docbook:846
+msgid "A Hibernate web application uses <literal>Session</literal> and <literal>Transaction</literal> almost like a standalone application. However, some common patterns are useful. We now write an <literal>EventManagerServlet</literal>. This servlet can list all events stored in the database, and it provides an HTML form to enter new events."
+msgstr "æ°ããã¯ã©ã¹ããã½ã¼ã¹ãã£ã¬ã¯ããªã® <literal>events</literal> ããã±ã¼ã¸ã«ä½æãã¦ãã ããã"
+
+#: index.docbook:854
+msgid "Writing the basic servlet"
+msgstr ""
+ "<![CDATA[package events;
+\n"
+ "
+\n"
+ "// Imports
+\n"
+ "
+\n"
+ "public class EventManagerServlet extends HttpServlet {
+\n"
+ "
+\n"
+ " // Servlet code
+\n"
+ "}]]>"
+
+#: index.docbook:856
+msgid "Create a new class in your source directory, in the <literal>events</literal> package:"
+msgstr "Servletã¯HTTPã® <literal>GET</literal> ãªã¯ã¨ã¹ãã®ã¿ãå¦çããã®ã§ã <literal>doGet()</literal> ãå®è£
ãã¾ãã"
+
+#: index.docbook:861
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "// Imports\n"
+ "\n"
+ "public class EventManagerServlet extends HttpServlet {\n"
+ "\n"
+ " // Servlet code\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[protected void doGet(HttpServletRequest request,
+\n"
+ " HttpServletResponse response)
+\n"
+ " throws ServletException, IOException {
+\n"
+ "
+\n"
+ " SimpleDateFormat dateFormatter = new SimpleDateFormat(\"dd.MM.yyyy\");
+\n"
+ "
+\n"
+ " try {
+\n"
+ " // Begin unit of work
+\n"
+ " HibernateUtil.getSessionFactory()
+\n"
+ " .getCurrentSession().beginTransaction();
+\n"
+ "
+\n"
+ " // Process request and render page...
+\n"
+ "
+\n"
+ " // End unit of work
+\n"
+ " HibernateUtil.getSessionFactory()
+\n"
+ " .getCurrentSession().getTransaction().commit();
+\n"
+ "
+\n"
+ " } catch (Exception ex) {
+\n"
+ " HibernateUtil.getSessionFactory()
+\n"
+ " .getCurrentSession().getTransaction().rollback();
+\n"
+ " throw new ServletException(ex);
+\n"
+ " }
+\n"
+ "
+\n"
+ "}]]>"
+
+#: index.docbook:863
+msgid "The servlet handles HTTP <literal>GET</literal> requests only, hence, the method we implement is <literal>doGet()</literal>:"
+msgstr "ãã㯠<emphasis>session-per-request</emphasis> ã¨ãããã¿ã¼ã³ã§ãã Servletããªã¯ã¨ã¹ããåãåãã¨ã <literal>SessionFactory</literal> ã® <literal>getCurrentSession()</literal> ã®æåã®å¼ã³åºãã§ã Hibernateã®æ°ãã <literal>Session</literal> ãéããã¾ãã ãã®ã¨ããã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ãéå§ããã¾ãã ãã¼ã¿ã®èªã¿æ¸ãã«é¢ãããããã¹ã¦ã®ãã¼ã¿ã¢ã¯ã»ã¹ã¯ãã©ã³ã¶ã¯ã·ã§ã³å
ã§è¡ãã¾ãã ï¼ã¢ããªã±ã¼ã·ã§ã³å
ã§ã¯ãªã¼ãã³ãããã¢ã¼ãã使ç¨ãã¾ããï¼ã"
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[protected void doGet(HttpServletRequest request,\n"
+ " HttpServletResponse response)\n"
+ " throws ServletException, IOException {\n"
+ "\n"
+ " SimpleDateFormat dateFormatter = new SimpleDateFormat(\"dd.MM.yyyy\");\n"
+ "\n"
+ " try {\n"
+ " // Begin unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // Process request and render page...\n"
+ "\n"
+ " // End unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().commit();\n"
+ "\n"
+ " } catch (Exception ex) {\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().rollback();\n"
+ " throw new ServletException(ex);\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr "次ã«ããªã¯ã¨ã¹ãã®ã¢ã¯ã·ã§ã³ã¯å¦çãããã¬ã¹ãã³ã¹ã§ããHTMLãæç»ããã¾ãã ããã«ã¤ãã¦ã¯ããã«èª¬æãã¾ãã"
+
+#: index.docbook:870
+msgid "The pattern we are applying here is called <emphasis>session-per-request</emphasis>. When a request hits the servlet, a new Hibernate <literal>Session</literal> is opened through the first call to <literal>getCurrentSession()</literal> on the <literal>SessionFactory</literal>. Then a database transaction is started—all data access as to occur inside a transaction, no matter if data is read or written (we don't use the auto-commit mode in applications)."
+msgstr "æå¾ã«ãªã¯ã¨ã¹ãã®å¦çã¨HTMLæç»ãå®äºããã¨ãã«ãä½æ¥åä½(Unit of Work)ãçµäºãã¾ãã ããå¦çãæç»ä¸ã«åé¡ãçºçããå ´åãexceptionãæãããã¦ãã¼ã¿ãã¼ã¹ãã©ã³ã¶ã¯ã·ã§ã³ããã¼ã«ããã¯ãã¾ãã ãã㧠<literal>session-per-request</literal> ãã¿ã¼ã³ãå®äºãã¾ãã å
¨ã¦ã®ãµã¼ãã¬ããã«ãã©ã³ã¶ã¯ã·ã§ã³å¢çã®ã³ã¼ããæ¸ã代ããã«ããµã¼ãã¬ãããã£ã«ã¿ã«è¨è¿°ãããã¨ãå¯è½ã§ãã <emphasis>Open Session in View</emphasis> ã¨å¼ã°ãããã®ãã¿ã¼ã³ã«ã¤ãã¦ã¯ã Hibernateã®Webãµã¤ããWikiãåç
§ãã¦ãã ããã ãµã¼ãã¬ããã§ã¯ãªãJSPã§HTMLæç»ããããã¨ããã¨ãããã«ãã®ãã¿ã¼ã³ã«ã¤ãã¦ã®æ
å ±ãå¿
è¦ã«ãªãã§ãããã"
+
+#: index.docbook:879
+msgid "Do <emphasis>not</emphasis> use a new Hibernate <literal>Session</literal> for every database operation. Use one Hibernate <literal>Session</literal> that is scoped to the whole request. Use <literal>getCurrentSession()</literal>, so that it is automatically bound to the current Java thread."
+msgstr "å¦çã¨æç»"
+
+#: index.docbook:886
+msgid "Next, the possible actions of the request are processed and the response HTML is rendered. We'll get to that part soon."
+msgstr "ã§ã¯ããªã¯ã¨ã¹ãã®å¦çã¨ãã¼ã¸ã®æç»ãå®è£
ãã¾ãã"
+
+#: index.docbook:891
+msgid "Finally, the unit of work ends when processing and rendering is complete. If any problem occured during processing or rendering, an exception will be thrown and the database transaction rolled back. This completes the <literal>session-per-request</literal> pattern. Instead of the transaction demarcation code in every servlet you could also write a servlet filter. See the Hibernate website and Wiki for more information about this pattern, called <emphasis>Open Session in View</emphasis>—you'll need it as soon as you consider rendering your view in JSP, not in a servlet."
+msgstr ""
+ "<![CDATA[// Write HTML header
+\n"
+ "PrintWriter out = response.getWriter();
+\n"
+ "out.println(\"<html><head><title>Event Manager</title></head><body>\");
+\n"
+ "
+\n"
+ "// Handle actions
+\n"
+ "if ( \"store\".equals(request.getParameter(\"action\")) ) {
+\n"
+ "
+\n"
+ " String eventTitle = request.getParameter(\"eventTitle\");
+\n"
+ " String eventDate = request.getParameter(\"eventDate\");
+\n"
+ "
+\n"
+ " if ( \"\".equals(eventTitle) || \"\".equals(eventDate) ) {
+\n"
+ " out.println(\"<b><i>Please enter event title and date.</i></b>\");
+\n"
+ " } else {
+\n"
+ " createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));
+\n"
+ " out.println(\"<b><i>Added event.</i></b>\");
+\n"
+ " }
+\n"
+ "}
+\n"
+ "
+\n"
+ "// Print page
+\n"
+ "printEventForm(out);
+\n"
+ "listEvents(out, dateFormatter);
+\n"
+ "
+\n"
+ "// Write HTML footer
+\n"
+ "out.println(\"</body></html>\");
+\n"
+ "out.flush();
+\n"
+ "out.close();]]>"
+
+#: index.docbook:905
+msgid "Processing and rendering"
+msgstr "Javaã¨HTMLãæ··å¨ããã³ã¼ãã£ã³ã°ã¹ã¿ã¤ã«ã¯ãããè¤éãªã¢ããªã±ã¼ã·ã§ã³ã«ã¯é©ãã¦ããªãã§ããã ï¼ãã®ãã¥ã¼ããªã¢ã«ã§ã¯ãåºæ¬çãªHibernateã®ã³ã³ã»ããã示ãã¦ããã ãã§ãããã¨ãè¦ãã¦ããã¦ãã ããï¼ã ãã®ã³ã¼ãã¯HTMLã®ãããã¼ã¨ããã¿ã¼ã®è¨è¿°ã§ãã ãã®ãã¼ã¸ã«ã¯ãã¤ãã³ããå
¥åããHTMLãã©ã¼ã ã¨ããã¼ã¿ãã¼ã¹ã«ããå
¨ã¦ã®ã¤ãã³ãã®ãªã¹ãã表示ããã¾ãã æåã®ã¡ã½ããã¯ããåç´ãªHTMLåºåã§ãã"
+
+#: index.docbook:907
+msgid "Let's implement the processing of the request and rendering of the page."
+msgstr ""
+ "<![CDATA[private void printEventForm(PrintWriter out) {
+\n"
+ " out.println(\"<h2>Add new event:</h2>\");
+\n"
+ " out.println(\"<form>\");
+\n"
+ " out.println(\"Title: <input name='eventTitle' length='50'/><br/>\");
+\n"
+ " out.println(\"Date (e.g. 24.12.2009): <input name='eventDate' length='10'/><br/>\");
+\n"
+ " out.println(\"<input type='submit' name='action' value='store'/>\");
+\n"
+ " out.println(\"</form>\");
+\n"
+ "}]]>"
+
+#: index.docbook:911
+msgid ""
+ "<![CDATA[// Write HTML header\n"
+ "PrintWriter out = response.getWriter();\n"
+ "out.println(\"<html><head><title>Event Manager</title></head><body>\");\n"
+ "\n"
+ "// Handle actions\n"
+ "if ( \"store\".equals(request.getParameter(\"action\")) ) {\n"
+ "\n"
+ " String eventTitle = request.getParameter(\"eventTitle\");\n"
+ " String eventDate = request.getParameter(\"eventDate\");\n"
+ "\n"
+ " if ( \"\".equals(eventTitle) || \"\".equals(eventDate) ) {\n"
+ " out.println(\"<b><i>Please enter event title and date.</i></b>\");\n"
+ " } else {\n"
+ " createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));\n"
+ " out.println(\"<b><i>Added event.</i></b>\");\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "// Print page\n"
+ "printEventForm(out);\n"
+ "listEvents(out, dateFormatter);\n"
+ "\n"
+ "// Write HTML footer\n"
+ "out.println(\"</body></html>\");\n"
+ "out.flush();\n"
+ "out.close();]]>"
+msgstr "<literal>listEvents()</literal> ã¡ã½ããã¯ãç¾å¨ã®ã¹ã¬ããã«çµã³ã¤ã Hibernateã® <literal>Session</literal> ã使ç¨ãã¦ãã¯ã¨ãªãå®è¡ãã¾ãã"
+
+#: index.docbook:913
+msgid "Granted, this coding style with a mix of Java and HTML would not scale in a more complex application—keep in mind that we are only illustrating basic Hibernate concepts in this tutorial. The code prints an HTML header and a footer. Inside this page, an HTML form for event entry and a list of all events in the database are printed. The first method is trivial and only outputs HTML:"
+msgstr ""
+ "<![CDATA[private void listEvents(PrintWriter out, SimpleDateFormat dateFormatter) {
+\n"
+ "
+\n"
+ " List result = HibernateUtil.getSessionFactory()
+\n"
+ " .getCurrentSession().createCriteria(Event.class).list();
+\n"
+ " if (result.size() > 0) {
+\n"
+ " out.println(\"<h2>Events in database:</h2>\");
+\n"
+ " out.println(\"<table border='1'>\");
+\n"
+ " out.println(\"<tr>\");
+\n"
+ " out.println(\"<th>Event title</th>\");
+\n"
+ " out.println(\"<th>Event date</th>\");
+\n"
+ " out.println(\"</tr>\");
+\n"
+ " for (Iterator it = result.iterator(); it.hasNext();) {
+\n"
+ " Event event = (Event) it.next();
+\n"
+ " out.println(\"<tr>\");
+\n"
+ " out.println(\"<td>\" + event.getTitle() + \"</td>\");
+\n"
+ " out.println(\"<td>\" + dateFormatter.format(event.getDate()) + \"</td>\");
+\n"
+ " out.println(\"</tr>\");
+\n"
+ " }
+\n"
+ " out.println(\"</table>\");
+\n"
+ " }
+\n"
+ "}]]>"
+
+#: index.docbook:922
+msgid ""
+ "<![CDATA[private void printEventForm(PrintWriter out) {\n"
+ " out.println(\"<h2>Add new event:</h2>\");\n"
+ " out.println(\"<form>\");\n"
+ " out.println(\"Title: <input name='eventTitle' length='50'/><br/>\");\n"
+ " out.println(\"Date (e.g. 24.12.2009): <input name='eventDate' length='10'/><br/>\");\n"
+ " out.println(\"<input type='submit' name='action' value='store'/>\");\n"
+ " out.println(\"</form>\");\n"
+ "}]]>"
+msgstr "æå¾ã«ã <literal>store</literal> ã¢ã¯ã·ã§ã³ã <literal>createAndStoreEvent()</literal> ã¡ã½ããã å¼ã³åºãã¾ãããã®ã¡ã½ããã§ãç¾å¨ã®ã¹ã¬ããã® <literal>Session</literal> ãå©ç¨ãã¾ãã"
+
+#: index.docbook:924
+msgid "The <literal>listEvents()</literal> method uses the Hibernate <literal>Session</literal> bound to the current thread to execute a query:"
+msgstr ""
+ "<![CDATA[protected void createAndStoreEvent(String title, Date theDate) {
+\n"
+ " Event theEvent = new Event();
+\n"
+ " theEvent.setTitle(title);
+\n"
+ " theEvent.setDate(theDate);
+\n"
+ "
+\n"
+ " HibernateUtil.getSessionFactory()
+\n"
+ " .getCurrentSession().save(theEvent);
+\n"
+ "}]]>"
+
+#: index.docbook:930
+msgid ""
+ "<![CDATA[private void listEvents(PrintWriter out, SimpleDateFormat dateFormatter) {\n"
+ "\n"
+ " List result = HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().createCriteria(Event.class).list();\n"
+ " if (result.size() > 0) {\n"
+ " out.println(\"<h2>Events in database:</h2>\");\n"
+ " out.println(\"<table border='1'>\");\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<th>Event title</th>\");\n"
+ " out.println(\"<th>Event date</th>\");\n"
+ " out.println(\"</tr>\");\n"
+ " for (Iterator it = result.iterator(); it.hasNext();) {\n"
+ " Event event = (Event) it.next();\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<td>\" + event.getTitle() + \"</td>\");\n"
+ " out.println(\"<td>\" + dateFormatter.format(event.getDate()) + \"</td>\");\n"
+ " out.println(\"</tr>\");\n"
+ " }\n"
+ " out.println(\"</table>\");\n"
+ " }\n"
+ "}]]>"
+msgstr "ããã§ãµã¼ãã¬ããã®å®æã§ãã ãµã¼ãã¬ããã¸ã®ãªã¯ã¨ã¹ãã¯ãä¸ã¤ã® <literal>Session</literal> 㨠<literal>Transaction</literal> ã§å¦çãããã§ãããã æåã®ã¹ã¿ã³ãã¢ãã¼ã³ã®ã¢ããªã±ã¼ã·ã§ã³ã®ããã«ã Hibernateã¯èªåçã«ãããã®ãªãã¸ã§ã¯ããå®è¡ããã¹ã¬ããã«çµã³ä»ãããã¨ãã§ãã¾ãã ããã«ãããéçºè
ãèªç±ã«ã³ã¼ããã¬ã¤ã¤ã¼åãã§ãã 好ããªæ¹æ³ã§ <literal>SessionFactory</literal> ã¸ã®ã¢ã¯ã»ã¹ãã§ããããã«ãªãã¾ãã é常ãéçºè
ã¯ããæ´ç·´ããããã¶ã¤ã³ã使ç¨ãã¦ããã¼ã¿ã¢ã¯ã»ã¹ã®ã³ã¼ãã ãã¼ã¿ã¢ã¯ã»ã¹ãªãã¸ã§ã¯ãã«ç§»åããã§ãããï¼DAOãã¿ã¼ã³ï¼ã ããå¤ãã®ä¾ã¯ãHibernateã®Wikiãåç
§ãã¦ãã ããã"
+
+#: index.docbook:932
+msgid "Finally, the <literal>store</literal> action is dispatched to the <literal>createAndStoreEvent()</literal> method, which also uses the <literal>Session</literal> of the current thread:"
+msgstr "ãããã¤ã¨ãã¹ã"
+
+#: index.docbook:938
+msgid ""
+ "<![CDATA[protected void createAndStoreEvent(String title, Date theDate) {\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().save(theEvent);\n"
+ "}]]>"
+msgstr "ãã®ã¢ããªã±ã¼ã·ã§ã³ã®ãããã¤ã®ããã«ãWebã¢ã¼ã«ã¤ãï¼WARï¼ãä½æãã¦ãã ããã 以ä¸ã®Antã¿ã¼ã²ããã <literal>build.xml</literal> ã«å ãã¦ãã ããã"
+
+#: index.docbook:940
+msgid "That's it, the servlet is complete. A request to the servlet will be processed in a single <literal>Session</literal> and <literal>Transaction</literal>. As earlier in the standalone application, Hibernate can automatically bind these ojects to the current thread of execution. This gives you the freedom to layer your code and access the <literal>SessionFactory</literal> in any way you like. Usually you'd use a more sophisticated design and move the data access code into data access objects (the DAO pattern). See the Hibernate Wiki for more examples."
+msgstr ""
+ "<![CDATA[<target name=\"war\" depends=\"compile\">
+\n"
+ " <war destfile=\"hibernate-tutorial.war\" webxml=\"web.xml\">
+\n"
+ " <lib dir=\"${librarydir}\">
+\n"
+ " <exclude name=\"jsdk*.jar\"/>
+\n"
+ " </lib>
+\n"
+ "
+\n"
+ " <classes dir=\"${targetdir}\"/>
+\n"
+ " </war>
+\n"
+ "</target>]]>"
+
+#: index.docbook:954
+msgid "Deploying and testing"
+msgstr "ãã®ã¿ã¼ã²ãã㯠<literal>hibernate-tutorial.war</literal> ã¨ãããã¡ã¤ã«ã ããã¸ã§ã¯ããã£ã¬ã¯ããªã«ä½æãã¾ãã ãã®ãã¡ã¤ã«ã¯ãã¹ã¦ã®ã©ã¤ãã©ãªã¨ <literal>web.xml</literal> è¨è¿°åãå«ãã§ããã ããã¸ã§ã¯ãã®ãã¼ã¹ãã£ã¬ã¯ããªã«ç½®ããããã¨ãæå¾
ããã¾ãã"
+
+#: index.docbook:956
+msgid "To deploy this application you have to create a web archive, a WAR. Add the following Ant target to your <literal>build.xml</literal>:"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>
+\n"
+ "<web-app version=\"2.4\"
+\n"
+ " xmlns=\"http://java.sun.com/xml/ns/j2ee\"
+\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"
+\n"
+ " xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">
+\n"
+ "
+\n"
+ " <servlet>
+\n"
+ " <servlet-name>Event Manager</servlet-name>
+\n"
+ " <servlet-class>events.EventManagerServlet</servlet-class>
+\n"
+ " </servlet>
+\n"
+ "
+\n"
+ " <servlet-mapping>
+\n"
+ " <servlet-name>Event Manager</servlet-name>
+\n"
+ " <url-pattern>/eventmanager</url-pattern>
+\n"
+ " </servlet-mapping>
+\n"
+ "</web-app>]]>"
+
+#: index.docbook:961
+msgid ""
+ "<![CDATA[<target name=\"war\" depends=\"compile\">\n"
+ " <war destfile=\"hibernate-tutorial.war\" webxml=\"web.xml\">\n"
+ " <lib dir=\"${librarydir}\">\n"
+ " <exclude name=\"jsdk*.jar\"/>\n"
+ " </lib>\n"
+ "\n"
+ " <classes dir=\"${targetdir}\"/>\n"
+ " </war>\n"
+ "</target>]]>"
+msgstr "Webã¢ããªã±ã¼ã·ã§ã³ã®ã³ã³ãã¤ã«ã¨ãããã¤ã®åã«ã <literal>jsdk.jar</literal> ã¨ãã 追å ã®ã©ã¤ãã©ãªãå¿
è¦ãªãã¨ã«æ³¨æãã¦ãã ããã ããã¯Javaãµã¼ãã¬ããã®éçºãããã§ãã ããã¾ã ãã®ã©ã¤ãã©ãªãæã£ã¦ããªããªããSunã®ã¦ã§ããµã¤ãã§å
¥æãã¦ã ã©ã¤ãã©ãªãã£ã¬ã¯ããªã«ã³ãã¼ãã¦ãã ããã ããããããã¯ã³ã³ãã¤ã«ã«ã®ã¿ä½¿ç¨ãããWARããã±ã¼ã¸ããã¯é¤å¤ããã¾ãã"
+
+#: index.docbook:963
+msgid "This target creates a file called <literal>hibernate-tutorial.war</literal> in your project directory. It packages all libraries and the <literal>web.xml</literal> descriptor, which is expected in the base directory of your project:"
+msgstr "ãã«ãã¨ãããã¤ã®ããã«ãããã¸ã§ã¯ããã£ã¬ã¯ããªã§ <literal>ant war</literal> ãå¼ã³åºãã <literal>hibernate-tutorial.war</literal> ãã¡ã¤ã«ãTomcatã® <literal>webapp</literal> ãã£ã¬ã¯ããªã«ã³ãã¼ãã¦ãã ããã ã¾ã Tomcatãã¤ã³ã¹ãã¼ã«ãã¦ããªããã°ããã¦ã³ãã¼ããã¦ã以ä¸ã®ã¤ã³ã¹ãã¼ã«ã¬ã¤ãã«å¾ã£ã¦ãã ããã ãããããã®ã¢ããªã±ã¼ã·ã§ã³ã®ãããã¤ããããã«ãTomcatã®è¨å®ãå¤æ´ããå¿
è¦ã¯ããã¾ããã"
+
+#: index.docbook:969
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<web-app version=\"2.4\"\n"
+ " xmlns=\"http://java.sun.com/xml/ns/j2ee\"\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ " xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">\n"
+ "\n"
+ " <servlet>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <servlet-class>events.EventManagerServlet</servlet-class>\n"
+ " </servlet>\n"
+ "\n"
+ " <servlet-mapping>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <url-pattern>/eventmanager</url-pattern>\n"
+ " </servlet-mapping>\n"
+ "</web-app>]]>"
+msgstr "ä¸åº¦ãããã¤ãã¦Tomcatãèµ·åããã°ã <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal> 㧠ã¢ããªã±ã¼ã·ã§ã³ã¸ã®ã¢ã¯ã»ã¹ãå¯è½ã§ãã æåã®ãªã¯ã¨ã¹ããä½æãããµã¼ãã¬ããã«æ¸¡ã£ãã¨ãã«ãTomcatã®ãã°ã§ Hibernateã®åæåå¦çã確èªãã¦ãã ãã ï¼ <literal>HibernateUtil</literal> å
ã®éçåæåãããã¯ãå¼ã°ãã¦ãã¾ãï¼ã ã¾ããexceptionãçºçãããªã詳細ã確èªãã¦ãã ããã"
+
+#: index.docbook:971
+msgid "Before you compile and deploy the web application, note that an additional library is required: <literal>jsdk.jar</literal>. This is the Java servlet development kit, if you don't have this library already, get it from the Sun website and copy it to your library directory. However, it will be only used for compliation and excluded from the WAR package."
+msgstr "<title>è¦ç´</title>"
+
+#: index.docbook:979
+msgid "To build and deploy call <literal>ant war</literal> in your project directory and copy the <literal>hibernate-tutorial.war</literal> file into your Tomcat <literal>webapp</literal> directory. If you don't have Tomcat installed, download it and follow the installation instructions. You don't have to change any Tomcat configuration to deploy this application though."
+msgstr "ãã®ãã¥ã¼ããªã¢ã«ã§ã¯ãç°¡åãªã¹ã¿ã³ãã¢ãã¼ã³ã®Hibernateã¢ããªã±ã¼ã·ã§ã³ã¨ å°è¦æ¨¡ã®Webã¢ããªã±ã¼ã·ã§ã³ãæ¸ãããã®åºæ¬ãç´¹ä»ãã¾ããã"
+
+#: index.docbook:987
+msgid "Once deployed and Tomcat is running, access the application at <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal>. Make sure you watch the Tomcat log to see Hibernate initialize when the first request hits your servlet (the static initializer in <literal>HibernateUtil</literal> is called) and to get the detailed output if any exceptions occurs."
+msgstr "ããHibernateã«èªä¿¡ãããã°ããªãã¡ã¬ã³ã¹ããã¥ã¡ã³ãã®ç®æ¬¡ã«ç®ãéãã¦ã é¢ç½ããã ã¨æããããã¯ãæ¢ãã¦ãã ããã æãé »ç¹ã«è³ªåãããã®ã¯ããã©ã³ã¶ã¯ã·ã§ã³å¦çï¼<xref linkend=\"transactions\"/>ï¼ã ãã§ããã®ããã©ã¼ãã³ã¹ï¼<xref linkend=\"performance\"/>ï¼ã APIã®ä½¿ãæ¹ï¼<xref linkend=\"objectstate\"/>ï¼ã¨ã¯ã¨ãª ï¼<xref linkend=\"objectstate-querying\"/>ï¼ã§ãã"
+
+#: index.docbook:1000
+msgid "Summary"
+msgstr "ããã«ï¼ç¹å¥ãªï¼ãã¥ã¼ããªã¢ã«ãå¿
è¦ãªããHibernateã¦ã§ããµã¤ããå¿ããã«ãã§ãã¯ãã¦ãã ããã"
+
+#: index.docbook:1002
+msgid "This tutorial covered the basics of writing a simple standalone Hibernate application and a small web application."
+msgstr ""
+
+#: index.docbook:1007
+msgid "If you already feel confident with Hibernate, continue browsing through the reference documentation table of contents for topics you find interesting - most asked are transactional processing (<xref linkend=\"transactions\"/>), fetch performance (<xref linkend=\"performance\"/>), or the usage of the API (<xref linkend=\"objectstate\"/>) and the query features (<xref linkend=\"objectstate-querying\"/>)."
+msgstr ""
+
+#: index.docbook:1015
+msgid "Don't forget to check the Hibernate website for more (specialized) tutorials."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/content/xml.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/content/xml.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/content/xml.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,549 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "XML Mapping"
+msgstr "XMLãããã³ã°"
+
+#: index.docbook:7
+msgid "Note that this is an experimental feature in Hibernate 3.0 and is under extremely active development."
+msgstr "XMLãããã³ã°ã¯Hibernate3.0ã§ã¯è©¦é¨çãªæ©è½ã§ãããé常ã«æ´»åçã«éçºä¸ã§ãã"
+
+#: index.docbook:13
+msgid "Working with XML data"
+msgstr "XMLãã¼ã¿ã§ã®ä½æ¥"
+
+#: index.docbook:15
+msgid "Hibernate lets you work with persistent XML data in much the same way you work with persistent POJOs. A parsed XML tree can be thought of as just another way to represent the relational data at the object level, instead of POJOs."
+msgstr "Hibernateã§ã¯æ°¸ç¶æ§ã®POJOã使ã£ã¦ä½æ¥ããã®ã¨ã»ã¼åããããªããæ¹ã§ã æ°¸ç¶æ§ã®XMLãã¼ã¿ã使ã£ã¦ä½æ¥ã§ãã¾ãã"
+
+#: index.docbook:22
+msgid "Hibernate supports dom4j as API for manipulating XML trees. You can write queries that retrieve dom4j trees from the database and have any modification you make to the tree automatically synchronized to the database. You can even take an XML document, parse it using dom4j, and write it to the database with any of Hibernate's basic operations: <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> (merging is not yet supported)."
+msgstr "Hibernateã¯XMLããªã¼ãæä½ããããã®APIã¨ãã¦dom4jããµãã¼ããã¦ãã¾ãã ãã¼ã¿ãã¼ã¹ããdom4jã®ããªã¼ã復å
ããã¯ã¨ãªãæ¸ããã¨ãã§ãã ããªã¼ã«å¯¾ãã¦è¡ã£ãä¿®æ£ã¯èªåçã«ãã¼ã¿ãã¼ã¹ã¨åæããã¾ãã ã¾ãXMLããã¥ã¡ã³ããåå¾ãããã¨ãã§ããdom4jã使ã£ã¦ããã¥ã¡ã³ãããã¼ã¹ãã Hibernateã®ä»»æã®åºæ¬æä½ã使ã£ã¦ãã¼ã¿ãã¼ã¹ã¸æ¸ãè¾¼ããã¨ãã§ãã¾ããï¼ ã¤ã¾ãã<literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> æä½ã§ã(ãã¼ã¸ã¯ã¾ã ãµãã¼ããã¦ãã¾ãã)ã"
+
+#: index.docbook:32
+msgid "This feature has many applications including data import/export, externalization of entity data via JMS or SOAP and XSLT-based reporting."
+msgstr "ãã¼ã¿ã®ã¤ã³ãã¼ã/ã¨ã¯ã¹ãã¼ãã JMSã«ããã¨ã³ãã£ãã£ãã¼ã¿ã®å¤é¨åãSOAPãXSLTãã¼ã¹ã®ã¬ãã¼ããªã©ã ãã®æ©è½ã«ã¯å¤ãã®ç¨éãããã¾ãã"
+
+#: index.docbook:37
+msgid "A single mapping may be used to simultaneously map properties of a class and nodes of an XML document to the database, or, if there is no class to map, it may be used to map just the XML."
+msgstr "åä¸ã®ãããã³ã°ã¯ãã¯ã©ã¹ã®ããããã£ã¨XMLããã¥ã¡ã³ãã®ãã¼ãã åæã«ãã¼ã¿ãã¼ã¹ã¸ãããã³ã°ããããã«ä½¿ããã¨ãã§ãã¾ãã ã¾ããããã³ã°ããã¯ã©ã¹ããªããã°ã XMLã ãããããã³ã°ããããã«ä½¿ããã¨ãã§ãã¾ãã"
+
+#: index.docbook:44
+msgid "Specifying XML and class mapping together"
+msgstr "XMLã¨ã¯ã©ã¹ã®ãããã³ã°ãåæã«æå®ãã"
+
+#: index.docbook:46
+msgid "Here is an example of mapping a POJO and XML simultaneously:"
+msgstr "ããã¯POJOã¨XMLãåæã«ãããã³ã°ããä¾ã§ããï¼"
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<class name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"accountId\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <many-to-one name=\"customer\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Account\"
+\n"
+ " table=\"ACCOUNTS\"
+\n"
+ " node=\"account\">
+\n"
+ "
+\n"
+ " <id name=\"accountId\"
+\n"
+ " column=\"ACCOUNT_ID\"
+\n"
+ " node=\"@id\"/>
+\n"
+ "
+\n"
+ " <many-to-one name=\"customer\"
+\n"
+ " column=\"CUSTOMER_ID\"
+\n"
+ " node=\"customer/@id\"
+\n"
+ " embed-xml=\"false\"/>
+\n"
+ "
+\n"
+ " <property name=\"balance\"
+\n"
+ " column=\"BALANCE\"
+\n"
+ " node=\"balance\"/>
+\n"
+ "
+\n"
+ " ...
+\n"
+ "
+\n"
+ "</class>]]>"
+
+#: index.docbook:54
+msgid "Specifying only an XML mapping"
+msgstr "XMLãããã³ã°ã ããæå®ãã"
+
+#: index.docbook:56
+msgid "Here is an example where there is no POJO class:"
+msgstr "ããã¯POJOã¯ã©ã¹ããªããããã³ã°ã®ä¾ã§ããï¼"
+
+#: index.docbook:60
+msgid ""
+ "<![CDATA[<class entity-name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\" \n"
+ " type=\"string\"/>\n"
+ " \n"
+ " <many-to-one name=\"customerId\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\" \n"
+ " entity-name=\"Customer\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\" \n"
+ " type=\"big_decimal\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class entity-name=\"Account\"
+\n"
+ " table=\"ACCOUNTS\"
+\n"
+ " node=\"account\">
+\n"
+ "
+\n"
+ " <id name=\"id\"
+\n"
+ " column=\"ACCOUNT_ID\"
+\n"
+ " node=\"@id\"
+\n"
+ " type=\"string\"/>
+\n"
+ "
+\n"
+ " <many-to-one name=\"customerId\"
+\n"
+ " column=\"CUSTOMER_ID\"
+\n"
+ " node=\"customer/@id\"
+\n"
+ " embed-xml=\"false\"
+\n"
+ " entity-name=\"Customer\"/>
+\n"
+ "
+\n"
+ " <property name=\"balance\"
+\n"
+ " column=\"BALANCE\"
+\n"
+ " node=\"balance\"
+\n"
+ " type=\"big_decimal\"/>
+\n"
+ "
+\n"
+ " ...
+\n"
+ "
+\n"
+ "</class>]]>"
+
+#: index.docbook:62
+msgid "This mapping allows you to access the data as a dom4j tree, or as a graph of property name/value pairs (java <literal>Map</literal>s). The property names are purely logical constructs that may be referred to in HQL queries."
+msgstr "ãã®ãããã³ã°ã«ãããdom4jããªã¼ãã ããããã£å/å¤ã®çµã®ã°ã©ãï¼javaã® <literal>Map</literal>ï¼ã¨ã㦠ãã¼ã¿ã«ã¢ã¯ã»ã¹ã§ãã¾ãã ããããã£ã®ååã¯ãHQLã¯ã¨ãªã¼å
ã§åç
§ã§ããç´ç²ãªè«çæ§é ã§ãã"
+
+#: index.docbook:73
+msgid "XML mapping metadata"
+msgstr "XMLãããã³ã°ã®ã¡ã¿ãã¼ã¿"
+
+#: index.docbook:75
+msgid "Many Hibernate mapping elements accept the <literal>node</literal> attribute. This let's you specify the name of an XML attribute or element that holds the property or entity data. The format of the <literal>node</literal> attribute must be one of the following:"
+msgstr "å¤ãã®Hibernateã®ãããã³ã°è¦ç´ ã¯ã<literal>node</literal>ãå±æ§ã使ç¨ã§ãã¾ãã ããã«ããXMLå±æ§ã®ååãããããã£ãã¨ã³ãã£ãã£ãã¼ã¿ãä¿æããè¦ç´ ãæå®ã§ãã¾ãã <literal>node</literal>ãå±æ§ã®ãã©ã¼ãããã¯ä»¥ä¸ã®ä¸ã®1ã¤ã§ãªããã°ãªãã¾ãããï¼"
+
+#: index.docbook:84
+msgid "<literal>\"element-name\"</literal> - map to the named XML element"
+msgstr "<literal>\"element-name\"</literal> - æå®ããXMLè¦ç´ ã¸ãããã³ã°ãã¾ã"
+
+#: index.docbook:87
+msgid "<literal>\"@attribute-name\"</literal> - map to the named XML attribute"
+msgstr "<literal>\"@attribute-name\"</literal> - æå®ããXMLå±æ§ã¸ãããã³ã°ãã¾ã"
+
+#: index.docbook:90
+msgid "<literal>\".\"</literal> - map to the parent element"
+msgstr "<literal>\".\"</literal> -ã親è¦ç´ ã¸ãããã³ã°ãã¾ã"
+
+#: index.docbook:93
+msgid "<literal>\"element-name/@attribute-name\"</literal> - map to the named attribute of the named element"
+msgstr "<literal>\"element-name/@attribute-name\"</literal> - æå®ããã¨ã¬ã¡ã³ãã®æå®ããå±æ§ã¸ãããã³ã°ãã¾ã"
+
+#: index.docbook:100
+msgid "For collections and single valued associations, there is an additional <literal>embed-xml</literal> attribute. If <literal>embed-xml=\"true\"</literal>, the default, the XML tree for the associated entity (or collection of value type) will be embedded directly in the XML tree for the entity that owns the association. Otherwise, if <literal>embed-xml=\"false\"</literal>, then only the referenced identifier value will appear in the XML for single point associations and collections will simply not appear at all."
+msgstr "ã³ã¬ã¯ã·ã§ã³ã¨åä¸ã®å¤ã®é¢é£ã«å¯¾ãã¦ã ãã¾ãã® <literal>embed-xml</literal> å±æ§ãããã¾ãã ããã©ã«ãã® <literal>embed-xml=\"true\"</literal> ã¨è¨å®ããå ´åã é¢é£ããã¨ã³ãã£ãã£(å¤åã®ã³ã¬ã¯ã·ã§ã³)ã®XMLããªã¼ã¯ã ç´æ¥é¢é£ãææããã¨ã³ãã£ãã£ã®XMLããªã¼å
ã«åãè¾¼ã¾ãã¾ãã å対ã«ã<literal>embed-xml=\"false\"</literal> ã¨è¨å®ããå ´åã åç
§ãããèå¥åã®å¤ã ããå¤é度ï¼å´ã®é¢é£ã«å¯¾ããXMLã«ç¾ãã åç´ã«ã³ã¬ã¯ã·ã§ã³ã¯ã¾ã£ããç¾ããªããªãã¾ãã"
+
+#: index.docbook:110
+msgid "You should be careful not to leave <literal>embed-xml=\"true\"</literal> for too many associations, since XML does not deal well with circularity!"
+msgstr "ãã¾ãã«å¤ãã®é¢é£ã«å¯¾ã㦠<literal>embed-xml=\"true\"</literal> ã¨ããã¾ã¾ã«ããã®ã¯æ³¨æãã¹ãã§ãã XMLã¯å¾ªç°ããã¾ãæ±ãã¾ããã"
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Customer\" \n"
+ " table=\"CUSTOMER\" \n"
+ " node=\"customer\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"CUST_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <map name=\"accounts\" \n"
+ " node=\".\" \n"
+ " embed-xml=\"true\">\n"
+ " <key column=\"CUSTOMER_ID\" \n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"SHORT_DESC\" \n"
+ " node=\"@short-desc\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many entity-name=\"Account\"\n"
+ " embed-xml=\"false\" \n"
+ " node=\"account\"/>\n"
+ " </map>\n"
+ " \n"
+ " <component name=\"name\" \n"
+ " node=\"name\">\n"
+ " <property name=\"firstName\" \n"
+ " node=\"first-name\"/>\n"
+ " <property name=\"initial\" \n"
+ " node=\"initial\"/>\n"
+ " <property name=\"lastName\" \n"
+ " node=\"last-name\"/>\n"
+ " </component>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\"
+\n"
+ " table=\"CUSTOMER\"
+\n"
+ " node=\"customer\">
+\n"
+ "
+\n"
+ " <id name=\"id\"
+\n"
+ " column=\"CUST_ID\"
+\n"
+ " node=\"@id\"/>
+\n"
+ "
+\n"
+ " <map name=\"accounts\"
+\n"
+ " node=\".\"
+\n"
+ " embed-xml=\"true\">
+\n"
+ " <key column=\"CUSTOMER_ID\"
+\n"
+ " not-null=\"true\"/>
+\n"
+ " <map-key column=\"SHORT_DESC\"
+\n"
+ " node=\"@short-desc\"
+\n"
+ " type=\"string\"/>
+\n"
+ " <one-to-many entity-name=\"Account\"
+\n"
+ " embed-xml=\"false\"
+\n"
+ " node=\"account\"/>
+\n"
+ " </map>
+\n"
+ "
+\n"
+ " <component name=\"name\"
+\n"
+ " node=\"name\">
+\n"
+ " <property name=\"firstName\"
+\n"
+ " node=\"first-name\"/>
+\n"
+ " <property name=\"initial\"
+\n"
+ " node=\"initial\"/>
+\n"
+ " <property name=\"lastName\"
+\n"
+ " node=\"last-name\"/>
+\n"
+ " </component>
+\n"
+ "
+\n"
+ " ...
+\n"
+ "
+\n"
+ "</class>]]>"
+
+#: index.docbook:117
+msgid "in this case, we have decided to embed the collection of account ids, but not the actual account data. The following HQL query:"
+msgstr "ãã®ä¾ã§ã¯ãå®éã®accountã®ãã¼ã¿ã§ã¯ãªãã accountã®idã®ã³ã¬ã¯ã·ã§ã³ãåãè¾¼ããã¨ã«ãã¾ããã ç¶ãã®HQLã¯ã¨ãªã§ãï¼"
+
+#: index.docbook:122
+msgid "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
+msgstr "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
+
+#: index.docbook:124
+msgid "Would return datasets such as this:"
+msgstr "ãã®ãããªãã¼ã¿ã»ãããè¿ãã§ããã"
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account short-desc=\"Savings\">987632567</account>\n"
+ " <account short-desc=\"Credit Card\">985612323</account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+ "<![CDATA[<customer id=\"123456789\">
+\n"
+ " <account short-desc=\"Savings\">987632567</account>
+\n"
+ " <account short-desc=\"Credit Card\">985612323</account>
+\n"
+ " <name>
+\n"
+ " <first-name>Gavin</first-name>
+\n"
+ " <initial>A</initial>
+\n"
+ " <last-name>King</last-name>
+\n"
+ " </name>
+\n"
+ " ...
+\n"
+ "</customer>]]>"
+
+#: index.docbook:130
+msgid "If you set <literal>embed-xml=\"true\"</literal> on the <literal><one-to-many></literal> mapping, the data might look more like this:"
+msgstr "<literal><one-to-many></literal> ãããã³ã°ã§ <literal>embed-xml=\"true\"</literal> ã¨è¨å®ããå ´åã ãã¼ã¿ã¯ãã®ããã«ãªãã§ãããã"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account id=\"987632567\" short-desc=\"Savings\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>100.29</balance>\n"
+ " </account>\n"
+ " <account id=\"985612323\" short-desc=\"Credit Card\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>-2370.34</balance>\n"
+ " </account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+ "<![CDATA[<customer id=\"123456789\">
+\n"
+ " <account id=\"987632567\" short-desc=\"Savings\">
+\n"
+ " <customer id=\"123456789\"/>
+\n"
+ " <balance>100.29</balance>
+\n"
+ " </account>
+\n"
+ " <account id=\"985612323\" short-desc=\"Credit Card\">
+\n"
+ " <customer id=\"123456789\"/>
+\n"
+ " <balance>-2370.34</balance>
+\n"
+ " </account>
+\n"
+ " <name>
+\n"
+ " <first-name>Gavin</first-name>
+\n"
+ " <initial>A</initial>
+\n"
+ " <last-name>King</last-name>
+\n"
+ " </name>
+\n"
+ " ...
+\n"
+ "</customer>]]>"
+
+#: index.docbook:141
+msgid "Manipulating XML data"
+msgstr "XMLãã¼ã¿ãæ±ã"
+
+#: index.docbook:143
+msgid "Let's rearead and update XML documents in the application. We do this by obtaining a dom4j session:"
+msgstr "XMLããã¥ã¡ã³ãããã¢ããªã±ã¼ã·ã§ã³å
ã§åèªã¿è¾¼ã¿ãæ´æ°ããã¦ã¿ã¾ãããã 以ä¸ã§ã¯dom4jã®ã»ãã·ã§ã³ãåå¾ãããã¨ã§è¡ãã¾ããï¼"
+
+#: index.docbook:148
+msgid ""
+ "<![CDATA[Document doc = ....;\n"
+ " \n"
+ "Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "List results = dom4jSession\n"
+ " .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")\n"
+ " .list();\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " //add the customer data to the XML document\n"
+ " Element customer = (Element) results.get(i);\n"
+ " doc.add(customer);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Document doc = ....;
+\n"
+ "
+\n"
+ "Session session = factory.openSession();
+\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);
+\n"
+ "Transaction tx = session.beginTransaction();
+\n"
+ "
+\n"
+ "List results = dom4jSession
+\n"
+ " .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")
+\n"
+ " .list();
+\n"
+ "for ( int i=0; i<results.size(); i++ ) {
+\n"
+ " //add the customer data to the XML document
+\n"
+ " Element customer = (Element) results.get(i);
+\n"
+ " doc.getRootElement().add(customer);
+\n"
+ "}
+\n"
+ "
+\n"
+ "tx.commit();
+\n"
+ "session.close();]]>"
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " Element customer = (Element) results.get(i);\n"
+ " //change the customer name in the XML and database\n"
+ " Element name = customer.element(\"name\");\n"
+ " name.element(\"first-name\").setText(firstName);\n"
+ " name.element(\"initial\").setText(initial);\n"
+ " name.element(\"last-name\").setText(lastName);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = factory.openSession();
+\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);
+\n"
+ "Transaction tx = session.beginTransaction();
+\n"
+ "
+\n"
+ "Element cust = (Element) dom4jSession.get(\"Customer\", customerId);
+\n"
+ "for ( int i=0; i<results.size(); i++ ) {
+\n"
+ " Element customer = (Element) results.get(i);
+\n"
+ " //change the customer name in the XML and database
+\n"
+ " Element name = customer.element(\"name\");
+\n"
+ " name.element(\"first-name\").setText(firstName);
+\n"
+ " name.element(\"initial\").setText(initial);
+\n"
+ " name.element(\"last-name\").setText(lastName);
+\n"
+ "}
+\n"
+ "
+\n"
+ "tx.commit();
+\n"
+ "session.close();]]>"
+
+#: index.docbook:152
+msgid "It is extremely useful to combine this feature with Hibernate's <literal>replicate()</literal> operation to implement XML-based data import/export."
+msgstr "XMLãã¼ã¹ã®ãã¼ã¿ã®ã¤ã³ãã¼ã/ã¨ã¯ã¹ãã¼ããå®è£
ããããã«ã Hibernateã® <literal>replicate()</literal> æä½ããã®æ©è½ãçµã³ã¤ããã®ã¯ 極ãã¦æå¹ã§ãã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ja-JP/legal_notice.po
===================================================================
--- core/trunk/documentation/manual/translations/ja-JP/legal_notice.po (rev 0)
+++ core/trunk/documentation/manual/translations/ja-JP/legal_notice.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,48 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Legal Notice"
+msgstr "Legal Notice"
+
+#: index.docbook:22
+msgid "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+msgstr "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+
+#: index.docbook:31
+msgid "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+msgstr "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+
+#: index.docbook:34
+msgid "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+msgstr "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+
+#: index.docbook:37
+msgid "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+msgstr "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+
+#: index.docbook:40
+msgid "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+msgstr "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+
+#: index.docbook:43
+msgid "All other trademarks referenced herein are the property of their respective owners."
+msgstr "All other trademarks referenced herein are the property of their respective owners."
+
+#: index.docbook:46
+msgid "The GPG fingerprint of the security at redhat.com key is:"
+msgstr "The GPG fingerprint of the security at redhat.com key is:"
+
+#: index.docbook:49
+msgid "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+msgstr "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/Hibernate_Reference.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/Hibernate_Reference.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/Hibernate_Reference.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,24 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:26
+msgid "HIBERNATE - Relational Persistence for Idiomatic Java"
+msgstr "HIBERNATE - ê°ì±ìë ìë°ë¥¼ ìí ê´ê³ ìì"
+
+#: index.docbook:27
+msgid "Hibernate Reference Documentation"
+msgstr "íì´ë²ë¤ì´í¸ 참조 문ì"
+
+#: index.docbook:41
+msgid "©rightHolder;"
+msgstr "©rightHolder;"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/architecture.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/architecture.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/architecture.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,216 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Architecture"
+msgstr "ìí¤í
ì²"
+
+#: index.docbook:24
+msgid "Overview"
+msgstr "<title>ê°ì</title>"
+
+#: index.docbook:26
+msgid "A (very) high-level view of the Hibernate architecture:"
+msgstr "Hibernate ìí¤í
ì²ì ëí (매ì°) ëì ìì¤ì ê°ì::"
+
+#: index.docbook:39
+msgid "This diagram shows Hibernate using the database and configuration data to provide persistence services (and persistent objects) to the application."
+msgstr "ì´ ë¤ì´ì´ê·¸ë¨ì ì´í리ì¼ì´ì
ì ììí ìë¹ì¤ë¤(ê³¼ ìì ê°ì²´ë¤)ì ì ê³µí기 ìí´ ë°ì´í°ë² ì´ì¤ì 컨í¼ê·¸ë ì´ì
ì ì¬ì©íë Hibernate를 ë³´ì¬ì¤ë¤."
+
+#: index.docbook:44
+msgid "We would like to show a more detailed view of the runtime architecture. Unfortunately, Hibernate is flexible and supports several approaches. We will show the two extremes. The \"lite\" architecture has the application provide its own JDBC connections and manage its own transactions. This approach uses a minimal subset of Hibernate's APIs:"
+msgstr "ì°ë¦¬ë ë°íì ìí¤í
ì²ì ëí ë³´ë¤ ìì¸í 뷰를 ë³´ì¬ì£¼ê³ ì¶ë¤. ë¶ííê²ë, Hibernateë ì ì°íë©° ëª ê°ì§ ì ê·¼ë²ë¤ì ì ê³µíë¤. ì°ë¦¬ë ë ê°ì§ ê·¹ë¨ì ë³´ì¬ì¤ ê²ì´ë¤. \"ê²½ëê¸\" ìí¤í
ì²ë ê·¸ê² ìì ì JDBC 커ë¥ì
ë¤ì ì ê³µíê³ ê·¸ê² ìì ì í¸ëìì
ë¤ì ê´ë¦¬íë ì´í리ì¼ì´ì
ì ê°ëë¤. ì´ ì ê·¼ë²ì Hibernateì APIì ìµì ë¶ë¶ì§í©ì ì¬ì©íë¤:"
+
+#: index.docbook:61
+msgid "The \"full cream\" architecture abstracts the application away from the underlying JDBC/JTA APIs and lets Hibernate take care of the details."
+msgstr "\"ì ì²´ ì ì\" ìí¤í
ì²ë 기본 JDBC/JTAë¡ë¶í° ì´í리ì¼ì´ì
ì ì¶ìí ìí¤ê³ Hibernateë¡ íì¬ê¸ ìì¸í ê²ì ì²ë¦¬íê² íë¤."
+
+#: index.docbook:75
+msgid "Heres some definitions of the objects in the diagrams:"
+msgstr "ë¤ìì ë¤ì´ì´ê·¸ë¨ë¤ ë´ì ìë ê°ì²´ë¤ì ëí ëªê°ì§ ì ìë¤ì´ë¤:"
+
+#: index.docbook:80
+msgid "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+msgstr "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+
+#: index.docbook:82
+msgid "A threadsafe (immutable) cache of compiled mappings for a single database. A factory for <literal>Session</literal> and a client of <literal>ConnectionProvider</literal>. Might hold an optional (second-level) cache of data that is reusable between transactions, at a process- or cluster-level."
+msgstr "ë¨ì¼ ë°ì´í°ë² ì´ì¤ì ëí ì»´íì¼ë 매íë¤ì threadsafe (ë¶ë³ì) ìºì. Sessionê³¼ ConnectionProviderì í´ë¼ì´ì¸í¸ë¥¼ ìí í©í 리. íë¡ì¸ì¤ ë 벨 ëë í´ë¬ì¤í° ë 벨ìì í¸ëìì
ë¤ ì¬ì´ì ì¬ì¬ì© ê°ë¥í ë°ì´í°ì ì íì ì¸ (second-level) ìºì를 ë³´ê´í ìë ìë¤."
+
+#: index.docbook:92
+msgid "Session (<literal>org.hibernate.Session</literal>)"
+msgstr "Session (<literal>org.hibernate.Session</literal>)"
+
+#: index.docbook:94
+msgid "A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC connection. Factory for <literal>Transaction</literal>. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier."
+msgstr "ì´í리ì¼ì´ì
ê³¼ ìì ì ì¥ì ì¬ì´ì ëí를 íííë ë¨ì¼ ì°ë ëì´ê³ , ìëª
ì´ ì§§ì ê°ì²´. JDBC 커ë¥ì
ì í¬ì¥íë¤. <literal>Transaction</literal> ì© í©í 리. ê°ì²´ ê·¸ëí를 ë¤ë¹ê²ì´í¸ íê±°ë ìë³ìë¡ ê°ì²´ë¤ì 룩ì
í ë ì¬ì©ëë ìì ê°ì²´ë¤ì ëí íìì ì¸(첫 ë²ì§¸ ë 벨ì) ìºì를 ë³´ê´íë¤."
+
+#: index.docbook:104
+msgid "Persistent objects and collections"
+msgstr "ìì ê°ì²´ë¤ê³¼ ì½ë ì
ë¤"
+
+#: index.docbook:106
+msgid "Short-lived, single threaded objects containing persistent state and business function. These might be ordinary JavaBeans/POJOs, the only special thing about them is that they are currently associated with (exactly one) <literal>Session</literal>. As soon as the <literal>Session</literal> is closed, they will be detached and free to use in any application layer (e.g. directly as data transfer objects to and from presentation)."
+msgstr "persistent ìíì ë¹ì§ëì¤ ê¸°ë¥ì í¬í¨íë ìëª
ì´ ì§§ê³ , ë¨ì¼ ì°ë ëì¸ ê°ì²´ë¤. ì´ê²ë¤ì íµìì JavaBeans/POJOë¤ì¼ ì ìê³ , ì¤ì§ ê·¸ê²ë¤ì ëí ì¤ì§ í¹ë³í ê²ì ê·¸ê²ë¤ì´ íì¬ (ì ííê² í ê°ì) <literal>Session</literal>ê³¼ ì°ê´ëì´ ìë¤ë ì ì´ë¤. <literal>Session</literal>ì´ ë«íìë§ì, ê·¸ê²ë¤ì ë¶ë¦¬ë (detached ìíê° ë ) ê²ì´ê³ ì´í리ì¼ì´ì
ë ì´ì´ìì ì¬ì©íë ê²ì´ ìì ë¡ìì§ë¤(ì를 ë¤ë©´. ì§ì ì ì¼ë¡ í리ì í
ì´ì
ê³ì¸µì¼ë¡ ë°ì´í° ì ì¡ ê°ì²´ë¤ë¡ì ê·¸ë¦¬ê³ ì§ì ì ì¼ë¡ í리ì í
ì´ì
ê³ì¸µì¼ë¡ë¶í° ë°ì´í° ì ì¡ ê°ì²´ë¤ë¡ì)."
+
+#: index.docbook:117
+msgid "Transient and detached objects and collections"
+msgstr "ì ì´(Transient, íì 주-ê³¼ë) ê°ì²´ë¤ê³¼ ì½ë ì
ë¤"
+
+#: index.docbook:119
+msgid "Instances of persistent classes that are not currently associated with a <literal>Session</literal>. They may have been instantiated by the application and not (yet) persisted or they may have been instantiated by a closed <literal>Session</literal>."
+msgstr "<literal>Session</literal>ê³¼ íì¬ ì°ê´ëì´ ìì§ ìì ìì í´ëì¤ë¤ì ì¸ì¤í´ì¤ë¤. ê·¸ê²ë¤ì ì´í리ì¼ì´ì
ì ìí´ ì´ê¸°í ëìê³ (ìì§) ììí ëì§ ììê±°ë ê·¸ê²ë¤ì ë«íì§<literal>Session</literal>ì ìí´ ì´ê¸°í ëìì ìë ìë¤."
+
+#: index.docbook:128
+msgid "Transaction (<literal>org.hibernate.Transaction</literal>)"
+msgstr "Transaction (<literal>org.hibernate.Transaction</literal>)"
+
+#: index.docbook:130
+msgid "(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. Abstracts application from underlying JDBC, JTA or CORBA transaction. A <literal>Session</literal> might span several <literal>Transaction</literal>s in some cases. However, transaction demarcation, either using the underlying API or <literal>Transaction</literal>, is never optional!"
+msgstr "(ìµì
) ìì
ì ìì ë¨ì를 ì§ì í기 ìí´ ì´í리ì¼ì´ì
ì ìí´ ì¬ì©ëë ë¨ì¼ ì°ë ëì´ê³ , ìëª
ì´ ì§§ì ê°ì²´. 기본 JDBC, JTA ëë CORBA í¸ëìì
ì¼ë¡ë¶í° ì´í리ì¼ì´ì
ì ì¶ìí ìí¨ë¤. ëªëª ê²½ì°ë¤ìì íëì <literal>Session</literal>ì ì¬ë¬ ê°ì <literal>Transaction</literal>ë¤ì ê±¸ì¹ ì ìë¤. íì§ë§ 기본 API ëë <literal>Transaction</literal>ì ì¬ì©íë í¸ëìì
ê²½ê³ ì¤ì ì ê²°ì½ ìµì
ì´ ìëë¤!"
+
+#: index.docbook:141
+msgid "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+msgstr "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+
+#: index.docbook:143
+msgid "(Optional) A factory for (and pool of) JDBC connections. Abstracts application from underlying <literal>Datasource</literal> or <literal>DriverManager</literal>. Not exposed to application, but can be extended/implemented by the developer."
+msgstr "(ìµì
) JDBC 커ë¥ì
ë¤ì ëí í©í 리(ê·¸ë¦¬ê³ ê·¸ê²ë¤ì pool). 기본 <literal>Datasource</literal> ëë <literal>DriverManager</literal>ë¡ë¶í° ì´í리ì¼ì´ì
ì ì¶ìí ìí¨ë¤. ì´í리ì¼ì´ì
ì ë
¸ì¶ëì§ë ìì§ë§ ê°ë°ìì ìí´ íì¥/구í ëë¤."
+
+#: index.docbook:151
+msgid "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+msgstr "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+
+#: index.docbook:153
+msgid "(Optional) A factory for <literal>Transaction</literal> instances. Not exposed to the application, but can be extended/implemented by the developer."
+msgstr "(ìµì
) <literal>Transaction</literal> ì¸ì¤í´ì¤ë¤ì ëí í©í 리. ì´í리ì¼ì´ì
ì ë
¸ì¶ëì§ë ìì§ë§ ê°ë°ìì ìí´ íì¥/구í ëë¤."
+
+#: index.docbook:160
+msgid "Extension Interfaces"
+msgstr "Extension Interfaces"
+
+#: index.docbook:162
+msgid "Hibernate offers many optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details."
+msgstr "Hibernateë ë¹ì ì ìì ê³ì¸µì í¹ì±ì ë§ì¶¤í ìí¤ê¸° ìí´ ë¹ì ì´ êµ¬íí ì ìë ì íì ì¸ íì¥ ì¸í°íì´ì¤ë¤ì ì ê³µíë¤. ìì¸í ê²ì API 문ì를 ë³´ë¼."
+
+#: index.docbook:171
+msgid "Given a \"lite\" architecture, the application bypasses the <literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or <literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly."
+msgstr "주ì´ì§ \"ê²½ëê¸\" ìí¤í
ì²ì ê²½ì°, ì´í리ì¼ì´ì
ì JTA ëë JDBCì ì§ì ëíí기 ìí´ì <literal>Transaction</literal>/<literal>TransactionFactory</literal> ê·¸ë¦¬ê³ /ëë <literal>ConnectionProvider</literal> APIë¤ì 무ìíë¤."
+
+#: index.docbook:179
+msgid "Instance states"
+msgstr "ì¸ì¤í´ì¤ ìíë¤"
+
+#: index.docbook:180
+msgid "An instance of a persistent classes may be in one of three different states, which are defined with respect to a <emphasis>persistence context</emphasis>. The Hibernate <literal>Session</literal> object is the persistence context:"
+msgstr "ìì í´ëì¤ë¤ì ì¸ì¤í´ì¤ë ì¸ê°ì ìíë¤ ì¤ íë ì¼ ì ìë¤. ê·¸ê²ë¤(ìíë¤)ì ìì 컨í
ì¤í¸(<emphasis>persistence context</emphasis>)ì ëí´ ì ìëë¤. Hibernate <literal>Session</literal> ê°ì²´ë ìì 컨í
ì¤í¸ì´ë¤:"
+
+#: index.docbook:188
+msgid "transient"
+msgstr "transient"
+
+#: index.docbook:190
+msgid "The instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value)."
+msgstr "ì¸ì¤í´ì¤ë ììì 컨í
ì¤í¸ì ì°ê´ëì´ ìì§ ìê³ , ê²°ì½ ì°ê´ë ì ì´ ììë¤. ê·¸ê²ì ìì ìë³ì(íë¼ì´ë¨¸ë¦¬ í¤ ê°)ì ê°ì§ ìëë¤."
+
+#: index.docbook:198
+msgid "persistent"
+msgstr "persistent"
+
+#: index.docbook:200
+msgid "The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, Hibernate <emphasis>guarantees</emphasis> that persistent identity is equivalent to Java identity (in-memory location of the object)."
+msgstr "ì¸ì¤í´ì¤ë íì¬ ìì 컨í
ì¤í¸ì ì°ê´ëì´ ìë¤. ê·¸ê²ì ìì ìë³ì(íë¼ì´ë¨¸ë¦¬ í¤ ê°) ê·¸ë¦¬ê³ ìë§ ë°ì´í°ë² ì´ì¤ ë´ì ìë ëìíë íì ê°ëë¤. í¹ë³í ìì 컨í
ì¤í¸ì ê²½ì°, Hibernateë ìì identityê° Java identity(ê°ì²´ì ë©ëª¨ë¦¬ ë´ ìì¹)ì ê°ë¤ë ì ì <emphasis>ë³´ì¦íë¤</emphasis>."
+
+#: index.docbook:212
+msgid "detached"
+msgstr "detached"
+
+#: index.docbook:214
+msgid "The instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corrsponding row in the database. For detached instances, Hibernate makes no guarantees about the relationship between persistent identity and Java identity."
+msgstr "ì¸ì¤í´ì¤ë ìì 컨í
ì¤í¸ì íë² ì°ê´ëìì§ë§, ê·¸ 컨í
ì¤í¸ê° ë«íê±°ë, ê·¸ ì¸ì¤í´ì¤ê° ë ë¤ë¥¸ íë¡ì¸ì¤ë¡ ì§ë ¬í ëìë¤. ê·¸ê²ì ìì identity ê·¸ë¦¬ê³ , ìë§ ë°ì´í°ë² ì´ì¤ ë´ì ëìíë íì ê°ëë¤. detached ì¸ì¤í´ì¤ë¤ì ê²½ì°, Hibernateë ìì identityê³¼ Java identity ì¬ì´ì ê´ê³ë¥¼ ë³´ì¦íì§ ìëë¤."
+
+#: index.docbook:229
+msgid "JMX Integration"
+msgstr "JMX íµí©"
+
+#: index.docbook:231
+msgid "JMX is the J2EE standard for management of Java components. Hibernate may be managed via a JMX standard service. We provide an MBean implementation in the distribution, <literal>org.hibernate.jmx.HibernateService</literal>."
+msgstr "JMXë ìë° ì»´í¬ëí¸ ê´ë¦¬ë¥¼ ìí J2EE íì¤ì´ë¤. Hibernateë JMX íì¤ ìë¹ì¤ë¥¼ íµí´ ê´ë¦¬ë ìë ìë¤. ì°ë¦¬ë ë°°í¬ë³¸ ë´ì MBean 구í, <literal>org.hibernate.jmx.HibernateService</literal>를 ì ê³µíë¤."
+
+#: index.docbook:237
+msgid "For an example how to deploy Hibernate as a JMX service on the JBoss Application Server, please see the JBoss User Guide. On JBoss AS, you also get these benefits if you deploy using JMX:"
+msgstr "JBoss ì´í리ì¼ì´ì
ìë² ìì Hibernae를 JMX ìë¹ì¤ë¡ì ë°°ì¹íë ë°©ë²ì ëí ìì ë JBoss ì¬ì©ì ê°ì´ë를 보길 ë°ëë¤. JBoss ì´í리ì¼ì´ì
ìë² ììì, ë§ì¼ ë¹ì ì´ JMX를 ì¬ì©íì¬ ë°°ì¹í ê²½ì° ë¹ì ì ëí ë¤ì ì´ì ë¤ì ì»ëë¤:"
+
+#: index.docbook:245
+msgid "<emphasis>Session Management:</emphasis> The Hibernate <literal>Session</literal>'s life cycle can be automatically bound to the scope of a JTA transaction. This means you no longer have to manually open and close the <literal>Session</literal>, this becomes the job of a JBoss EJB interceptor. You also don't have to worry about transaction demarcation in your code anymore (unless you'd like to write a portable persistence layer of course, use the optional Hibernate <literal>Transaction</literal> API for this). You call the <literal>HibernateContext</literal> to access a <literal>Session</literal>."
+msgstr "<emphasis>Session ê´ë¦¬:</emphasis> Hibernate <literal>Session</literal>ì ìëª
ì£¼ê¸°ê° JTA í¸ëìì
ì ìì ë´ì ìëì ì¼ë¡ ë°ì¸ë ë ì ìë¤. ì´ê²ì ë¹ì ì´ ëì´ì <literal>Session</literal>ì ììì
ì¼ë¡ ì´ê³ ë«ì§ ììë ë¨ì ì미íê³ , ì´ê²ì JBoss EJB ì¸í°ì
í°ì ì
ë¬´ê° ëë¤. ë¹ì ì ëí ë ì´ì ë¹ì ì ì½ë ì´ë ê³³ììë í¸ëìì
ê²½ê³ì¤ì ì ëí´ ê±±ì íì§ ììë ëë¤(ë¹ì ì´ ë¬¼ë¡ ì´ìì± ìë ìì ê³ì¸µì ìì±íê³ ì ìíì§ ìëí, ì´ë¥¼ ìí´ ìµì
Hibernate <literal>Transaction</literal> API를 ì¬ì©íë¼). ë¹ì ì <literal>Session</literal>ì ì ê·¼í기 ìí´ <literal>HibernateContext</literal>를 í¸ì¶íë¤."
+
+#: index.docbook:257
+msgid "<emphasis>HAR deployment:</emphasis> Usually you deploy the Hibernate JMX service using a JBoss service deployment descriptor (in an EAR and/or SAR file), it supports all the usual configuration options of a Hibernate <literal>SessionFactory</literal>. However, you still have to name all your mapping files in the deployment descriptor. If you decide to use the optional HAR deployment, JBoss will automatically detect all mapping files in your HAR file."
+msgstr "<emphasis>HAR ë°°ì¹:</emphasis> ëê° ë¹ì ì JBoss ìë¹ì¤ ë°°ì¹ ëì¤í¬ë¦½í°ë¥¼ ì¬ì©íì¬ Hibernate JMX ìë¹ì¤ë¥¼ (EAR ê³¼/ëë SAR íì¼ë¡) ë°°ì¹íê³ , ê·¸ê²ì Hibernate <literal>SessionFactory</literal>ì íµìì ì¸ êµ¬ì± ìµì
ë¤ ëª¨ë를 ì§ìíë¤. íì§ë§ ë¹ì ì ì¬ì í 모ë ë¹ì ì 매í íì¼ë¤ì ë°°ì¹ ëì¤í¬ë¦½í° ìì ëª
ëª
í´ì¼ íë¤. ë§ì¼ ë¹ì ì´ ìµì
HAR ë°°ì¹ë¥¼ ì¬ì©íê³ ì ê²°ì íë ê²½ì°, JBossë ë¹ì ì HAR íì¼ ë´ì ìë 모ë 매í íì¼ë¤ì ìëì ì¼ë¡ ê²ì¶í´ë¼ ê²ì´ë¤."
+
+#: index.docbook:268
+msgid "Consult the JBoss AS user guide for more information about these options."
+msgstr "ì´ë¤ ìµì
ë¤ì ëí ì¶ê° ì ë³´ë JBoss ì´í리ì¼ì´ì
ìë² ì¬ì©ì ê°ì´ë를 참조íë¼."
+
+#: index.docbook:272
+msgid "Another feature available as a JMX service are runtime Hibernate statistics. See <xref linkend=\"configuration-optional-statistics\"/>."
+msgstr "JMX ìë¹ì¤ë¡ì ì´ì© ê°ë¥í ëë¤ë¥¸ í¹ì§ì ë°íì Hibernate íµê³ì´ë¤. <xref linkend=\"configuration-optional-statistics\"/>를 ë³´ë¼."
+
+#: index.docbook:279
+msgid "JCA Support"
+msgstr "JCA ì§ì"
+
+#: index.docbook:280
+msgid "Hibernate may also be configured as a JCA connector. Please see the website for more details. Please note that Hibernate JCA support is still considered experimental."
+msgstr "Hibernateë JCA 커ë¥í°ë¡ì 구ì±ë ìë ìë¤. ìì¸í ê²ì ì¹ ì¬ì´í¸ë¥¼ 보길 ë°ëë¤. Hibernate JCA ì§ìì ì¬ì í ì¤íì ì¼ë¡ ê²í ì¤ì ììì ë
¸í¸í길 ë°ëë¤."
+
+#: index.docbook:287
+msgid "Contextual Sessions"
+msgstr "컨í
ì¤í¸ ìì ì¸ì
ë¤"
+
+#: index.docbook:288
+msgid "Most applications using Hibernate need some form of \"contextual\" sessions, where a given session is in effect throughout the scope of a given context. However, across applications the definition of what constitutes a context is typically different; and different contexts define different scopes to the notion of current. Applications using Hibernate prior to version 3.0 tended to utilize either home-grown <literal>ThreadLocal</literal>-based contextual sessions, helper classes such as <literal>HibernateUtil</literal>, or utilized third-party frameworks (such as Spring or Pico) which provided proxy/interception-based contextual sessions."
+msgstr "Hibernate를 ì¬ì©íë ëë¶ë¶ì ì´í리ì¼ì´ì
ë¤ì ì´ë¤ ììì \"컨í
ì¤í¸ìì(contextual)\" ì¸ì
ë¤ì íìë¡ íë¤. ì¬ê¸°ì 주ì´ì§ ì¸ì
ì 주ì´ì§ 컨í
ì¤í¸ì ììì ê±¸ì³ íëì íë¤. íì§ë§ ì´í리ì¼ì´ì
ë¤ì ê°ë¡ì§ë¬ 컨í
ì¤í¸ë¥¼ 구ì±íë ê²ì ëí ì ìë ì¼ë°ì ì¼ë¡ ë¤ë¥´ë¤; ê·¸ë¦¬ê³ ë¤ë¥¸ 컨í
ì¤í¸ë¤ì íì¬ë¼ê³ íë ê°ë
ì ëí´ ë¤ë¥¸ ììë¤ì ì ìíë¤. ë²ì 3.0 ì ì Hibernate를 ì¬ì©íë ì´í리ì¼ì´ì
ë¤ì ìê°ìì°ë <literal>ThreadLocal</literal>-기ë°ì 컨í
ì¤ìì ì¸ì
ë¤, <literal>HibernateUtil</literal>ê³¼ ê°ì helper í´ëì¤ë¤ì íì©íê±°ë íë½ì/ì¸í°ì
ì
기ë°ì 컨í
ì¤í¸ìì ì¸ì
ë¤ì ì ê³µí´ì£¼ìë (Spring ëë Picoì ê°ì )ì 3ì íë ììë¤ì íì©íë ê²½í¥ì´ ììë¤."
+
+#: index.docbook:297
+msgid "Starting with version 3.0.1, Hibernate added the <literal>SessionFactory.getCurrentSession()</literal> method. Initially, this assumed usage of <literal>JTA</literal> transactions, where the <literal>JTA</literal> transaction defined both the scope and context of a current session. The Hibernate team maintains that, given the maturity of the numerous stand-alone <literal>JTA TransactionManager</literal> implementations out there, most (if not all) applications should be using <literal>JTA</literal> transaction management whether or not they are deployed into a <literal>J2EE</literal> container. Based on that, the <literal>JTA</literal>-based contextual sessions is all you should ever need to use."
+msgstr "ë²ì 3.0.1ììë¶í° ììíì¬, Hibernateë <literal>SessionFactory.getCurrentSession()</literal> ë©ìë를 ì¶ê°íë¤. ì´ê¸°ì ì´ê²ì <literal>JTA</literal> í¸ëìì
ë¤ì ì¬ì©íë ê²ì ì ì íë¤. ì¬ê¸°ì <literal>JTA</literal> í¸ëìì
ì íì¬ ì¸ì
ì ììê³¼ 컨í
ì¤í¸ë¥¼ ì ìíë¤. Hibernate íì ì±ìë ë¤ìì ì¤í ëì¼ë¡ <literal>JTA TransactionManager</literal> 구íë¤ì´ ë°íëë©´, (ì ë¶ë ìëê² ì§ë§) ëë¶ë¶ì ì´í리ì¼ì´ì
ë¤ì´ ê·¸ê²ë¤ì´ <literal>J2EE</literal> 컨í
ì´ë ë´ë¡ ë°°ì¹ëë ê·¸ë ì§ ìë ê°ì <literal>JTA</literal> í¸ëìì
ê´ë¦¬ë¥¼ ì¬ì©íê² ë ê²ì´ë¼ê³ 주ì¥íë¤. ê·¸ê²ì 기ì´íì¬, <literal>JTA</literal>ì 기ë°í 컨í
ì¤í¸ìì ì¸ì
ë¤ì ì¸ì ê° ë¹ì ì´ ì¬ì©ì íìë¡ íê² ë ì ë¶ë¤."
+
+#: index.docbook:307
+msgid "However, as of version 3.1, the processing behind <literal>SessionFactory.getCurrentSession()</literal> is now pluggable. To that end, a new extension interface (<literal>org.hibernate.context.CurrentSessionContext</literal>) and a new configuration parameter (<literal>hibernate.current_session_context_class</literal>) have been added to allow pluggability of the scope and context of defining current sessions."
+msgstr "íì§ë§ ë²ì 3.1 ì´íë¡ <literal>SessionFactory.getCurrentSession()</literal> ì´ë©´ì ì²ë¦¬ê³¼ì ì ì´ì íë¬ê·¸ ê°ë¥íë¤. ê·¸ê²ì ëë´ê¸° ìí´, íëì ìë¡ì´ íì¥ ì¸í°íì´ì¤ (<literal>org.hibernate.context.CurrentSessionContext</literal>)ì íëì ìë¡ì´ êµ¬ì± íë¼ë¯¸í°(<literal>hibernate.current_session_context_class</literal>)ê° íì¬ ì¸ì
ë¤ì ì ìíë ììê³¼ 컨í
ì¤í¸ì íë¬ê·¸ ê°ë¥ì±ì íì©í기 ìí´ ì¶ê°ëìë¤."
+
+#: index.docbook:314
+msgid "See the Javadocs for the <literal>org.hibernate.context.CurrentSessionContext</literal> interface for a detailed discussion of its contract. It defines a single method, <literal>currentSession()</literal>, by which the implementation is responsible for tracking the current contextual session. Out-of-the-box, Hibernate comes with three implementations of this interface."
+msgstr "ê·¸ê²ì ê³ì½ì ëí ìì¸í ë
¼ìë <literal>org.hibernate.context.CurrentSessionContext</literal> ì¸í°íì´ì¤ì ê´í javadocs를 ë³´ë¼. ê·¸ê²ì íëì ë©ìë, <literal>currentSession()</literal>를 ì ìíë©°, ê·¸ 구íì íì¬ì 컨í
ì¤í¸ ìì ì¸ì
ì ì¶ì í ì±
ìì´ ìë¤. ë¹ê³µìì ì¼ë¡, Hibernateë ì´ ì¸í°íì´ì¤ì ëí ì¸ ê°ì 구íë¤ì ë¶ìì ì¼ë¡ í¬í¨íê³ ìë¤."
+
+#: index.docbook:324
+msgid "<literal>org.hibernate.context.JTASessionContext</literal> - current sessions are tracked and scoped by a <literal>JTA</literal> transaction. The processing here is exactly the same as in the older JTA-only approach. See the Javadocs for details."
+msgstr "<literal>org.hibernate.context.JTASessionContext</literal> - íì¬ì ì¸ì
ë¤ì íëì <literal>JTA</literal>ì ìí´ ì¶ì ëê³ ììí ëë¤. ì¬ê¸°ì ì²ë¦¬ê³¼ì ì ì´ì ì JTA-ì ì© ì 근과 ì ííê² ëì¼íë¤. ìì¸í ê²ì javadocs를 ë³´ë¼."
+
+#: index.docbook:332
+msgid "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - current sessions are tracked by thread of execution. Again, see the Javadocs for details."
+msgstr "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - íì¬ì ì¸ì
ë¤ì ì¤í ì°ë ëì ìí´ ì¶ì ëë¤. ìì¸í ê²ì ë¤ì javadocs를 ë³´ë¼."
+
+#: index.docbook:338
+msgid "<literal>org.hibernate.context.ManagedSessionContext</literal> - current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a <literal>Session</literal> instance with static methods on this class, it does never open, flush, or close a <literal>Session</literal>."
+msgstr "ì²ìì ë 구íë¤ì <emphasis>session-per-request</emphasis>ë¡ ìë ¤ì§ê³ ì¬ì©ëê³ ìë \"íëì ì¸ì
- íëì ë°ì´í°ë² ì´ì¤ í¸ëìì
\" íë¡ê·¸ëë° ëª¨íì ì ê³µíë¤. íëì Hibernate ì¸ì
ì ììê³¼ ëì ë°ì´í°ë² ì´ì¤ í¸ëìì
ì ì¡´ì 기ê°ì ìí´ ì ìëë¤. ë§ì¼ (ì를 ë¤ë©´ ìì J2SEìì ëë JTA/UserTransaction/BMTì ê²½ì°ì) ë¹ì ì´ íë¡ê·¸ë¨ ìì í¸ëìì
ê²½ê³êµ¬ë¶ì ì¬ì©í ê²½ì°, ë¹ì ì ë¹ì ì ì½ëë¡ë¶í° 기본 í¸ëìì
ìì¤í
ì ìíìí¤ëë° Hibernate <literal>Transaction</literal> API를 ì¬ì©íë ê²ì´ ê¶ì¥ëë¤. ë§ì¼ ë¹ì ì´ CMT를 ì§ìíë íëì EJB 컨í
ì´ëìì ì¤íí ê²½ì°, í¸ëìì
ê²½ê³ë¤ì´ ì ì¸ì ì¼ë¡ ì ìëê³ ë¹ì ì ë¹ì ì ì½ë ë´ì ì´ë¤ í¸ëìì
ë ì¸ì
ê²½ê³êµ¬ë¶ ì¤í¼ë ì´ì
ë¤ì íìë¡ íì§ ìëë¤. ì¶ê° ì ë³´ì ì½ë ìì ë¤ì <xref linken!
d=\"transactions\"/>를 참조íë¼."
+
+#: index.docbook:347
+msgid "The first two implementations provide a \"one session - one database transaction\" programming model, also known and used as <emphasis>session-per-request</emphasis>. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programatic transaction demarcation in plain JSE without JTA, you are adviced to use the Hibernate <literal>Transaction</literal> API to hide the underlying transaction system from your code. If you use JTA, use the JTA interfaces to demarcate transactions. If you execute in an EJB container that supports CMT, transaction boundaries are defined declaratively and you don't need any transaction or session demarcation operations in your code. Refer to <xref linkend=\"transactions\"/> for more information and code examples."
+msgstr "<literal>hibernate.current_session_context_class</literal> êµ¬ì± íë¼ë¯¸í°ë <literal>org.hibernate.context.CurrentSessionContext</literal> 구íì´ ì¬ì©ë ê²ìì ì ìíë¤. ìí¸íì ìí´. ë§ì¼ ì´ êµ¬ì± íë¼ë¯¸í°ê° ì¤ì ëì§ ììì§ë§ íëì <literal>org.hibernate.transaction.TransactionManagerLookup</literal>ì´ êµ¬ì±ëì´ ìì ê²½ì°, Hibernateë <literal>org.hibernate.context.JTASessionContext</literal>를 ì¬ì©í ê²ìì ë
¸í¸íë¼. ì¼ë°ì ì¼ë¡, ì´ íë¼ë¯¸í°ì ê°ì ë¨ì§ ì¬ì©í 구í í´ëì¤ë¥¼ ëª
ëª
í ê²ì´ë¤; íì§ë§ ë ê°ì§ ë¹ê³µìì ì¸ êµ¬íë¤ë¡ì ë ê°ì ëìíë 짧ì ì´ë¦ë¤ \"jta\"ì \"thread\"ì´ ì¡´ì¬íë¤."
+
+#: index.docbook:359
+msgid "The <literal>hibernate.current_session_context_class</literal> configuration parameter defines which <literal>org.hibernate.context.CurrentSessionContext</literal> implementation should be used. Note that for backwards compatibility, if this config param is not set but a <literal>org.hibernate.transaction.TransactionManagerLookup</literal> is configured, Hibernate will use the <literal>org.hibernate.context.JTASessionContext</literal>. Typically, the value of this parameter would just name the implementation class to use; for the three out-of-the-box implementations, however, there are three corresponding short names, \"jta\", \"thread\", and \"managed\"."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/association_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/association_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/association_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,952 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:6
+msgid "Association Mappings"
+msgstr "ì°ê´ 매íë¤"
+
+#: index.docbook:9
+msgid "Introduction"
+msgstr "<title>ê°ì</title>"
+
+#: index.docbook:11
+msgid "Association mappings are the often most difficult thing to get right. In this section we'll go through the canonical cases one by one, starting with unidirectional mappings, and then considering the bidirectional cases. We'll use <literal>Person</literal> and <literal>Address</literal> in all the examples."
+msgstr "ì°ê´ 매íë¤ì ì¬ë°ë¥¸ ê²ì ì»ê¸°ê° ì¢
ì¢
ê°ì¥ ì´ë ¤ì´ ê²ì´ë¤. ì´ ì ìì ì°ë¦¬ë ë¨ë°©í¥ 매íë¤ìì ììíê³ , ê·¸ë° ë¤ì ìë°©í¥ ê²½ì°ë¤ì ê²í í¨ì¼ë¡ì¨, íëì© íì¤ì ì¸ ê²½ì°ë¤ì ìì¸í ë
¼ìí ê²ì´ë¤. ì°ë¦¬ë 모ë ìì ë¤ìì <literal>Person</literal>ê³¼ <literal>Address</literal>를 ì¬ì©í ê²ì´ë¤."
+
+#: index.docbook:19
+msgid "We'll classify associations by whether or not they map to an intervening join table, and by multiplicity."
+msgstr "ì°ë¦¬ë ì°ê´ë¤ì ì¤ì¬íë join í
ì´ë¸ë¡ 매íìí¬ ê²ì¸ì§ ì¬ë¶ì ë°ë¼, ê·¸ë¦¬ê³ multiplicity(ë¤ì¤ì±)ì ë°ë¼ ì°ê´ë¤ì ë¶ë¥í ê²ì´ë¤."
+
+#: index.docbook:24
+msgid "Nullable foreign keys are not considered good practice in traditional data modelling, so all our examples use not null foreign keys. This is not a requirement of Hibernate, and the mappings will all work if you drop the nullability constraints."
+msgstr "null íì© ê°ë¥í foreign í¤ë¤ì ì íµì ì¸ ë°ì´í° 모ë¸ë§ìì ì¢ì ì¤ë¡ë¡ ê°ì£¼ëì§ ììì, 모ë ì°ë¦¬ì ìì ë¤ì not null foreign í¤ë¤ì ì¬ì©íë¤. ì´ê²ì Hibernateìì íìê° ìëê³ , ë¹ì ì´ null íì© ê°ë¥ 컨ì¤í¸ë ì¸í¸ë¤ì ëë¡ìí¬ ê²½ì° ë§¤íë¤ì 모ë ëìí ê²ì´ë¤."
+
+#: index.docbook:34
+msgid "Unidirectional associations"
+msgstr "ë¨ë°©í¥ ì°ê´ë¤"
+
+#: index.docbook:37, index.docbook:108
+msgid "many to one"
+msgstr "many to one"
+
+#: index.docbook:39
+msgid "A <emphasis>unidirectional many-to-one association</emphasis> is the most common kind of unidirectional association."
+msgstr "<emphasis>ë¨ë°©í¥ many-to-one ì°ê´</emphasis>ì ê°ì¥ ê³µíµì ì¸ ì¢
ë¥ì ë¨ë°©í¥ ì°ê´ì´ë¤."
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:45, index.docbook:161
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:50, index.docbook:121, index.docbook:185, index.docbook:225
+msgid "one to one"
+msgstr "one to one"
+
+#: index.docbook:52
+msgid "A <emphasis>unidirectional one-to-one association on a foreign key</emphasis> is almost identical. The only difference is the column unique constraint."
+msgstr "<emphasis>foreign í¤ì ëí ë¨ë°©í¥ one-to-one ì°ê´ì ëê° ì주 ëì¼íë¤.</emphasis> ì ì¼í ì°¨ì´ì ì ì»¬ë¼ ì ì¼(unique) 컨ì¤í¸ë ì¸í¸ì´ë¤."
+
+#: index.docbook:57
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:58, index.docbook:193
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:60
+msgid "A <emphasis>unidirectional one-to-one association on a primary key</emphasis> usually uses a special id generator. (Notice that we've reversed the direction of the association in this example.)"
+msgstr "<emphasis>íëì íë¼ì´ë¨¸ë¦¬ í¤ì ëí ë¨ë°©í¥ one-to-one ì°ê´</emphasis>ì ëê° í¹ë³í id ìì±ê¸°ë¥¼ ì¬ì©íë¤. (ì´ ìì ìì ì°ê´ì ë°©í¥ì´ ìì ëììì 주목íë¼.)"
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:67, index.docbook:201
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( personId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( personId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:72, index.docbook:94
+msgid "one to many"
+msgstr "one to many"
+
+#: index.docbook:74
+msgid "A <emphasis>unidirectional one-to-many association on a foreign key</emphasis> is a very unusual case, and is not really recommended."
+msgstr "<emphasis>íëì foreign í¤ì ëí ë¨ë°©í¥ one-to-many ì°ê´</emphasis>ì ë§¤ì° ìë¤ë¥¸ ê²½ì°ì´ê³ , ì¤ì ë¡ ê¶ì¥ëì§ ìëë¤."
+
+#: index.docbook:79
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\">\n"
+ " <key column=\"personId\" \n"
+ " not-null=\"true\"/>\n"
+ " <one-to-many class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\">\n"
+ " <key column=\"personId\" \n"
+ " not-null=\"true\"/>\n"
+ " <one-to-many class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:80
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key, personId bigint not null )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key, personId bigint not null )\n"
+ " ]]>"
+
+#: index.docbook:82
+msgid "We think it's better to use a join table for this kind of association."
+msgstr "ì°ë¦¬ë ì´ë° ì¢
ë¥ì ì°ê´ì ëí´ íëì join í
ì´ë¸ì ì¬ì©íë ê²ì´ ë ì¢ë¤ê³ ìê°íë¤."
+
+#: index.docbook:91
+msgid "Unidirectional associations with join tables"
+msgstr "join í
ì´ë¸ë¤ì ëí ë¨ë°©í¥ ì°ê´ë¤"
+
+#: index.docbook:96
+msgid "A <emphasis>unidirectional one-to-many association on a join table</emphasis> is much preferred. Notice that by specifying <literal>unique=\"true\"</literal>, we have changed the multiplicity from many-to-many to one-to-many."
+msgstr "<emphasis>íëì join í
ì´ë¸ì ëí ë¨ë°©í¥ one-to-many ì°ê´</emphasis>ì´ ë³´ë¤ ë ì í¸ëë¤. <literal>unique=\"true\"</literal>를 ì§ì í¨ì¼ë¡ì¨ ì°ë¦¬ë many-to-manyìì one-to-manyë¡ ìì¤ì±(multiplicity)를 ë³ê²½ìì¼°ìì 주목íë¼."
+
+#: index.docbook:102
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:103
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:110
+msgid "A <emphasis>unidirectional many-to-one association on a join table</emphasis> is quite common when the association is optional."
+msgstr "<emphasis>íëì join í
ì´ë¸ì ëí ë¨ë°©í¥ many-to-one ì°ê´</emphasis>ì ê·¸ ì°ê´ì´ ì íì ì¼ ë ë§¤ì° ê³µíµì ì´ë¤."
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:116
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:123
+msgid "A <emphasis>unidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr "<emphasis>íëì join í
ì´ë¸ì ëí ë¨ë°©í¥ one-to-one ì°ê´</emphasis>ì ê·¹í íµìì ì´ì§ ìì§ë§ ê°ë¥íë¤."
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:129, index.docbook:233
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:134, index.docbook:238
+msgid "many to many"
+msgstr "many to many"
+
+#: index.docbook:136
+msgid "Finally, we have a <emphasis>unidirectional many-to-many association</emphasis>."
+msgstr "ë§ì§ë§ì¼ë¡, ì°ë¦¬ë <emphasis>ë¨ë°©í¥ many-to-many ì°ê´</emphasis>ì ê°ëë¤."
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+
+#: index.docbook:141, index.docbook:246
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:148
+msgid "Bidirectional associations"
+msgstr "ìë°©í¥ ì°ê´ë¤"
+
+#: index.docbook:151, index.docbook:211
+msgid "one to many / many to one"
+msgstr "one to many / many to one"
+
+#: index.docbook:153
+msgid "A <emphasis>bidirectional many-to-one association</emphasis> is the most common kind of association. (This is the standard parent/child relationship.)"
+msgstr "<emphasis>ìë°©í¥ many-to-one ì°ê´</emphasis>ì ê°ì¥ ê³µíµë ì¢
ë¥ì ì°ê´ì´ë¤.(ì´ê²ì íì¤ ë¶ëª¨/ìì ê´ê³ì´ë¤. )"
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:163
+msgid "If you use a <literal>List</literal> (or other indexed collection) you need to set the <literal>key</literal> column of the foreign key to <literal>not null</literal>, and let Hibernate manage the association from the collections side to maintain the index of each element (making the other side virtually inverse by setting <literal>update=\"false\"</literal> and <literal>insert=\"false\"</literal>):"
+msgstr "ë§ì¼ ë¹ì ì´ <literal>List</literal>(ëë ë¤ë¥¸ ì¸ë±ì± ë ì½ë ì
)ì ì¬ì©í ê²½ì° ë¹ì ì foreign keyì <literal>key</literal> 컬ë¼ì <literal>not null</literal>ë¡ ì¤ì íê³ , Hibernateë¡ íì¬ê¸ ê°ê°ì ììì ì¸ë±ì¤ë¥¼ ì ì§ê´ë¦¬í기 ìí´ (<literal>update=\"false\"</literal>ì <literal>insert=\"false\"</literal>를 ì¤ì í¨ì¼ë¡ì¨ ë¤ë¥¸ 측ì ê°ìì ì¼ë¡ inverseë¡ ë§ë¤ì´) ê·¸ ì½ë ì
ë¤ ì¸¡ì¼ë¡ë¶í° ì°ê´ì ê´ë¦¬íëë¡ í íìê° ìë¤:"
+
+#: index.docbook:171
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <list name=\"people\">\n"
+ " <key column=\"addressId\" not-null=\"true\"/>\n"
+ " <list-index column=\"peopleIdx\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </list>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <list name=\"people\">\n"
+ " <key column=\"addressId\" not-null=\"true\"/>\n"
+ " <list-index column=\"peopleIdx\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </list>\n"
+ "</class>]]>"
+
+#: index.docbook:173
+msgid "It is important that you define <literal>not-null=\"true\"</literal> on the <literal><key></literal> element of the collection mapping if the underlying foreign key column is <literal>NOT NULL</literal>. Don't only declare <literal>not-null=\"true\"</literal> on a possible nested <literal><column></literal> element, but on the <literal><key></literal> element."
+msgstr "ë§ì¼ 기본 ì¸ë í¤ ì»¬ë¼ì´ <literal>NOT NULL</literal>ì¼ ê²½ì° ì½ë ì
매íì <literal><key></literal> ìì ìì <literal>not-null=\"true\"</literal>를 ì ìíë ê²ì´ ì¤ìíë¤. ë´í¬ë <literal><column></literal> ìì ìì <literal>not-null=\"true\"</literal>를 ì ì¸íì§ ë§ê³ , <literal><key></literal> ìì ìì ì ì¸íë¼."
+
+#: index.docbook:187
+msgid "A <emphasis>bidirectional one-to-one association on a foreign key</emphasis> is quite common."
+msgstr "<emphasis>foreignì ëí ìë°©í¥ one-to-one ì°ê´</emphasis>ì 꽤 ê³µíµì ì´ë¤."
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " property-ref=\"address\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " property-ref=\"address\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:195
+msgid "A <emphasis>bidirectional one-to-one association on a primary key</emphasis> uses the special id generator."
+msgstr "<emphasis>íëì íë¼ì´ë¨¸ë¦¬ í¤ì ëí ìë°©í¥ one-to-one ì°ê´</emphasis>ì í¹ë³í id ìì±ê¸°ë¥¼ ì¬ì©íë¤."
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"address\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"address\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:208
+msgid "Bidirectional associations with join tables"
+msgstr "join í
ì´ë¸ë¤ì ëí ìë°©í¥ ì°ê´ë¤"
+
+#: index.docbook:213
+msgid "A <emphasis>bidirectional one-to-many association on a join table</emphasis>. Note that the <literal>inverse=\"true\"</literal> can go on either end of the association, on the collection, or on the join."
+msgstr "<emphasis>íëì join í
ì´ë¸ì ëí ìë°©í¥ one-to-many ì°ê´</emphasis>. <literal>inverse=\"true\"</literal>ë ì°ê´ì ì´ë 쪽 ëì´ë ì½ë ì
측ì¼ë¡ ëë join 측ì¼ë¡ ê° ì ìë¤."
+
+#: index.docbook:219
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" \n"
+ " table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " inverse=\"true\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\"\n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" \n"
+ " table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " inverse=\"true\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\"\n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+
+#: index.docbook:227
+msgid "A <emphasis>bidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr "<emphasis>íëì join í
ì´ë¸ì ëí ìë°©í¥ one-to-one ì°ê´</emphasis>ì ê·¹í íµìì ì´ì§ ìì§ë§, ê°ë¥íë¤."
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\"\n"
+ " inverse=\"true\">\n"
+ " <key column=\"addressId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\"\n"
+ " inverse=\"true\">\n"
+ " <key column=\"addressId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+
+#: index.docbook:240
+msgid "Finally, we have a <emphasis>bidirectional many-to-many association</emphasis>."
+msgstr "ë§ì§ë§ì¼ë¡, ì°ë¦¬ë íëì <emphasis>ìë°©í¥ many-to-many ì°ê´</emphasis>ì ê°ëë¤."
+
+#: index.docbook:244
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\" table=\"PersonAddress\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-many column=\"personId\"\n"
+ " class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\" table=\"PersonAddress\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-many column=\"personId\"\n"
+ " class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:253
+msgid "More complex association mappings"
+msgstr "ë³´ë¤ ë³µì¡í ì°ê´ 매íë¤"
+
+#: index.docbook:255
+msgid "More complex association joins are <emphasis>extremely</emphasis> rare. Hibernate makes it possible to handle more complex situations using SQL fragments embedded in the mapping document. For example, if a table with historical account information data defines <literal>accountNumber</literal>, <literal>effectiveEndDate</literal> and <literal>effectiveStartDate</literal>columns, mapped as follows:"
+msgstr "ë³´ë¤ ë³µì¡í ì°ê´ ì¡°ì¸ë¤ì <emphasis>극기</emphasis> ë물ë¤. Hibernateë 매í 문ìë¤ ë´ì ì½ì
ë SQL ì¡°ê°ë¤ì ì¬ì©íì¬ ë³´ë¤ ë³µì¡í ìí©ì ì²ë¦¬íë ê²ì ê°ë¥íëë¡ í´ì¤ë¤. ì를 ë¤ì´, ë§ì¼ ê³ì¢ ë´ì ì ë³´ ë°ì´í°ë¥¼ ê°ì§ íëì´ í
ì´ë¸ì´ <literal>accountNumber</literal>, <literal>effectiveEndDate</literal> ê·¸ë¦¬ê³ <literal>effectiveStartDate</literal> 컬ë¼ë¤ì ì ìí ê²½ì°, ë¤ìê³¼ ê°ì´ 매íëë¤:"
+
+#: index.docbook:264
+msgid ""
+ "<![CDATA[<properties name=\"currentAccountKey\">\n"
+ " <property name=\"accountNumber\" type=\"string\" not-null=\"true\"/>\n"
+ " <property name=\"currentAccount\" type=\"boolean\">\n"
+ " <formula>case when effectiveEndDate is null then 1 else 0 end</formula>\n"
+ " </property>\n"
+ "</properties>\n"
+ "<property name=\"effectiveEndDate\" type=\"date\"/>\n"
+ "<property name=\"effectiveStateDate\" type=\"date\" not-null=\"true\"/>]]>"
+msgstr ""
+ "<![CDATA[<properties name=\"currentAccountKey\">\n"
+ " <property name=\"accountNumber\" type=\"string\" not-null=\"true\"/>\n"
+ " <property name=\"currentAccount\" type=\"boolean\">\n"
+ " <formula>case when effectiveEndDate is null then 1 else 0 end</formula>\n"
+ " </property>\n"
+ "</properties>\n"
+ "<property name=\"effectiveEndDate\" type=\"date\"/>\n"
+ "<property name=\"effectiveStateDate\" type=\"date\" not-null=\"true\"/>]]>"
+
+#: index.docbook:266
+msgid "Then we can map an association to the <emphasis>current</emphasis> instance (the one with null <literal>effectiveEndDate</literal>) using:"
+msgstr "ê·¸ë ì°ë¦¬ë ë¤ìì ì¬ì©íì¬ íëì ì°ê´ì <emphasis>íì¬</emphasis> ì¸ì¤í´ì¤ (null <literal>effectiveEndDate</literal>ì ê°ì§ ì¸ì¤í´ì¤)ë¡ ë§¤íìí¬ ì ìë¤:"
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<many-to-one name=\"currentAccountInfo\" \n"
+ " property-ref=\"currentAccountKey\"\n"
+ " class=\"AccountInfo\">\n"
+ " <column name=\"accountNumber\"/>\n"
+ " <formula>'1'</formula>\n"
+ "</many-to-one>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"currentAccountInfo\" \n"
+ " property-ref=\"currentAccountKey\"\n"
+ " class=\"AccountInfo\">\n"
+ " <column name=\"accountNumber\"/>\n"
+ " <formula>'1'</formula>\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:273
+msgid "In a more complex example, imagine that the association between <literal>Employee</literal> and <literal>Organization</literal> is maintained in an <literal>Employment</literal> table full of historical employment data. Then an association to the employee's <emphasis>most recent</emphasis> employer (the one with the most recent <literal>startDate</literal>) might be mapped this way:"
+msgstr "ë³´ë¤ ë³µì¡í ìì ìì, <literal>Employee</literal>ì <literal>Organization</literal> ì¬ì´ì ì°ê´ì´ ì ì²´ ê³ ì© ë´ì ë°ì´í°ë¥¼ ê°ì§ <literal>Employment</literal> í
ì´ë¸ ë´ì ì ì§ëë¤ê³ ê°ì íì. ê·¸ë ì¢
ì
ìì <emphasis>ê°ì¥ ìµê·¼ì</emphasis> ê³ ì©ì£¼ì ëí íëì ì°ê´(ê°ì¥ ìµê·¼ì <literal>startDate</literal>를 ê°ê³ ìë ê²)ì´ ë¤ì ë°©ë²ì¼ë¡ 매íë ì ìë¤:"
+
+#: index.docbook:281
+msgid ""
+ "<![CDATA[<join>\n"
+ " <key column=\"employeeId\"/>\n"
+ " <subselect>\n"
+ " select employeeId, orgId \n"
+ " from Employments \n"
+ " group by orgId \n"
+ " having startDate = max(startDate)\n"
+ " </subselect>\n"
+ " <many-to-one name=\"mostRecentEmployer\" \n"
+ " class=\"Organization\" \n"
+ " column=\"orgId\"/>\n"
+ "</join>]]>"
+msgstr ""
+ "<![CDATA[<join>\n"
+ " <key column=\"employeeId\"/>\n"
+ " <subselect>\n"
+ " select employeeId, orgId \n"
+ " from Employments \n"
+ " group by orgId \n"
+ " having startDate = max(startDate)\n"
+ " </subselect>\n"
+ " <many-to-one name=\"mostRecentEmployer\" \n"
+ " class=\"Organization\" \n"
+ " column=\"orgId\"/>\n"
+ "</join>]]>"
+
+#: index.docbook:283
+msgid "You can get quite creative with this functionality, but it is usually more practical to handle these kinds of cases using HQL or a criteria query."
+msgstr "ë¹ì ì ì´ ê¸°ë¥ì¼ë¡ ì주 ìì°ì±ì ì»ì ì ìì§ë§, ê·¸ê²ì ëê° HQL ëë criteria ì§ì를 ì¬ì©íì¬ ì´ë¤ ì¢
ë¥ì ê²½ì°ë¤ì ì²ë¦¬íë ê²ì´ ë³´ë¤ ì¤ì©ì ì´ë¤."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/basic_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/basic_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/basic_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,3067 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Basic O/R Mapping"
+msgstr "기본 O/R 매í"
+
+#: index.docbook:8
+msgid "Mapping declaration"
+msgstr "매í ì ì¸"
+
+#: index.docbook:10
+msgid "Object/relational mappings are usually defined in an XML document. The mapping document is designed to be readable and hand-editable. The mapping language is Java-centric, meaning that mappings are constructed around persistent class declarations, not table declarations."
+msgstr "ê°ì²´/ê´ê³í 매íë¤ì ëê° XML 문ì ë´ì ì ìëë¤. 매í 문ìë ê°ë
ì±ì´ ìê³ ììì
í¸ì§ì´ ê°ë¥íëë¡ ì¤ê³ëì´ ìë¤. 매í ì¸ì´ë 매íë¤ì´ í
ì´ë¸ ì ì¸ë¤ì´ ìë, ìì í´ëì¤ ì ì¸ë¤ë¡ ìì±ëë¤ë ì미ìì ìë° ì¤ì¬ì ì´ë¤."
+
+#: index.docbook:17
+msgid "Note that, even though many Hibernate users choose to write the XML by hand, a number of tools exist to generate the mapping document, including XDoclet, Middlegen and AndroMDA."
+msgstr "ì¬ì§ì´ ë§ì Hibernate ì¬ì©ìë¤ì´ ììì
ì¼ë¡ XMLì ìì±íê³ ì ì íí ì§ë¼ë, XDoclet, Middlegen, ê·¸ë¦¬ê³ AndroMDA를 í¬í¨íë, 매í 문ì를 ìì±ìí¤ë ë§ì ë구ë¤ì´ ì¡´ì¬íë¤ë ì ì ë
¸í¸íë¼."
+
+#: index.docbook:23
+msgid "Lets kick off with an example mapping:"
+msgstr "ìì 매íì¼ë¡ ììíì:"
+
+#: index.docbook:27
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\"\n"
+ " table=\"cats\"\n"
+ " discriminator-value=\"C\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "\n"
+ " <discriminator column=\"subclass\"\n"
+ " type=\"character\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " <property name=\"birthdate\"\n"
+ " type=\"date\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"color\"\n"
+ " type=\"eg.types.ColorUserType\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"sex\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"litterId\"\n"
+ " column=\"litterId\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <many-to-one name=\"mother\"\n"
+ " column=\"mother_id\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <set name=\"kittens\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"litter_id\">\n"
+ " <key column=\"mother_id\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"DomesticCat\"\n"
+ " discriminator-value=\"D\">\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" \n"
+ " table=\"cats\"\n"
+ " discriminator-value=\"C\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "\n"
+ " <discriminator column=\"subclass\" \n"
+ " type=\"character\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " <property name=\"birthdate\"\n"
+ " type=\"date\" \n"
+ " not-null=\"true\" \n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"color\"\n"
+ " type=\"eg.types.ColorUserType\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"sex\"\n"
+ " not-null=\"true\" \n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"litterId\"\n"
+ " column=\"litterId\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <many-to-one name=\"mother\"\n"
+ " column=\"mother_id\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <set name=\"kittens\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"litter_id\">\n"
+ " <key column=\"mother_id\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"DomesticCat\"\n"
+ " discriminator-value=\"D\">\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " type=\"string\"/>\n"
+ "\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:29
+msgid "We will now discuss the content of the mapping document. We will only describe the document elements and attributes that are used by Hibernate at runtime. The mapping document also contains some extra optional attributes and elements that affect the database schemas exported by the schema export tool. (For example the <literal> not-null</literal> attribute.)"
+msgstr "ì°ë¦¬ë ì´ì 매í 문ìì ë´ì©ì ë
¼ìí ê²ì´ë¤. ì°ë¦¬ë Hibernateì ìí´ ì¤í ìì ì¬ì©ëë 문ì ììë¤ê³¼ ìì±ë¤ ë§ì ì¤ëª
í ê²ì´ë¤. 매í 문ìë ëí ì¤í¤ë§ ë´ë³´ë´ê¸° ë구ì ìí´ ë´ë³´ë´ì§ ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ì ìí¥ì 주ë ì´ë¤ í¹ë³í ìµì
ìì±ë¤ê³¼ ììë¤ì í¬í¨íë¤. (ì를 ë¤ì´ <literal>not-null</literal> ìì±.)"
+
+#: index.docbook:40
+msgid "Doctype"
+msgstr "Doctype"
+
+#: index.docbook:42
+msgid "All XML mappings should declare the doctype shown. The actual DTD may be found at the URL above, in the directory <literal>hibernate-x.x.x/src/org/hibernate </literal> or in <literal>hibernate3.jar</literal>. Hibernate will always look for the DTD in its classpath first. If you experience lookups of the DTD using an Internet connection, check your DTD declaration against the contents of your claspath."
+msgstr "모ë XML 매íë¤ì doctypeì´ ë³´ì´ê² ì ì¸í´ì¼ íë¤. ì¤ì DTDë ìì URLìì, <literal>hibernate-x.x.x/src/org/hibernate</literal> ëë í 리 ë´ìì ëë <literal>hibernate3.jar</literal> ë´ìì ì°¾ì ì ìë¤. Hibernateë íì 첫 ë²ì§¸ë¡ ê·¸ê²ì classpath ììì DTD를 ì°¾ê² ë ê²ì´ë¤. ë§ì¼ ë¹ì ì´ ì¸í°ë· ì°ê²°ì ì¬ì©íë DTDì ëí 룩ì
ë¤ì ê²ªê² ë ê²½ì°, ë¹ì ì classpathì 컨í
ì¸ ì ëí´ ë¹ì ì DTD ì ì¸ì ì²´í¬íë¼."
+
+#: index.docbook:52
+msgid "EntityResolver"
+msgstr "EntityResolver"
+
+#: index.docbook:53
+msgid "As mentioned previously, Hibernate will first attempt to resolve DTDs in its classpath. The manner in which it does this is by registering a custom <literal>org.xml.sax.EntityResolver</literal> implementation with the SAXReader it uses to read in the xml files. This custom <literal>EntityResolver</literal> recognizes two different systemId namespaces."
+msgstr "ìì ì¸ê¸íë¯ì´, Hibernateë 먼ì ê·¸ê²ì classpathìì DTDë¤ì í´ìíë ¤ê³ ìëí ê²ì´ë¤. Hibernateê° ì´ê²ì ííë ë°©ë²ì ê·¸ê²ì´ xml íì¼ë¤ì ì½ì´ë¤ì´ëë° ì¬ì©íë SAXReaderì ë§ì¶¤í <literal>org.xml.sax.EntityResolver</literal> 구íì ë±ë¡íë ê²ì´ë¤. ì´ ë§ì¶¤í <literal>EntityResolver</literal>ë ë ê°ì ë¤ë¥¸ systemId namespaceë¤ì ì¸ì§í´ë¸ë¤."
+
+#: index.docbook:61
+msgid "a <literal>hibernate namespace</literal> is recognized whenever the resolver encounteres a systemId starting with <literal>http://hibernate.sourceforge.net/</literal>; the resolver attempts to resolve these entities via the classlaoder which loaded the Hibernate classes."
+msgstr "<literal>hibernate namespace</literal>ë resolverê° <literal>http://hibernate.sourceforge.net/</literal>ë¡ ììíë íëì systemIdì ë§ë ëë§ë¤ ì¸ì§ëë¤; resolverë Hibernate í´ëì¤ë¤ì ë¡ëìì¼°ë í´ëì¤ë¡ë를 íµí´ ì´ë¤ ìí°í°ë¤ì í´ìíë ¤ê³ ìëíë¤."
+
+#: index.docbook:70
+msgid "a <literal>user namespace</literal> is recognized whenever the resolver encounteres a systemId using a <literal>classpath://</literal> URL protocol; the resolver will attempt to resolve these entities via (1) the current thread context classloader and (2) the classloader which loaded the Hibernate classes."
+msgstr "<literal>user namespace</literal>ë resolverê° <literal>classpath://</literal> URL íë¡í ì½ì ì¬ì©íë systemId를 ë§ë ëë§ë¤ ì¸ì§ëë¤; resolverë (1)íì¬ ì°ë ë 컨í
ì¤í¸ í´ëì¤ë¡ëì (2)Hibernate í´ëì¤ë¤ì ë¡ëìì¼°ë í´ëì¤ë¡ë를 íµí´ ì´ë¤ ìí°í°ë¤ì í´ìíë ¤ê³ ìëí ê²ì´ë¤."
+
+#: index.docbook:79
+msgid "An example of utilizing user namespacing:"
+msgstr "user namespacingì íì©íë ìì :"
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\" [\n"
+ " <!ENTITY types SYSTEM \"classpath://your/domain/types.xml\">\n"
+ "]>\n"
+ "\n"
+ "<hibernate-mapping package=\"your.domain\">\n"
+ " <class name=\"MyEntity\">\n"
+ " <id name=\"id\" type=\"my-custom-id-type\">\n"
+ " ...\n"
+ " </id>\n"
+ " <class>\n"
+ " &types;\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\" [\n"
+ " <!ENTITY types SYSTEM \"classpath://your/domain/types.xml\">\n"
+ "]>\n"
+ "\n"
+ "<hibernate-mapping package=\"your.domain\">\n"
+ " <class name=\"MyEntity\">\n"
+ " <id name=\"id\" type=\"my-custom-id-type\">\n"
+ " ...\n"
+ " </id>\n"
+ " <class>\n"
+ " &types;\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:83
+msgid "Where <literal>types.xml</literal> is a resource in the <literal>your.domain</literal> package and contains a custom <xref linkend=\"mapping-types-custom\"/>typedef."
+msgstr "ì¬ê¸°ì <literal>types.xml</literal>ì <literal>your.domain</literal> í¨í¤ì§ ë´ì ìë 리ìì¤ì´ê³ ë§ì¶¤í <xref linkend=\"mapping-types-custom\"/>typedef를 í¬í¨íë¤."
+
+#: index.docbook:91
+msgid "hibernate-mapping"
+msgstr "hibernate-mapping"
+
+#: index.docbook:93
+msgid "This element has several optional attributes. The <literal>schema</literal> and <literal>catalog</literal> attributes specify that tables referred to in this mapping belong to the named schema and/or catalog. If specified, tablenames will be qualified by the given schema and catalog names. If missing, tablenames will be unqualified. The <literal>default-cascade</literal> attribute specifies what cascade style should be assumed for properties and collections which do not specify a <literal>cascade</literal> attribute. The <literal>auto-import</literal> attribute lets us use unqualified class names in the query language, by default."
+msgstr "ì´ ììë ëª ê°ì ì íì ì¸ ìì±ë¤ì ê°ëë¤. <literal>schema</literal> ìì±ê³¼ <literal>catalog</literal> ìì±ì ì´ ë§¤í ë´ìì 참조ë í
ì´ë¸ë¤ì´ ëª
ëª
ë schema ì/ëë catalogì ìíë¤ë ì ì ì§ì íë¤. ë§ì¼ ì§ì ë ê²½ì°, í
ì´ë¸ ì´ë¦ë¤ì 주ì´ì§ schema ì´ë¦ê³¼ catalog ì´ë¦ì ìí´ íì (ìì)ë ê²ì´ë¤. ëë½ë ê²½ì°, í
ì´ë¸ ì´ë¦ë¤ì íì ëì§((ììì´ê° ë¶ì§) ìì ê²ì´ë¤. <literal>default-cascade</literal> ìì±ì <literal>cascade</literal> ìì±ì ì§ì íì§ ìì íë¡í¼í°ë¤ê³¼ ì½ë ì
ë¤ì ëí´ ì ì ë <literal>cascade</literal> ì¤íì¼ì´ 무ìì¸ì§ë¥¼ ì§ì íë¤. <literal>auto-import</literal> ìì±ì ëí´í¸ë¡ ì°ë¦¬ê° ì§ì ì¸ì´ ììì ììì´ê° ë¶ì§ ìì(unqualified) í´ëì¤ ì´ë¦ë¤ì ì¬ì©íê² í ê²ì´ë¤."
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[<hibernate-mapping\n"
+ " schema=\"schemaName\"\n"
+ " catalog=\"catalogName\"\n"
+ " default-cascade=\"cascade_style\"\n"
+ " default-access=\"field|property|ClassName\"\n"
+ " default-lazy=\"true|false\"\n"
+ " auto-import=\"true|false\"\n"
+ " package=\"package.name\"\n"
+ " />]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping\n"
+ " schema=\"schemaName\"\n"
+ " catalog=\"catalogName\"\n"
+ " default-cascade=\"cascade_style\"\n"
+ " default-access=\"field|property|ClassName\"\n"
+ " default-lazy=\"true|false\"\n"
+ " auto-import=\"true|false\"\n"
+ " package=\"package.name\"\n"
+ " />]]>"
+
+#: index.docbook:117
+msgid "<literal>schema</literal> (optional): The name of a database schema."
+msgstr "<literal>schema</literal> (ìµì
): ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ì ì´ë¦."
+
+#: index.docbook:122
+msgid "<literal>catalog</literal> (optional): The name of a database catalog."
+msgstr "<literal>catalog</literal> (ìµì
): ë°ì´í°ë² ì´ì¤ ì¹´ë¤ë¡ì ì´ë¦."
+
+#: index.docbook:127
+msgid "<literal>default-cascade</literal> (optional - defaults to <literal>none</literal>): A default cascade style."
+msgstr "<literal>default-cascade</literal> (ìµì
- ëí´í¸ë <literal>none</literal>): ëí´í¸ cascade ì¤íì¼."
+
+#: index.docbook:133
+msgid "<literal>default-access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing all properties. Can be a custom implementation of <literal>PropertyAccessor</literal>."
+msgstr "<literal>default-access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° ëª¨ë íë¡í¼í°ë¤ì ì¡ì¸ì¤íëë° ì¬ì©íê² ë ë°©ë. <literal>PropertyAccessor</literal>ì ëí ë§ì¶¤í 구íì¼ ì ìë¤."
+
+#: index.docbook:140
+msgid "<literal>default-lazy</literal> (optional - defaults to <literal>true</literal>): The default value for unspecifed <literal>lazy</literal> attributes of class and collection mappings."
+msgstr "<literal>default-lazy</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): class ë° collection 매íë¤ì ì§ì ëì§ ìì <literal>lazy</literal> ìì±ë¤ì ëí ëí´í¸ ê°."
+
+#: index.docbook:147
+msgid "<literal>auto-import</literal> (optional - defaults to <literal>true</literal>): Specifies whether we can use unqualified class names (of classes in this mapping) in the query language."
+msgstr "<literal>auto-import</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): ì°ë¦¬ê° ì§ì ì¸ì´ ë´ì (ì´ ë§¤íìì í´ëì¤ë¤ì ëí´) ììì´ê° ë¶ì§ ìì í´ëì¤ ì´ë¦ë¤ì ì¬ì©í ì ìëì§ë¥¼ ì§ì íë¤."
+
+#: index.docbook:154
+msgid "<literal>package</literal> (optional): Specifies a package prefix to assume for unqualified class names in the mapping document."
+msgstr "<literal>package</literal> (ìµì
): 매í 문ì ë´ìì ììì´ê° ë¶ì§ ìì í´ëì¤ ì´ë¦ë¤ì ëí´ ê°ì í í¨í¤ì§ ì ëì´ë¥¼ ì§ì íë¤."
+
+#: index.docbook:162
+msgid "If you have two persistent classes with the same (unqualified) name, you should set <literal>auto-import=\"false\"</literal>. Hibernate will throw an exception if you attempt to assign two classes to the same \"imported\" name."
+msgstr "ë§ì¼ ë¹ì ì´ ëì¼í (ììì´ê° ë¶ì§ ìì) ì´ë¦ì ê°ì§ ë ê°ì ìì í´ëì¤ë¤ì ê°ê³ ìë¤ë©´, ë¹ì ì <literal>auto-import=\"false\"</literal>를 ì¤ì í´ì¼ íë¤. ë§ì¼ ë¹ì ì´ ë ê°ì í´ëì¤ë¤ì ëì¼í \"imported\" ì´ë¦ì í ë¹íë ¤ê³ ìëí ê²½ì°ì Hibernateë ìì¸ìí©ì ëì§ ê²ì´ë¤."
+
+#: index.docbook:168
+msgid "Note that the <literal>hibernate-mapping</literal> element allows you to nest several persistent <literal><class></literal> mappings, as shown above. It is however good practice (and expected by some tools) to map only a single persistent class (or a single class hierarchy) in one mapping file and name it after the persistent superclass, e.g. <literal>Cat.hbm.xml</literal>, <literal>Dog.hbm.xml</literal>, or if using inheritance, <literal>Animal.hbm.xml</literal>."
+msgstr "ìì ë³´ì¬ì§ ê²ì²ë¼ <literal>hibernate-mapping</literal> ììë ëªëª ìì <literal><class></literal> 매íë¤ì ë´ë¶ì í¬í¨íë ê²ì íì©í´ì¤ë¤ë ì ì ë
¸í¸íë¼. íì§ë§ í ê°ì 매í íì¼ ìì í ê°ì ìì í´ëì¤(ëë í ê°ì í´ëì¤ ê³ì¸µêµ¬ì¡°) ë§ì 매ííê³ ìì ìë¸ í´ëì¤ ë¤ì ê·¸ê²ì ëª
ëª
íë ê²ì´ ì¢ì ì°ìµì´ë¤ (ê·¸ë¦¬ê³ ëªëª ë구ë¤ì ìí´ ê¸°ëëë¤). ì를 ë¤ë©´ <literal>Cat.hbm.xml</literal>, <literal>Dog.hbm.xml</literal> ëë ììì ì¬ì©í ê²½ì°ìë <literal>Animal.hbm.xml</literal>."
+
+#: index.docbook:181
+msgid "<title>class</title>"
+msgstr "<title>class</title>"
+
+#: index.docbook:183
+msgid "You may declare a persistent class using the <literal>class</literal> element:"
+msgstr "ë¹ì ì <literal>class</literal> ìì를 ì¬ì©íì¬ ìì í´ëì¤ë¥¼ ì ì¸í ìë ìë¤:"
+
+#: index.docbook:211
+msgid ""
+ "<![CDATA[<class\n"
+ " name=\"ClassName\"\n"
+ " table=\"tableName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " mutable=\"true|false\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " select-before-update=\"true|false\"\n"
+ " polymorphism=\"implicit|explicit\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " persister=\"PersisterClass\"\n"
+ " batch-size=\"N\"\n"
+ " optimistic-lock=\"none|version|dirty|all\"\n"
+ " lazy=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " check=\"arbitrary sql check condition\"\n"
+ " rowid=\"rowid\"\n"
+ " subselect=\"SQL expression\"\n"
+ " abstract=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]>"
+msgstr ""
+ "<![CDATA[<class\n"
+ " name=\"ClassName\"\n"
+ " table=\"tableName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " mutable=\"true|false\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " select-before-update=\"true|false\"\n"
+ " polymorphism=\"implicit|explicit\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " persister=\"PersisterClass\"\n"
+ " batch-size=\"N\"\n"
+ " optimistic-lock=\"none|version|dirty|all\"\n"
+ " lazy=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " check=\"arbitrary sql check condition\"\n"
+ " rowid=\"rowid\"\n"
+ " subselect=\"SQL expression\"\n"
+ " abstract=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]>"
+
+#: index.docbook:214
+msgid "<literal>name</literal> (optional): The fully qualified Java class name of the persistent class (or interface). If this attribute is missing, it is assumed that the mapping is for a non-POJO entity."
+msgstr "<literal>name</literal> (ìµì
): ìì í´ëì¤(ëë ì¸í°íì´ì¤)ì ì ì²´ ììì´ê° ë¶ì Java í´ëì¤ ì´ë¦. ë§ì¼ ì´ ìì±ì´ ëë½ë ê²½ì°, 매íì´ non-POJO ìí°í°ë¼ê³ ê°ì ëë¤."
+
+#: index.docbook:221
+msgid "<literal>table</literal> (optional - defaults to the unqualified class name): The name of its database table."
+msgstr "<literal>table</literal> (ìµì
- ëí´í¸ë ììì´ê° ë¶ì§ ìì í´ëì¤ëª
): ê·¸ê²ì ë°ì´í°ë² ì´ì¤ í
ì´ë¸ì ì´ë¦."
+
+#: index.docbook:227
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses, used for polymorphic behaviour. Acceptable values include <literal>null</literal> and <literal>not null</literal>."
+msgstr "<literal>discriminator-value</literal> (ìµì
- ëí´í¸ë í´ëì¤ ì´ë¦): ë¤íì±(polymorphic) í¹ì§ì ì¬ì©ëë, ê°ë³ ìë¸ í´ëì¤ë¤ë¥¼ 구ë³ì§ë ê°. íì©ê°ë¥í ê°ë¤ì<literal>null</literal>ê³¼ <literal>not null</literal>ì í¬í¨íë¤."
+
+#: index.docbook:234
+msgid "<literal>mutable</literal> (optional, defaults to <literal>true</literal>): Specifies that instances of the class are (not) mutable."
+msgstr "<literal>mutable</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): í´ëì¤ë¤ì ì¸ì¤í´ì¤ë¤ì´ ê°ë³ì ì¸ì§ë¥¼ (ê°ë³ì ì´ì§ ììì§ë¥¼) ì§ì íë¤."
+
+#: index.docbook:240, index.docbook:2204
+msgid "<literal>schema</literal> (optional): Override the schema name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr "<literal>schema</literal> (ìµì
): ë£¨í¸ <literal><hibernate-mapping></literal> ììì ìí´ ì§ì ë ì¤í¤ë§ ì´ë¦ì ì¤ë²ë¼ì´ë ìí¨ë¤."
+
+#: index.docbook:246, index.docbook:2210
+msgid "<literal>catalog</literal> (optional): Override the catalog name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr "<literal>catalog</literal> (ìµì
): ë£¨í¸ <literal><hibernate-mapping></literal> ììì ìí´ ì§ì ë ì¹´ë¤ë¡ ì´ë¦ì ì¤ë²ë¼ì´ë ìí¨ë¤."
+
+#: index.docbook:252
+msgid "<literal>proxy</literal> (optional): Specifies an interface to use for lazy initializing proxies. You may specify the name of the class itself."
+msgstr "<literal>proxy</literal> (ìµì
): lazy initializing proxyë¤ì ì¬ì©í ì¸í°íì´ì¤ë¥¼ ì§ì íë¤. ë¹ì ì í´ëì¤ ê·¸ ìì²´ì ì´ë¦ì ì§ì í ì ë ìë¤."
+
+#: index.docbook:258
+msgid "<literal>dynamic-update</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>UPDATE</literal> SQL should be generated at runtime and contain only those columns whose values have changed."
+msgstr "<literal>dynamic-update</literal> (ìµì
- ëí´í¸ë <literal>false</literal>): <literal>UPDATE</literal> SQLì´ ì¤í ìì ìì±ëê³ ê·¸ë¤ ì»¬ë¼ë¤ì ê°ë¤ì´ ë³ê²½ë ê·¸ë¤ ì»¬ë¼ë¤ ë§ì í¬í¨í ê²ì¸ì§ë¥¼ ì§ì íë¤."
+
+#: index.docbook:265
+msgid "<literal>dynamic-insert</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>INSERT</literal> SQL should be generated at runtime and contain only the columns whose values are not null."
+msgstr "<literal>dynamic-insert</literal> (ìµì
- ëí´í¸ë <literal>false</literal>): ìì±ë <literal>INSERT</literal>ì´ ì¤í ìì ìì±ëê³ ê·¸ë¤ ì»¬ë¼ë¤ì ê°ì´ nullì´ ìë 컬ë¼ë¤ ë§ì í¬í¨í ê²ì¸ì§ë¥¼ ì§ì íë¤."
+
+#: index.docbook:272
+msgid "<literal>select-before-update</literal> (optional, defaults to <literal>false</literal>): Specifies that Hibernate should <emphasis>never</emphasis> perform an SQL <literal>UPDATE</literal> unless it is certain that an object is actually modified. In certain cases (actually, only when a transient object has been associated with a new session using <literal>update()</literal>), this means that Hibernate will perform an extra SQL <literal>SELECT</literal> to determine if an <literal>UPDATE</literal> is actually required."
+msgstr "<literal>select-before-update</literal> (ìµì
- ëí´í¸ë <literal>false</literal>): ê°ì²´ê° ì¤ì ë¡ ë³ê²½ëë ê²ì´ íì¤íì§ ìë í, Hibernateê° SQL <literal>UPDATE</literal>를 <emphasis>ê²°ì½</emphasis> ì¤ííì§ ìì ê²ìì ì§ì íë¤. ì´ë¤ ê²½ì°ë¤ìì(ì¤ì ë¡ transient ê°ì²´ê° <literal>update()</literal>를 ì¬ì©íì¬ ìë¡ì´ sessionì ì°ê´ëìì ëìë§), ì´ê²ì íëì <literal>UPDATE</literal>ê° ì¤ì ë¡ íìí ê²½ì°ì¸ì§ ì¬ë¶ë¥¼ ê²°ì í기 ìí´ Hibernateë í¹ë³í SQL <literal>SELECT</literal>를 ì¤íí ê²ìì ì미íë¤."
+
+#: index.docbook:282
+msgid "<literal>polymorphism</literal> (optional, defaults to <literal>implicit</literal>): Determines whether implicit or explicit query polymorphism is used."
+msgstr "<literal>polymorphism</literal> (ìµì
- ëí´í¸ë <literal>implicit</literal>): implicit ì§ì ë¤íì±ì´ë explicit ì§ì ë¤íì± ì¤ ì´ë ê²ì´ ì¬ì©ë ê²ì¸ì§ë¥¼ ê²°ì íë¤."
+
+#: index.docbook:288
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving objects of this class"
+msgstr "<literal>where</literal> (ìµì
) ì´ í´ëì¤ì ê°ì²´ë¤ì ê²ìí ë ì¬ì©ë ììì ì¸ SQL <literal>WHERE</literal> ì¡°ê±´ì ì§ì íë¤"
+
+#: index.docbook:294
+msgid "<literal>persister</literal> (optional): Specifies a custom <literal>ClassPersister</literal>."
+msgstr "<literal>persister</literal> (ìµì
): ë§ì¶¤í <literal>ClassPersister</literal>를 ì§ì íë¤."
+
+#: index.docbook:299
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for fetching instances of this class by identifier."
+msgstr "<literal>batch-size</literal> (ìµì
- ëí´í¸ë <literal>1</literal>) ìë³ìì ìí´ ì´ í´ëì¤ì ì¸ì¤í´ì¤ë¤ì íì¹ìí¤ë \"ë°°ì¹ ì¬ì´ì¦\"를 ì§ì íë¤."
+
+#: index.docbook:305
+msgid "<literal>optimistic-lock</literal> (optional, defaults to <literal>version</literal>): Determines the optimistic locking strategy."
+msgstr "<literal>optimistic-lock</literal> (ìµì
- ëí´í¸ë <literal>version</literal>): optimistic ì ê¸ ë°©ë를 ê²°ì íë¤."
+
+#: index.docbook:311
+msgid "<literal>lazy</literal> (optional): Lazy fetching may be completely disabled by setting <literal>lazy=\"false\"</literal>."
+msgstr "<literal>lazy</literal> (ìµì
): <literal>lazy=\"false\"</literal>를 ì¤ì í¨ì¼ë¡ì¨ Lazy fetchingì´ ì ì²´ì ì¼ë¡ ì¬ì©ë¶ê°ë¥íê² ë ì ìë¤."
+
+#: index.docbook:317
+msgid "<literal>entity-name</literal> (optional, defaults to the class name): Hibernate3 allows a class to be mapped multiple times (to different tables, potentially), and allows entity mappings that are represented by Maps or XML at the Java level. In these cases, you should provide an explicit arbitrary name for the entity. See <xref linkend=\"persistent-classes-dynamicmodels\"/> and <xref linkend=\"xml\"/> for more information."
+msgstr "<literal>entity-name</literal>(ìµì
, ëí´í¸ë í´ëì¤ ì´ë¦): Hibernate3ë íëì í´ëì¤ê° (ì ì ì ì¼ë¡ ë¤ë¥¸ í
ì´ë¸ë¤ë¡) ì¬ë¬ë² 매íëë ê²ì íì©í´ì£¼ê³ , Java ë 벨ìì Map ëë XMLì ìí´ íí ëë ìí°í° 매íë¤ì íì©íë¤. ì´ë¤ ê²½ì°ë¤ìì, ë¹ì ì ê·¸ ìí°í°ì ëí ëª
ìì ì¸ ììì ì´ë¦ì ì ê³µí´ì¼ íë¤. <literal>entity-name</literal> (ìµì
): Hibernate3ë íëì í´ëì¤ê° (ì ì ì ì¼ë¡ ë¤ë¥¸ í
ì´ë¸ë¤ë¡) ì¬ë¬ ë² ë§¤íëë ê²ì íì©íë©°, ìë° ë 벨ìì Mapë¤ ëë XMLì ìí´ ííëë ìí°í° 매íë¤ì íì©íë¤. ì´ë¤ ê²½ì°ë¤ìì, ë¹ì ì ê·¸ ìí°í°ë¤ì ëí ëª
ìì ì¸ ììì ì´ë¦ì ì ê³µí´ì¼ íë¤. ì¶ê° ì ë³´ë <xref linkend=\"persistent-classes-dynamicmodels\"/>ê³¼ <xref linkend=\"xml\"/>ì ë³´ë¼."
+
+#: index.docbook:327
+msgid "<literal>check</literal> (optional): A SQL expression used to generate a multi-row <emphasis>check</emphasis> constraint for automatic schema generation."
+msgstr "<literal>check</literal> (ìµì
): ìëì ì¸ ì¤í¤ë§ ìì±ì ìí ë¤ì¤-í <emphasis>check</emphasis> constraint를 ìì±ìí¤ëë° ì¬ì©ëë SQL ííì."
+
+#: index.docbook:333
+msgid "<literal>rowid</literal> (optional): Hibernate can use so called ROWIDs on databases which support. E.g. on Oracle, Hibernate can use the <literal>rowid</literal> extra column for fast updates if you set this option to <literal>rowid</literal>. A ROWID is an implementation detail and represents the physical location of a stored tuple."
+msgstr "<literal>rowid</literal> (ìµì
): Hibernateë ì§ìëë ë°ì´í°ë² ì´ì¤ë¤, ì를 ë¤ì´ Oracle ììì ì´ë¥¸ë° ROWIDë¤ì ì¬ì©í ì ìê³ , Hibernateë ë¹ì ì´ ì´ ìµì
ì <literal>rowid</literal>ë¡ ì¤ì íë ê²½ì°ì ë¹ ë¥¸ ì
ë°ì´í¸ë¥¼ ìí í¹ë³í <literal>rowid</literal> 컬ë¼ì ì¬ì©í ì ìë¤. ROWIDë 구í ìì¸ì´ê³ ì ì¥ë íí(tuple)ì 물리ì ì´ë ìì¹ë¥¼ íííë¤."
+
+#: index.docbook:341
+msgid "<literal>subselect</literal> (optional): Maps an immutable and read-only entity to a database subselect. Useful if you want to have a view instead of a base table, but don't. See below for more information."
+msgstr "<literal>subselect</literal> (ìµì
): ë¶ë³ì ì½ê¸° ì ì© ìí°í°ë¥¼ ë°ì´í°ë² ì´ì¤ subselectë¡ ë§¤íìí¨ë¤. ë¹ì ì´ ê¸°ë³¸ í
ì´ë¸ ëì ì 뷰를 ê°ê³ ì ìí ê²½ì°ì ì ì©íì§ë§, ì¬ì©ì ìì íë¼. ì¶ê° ì ë³´ë ìë를 ë³´ë¼."
+
+#: index.docbook:348
+msgid "<literal>abstract</literal> (optional): Used to mark abstract superclasses in <literal><union-subclass></literal> hierarchies."
+msgstr "<literal>abstract</literal> (ìµì
): <literal><union-subclass></literal> ê³ì¸µ êµ¬ì¡°ë¤ ë´ìì abstract ìí¼í´ëì¤ë¤ì ë§í¬íëë° ì¬ì©ëë¤."
+
+#: index.docbook:356
+msgid "It is perfectly acceptable for the named persistent class to be an interface. You would then declare implementing classes of that interface using the <literal><subclass></literal> element. You may persist any <emphasis>static</emphasis> inner class. You should specify the class name using the standard form ie. <literal>eg.Foo$Bar</literal>."
+msgstr "ëª
ëª
ë ìì í´ëì¤ê° ì¸í°íì´ì¤ê° ëë ê²ì ìì í ìì©ê°ë¥íë¤. ê·¸ë° ë¤ì ë¹ì ì <literal><subclass></literal> ìì를 ì¬ì©íì¬ ê·¸ ì¸í°íì´ì¤ì ëí 구í í´ëì¤ë¤ì ì ì¸í ê²ì´ë¤. ë¹ì ì ììì <emphasis>static</emphasis> inner í´ëì¤ë¥¼ ììí ìí¬ ì ìë¤. ë¹ì ì íì¤ íì, ì를 ë¤ì´ <literal>eg.Foo$Bar</literal>를 ì¬ì©íì¬ í´ëì¤ ì´ë¦ì ì§ì í´ì¼ íë¤."
+
+#: index.docbook:363
+msgid "Immutable classes, <literal>mutable=\"false\"</literal>, may not be updated or deleted by the application. This allows Hibernate to make some minor performance optimizations."
+msgstr "ë¶ë³ì í´ëì¤, <literal>mutable=\"false\"</literal>ë ì´í리ì¼ì´ì
ì ìí´ ì
ë°ì´í¸ëì§ ìì ê²ì´ê±°ë ìì ëì§ ìì ê²ì´ë¤. ì´ê²ì Hibernateë¡ íì¬ê¸ ì´ë¤ ë§ì´ë í¼í¬ë¨¼ì¤ ìµì í를 ííê²ë íì©í´ì¤ë¤."
+
+#: index.docbook:368
+msgid "The optional <literal>proxy</literal> attribute enables lazy initialization of persistent instances of the class. Hibernate will initially return CGLIB proxies which implement the named interface. The actual persistent object will be loaded when a method of the proxy is invoked. See \"Initializing collections and proxies\" below."
+msgstr "ì íì ì¸ <literal>proxy</literal> ìì±ì ê·¸ í´ëì¤ì ìì ì¸ì¤í´ì¤ë¤ì ëí lazy ì´ê¸°í를 ê°ë¥íê² í´ì¤ë¤. Hibernateë ëª
ëª
ë ì¸í°íì´ì¤ë¥¼ 구ííë CGLIB íë½ìë¤ì ì´ê¸°ì ë°íí ê²ì´ë¤. ì¤ì ìì ê°ì²´ë íë½ìì ë©ìëê° í¸ì¶ë ë ë¡ëë ê²ì´ë¤. ìë \"Lazy ì´ê¸°í를 ìí íë½ìë¤\"ì ë³´ë¼."
+
+#: index.docbook:375
+msgid "<emphasis>Implicit</emphasis> polymorphism means that instances of the class will be returned by a query that names any superclass or implemented interface or the class and that instances of any subclass of the class will be returned by a query that names the class itself. <emphasis>Explicit</emphasis> polymorphism means that class instances will be returned only by queries that explicitly name that class and that queries that name the class will return only instances of subclasses mapped inside this <literal><class></literal> declaration as a <literal><subclass></literal> or <literal><joined-subclass></literal>. For most purposes the default, <literal>polymorphism=\"implicit\"</literal>, is appropriate. Explicit polymorphism is useful when two different classes are mapped to the same table (this allows a \"lightweight\" class that contains a subset of the table columns)."
+msgstr "<emphasis>Implicit</emphasis> ë¤íì±ì í´ëì¤ì ì¸ì¤í´ì¤ë¤ì´ ì´ë¤ ìë¸í´ëì¤ë 구íë ì¸í°íì´ì¤ ëë í´ëì¤ë¥¼ ëª
ëª
íë ì§ìì ìí´ ë°íë ê²ìì ì미íê³ ê·¸ í´ëì¤ì ì´ë¤ ìë¸í´ëì¤ì ëí ì¸ì¤í´ì¤ë¤ì´ ê·¸ í´ëì¤ ì체를 ëª
ëª
íë ì§ìì ìí´ ë°íë ê²ìì ì미íë¤. <emphasis>Explicit</emphasis> ë¤íì±ì í´ëì¤ ì¸ì¤í´ì¤ë¤ì´ ê·¸ í´ëì¤ë¥¼ ëª
ìì ì¼ë¡ ëª
ëª
íë ì§ìë¤ì ìí´ìë§ ë°íë ê²ìì ìë¯¸ê³ ê·¸ í´ëì¤ë¥¼ ëª
ëª
íë ì§ìë¤ì´ ì´ <literal><class></literal> ì ì¸ ë´ë¶ìì <literal><subclass></literal> ëë <literal><joined-subclass></literal>ë¡ ë§¤íë ìë¸ í´ëì¤ë¤ì ì¸ì¤í´ì¤ë¤ ë§ì ë°ííê² ë ê²ìì ì미íë¤. ëë¶ë¶ì ì©ëë¡, ëí´í¸ì¸ <literal>polymorphism=\"implicit\"</literal>ê° ì ì íë¤.ë ê°ì ë¤ë¥¸ í´ëì¤ë¤ì´ ëì¼í í
ì´ë¸ë¡!
매íë ë Explicit ë¤íì±ì´ ì ì©íë¤(ì´ê²ì í
ì´ë¸ 컬ë¼ë¤ì ìë¸ì
ì í¬í¨íë \"ê²½ëê¸\" í´ëì¤ë¥¼ íì©íë¤)."
+
+#: index.docbook:387
+msgid "The <literal>persister</literal> attribute lets you customize the persistence strategy used for the class. You may, for example, specify your own subclass of <literal>org.hibernate.persister.EntityPersister</literal> or you might even provide a completely new implementation of the interface <literal>org.hibernate.persister.ClassPersister</literal> that implements persistence via, for example, stored procedure calls, serialization to flat files or LDAP. See <literal>org.hibernate.test.CustomPersister</literal> for a simple example (of \"persistence\" to a <literal>Hashtable</literal>)."
+msgstr "<literal>persister</literal> ìì±ì í´ëì¤ì ì¬ì©ëë ììí ë°©ë를 ë¹ì ì´ ì»¤ì¤í¸ë§ì´ì§ í ì ìëë¡ í´ì¤ë¤. ì를 ë¤ì´ ë¹ì ì <literal>org.hibernate.persister.EntityPersister</literal>ì ëí ë¹ì ìì ì ìë¸í´ëì¤ë¥¼ ì§ì í ìë ìê±°ë ë¹ì ì ì¬ì§ì´ ì를 ë¤ì´ íë« íì¼ë¤ì´ë LDAPë¡ì ì§ë ¬í,ë´ì¥ íë¡ìì í¸ì¶ë¤ì íµí´ ììí를 구ííë ì¸í°íì´ì¤ <literal>org.hibernate.persister.ClassPersister</literal>ì ëí ìì í ìë¡ì´ 구íì ì ê³µí ìë ìë¤. (<literal>Hashtable</literal>ë¡ì \"ììì±\"ì ê´í) ê°ë¨í ìì ë <literal>org.hibernate.test.CustomPersister</literal>를 ë³´ë¼."
+
+#: index.docbook:398
+msgid "Note that the <literal>dynamic-update</literal> and <literal>dynamic-insert</literal> settings are not inherited by subclasses and so may also be specified on the <literal><subclass></literal> or <literal><joined-subclass></literal> elements. These settings may increase performance in some cases, but might actually decrease performance in others. Use judiciously."
+msgstr "<literal>dynamic-update</literal> ì¤ì ê³¼ <literal>dynamic-insert</literal> ì¤ì ì ìë¸í´ëì¤ë¤ì ìí´ ììëì§ ìê³ ë°ë¼ì ëí <literal><subclass></literal> ëë <literal><joined-subclass></literal> ììë¤ ìì ì§ì ë ìë ììì ë
¸í¸íë¼. ì´ë¤ ì¤ì ë¤ì ëªëª ê²½ì°ë¤ìì í¼í¬ë¨¼ì¤ë¥¼ ì¦ê°ìí¤ì§ë§ ë¤ë¥¸ ê²½ì°ë¤ììë í¼í¬ë¨¼ì¤ë¥¼ ì¤ì ë¡ ê°ììí¬ ìë ìë¤. ì ì íê² ì¬ì©íë¼."
+
+#: index.docbook:406
+msgid "Use of <literal>select-before-update</literal> will usually decrease performance. It is very useful to prevent a database update trigger being called unnecessarily if you reattach a graph of detached instances to a <literal>Session</literal>."
+msgstr "<literal>select-before-update</literal> ì¬ì©ì ëê° í¼í¬ë¨¼ì¤ë¥¼ ê°ììí¬ ê²ì´ë¤. ë¹ì ì´ detached ì¸ì¤í´ì¤ë¤ì ê·¸ëí를 <literal>Session</literal>ì ë¤ì 첨ë¶í ê²½ì°ì ê·¸ê²ì ë°ì´í°ë² ì´ì¤ ì
ë°ì´í¸ í¸ë¦¬ê±°ê° ë¶íìíê² í¸ì¶ëë ê²ì ë°©ì§íëë° ë§¤ì° ì ì©íë¤."
+
+#: index.docbook:412
+msgid "If you enable <literal>dynamic-update</literal>, you will have a choice of optimistic locking strategies:"
+msgstr "<literal>dynamic-update</literal>를 ì¬ì©ê°ë¥íê² í ê²½ì°, ë¹ì ì ë¤ì optimistic ì ê¸ ì ëµë¤ì ì ííê² ë ê²ì´ë¤:"
+
+#: index.docbook:418
+msgid "<literal>version</literal> check the version/timestamp columns"
+msgstr "<literal>version</literal>ì version/timestamp 컬ë¼ë¤ì ì²´í¬íë¤"
+
+#: index.docbook:423
+msgid "<literal>all</literal> check all columns"
+msgstr "<literal>all</literal>ì 모ë 컬ë¼ë¤ì ì²´í¬íë¤"
+
+#: index.docbook:428
+msgid "<literal>dirty</literal> check the changed columns, allowing some concurrent updates"
+msgstr "<literal>dirty</literal>ë ëªëª ëìì± ì
ë°ì´í¸ë¤ì íì©íì¬, ë³ê²½ë 컬ë¼ë¤ì ì²´í¬íë¤"
+
+#: index.docbook:433
+msgid "<literal>none</literal> do not use optimistic locking"
+msgstr "<literal>none</literal>ì optimistic ì ê¸ì ì¬ì©íì§ ìëë¤"
+
+#: index.docbook:438
+msgid "We <emphasis>very</emphasis> strongly recommend that you use version/timestamp columns for optimistic locking with Hibernate. This is the optimal strategy with respect to performance and is the only strategy that correctly handles modifications made to detached instances (ie. when <literal>Session.merge()</literal> is used)."
+msgstr "ì°ë¦¬ë ë¹ì ì´ Hibernateìì optimistic ì ê¸ì ìí´ version/timestamp 컬ë¼ë¤ì ì¬ì©í ê²ì <emphasis>매ì°</emphasis> ê°ë ¥íê² ê¶ì¥íë¤. ì´ê²ì í¼í¬ë¨¼ì¤ì ëí´ ìµì ì ë°©ëì´ê³ detached ì¸ì¤í´ì¤ë¤ì ëí´ íí´ì§ ë³ê²½ë¤ì ì ííê² í¸ë¤ë§íë ì ì¼í ë°©ëì´ë¤(ì를 ë¤ì´ <literal>Session.merge()</literal>ê° ì¬ì©ë ë)."
+
+#: index.docbook:445
+msgid "There is no difference between a view and a base table for a Hibernate mapping, as expected this is transparent at the database level (note that some DBMS don't support views properly, especially with updates). Sometimes you want to use a view, but can't create one in the database (ie. with a legacy schema). In this case, you can map an immutable and read-only entity to a given SQL subselect expression:"
+msgstr "Hibernate 매íì ê²½ì°ì ë² ì´ì¤ í
ì´ë¸ê³¼ ë·° ì¬ì´ì ì°¨ì´ì ì´ ì¡´ì¬íì§ ìëë¤. ìëíë©´ ì´ê²ì´ ë°ì´í°ë² ì´ì¤ ë 벨ììë í¬ëª
íë¤ê³ 기ëë기 ë문ì´ë¤(ëªëª DBMSë 뷰를 ê³ ì íê² ì§ìíì§ ìê³ í¹í ë·° ì
ë°ì´í¸ë¥¼ ì§ìíì§ ììì ë
¸í¸íë¼). ëëë¡ ë¹ì ì´ ë·°ë¥¼ ì¬ì©íê³ ì ìíì§ë§, (ì를 ë¤ì´ 리거ì ì¤í¤ë§ë¡) ë°ì´í°ë² ì´ì¤ ìì 뷰를 ìì±ìí¬ ì ìë¤. ì´ ê²½ì°ì, ë¹ì ì ë¶ë³ì ì½ê¸° ì ì© ìí°í°ë¥¼ 주ì´ì§ SQL subselect ííìì¼ë¡ 매íìí¬ ì ìë¤:"
+
+#: index.docbook:453
+msgid ""
+ "<![CDATA[<class name=\"Summary\">\n"
+ " <subselect>\n"
+ " select item.name, max(bid.amount), count(*)\n"
+ " from item\n"
+ " join bid on bid.item_id = item.id\n"
+ " group by item.name\n"
+ " </subselect>\n"
+ " <synchronize table=\"item\"/>\n"
+ " <synchronize table=\"bid\"/>\n"
+ " <id name=\"name\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Summary\">\n"
+ " <subselect>\n"
+ " select item.name, max(bid.amount), count(*)\n"
+ " from item\n"
+ " join bid on bid.item_id = item.id\n"
+ " group by item.name\n"
+ " </subselect>\n"
+ " <synchronize table=\"item\"/>\n"
+ " <synchronize table=\"bid\"/>\n"
+ " <id name=\"name\"/>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:455
+msgid "Declare the tables to synchronize this entity with, ensuring that auto-flush happens correctly, and that queries against the derived entity do not return stale data. The <literal><subselect></literal> is available as both as an attribute and a nested mapping element."
+msgstr "auto-flushê° ì ííê² ë°ìíëë¡ íê³ , ê·¸ë¦¬ê³ íìë ìí°í°ì ëí ì§ìë¤ì´ ì¸í¨ì± ìë ë°ì´í°ë¥¼ ë°ííì§ ìëë¡ í¨ì¼ë¡ì¨, ì´ ìí°í°ì ë기í ë í
ì´ë¸ì ì ì¸íë¼. <literal><subselect></literal>ë ìì±ê³¼ ë´í¬ë 매í ìì ììë¡ì ì´ì© ê°ë¥íë¤."
+
+#: index.docbook:465
+msgid "<title>id</title>"
+msgstr "<title>id</title>"
+
+#: index.docbook:467
+msgid "Mapped classes <emphasis>must</emphasis> declare the primary key column of the database table. Most classes will also have a JavaBeans-style property holding the unique identifier of an instance. The <literal><id></literal> element defines the mapping from that property to the primary key column."
+msgstr "매íë í´ëì¤ë¤ì ë°ì´í°ë² ì´ì¤ í
ì´ë¸ì íë¼ì´ë¨¸ë¦¬ í¤ ì»¬ë¼ì ì ì¸<emphasis>í´ì¼ íë¤</emphasis>. ëë¶ë¶ì í´ëì¤ë¤ì ëí ì¸ì¤í´ì¤ì ì ì¼ ìë³ì를 ìì íë ìë°ë¹ì¦-ì¤íì¼ íë¡í¼í°ë¥¼ ê°ì§ ê²ì´ë¤. <literal><id></literal> ììë ê·¸ íë¡í¼í°ë¡ë¶í° íë¼ì´ë¨¸ë¦¬ í¤ ì»¬ë¼ì¼ë¡ì 매íì ì ìíë¤."
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[<id\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " column=\"column_name\"\n"
+ " unsaved-value=\"null|any|none|undefined|id_value\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "\n"
+ " <generator class=\"generatorClass\"/>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " column=\"column_name\"\n"
+ " unsaved-value=\"null|any|none|undefined|id_value\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "\n"
+ " <generator class=\"generatorClass\"/>\n"
+ "</id>]]>"
+
+#: index.docbook:485
+msgid "<literal>name</literal> (optional): The name of the identifier property."
+msgstr "<literal>name</literal> (ìµì
): ìë³ì íë¡í¼í°ì ì´ë¦."
+
+#: index.docbook:490
+msgid "<literal>type</literal> (optional): A name that indicates the Hibernate type."
+msgstr "<literal>type</literal> (ìµì
): Hibernate íì
ì ëíë´ë ì´ë¦."
+
+#: index.docbook:495
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the primary key column."
+msgstr "<literal>column</literal> (ìµì
- ëí´í¸ë íë¡í¼í° ì´ë¦): íë¼ì´ë¨¸ë¦¬ í¤ ì»¬ë¼ì ì´ë¦."
+
+#: index.docbook:501
+msgid "<literal>unsaved-value</literal> (optional - defaults to a \"sensible\" value): An identifier property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session."
+msgstr "<literal>unsaved-value</literal> (ìµì
- ëí´í¸ë \"sensible\" ê°): ì´ì ì¸ì
ìì ì ì¥ëìê±°ë ë¡ëëìë detached(ë¶ë¦¬ë) ì¸ì¤í´ì¤ë¤ë¡ë¶í° ê·¸ê²ì 구ë¶ì§ì°ëë¡, ì¸ì¤í´ì¤ê° ìë¡ì´ ì´ê¸°íëì´ ìì(ì ì¥ëì´ ìì§ ìì)ì ëíë´ë ìë³ì íë¡í¼í° ê°."
+
+#: index.docbook:509, index.docbook:1017, index.docbook:1156, index.docbook:1238, index.docbook:1345, index.docbook:1534, index.docbook:1708, index.docbook:1878, index.docbook:2457
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the property value."
+msgstr "<literal>access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° íë¡í¼í° ê°ì ì¡ì¸ì¤íëë° ì¬ì©í ë°©ë."
+
+#: index.docbook:517
+msgid "If the <literal>name</literal> attribute is missing, it is assumed that the class has no identifier property."
+msgstr "<literal>name</literal> ìì±ì´ ëë½ëë©´, í´ëì¤ë ìë³ì íë¡í¼í°ë¥¼ ê°ì§ ìëë¤ê³ ê°ì ëë¤."
+
+#: index.docbook:522
+msgid "The <literal>unsaved-value</literal> attribute is almost never needed in Hibernate3."
+msgstr "<literal>unsaved-value</literal> ìì±ì Hibernate3ììë ê±°ì íìíì§ ìë¤."
+
+#: index.docbook:526
+msgid "There is an alternative <literal><composite-id></literal> declaration to allow access to legacy data with composite keys. We strongly discourage its use for anything else."
+msgstr "composite í¤ë¤ë¡ì 리거ì ë°ì´í°ì ì¡ì¸ì¤íë ê²ì íì©í´ì£¼ë ëì²´ì ì¸ <literal><composite-id></literal> ì ì¸ì´ ì¡´ì¬íë¤. ì°ë¦¬ë ê·¸ ë°ì ì´ë¤ê²ì ëí ê·¸ê²ì ì¬ì©ì ëí´ ê°ë ¥íê² ë°ëíë¤."
+
+#: index.docbook:532
+msgid "Generator"
+msgstr "Generator"
+
+#: index.docbook:534
+msgid "The optional <literal><generator></literal> child element names a Java class used to generate unique identifiers for instances of the persistent class. If any parameters are required to configure or initialize the generator instance, they are passed using the <literal><param></literal> element."
+msgstr "ì íì ì¸ <literal><generator></literal> ìì ììë ìì í´ëì¤ì ì¸ì¤í´ì¤ë¤ì ëí ì ì¼ ìë³ìë¤ì ìì±ìí¤ëë° ì¬ì©ëë ìë° í´ëì¤ë¥¼ ëª
ëª
íë¤. ë§ì¼ ììì íë¼ë¯¸í°ë¤ì´ ìì±ê¸° ì¸ì¤í´ì¤ë¥¼ 구ì±íê±°ë ì´ê¸°í ìí¤ëë° íìí ê²½ì°, ê·¸ê²ë¤ì <literal><param></literal> ìì 를 ì¬ì©íì¬ ì ë¬ëë¤."
+
+#: index.docbook:541
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"org.hibernate.id.TableHiLoGenerator\">\n"
+ " <param name=\"table\">uid_table</param>\n"
+ " <param name=\"column\">next_hi_value_column</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"org.hibernate.id.TableHiLoGenerator\">\n"
+ " <param name=\"table\">uid_table</param>\n"
+ " <param name=\"column\">next_hi_value_column</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:543
+msgid "All generators implement the interface <literal>org.hibernate.id.IdentifierGenerator</literal>. This is a very simple interface; some applications may choose to provide their own specialized implementations. However, Hibernate provides a range of built-in implementations. There are shortcut names for the built-in generators:"
+msgstr "모ë ìì±ê¸°ë¤ì <literal>org.hibernate.id.IdentifierGenerator</literal> ì¸í°íì´ì¤ë¥¼ 구ííë¤. ì´ê²ì ë§¤ì° ê°ë¨í ì¸í°íì´ì¤ì´ë¤; ëªëª ì´í리ì¼ì´ì
ë¤ì ê·¸ê²ë¤ ìì ì í¹íë 구íë¤ì ì ê³µíëë¡ ì íí ì ìë¤. íì§ë§ Hibernateë 미리 ë¹ëë 구íë¤ì ììë¤ì ì ê³µíë¤. ë¹ë-ì¸ ìì±ê¸°(generator)ë¤ì ëí ë¨ì¶ ì´ë¦ë¤ì´ ì¡´ì¬íë¤:"
+
+#: index.docbook:551
+msgid "increment"
+msgstr "increment"
+
+#: index.docbook:553
+msgid "generates identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal> that are unique only when no other process is inserting data into the same table. <emphasis>Do not use in a cluster.</emphasis>"
+msgstr "ëì¼í í
ì´ë¸ ìì¼ë¡ ë°ì´í°ë¥¼ ì
ë ¥íë ë¤ë¥¸ íë¡ì¸ì¤ê° ìì ëìë§ ì ì¼í <literal>long</literal>, <literal>short</literal> ëë <literal>int</literal> íì
ì ìë³ìë¤ì ìì±ìí¨ë¤. <emphasis>í´ë¬ì¤í° ë´ììë ì¬ì©íì§ ë§ë¼.</emphasis>"
+
+#: index.docbook:562
+msgid "identity"
+msgstr "identity"
+
+#: index.docbook:564
+msgid "supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>."
+msgstr "DB2, MySQL, MS SQL Server, Sybase, HypersonicSQLìì ìë³ ì»¬ë¼ë¤ì ì§ìíë¤. ë°íëë ìë³ìë <literal>long</literal>, <literal>short</literal> ëë <literal>int</literal> íì
ì´ë¤."
+
+#: index.docbook:572
+msgid "sequence"
+msgstr "sequence"
+
+#: index.docbook:574
+msgid "uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>"
+msgstr "DB2, PostgreSQL, Oracle, SAP DB, McKoiìì ìíì¤ë¥¼ ì¬ì©íê±°ë Interbaseìì ìì±ê¸°(generator)를 ì¬ì©íë¤. ë°íëë ìë³ìë <literal>long</literal>, <literal>short</literal> ëë <literal>int</literal> íì
ì´ë¤."
+
+#: index.docbook:582
+msgid "hilo"
+msgstr "hilo"
+
+#: index.docbook:584
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a table and column (by default <literal>hibernate_unique_key</literal> and <literal>next_hi</literal> respectively) as a source of hi values. The hi/lo algorithm generates identifiers that are unique only for a particular database."
+msgstr "í
ì´ë¸ê³¼ 컬ë¼(ëí´í¸ë¡ ê°ê° <literal>hibernate_unique_key</literal>ì <literal>next_hi</literal>)ì´ hi ê°ë¤ì ìì¤ë¡ì 주ì´ì§ë©´, <literal>long</literal>, <literal>short</literal> ëë <literal>int</literal> íì
ì ìë³ìë¤ì í¨ê³¼ì ì¼ë¡ ìì±ìí¤ëë° hi/lo ìê³ ë¦¬ì¦ì ì¬ì©íë¤. hi/lo ìê³ ë¦¬ì¦ì í¹ì ë°ì´í°ë² ì´ì¤ì ëí´ìë§ ì ì¼í ìë³ìë¤ì ìì±ìí¨ë¤."
+
+#: index.docbook:594
+msgid "seqhilo"
+msgstr "seqhilo"
+
+#: index.docbook:596
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a named database sequence."
+msgstr "ëª
ëª
ë ë°ì´í°ë² ì´ì¤ ìíì¤ê° 주ì´ì§ë©´, <literal>long</literal>, <literal>short</literal> ëë <literal>int</literal> íì
ì ìë³ìë¤ì í¨ê³¼ì ì¼ë¡ ìì±ìí¤ëë° hi/lo ìê³ ë¦¬ì¦ì ì¬ì©íë¤."
+
+#: index.docbook:604
+msgid "uuid"
+msgstr "uuid"
+
+#: index.docbook:606
+msgid "uses a 128-bit UUID algorithm to generate identifiers of type string, unique within a network (the IP address is used). The UUID is encoded as a string of hexadecimal digits of length 32."
+msgstr "ë¤í¸ì ë´ìì ì ì¼í(IP 주ìê° ì¬ì©ëë¤) string íì
ì ìë³ìë¤ì ìì±ìí¤ê¸° ìí´ 128 ë¹í¸ UUID ìê³ ë¦¬ì¦ì ì¬ì©íë¤. UUIDë 길ì´ê° 32ì¸ 16ì§ìë¤ì 문ìì´ë¡ì ì¸ì½ë© ëë¤."
+
+#: index.docbook:614
+msgid "guid"
+msgstr "guid"
+
+#: index.docbook:616
+msgid "uses a database-generated GUID string on MS SQL Server and MySQL."
+msgstr "MS SQL Serverì MySQL ììì ë°ì´í°ë² ì´ì¤ ìì± GUID 문ìì´ì ì¬ì©íë¤."
+
+#: index.docbook:622
+msgid "native"
+msgstr "native"
+
+#: index.docbook:624
+msgid "picks <literal>identity</literal>, <literal>sequence</literal> or <literal>hilo</literal> depending upon the capabilities of the underlying database."
+msgstr "기본 ë°ì´í°ë² ì´ì¤ì ê°ì©ì±ë¤ì ìì¡´íì¬ <literal>identity</literal>, <literal>sequence</literal> ëë <literal>hilo</literal>를 ì°¾ìë¸ë¤."
+
+#: index.docbook:632
+msgid "assigned"
+msgstr "assigned"
+
+#: index.docbook:634
+msgid "lets the application to assign an identifier to the object before <literal>save()</literal> is called. This is the default strategy if no <literal><generator></literal> element is specified."
+msgstr "ì´í리ì¼ì´ì
ì¼ë¡ íì¬ê¸ <literal>save()</literal>ê° í¸ì¶ë기 ì ì ìë³ì를 ê°ì²´ì í ë¹íëë¡ íë¤. <literal><generator></literal> ììê° ì§ì ëì§ ìì ê²½ì° ì´ê²ì´ ëí´í¸ ë°©ëì´ë¤."
+
+#: index.docbook:642
+msgid "select"
+msgstr "select"
+
+#: index.docbook:644
+msgid "retrieves a primary key assigned by a database trigger by selecting the row by some unique key and retrieving the primary key value."
+msgstr "ì´ë¤ ì ì¼ í¤ì ìí´ íì selectíê³ íë¼ì´ë¨¸ë¦¬ í¤ ê°ì ê²ìí¨ì¼ë¡ì¨ ë°ì´í°ë² ì´ì¤ í¸ë¦¬ê±°ì ìí´ í ë¹ë íë¼ì´ë¨¸ë¦¬ í¤ë¥¼ ê²ìíë¤."
+
+#: index.docbook:651
+msgid "foreign"
+msgstr "foreign"
+
+#: index.docbook:653
+msgid "uses the identifier of another associated object. Usually used in conjunction with a <literal><one-to-one></literal> primary key association."
+msgstr "ë ë¤ë¥¸ ì°ê´ë ê°ì²´ì ìë³ì를 ì¬ì©íë¤. ëê° <literal><one-to-one></literal> íë¼ì´ë¨¸ë¦¬ í¤ ì°ê´ê´ê³ì í¨ê» ì¬ì©ëë¤."
+
+#: index.docbook:660
+msgid "sequence-identity"
+msgstr "sequence-identity"
+
+#: index.docbook:662
+msgid "a specialized sequence generation strategy which utilizes a database sequence for the actual value generation, but combines this with JDBC3 getGeneratedKeys to actually return the generated identifier value as part of the insert statement execution. This strategy is only known to be supported on Oracle 10g drivers targetted for JDK 1.4. Note comments on these insert statements are disabled due to a bug in the Oracle drivers."
+msgstr "ì¤ì ê° ìì±ì ìí´ ë°ì´í°ë² ì´ì¤ ìíì¤ë¥¼ íì©íì§ë§, ìì±ë ìë³ì ê°ì insert ë¬¸ì¥ ì¤íì ë¶ë¶ì¼ë¡ì ì¤ì ë¡ ë°íìí¤ê¸° ìí´ ì´ê²ì JDBC3 getGeneratedKeysì ê²°í©ìí¨ í¹íë ìíì¤ ìì± ë°©ë. ì´ ë°©ëë JDK 1.4ì ëìíë Oracle 10g ëë¼ì´ë²ë¤ ìììë§ ì§ìëë ê±°ì¹ë¡ ìë ¤ì ¸ ìë¤. ì´ë¤ insert 문ì¥ë¤ì ëí 주ìë¤ì Oracle ëë¼ì´ë²ë¤ ë´ì ìë ë²ê·¸ ë문ì ì¬ì©ë¶ê°ë¥íê² ëì´ ììì ë
¸í¸íë¼."
+
+#: index.docbook:679
+msgid "Hi/lo algorithm"
+msgstr "Hi/lo algorithm"
+
+#: index.docbook:680
+msgid "The <literal>hilo</literal> and <literal>seqhilo</literal> generators provide two alternate implementations of the hi/lo algorithm, a favorite approach to identifier generation. The first implementation requires a \"special\" database table to hold the next available \"hi\" value. The second uses an Oracle-style sequence (where supported)."
+msgstr "<literal>hilo</literal>ì <literal>seqhilo</literal> ìì±ê¸°ë¤ì ìë³ì ìì±ì ëí ë§ìì ëë ì ê·¼ë²ì¸, hi/lo ìê³ ë¦¬ì¦ì ëí ë ê°ì ëì²´ 구íë¤ì ì ê³µíë¤. 첫 ë²ì§¸ 구íì ë¤ìì ì´ì© ê°ë¥í \"hi\" ê°ì ìì©í기 ìí \"í¹ë³í\" ë°ì´í°ë² ì´ì¤ í
ì´ë¸ì íìë¡ íë¤. ë ë²ì§¸ë (ì§ìëë) Oracle ì¤íì¼ì ìíì¤ë¥¼ ì¬ì©íë¤."
+
+#: index.docbook:687
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"hilo\">\n"
+ " <param name=\"table\">hi_value</param>\n"
+ " <param name=\"column\">next_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"hilo\">\n"
+ " <param name=\"table\">hi_value</param>\n"
+ " <param name=\"column\">next_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"seqhilo\">\n"
+ " <param name=\"sequence\">hi_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"seqhilo\">\n"
+ " <param name=\"sequence\">hi_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:691
+msgid "Unfortunately, you can't use <literal>hilo</literal> when supplying your own <literal>Connection</literal> to Hibernate. When Hibernate is using an application server datasource to obtain connections enlisted with JTA, you must properly configure the <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr "ë¶ííë ë¹ì ì Hibernateì ë¹ì ìì ì <literal>Connection</literal>ì ì ê³µí ë <literal>hilo</literal>를 ì¬ì©í ì ìë¤. Hibernateê° JTAì ëìì ë°ë 커ë¥ì
ë¤ì ì»ê¸° ìí´ ì´í리ì¼ì´ì
ìë² ë°ì´í°ìì¤ë¥¼ ì¬ì©í ë ë¹ì ì <literal>hibernate.transaction.manager_lookup_class</literal>를 ì ì íê² êµ¬ì±í´ì¼ íë¤."
+
+#: index.docbook:700
+msgid "UUID algorithm"
+msgstr "UUID ìê³ ë¦¬ì¦"
+
+#: index.docbook:701
+msgid "The UUID contains: IP address, startup time of the JVM (accurate to a quarter second), system time and a counter value (unique within the JVM). It's not possible to obtain a MAC address or memory address from Java code, so this is the best we can do without using JNI."
+msgstr "UUID ë ë¤ìì í¬í¨íë¤: IP 주ì, JVMì ìì ìê°(ì íí 1/4 ì´), ìì¤í
ìê°ê³¼ (JVM ë´ìì ì ì¼í) counter ê°. Java ì½ëë¡ë¶í° MAC 주ì ëë ë©ëª¨ë¦¬ 주ì를 ì»ë ê²ì ë¶ê°ë¥íì¬ì, ì´ê²ì ì°ë¦¬ê° JNI를 ì¬ì©íì§ ìê³ ì íí ì ìë ìµìì ê²ì´ë¤."
+
+#: index.docbook:710
+msgid "Identity columns and sequences"
+msgstr "ìë³ ì»¬ë¼ë¤ê³¼ ìíì¤ë¤"
+
+#: index.docbook:711
+msgid "For databases which support identity columns (DB2, MySQL, Sybase, MS SQL), you may use <literal>identity</literal> key generation. For databases that support sequences (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) you may use <literal>sequence</literal> style key generation. Both these strategies require two SQL queries to insert a new object."
+msgstr "ìë³ ì»¬ë¼ë¤ì ì§ìíë ë°ì´í°ë² ì´ì¤ë¤(DB2, MySQL, Sybase, MS SQL)ì ê²½ì°, ë¹ì ì <literal>identity</literal> í¤ ìì±ì ì¬ì©í ì ìë¤. ìíì¤ë¤ì ì§ìíë ë°ì´í°ë² ì´ì¤ë¤(DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB)ì ê²½ì°, ë¹ì ì <literal>sequence</literal> ì¤íì¼ í¤ ìì±ì ì¬ì©í ìë ìë¤. ì´ë¤ ë°©ëë¤ ëª¨ë ìë¡ì´ ê°ì²´ë¥¼ insertí기 ìí´ ë ê°ì SQL ì§ìë¤ì íìë¡ íë¤."
+
+#: index.docbook:719
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">person_id_sequence</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">person_id_sequence</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:721
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0\">\n"
+ " <generator class=\"identity\"/>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0\">\n"
+ " <generator class=\"identity\"/>\n"
+ "</id>]]>"
+
+#: index.docbook:723
+msgid "For cross-platform development, the <literal>native</literal> strategy will choose from the <literal>identity</literal>, <literal>sequence</literal> and <literal>hilo</literal> strategies, dependant upon the capabilities of the underlying database."
+msgstr "í¬ë¡ì¤ íë«í¼ ê°ë°ì ìí´ì, <literal>native</literal> ë°©ëê° ê¸°ì¤ ë°ì´í°ë² ì´ì¤ë¤ì ê°ì©ì±ë¤ì ë°ë¼ <literal>identity</literal>, <literal>sequence</literal>, <literal>hilo</literal> ë°©ë ì¤ìì ì íë ê²ì´ë¤."
+
+#: index.docbook:732
+msgid "Assigned identifiers"
+msgstr "í ë¹ë ìë³ìë¤"
+
+#: index.docbook:733
+msgid "If you want the application to assign identifiers (as opposed to having Hibernate generate them), you may use the <literal>assigned</literal> generator. This special generator will use the identifier value already assigned to the object's identifier property. This generator is used when the primary key is a natural key instead of a surrogate key. This is the default behavior if you do no specify a <literal><generator></literal> element."
+msgstr "(Hibernateë¡ íì¬ê¸ ìë³ìë¤ì ìì±ìí¤ëë¡ íë ê²ê³¼ë ë°ëë¡) ë¹ì ì´ ì´í리ì¼ì´ì
ì¼ë¡ íì¬ê¸ ìë³ìë¤ì í ë¹íëë¡ ìí ê²½ì°, ë¹ì ì <literal>assigned</literal> ìì±ê¸°ë¥¼ ì¬ì©í ì ìë¤. ì´ í¹ë³í ìì±ê¸°ë ê°ì²´ì identifier íë¡í¼í°ì ì´ë¯¸ í ë¹ë ìë³ì ê°ì ì¬ì©í ê²ì´ë¤. ì´ ìì±ê¸°(generator)ë íë¼ì´ë¨¸ë¦¬ í¤ê° ëì©(surrogate ) í¤ ëì ì natural í¤ì¼ ë ì¬ì©ëë¤. ë¹ì ì´ <literal><generator></literal> ìì를 ì§ì íì§ ìì ê²½ì°ì ì´ê²ì´ ëí´í¸ í¹ì§ì´ë¤"
+
+#: index.docbook:742
+msgid "Choosing the <literal>assigned</literal> generator makes Hibernate use <literal>unsaved-value=\"undefined\"</literal>, forcing Hibernate to go to the database to determine if an instance is transient or detached, unless there is a version or timestamp property, or you define <literal>Interceptor.isUnsaved()</literal>."
+msgstr "<literal>assigned</literal> ìì±ê¸°(generator)를 ì ííë ê²ì , version ëë timestamp íë¡í¼í°ê° ì¡´ì¬íì§ ìë í ëë ë¹ì ì´ <literal>Interceptor.isUnsaved()</literal>를 ì ìíì§ ìë í, íëì ì¸ì¤í´ì¤ê° transient ëë detachedì¸ì§ë¥¼ ê²°ì í기 ìí´ Hibernaeë¡ íì¬ê¸ ë°ì´í°ë² ì´ì¤ì ì ì´íëë¡ ê°ì íë, <literal>unsaved-value=\"undefined\"</literal>를 Hibernateìê² ì¬ì©íëë¡ íë¤."
+
+#: index.docbook:752
+msgid "Primary keys assigned by triggers"
+msgstr "í¸ë¦¬ê±°ë¤ì ìí´ í ë¹ë íë¼ì´ë¨¸ë¦¬ í¤ë¤"
+
+#: index.docbook:753
+msgid "For legacy schemas only (Hibernate does not generate DDL with triggers)."
+msgstr "리거ì ì¤í¤ë§ì ëí´ìë§(Hibernateë í¸ë¦¬ê±°ë¤ì ê°ì§ DDLì ìì±ìí¤ì§ ìëë¤)."
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"select\">\n"
+ " <param name=\"key\">socialSecurityNumber</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"select\">\n"
+ " <param name=\"key\">socialSecurityNumber</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+
+#: index.docbook:759
+msgid "In the above example, there is a unique valued property named <literal>socialSecurityNumber</literal> defined by the class, as a natural key, and a surrogate key named <literal>person_id</literal> whose value is generated by a trigger."
+msgstr "ìì ìì ìì, natural í¤ë¡ì í´ëì¤ì ìí´ <literal>socialSecurityNumber</literal>ë¡ ëª
ëª
ë ì ì¼ ê°ì ê°ì§ íë¡í¼í°ê° ì¡´ì¬íê³ , í¸ë¦¬ê±°ì ìí´ ê·¸ ê°ì´ ìì±ëë <literal>person_id</literal>ë¡ ëª
ëª
ë ëì©í¤ê° ì¡´ì¬íë¤."
+
+#: index.docbook:771
+msgid "Enhanced identifier generators"
+msgstr "composite-id"
+
+#: index.docbook:773
+msgid "Starting with release 3.2.3, there are 2 new generators which represent a re-thinking of 2 different aspects of identifier generation. The first aspect is database portability; the second is optimization (not having to query the database for every request for a new identifier value). These two new generators are intended to take the place of some of the named generators described above (starting in 3.3.x); however, they are included in the current releases and can be referenced by FQN."
+msgstr ""
+ "<![CDATA[<composite-id\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " mapped=\"true|false\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|.\"\n"
+ "\n"
+ " <key-property name=\"propertyName\" type=\"typename\" column=\"column_name\"/>\n"
+ " <key-many-to-one name=\"propertyName class=\"ClassName\" column=\"column_name\"/>\n"
+ " ......\n"
+ "</composite-id>]]>"
+
+#: index.docbook:781
+msgid "The first of these new generators is <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> which is intended firstly as a replacement for the <literal>sequence</literal> generator and secondly as a better portability generator than <literal>native</literal> (because <literal>native</literal> (generally) chooses between <literal>identity</literal> and <literal>sequence</literal> which have largely different semantics which can cause subtle isssues in applications eyeing portability). <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> however achieves portability in a different manner. It chooses between using a table or a sequence in the database to store its incrementing values depending on the capabilities of the dialect being used. The difference between this and <literal>native</literal> is that table-based and sequence-based storage have the same exact semantic (in fact sequences are exactly what Hibernate tries to emmulate with its!
table-based generators). This generator has a number of configuration parameters:"
+msgstr "composite í¤ë¥¼ ê°ì§ í
ì´ë¸ì ê²½ì°, ë¹ì ì í´ëì¤ì ì¬ë¬ íë¡í¼í°ë¤ì ìë³ì íë¡í¼í°ë¤ë¡ì 매íí ì ìë¤. <literal><composite-id></literal> ììë ìì ììë¤ë¡ì <literal><key-property></literal> íë¡í¼í° 매íê³¼ <literal><key-many-to-one></literal> 매íë¤ì íì©íë¤."
+
+#: index.docbook:795
+msgid "<literal>sequence_name</literal> (optional, defaults to <literal>hibernate_sequence</literal>): The name of the sequence (or table) to be used."
+msgstr ""
+ "<![CDATA[<composite-id>\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+
+#: index.docbook:801
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the sequence/table. In sequence creation terms, this is analogous to the clause typical named \"STARTS WITH\"."
+msgstr "ë¹ì ì ìì í´ëì¤ë composite ìë³ì ëë±ì±ì 구íí기 ìí´ì <literal>equals()</literal>ì <literal>hashCode()</literal>를 ì¤ë²ë¼ì´ë <emphasis>ìì¼ì¼ íë¤</emphasis>. ê·¸ê²ì ëí <literal>Serializable</literal>ì 구íí´ì¼ íë¤."
+
+#: index.docbook:808
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the sequence/table should differ. In sequence creation terms, this is analogous to the clause typical named \"INCREMENT BY\"."
+msgstr "ë¶ííë, composite ìë³ìë¤ì ëí ì´ ì ê·¼ë²ì ìì ê°ì²´ê° ê·¸ê² ìì ì ìë³ìë¼ë ì ì ì미íë¤. ê°ì²´ ìì ì¸ì ë¤ë¥¸ \"í¸ë¤\"ì´ ì¡´ì¬íì§ ìëë¤. ë¹ì ì ë¹ì ì´ composite keyë¡ ì°ê´ë ìì ìí를 <literal>load()</literal> í ì ì기 ì´ì ì ìì í´ëì¤ ê·¸ ìì²´ì ì¸ì¤í´ì¤ë¥¼ ì´ê¸°í íê³ ê·¸ê²ì ìë³ì íë¡í¼í°ë¤ì êµ°ì§í ìì¼ì¼ íë¤. ì°ë¦¬ë ì´ ì ê·¼ë²ì <emphasis>embedded</emphasis> composite ìë³ìë¡ ë¶ë¥´ê³ , ì¤ëí ì´í리ì¼ì´ì
ë¤ì ëí´ ê·¸ê²ì ìµì ìí¨ë¤."
+
+#: index.docbook:815
+msgid "<literal>force_table_use</literal> (optional, defaults to <literal>false</literal>): Should we force the use of a table as the backing structure even though the dialect might support sequence?"
+msgstr "ë ë²ì§¸ ì ê·¼ë²ì ì°ë¦¬ê° <emphasis>mapped</emphasis> composite ìë³ìë¼ê³ ë¶ë¥´ë ê²ì¸ë°, ì¬ê¸°ì <literal><composite-id></literal> ìì ë´ì ëª
ëª
ë ì¬ê¸°ì ìë³ì íë¡í¼í°ë¤ì ìì í´ëì¤ì ë³ëì ìë³ì í´ëì¤ ìì ìì ì¤ë³µëë¤."
+
+#: index.docbook:822
+msgid "<literal>value_column</literal> (optional, defaults to <literal>next_val</literal>): Only relevant for table structures! The name of the column on the table which is used to hold the value."
+msgstr ""
+ "<![CDATA[<composite-id class=\"MedicareId\" mapped=\"true\">\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+
+#: index.docbook:829
+msgid "<literal>optimizer</literal> (optional, defaults to <literal>none</literal>): See"
+msgstr "ì´ ìì ìì, composite ìë³ì í´ëì¤ì¸ <literal>MedicareId</literal>ì ìí°í° í¬ëì¤ ê·¸ ìì²´ ììë <literal>medicareNumber</literal>ì <literal>dependent</literal>ë¡ ëª
ëª
ë íë¡í¼í°ë¤ì ê°ëë¤. ìë³ì í´ëì¤ë <literal>equals()</literal>ì <literal>hashCode()</literal>를 ì¤ë²ë¼ì´ë ìì¼ê³ <literal>Serializable</literal>ì 구íí´ì¼ íë¤. ì´ ì ê·¼ë²ì ë¨ì ì ì주 ëª
ë°±í—ì½ë ì¤ë³µì´ë¤."
+
+#: index.docbook:836
+msgid "The second of these new generators is <literal>org.hibernate.id.enhanced.TableGenerator</literal> which is intended firstly as a replacement for the <literal>table</literal> generator (although it actually functions much more like <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal>) and secondly as a re-implementation of <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal> utilizing the notion of pluggable optimiziers. Essentially this generator defines a table capable of holding a number of different increment values simultaneously by using multiple distinctly keyed rows. This generator has a number of configuration parameters:"
+msgstr "ë¤ì ìì±ë¤ì 매íë composite ìë³ì를 ì§ì íëë° ì¬ì©ëë¤:"
+
+#: index.docbook:846
+msgid "<literal>table_name</literal> (optional, defaults to <literal>hibernate_sequences</literal>): The name of the table to be used."
+msgstr "<literal>mapped</literal> (ìµì
, ëí´í¸ë <literal>false</literal>): íëì 매íë composite ìë³ìê° ì¬ì©ë¨ì, ê·¸ë¦¬ê³ í¬í¨ë íë¡í¼í° 매íë¤ì´ ìí°í° í´ëì¤ì composite ìë³ì í´ëì¤ ìì를 참조í¨ì ëíë¸ë¤."
+
+#: index.docbook:852
+msgid "<literal>value_column_name</literal> (optional, defaults to <literal>next_val</literal>): The name of the column on the table which is used to hold the value."
+msgstr "<literal>class</literal> (ìµì
, íì§ë§ íëì 매íë commposite ìë³ìì ëí´ìë íìì ì): íëì composite ìë³ìë¡ì ì¬ì©ëë í´ëì¤."
+
+#: index.docbook:858
+msgid "<literal>segment_column_name</literal> (optional, defaults to <literal>sequence_name</literal>): The name of the column on the table which is used to hold the \"segement key\". This is the value which distinctly identifies which increment value to use."
+msgstr "ì°ë¦¬ë <xref linkend=\"components-compositeid\"/>ìì composite ìë³ìê° íëì component í´ëì¤ë¡ì 구íëë ë³´ë¤ í¸ë¦¬í ì ê·¼ë²ì¸ ì¸ë²ì§¸ ë°©ë를 ì¤ëª
í ê²ì´ë¤. ìëì ì¤ëª
ëì´ ìë ìì±ë¤ì ì´ ëì²´ì ì¸ ì ê·¼ë²ìë§ ì ì©ëë¤:"
+
+#: index.docbook:865
+msgid "<literal>segment_value</literal> (optional, defaults to <literal>default</literal>): The \"segment key\" value for the segment from which we want to pull increment values for this generator."
+msgstr "<literal>name</literal> (ìµì
, ì´ ì ê·¼ë²ì ê²½ì°ìë íìì): íëì component ìë³ì를 ìì íë ì»´í¬ëí¸ íì
ì íë¡í¼í°(9ì¥ì ë³´ë¼)."
+
+#: index.docbook:872
+msgid "<literal>segment_value_length</literal> (optional, defaults to <literal>255</literal>): Used for schema generation; the column size to create this segment key column."
+msgstr "<literal>access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° íë¡í¼í° ê°ì ì ê·¼íëë° ì¬ì©í ë°©ë."
+
+#: index.docbook:878
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the table."
+msgstr "<literal>class</literal> (ìµì
- ëí´í¸ë reflectionì ìí´ ê²°ì ë íë¡í¼í° íì
): íëì composite ìë³ìë¡ì ì¬ì©ëë ì»´í¬ëí¸ í´ëì¤(ë¤ì ì ì ë³´ë¼)."
+
+#: index.docbook:884
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the table should differ."
+msgstr "ì´ ì¸ë²ì§¸ ì ê·¼ë², <emphasis>identifier component</emphasis>ì ê±°ì 모ë ì´í리ì¼ì´ì
ë¤ì ëí´ ì°ë¦¬ê° ê¶ì¥íë ê²ì´ë¤."
+
+#: index.docbook:890
+msgid "<literal>optimizer</literal> (optional, defaults to <literal></literal>): See"
+msgstr "discriminator"
+
+#: index.docbook:900
+msgid "Identifier generator optimization"
+msgstr "<literal><discriminator></literal> ììë table-per-class-hierarchy(í
ì´ë¸ ë¹ í´ëì¤ ê³ì¸µêµ¬ì¡°) 매í ë°©ë를 ì¬ì©íë ë¤íì± ììíì íìíê³ í
ì´ë¸ì discriminator(íë³ì) 컬ë¼ì ì ì¸íë¤. discriminator 컬ë¼ì í¹ì íì ëí´ ì´ê¸°í ìí¬ ìë¸ í´ëì¤ê° 무ìì¸ì§ë¥¼ ìì ê³ì¸µì ìë ¤ì£¼ë íìì ê°ë¤ì í¬í¨íë¤. íì
ë¤ì ì íì ì¸ ì§í©ì´ ì¬ì©ë ì ìë¤: <literal>string</literal>, <literal>character</literal>, <literal>integer</literal>, <literal>byte</literal>, <literal>short</literal>, <literal>boolean</literal>, <literal>yes_no</literal>, <literal>true_false</literal>."
+
+#: index.docbook:901
+msgid "For identifier generators which store values in the database, it is inefficient for them to hit the database on each and every call to generate a new identifier value. Instead, you'd ideally want to group a bunch of them in memory and only hit the database when you have exhausted your in-memory value group. This is the role of the pluggable optimizers. Currently only the two enhanced generators (<xref linkend=\"mapping-declaration-id-enhanced\"/> support this notion."
+msgstr ""
+ "<![CDATA[<discriminator\n"
+ " column=\"discriminator_column\"\n"
+ " type=\"discriminator_type\"\n"
+ " force=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary sql expression\"\n"
+ "/>]]>"
+
+#: index.docbook:909
+msgid "<literal>none</literal> (generally this is the default if no optimizer was specified): This says to not perform any optimizations, and hit the database each and every request."
+msgstr "<literal>column</literal> (ìµì
- ëí´í¸ë <literal>class</literal>) discriminator 컬ë¼ëª
."
+
+#: index.docbook:915
+msgid "<literal>hilo</literal>: applies a hi/lo algorithm around the database retrieved values. The values from the database for this optimizer are expected to be sequential. The values retrieved from the database structure for this optimizer indicates the \"group number\"; the <literal>increment_size</literal> is multiplied by that value in memory to define a group \"hi value\"."
+msgstr "<literal>type</literal> (ìµì
- ëí´í¸ë <literal>string</literal>) Hibernate íì
ì ëíë´ë ì´ë¦"
+
+#: index.docbook:924
+msgid "<literal>pooled</literal>: like was discussed for <literal>hilo</literal>, this optimizers attempts to minimize the number of hits to the database. Here, however, we simply store the starting value for the \"next group\" into the database structure rather than a sequential value in combination with an in-memory grouping algorithm. <literal>increment_size</literal> here refers to the values coming from the database."
+msgstr "<literal>force</literal> (ìµì
- ëí´í¸ë <literal>false</literal>) ì´ê²ì Hibernateë¡ íì¬ê¸ ë£¨í¸ í´ëì¤ì 모ë ì¸ì¤í´ì¤ë¤ì ê²ìí ëì¡°ì°¨ë íì©ë discriminator ê°ë¤ì ì§ì íëë¡ \"ê°ì íë¤\"."
+
+#: index.docbook:937
+msgid "composite-id"
+msgstr "<literal>insert</literal> (ìµì
- ëí´í¸ë <literal>true</literal>) ë¹ì ì discriminator 컬ë¼ì´ ëí 매íë composite ìë³ìì ë¶ë¶ì¼ ê²½ì°ì ì´ê²ì <literal>false</literal>ë¡ ì¤ì íë¼. (Hibernateìê² SQL <literal>INSERT</literal>ë¤ ìì ê·¸ 컬ë¼ì í¬í¨íì§ ìëë¡ íµë³´íë¤.)"
+
+#: index.docbook:939
+msgid ""
+ "<![CDATA[<composite-id\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " mapped=\"true|false\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|.\"\n"
+ "\n"
+ " <key-property name=\"propertyName\" type=\"typename\" column=\"column_name\"/>\n"
+ " <key-many-to-one name=\"propertyName class=\"ClassName\" column=\"column_name\"/>\n"
+ " ......\n"
+ "</composite-id>]]>"
+msgstr "<literal>formula</literal> (ìµì
) íì
ì´ íê° ëì´ì¼ í ë ì¤íëë ììì SQL ííì. 컨í
ì¸ ê¸°ë°ì íë³ì íì©í´ì¤ë¤."
+
+#: index.docbook:941
+msgid "For a table with a composite key, you may map multiple properties of the class as identifier properties. The <literal><composite-id></literal> element accepts <literal><key-property></literal> property mappings and <literal><key-many-to-one></literal> mappings as child elements."
+msgstr "discriminator 컬ë¼ì ì¤ì ê°ë¤ì <literal><class></literal> ììì <literal><subclass></literal> ììì <literal>discriminator-value</literal> ìì±ì ìí´ ì§ì ëë¤."
+
+#: index.docbook:948
+msgid ""
+ "<![CDATA[<composite-id>\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr "<literal>force</literal> ìì±ì í
ì´ë¸ì´ ìì í´ëì¤ë¡ 매íëì§ ìë \"í¹ë³í\" discriminator ê°ë¤ì ê°ì§ íë¤ì í¬í¨í ê²½ì°ì(ë§) ì ì©íë¤. ì´ê²ì ëê° ê·¸ ê²½ì°ê° ìë ê²ì´ë¤."
+
+#: index.docbook:950
+msgid "Your persistent class <emphasis>must</emphasis> override <literal>equals()</literal> and <literal>hashCode()</literal> to implement composite identifier equality. It must also implements <literal>Serializable</literal>."
+msgstr "<literal>formula</literal> ìì±ì ì¬ì©íì¬ ë¹ì ì íì íì
ì íë¨íëë° ì¬ì©ë ììì SQL ííìì ì ì¸í ì ìë¤:"
+
+#: index.docbook:956
+msgid "Unfortunately, this approach to composite identifiers means that a persistent object is its own identifier. There is no convenient \"handle\" other than the object itself. You must instantiate an instance of the persistent class itself and populate its identifier properties before you can <literal>load()</literal> the persistent state associated with a composite key. We call this approach an <emphasis>embedded</emphasis> composite identifier, and discourage it for serious applications."
+msgstr ""
+ "<![CDATA[<discriminator\n"
+ " formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"\n"
+ " type=\"integer\"/>]]>"
+
+#: index.docbook:965
+msgid "A second approach is what we call a <emphasis>mapped</emphasis> composite identifier, where the identifier properties named inside the <literal><composite-id></literal> element are duplicated on both the persistent class and a separate identifier class."
+msgstr "version (ìµì
)"
+
+#: index.docbook:971
+msgid ""
+ "<![CDATA[<composite-id class=\"MedicareId\" mapped=\"true\">\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr "<literal><version></literal> ììë ìµì
ì´ê³ í
ì´ë¸ì´ ë²ì íë ë°ì´í°ë¥¼ í¬í¨íë¤ë ê²ì ëíë¸ë¤. ì´ê²ì ë¹ì ì´ <emphasis>긴 í¸ëìì
(long transaction)ë¤</emphasis>ì ì¬ì©í ê³íì´ë¼ë©´ í¹í ì ì©íë¤ (ìë를 ë³´ë¼)."
+
+#: index.docbook:973
+msgid "In this example, both the composite identifier class, <literal>MedicareId</literal>, and the entity class itself have properties named <literal>medicareNumber</literal> and <literal>dependent</literal>. The identifier class must override <literal>equals()</literal> and <literal>hashCode()</literal> and implement. <literal>Serializable</literal>. The disadvantage of this approach is quite obvious—code duplication."
+msgstr ""
+ "<![CDATA[<version\n"
+ " column=\"version_column\"\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|negative|undefined\"\n"
+ " generated=\"never|always\"\n"
+ " insert=\"true|false\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+
+#: index.docbook:982
+msgid "The following attributes are used to specify a mapped composite identifier:"
+msgstr "<literal>column</literal> (ìµì
- ëí´í¸ë íë¡í¼í° ëª
): ë²ì ë²í¸ë¥¼ ê°ì§ 컬ë¼ì ì´ë¦."
+
+#: index.docbook:988
+msgid "<literal>mapped</literal> (optional, defaults to <literal>false</literal>): indicates that a mapped composite identifier is used, and that the contained property mappings refer to both the entity class and the composite identifier class."
+msgstr "<literal>name</literal>: ìì í´ëì¤ì íë¡í¼í° ëª
."
+
+#: index.docbook:996
+msgid "<literal>class</literal> (optional, but required for a mapped composite identifier): The class used as a composite identifier."
+msgstr "<literal>type</literal> (ìµì
- ëí´í¸ë <literal>integer</literal>): ë²ì ë²í¸ì íì
."
+
+#: index.docbook:1003
+msgid "We will describe a third, even more convenient approach where the composite identifier is implemented as a component class in <xref linkend=\"components-compositeid\"/>. The attributes described below apply only to this alternative approach:"
+msgstr "<literal>access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° íë¡í¼í° ê°ì ì¡ì¸ì¤íëë° ì¬ì©í ë°©ë."
+
+#: index.docbook:1011
+msgid "<literal>name</literal> (optional, required for this approach): A property of component type that holds the composite identifier (see chapter 9)."
+msgstr "<literal>unsaved-value</literal> (ìµì
- ëí´í¸ë <literal>undefined</literal>): ì´ì ì¸ì
ìì ì ì¥ëìê±°ë ë¡ëëìë detached ì¸ì¤í´ì¤ë¡ë¶í° 구ë³ì§ì´ì, ì¸ì¤í´ì¤ê° ìë¡ì´ ì´ê¸°íë¨(unsaved)ì ëíë´ë version íë¡í¼í° ê°.(<literal>undefined</literal>ë ìë³ì íë¡í¼í° ê°ì´ ì¬ì©ë ê²ìì ì§ì íë¤.)"
+
+#: index.docbook:1023
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The component class used as a composite identifier (see next section)."
+msgstr "<literal>insert</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): version 컬ë¼ì´ SQL insert 문ì¥ë¤ ìì í¬í¨ë ê²ì¸ì§ ì¬ë¶ë¥¼ ì§ì íë¤. ë°ì´í°ë² ì´ì¤ 컬ë¼ì´ ëí´í¸ ê° <literal>0</literal>ì¼ë¡ ì ìëë ê²½ì°ìë§ <literal>false</literal>ë¡ ì¤ì ë ì ìë¤."
+
+#: index.docbook:1030
+msgid "This third approach, an <emphasis>identifier component</emphasis> is the one we recommend for almost all applications."
+msgstr "ë²ì ë²í¸ë¤ì <literal>long</literal>, <literal>integer</literal>, <literal>short</literal>, <literal>timestamp</literal> ëë <literal>calendar</literal> íì
ì¼ ì ìë¤."
+
+#: index.docbook:1038
+msgid "discriminator"
+msgstr "version ëë timestamp íë¡í¼í°ë detached ì¸ì¤í´ì¤ì ëí´ ê²°ì½ nullì¼ ìê° ìì´ì, Hibernateë ë¤ë¥¸ <literal>unsaved-value</literal> ë°©ëë¤ì´ ì§ì ëë ê²ì ìê´ìì´, null versionì´ë timestamp를 ê°ì§ ììì ì¸ì¤í´ì¤ë¥¼ transientë¡ì ê²ì¶í ê²ì´ë¤. <emphasis>null íì©ëë version ì´ë property를 ì ì¸íë ê²ì Hibernateìì transitive reattachmentì ëí ììì 문ì ë¤ì í¼íë ì¬ì´ ë°©ë²ì´ê³ , assigned ìë³ìë¤ì´ë composite keyë¤ì ì¬ì©íë ì¬ëë¤ìê² í¹í ì ì©íë¤!</emphasis>"
+
+#: index.docbook:1040
+msgid "The <literal><discriminator></literal> element is required for polymorphic persistence using the table-per-class-hierarchy mapping strategy and declares a discriminator column of the table. The discriminator column contains marker values that tell the persistence layer what subclass to instantiate for a particular row. A restricted set of types may be used: <literal>string</literal>, <literal>character</literal>, <literal>integer</literal>, <literal>byte</literal>, <literal>short</literal>, <literal>boolean</literal>, <literal>yes_no</literal>, <literal>true_false</literal>."
+msgstr "timestamp (ìµì
)"
+
+#: index.docbook:1058
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " column=\"discriminator_column\"\n"
+ " type=\"discriminator_type\"\n"
+ " force=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary sql expression\"\n"
+ "/>]]>"
+msgstr "ìµì
<literal><timestamp></literal> ììë í
ì´ë¸ì´ íìì¤í¬íí ë ë°ì´í°ë¥¼ í¬í¨í¨ì ëíë¸ë¤. ì´ê²ì ë²ì íì ëí ë체물ë¡ì ê³ ìëìë¤. Timestampì ê³ ì íê² optimistic ì ê¸ì ëí ë¤ì ìì í 구íì´ë¤. íì§ë§ ëëë¡ ì´í리ì¼ì´ì
ì ë¤ë¥¸ ë°©ë²ë¤ë¡ timestampë¤ì ì¬ì©í ìë ìë¤."
+
+#: index.docbook:1061
+msgid "<literal>column</literal> (optional - defaults to <literal>class</literal>) the name of the discriminator column."
+msgstr ""
+ "<![CDATA[<timestamp\n"
+ " column=\"timestamp_column\"\n"
+ " name=\"propertyName\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|undefined\"\n"
+ " source=\"vm|db\"\n"
+ " generated=\"never|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+
+#: index.docbook:1067
+msgid "<literal>type</literal> (optional - defaults to <literal>string</literal>) a name that indicates the Hibernate type"
+msgstr "<literal>column</literal> (ìµì
- ëí´í¸ë íë¡í¼í° ëª
): íìì¤í¬í를 í¬í¨íë ì»¬ë¼ ëª
."
+
+#: index.docbook:1073
+msgid "<literal>force</literal> (optional - defaults to <literal>false</literal>) \"force\" Hibernate to specify allowed discriminator values even when retrieving all instances of the root class."
+msgstr "<literal>name</literal>: ìì í´ëì¤ì ëí´ ìë° <literal>Date</literal> ëë <literal>Timestamp</literal> íì
ì ê°ì§ ìë°ë¹ì¦ ì¤íì¼ì íë¡í¼í° ì´ë¦."
+
+#: index.docbook:1080
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>) set this to <literal>false</literal> if your discriminator column is also part of a mapped composite identifier. (Tells Hibernate to not include the column in SQL <literal>INSERT</literal>s.)"
+msgstr "<literal>access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° íë¡í¼í° ê°ì ì ê·¼íëë° ì¬ì©í ë°©ë."
+
+#: index.docbook:1088
+msgid "<literal>formula</literal> (optional) an arbitrary SQL expression that is executed when a type has to be evaluated. Allows content-based discrimination."
+msgstr "<literal>unsaved-value</literal> (ìµì
- ëí´í¸ë <literal>null</literal>): ì´ì ì¸ì
ìì ì ì¥ëìê±°ë ë¡ëëìë detached ì¸ì¤í´ì¤ë¡ë¶í° ì¸ì¤í´ì¤ë¥¼ 구ë³ì§ì°ë, ì¸ì¤í´ì¤ê° ìë¡ì´ ì´ê¸°íë¨(unsaved)ì ëíë´ë version íë¡í¼í° ê°.(<literal>undefined</literal>ë ìë³ì íë¡í¼í° ê°ì´ ì¬ì©ë ê²ìì ì§ì íë¤.)"
+
+#: index.docbook:1096
+msgid "Actual values of the discriminator column are specified by the <literal>discriminator-value</literal> attribute of the <literal><class></literal> and <literal><subclass></literal> elements."
+msgstr "<literal>source</literal> (ìµì
- ëí´í¸ë <literal>vm</literal>): Hibernateë ì´ëì timestamp ê°ì ê²ìí ê²ì¸ê°? ë°ì´í°ë² ì´ì¤ë¡ë¶í°ì¸ê° íì¬ì JVMì¼ë¡ë¶í°ì¸ê°? ë°ì´í°ë² ì´ì¤ 기ë°ì timestampë¤ì Hibernateê° \"ë¤ì ê°\"ì ê²°ì í기 ìí´ ë°ì´í°ë² ì´ì¤ì ì ìí´ì¼ í기 ë문ì ì¤ë²í¤ë를 ì´ëíì§ë§, í´ë¬ì¤í°ë§ë íê²½ë¤ììì ì©ëë¡ ë³´ë¤ ë ìì í ê²ì´ë¤. ëí 모ë <literal>Dialect</literal>ë¤ì´ ë°ì´í°ë² ì´ì¤ì íì¬ì timestampì ëí ê²ìì ì§ìíë ê²ì¼ë¡ ìë ¤ì ¸ ìì§ ìì§ë§, ë¤ë¥¸ <literal>Dialect</literal>ë¤ì ì ë°ë ê²°í ë문ì ì ê¸ì ìì´ ì¬ì©ì´ ìì íì§ ìì ì ììì ë
¸í¸íë¼(ì를 ë¤ë©´ ì¤ë¼í´ 8)."
+
+#: index.docbook:1102
+msgid "The <literal>force</literal> attribute is (only) useful if the table contains rows with \"extra\" discriminator values that are not mapped to a persistent class. This will not usually be the case."
+msgstr "<literal>generated</literal> (ìµì
- ëí´í¸ë <literal>never</literal>): ì´ timestamp íë¡í¼í° ê°ì´ ë°ì´í°ë² ì´ì¤ì ìí´ ì¤ì ë¡ ìì±ë¨ì ì§ì íë¤. <xref linkend=\"mapping-generated\"/>ì°ì¶ëë íë¡í¼í°ë¤ì ëí ë
¼ìë¤ ë³´ë¼."
+
+#: index.docbook:1108
+msgid "Using the <literal>formula</literal> attribute you can declare an arbitrary SQL expression that will be used to evaluate the type of a row:"
+msgstr "<literal><timestamp></literal>ë <literal><version type=\"timestamp\"></literal>ê³¼ ê°ìì ë
¸í¸íë¼. ê·¸ë¦¬ê³ <literal><timestamp use-db=\"true\"></literal>ë <literal><version type=\"dbtimestamp\"></literal>ê³¼ ê°ë¤"
+
+#: index.docbook:1113
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"\n"
+ " type=\"integer\"/>]]>"
+msgstr "íë¡í¼í°"
+
+#: index.docbook:1118
+msgid "version (optional)"
+msgstr "<literal><property></literal> ììë í´ëì¤ì ìë°ë¹ì¦ ì¤íì¼ì ìì íë¡í¼í°ë¥¼ ì ì¸íë¤."
+
+#: index.docbook:1120
+msgid "The <literal><version></literal> element is optional and indicates that the table contains versioned data. This is particularly useful if you plan to use <emphasis>long transactions</emphasis> (see below)."
+msgstr ""
+ "<![CDATA[<property\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " type=\"typename\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " generated=\"never|insert|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ "/>]]>"
+
+#: index.docbook:1136
+msgid ""
+ "<![CDATA[<version\n"
+ " column=\"version_column\"\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|negative|undefined\"\n"
+ " generated=\"never|always\"\n"
+ " insert=\"true|false\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr "<literal>name</literal>: 첫 ì문ìë¡ ììíë íë¡í¼í° ì´ë¦."
+
+#: index.docbook:1139
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the column holding the version number."
+msgstr "<literal>column</literal> (ìµì
- ëí´í¸ë íë¡í¼í° ì´ë¦): 매íë ë°ì´í°ë² ì´ì¤ í
ì´ë¸ 컬ë¼ì ì´ë¦. ì´ê²ì ëí ë´ë¶ì í¬í¨ëë <literal><column></literal> ìì(ë¤)ì ìí´ ì§ì ë ìë ìë¤."
+
+#: index.docbook:1145
+msgid "<literal>name</literal>: The name of a property of the persistent class."
+msgstr "<literal>type</literal> (ìµì
): Hibernate íì
ì ëíë´ë ì´ë¦."
+
+#: index.docbook:1150
+msgid "<literal>type</literal> (optional - defaults to <literal>integer</literal>): The type of the version number."
+msgstr "<literal>update, insert</literal> (ìµì
- ëí´í¸ë <literal>true</literal>) : 매íë 컬ë¼ë¤ì´ <literal>UPDATE</literal>ì/ëë <literal>INSERT</literal> 문ì¥ë¤ìì í¬í¨ë ê²ìì ì§ì íë¤. ëë¤ <literal>false</literal>ë¡ ì¤ì íë ê²ì ê·¸ ê°ì´ ëì¼í 컬ë¼(ë¤)ë¡ ë§¤íëë ì´ë¤ ë¤ë¥¸ íë¡í¼í°ë¡ë¶í° ëë í¸ë¦¬ê±°ì ìí´ ëë ë¤ë¥¸ ì´í리ì¼ì´ì
ì¼ë¡ë¶í° ì´ê¸°í ëë ììíê² \"íìë(derived)\" íë¡í¼í°ë¥¼ íì©í´ì¤ë¤."
+
+#: index.docbook:1162
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>undefined</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr "<literal>access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° íë¡í¼í° ê°ì ì ê·¼íëë° ì¬ì©í ë°©ë."
+
+#: index.docbook:1171
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this version property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "<literal>lazy</literal> (ìµì
- ëí´í¸ë <literal>false</literal>): ì¸ì¤í´ì¤ ë³ìê° ì²ìì¼ë¡ ì¡ì¸ì¤ ë ë ì´ íë¡í¼í°ê° lazilyíê² íì¹ë ê²ìì ì§ì íë¤(ë¹ë-ì ë°ì´í¸ì½ë ìë¨ì íìë¡ íë¤)."
+
+#: index.docbook:1178
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>): Specifies whether the version column should be included in SQL insert statements. May be set to <literal>false</literal> if and only if the database column is defined with a default value of <literal>0</literal>."
+msgstr "<literal>unique</literal> (ìµì
): 컬ë¼ë¤ì ëí ì ì¼ ì»¨ì¤í¸ë ì¸í¸ì DDL ìì±ì ê°ë¥íê² ë§ë ë¤. ëí ì´ê²ì´ <literal>property-ref</literal>ì íì¼ì´ ëë ê²ì íì©í´ì¤ë¤."
+
+#: index.docbook:1188
+msgid "Version numbers may be of Hibernate type <literal>long</literal>, <literal>integer</literal>, <literal>short</literal>, <literal>timestamp</literal> or <literal>calendar</literal>."
+msgstr "<literal>not-null</literal> (ìµì
): 컬ë¼ë¤ì ëí´ null ê°ë¥ 컨ì¤í¸ë ì¸í¸ì DDL ìì±ì ê°ë¥íê² ë§ë ë¤."
+
+#: index.docbook:1193
+msgid "A version or timestamp property should never be null for a detached instance, so Hibernate will detect any instance with a null version or timestamp as transient, no matter what other <literal>unsaved-value</literal> strategies are specified. <emphasis>Declaring a nullable version or timestamp property is an easy way to avoid any problems with transitive reattachment in Hibernate, especially useful for people using assigned identifiers or composite keys!</emphasis>"
+msgstr "<literal>optimistic-lock</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): ì´ íë¡í¼í°ì ëí ì
ë°ì´í¸ë¤ì´ optimistic ì ê¸ì íëíë ê²ì íìë¡ íê±°ë íìë¡ íì§ ììì ì§ì íë¤. ë¬ë¦¬ë§í´, ì´ íë¡í¼í°ê° dirtyì¼ ë ë²ì ì¦ê°ê° ë°ìí ê²½ì°ì¸ì§ë¥¼ ê²°ì íë¤."
+
+#: index.docbook:1204
+msgid "timestamp (optional)"
+msgstr "<literal>generated</literal> (ìµì
- ëí´í¸ë <literal>never</literal>): ì´ íë¡í¼í° ê°ì´ ë°ì´í°ë² ì´ì¤ì ìí´ ì¤ì ë¡ ì°ì¶ëëì§ë¥¼ ì§ì íë¤. <xref linkend=\"mapping-generated\"/>ì°ì¶ëë íë¡í¼í°ë¤ì ëí ë
¼ì를 ë³´ë¼."
+
+#: index.docbook:1206
+msgid "The optional <literal><timestamp></literal> element indicates that the table contains timestamped data. This is intended as an alternative to versioning. Timestamps are by nature a less safe implementation of optimistic locking. However, sometimes the application might use the timestamps in other ways."
+msgstr "<emphasis>typename</emphasis>ì ë¤ìì¼ ì ìë¤:"
+
+#: index.docbook:1222
+msgid ""
+ "<![CDATA[<timestamp\n"
+ " column=\"timestamp_column\"\n"
+ " name=\"propertyName\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|undefined\"\n"
+ " source=\"vm|db\"\n"
+ " generated=\"never|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr "Hibernate 기본 íì
ì ì´ë¦ (ì를 ë¤ì´. <literal>integer, string, character, date, timestamp, float, binary, serializable, object, blob</literal>)."
+
+#: index.docbook:1225
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of a column holding the timestamp."
+msgstr "ëí´í¸ 기본 íì
ì ê°ì§ Java í´ëì¤ì ì´ë¦(ì를 ë¤ì´. <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal>)."
+
+#: index.docbook:1231
+msgid "<literal>name</literal>: The name of a JavaBeans style property of Java type <literal>Date</literal> or <literal>Timestamp</literal> of the persistent class."
+msgstr "serializable Java í´ëì¤ì ì´ë¦."
+
+#: index.docbook:1244
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>null</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr "ë§ì¼ ë¹ì ì´ íì
ì ì§ì íì§ ìì ê²½ì°, Hibernateë ì íí Hibernate íì
ì ì¶ì í기 ìí´ ëª
ëª
ë íë¡í¼í°ì ëí´ reflectionì ì¬ì©í ê²ì´ë¤. Hibernateë ê·¸ ìììì 2,3,4 ê·ì¹ë¤ì ì¬ì©íì¬ íë¡í¼í° getterì ë°í í´ëì¤ì ì´ë¦ì í´ìíë ¤ê³ ìëí ê²ì´ë¤. íì§ë§ ì´ê²ì íì 충ë¶íì§ë ìë¤. ì´ë¤ ê²½ì°ë¤ìì, ë¹ì ì ì¬ì í <literal>type</literal> ìì±ì íìë¡ í ê²ì´ë¤.(ì를 ë¤ì´, <literal>Hibernate.DATE</literal>ì <literal>Hibernate.TIMESTAMP</literal> ì¬ì´ë¥¼ 구ë³í기 ìí´, ëë ë§ì¶¤ íì
ì ì§ì í기 ìí´.)"
+
+#: index.docbook:1253
+msgid "<literal>source</literal> (optional - defaults to <literal>vm</literal>): From where should Hibernate retrieve the timestamp value? From the database, or from the current JVM? Database-based timestamps incur an overhead because Hibernate must hit the database in order to determine the \"next value\", but will be safer for use in clustered environments. Note also, that not all <literal>Dialect</literal>s are known to support retrieving of the database's current timestamp, while others might be unsafe for usage in locking due to lack of precision (Oracle 8 for example)."
+msgstr "<literal>access</literal> ìì±ì ë¹ì ì¼ë¡ íì¬ê¸ Hibernateê° ë°íì ìì íë¡í¼í°ì ì¡ì¸ì¤íë ë°©ë²ì ì ì´íëë¡ í´ì¤ë¤. ëí´í¸ë¡ Hibernateë íë¡í¼í° get/set ìì í¸ì¶í ê²ì´ë¤. ë§ì¼ ë¹ì ì´ <literal>access=\"field\"</literal>를 ì§ì í ê²½ì°, Hibernateë get/set ìì í¼íê³ reflectionì ì¬ì©íì¬ ì§ì íëì ì¡ì¸ì¤ í ê²ì´ë¤. ë¹ì ì <literal>org.hibernate.property.PropertyAccessor</literal> ì¸í°íì´ì¤ë¥¼ 구ííë í´ëì¤ë¥¼ ëª
ëª
í¨ì¼ë¡ì¨ íë¡í¼í° ì ê·¼ì ìí ë¹ì ìì ì ë°©ë를 ì§ì í ìë ìë¤."
+
+#: index.docbook:1265
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this timestamp property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "í¹ë³í ê°ë ¥í í¹ì§ì íìë íë¡í¼í°ë¤ì´ë¤. ì´ë¤ íë¡í¼í°ë¤ì ì ìì ì½ê¸° ì ì©ì´ê³ , ê·¸ íë¡í¼í° ê°ì ë¡ë ìì ê³ì°ëë¤. ë¹ì ì ê·¸ ê³ì°ì SQL ííìì¼ë¡ ì ì¸íê³ , ì´ê²ì ì¸ì¤í´ì¤ë¥¼ ë¡ëìí¤ë SQL ì§ì ë´ì <literal>SELECT</literal> ì ìë¸ì§ìë¡ ë²ìëë¤:"
+
+#: index.docbook:1274
+msgid "Note that <literal><timestamp></literal> is equivalent to <literal><version type=\"timestamp\"></literal>. And <literal><timestamp source=\"db\"></literal> is equivalent to <literal><version type=\"dbtimestamp\"></literal>"
+msgstr ""
+ "<![CDATA[\n"
+ "<property name=\"totalPrice\"\n"
+ " formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p\n"
+ " WHERE li.productId = p.productId\n"
+ " AND li.customerId = customerId\n"
+ " AND li.orderNumber = orderNumber )\"/>]]>"
+
+#: index.docbook:1284
+msgid "property"
+msgstr "ë¹ì ì í¹ì 컬ë¼(주ì´ì§ ìì ììë <literal>customerId</literal>)ì ëí´ alias를 ì ì¸íì§ ììì¼ë¡ì¨ ìí°í°ë¤ ìì ì í
ì´ë¸ì 참조í ì ììì ë
¸í¸íë¼. ëí ë¹ì ì ë§ì¼ ë¹ì ì´ ê·¸ ìì±ì ì¬ì©íê³ ì¶ì§ ìì ê²½ì°ì ë´í¬ë <literal><formula></literal> 매í ìì를 ì¬ì©í ì ììì ë
¸í¸íë¼."
+
+#: index.docbook:1286
+msgid "The <literal><property></literal> element declares a persistent, JavaBean style property of the class."
+msgstr "many-to-one"
+
+#: index.docbook:1308
+msgid ""
+ "<![CDATA[<property\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " type=\"typename\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " generated=\"never|insert|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ "/>]]>"
+msgstr "ë ë¤ë¥¸ ìì í´ëì¤ì ëí ì ê· ì°ê´ê´ê³ë <literal>many-to-one</literal> ìì를 ì¬ì©íì¬ ì ì¸ëë¤. ê´ê³í 모íì many-to-one ì°ê´ê´ê³ì´ë¤.: íëì í
ì´ë¸ ë´ì ìë foreign í¤ë ëì í
ì´ë¸ì íë¼ì´ë¨¸ë¦¬ í¤ ì»¬ë¼(ë¤)ì 참조íê³ ìë¤."
+
+#: index.docbook:1311
+msgid "<literal>name</literal>: the name of the property, with an initial lowercase letter."
+msgstr ""
+ "<![CDATA[<many-to-one\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " fetch=\"join|select\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+
+#: index.docbook:1317
+msgid "<literal>column</literal> (optional - defaults to the property name): the name of the mapped database table column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr "<literal>name</literal>: íë¡í¼í°ì ì´ë¦."
+
+#: index.docbook:1324
+msgid "<literal>type</literal> (optional): a name that indicates the Hibernate type."
+msgstr "<literal>column</literal> (ìµì
): foreign key 컬ë¼ì ì´ë¦. ì´ê²ì ëí ë´í¬ë <literal><column></literal> ìì(ë¤)ì ìí´ ì§ì ëë¤."
+
+#: index.docbook:1329
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) : specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" property whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr "<literal>class</literal> (ìµì
- ëí´í¸ë reflectionì ìí´ ê²°ì ë íë¡í¼í° íì
): ì°ê´ë í´ëì¤ì ì´ë¦."
+
+#: index.docbook:1338
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> property. Computed properties do not have a column mapping of their own."
+msgstr "<literal>cascade</literal> (ìµì
): ì´ë ì¤í¼ë ì´ì
ë¤ì´ ë¶ëª¨ ê°ì²´ë¡ë¶í° ì°ê´ë ê°ì²´ë¡ ì¼ì¤ì¼ì´ë ë ê²ì¸ì§ë¥¼ ì§ì íë¤."
+
+#: index.docbook:1351
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr "<literal>update, insert</literal> (ìµì
- ëí´í¸ë <literal>true</literal>) 매íë 컬ë¼ë¤ì´ SQL <literal>UPDATE</literal>ì/ëë <literal>INSERT</literal> 문ì¥ë¤ ìì í¬í¨ë ê²ì¸ì§ë¥¼ ì§ì íë¤. ëë¤ <literal>false</literal>ë¡ ì¤ì íë ê²ì ê·¸ ê°ì´ ëì¼í 컬ë¼(ë¤)ë¡ ë§¤íìí¤ë ì´ë¤ ë¤ë¥¸ 컬ë¼ë¤ë¡ë¶í° ì´ê¸°í ëê±°ë í¸ë¦¬ê±°ë ë¤ë¥¸ ì´í리ì¼ì´ì
ì ìí´ ì´ê¸°íëë ë¨ìí \"íìë\" ì°ê´ê´ê³ ê°ì íì©íë¤."
+
+#: index.docbook:1358
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the columns. Also, allow this to be the target of a <literal>property-ref</literal>."
+msgstr "<literal>property-ref</literal>: (ìµì
) ì´ foreign keyì ì¡°ì¸ëë ì°ê´ë í´ëì¤ì íë¡í¼í° ì´ë¦. ì§ì ëì§ ìì ê²½ì°, ì°ê´ í´ëì¤ì íë¼ì´ë¨¸ë¦¬ í¤ê° ì¬ì©ëë¤."
+
+#: index.docbook:1365
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the columns."
+msgstr "<literal>access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° íë¡í¼í° ê°ì ì ê·¼íëë° ì¬ì©í ë°©ë."
+
+#: index.docbook:1371
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr "<literal>unique</literal> (ìµì
): foreign-key 컬ë¼ì ìí ì ì¼ ì»¨ì¤í¸ë ì¸í¸ì DDL ìì±ì ê°ë¥íëë¡ í´ì¤ë¤. ëí ì´ê²ì´ property-refì ëìì´ ëë ê²ì íì©í´ì¤ë¤. ì´ê²ì ì°ê´ ë¤ì¤ì±(association multiplicity)ì í¨ì¨ì ì¼ë¡ ì¼ ë ì¼ë¡ ë§ë ë¤."
+
+#: index.docbook:1379
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr "<literal>not-null</literal> (ìµì
): foreign key 컬ë¼ë¤ì ìí null ê°ë¥í 컨ì¤í¸ë ì¸í¸ì DDL ìì±ì ê°ë¥íëë¡ í´ì¤ë¤."
+
+#: index.docbook:1388
+msgid "<emphasis>typename</emphasis> could be:"
+msgstr "<literal>optimistic-lock</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): ì´ íë¡í¼í°ì ëí ì
ë°ì´í¸ë¤ì´ optimistic lockì íëì íìë¡ íëì§ ìëì§ ì¬ë¶ë¥¼ ì§ì íë¤. ë¬ë¦¬ ë§í´ ì´ íë¡í¼í°ê° dirtyì¼ ë version ì¦ê°ê° ë°ìí´ì¼ í ê²½ì°ì¸ì§ë¥¼ ê²°ì íë¤."
+
+#: index.docbook:1394
+msgid "The name of a Hibernate basic type (eg. <literal>integer, string, character, date, timestamp, float, binary, serializable, object, blob</literal>)."
+msgstr "<literal>lazy</literal> (ìµì
- ëí´í¸ë <literal>proxy</literal>): ëí´í¸ë¡, ë¨ì¼ í¬ì¸í¸ ì°ê´ë¤ì´ íë½ìëë¤. <literal>lazy=\"no-proxy\"</literal>ë ì¸ì¤í´ì¤ ë³ìê° ì²ìì¼ë¡ ì ê·¼ë ë ê·¸ íë¡í¼í°ê° lazily íì¹ë ê²ìì ì§ì íë¤(ë¹ë-ì ë°ì´í¸ì½ë ìë¨ì íìë¡ íë¤). <literal>lazy=\"false\"</literal>ë ê·¸ ì°ê´ì´ íì eagerly íì¹ë ê²ìì ì§ì íë¤."
+
+#: index.docbook:1400
+msgid "The name of a Java class with a default basic type (eg. <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal>)."
+msgstr "<literal>not-found</literal> (ìµì
- ëí´í¸ë <literal>exception</literal>): ëë½ë íë¤ì 참조íë foreign keyë¤ì´ ì´ë»ê² ì²ë¦¬ë ê²ì¸ì§ë¥¼ ì§ì íë¤: <literal>ignore</literal>ë í ê°ì ëë½ë íì í ê°ì null ì°ê´ì¼ë¡ ì·¨ê¸í ê²ì´ë¤."
+
+#: index.docbook:1406
+msgid "The name of a serializable Java class."
+msgstr "<literal>entity-name</literal> (ìµì
): ì°ê´ë í´ëì¤ì ìí°í° ì´ë¦."
+
+#: index.docbook:1411
+msgid "The class name of a custom type (eg. <literal>com.illflow.type.MyCustomType</literal>)."
+msgstr "<literal>formula</literal> (ìµì
): <emphasis>ê³ì°ë</emphasis> foreign keyì ëí ê°ì ì ìíë SQL ííì."
+
+#: index.docbook:1417
+msgid "If you do not specify a type, Hibernate will use reflection upon the named property to take a guess at the correct Hibernate type. Hibernate will try to interpret the name of the return class of the property getter using rules 2, 3, 4 in that order. However, this is not always enough. In certain cases you will still need the <literal>type</literal> attribute. (For example, to distinguish between <literal>Hibernate.DATE</literal> and <literal>Hibernate.TIMESTAMP</literal>, or to specify a custom type.)"
+msgstr "<literal>cascade</literal> ìì± ê°ì <literal>none</literal> ìë ì´ë¤ ì미ìë ë¤ë¥¸ ê°ì¼ë¡ ì¤ì íë ê²ì ì´ë¤ ì¤í¼ë ì´ì
ë¤ì ì°ê´ë ê°ì²´ìê² ë³´ê¸í ê²ì´ë¤. ì ì미í ê°ë¤ì Hibernateì 기본 ì¤í¼ë ì´ì
ë¤ì ì´ë¦ë¤, ì¦ <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal> ë¿ë§ ìëë¼ í¹ë³í ê°ë¤, ì¦ <literal>delete-orphan</literal>ê³¼ <literal>all</literal> ê·¸ë¦¬ê³ ì¤í¼ë ì´ì
ì´ë¦ë¤ì ì¼í ë¶ë¦¬ë ì¡°í©ë¤, ì를 ë¤ë©´ <literal>cascade=\"persist,merge,evict\"</literal> ëë <literal>cascade=\"all,delete-orphan\"</literal>ì´ë¤. ì ì²´ ì¤ëª
ì <xref linkend=\"objectstate-transitive\"/>를 ë³´ë¼. ë¨ì¼ê° ì°ê´ë¤(many-to-one ì°ê´ê³¼ one-to-one ì°ê´)ì orphan delete를 ì§ìíì§ ììì ë
¸í¸íë¼."
+
+#: index.docbook:1427
+msgid "The <literal>access</literal> attribute lets you control how Hibernate will access the property at runtime. By default, Hibernate will call the property get/set pair. If you specify <literal>access=\"field\"</literal>, Hibernate will bypass the get/set pair and access the field directly, using reflection. You may specify your own strategy for property access by naming a class that implements the interface <literal>org.hibernate.property.PropertyAccessor</literal>."
+msgstr "ì¼ë°ì ì¸ <literal>many-to-one</literal> ì ì¸ì ë¤ìê³¼ ê°ì´ ê°ë¨íê² ë³´ì¬ì§ë¤:"
+
+#: index.docbook:1436
+msgid "An especially powerful feature are derived properties. These properties are by definition read-only, the property value is computed at load time. You declare the computation as a SQL expression, this translates to a <literal>SELECT</literal> clause subquery in the SQL query that loads an instance:"
+msgstr "<![CDATA[<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>]]>"
+
+#: index.docbook:1443
+msgid ""
+ "<![CDATA[\n"
+ "<property name=\"totalPrice\"\n"
+ " formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p\n"
+ " WHERE li.productId = p.productId\n"
+ " AND li.customerId = customerId\n"
+ " AND li.orderNumber = orderNumber )\"/>]]>"
+msgstr "<literal>property-ref</literal> ìì±ì ì¤ì§ foreign keyê° íë¼ì´ë¨¸ë¦¬ í¤ê° ìë ì°ê´ë í
ì´ë¸ì ì ì¼ í¤ë¥¼ 참조íë 리거ì ë°ì´í°ë¥¼ 매ííëë°ë§ ì¬ì©ëë¤. ì´ê²ì ê¼´ì¬ëì´ ê´ê³í 모íì´ë¤. ì를 ë¤ì´, <literal>Product</literal> í´ëì¤ê° íë¼ì´ë¨¸ë¦¬ í¤ë¥¼ ìë, ì ì¼í ìë¦¬ì¼ ë²í¸ë¥¼ ê°ëë¤ê³ ê°ì íì.(<literal>unique</literal> ìì±ì SchemaExport ëêµ¬ë¡ Hibernateì DDL ìì±ì ì ì´íë¤.)"
+
+#: index.docbook:1445
+msgid "Note that you can reference the entities own table by not declaring an alias on a particular column (<literal>customerId</literal> in the given example). Also note that you can use the nested <literal><formula></literal> mapping element if you don't like to use the attribute."
+msgstr "<![CDATA[<property name=\"serialNumber\" unique=\"true\" type=\"string\" column=\"SERIAL_NUMBER\"/>]]>"
+
+#: index.docbook:1455
+msgid "many-to-one"
+msgstr "ê·¸ë° ë¤ì <literal>OrderItem</literal>ì ëí 매íì ë¤ìì ì¬ì©í ê²ì´ë¤:"
+
+#: index.docbook:1457
+msgid "An ordinary association to another persistent class is declared using a <literal>many-to-one</literal> element. The relational model is a many-to-one association: a foreign key in one table is referencing the primary key column(s) of the target table."
+msgstr "<![CDATA[<many-to-one name=\"product\" property-ref=\"serialNumber\" column=\"PRODUCT_SERIAL_NUMBER\"/>]]>"
+
+#: index.docbook:1485
+msgid ""
+ "<![CDATA[<many-to-one\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " fetch=\"join|select\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr "íì§ë§ ì´ê²ì íì¤í ê¶ì¥ëì§ ìëë¤."
+
+#: index.docbook:1488, index.docbook:1669, index.docbook:1855
+msgid "<literal>name</literal>: The name of the property."
+msgstr "ë§ì¼ 참조ë ì ì¼ í¤ê° ì°ê´ë ìí°í°ì ì¬ë¬ íë¡í¼í°ë¤ì í¬í¨í ê²½ì°, ë¹ì ì ëª
ëª
ë <literal><properties></literal> ìì ë´ë¶ì 참조ë íë¡í¼í°ë¤ì 매íí ê²ì´ë¤."
+
+#: index.docbook:1493, index.docbook:2284
+msgid "<literal>column</literal> (optional): The name of the foreign key column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr "ë§ì¼ 참조ë ì ì¼í¤ê° ì»´í¬ëí¸ì íë¡í¼í°ì¼ ê²½ì°, ë¹ì ì íëì íë¡í¼í° ê²½ë¡ë¥¼ ì§ì í ì ìë¤:"
+
+#: index.docbook:1500, index.docbook:1674
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the associated class."
+msgstr "<![CDATA[<many-to-one name=\"owner\" property-ref=\"identity.ssn\" column=\"OWNER_SSN\"/>]]>"
+
+#: index.docbook:1506
+msgid "<literal>cascade</literal> (optional): Specifies which operations should be cascaded from the parent object to the associated object."
+msgstr "one-to-one"
+
+#: index.docbook:1512, index.docbook:1695
+msgid "<literal>fetch</literal> (optional - defaults to <literal>select</literal>): Chooses between outer-join fetching or sequential select fetching."
+msgstr "ë ë¤ë¥¸ ìì í´ëì¤ì ëí one-to-one ì°ê´ê´ê³ë <literal>one-to-one</literal> ìì를 ì¬ì©íì¬ ì ì¸ëë¤."
+
+#: index.docbook:1518
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" association whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr ""
+ "<![CDATA[<one-to-one\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " constrained=\"true|false\"\n"
+ " fetch=\"join|select\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " formula=\"any SQL expression\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+
+#: index.docbook:1527
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class is used."
+msgstr "<literal>name</literal>: íë¡í¼í°ì ì´ë¦."
+
+#: index.docbook:1540
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. Also, allow this to be the target of a <literal>property-ref</literal>. This makes the association multiplicity effectively one to one."
+msgstr "<literal>cascade</literal> (ìµì
) ì´ë ì¤í¼ë ì´ì
ë¤ì´ ë¶ëª¨ ê°ì²´ë¡ë¶í° ì°ê´ë ê°ì²´ë¡ ì¼ì¤ì¼ì´ë ë ê²ì¸ì§ë¥¼ ì§ì íë¤."
+
+#: index.docbook:1548
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the foreign key columns."
+msgstr "<literal>constrained</literal> (ìµì
) 매íë í
ì´ë¸ì íë¼ì´ë¨¸ë¦¬ í¤ì ëí foreign í¤ ì»¨ì¤í¸ë ì¸í¸ê° ì°ê´ë í´ëì¤ì í
ì´ë¸ì 참조íëì§ ì¬ë¶ë¥¼ ì§ì íë¤. ì´ ìµì
ì <literal>save()</literal>ì <literal>delete()</literal>ê° ì¼ì¤ì¼ì´ë ëë ììì ìí¥ì ì£¼ê³ , ê·¸ ì°ê´ì´ íë½ì ë ê²ì¸ì§ ì¬ë¶ë¥¼ ê²°ì íë¤ (ëí ì¤í¤ë§ ë´ë³´ë´ê¸° ë구ì ìí´ ì¬ì©ëë¤)."
+
+#: index.docbook:1554
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, dertermines if a version increment should occur when this property is dirty."
+msgstr "<literal>fetch</literal> (ìµì
- ëí´í¸ë <literal>select</literal>): outer-join íì¹ ëë ìì°¨ì ì¸ select íì¹ ì¤ìì ì ííë¼."
+
+#: index.docbook:1562
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched."
+msgstr "<literal>property-ref</literal>: (ìµì
) ì´ í´ëì¤ì íë¼ì´ë¨¸ë¦¬ í¤ì ì°ê²°ë ì°ê´ í´ëì¤ì íë¡í¼í°ì ì´ë¦. ë§ì¼ ì§ì ëì§ ìì ê²½ì°, ì°ê´ í´ëì¤ì íë¼ì´ë¨¸ë¦¬ í¤ê° ì¬ì©ëë¤."
+
+#: index.docbook:1572
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr "<literal>access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° íë¡í¼í° ê°ì ì ê·¼ íëë° ì¬ì©í ë°©ë."
+
+#: index.docbook:1579, index.docbook:1733
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class."
+msgstr "<literal>formula</literal> (ìµì
): ê±°ì 모ë one to one ì°ê´ê´ê³ë¤ì ìì íë ìí°í°ì íë¼ì´ë¨¸ë¦¬ í¤ë¡ 매íëë¤. ì´ê²ì´ ê·¸ ê²½ì°ê° ìë ë문 ê²½ì°ë¤ìì, ë¹ì ì SQL formula ì¬ì©ì ê²°í©ìí¬ ëªëª ë¤ë¥¸ 컬ë¼, 컬ë¼ë¤, ëë ííìì ì§ì í ì ìë¤.(ìì ë <literal>org.hibernate.test.onetooneformula</literal>를 ë³´ë¼.)"
+
+#: index.docbook:1585
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> foreign key."
+msgstr "<literal>lazy</literal> (ìµì
- ëí´í¸ë <literal>proxy</literal>): ëí´í¸ë¡ í쪽 ë ì°ê´ë¤ì´ íë½ì ëë¤. <literal>lazy=\"no-proxy\"</literal>ë ì¸ì¤í´ì¤ ë³ìê° ì²ì ì ê·¼ë ë ê·¸ íë¡í¼í°ê° lazily íì¹ë ê²ìì ì§ì íë¤(ë¹ë-ì ë°ì´í¸ì½ë ìë¨ì íìë¡ íë¤). <literal>lazy=\"false\"</literal>ë ê·¸ ì°ê´ë¤ì´ íì eagerly íì¹ë ê²ìì ì§ì íë¤. <emphasis>ë§ì¼ <literal>constrained=\"false\"</literal>ì¸ ê²½ì°ì, íë½ì±ì ë¶ê°ë¥íê³ Hibernateë ê·¸ ì°ê´ì eager íì¹ìí¬ ê²ì´ë¤!</emphasis>"
+
+#: index.docbook:1592
+msgid "Setting a value of the <literal>cascade</literal> attribute to any meaningful value other than <literal>none</literal> will propagate certain operations to the associated object. The meaningful values are the names of Hibernate's basic operations, <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal>, as well as the special values <literal>delete-orphan</literal> and <literal>all</literal> and comma-separated combinations of operation names, for example, <literal>cascade=\"persist,merge,evict\"</literal> or <literal>cascade=\"all,delete-orphan\"</literal>. See <xref linkend=\"objectstate-transitive\"/> for a full explanation. Note that single valued associations (many-to-one and one-to-one associations) do not support orphan delete."
+msgstr "<literal>entity-name</literal> (ìµì
): ì°ê´ë í´ëì¤ì ìí°í° ì´ë¦."
+
+#: index.docbook:1605
+msgid "A typical <literal>many-to-one</literal> declaration looks as simple as this:"
+msgstr "one-to-one ì°ê´ê´ê³ìë ë ê°ì§ ë³ì¢
ì´ ì¡´ì¬íë¤:"
+
+#: index.docbook:1609
+msgid "<![CDATA[<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>]]>"
+msgstr "íë¼ì´ë¨¸ë¦¬ í¤ ì°ê´ê´ê³ë¤"
+
+#: index.docbook:1611
+msgid "The <literal>property-ref</literal> attribute should only be used for mapping legacy data where a foreign key refers to a unique key of the associated table other than the primary key. This is an ugly relational model. For example, suppose the <literal>Product</literal> class had a unique serial number, that is not the primary key. (The <literal>unique</literal> attribute controls Hibernate's DDL generation with the SchemaExport tool.)"
+msgstr "ì ì¼ foreign í¤ ì°ê´ê´ê³ë¤"
+
+#: index.docbook:1620
+msgid "<![CDATA[<property name=\"serialNumber\" unique=\"true\" type=\"string\" column=\"SERIAL_NUMBER\"/>]]>"
+msgstr "íë¼ì´ë¨¸ë¦¬ í¤ ì°ê´ë¤ì í¹ë³í í
ì´ë¸ 컬ë¼ì íìë¡ íì§ ìëë¤; ë§ì¼ ë ê°ì íë¤ì´ ê·¸ ì°ê´ì ìí´ ê´ê³ì§ìì§ë©´, ë ê°ì í
ì´ë¸ íë¤ì ëì¼í íë¼ì´ë¨¸ë¦¬ í¤ ê°ì ê³µì íë¤. ë°ë¼ì ë§ì¼ ë ê°ì ê°ì²´ë¤ì´ íë¼ì´ë¨¸ë¦¬ í¤ ì°ê´ì ìí´ ê´ê³ì§ìì§ëë¡ ë¹ì ì´ ìí ê²½ì°, ë¹ì ì ê·¸ê²ë¤ì ëì¼í ìë³ì ê°ì´ í ë¹ëëë¡ í´ì¼ íë¤!"
+
+#: index.docbook:1622
+msgid "Then the mapping for <literal>OrderItem</literal> might use:"
+msgstr "íë¼ì´ë¨¸ë¦¬ í¤ ì°ê´ì ëí´, ë¤ì 매íë¤ì <literal>Employee</literal>ì <literal>Person</literal> ê°ê°ì ì¶ê°íë¼."
+
+#: index.docbook:1626
+msgid "<![CDATA[<many-to-one name=\"product\" property-ref=\"serialNumber\" column=\"PRODUCT_SERIAL_NUMBER\"/>]]>"
+msgstr "<![CDATA[<one-to-one name=\"person\" class=\"Person\"/>]]>"
+
+#: index.docbook:1628
+msgid "This is certainly not encouraged, however."
+msgstr "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>]]>"
+
+#: index.docbook:1632
+msgid "If the referenced unique key comprises multiple properties of the associated entity, you should map the referenced properties inside a named <literal><properties></literal> element."
+msgstr "ì´ì ì°ë¦¬ë PERSON ê³¼ EMPLOYEE í
ì´ë¸ë¤ìì ê´ê³ì§ìì§ íë¤ì íë¼ì´ë¨¸ë¦¬ í¤ë¤ì´ ëì¼í¨ì íì¤í í´ì¼ íë¤! ì°ë¦¬ë <literal>foreign</literal>ë¡ ëª
ëª
ëë í¹ë³í Hibernate ìë³ì ìì± ë°©ë를 ì¬ì©íë¤:"
+
+#: index.docbook:1637
+msgid "If the referenced unique key is the property of a component, you may specify a property path:"
+msgstr ""
+ "<![CDATA[<class name=\"person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">employee</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " ...\n"
+ " <one-to-one name=\"employee\"\n"
+ " class=\"Employee\"\n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:1641
+msgid "<![CDATA[<many-to-one name=\"owner\" property-ref=\"identity.ssn\" column=\"OWNER_SSN\"/>]]>"
+msgstr "ê·¸ë <literal>Person</literal>ì ìë¡ì´ ì ì¥ë ì¸ì¤í´ì¤ë ê·¸ <literal>Person</literal>ì <literal>employee</literal> íë¡í¼í°ì ëí´ ì°¸ì¡°ë <literal>Employee</literal> ì¸ì¤í´ì¤ì ëì¼í íë¼ì´ë¨¸ë¦¬ í¤ë¥¼ í ë¹ë°ëë¤."
+
+#: index.docbook:1646
+msgid "one-to-one"
+msgstr "ë¬ë¦¬, <literal>Employee</literal>ë¡ë¶í° <literal>Person</literal>ì¼ë¡ì ì ì¼ ì»¨ì¤í¸ë ì¸í¸ë¥¼ ê°ì§ íëì foreign keyë ë¤ìê³¼ ê°ì´ ííë ì ìë¤:"
+
+#: index.docbook:1648
+msgid "A one-to-one association to another persistent class is declared using a <literal>one-to-one</literal> element."
+msgstr "<![CDATA[<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" unique=\"true\"/>]]>"
+
+#: index.docbook:1666
+msgid ""
+ "<![CDATA[<one-to-one\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " constrained=\"true|false\"\n"
+ " fetch=\"join|select\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " formula=\"any SQL expression\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr "ê·¸ë¦¬ê³ ì´ ì°ê´ì ë¤ìì <literal>Person</literal> 매íì ì¶ê°í¨ì¼ë¡ì¨ ìë°©í¥ì´ ë ì ìë¤:"
+
+#: index.docbook:1680
+msgid "<literal>cascade</literal> (optional) specifies which operations should be cascaded from the parent object to the associated object."
+msgstr ""
+ "<![CDATA[<natural-id mutable=\"true|false\"/>\n"
+ " <property ... />\n"
+ " <many-to-one ... />\n"
+ " ......\n"
+ "</natural-id>]]>"
+
+#: index.docbook:1686
+msgid "<literal>constrained</literal> (optional) specifies that a foreign key constraint on the primary key of the mapped table references the table of the associated class. This option affects the order in which <literal>save()</literal> and <literal>delete()</literal> are cascaded, and determines whether the association may be proxied (it is also used by the schema export tool)."
+msgstr "ë¹ë¡ ì°ë¦¬ê° íë¼ì´ë¨¸ë¦¬ í¤ë¤ë¡ì ëì©í¤ë¤ì ì¬ì©íë ê²ì ê¶ì¥íìì§ë¼ë, ë¹ì ì ì¬ì í 모ë ìí°í°ë¤ì ëí natural í¤ë¤ì ìë³íê³ ì ìí ê²ì´ë¤. narutal í¤ë ì ì¼(unique)íê³ nullì´ ìë íë¡í¼í° ëë íë¡í¼í°ë¤ì ì¡°í©ì´ë¤. ê·¸ê²ì´ ëí ë¶ë³íë ê²ì¼ ê²½ì°ê° ë ì¢ë¤. <literal><natural-id></literal> ìì ë´ë¶ì ìë natural í¤ì íë¡í¼í°ë¤ì 매ííë¼. Hibernateë íìì ì¸ ì ì¼ í¤ì null íì©ê°ë¥í 컨ì¤í¸ë ì¸í¸ë¤ì ìì±ìí¬ ê²ì´ê³ , ë¹ì ì 매íì ë³´ë¤ ìê° ì¤ëª
ì ì´ê² ë ê²ì´ë¤."
+
+#: index.docbook:1701
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to the primary key of this class. If not specified, the primary key of the associated class is used."
+msgstr "ì´ ë§¤íì natural íë¼ì´ë¨¸ë¦¬ í¤ë¤ì ê°ì§ ìí°í°ë¤ì ìí ì©ëë¡ ê³ ìë ê²ì ìëë¤."
+
+#: index.docbook:1714
+msgid "<literal>formula</literal> (optional): Almost all one to one associations map to the primary key of the owning entity. In the rare case that this is not the case, you may specify a some other column, columns or expression to join on using an SQL formula. (See <literal>org.hibernate.test.onetooneformula</literal> for an example.)"
+msgstr "component, dynamic-component"
+
+#: index.docbook:1722
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched. <emphasis>Note that if <literal>constrained=\"false\"</literal>, proxying is impossible and Hibernate will eager fetch the association!</emphasis>"
+msgstr "<literal><component></literal> ììë ìì ê°ì²´ì íë¡í¼í°ë¤ì ë¶ëª¨ í´ëì¤ì ëí í
ì´ë¸ì 컬ë¼ë¤ë¡ 매íìí¨ë¤. ì»´í¬ëí¸ë¤ì ê·¸ê²ë¤ ìì ì íë¡í¼í°ë¤, ì»´í¬ëí¸ë¤, ëë ì½ë ì
ë¤ì ì ì¸íë¤. ì´ë \"ì»´í¬ëí¸ë¤\"ì ë³´ë¼."
+
+#: index.docbook:1740
+msgid "There are two varieties of one-to-one association:"
+msgstr "<literal>name</literal>: íë¡í¼í°ì ì´ë¦."
+
+#: index.docbook:1744
+msgid "primary key associations"
+msgstr "<literal>class</literal> (ìµì
- ëí´í¸ë reflectionì ìí´ ê²°ì ë íë¡í¼í° íì
): ì»´í¬ëí¸(ìì) í´ëì¤ì ì´ë¦."
+
+#: index.docbook:1747
+msgid "unique foreign key associations"
+msgstr "<literal>insert</literal>: 매íë 컬ë¼ë¤ì´ SQL <literal>INSERT</literal>ë¤ ìì ëíëì¼ íëê°?"
+
+#: index.docbook:1752
+msgid "Primary key associations don't need an extra table column; if two rows are related by the association then the two table rows share the same primary key value. So if you want two objects to be related by a primary key association, you must make sure that they are assigned the same identifier value!"
+msgstr "<literal>update</literal>: 매íë 컬ë¼ë¤ì´ SQL <literal>UPDATE</literal>ë¤ ìì ëíëì¼ íëê°?"
+
+#: index.docbook:1759
+msgid "For a primary key association, add the following mappings to <literal>Employee</literal> and <literal>Person</literal>, respectively."
+msgstr "<literal>access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° íë¡í¼í° ê°ì ì¡ì¸ì¤íëë° ì¬ì©í ë°©ë."
+
+#: index.docbook:1764
+msgid "<![CDATA[<one-to-one name=\"person\" class=\"Person\"/>]]>"
+msgstr "<literal>lazy</literal> (ìµì
- ëí´í¸ë <literal>false</literal>): ì¸ì¤í´ì¤ ë³ìê° ì²ìì¼ë¡ ì¡ì¸ì¤ë ë ì´ ì»´í¬ëí¸ê° lazily(ë리ê²) íì¹ëì´ì¼ íëì§ ì¬ë¶ë¥¼ ì§ì íë¤ (ë¹ë ì ë°ì´í¸ì½ë ìë¨ì íìë¡ íë¤)."
+
+#: index.docbook:1765
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>]]>"
+msgstr "<literal>optimistic-lock</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): ì´ ì»´í¬ëí¸ì ëí ì
ë°ì´í¸ë¤ì´ optimistic ì ê¸ì íëíë ê²ì íìë¡ íëì§ ì¬ë¶ë¥¼ ì§ì íë¤. ë¬ë¦¬ ë§í´ ì´ íë¡í¼í°ê° dirty ì¼ ë ë²ì ì¦ê°ê° ë°ìí ê²ì¸ì§ ì¬ë¶ë¥¼ ê²°ì íë¤."
+
+#: index.docbook:1767
+msgid "Now we must ensure that the primary keys of related rows in the PERSON and EMPLOYEE tables are equal. We use a special Hibernate identifier generation strategy called <literal>foreign</literal>:"
+msgstr "<literal>unique</literal> (ìµì
- ëí´í¸ë <literal>false</literal>): ì ì¼ ì»¨ì¤í¸ë ì¸í¸ê° ì»´í¬ëí¸ì 모ë 매íë 컬ë¼ë¤ì ëí´ ì¡´ì¬íëì§ ì¬ë¶ë¥¼ ì§ì íë¤."
+
+#: index.docbook:1773
+msgid ""
+ "<![CDATA[<class name=\"person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">employee</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " ...\n"
+ " <one-to-one name=\"employee\"\n"
+ " class=\"Employee\"\n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr "ìì <literal><property></literal> íê·¸ë¤ì ìì í´ëì¤ì íë¡í¼í°ë¤ì í
ì´ë¸ 컬ë¼ë¤ë¡ 매íìí¨ë¤."
+
+#: index.docbook:1775
+msgid "A newly saved instance of <literal>Person</literal> is then assigned the same primary key value as the <literal>Employee</literal> instance refered with the <literal>employee</literal> property of that <literal>Person</literal>."
+msgstr "<literal><component></literal> ììë ì»´í¬ëí¸ í´ëì¤ì íë¡í¼í°ë¥¼ í¬í¨íë ìí°í°ì ëí 참조ë¡ì 매íìí¤ë <literal><parent></literal> ìë¸ìì를 íì©íë¤."
+
+#: index.docbook:1781
+msgid "Alternatively, a foreign key with a unique constraint, from <literal>Employee</literal> to <literal>Person</literal>, may be expressed as:"
+msgstr "<literal><dynamic-component></literal> ììë ì»´í¬ëí¸ë¡ì 매íë <literal>Map</literal>ì íì©íë¤. ì¬ê¸°ì íë¡í¼í° ì´ë¦ë¤ì mapì í¤ë¤ì 참조íë¤. <xref linkend=\"components-dynamic\"/>ì ë³´ë¼."
+
+#: index.docbook:1786
+msgid "<![CDATA[<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" unique=\"true\"/>]]>"
+msgstr "properties"
+
+#: index.docbook:1788
+msgid "And this association may be made bidirectional by adding the following to the <literal>Person</literal> mapping:"
+msgstr "<literal><properties></literal> ììë í´ëì¤ì íë¡í¼í°ë¤ì ëª
ëª
ë, ë
¼ë¦¬ì 그룹íì ëí ì ì를 íì©íë¤. ê·¸ 구조ì ëí ê°ì¥ ì¤ìí ì¬ì©ì ê·¸ê²ì´ íë¡í¼í°ë¤ì ì¡°í©ì´ <literal>property-ref</literal>ì ëìì´ ëë ê²ì íì©í´ì¤ë¤ë ì ì´ë¤. ëí ê·¸ê²ì ë¤ì¤ ì»¬ë¼ ì ì¼ ì»¨ì¤í¸ë ì¸ë를 ì ìíë í¸ë¦¬í ë°©ë²ì´ë¤."
+
+#: index.docbook:1793
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" property-ref=\"person\"/>]]>"
+msgstr ""
+ "<![CDATA[<properties \n"
+ " name=\"logicalName\" \n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ ">\n"
+ " \n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</properties>]]>"
+
+#: index.docbook:1798
+msgid "natural-id"
+msgstr "<literal>name</literal>: 그룹íì ë
¼ë¦¬ì ì´ë¦ - ì¤ì íë¡í¼í° ì´ë¦ì´ <emphasis>ìëë¤</emphasis>."
+
+#: index.docbook:1800
+msgid ""
+ "<![CDATA[<natural-id mutable=\"true|false\"/>\n"
+ " <property ... />\n"
+ " <many-to-one ... />\n"
+ " ......\n"
+ "</natural-id>]]>"
+msgstr "<literal>insert</literal>: 매íë 컬ë¼ë¤ì´ SQL <literal>INSERT</literal>ë¤ ë´ì ëíë ê²ì¸ê°?"
+
+#: index.docbook:1802
+msgid "Even though we recommend the use of surrogate keys as primary keys, you should still try to identify natural keys for all entities. A natural key is a property or combination of properties that is unique and non-null. If it is also immutable, even better. Map the properties of the natural key inside the <literal><natural-id></literal> element. Hibernate will generate the necessary unique key and nullability constraints, and your mapping will be more self-documenting."
+msgstr "<literal>update</literal>: 매íë 컬ë¼ë¤ì´ SQL <literal>UPDATE</literal>ë¤ ë´ì ëíë ê²ì¸ê°?"
+
+#: index.docbook:1811
+msgid "We strongly recommend that you implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the natural key properties of the entity."
+msgstr "<literal>optimistic-lock</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): ì´ë¤ íë¡í¼í°ë¤ì ëí ì
ë°ì´í¸ë¤ì´ optimistic ì ê¸ì íëì íìë¡ íëì§ ì¬ë¶ë¥¼ ì§ì íë¤. ë¬ë¦¬ ë§í´ ì´ íë¡í¼í°ê° dirty ì¼ ë ë²ì ì¦ê°ê° ë°ìí ê²ì¸ì§ ì¬ë¶ë¥¼ ê²°ì íë¤."
+
+#: index.docbook:1816
+msgid "This mapping is not intended for use with entities with natural primary keys."
+msgstr "<literal>unique</literal> (ìµì
- ëí´í¸ë <literal>false</literal>): ì ì¼ ì»¨ì¤í¸ë ì¸í¸ê° ì»´í¬ëí¸ì 모ë 매íë 컬ë¼ë¤ì ëí´ ì¡´ì¬íëì§ ì¬ë¶ë¥¼ ì§ì íë¤."
+
+#: index.docbook:1822
+msgid "<literal>mutable</literal> (optional, defaults to <literal>false</literal>): By default, natural identifier properties as assumed to be immutable (constant)."
+msgstr "ì를 ë¤ì´, ë§ì¼ ì°ë¦¬ê° ë¤ì <literal><properties></literal> 매íì ê°ì§ ê²½ì°:"
+
+#: index.docbook:1832
+msgid "component, dynamic-component"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"personNumber\"/>\n"
+ " ...\n"
+ " <properties name=\"name\" \n"
+ " unique=\"true\" update=\"false\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </properties>\n"
+ "</class>]]>"
+
+#: index.docbook:1834
+msgid "The <literal><component></literal> element maps properties of a child object to columns of the table of a parent class. Components may, in turn, declare their own properties, components or collections. See \"Components\" below."
+msgstr "ê·¸ ë ì°ë¦¬ë íë¼ì´ë¨¸ë¦¬ í¤ê° ìë, <literal>Person</literal> í
ì´ë¸ì ì´ ì ì¼ í¤ë¥¼ 참조íë ì´ë¤ 리거ì ë°ì´í° ì°ê´ì ê°ì§ ì ìë¤:"
+
+#: index.docbook:1852
+msgid ""
+ "<![CDATA[<component\n"
+ " name=\"propertyName\"\n"
+ " class=\"className\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</component>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"person\" \n"
+ " class=\"Person\" property-ref=\"name\">\n"
+ " <column name=\"firstName\"/>\n"
+ " <column name=\"initial\"/>\n"
+ " <column name=\"lastName\"/>\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:1860
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the component (child) class."
+msgstr "subclass"
+
+#: index.docbook:1866, index.docbook:1955
+msgid "<literal>insert</literal>: Do the mapped columns appear in SQL <literal>INSERT</literal>s?"
+msgstr "ë§ì§ë§ì¼ë¡, ë¤íì± ììì±ì ë£¨í¸ ìì í´ëì¤ì ëí ê°ê°ì ìë¸í´ëì¤ ì ì¸ì íìë¡ íë¤.(ê¶ì¥ëë) table-per-class-hierarchy(í
ì´ë¸ ë¹ í´ëì¤ ê³ì¸µêµ¬ì¡°) 매í ë°©ëì ê²½ì°, <literal><subclass></literal> ì ì¸ì´ ì¬ì©ëë¤."
+
+#: index.docbook:1872, index.docbook:1961
+msgid "<literal>update</literal>: Do the mapped columns appear in SQL <literal>UPDATE</literal>s?"
+msgstr ""
+ "<![CDATA[<subclass\n"
+ " name=\"ClassName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " extends=\"SuperclassName\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</subclass>]]>"
+
+#: index.docbook:1884
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this component should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr "<literal>discriminator-value</literal> (ìµì
- ëí´í¸ë í´ëì¤ ì´ë¦): ê°ê°ì ìë¸í´ëì¤ë¤ì 구ë¶ì§ë ê°."
+
+#: index.docbook:1891
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this component do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr "<literal>proxy</literal> (ìµì
): lazy ì´ê¸°í íë½ìë¤ì ì¬ì©íëë° í´ëì¤ ëë ì¸í°íì´ì¤ë¥¼ ì§ì íë¤."
+
+#: index.docbook:1899, index.docbook:1975
+msgid "<literal>unique</literal> (optional - defaults to <literal>false</literal>): Specifies that a unique constraint exists upon all mapped columns of the component."
+msgstr "<literal>lazy</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): <literal>lazy=\"false\"</literal> ì¤ì ì lazy íì¹ì ì¬ì©ì ë¶ê°ë¥íê² ë§ë ë¤."
+
+#: index.docbook:1908
+msgid "The child <literal><property></literal> tags map properties of the child class to table columns."
+msgstr "ê°ê°ì ìë¸í´ëì¤ë ê·¸ê² ìì ì ìì íë¡í¼í°ë¤ê³¼ ìë¸í´ëì¤ë¤ì ì ì¸í ê²ì´ë¤. <literal><version></literal> íë¡í¼í°ì <literal><id></literal> íë¡í¼í°ë ë£¨í¸ í´ëì¤ë¡ë¶í° ììëë¤ê³ ê°ì ëë¤. ê³ì¸µêµ¬ì¡° ë´ìì ê°ê°ì ìë¸í´ëì¤ë ì ì¼í <literal>discriminator-value</literal>를 ì ìí´ì¼ íë¤. noneì´ ì§ì ë ê²½ì°, ì ì²´ ììì´ê° ë¶ì ìë° í´ëì¤ ì´ë¦ì´ ì¬ì©ëë¤."
+
+#: index.docbook:1913
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr "ìì 매íë¤ì ëí ì ë³´ë <xref linkend=\"inheritance\"/>ì ë³´ë¼."
+
+#: index.docbook:1919
+msgid "The <literal><dynamic-component></literal> element allows a <literal>Map</literal> to be mapped as a component, where the property names refer to keys of the map, see <xref linkend=\"components-dynamic\"/>."
+msgstr "joined-subclass"
+
+#: index.docbook:1928
+msgid "properties"
+msgstr "ë¤ë¥¸ ë°©ë²ì¼ë¡ ê°ê°ì ìë¸í´ëì¤ë ê·¸ê² ìì ì´ í
ì´ë¸ë¡ 매íë ì ìë¤(table-per-subclass 매í ë°©ë). ììë ìíë ìí¼í´ëì¤ì í
ì´ë¸ê³¼ ì¡°ì¸í¨ì¼ë¡ì¨ ê²ìëë¤. ì°ë¦¬ë <literal><joined-subclass></literal> ìì를 ì¬ì©íë¤."
+
+#: index.docbook:1930
+msgid "The <literal><properties></literal> element allows the definition of a named, logical grouping of properties of a class. The most important use of the construct is that it allows a combination of properties to be the target of a <literal>property-ref</literal>. It is also a convenient way to define a multi-column unique constraint."
+msgstr ""
+ "<![CDATA[<joined-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <key .... >\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</joined-subclass>]]>"
+
+#: index.docbook:1946
+msgid ""
+ "<![CDATA[<properties\n"
+ " name=\"logicalName\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</properties>]]>"
+msgstr "<literal>name</literal>: ìë¸í´ëì¤ì ì ì²´ ììì´ê° ë¶ì í´ëì¤ ëª
."
+
+#: index.docbook:1949
+msgid "<literal>name</literal>: The logical name of the grouping - <emphasis>not</emphasis> an actual property name."
+msgstr "<literal>table</literal>: ìë¸í´ëì¤ í
ì´ë¸ì ì´ë¦."
+
+#: index.docbook:1967
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to these properties do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when these properties are dirty."
+msgstr "íë³ì(discriminator) 컬ë¼ì ì´ ë§¤í ë°©ëì íìíì§ ìë¤. íì§ë§ ê°ê°ì ìë¸í´ëì¤ë <literal><key></literal> ìì를 ì¬ì©íì¬ ê°ì²´ ìë³ì를 ë³´ê´íë í
ì´ë¸ 컬ë¼ì ì ì¸í´ì¼ íë¤. ì´ ì¥ì ìì ë¶ë¶ì ìë 매íì ë¤ìê³¼ ê°ì´ ë¤ì ìì±ë ê²ì´ë¤:"
+
+#: index.docbook:1984
+msgid "For example, if we have the following <literal><properties></literal> mapping:"
+msgstr "ìì 매íë¤ì ëí ì ë³´ë <xref linkend=\"inheritance\"/>ì ë³´ë¼."
+
+#: index.docbook:1988
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"personNumber\"/>\n"
+ " ...\n"
+ " <properties name=\"name\"\n"
+ " unique=\"true\" update=\"false\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </properties>\n"
+ "</class>]]>"
+msgstr "union-subclass"
+
+#: index.docbook:1990
+msgid "Then we might have some legacy data association which refers to this unique key of the <literal>Person</literal> table, instead of to the primary key:"
+msgstr "ì 3ì ìµì
ì ìì ê³ì¸µêµ¬ì¡°ì concrete í´ëì¤ë¤ ë§ì í
ì´ë¸ë¤ë¡ 매ííë ê²ì´ë¤ (table-per-concrete-class ë°©ë). ì¬ê¸°ì ê°ê°ì í
ì´ë¸ì ììë ìí를 í¬í¨íì¬ í´ëì¤ì 모ë ìì ìí를 ì ìíë¤. Hibernateìì, ê·¸ê²ì ê·¸ë° ìì ê³ì¸µêµ¬ì¡°ë¤ì ëª
ìì ì¼ë¡ 매ííëë° íìì ì´ì§ ìë¤. ë¹ì ì ë³ëì <literal><class></literal> ì ì¸ì ê°ì§ ê°ê°ì í´ëì¤ë¥¼ ê°ë¨í 매íìí¬ ì ìë¤. íì§ë§ ë¹ì ì´ ë¤íì± ì°ê´ê´ê³ë¤(ì를 ë¤ë©´ ë¹ì ì ê³ì¸µêµ¬ì¡°ì ìí¼í´ëì¤ì ëí ì°ê´)ì ì¬ì©íê³ ì ìí ê²½ì°, ë¹ì ì <literal><union-subclass></literal> 매íì ì¬ì©í íìê° ìë¤."
+
+#: index.docbook:1995
+msgid ""
+ "<![CDATA[<many-to-one name=\"person\"\n"
+ " class=\"Person\" property-ref=\"name\">\n"
+ " <column name=\"firstName\"/>\n"
+ " <column name=\"initial\"/>\n"
+ " <column name=\"lastName\"/>\n"
+ "</many-to-one>]]>"
+msgstr ""
+ "<![CDATA[<union-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " abstract=\"true|false\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</union-subclass>]]>"
+
+#: index.docbook:1997
+msgid "We don't recommend the use of this kind of thing outside the context of mapping legacy data."
+msgstr "<literal>name</literal>: ìë¸í´ëì¤ì ì ì²´ ììì´ê° ë¶ì í´ëì¤ ëª
."
+
+#: index.docbook:2005
+msgid "subclass"
+msgstr "<literal>table</literal>: ìë¸í´ëì¤ í
ì´ë¸ì ì´ë¦."
+
+#: index.docbook:2007
+msgid "Finally, polymorphic persistence requires the declaration of each subclass of the root persistent class. For the table-per-class-hierarchy mapping strategy, the <literal><subclass></literal> declaration is used."
+msgstr "<literal>proxy</literal> (ìµì
): íë½ìë¤ì lazy ì´ê¸°í ìí¤ëë° ì¬ì©í í´ëì¤ ëë ì¸í°íì´ì¤ë¥¼ ì§ì íë¤."
+
+#: index.docbook:2020
+msgid ""
+ "<![CDATA[<subclass\n"
+ " name=\"ClassName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " extends=\"SuperclassName\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</subclass>]]>"
+msgstr "<literal>lazy</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): <literal>lazy=\"false\"</literal> ì¤ì ì lazy íì¹ì ì¬ì©ë¶ê°ë¥íê² ë§ë ë¤."
+
+#: index.docbook:2023, index.docbook:2081, index.docbook:2144
+msgid "<literal>name</literal>: The fully qualified class name of the subclass."
+msgstr "ì´ ë§¤í ë°©ëìë íë³ì 컬ë¼ì´ë í¤ ì»¬ë¼ì´ íìíì§ ìë¤."
+
+#: index.docbook:2028
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses."
+msgstr "ìì 매íë¤ì ëí ì ë³´ë <xref linkend=\"inheritance\"/>ì ë³´ë¼."
+
+#: index.docbook:2034, index.docbook:2091, index.docbook:2154
+msgid "<literal>proxy</literal> (optional): Specifies a class or interface to use for lazy initializing proxies."
+msgstr "join"
+
+#: index.docbook:2040, index.docbook:2097, index.docbook:2160
+msgid "<literal>lazy</literal> (optional, defaults to <literal>true</literal>): Setting <literal>lazy=\"false\"</literal> disables the use of lazy fetching."
+msgstr "<literal><join></literal>ìì를 ì¬ì©íë©´, í
ì´ë¸ë¤ ì¬ì´ì 1ëì¼ ê´ê³ê° ì¡´ì¬í ë, íëì í´ëì¤ì ìí íë¡í¼í°ë¤ì ì¬ë¬ í
ì´ë¸ë¤ë¡ 매íìí¤ë ê²ì´ ê°ë¥íë¤."
+
+#: index.docbook:2048
+msgid "Each subclass should declare its own persistent properties and subclasses. <literal><version></literal> and <literal><id></literal> properties are assumed to be inherited from the root class. Each subclass in a heirarchy must define a unique <literal>discriminator-value</literal>. If none is specified, the fully qualified Java class name is used."
+msgstr ""
+ "<![CDATA[<join\n"
+ " table=\"tablename\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " fetch=\"join|select\"\n"
+ " inverse=\"true|false\"\n"
+ " optional=\"true|false\">\n"
+ " \n"
+ " <key ... />\n"
+ " \n"
+ " <property ... />\n"
+ " ...\n"
+ "</join>]]>"
+
+#: index.docbook:2056, index.docbook:2114, index.docbook:2172
+msgid "For information about inheritance mappings, see <xref linkend=\"inheritance\"/>."
+msgstr "<literal>table</literal>: ì¡°ì¸ë í
ì´ë¸ì ì´ë¦."
+
+#: index.docbook:2063
+msgid "joined-subclass"
+msgstr "<literal>schema</literal> (ìµì
): ë£¨í¸ <literal><hibernate-mapping></literal> ììì ìí´ ì§ì ë ì¤í¤ë§ ì´ë¦ì ì¤ë²ë¼ì´ë ìí¨ë¤"
+
+#: index.docbook:2065
+msgid "Alternatively, each subclass may be mapped to its own table (table-per-subclass mapping strategy). Inherited state is retrieved by joining with the table of the superclass. We use the <literal><joined-subclass></literal> element."
+msgstr "<literal>catalog</literal> (ìµì
): ë£¨í¸ <literal><hibernate-mapping></literal> ììì ìí´ ì§ì ë ì¹´íë¡ ì´ë¦ì ì¤ë²ë¼ì´ë ìí¨ë¤."
+
+#: index.docbook:2078
+msgid ""
+ "<![CDATA[<joined-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <key .... >\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</joined-subclass>]]>"
+msgstr "<literal>fetch</literal> (ìµì
- ëí´í¸ë <literal>join</literal>): <literal>join</literal>ì¼ë¡ ì¤ì ë ê²½ì°, ëí´í¸ë¡ Hibernateë íëì í´ëì¤ ëë ê·¸ê²ì ìí¼ í´ëì¤ë¤ì ìí´ ì ìë <literal><join></literal>ì ê²ìíëë° inner joinì ì¬ì©íê³ ìë¸í´ëì¤ì ìí´ ì ìë <literal><join></literal>ì ê²ìíëë° outer joinì ì¬ì©í ê²ì´ë¤. ë§ì¼ <literal>select</literal>ë¡ ì¤ì í ê²½ì°, Hibernateë ìë¸í´ëì¤ ìì ì ìë <literal><join></literal>ì ëí´ sequential select를 ì¬ì©í ê²ì´ê³ , ê·¸ê²ì í íì´ ìë¸í´ëì¤ì ì¸ì¤í´ì¤ë¥¼ íííë ê²ì¼ë¡ íëª
ëë ê²½ì°ìë§ ëª
ë ¹ì´ ë´ë ¤ì§ ê²ì´ë¤. inner joinë¤ì ì¬ì í í´ëì¤ì ê·¸ê²ì ìí¼í´ëì¤ë¤ì ìí´ ì ìë <literal><join></literal>ì ê²ìíëë° ì¬ì©ë ê²ì´ë¤."
+
+#: index.docbook:2086, index.docbook:2149
+msgid "<literal>table</literal>: The name of the subclass table."
+msgstr "<literal>optional</literal> (ìµì
- ëí´í¸ë <literal>false</literal>): ì´ì© ê°ë¥í ê²½ì°, Hibernateë ì´ ì¡°ì¸ì ìí´ ì ìë íë¡í¼í°ë¤ì´ nullì´ ìë ê²½ì°ìë§ í íì ì½ì
ìí¬ ê²ì´ê³ ê·¸ íë¡í¼í°ë¤ì ê²ìíëë° outer joinì íì ì¬ì©í ê²ì´ë¤."
+
+#: index.docbook:2105
+msgid "No discriminator column is required for this mapping strategy. Each subclass must, however, declare a table column holding the object identifier using the <literal><key></literal> element. The mapping at the start of the chapter would be re-written as:"
+msgstr "ì´ í¹ì§ì ì주 리거ì ë°ì´í° 모íë¤ì ëí´ìë§ ì ì©íê³ , ì°ë¦¬ë í´ëì¤ë¤ê³¼ ì ì ì ë ëë©ì¸ 모í ë³´ë¤ ë ì ì í
ì´ë¸ë¤ì ê¶ì¥íë¤. íì§ë§ ë· ë¶ë¶ì ì¤ëª
ëì´ ìë¯ì´, ê·¸ê²ì íëì ê³ì¸µêµ¬ì¡° ë´ì ìë ìì 매í ë°©ëë¤ ì¬ì´ë¥¼ ì ííë ê²ì ì ì©íë¤."
+
+#: index.docbook:2112
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" table=\"CATS\">\n"
+ " <id name=\"id\" column=\"uid\" type=\"long\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " <property name=\"birthdate\" type=\"date\"/>\n"
+ " <property name=\"color\" not-null=\"true\"/>\n"
+ " <property name=\"sex\" not-null=\"true\"/>\n"
+ " <property name=\"weight\"/>\n"
+ " <many-to-one name=\"mate\"/>\n"
+ " <set name=\"kittens\">\n"
+ " <key column=\"MOTHER\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ " <joined-subclass name=\"DomesticCat\" table=\"DOMESTIC_CATS\">\n"
+ " <key column=\"CAT\"/>\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </joined-subclass>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"eg.Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr "<title>key</title>"
+
+#: index.docbook:2121
+msgid "union-subclass"
+msgstr ""
+ "<![CDATA[<key\n"
+ " column=\"columnname\"\n"
+ " on-delete=\"noaction|cascade\"\n"
+ " property-ref=\"propertyName\"\n"
+ " not-null=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ "/>]]>"
+
+#: index.docbook:2123
+msgid "A third option is to map only the concrete classes of an inheritance hierarchy to tables, (the table-per-concrete-class strategy) where each table defines all persistent state of the class, including inherited state. In Hibernate, it is not absolutely necessary to explicitly map such inheritance hierarchies. You can simply map each class with a separate <literal><class></literal> declaration. However, if you wish use polymorphic associations (e.g. an association to the superclass of your hierarchy), you need to use the <literal><union-subclass></literal> mapping."
+msgstr "<literal>column</literal> (ìµì
): foreign key 컬ë¼ì ì´ë¦. ì´ê²ì ëí ë´í¬ë <literal><column></literal> ìì(ë¤)ì ìí´ ì§ì ë ì ìë¤."
+
+#: index.docbook:2141
+msgid ""
+ "<![CDATA[<union-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " abstract=\"true|false\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</union-subclass>]]>"
+msgstr "<literal>on-delete</literal> (ìµì
- ëí´í¸ë <literal>noaction</literal>): foreign key 컨ì¤í¸ë ì¸í¸ê° ë°ì´í°ë² ì´ì¤ ë 벨ì cascade delete를 ì¬ì©ê°ë¥íëë¡ í ê²ì¸ì§ ì¬ë¶ë¥¼ ì§ì íë¤."
+
+#: index.docbook:2168
+msgid "No discriminator column or key column is required for this mapping strategy."
+msgstr "ì°ë¦¬ë delete í¼í¬ë¨¼ì¤ê° ì¤ìí ìì¤í
ë¤ì ëí´ ê¶ì¥íê³ , 모ë í¤ë¤ì <literal>on-delete=\"cascade\"</literal>ë¡ ì ìëê³ , Hibernateë ë§ì <literal>DELETE</literal> 문ì¥ë¤ ëì ì, ë°ì´í°ë² ì´ì¤ ë 벨ì <literal>ON CASCADE DELETE</literal> 컨ì¤í¸ë ì¸í¸ë¥¼ ì¬ì©í ê²ì´ë¤. ì´ í¹ì§ì Hibernateì íµìì ì¸ ë²ì íë ë°ì´í°ì ëí optimistic ì ê¸ ë°©ë를 무ìíë¤ë ì ì ìê³ ìì´ë¼."
+
+#: index.docbook:2179
+msgid "join"
+msgstr "column ììì formula ìì"
+
+#: index.docbook:2181
+msgid "Using the <literal><join></literal> element, it is possible to map properties of one class to several tables, when there's a 1-to-1 relationship between the tables."
+msgstr "column ìì±ì íì©íë ììì 매í ììë ëìì ì¼ë¡ íëì <literal><column></literal> ìë¸ìì를 ìì©í ê²ì´ë¤. ë¹ì·íê² <literal><formula></literal>ë <literal>formula</literal> ìì±ì ëí ëìì´ë¤."
+
+#: index.docbook:2195
+msgid ""
+ "<![CDATA[<join\n"
+ " table=\"tablename\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " fetch=\"join|select\"\n"
+ " inverse=\"true|false\"\n"
+ " optional=\"true|false\">\n"
+ "\n"
+ " <key ... />\n"
+ "\n"
+ " <property ... />\n"
+ " ...\n"
+ "</join>]]>"
+msgstr ""
+ "<![CDATA[<column\n"
+ " name=\"column_name\"\n"
+ " length=\"N\"\n"
+ " precision=\"N\"\n"
+ " scale=\"N\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " unique-key=\"multicolumn_unique_key_name\"\n"
+ " index=\"index_name\"\n"
+ " sql-type=\"sql_type_name\"\n"
+ " check=\"SQL expression\"\n"
+ " default=\"SQL expression\"/>]]>"
+
+#: index.docbook:2199
+msgid "<literal>table</literal>: The name of the joined table."
+msgstr "<![CDATA[<formula>SQL expression</formula>]]>"
+
+#: index.docbook:2216
+msgid "<literal>fetch</literal> (optional - defaults to <literal>join</literal>): If set to <literal>join</literal>, the default, Hibernate will use an inner join to retrieve a <literal><join></literal> defined by a class or its superclasses and an outer join for a <literal><join></literal> defined by a subclass. If set to <literal>select</literal> then Hibernate will use a sequential select for a <literal><join></literal> defined on a subclass, which will be issued only if a row turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a <literal><join></literal> defined by the class and its superclasses."
+msgstr "import"
+
+#: index.docbook:2229
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will not try to insert or update the properties defined by this join."
+msgstr "ë¹ì ì ì´í리ì¼ì´ì
ì´ ëì¼í ì´ë¦ì ê°ì§ ë ê°ì ìì í´ëì¤ë¤ì ê°ê³ , ë¹ì ì´ Hibernate ì§ìë¤ ë´ìì ì ì²´ ììì´ê° ë¶ì (í¨í¤ì§)ì´ë¦ì ì§ì íë ê²ì ìíì§ ìëë¤ê³ ê°ì íì. í´ëì¤ë¤ì <literal>auto-import=\"true\"</literal>ì ìì¡´í기 ë³´ë¤ ëª
ìì ì¼ë¡ \"ìí¬í¸ ë \" ê²ì´ë¤. ë¹ì ì ì¬ì§ì´ ëª
ìì ì¼ë¡ 매íëì§ ìë í´ëì¤ë¤ê³¼ ì¸í°íì´ì¤ë¤ì ìí¬í¸ ìí¬ ì(ê°ì ¸ì¤ê¸° í ì) ìë¤."
+
+#: index.docbook:2236
+msgid "<literal>optional</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will insert a row only if the properties defined by this join are non-null and will always use an outer join to retrieve the properties."
+msgstr "<![CDATA[<import class=\"java.lang.Object\" rename=\"Universe\"/>]]>"
+
+#: index.docbook:2245
+msgid "For example, the address information for a person can be mapped to a separate table (while preserving value type semantics for all properties):"
+msgstr ""
+ "<![CDATA[<import\n"
+ " class=\"ClassName\"\n"
+ " rename=\"ShortName\"\n"
+ "/>]]>"
+
+#: index.docbook:2250
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " table=\"PERSON\">\n"
+ "\n"
+ " <id name=\"id\" column=\"PERSON_ID\">...</id>\n"
+ "\n"
+ " <join table=\"ADDRESS\">\n"
+ " <key column=\"ADDRESS_ID\"/>\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </join>\n"
+ " ...]]>"
+msgstr "<literal>class</literal>: ììì Java í´ëì¤ì ì ì²´ ììì´ê° ë¶ì í´ëì¤ ì´ë¦."
+
+#: index.docbook:2252
+msgid "This feature is often only useful for legacy data models, we recommend fewer tables than classes and a fine-grained domain model. However, it is useful for switching between inheritance mapping strategies in a single hierarchy, as explained later."
+msgstr "<literal>rename</literal> (ìµì
- ëí´í¸ë ììì´ê° ë¶ì§ ìì í´ëì¤ ì´ë¦): ì§ì ì¸ì´ ë´ìì ì¬ì©ë ì´ë¦."
+
+#: index.docbook:2262
+msgid "<title>key</title>"
+msgstr "<title>any</title>"
+
+#: index.docbook:2264
+msgid "We've seen the <literal><key></literal> element crop up a few times now. It appears anywhere the parent mapping element defines a join to a new table, and defines the foreign key in the joined table, that references the primary key of the original table."
+msgstr "íë ì´ìì íë¡í¼í° 매í íì
ì´ ì¡´ì¬íë¤. <literal><any></literal> 매í ììë ì¬ë¬ í
ì´ë¸ë¤ë¡ë¶í° í´ëì¤ë¤ì ëí íëì ë¤íì± ì°ê´ê´ê³ë¥¼ ì ìíë¤. ì´ ë§¤í íì
ì ì¸ì ë íë ì´ìì 컬ë¼ì íìë¡ íë¤. 첫 ë²ì§¸ 컬ë¼ì ì°ê´ë ìí°í°ì íì
ì ë³´ê´íë¤. ëë¨¸ì§ ì»¬ë¼ë¤ì ìë³ì를 ë³´ê´íë¤. ì´ë° ì¢
ë¥ì ì°ê´ê´ê³ë¤ì ëí´ foreign key 컨ì¤í¸ë ì¸í¸ë¥¼ ì§ì íë ê²ì´ ë¶ê°ë¥í´ì, ì´ê²ì (ë¤íì±) ì°ê´ê´ê³ë¤ì 매ííë íµìì ì¸ ë°©ë²ì¼ë¡ì ê°ì¥ íì¤í ìë¨ì´ ìëë¤. ë¹ì ì ë§¤ì° í¹ë³í ê²½ì°ë¤ (ì를 ë¤ì´ ê°ì¬ ë¡ê·¸ë¤, ì¬ì©ì ì¸ì
ë°ì´í° ë±)ììë§ ì´ê²ì ì¬ì©í´ì¼ íë¤."
+
+#: index.docbook:2280
+msgid ""
+ "<![CDATA[<key\n"
+ " column=\"columnname\"\n"
+ " on-delete=\"noaction|cascade\"\n"
+ " property-ref=\"propertyName\"\n"
+ " not-null=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ "/>]]>"
+msgstr "<literal>meta-type</literal> ìì±ì ì´í리ì¼ì´ì
ì¼ë¡ íì¬ê¸ ë°ì´í°ë² ì´ì¤ ì»¬ë¼ ê°ë¤ì <literal>id-type</literal>ì ìí´ ì§ì ë íì
ì ìë³ì íë¡í¼í°ë¤ì ê°ì§ ìì í´ëì¤ë¤ë¡ 매íìí¤ë ë§ì¶¤í íì
ì ì§ì íëë¡ íë¤. ë¹ì ì meta-typeì ê°ë¤ë¡ë¶í° í´ëì¤ ì´ë¦ë¤ë¡ì 매íì ì§ì í´ì¼ íë¤."
+
+#: index.docbook:2291
+msgid "<literal>on-delete</literal> (optional, defaults to <literal>noaction</literal>): Specifies whether the foreign key constraint has database-level cascade delete enabled."
+msgstr ""
+ "<![CDATA[<any\n"
+ " name=\"propertyName\"\n"
+ " id-type=\"idtypename\"\n"
+ " meta-type=\"metatypename\"\n"
+ " cascade=\"cascade_style\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ ">\n"
+ " <meta-value ... />\n"
+ " <meta-value ... />\n"
+ " .....\n"
+ " <column .... />\n"
+ " <column .... />\n"
+ " .....\n"
+ "</any>]]>"
+
+#: index.docbook:2298
+msgid "<literal>property-ref</literal> (optional): Specifies that the foreign key refers to columns that are not the primary key of the orginal table. (Provided for legacy data.)"
+msgstr "<literal>name</literal>: íë¡í¼í° ì´ë¦."
+
+#: index.docbook:2305
+msgid "<literal>not-null</literal> (optional): Specifies that the foreign key columns are not nullable (this is implied whenever the foreign key is also part of the primary key)."
+msgstr "<literal>id-type</literal>: ìë³ì íì
."
+
+#: index.docbook:2312
+msgid "<literal>update</literal> (optional): Specifies that the foreign key should never be updated (this is implied whenever the foreign key is also part of the primary key)."
+msgstr "<literal>meta-type</literal> (ìµì
- ëí´í¸ë <literal>string</literal>): discriminator 매íì íì©ëë ììì íì
."
+
+#: index.docbook:2319
+msgid "<literal>unique</literal> (optional): Specifies that the foreign key should have a unique constraint (this is implied whenever the foreign key is also the primary key)."
+msgstr "<literal>cascade</literal> (optional- defaults to <literal>none</literal>): cascade ì¤íì¼."
+
+#: index.docbook:2327
+msgid "We recommend that for systems where delete performance is important, all keys should be defined <literal>on-delete=\"cascade\"</literal>, and Hibernate will use a database-level <literal>ON CASCADE DELETE</literal> constraint, instead of many individual <literal>DELETE</literal> statements. Be aware that this feature bypasses Hibernate's usual optimistic locking strategy for versioned data."
+msgstr "<literal>access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° íë¡í¼í° ê°ì ì ê·¼íëë° ì¬ì©í ë°©ë."
+
+#: index.docbook:2335
+msgid "The <literal>not-null</literal> and <literal>update</literal> attributes are useful when mapping a unidirectional one to many association. If you map a unidirectional one to many to a non-nullable foreign key, you <emphasis>must</emphasis> declare the key column using <literal><key not-null=\"true\"></literal>."
+msgstr "<literal>optimistic-lock</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): ì´ íë¡í¼í°ì ëí ì
ë°ì´í¸ë¤ì´ optimistic ì ê¸ íëì íìë¡ íëì§ ì¬ë¶ë¥¼ ì§ì íë¤. ë¬ë¦¬ ë§í´, ì´ íë¡í¼í°ê° dirtyì¼ ê²½ì°ì ë²ì ì¦ê°ê° ë°ìí ê²ì¸ì§ ì¬ë¶ë¥¼ ì ìíë¤."
+
+#: index.docbook:2345
+msgid "column and formula elements"
+msgstr "Hibernate íì
ë¤"
+
+#: index.docbook:2346
+msgid "Any mapping element which accepts a <literal>column</literal> attribute will alternatively accept a <literal><column></literal> subelement. Likewise, <literal><formula></literal> is an alternative to the <literal>formula</literal> attribute."
+msgstr "ìí°í°ë¤ê³¼ ê°ë¤"
+
+#: index.docbook:2352
+msgid ""
+ "<![CDATA[<column\n"
+ " name=\"column_name\"\n"
+ " length=\"N\"\n"
+ " precision=\"N\"\n"
+ " scale=\"N\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " unique-key=\"multicolumn_unique_key_name\"\n"
+ " index=\"index_name\"\n"
+ " sql-type=\"sql_type_name\"\n"
+ " check=\"SQL expression\"\n"
+ " default=\"SQL expression\"/>]]>"
+msgstr "ìì ìë¹ì¤ì ê´í ì¬ë¬ Java ì¸ì´-ë 벨ì ê°ì²´ë¤ì ì´í´í기 ìí´, ì°ë¦¬ë ê·¸ê²ë¤ì ë¤ì ë ê°ì 그룹ë¤ë¡ ë¶ë¥í íìê° ìë¤:"
+
+#: index.docbook:2354
+msgid "<![CDATA[<formula>SQL expression</formula>]]>"
+msgstr "<emphasis>entity</emphasis>ë ìí°í°ì ëí 참조ë¤ì ë³´ê´íë ììì ë¤ë¥¸ ê°ì²´ë¤ê³¼ë ë
립ì ì¼ë¡ ì¡´ì¬íë¤. 참조ëì§ ìì ê°ì²´ê° ì°ë 기 ìì§ëë íµìì ìë° ëª¨íê³¼ ì´ê²ì ëì¡°ì ì´ë¤. (ì ì¥ë¤ê³¼ ìì ë¤ì´ ë¶ëª¨ ìí°í°ë¡ë¶í° ê·¸ê²ì ììì¼ë¡ì ì¼ì¤ì¼ì´ë ëë ê²½ì°ë¥¼ ì ì¸íë©´) ìí°í°ë¤ì ëª
ìì ì¼ë¡ ì ì¥ëê³ ìì ëì´ì¼ íë¤. ì´ê²ì ëë¬ ê°ë¥ì±(reachablity)ì ìí ê°ì²´ ììì±ì ODMG 모íê³¼ë ë¤ë¥´ë¤ - ê·¸ë¦¬ê³ ì´í리ì¼ì´ì
ê°ì²´ë¤ì´ ëí ìì¤í
ë¤ìì ëê° ì´ë»ê² ì¬ì©ëëê°ì í¨ì¬ ë ê°ê¹ê² ëìíë¤. ìí°í°ë¤ì ìí 참조ì ê³µì 참조ë¤ì ì§ìíë¤. ê·¸ê²ë¤ ëí ë²ì í ë ì ìë¤."
+
+#: index.docbook:2356
+msgid "<literal>column</literal> and <literal>formula</literal> attributes may even be combined within the same property or association mapping to express, for example, exotic join conditions."
+msgstr "ìí°í°ì ìì ìíë ë¤ë¥¸ ìí°í°ë¤ì ëí 참조ë¤ê³¼ <emphasis>value</emphasis> íì
ë¤ë¡ 구ì±ëë¤. ê°ë¤ì ìì íì
ë¤, ì½ë ì
ë¤(íëì ì½ë ì
ë´ë¶ì ìì§ ìë ê²ë¤), ì»´í¬ëí¸ë¤, ê·¸ë¦¬ê³ ì´ë¤ ë¶ë³ì ê°ì²´ë¤ì´ë¤. entitiesìë ë¬ë¦¬, (í¹ë³í ì½ë ì
ë¤ê³¼ ì»´í¬ëí¸ë¤ìì) ê°ë¤ì ëë¬ê°ë¥ì±(reachability)ì ìí´ ììí <emphasis>ëê³ </emphasis> ìì ëë¤. value ê°ì²´ë¤(ê³¼ ìì íì
ë¤)ì´ ê·¸ê²ë¤ì í¬í¨íë ìí°í°ì ë°ë¼ ììí ëê³ ìì ëë¯ë¡, ê·¸ê²ë¤ì ë
립ì ì¼ë¡ ë²ì í ëì§ ìëë¤. ê°ë¤ì ë
립ì ì¸ ìí°í°ë¥¼ ê°ì§ ììì, ê·¸ê²ë¤ì ë ê°ì ìí°í°ë¤ì´ë ì½ë ì
ë¤ì ìí´ ê³µì ë ì ìë¤."
+
+#: index.docbook:2362
+msgid ""
+ "<![CDATA[<many-to-one name=\"homeAddress\" class=\"Address\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"person_id\" not-null=\"true\" length=\"10\"/>\n"
+ " <formula>'MAILING'</formula>\n"
+ "</many-to-one>]]>"
+msgstr "ì§ê¸ê¹ì§ ì°ë¦¬ë ìí°í°ë¤ì 참조í기 ìí´ \"ìì í´ëì¤\"를 ì¬ì©í´ ìë¤. ì°ë¦¬ë ê·¸ê²ì ê³ì ì¬ì©í ê²ì´ë¤. íì§ë§ ì격í ë§í´, ìì ìí를 ê°ì§ 모ë ì¬ì©ì ì ì í´ëì¤ë¤ì ìí°í°ë¤ì´ ìëë¤. <emphasis>ì»´í¬ëí¸</emphasis>ë value ì미를 ê°ì§ ì¬ì©ì ì ì í´ëì¤ì´ë¤. <literal>java.lang.String</literal> íì
ì ìë° íë¡í¼í°ë ëí value ì미를 ê°ëë¤. ì´ ì ìê° ì£¼ì´ì§ë©´, ì°ë¦¬ë JDKì ìí´ ì ê³µë 모ë íì
ë¤(í´ëì¤ë¤)ì´ ìë°ìì value íì
ì미를 ê°ê³ , ë°ë©´ì ì¬ì©ì ì ì íì
ë¤ì ìí°í° ëë type ì미ë¡ì 매íëë¤ê³ ë§í ì ìë¤. ì´ íë¨ì ì´í리ì¼ì´ì
ê°ë°ììê² ë¬ë ¤ ìë¤. ëë©ì¸ 모íìì ìí°í° í´ëì¤ì ëí ì¢ì íí¸ë ê·¸ í´ëì¤ì íëì ì¸ì¤í´ì¤ì ëí ê³µì ë 참조ë¤ì¸ ë°ë©´ì, compositionì´ë aggregationì ëê° value í!
ì
ì¼ë¡ ë³íëë¤."
+
+#: index.docbook:2367
+msgid "import"
+msgstr "ì°ë¦¬ë 문ì를 íµí´ ë ê°ë
ë¤ì ë¤ì ê³ ì°°í ê²ì´ë¤."
+
+#: index.docbook:2369
+msgid "Suppose your application has two persistent classes with the same name, and you don't want to specify the fully qualified (package) name in Hibernate queries. Classes may be \"imported\" explicitly, rather than relying upon <literal>auto-import=\"true\"</literal>. You may even import classes and interfaces that are not explicitly mapped."
+msgstr "ëì ì ì Java type ìì¤í
(ê³¼ ìí°í°ë¤ ë° value íì
ë¤ì ëí ê°ë°ìì ì ì)를 SQL/ë°ì´í°ë² ì´ì¤ type íì
ì¼ë¡ 매ííë ê²ì´ë¤. ë ìì¤í
ë¤ ì¬ì´ì ë¤ë¦¬ë Hibernateì ìí´ ì ê³µëë¤: ìí°í°ë¤ì ê²½ì° ì°ë¦¬ë <literal><class></literal>, <literal><subclass></literal> ë±ì ì¬ì©íë¤.value íì
ë¤ì ê²½ì° ì°ë¦¬ë ëê°<literal>type</literal> ìì±ì ê°ì§ <literal><property></literal>, <literal><component></literal> ë±ì ì¬ì©íë¤. ì´ ìì±ì ê°ì Hibernate <emphasis>매í íì
</emphasis>ì ì´ë¦ì´ë¤. Hibernateë (íì¤ JDK value íì
ë¤ì ëí´) ë§ì 매íë¤ì ì ê³µíë¤. ëì¤ì ë³´ê² ëë¯ì´, ë¹ì ì ë¹ì ìì ì 매í íì
ë¤ì ìì±í ì ìê³ ë§ì°¬ê°ì§ë¡ ë¹ì ì ë§ì¶¤í ë³í ë°©ëë¤ì 구íí ì ìë¤."
+
+#: index.docbook:2376
+msgid "<![CDATA[<import class=\"java.lang.Object\" rename=\"Universe\"/>]]>"
+msgstr "ì½ë ì
ë¤ì ì ì¸í 모ë 미리 ë¹ëë Hibernate íì
ë¤ì null ì미를 ì§ìíë¤."
+
+#: index.docbook:2383
+msgid ""
+ "<![CDATA[<import\n"
+ " class=\"ClassName\"\n"
+ " rename=\"ShortName\"\n"
+ "/>]]>"
+msgstr "기본 value íì
ë¤"
+
+#: index.docbook:2386
+msgid "<literal>class</literal>: The fully qualified class name of of any Java class."
+msgstr "미리-ë§ë¤ì´ì§ <emphasis>기본 매í íì
ë¤</emphasis>ì ëëµ ë¤ìê³¼ ê°ì´ ì¹´í
ê³ ë¦¬ë¡ ë¶ë¥ëë¤"
+
+#: index.docbook:2391
+msgid "<literal>rename</literal> (optional - defaults to the unqualified class name): A name that may be used in the query language."
+msgstr "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+
+#: index.docbook:2402
+msgid "<title>any</title>"
+msgstr "ìë° ììíì
ë¤ì´ë wrapper í´ëì¤ë¤ë¡ë¶í° ì ì í(벤ë-ì§ì ì ì¸) SQL ì»¬ë¼ íì
ë¤ë¡ì íì
매í. <literal>boolean, yes_no</literal>ì <literal>true_false</literal>ë Java <literal>boolean</literal>ì´ë <literal>java.lang.Boolean</literal>ì ëí 모ë ëì²´ì ì¸ ì¸ì½ë©ë¤ì´ë¤."
+
+#: index.docbook:2404
+msgid "There is one further type of property mapping. The <literal><any></literal> mapping element defines a polymorphic association to classes from multiple tables. This type of mapping always requires more than one column. The first column holds the type of the associated entity. The remaining columns hold the identifier. It is impossible to specify a foreign key constraint for this kind of association, so this is most certainly not meant as the usual way of mapping (polymorphic) associations. You should use this only in very special cases (eg. audit logs, user session data, etc)."
+msgstr "string"
+
+#: index.docbook:2414
+msgid "The <literal>meta-type</literal> attribute lets the application specify a custom type that maps database column values to persistent classes which have identifier properties of the type specified by <literal>id-type</literal>. You must specify the mapping from values of the meta-type to class names."
+msgstr "<literal>java.lang.String</literal>ì¼ë¡ë¶í° <literal>VARCHAR</literal> (ëë Oracle <literal>VARCHAR2</literal>)ë¡ì íì
매í."
+
+#: index.docbook:2421
+msgid ""
+ "<![CDATA[<any name=\"being\" id-type=\"long\" meta-type=\"string\">\n"
+ " <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>\n"
+ " <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>\n"
+ " <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>\n"
+ " <column name=\"table_name\"/>\n"
+ " <column name=\"id\"/>\n"
+ "</any>]]>"
+msgstr "date, time, timestamp"
+
+#: index.docbook:2432
+msgid ""
+ "<![CDATA[<any\n"
+ " name=\"propertyName\"\n"
+ " id-type=\"idtypename\"\n"
+ " meta-type=\"metatypename\"\n"
+ " cascade=\"cascade_style\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ ">\n"
+ " <meta-value ... />\n"
+ " <meta-value ... />\n"
+ " .....\n"
+ " <column .... />\n"
+ " <column .... />\n"
+ " .....\n"
+ "</any>]]>"
+msgstr "<literal>java.util.Date</literal>ì ê·¸ê²ì ìë¸í´ëì¤ë¡ë¶í° SQL íì
ë¤ì¸ <literal>DATE</literal>, <literal>TIME</literal>, <literal>TIMESTAMP</literal> (ëë ë±ê°ë¬¼)ë¡ì íì
매íë¤."
+
+#: index.docbook:2435
+msgid "<literal>name</literal>: the property name."
+msgstr "calendar, calendar_date"
+
+#: index.docbook:2440
+msgid "<literal>id-type</literal>: the identifier type."
+msgstr "<literal>java.util.Calendar</literal>ë¡ë¶í° SQL íì
ë¤ì¸ <literal>TIMESTAMP</literal>, <literal>DATE</literal> (ëë ë±ê°ë¬¼)ë¡ì íì
매íë¤."
+
+#: index.docbook:2445
+msgid "<literal>meta-type</literal> (optional - defaults to <literal>string</literal>): Any type that is allowed for a discriminator mapping."
+msgstr "big_decimal, big_integer"
+
+#: index.docbook:2451
+msgid "<literal>cascade</literal> (optional- defaults to <literal>none</literal>): the cascade style."
+msgstr "<literal>java.math.BigDecimal</literal>ê³¼ <literal>java.math.BigInteger</literal>ë¡ë¶í° <literal>NUMERIC</literal> (ëë Oracle <literal>NUMBER</literal>)ë¡ì íì
매íë¤."
+
+#: index.docbook:2463
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, define if a version increment should occur if this property is dirty."
+msgstr "<literal>java.util.Locale</literal>, <literal>java.util.TimeZone</literal>, ê·¸ë¦¬ê³ <literal>java.util.Currency</literal>ë¡ë¶í° <literal>VARCHAR</literal>(ëë Oracle <literal>VARCHAR2</literal>)ë¡ì íì
매í. <literal>Locale</literal>ê³¼ <literal>Currency</literal>ì ì¸ì¤í´ì¤ë¤ì ê·¸ê²ë¤ì ISO ì½ëë¤ë¡ 매íëë¤. <literal>TimeZone</literal>ì ì¸ì¤í´ì¤ë¤ì ê·¸ê²ë¤ì <literal>ID</literal>ë¡ ë§¤íëë¤."
+
+#: index.docbook:2478
+msgid "Hibernate Types"
+msgstr "<literal>class</literal>"
+
+#: index.docbook:2481
+msgid "Entities and values"
+msgstr "<literal>java.lang.Class</literal>ë¡ë¶í° <literal>VARCHAR</literal> (ëë Oracle <literal>VARCHAR2</literal>)ë¡ì íì
매í. <literal>Class</literal>ë ê·¸ê²ì ì ì²´ ììì´ê° ë¶ì ì´ë¦ì¼ë¡ 매íëë¤."
+
+#: index.docbook:2483
+msgid "To understand the behaviour of various Java language-level objects with respect to the persistence service, we need to classify them into two groups:"
+msgstr "binary"
+
+#: index.docbook:2488
+msgid "An <emphasis>entity</emphasis> exists independently of any other objects holding references to the entity. Contrast this with the usual Java model where an unreferenced object is garbage collected. Entities must be explicitly saved and deleted (except that saves and deletions may be <emphasis>cascaded</emphasis> from a parent entity to its children). This is different from the ODMG model of object persistence by reachablity - and corresponds more closely to how application objects are usually used in large systems. Entities support circular and shared references. They may also be versioned."
+msgstr "byte ë°°ì´ë¤ì ì ì í SQL binary íì
ì¼ë¡ 매íìí¨ë¤."
+
+#: index.docbook:2499
+msgid "An entity's persistent state consists of references to other entities and instances of <emphasis>value</emphasis> types. Values are primitives, collections (not what's inside a collection), components and certain immutable objects. Unlike entities, values (in particular collections and components) <emphasis>are</emphasis> persisted and deleted by reachability. Since value objects (and primitives) are persisted and deleted along with their containing entity they may not be independently versioned. Values have no independent identity, so they cannot be shared by two entities or collections."
+msgstr "text"
+
+#: index.docbook:2510
+msgid "Up until now, we've been using the term \"persistent class\" to refer to entities. We will continue to do that. Strictly speaking, however, not all user-defined classes with persistent state are entities. A <emphasis>component</emphasis> is a user defined class with value semantics. A Java property of type <literal>java.lang.String</literal> also has value semantics. Given this definition, we can say that all types (classes) provided by the JDK have value type semantics in Java, while user-defined types may be mapped with entity or value type semantics. This decision is up to the application developer. A good hint for an entity class in a domain model are shared references to a single instance of that class, while composition or aggregation usually translates to a value type."
+msgstr "long Java 문ìì´ì SQL <literal>CLOB</literal> ëë <literal>TEXT</literal> íì
ì¼ë¡ 매íìí¨ë¤"
+
+#: index.docbook:2524
+msgid "We'll revisit both concepts throughout the documentation."
+msgstr "serializable"
+
+#: index.docbook:2528
+msgid "The challenge is to map the Java type system (and the developers' definition of entities and value types) to the SQL/database type system. The bridge between both systems is provided by Hibernate: for entities we use <literal><class></literal>, <literal><subclass></literal> and so on. For value types we use <literal><property></literal>, <literal><component></literal>, etc, usually with a <literal>type</literal> attribute. The value of this attribute is the name of a Hibernate <emphasis>mapping type</emphasis>. Hibernate provides many mappings (for standard JDK value types) out of the box. You can write your own mapping types and implement your custom conversion strategies as well, as you'll see later."
+msgstr "serializable Java íì
ë¤ì ì ì í SQL binary íì
ì¼ë¡ 매íìí¨ë¤. ë¹ì ì ëí ëí´í¸ë¡ 기본 íì
ì´ ìë serializable ìë° í´ëì¤ ëë ì¸í°íì´ì¤ì ì´ë¦ì ê°ì§ Hibernate íì
<literal>serializable</literal>ì ëíë¼ ìë ìë¤."
+
+#: index.docbook:2541
+msgid "All built-in Hibernate types except collections support null semantics."
+msgstr "clob, blob"
+
+#: index.docbook:2548
+msgid "Basic value types"
+msgstr "<literal>java.sql.Clob</literal>ì <literal>java.sql.Blob</literal> JDBC í´ëì¤ë¤ì ëí íì
매íë¤. ì´ë¤ íì
ë¤ì ëªëª ì´í리ì¼ì´ì
ë¤ììë ë¶í¸íë¤. ìëíë©´ blob ëë clob ê°ì²´ë í¸ëìì
ì¸ë¶ìì ì¬ì¬ì©ë ì ì기 ë문ì´ë¤.(ê²ë¤ê° ëë¼ì´ë² ì§ìì´ ë¹ì¼ê´ì ì´ê³ íì¹ëì´ì¼ íë¤)"
+
+#: index.docbook:2550
+msgid "The built-in <emphasis>basic mapping types</emphasis> may be roughly categorized into"
+msgstr "imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary"
+
+#: index.docbook:2555
+msgid "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+msgstr "ëê° ê°ë³ì ì¸ Java íì
ë¤ë¡ ê°ì£¼ëë ê²ì ëí íì
매íë¤. ì¬ê¸°ì Hibernateë ë¶ë³ì ì¸ Java íì
ë¤ì ëí´ìë§ ì ì í ì´ë¤ ìµì í를 ííê³ , ì´í리ì¼ì´ì
ê·¸ ê°ì²´ë¥¼ ë³í ì ìë ê²ì¼ë¡ ì·¨ê¸íë¤. ì를 ë¤ì´, ë¹ì ì <literal>imm_timestamp</literal>ë¡ì 매íë ì¸ì¤í´ì¤ì ëí´ <literal>Date.setTime()</literal>ì í¸ì¶íì§ ìì ê²ì´ë¤. íë¡í¼í°ì ê°ì ë³ê²½ìí¤ê³ , ê·¸ ë³ê²½ì ììí ìí¤ê¸° ìí´ì, ì´í리ì¼ì´ì
ì íëì ìë¡ì´ (ëì¼íì§ ìì) ê°ì²´ë¥¼ ê·¸ íë¡í¼í°ì í ë¹í´ì¼ íë¤."
+
+#: index.docbook:2558
+msgid "Type mappings from Java primitives or wrapper classes to appropriate (vendor-specific) SQL column types. <literal>boolean, yes_no</literal> and <literal>true_false</literal> are all alternative encodings for a Java <literal>boolean</literal> or <literal>java.lang.Boolean</literal>."
+msgstr "ìí¸ë¦¬ë¤ê³¼ ì½ë ì
ë¤ì ì ì¼ ìë³ìë¤ì <literal>binary</literal>, <literal>blob</literal> ê·¸ë¦¬ê³ <literal>clob</literal>를 ì ì¸í 기본 íì
ì¤ ì´ë ê²ì¼ ì ìë¤. (Composite ìë³ìë¤ì´ ëí íì©ëë¤. ìë를 ë³´ë¼.)"
+
+#: index.docbook:2567
+msgid "string"
+msgstr "기본 value íì
ë¤ì <literal>org.hibernate.Hibernate</literal>ì ì ìëì´ ìë ëìíë <literal>Type</literal> ììë¤ì ê°ëë¤. ì를 ë¤ì´, <literal>Hibernate.STRING</literal>ì <literal>string</literal> íì
ì íííë¤."
+
+#: index.docbook:2569
+msgid "A type mapping from <literal>java.lang.String</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>)."
+msgstr "ë§ì¶¤í value íì
ë¤"
+
+#: index.docbook:2576
+msgid "date, time, timestamp"
+msgstr "ê°ë°ìë¤ì´ ê·¸ë¤ ìì ë¤ì value íì
ë¤ì ìì±ìí¤ë ê²ì´ ìëì ì¼ë¡ ì½ë¤. ì를 ë¤ì´, ë¹ì ì <literal>java.lang.BigInteger</literal> íì
ì íë¡í¼í°ë¤ì <literal>VARCHAR</literal> 컬ë¼ë¤ë¡ ììí ìí¤ê³ ì ìí ì ìë¤. Hibernateë ì´ê²ì ìí 미리 ë§ë¤ì´ì§ íì
ì ì ê³µíì§ ìëë¤. ê·¸ë¬ë ë§ì¶¤í íì
ë¤ì íë¡í¼í°(ëë ì½ë ì
ìì)를 íëì í
ì´ë¸ 컬ë¼ì¼ë¡ì 매ííë ê²ì ì ì½ëì§ ìëë¤. ë°ë¼ì ì를 ë¤ì´, ë¹ì ì <literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal> 컬ë¼ë¤ë¡ ììí ëë <literal>java.lang.String</literal> íì
ì ìë° íë¡í¼í°<literal>getName()</literal>/ <literal>setName()</literal>를 ê°ì§ ì ìë¤."
+
+#: index.docbook:2578
+msgid "Type mappings from <literal>java.util.Date</literal> and its subclasses to SQL types <literal>DATE</literal>, <literal>TIME</literal> and <literal>TIMESTAMP</literal> (or equivalent)."
+msgstr "ë§ì¶¤í íì
ì 구ííë ¤ë©´, <literal>org.hibernate.UserType</literal> ëë <literal>org.hibernate.CompositeUserType</literal>ì 구ííê³ ê·¸ íì
ì ì ì²´ ììì´ê° ë¶ì í´ëì¤ëª
ì ì¬ì©íì¬ íë¡í¼í°ë¤ì ì ì¸íë¼. ê°ë¥í ì¢
ë¥ì ê²ë¤ì ë³´ë ¤ë©´ <literal>org.hibernate.test.DoubleStringType</literal>ì ì²´í¬íë¼."
+
+#: index.docbook:2586
+msgid "calendar, calendar_date"
+msgstr ""
+ "<![CDATA[<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType\">\n"
+ " <column name=\"first_string\"/>\n"
+ " <column name=\"second_string\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:2588
+msgid "Type mappings from <literal>java.util.Calendar</literal> to SQL types <literal>TIMESTAMP</literal> and <literal>DATE</literal> (or equivalent)."
+msgstr "íëì íë¡í¼í°ë¥¼ ì¬ë¬ ê°ì 컬ë¼ë¤ë¡ 매íìí¤ë <literal><column></literal> íê·¸ì ì¬ì©ì 주목íë¼."
+
+#: index.docbook:2596
+msgid "big_decimal, big_integer"
+msgstr "<literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>, <literal>UserCollectionType</literal>, ê·¸ë¦¬ê³ <literal>UserVersionType</literal> ì¸í°íì´ì¤ë¤ì ë ë§ì í¹íë ì¬ì©ë¤ì ìí ì§ìì ì ê³µíë¤."
+
+#: index.docbook:2598
+msgid "Type mappings from <literal>java.math.BigDecimal</literal> and <literal>java.math.BigInteger</literal> to <literal>NUMERIC</literal> (or Oracle <literal>NUMBER</literal>)."
+msgstr "ë¹ì ì 매í íì¼ ìì <literal>UserType</literal>ì ëí íë¼ë¯¸í°ë¤ì ì ê³µí ìë ìë¤. ì´ê²ì íí기 ìí´, ë¹ì ì <literal>UserType</literal>ì <literal>org.hibernate.usertype.ParameterizedType</literal> ì¸í°íì´ì¤ë¥¼ 구íí´ì¼ íë¤. ë¹ì ì ë§ì¶¤í íì
ì íë¼ë¯¸í°ë¤ì ì ê³µí기 ìí´, ë¹ì ì ë¹ì ì 매í íì¼ë¤ ìì <literal><type></literal> ìì를 ì¬ì©í ì ìë¤."
+
+#: index.docbook:2606
+msgid "locale, timezone, currency"
+msgstr ""
+ "<![CDATA[<property name=\"priority\">\n"
+ " <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
+ " <param name=\"default\">0</param>\n"
+ " </type>\n"
+ "</property>]]>"
+
+#: index.docbook:2608
+msgid "Type mappings from <literal>java.util.Locale</literal>, <literal>java.util.TimeZone</literal> and <literal>java.util.Currency</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). Instances of <literal>Locale</literal> and <literal>Currency</literal> are mapped to their ISO codes. Instances of <literal>TimeZone</literal> are mapped to their <literal>ID</literal>."
+msgstr "<literal>UserType</literal>ì ì´ì ê·¸ê²ì ì ë¬ë <literal>Properties</literal> ê°ì²´ë¡ë¶í° <literal>default</literal>ë¡ ëª
ëª
ë íë¼ë¯¸í°ì ëí ê°ì ê²ìí ì ìë¤."
+
+#: index.docbook:2620
+msgid "<literal>class</literal>"
+msgstr "ë§ì¼ ë¹ì ì´ ë§¤ì° ì주 ì´ë¤ UserTypeì ì¬ì©í ê²½ì°, ê·¸ê²ì ê·¸ê²ì ëí ë 짧ì ì´ë¦ì ì ìíë ê²ì´ ì ì©í ì ìë¤. <literal><typedef></literal> ìì를 ì¬ì©íì¬ ì´ê²ì íí ì ìë¤. Typedefë¤ì ì´ë¦ì ë§ì¶¤í íì
ì í ë¹íê³ , ëí ë§ì¼ ê·¸ íì
ì´ íë¼ë¯¸í°í ë ê²½ì°ì ëí´í¸ íë¼ë¯¸í° ê°ë¤ì 리ì¤í¸ë¥¼ í¬í¨í ìë ìë¤."
+
+#: index.docbook:2622
+msgid "A type mapping from <literal>java.lang.Class</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). A <literal>Class</literal> is mapped to its fully qualified name."
+msgstr ""
+ "<![CDATA[<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name=\"default_zero\">\n"
+ " <param name=\"default\">0</param>\n"
+ "</typedef>]]>"
+
+#: index.docbook:2630
+msgid "binary"
+msgstr "<![CDATA[<property name=\"priority\" type=\"default_zero\"/>]]>"
+
+#: index.docbook:2632
+msgid "Maps byte arrays to an appropriate SQL binary type."
+msgstr "property 매í ìì type íë¼ë¯¸í°ë¤ì ì¬ì©í¨ì¼ë¡ì¨ ê²½ì°ì ë§ê² typedef ë´ì ì ê³µë íë¼ë¯¸í°ë¤ì ì¤ë²ë¼ì´ë ìí¤ë ê²ì´ ê°ë¥íë¤."
+
+#: index.docbook:2638
+msgid "text"
+msgstr "ë¹ë¡ Hibernateì íë¶í ë²ìì 미리 ë§ë¤ì´ì§ íì
ë¤ê³¼ ì»´í¬ëí¸ë¤ì ëí ì§ìì´ ë¹ì ì´ ê°ë ë§ì¶¤í íì
ì ì¬ì©í <emphasis>íìê°</emphasis> ê±°ì ìì ê²ìì ì미í ì§ë¼ë, ê·¸ë¼ìë ë¶êµ¬íê³ ê·¸ê²ì ë¹ì ì ì´í리ì¼ì´ì
ìì ì주 ë°ìíë (ìí°í°ê° ìë) í´ëì¤ë¤ì ëí´ ë§ì¶¤í íì
ë¤ì ì¬ì©íë ì¢ì íìì¼ë¡ ê°ì£¼ëë¤. ì를 ë¤ì´ <literal>MonetaryAmount</literal> í´ëì¤ë ë¹ë¡ ê·¸ê²ì´ ì»´í¬ëí¸ë¡ì ì½ê² 매íë ì ììì§ë¼ë, <literal>CompositeUserType</literal>ì ëí ì¢ì íë³´ì´ë¤. ì´ê²ì ëí íëì ë기ë ì¶ìíì´ë¤. ë§ì¶¤í íì
ì¼ë¡, ë¹ì ì 매í 문ìë¤ì íí ê°ë¤ì íííë ë¹ì ì ë°©ë²ìì ê°ë¥í ë³ê²½ë¤ì ëí´ ì¥ì°¨ ê²ì¦ë ê²ì´ë¤."
+
+#: index.docbook:2640
+msgid "Maps long Java strings to a SQL <literal>CLOB</literal> or <literal>TEXT</literal> type."
+msgstr "íëì í´ëì¤ë¥¼ í ë² ì´ì 매íí기"
+
+#: index.docbook:2647
+msgid "serializable"
+msgstr "íëì í¹ì í ìì í´ëì¤ì ëí´ íë ì´ìì 매íì ì ê³µíë ê²ì´ ê°ë¥íë¤. ì´ ê²½ì°ì ë¹ì ì ë ê°ì 매íë ìí°í°ë¤ì ì¸ì¤í´ì¤ë¤ ì¬ì´ë¥¼ ëª
ííê² í기 ìí´ <emphasis>íëì ìí°í° ì´ë¦</emphasis>ì ì§ì í´ì¼ íë¤. (ëí´í¸ë¡, ìí°í° ì´ë¦ì í´ëì¤ ì´ë¦ê³¼ ëì¼í ê²ì´ë¤.) Hibernateë ìì ê°ì²´ë¤ì ëí´ ìì
í ë, ì§ìë¤ì ìì±í ë, ëë ëª
ëª
ë ìí°í°ì ëí ì°ê´ë¤ì 매íí ë ë¹ì ì¼ë¡ íì¬ê¸ ìí°í° ì´ë¦ì ì§ì íëë¡ íë¤."
+
+#: index.docbook:2649
+msgid "Maps serializable Java types to an appropriate SQL binary type. You may also indicate the Hibernate type <literal>serializable</literal> with the name of a serializable Java class or interface that does not default to a basic type."
+msgstr ""
+ "<![CDATA[<class name=\"Contract\" table=\"Contracts\" \n"
+ " entity-name=\"CurrentContract\">\n"
+ " ...\n"
+ " <set name=\"history\" inverse=\"true\" \n"
+ " order-by=\"effectiveEndDate desc\">\n"
+ " <key column=\"currentContractId\"/>\n"
+ " <one-to-many entity-name=\"HistoricalContract\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Contract\" table=\"ContractHistory\" \n"
+ " entity-name=\"HistoricalContract\">\n"
+ " ...\n"
+ " <many-to-one name=\"currentContract\" \n"
+ " column=\"currentContractId\" \n"
+ " entity-name=\"CurrentContract\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:2658
+msgid "clob, blob"
+msgstr "ì°ê´ë¤ì ì´ì <literal>class</literal> ëì ì <literal>entity-name</literal>ì ì¬ì©íì¬ ì´ë»ê² ì§ì ëëì§ë¥¼ 주목íë¼."
+
+#: index.docbook:2660
+msgid "Type mappings for the JDBC classes <literal>java.sql.Clob</literal> and <literal>java.sql.Blob</literal>. These types may be inconvenient for some applications, since the blob or clob object may not be reused outside of a transaction. (Furthermore, driver support is patchy and inconsistent.)"
+msgstr "SQL ì¸ì©ë¶í¸ íìë ìë³ìë¤"
+
+#: index.docbook:2670
+msgid "imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary"
+msgstr "ë¹ì ì 매í 문ì ë´ìì í
ì´ë¸ ëë ì»¬ë¼ ì´ë¦ì ìì¸ì©ê¸°í¸(`)ë¤ ìì ë£ì´ì ìì±ë SQLìì ìë³ì를 ì¸ì©ë¶í¸ ì²ë¦¬íëë¡ Hibernateìê² ê°ì í ìë ìë¤. Hibernateë SQL <literal>Dialect</literal>ì ëí´ ì íí ì¸ì© ì¤íì¼ì ì¬ì©í ê²ì´ë¤(ëê° ì´ì¤ ì¸ì©ë¶í¸ ì´ì§ë§, SQL Serverì ê²½ì°ìë 모ë ê´í¸ë¤ì´ê³ MySQLì ê²½ì°ìë ìì¸ì©ë¶í¸(`))."
+
+#: index.docbook:2674
+msgid "Type mappings for what are usually considered mutable Java types, where Hibernate makes certain optimizations appropriate only for immutable Java types, and the application treats the object as immutable. For example, you should not call <literal>Date.setTime()</literal> for an instance mapped as <literal>imm_timestamp</literal>. To change the value of the property, and have that change made persistent, the application must assign a new (nonidentical) object to the property."
+msgstr ""
+ "<![CDATA[<class name=\"LineItem\" table=\"`Line Item`\">\n"
+ " <id name=\"id\" column=\"`Item Id`\"/><generator class=\"assigned\"/></id>\n"
+ " <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:2689
+msgid "Unique identifiers of entities and collections may be of any basic type except <literal>binary</literal>, <literal>blob</literal> and <literal>clob</literal>. (Composite identifiers are also allowed, see below.)"
+msgstr "Metadata ëìë¤"
+
+#: index.docbook:2695
+msgid "The basic value types have corresponding <literal>Type</literal> constants defined on <literal>org.hibernate.Hibernate</literal>. For example, <literal>Hibernate.STRING</literal> represents the <literal>string</literal> type."
+msgstr "XMLì 모ë ì¬ëë¤ì ìí ê²ì´ ìëì§ë§, Hibernateìì O/R 매í ë©íë°ì´í°ë¥¼ ì ìíë ëªëª ëìì ì¸ ë°©ë²ë¤ì´ ì¡´ì¬íë¤."
+
+#: index.docbook:2704
+msgid "Custom value types"
+msgstr "XDoclet ë§í¬ì
ì¬ì©í기"
+
+#: index.docbook:2706
+msgid "It is relatively easy for developers to create their own value types. For example, you might want to persist properties of type <literal>java.lang.BigInteger</literal> to <literal>VARCHAR</literal> columns. Hibernate does not provide a built-in type for this. But custom types are not limited to mapping a property (or collection element) to a single table column. So, for example, you might have a Java property <literal>getName()</literal>/<literal>setName()</literal> of type <literal>java.lang.String</literal> that is persisted to the columns <literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal>."
+msgstr "ë§ì Hibernate ì¬ì©ìë¤ì XDoclet <literal>@hibernate.tags</literal>를 ì¬ì©íì¬ ìì¤ ì½ë ìì ì§ì 매í ì 보를 ì½ì
ìí¤ë ê²ì ì í¸íë¤. ì°ë¦¬ë ì´ ë¬¸ììì ì´ ì ê·¼ë²ì ë¤ë£¨ì§ ìì ê²ì´ë¤. ìëíë©´ ê·¸ê²ì ì격íê²ë XDocletì ë¶ë¶ì¼ë¡ ê°ì£¼ë기 ë문ì´ë¤. íì§ë§ ì°ë¦¬ë XDoclet 매íë¤ì ê°ì§ <literal>Cat</literal> í´ëì¤ì ê´í ë¤ì ìì 를 í¬í¨íë¤."
+
+#: index.docbook:2717
+msgid "To implement a custom type, implement either <literal>org.hibernate.UserType</literal> or <literal>org.hibernate.CompositeUserType</literal> and declare properties using the fully qualified classname of the type. Check out <literal>org.hibernate.test.DoubleStringType</literal> to see the kind of things that are possible."
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "/**\n"
+ " * @hibernate.class\n"
+ " * table=\"CATS\"\n"
+ " */\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ " private Date birthdate;\n"
+ " private Cat mother;\n"
+ " private Set kittens\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " /*\n"
+ " * @hibernate.id\n"
+ " * generator-class=\"native\"\n"
+ " * column=\"CAT_ID\"\n"
+ " */\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.many-to-one\n"
+ " * column=\"PARENT_ID\"\n"
+ " */\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"BIRTH_DATE\"\n"
+ " */\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"WEIGHT\"\n"
+ " */\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"COLOR\"\n"
+ " * not-null=\"true\"\n"
+ " */\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.set\n"
+ " * inverse=\"true\"\n"
+ " * order-by=\"BIRTH_DATE\"\n"
+ " * @hibernate.collection-key\n"
+ " * column=\"PARENT_ID\"\n"
+ " * @hibernate.collection-one-to-many\n"
+ " */\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"SEX\"\n"
+ " * not-null=\"true\"\n"
+ " * update=\"false\"\n"
+ " */\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:2725
+msgid ""
+ "<![CDATA[<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType\">\n"
+ " <column name=\"first_string\"/>\n"
+ " <column name=\"second_string\"/>\n"
+ "</property>]]>"
+msgstr "XDocletê³¼ ibernateì ê´í ì¶ê° ìì ë¤ì Hibernate ì¹ ì¬ì´í¸ë¥¼ ë³´ë¼."
+
+#: index.docbook:2727
+msgid "Notice the use of <literal><column></literal> tags to map a property to multiple columns."
+msgstr "JDK 5.0 Annotations ì¬ì©í기"
+
+#: index.docbook:2732
+msgid "The <literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>, <literal>UserCollectionType</literal>, and <literal>UserVersionType</literal> interfaces provide support for more specialized uses."
+msgstr "JDK 5.0ì ì¸ì´ ë 벨ìì XDoclet-ì¤íì¼ì 주ìë¤, type-safeì ì»´íì¼ ì ì²´í¹ì ëì
íë¤. ì´ ë©ì»¤ëì¦ì XDoclet 주ìë¤ ë³´ë¤ ë ê°ë ¥íë©° ë구ë¤ê³¼ IDEë¤ì ìí´ ë ì¢ê² ì§ìëë¤. ì를 ë¤ì´ IntelliJ IDEAë JDK 5.0 주ìë¤ì ëí ìë-ìì± ê¸°ë¥ê³¼ 구문 ê°ì¡°ë¥¼ ì§ìíë¤. EJB ëª
ì¸ìì ìë¡ì´ ê°ì í(JSR-220)ì ìí°í° ë¹ì¦ì ëí íë¼ì´ë¨¸ë¦¬ ë©íë°ì´í° ë©ì»¤ëì¦ì¼ë¡ì JDK 5.0 Annotationsì ì¬ì©íë¤. Hibernate3ë JSR-220(ìì API)ì <literal>EntityManager</literal>를 구ííê³ , 매í ë©íë°ì´í°ì ëí ì§ìì ë³ëì ë´ë ¤ë°ê¸°ë¡ì <emphasis>Hibernate Annotations</emphasis> í¨í¤ì§ë¥¼ íµí´ ì´ì© ê°ë¥íë¤. EJB3 (JSR-220)ê³¼ Hibernate3 metadata ììê° ì§ìëë¤."
+
+#: index.docbook:2738
+msgid "You may even supply parameters to a <literal>UserType</literal> in the mapping file. To do this, your <literal>UserType</literal> must implement the <literal>org.hibernate.usertype.ParameterizedType</literal> interface. To supply parameters to your custom type, you can use the <literal><type></literal> element in your mapping files."
+msgstr "ë¤ìì EJB ìí°í° ë¹ì¼ë¡ì 주ìì´ ë¶ì POJO í´ëì¤ì ê´í ìì ì´ë¤:"
+
+#: index.docbook:2746
+msgid ""
+ "<![CDATA[<property name=\"priority\">\n"
+ " <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
+ " <param name=\"default\">0</param>\n"
+ " </type>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[@Entity(access = AccessType.FIELD)\n"
+ "public class Customer implements Serializable {\n"
+ "\n"
+ " @Id;\n"
+ " Long id;\n"
+ "\n"
+ " String firstName;\n"
+ " String lastName;\n"
+ " Date birthday;\n"
+ "\n"
+ " @Transient\n"
+ " Integer age;\n"
+ "\n"
+ " @Embedded\n"
+ " private Address homeAddress;\n"
+ "\n"
+ " @OneToMany(cascade=CascadeType.ALL)\n"
+ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
+ " Set<Order> orders;\n"
+ "\n"
+ " // Getter/setter and business methods\n"
+ "}]]>"
+
+#: index.docbook:2748
+msgid "The <literal>UserType</literal> can now retrieve the value for the parameter named <literal>default</literal> from the <literal>Properties</literal> object passed to it."
+msgstr "JDK 5.0 Annotations(ê·¸ë¦¬ê³ JSR-220)ì ëí ì§ìì ì¬ì í ìì
ì´ ì§í ì¤ì´ê³ ìì±ëì§ ìììì ë
¸í¸íë¼. ìì¸í ê²ì Hibernate Anotations를 참조íë¼."
+
+#: index.docbook:2753
+msgid "If you use a certain <literal>UserType</literal> very often, it may be useful to define a shorter name for it. You can do this using the <literal><typedef></literal> element. Typedefs assign a name to a custom type, and may also contain a list of default parameter values if the type is parameterized."
+msgstr "ì°ì¶ëë íë¡í¼í°ë¤"
+
+#: index.docbook:2760
+msgid ""
+ "<![CDATA[<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name=\"default_zero\">\n"
+ " <param name=\"default\">0</param>\n"
+ "</typedef>]]>"
+msgstr "ì°ì¶ëë íë¡í¼í°ë¤ì ë°ì´í°ë² ì´ì¤ì ìí´ ì°ì¶ëë ê·¸ê²ë¤ì ê°ë¤ì ê°ë íë¡í¼í°ë¤ì´ë¤. ì íì ì¼ë¡, Hibernate ì´í리ì¼ì´ì
ë¤ì ë°ì´í°ë² ì´ì¤ê° ê°ë¤ì ìì±ìì¼°ë ììì íë¡í¼í°ë¤ì í¬í¨íë ê°ì²´ë¤ì <literal>ê°±ì </literal>ìí¬ íìê° ììë¤.íì§ë§ generatedë¡ ë§í¬ë íë¡í¼í°ë¤ì ì´í리ì¼ì´ì
ì¼ë¡ íì¬ê¸ ì´ ì±
ìì Hibernateìê² ìììí¤ëë¡ íë¤. 본ì§ì ì¼ë¡ Hibernateê° ì°ì¶ëë íë¡í¼í°ë¤ì ì ìíë ìí°í°ì ëí´ SQL INSERT ëë UPDATE ëª
ë ¹ì ë´ë¦´ ëë§ë¤ ë°ë¡ ì§íì ì°ì¶ëë ê°ë¤ì ê²ìí기 ìí´ íëì select ëª
ë ¹ì ë´ë¦°ë¤."
+
+#: index.docbook:2762
+msgid "<![CDATA[<property name=\"priority\" type=\"default_zero\"/>]]>"
+msgstr "generatedë¡ ë§í¬ë íë¡í¼í°ë¤ì ë¶ê°ì ì¼ë¡ inser ê°ë¥íì§ ììì¼ íê³ update ë¶ê°ë¥í´ì¼ íë¤. ì¤ì§ Properties marked as generated must additionally be non-insertable and non-updateable. <xref linkend=\"mapping-declaration-version\"/>versions, <xref linkend=\"mapping-declaration-timestamp\"/>timestamps, ê·¸ë¦¬ê³ <xref linkend=\"mapping-declaration-property\"/>ë¨ì íë¡í¼í°ë¤ ë§ì´ generatedë¡ ë§í¬ë ì ìë¤."
+
+#: index.docbook:2764
+msgid "It is also possible to override the parameters supplied in a typedef on a case-by-case basis by using type parameters on the property mapping."
+msgstr "<literal>never</literal> (ëí´í¸) - ë 주ì´ì§ íë¡í¼í° ê°ì´ ë°ì´í°ë² ì´ì¤ ë´ì ìì±ëì§ ìì ê²ìì ì미íë¤."
+
+#: index.docbook:2769
+msgid "Even though Hibernate's rich range of built-in types and support for components means you will very rarely <emphasis>need</emphasis> to use a custom type, it is nevertheless considered good form to use custom types for (non-entity) classes that occur frequently in your application. For example, a <literal>MonetaryAmount</literal> class is a good candidate for a <literal>CompositeUserType</literal>, even though it could easily be mapped as a component. One motivation for this is abstraction. With a custom type, your mapping documents would be future-proofed against possible changes in your way of representing monetary values."
+msgstr "<literal>insert</literal> - ë 주ì´ì§ íë¡í¼í° ê°ì´ insert ìì ìì±ëì§ë§, ì°¨íì ì
ë°ì´í¸ë¤ìì ë¤ì ìì±ëì§ ìì ê²ìì 기ì íë¤. ìì±-ë ì§ì ê°ì ê²ë¤ì´ ì´ ì¹´í
ê³ ë¦¬ ë´ë¡ í¬í¨ë ê²ì´ë¤. ë¹ë¡ <xref linkend=\"mapping-declaration-version\"/>versionê³¼ <xref linkend=\"mapping-declaration-timestamp\"/>timestamp íë¡í¼í°ë¤ì´ ìì±ëë ê²ì¼ë¡ì ë§í¬ë ì ìì ì§ë¼ë, ì´ ìµì
ì 거기ì ì´ì© ë¶ê°ë¥í¨ì ë
¸í¸íë¼..."
+
+#: index.docbook:2785
+msgid "Mapping a class more than once"
+msgstr "<literal>always</literal> - ë íë¡í¼í° ê°ì´ insert ìì update ì 모ëì ìì±ë¨ì 기ì íë¤."
+
+#: index.docbook:2786
+msgid "It is possible to provide more than one mapping for a particular persistent class. In this case you must specify an <emphasis>entity name</emphasis> do disambiguate between instances of the two mapped entities. (By default, the entity name is the same as the class name.) Hibernate lets you specify the entity name when working with persistent objects, when writing queries, or when mapping associations to the named entity."
+msgstr "ë³´ì¡° ë°ì´í°ë² ì´ì¤ ê°ì²´ë¤"
+
+#: index.docbook:2794
+msgid ""
+ "<![CDATA[<class name=\"Contract\" table=\"Contracts\"\n"
+ " entity-name=\"CurrentContract\">\n"
+ " ...\n"
+ " <set name=\"history\" inverse=\"true\"\n"
+ " order-by=\"effectiveEndDate desc\">\n"
+ " <key column=\"currentContractId\"/>\n"
+ " <one-to-many entity-name=\"HistoricalContract\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Contract\" table=\"ContractHistory\"\n"
+ " entity-name=\"HistoricalContract\">\n"
+ " ...\n"
+ " <many-to-one name=\"currentContract\"\n"
+ " column=\"currentContractId\"\n"
+ " entity-name=\"CurrentContract\"/>\n"
+ "</class>]]>"
+msgstr "Hibernate 매í íì¼ë¤ ë´ì ì¬ì©ì ì¤í¤ë§ë¥¼ ìì íê² ì ìí기 ìí ë¥ë ¥ì ì ê³µí기 ìí´ì, Hibernateì ì¤í¤ë§ ë°©ì¶ ë구ë¤ê³¼ í¨ê» ììì ì¸ ë°ì´í°ë² ì´ì¤ ê°ì²´ë¤ì ëí CREATEì DROPì íì©í´ì¤ë¤. ë¹ë¡ í¸ë¦¬ê±°ë¤ ëë ë´ì¥ íë¡ìì ë¤ê³¼ ê°ì ê²ë¤ì ìì±ìí¤ê³ ëë¡ìí¤ê¸° ì´í´ í¹ë³í ê³ ìëììì§ë¼ë íëì <literal>java.sql.Statement.execute()</literal> ë©ìë를 íµí´ ì¤íë ì ìë SQL ëª
ë ¹ì´ ì¬ê¸°ì ì í¨íë¤(ALTERs, INSERTS, 기í). ë³´ì¡° ë°0ì´í°ë² ì´ì¤ ê°ì²´ë¤ì ì ìíë ë ê°ì§ 모ëë¤ì´ 본ì§ì ì¼ë¡ ì¡´ì¬íë¤..."
+
+#: index.docbook:2796
+msgid "Notice how associations are now specified using <literal>entity-name</literal> instead of <literal>class</literal>."
+msgstr "첫 ë²ì§¸ 모ëë 매í íì¼ ë°ê¹¥ìì CREATE ë° DROP ëª
ë ¹ë¤ì ëª
ìì ì¼ë¡ ëì´íë ê²ì´ë¤:"
+
+#: index.docbook:2804
+msgid "SQL quoted identifiers"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <create>CREATE TRIGGER my_trigger ...</create>\n"
+ " <drop>DROP TRIGGER my_trigger</drop>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:2805
+msgid "You may force Hibernate to quote an identifier in the generated SQL by enclosing the table or column name in backticks in the mapping document. Hibernate will use the correct quotation style for the SQL <literal>Dialect</literal> (usually double quotes, but brackets for SQL Server and backticks for MySQL)."
+msgstr "ëë²ì§¸ 모ëë CREATE ë° DROP ëª
ë ¹ë¤ì ìì±ìí¤ë ë°©ë²ì ìê³ ìë íëì ë§ì¶¤ í´ëì¤ë¥¼ ì ê³µíë ê²ì´ë¤. ì´ ë§ì¶¤ í´ëì¤ë <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> ì¸í°íì´ì¤ë¥¼ 구íí´ì¼ íë¤."
+
+#: index.docbook:2812
+msgid ""
+ "<![CDATA[<class name=\"LineItem\" table=\"`Line Item`\">\n"
+ " <id name=\"id\" column=\"`Item Id`\"/><generator class=\"assigned\"/></id>\n"
+ " <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:2818
+msgid "Metadata alternatives"
+msgstr "ë§ë¶ì¬ ì´ë¤ ë°ì´í°ë² ì´ì¤ ê°ì²´ë¤ì ì´ë¤ dialectë¤ì´ ì¬ì©ë ë ê·¸ê²ë¤ì´ ë¨ì§ ì ì©ë ì ìëë¡ ì íì ì¼ë¡ ë³ëë ì ìë¤."
+
+#: index.docbook:2820
+msgid "XML isn't for everyone, and so there are some alternative ways to define O/R mapping metadata in Hibernate."
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.Oracle9Dialect\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.OracleDialect\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:2825
+msgid "Using XDoclet markup"
+msgstr ""
+
+#: index.docbook:2827
+msgid "Many Hibernate users prefer to embed mapping information directly in sourcecode using XDoclet <literal>@hibernate.tags</literal>. We will not cover this approach in this document, since strictly it is considered part of XDoclet. However, we include the following example of the <literal>Cat</literal> class with XDoclet mappings."
+msgstr ""
+
+#: index.docbook:2834
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "/**\n"
+ " * @hibernate.class\n"
+ " * table=\"CATS\"\n"
+ " */\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ " private Date birthdate;\n"
+ " private Cat mother;\n"
+ " private Set kittens\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " /*\n"
+ " * @hibernate.id\n"
+ " * generator-class=\"native\"\n"
+ " * column=\"CAT_ID\"\n"
+ " */\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.many-to-one\n"
+ " * column=\"PARENT_ID\"\n"
+ " */\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"BIRTH_DATE\"\n"
+ " */\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"WEIGHT\"\n"
+ " */\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"COLOR\"\n"
+ " * not-null=\"true\"\n"
+ " */\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.set\n"
+ " * inverse=\"true\"\n"
+ " * order-by=\"BIRTH_DATE\"\n"
+ " * @hibernate.collection-key\n"
+ " * column=\"PARENT_ID\"\n"
+ " * @hibernate.collection-one-to-many\n"
+ " */\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"SEX\"\n"
+ " * not-null=\"true\"\n"
+ " * update=\"false\"\n"
+ " */\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2836
+msgid "See the Hibernate web site for more examples of XDoclet and Hibernate."
+msgstr ""
+
+#: index.docbook:2843
+msgid "Using JDK 5.0 Annotations"
+msgstr ""
+
+#: index.docbook:2845
+msgid "JDK 5.0 introduced XDoclet-style annotations at the language level, type-safe and checked at compile time. This mechnism is more powerful than XDoclet annotations and better supported by tools and IDEs. IntelliJ IDEA, for example, supports auto-completion and syntax highlighting of JDK 5.0 annotations. The new revision of the EJB specification (JSR-220) uses JDK 5.0 annotations as the primary metadata mechanism for entity beans. Hibernate3 implements the <literal>EntityManager</literal> of JSR-220 (the persistence API), support for mapping metadata is available via the <emphasis>Hibernate Annotations</emphasis> package, as a separate download. Both EJB3 (JSR-220) and Hibernate3 metadata is supported."
+msgstr ""
+
+#: index.docbook:2856
+msgid "This is an example of a POJO class annotated as an EJB entity bean:"
+msgstr ""
+
+#: index.docbook:2860
+msgid ""
+ "<![CDATA[@Entity(access = AccessType.FIELD)\n"
+ "public class Customer implements Serializable {\n"
+ "\n"
+ " @Id;\n"
+ " Long id;\n"
+ "\n"
+ " String firstName;\n"
+ " String lastName;\n"
+ " Date birthday;\n"
+ "\n"
+ " @Transient\n"
+ " Integer age;\n"
+ "\n"
+ " @Embedded\n"
+ " private Address homeAddress;\n"
+ "\n"
+ " @OneToMany(cascade=CascadeType.ALL)\n"
+ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
+ " Set<Order> orders;\n"
+ "\n"
+ " // Getter/setter and business methods\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2862
+msgid "Note that support for JDK 5.0 Annotations (and JSR-220) is still work in progress and not completed. Please refer to the Hibernate Annotations module for more details."
+msgstr ""
+
+#: index.docbook:2871
+msgid "Generated Properties"
+msgstr ""
+
+#: index.docbook:2872
+msgid "Generated properties are properties which have their values generated by the database. Typically, Hibernate applications needed to <literal>refresh</literal> objects which contain any properties for which the database was generating values. Marking properties as generated, however, lets the application delegate this responsibility to Hibernate. Essentially, whenever Hibernate issues an SQL INSERT or UPDATE for an entity which has defined generated properties, it immediately issues a select afterwards to retrieve the generated values."
+msgstr ""
+
+#: index.docbook:2881
+msgid "Properties marked as generated must additionally be non-insertable and non-updateable. Only <xref linkend=\"mapping-declaration-version\"/>versions, <xref linkend=\"mapping-declaration-timestamp\"/>timestamps, and <xref linkend=\"mapping-declaration-property\"/>simple properties can be marked as generated."
+msgstr ""
+
+#: index.docbook:2888
+msgid "<literal>never</literal> (the default) - means that the given property value is not generated within the database."
+msgstr ""
+
+#: index.docbook:2892
+msgid "<literal>insert</literal> - states that the given property value is generated on insert, but is not regenerated on subsequent updates. Things like created-date would fall into this category. Note that even thought <xref linkend=\"mapping-declaration-version\"/>version and <xref linkend=\"mapping-declaration-timestamp\"/>timestamp properties can be marked as generated, this option is not available there..."
+msgstr ""
+
+#: index.docbook:2900
+msgid "<literal>always</literal> - states that the property value is generated both on insert and on update."
+msgstr ""
+
+#: index.docbook:2907
+msgid "Auxiliary Database Objects"
+msgstr ""
+
+#: index.docbook:2908
+msgid "Allows CREATE and DROP of arbitrary database objects, in conjunction with Hibernate's schema evolution tools, to provide the ability to fully define a user schema within the Hibernate mapping files. Although designed specifically for creating and dropping things like triggers or stored procedures, really any SQL command that can be run via a <literal>java.sql.Statement.execute()</literal> method is valid here (ALTERs, INSERTS, etc). There are essentially two modes for defining auxiliary database objects..."
+msgstr ""
+
+#: index.docbook:2917
+msgid "The first mode is to explicitly list the CREATE and DROP commands out in the mapping file:"
+msgstr ""
+
+#: index.docbook:2921
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <create>CREATE TRIGGER my_trigger ...</create>\n"
+ " <drop>DROP TRIGGER my_trigger</drop>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2922
+msgid "The second mode is to supply a custom class which knows how to construct the CREATE and DROP commands. This custom class must implement the <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> interface."
+msgstr ""
+
+#: index.docbook:2927
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2928
+msgid "Additionally, these database objects can be optionally scoped such that they only apply when certain dialects are used."
+msgstr ""
+
+#: index.docbook:2932
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.Oracle9Dialect\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.OracleDialect\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/batch.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/batch.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/batch.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,374 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Batch processing"
+msgstr "Batch ì²ë¦¬"
+
+#: index.docbook:7
+msgid "A naive approach to inserting 100 000 rows in the database using Hibernate might look like this:"
+msgstr "Hibernate를 ì¬ì©íì¬ ë°ì´í°ë² ì´ì¤ ë´ìì 100 000 ê°ì íë¤ì ì½ì
ìí¤ë 본ëì ì ê·¼ë²ì ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:12
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ "}\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ "}\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:14
+msgid "This would fall over with an <literal>OutOfMemoryException</literal> somewhere around the 50 000th row. That's because Hibernate caches all the newly inserted <literal>Customer</literal> instances in the session-level cache."
+msgstr "ì´ê²ì 50 000ë²ì§¸ í ê°ê¹ì´ ê³³ìì <literal>OutOfMemoryException</literal>ì¼ë¡ ë¨ì´ì§ ê²ì´ë¤. ê·¸ê²ì Hibernateê° session-level ìºì ìì 모ë ìë¡ì´ ì½ì
ë <literal>Customer</literal> ì¸ì¤í´ì¤ë¤ì ìºììí¤ê¸° ë문ì´ë¤."
+
+#: index.docbook:20
+msgid "In this chapter we'll show you how to avoid this problem. First, however, if you are doing batch processing, it is absolutely critical that you enable the use of JDBC batching, if you intend to achieve reasonable performance. Set the JDBC batch size to a reasonable number (say, 10-50):"
+msgstr "ì´ ì¥ìì ì°ë¦¬ë ì´ ë¬¸ì 를 í¼íë ë°©ë²ì ë¹ì ìê² ë³´ì¬ì¤ ê²ì´ë¤. íì§ë§ 먼ì ë¹ì ì´ ë°°ì¹ ì²ë¦¬ë¥¼ ííë ì¤ì´ë¼ë©´, ë¹ì ì´ ì ë¹í í¼í¬ë¨¼ì¤ë¥¼ ì±ì·¨íë ¤ê³ í ê²½ì°ì ë¹ì ì´ JDBC ë°°ì¹ ì¬ì©ì ê°ë¥íê² íë ê²ì ì ëì ì¼ë¡ íìíë¤. JDBC ë°°ì¹ ì¬ì´ì¦ë¥¼ ì ë¹í ì«ì(10-50)ë¡ ì¤ì íë¼:"
+
+#: index.docbook:27
+msgid "<![CDATA[hibernate.jdbc.batch_size 20]]>"
+msgstr "<![CDATA[hibernate.jdbc.batch_size 20]]>"
+
+#: index.docbook:29
+msgid "Note that Hibernate disables insert batching at the JDBC level transparently if you use an <literal>identiy</literal> identifier generator."
+msgstr "ë§ì¼ ë¹ì ì´ <literal>identiy</literal> ìë³ì ìì±ì를 ì¬ì©í ê²½ì° Hibernateê° JDBC ë 벨ìì í¬ëª
íê² insert ë°°ì¹ìì
ì ì¬ì©ë¶ê°ë¥íê² íë¤ë ì ì ë
¸í¸íë¼."
+
+#: index.docbook:34
+msgid "You also might like to do this kind of work in a process where interaction with the second-level cache is completely disabled:"
+msgstr "ë¹ì ì ëí second-level ìºì를 ê°ì§ ìí¸ìì©ì´ ìì íê² ë¶ê°ë¥í íë¡ì¸ì¤ ë´ìì ì´ë° ì¢
ë¥ì ìì
ì ííê³ ì¶ì´í ìë ìë¤:"
+
+#: index.docbook:39
+msgid "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
+msgstr "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
+
+#: index.docbook:41
+msgid "However, this is not absolutely necessary, since we can explicitly set the <literal>CacheMode</literal> to disable interaction with the second-level cache."
+msgstr "íì§ë§ ì´ê²ì ì ëì ì¼ë¡ íìíì§ ìë¤. ìëíë©´ ì°ë¦¬ë second-level ìºììì ìí¸ìì©ì ë¶ê°ë¥íëë¡ í기 ìí´ ëª
ìì ì¼ë¡ <literal>CacheMode</literal>를 ì¤ì í ì ì기 ë문ì´ë¤."
+
+#: index.docbook:47
+msgid "Batch inserts"
+msgstr "Batch inserts"
+
+#: index.docbook:49
+msgid "When making new objects persistent, you must <literal>flush()</literal> and then <literal>clear()</literal> the session regularly, to control the size of the first-level cache."
+msgstr "ìë¡ì´ ê°ì²´ë¤ì ììí ìí¬ ë, ë¹ì ì first-level ìºìì ì¬ì´ì¦ë¥¼ ì ì´í기 ìí´ ì¸ì
ì ì 기ì ì¼ë¡ <literal>flush()</literal> ìí¤ê³ ëì <literal>clear()</literal> ìì¼ì¼ íë¤."
+
+#: index.docbook:55
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ " if ( i % 20 == 0 ) { //20, same as the JDBC batch size\n"
+ " //flush a batch of inserts and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ " if ( i % 20 == 0 ) { //20, same as the JDBC batch size\n"
+ " //flush a batch of inserts and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:60
+msgid "Batch updates"
+msgstr "Batch updates"
+
+#: index.docbook:62
+msgid "For retrieving and updating data the same ideas apply. In addition, you need to use <literal>scroll()</literal> to take advantage of server-side cursors for queries that return many rows of data."
+msgstr "ë°ì´í° ê²ìê³¼ ì
ë°ì´í¸ì ê²½ì° ëì¼í ê°ë
ë¤ì´ ì ì©ëë¤. ê²ë¤ê° ë¹ì ì ë§ì ë°ì´í° íë¤ì ë°ííë ì§ìë¤ì ëí´ ìë²-측 커ìë¤ì ì¥ì ì ì·¨íëë° <literal>scroll()</literal>ì ì¬ì©í íìê° ìë¤."
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .setCacheMode(CacheMode.IGNORE)\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "int count=0;\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " if ( ++count % 20 == 0 ) {\n"
+ " //flush a batch of updates and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .setCacheMode(CacheMode.IGNORE)\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "int count=0;\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " if ( ++count % 20 == 0 ) {\n"
+ " //flush a batch of updates and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:73
+msgid "The StatelessSession interface"
+msgstr "StatelessSession ì¸í°íì´ì¤"
+
+#: index.docbook:74
+msgid "Alternatively, Hibernate provides a command-oriented API that may be used for streaming data to and from the database in the form of detached objects. A <literal>StatelessSession</literal> has no persistence context associated with it and does not provide many of the higher-level life cycle semantics. In particular, a stateless session does not implement a first-level cache nor interact with any second-level or query cache. It does not implement transactional write-behind or automatic dirty checking. Operations performed using a stateless session do not ever cascade to associated instances. Collections are ignored by a stateless session. Operations performed via a stateless session bypass Hibernate's event model and interceptors. Stateless sessions are vulnerable to data aliasing effects, due to the lack of a first-level cache. A stateless session is a lower-level abstraction, much closer to the underlying JDBC."
+msgstr "ë¤ë¥¸ ë°©ë²ì¼ë¡ Hibernateë ë¶ë¦¬ë(detached) ê°ì²´ë¤ì íìì¼ë¡ ë°ì´í°ë² ì´ì¤ë¡ ê·¸ë¦¬ê³ ë°ì´í°ë² ì´ì¤ë¡ë¶í° ë°ì´í°ë¥¼ ì¤í¸ë¦¬ë°íëë° ì¬ì©ë ì ìë íëì ëª
ë ¹ ì§í¥ API를 ì ê³µíë¤. <literal>StatelessSession</literal>ì ê·¸ê²ê³¼ ì°ê´ë ìì 컨í
ì¤í¸ë¥¼ ê°ì§ ìê³ ë§ì ë³´ë¤ ëì ë 벨ì ìëª
주기 ì미를 ì ê³µíì§ ìëë¤. í¹í íëì ìí ìë ì¸ì
ì 첫 ë²ì§¸ ë 벨 ìºì를 구ííì§ ìê±°ë ììì ë ë²ì§¸ ë 벨 ìºì ëë ì§ì ìºìì ìí¸ìì©íì§ ìëë¤. ê·¸ê²ì ì íµì ì¸ ì°ê¸°-ì´ë©´(write-behind)ì ì²´í¹ì´ë ìëì ì¸ dirty ì²´í¹ì 구ííì§ ìëë¤. íëì ìí ìë ì¸ì
ì ì¬ì©íì¬ ìíë ì°ì°ë¤ì ì°ê´ë ì¸ì¤í´ì¤ë¤ì ëí´ ì¼ì¤ì¼ì´ë ëì§ ìëë¤. ì½ë ì
ë¤ì ìí ìë ì¸ì
ì ìí´ ë¬´ìëë¤. ìíìë ì¸ì
ì íµí´ ìíë ì°ì°ë¤ì Hibernateì!
ì´ë²¤í¸ 모íê³¼ ì¸í°ì
í°ë¤ì ì°ííë¤. ìíìë ì¸ì
ë¤ì 첫ë²ì§¸-ë 벨ì ìºìì ë¶ì¡±ì¼ë¡ ì¸í´ ë°ì´í° alias í¨ê³¼ë¤ì ì·¨ì½íë¤. ìíìë ì¸ì
ì 기본 JDBCì í¨ì¬ ë ê°ê¹ì´ íëì ë³´ë¤ ë®ì ë 벨ì ì¶ìí(abstraction)ì´ë¤."
+
+#: index.docbook:89
+msgid ""
+ "<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " session.update(customer);\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " session.update(customer);\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:91
+msgid "Note that in this code example, the <literal>Customer</literal> instances returned by the query are immediately detached. They are never associated with any persistence context."
+msgstr "ì´ ì½ë ìì ìì, ì§ìì ìí´ ë°íë <literal>Customer</literal> ì¸ì¤í´ì¤ë¤ì 곧ë°ê³ ë¶ë¦¬ëë¤(detached). ê·¸ê²ë¤ì ììì ìì 컨í
ì¤í¸ì ê²°ì½ ì°ê´ëì§ ìëë¤."
+
+#: index.docbook:97
+msgid "The <literal>insert(), update()</literal> and <literal>delete()</literal> operations defined by the <literal>StatelessSession</literal> interface are considered to be direct database row-level operations, which result in immediate execution of a SQL <literal>INSERT, UPDATE</literal> or <literal>DELETE</literal> respectively. Thus, they have very different semantics to the <literal>save(), saveOrUpdate()</literal> and <literal>delete()</literal> operations defined by the <literal>Session</literal> interface."
+msgstr "<literal>StatelessSession</literal> ì¸í°íì´ì¤ì ìí´ ì ìë <literal>insert(), update()</literal> ê·¸ë¦¬ê³ <literal>delete()</literal> ì°ì°ë¤ì ì§ì ì ì¸ ë°ì´í°ë² ì´ì¤ ì ê¸ ì°ì°ë¤ë¡ ê°ì£¼ëê³ , ê·¸ê²ì ê°ê° íëì SQL <literal>INSERT, UPDATE</literal> ëë <literal>DELETE</literal>ì ì¦ê°ì ì¸ ì¤íì¼ë¡ ê·ê²°ëë¤. ë°ë¼ì ê·¸ê²ë¤ì <literal>Session</literal> ì¸í°íì´ì¤ì ìí´ ì ìë <literal>save(), saveOrUpdate()</literal>ì <literal>delete()</literal> ì°ì°ë¤ê³¼ë ë§¤ì° ë¤ë¥¸ ì미ë¤ì ê°ëë¤."
+
+#: index.docbook:110
+msgid "DML-style operations"
+msgstr "DML-ì¤íì¼ ì°ì°ë¤"
+
+#: index.docbook:112
+msgid "As already discussed, automatic and transparent object/relational mapping is concerned with the management of object state. This implies that the object state is available in memory, hence manipulating (using the SQL <literal>Data Manipulation Language</literal> (DML) statements: <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>) data directly in the database will not affect in-memory state. However, Hibernate provides methods for bulk SQL-style DML statement execution which are performed through the Hibernate Query Language (<xref linkend=\"queryhql\"/>HQL)."
+msgstr "ì´ë¯¸ ë
¼ìíë¯ì´, ìëì ì´ê³ í¬ëª
í ê°ì²´/ê´ê³í 매íì ê°ì²´ ìíì ëí ê´ë¦¬ì ê´ê³ëë¤. ì´ê²ì ê°ì²´ ìíê° ë©ëª¨ë¦¬ ë´ìì ì´ì© ê°ë¥í¨ì ì미íë¯ë¡, (SQL <literal>Data Manipulation Language</literal>(DML) 문ì¥ë¤ : <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>를 ì¬ì©íì¬) ë°ì´í°ë² ì´ì¤ìì ì§ì ë°ì´í°ë¥¼ ì
ë°ì´í¸íê±°ë ìì íë ê²ì ë©ëª¨ë¦¬ ë´ ìíì ìí¥ì ì£¼ì§ ìì ê²ì´ë¤. íì§ë§ Hibernateë Hibernate Query Language (<xref linkend=\"queryhql\"/>HQL)를 íµí´ ì¤íëë ëë SQL-ì¤íì¼ì DML ë¬¸ì¥ ì¤íì ìí ë©ìëë¤ì ì ê³µíë¤."
+
+#: index.docbook:122
+msgid "The pseudo-syntax for <literal>UPDATE</literal> and <literal>DELETE</literal> statements is: <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?</literal>. Some points to note:"
+msgstr "<literal>UPDATE</literal>ì <literal>DELETE</literal> 문ì¥ë¤ì ëí ì ì¬ êµ¬ë¬¸ì ë¤ìê³¼ ê°ë¤: <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?</literal>. ë
¸í¸í ëª ê°ì§:"
+
+#: index.docbook:130
+msgid "In the from-clause, the FROM keyword is optional"
+msgstr "from-ì ìì, FROM í¤ìëë ìµì
ì´ë¤"
+
+#: index.docbook:135
+msgid "There can only be a single entity named in the from-clause; it can optionally be aliased. If the entity name is aliased, then any property references must be qualified using that alias; if the entity name is not aliased, then it is illegal for any property references to be qualified."
+msgstr "from-ì ë´ì í ê°ì ëª
ëª
ë ìí°í°ê° ì¤ì§ ì¡´ì¬í ì ìë¤; ê·¸ê²ì ì íì ì¼ë¡ aliasë ì ìë¤. ë§ì¼ ìí°í° ì´ë¦ì´ aliasëë©´, ê·¸ë ììì íë¡í¼í° 참조ë¤ì ê·¸ alias를 ì¬ì©íì¬ ììëì´ì¼ íë¤; ë§ì¼ ìí°í° ì´ë¦ì´ aliasëì§ ìì ê²½ì°, ììì íë¡í¼í° 참조ë¤ì ëí´ ììëë ê²ì ê·ì¹ì ì´ê¸ëë¤."
+
+#: index.docbook:143
+msgid "No <xref linkend=\"queryhql-joins-forms\"/>joins (either implicit or explicit) can be specified in a bulk HQL query. Sub-queries may be used in the where-clause; the subqueries, themselves, may contain joins."
+msgstr "joinë¤ì (í¨ì¶ì ì´ë ëª
ìì ì´ë ) ëë HQL ì§ì ìì ì§ì ë ì ìë¤. ìë¸-ì§ìë¤ì´ where-ì ì ì¬ì©ë ì ìë¤; ìë¸ì§ìë¤ ê·¸ ìì ë¤ì ì¡°ì¸ë¤ì í¬í¨í ì ìë¤."
+
+#: index.docbook:150
+msgid "The where-clause is also optional."
+msgstr "where-ì ëí ìµì
ì´ë¤."
+
+#: index.docbook:156
+msgid "As an example, to execute an HQL <literal>UPDATE</literal>, use the <literal>Query.executeUpdate()</literal> method (the method is named for those familiar with JDBC's <literal>PreparedStatement.executeUpdate()</literal>):"
+msgstr "íëì ìì ë¡ì, í ê°ì HQL <literal>UPDATE</literal>를 ì¤íí기 ìí´, <literal>Query.executeUpdate()</literal> ë©ìë(ì´ ë©ìëë JDBCì <literal>PreparedStatement.executeUpdate()</literal>ì ì ì¬íê² ëª
ëª
ëë¤)를 ì¬ì©íë¼:"
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";\n"
+ "// or String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";\n"
+ "// or String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:164
+msgid "HQL <literal>UPDATE</literal> statements, by default do not effect the <xref linkend=\"mapping-declaration-version\"/>version or the <xref linkend=\"mapping-declaration-timestamp\"/>timestamp property values for the affected entities; this is in keeping with the EJB3 specification. However, you can force Hibernate to properly reset the <literal>version</literal> or <literal>timestamp</literal> property values through the use of a <literal>versioned update</literal>. This is achieved by adding the <literal>VERSIONED</literal> keyword after the <literal>UPDATE</literal> keyword."
+msgstr "HQL <literal>UPDATE</literal> 문ì¥ë¤ì ëí´í¸ë¡ ìí¥ë°ë ìí°í°ë¤ì ëí <xref linkend=\"mapping-declaration-version\"/>version ëë <xref linkend=\"mapping-declaration-timestamp\"/>timestamp íë¡í¼í° ê°ë¤ì ìí¥ì ì£¼ì§ ìëë¤; ì´ê²ì EJB3 ëª
ì¸ììì ì ì§ëê³ ìë¤. íì§ë§ ë¹ì ì íì´ë²ë¤ì´í¸ë¡ íì¬ê¸ <literal>versioned update</literal>ì ì¬ì©ì íµí´ <literal>version</literal> ëë <literal>timestamp</literal> íë¡í¼í° ê°ë¤ì ì ì íê² ì¬ì¤ì íëë¡ ê°ì í ì ìë¤. ì´ê²ì <literal>UPDATE</literal> í¤ìë ë¤ì <literal>VERSIONED</literal> í¤ìë를 ì¶ê°ìì¼ì ì±ì·¨ëë¤."
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "String hqlVersionedUpdate = \"update versioned Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "String hqlVersionedUpdate = \"update versioned Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:176
+msgid "Note that custom version types (<literal>org.hibernate.usertype.UserVersionType</literal>) are not allowed in conjunction with a <literal>update versioned</literal> statement."
+msgstr "ë§ì¶¤í version íì
ë¤(<literal>org.hibernate.usertype.UserVersionType</literal>)ì <literal>update versioned</literal> 문ì¥ê³¼ í¨ê» ì¬ì©íë ê²ì´ íì©ëì§ ììì ë
¸í¸íë¼."
+
+#: index.docbook:181
+msgid "To execute an HQL <literal>DELETE</literal>, use the same <literal>Query.executeUpdate()</literal> method:"
+msgstr "HQL <literal>DELETE</literal>를 ì¤ííë ¤ë©´, ê°ì ë©ìë <literal>Query.executeUpdate()</literal>를 ì¬ì©íë¼:"
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlDelete = \"delete Customer c where c.name = :oldName\";\n"
+ "// or String hqlDelete = \"delete Customer where name = :oldName\";\n"
+ "int deletedEntities = s.createQuery( hqlDelete )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlDelete = \"delete Customer c where c.name = :oldName\";\n"
+ "// or String hqlDelete = \"delete Customer where name = :oldName\";\n"
+ "int deletedEntities = s.createQuery( hqlDelete )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:188
+msgid "The <literal>int</literal> value returned by the <literal>Query.executeUpdate()</literal> method indicate the number of entities effected by the operation. Consider this may or may not correlate to the number of rows effected in the database. An HQL bulk operation might result in multiple actual SQL statements being executed, for joined-subclass, for example. The returned number indicates the number of actual entities affected by the statement. Going back to the example of joined-subclass, a delete against one of the subclasses may actually result in deletes against not just the table to which that subclass is mapped, but also the \"root\" table and potentially joined-subclass tables further down the inheritence hierarchy."
+msgstr "<literal>Query.executeUpdate()</literal> ë©ìëì ìí´ ë°íëë <literal>int</literal> ê°ì ê·¸ ì¤í¼ë ì´ì
ì ìí´ ìí¥ë°ì ìí°í°ë¤ì ê°ì를 ëíë¸ë¤. ì´ê²ì´ ë°ì´í°ë² ì´ì¤ ë´ìì ìí¥ë°ì íë¤ì ê°ìì ìê´ì´ ìëì§ ìëì§ ì¬ë¶ë¥¼ ì´í´ë³´ì. HQL ëë ì¤í¼ë ì´ì
ì ì를 ë¤ì´ joined-subclassì ê²½ì°ì ì¤í ì¤ì¸ ì¬ë¬ ê°ì ì¤ì SQL 문ì¥ë¤ë¡ ê·ê²°ë ì ìë¤. ë°íëë ì«ìë ê·¸ 문ì¥ì ìí´ ìí¥ë°ì ì¤ì ìí°í°ë¤ì ê°ì를 ëíë¸ë¤. joined-subclass ìì ë¡ ëëìê°ë©´, ìë¸ í´ëì¤ë¤ ì¤ íëì ëí ìì ë ë¨ì§ ê·¸ ìë¸í´ëì¤ê° 매íëì´ ìë í
ì´ë¸ì ëí ìì ë¿ë§ ìëë¼ ëí \"루í¸\" í
ì´ë¸ê³¼ ìì ê³ì¸µìì ë ë´ë ¤ì¨ ì ì ì ì¼ë¡ ì¡°ì¸ë-ìë¸í´ëì¤ í
ì´ë¸ë¤ì ëí ìì ë¤ë¡ ê·ê²°ë ì ìë¤."
+
+#: index.docbook:199
+msgid "The pseudo-syntax for <literal>INSERT</literal> statements is: <literal>INSERT INTO EntityName properties_list select_statement</literal>. Some points to note:"
+msgstr "ì¥ëì ë°°í¬ë³¸ë¤ìì ì ë¬ë ëë HQL ì¤í¼ë ì´ì
ë¤ì ëí ëª ê°ì§ ì íë¤ì´ íì¬ ì¡´ì¬í¨ì ë
¸í¸íë¼; ìì¸í ê²ì JIRA ë¡ë맵ì 참조íë¼. <literal>INSERT</literal> 문ì¥ë¤ì ìí ì ì¬-구문ì ë¤ìê³¼ ê°ë¤: <literal>INSERT INTO EntityName properties_list select_statement</literal>. ë
¸í¸í ëª ê°ì§:"
+
+#: index.docbook:207
+msgid "Only the INSERT INTO ... SELECT ... form is supported; not the INSERT INTO ... VALUES ... form."
+msgstr "ì¤ì§ INSERT INTO ... SELECT ... íì ë§ì¼ ì§ìëë¤; INSERT INTO ... VALUES ... íìì ì§ìëì§ ìëë¤."
+
+#: index.docbook:210
+msgid "The properties_list is analogous to the <literal>column speficiation</literal> in the SQL <literal>INSERT</literal> statement. For entities involved in mapped inheritence, only properties directly defined on that given class-level can be used in the properties_list. Superclass properties are not allowed; and subclass properties do not make sense. In other words, <literal>INSERT</literal> statements are inherently non-polymorphic."
+msgstr "properties_listë SQL <literal>INSERT</literal> ë´ìì <literal>column speficiation</literal>ê³¼ ì ì¬íë¤. 매íë ììì ì°¸ì¬íë ìí°í°ë¤ì ê²½ì°, ê·¸ 주ì´ì§ í´ëì¤-ë 벨 ìì ì§ì ì ìë íë¡í¼í°ë¤ ë§ì´ properties_listì ì¬ì©ë ì ìë¤. ìí¼í´ëì¤ íë¡í¼í°ë¤ì íì©ëì§ ìëë¤; ê·¸ë¦¬ê³ ìë¸í´ëì¤ íë¡í¼í°ë¤ì ìë¯¸ê° ìë¤. ë¬ë¦¬ ë§í´ <literal>INSERT</literal> 문ì¥ë¤ì 본ëì ì¼ë¡ ë¤íì ì´ì§ ìë¤."
+
+#: index.docbook:220
+msgid "select_statement can be any valid HQL select query, with the caveat that the return types must match the types expected by the insert. Currently, this is checked during query compilation rather than allowing the check to relegate to the database. Note however that this might cause problems between Hibernate <literal>Type</literal>s which are <emphasis>equivalent</emphasis> as opposed to <emphasis>equal</emphasis>. This might cause issues with mismatches between a property defined as a <literal>org.hibernate.type.DateType</literal> and a property defined as a <literal>org.hibernate.type.TimestampType</literal>, even though the database might not make a distinction or might be able to handle the conversion."
+msgstr "select_statementë ë°í íì
ë¤ì´ insertì ìí´ ê¸°ëëë íì
ë¤ê³¼ ì¼ì¹í´ì¼ íë¤ë ë¨ì íì ììì ì í¨í HQL select ì§ìì¼ ì ìë¤. íì¬ ì´ê²ì ì²´í¬ë¥¼ ë°ì´í°ë² ì´ì¤ë¡ ì´ê´ìí¤ë ê²ì íì©í기 ë³´ë¤ë ì§ì ì»´íì¼ ëìì ì²´í¬ëë¤. íì§ë§ ì´ê²ì <emphasis>equal</emphasis>ê³¼ë ëì¡°ì ì¼ë¡ <emphasis>ë±ê°ì¸(equivalent)</emphasis> Hibernate <literal>Type</literal>ë¤ ì¬ì´ìì 문ì ì ë¤ì ì¼ì¼í¬ ìë ììì ë
¸í¸íë¼. ë¹ë¡ ë°ì´í°ë² ì´ì¤ê° 구ë³ì§ì§ ìì ì ìê±°ë ë³íì ì²ë¦¬í ì ìì ì§ë¼ë, ì´ê²ì <literal>org.hibernate.type.DateType</literal>ë¡ì ì ìë íë¡í¼í°ì <literal>org.hibernate.type.TimestampType</literal>ì¼ë¡ ì ìë íë¡í¼í° ì¬ì´ì ë¶ì¼ì¹ ìì ë¤ì ì¼ì¼í¨ë¤."
+
+#: index.docbook:232
+msgid "For the id property, the insert statement gives you two options. You can either explicitly specify the id property in the properties_list (in which case its value is taken from the corresponding select expression) or omit it from the properties_list (in which case a generated value is used). This later option is only available when using id generators that operate in the database; attempting to use this option with any \"in memory\" type generators will cause an exception during parsing. Note that for the purposes of this discussion, in-database generators are considered to be <literal>org.hibernate.id.SequenceGenerator</literal> (and its subclasses) and any implementors of <literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>. The most notable exception here is <literal>org.hibernate.id.TableHiLoGenerator</literal>, which cannot be used because it does not expose a selectable way to get its values."
+msgstr "id íë¡í¼í°ì ê²½ì°, insert 문ì¥ì ë¹ì ìê² ë ê°ì ìµì
ì ì¤ë¤. ë¹ì ì properties_list ë´ì id íë¡í¼í°ë¥¼ ëª
ìì ì¼ë¡ ì§ì í ì ìê±°ë(ê·¸ê²ì ê°ì´ ëìíë select ííìì¼ë¡ë¶í° ì»ì´ì§ ê²½ì°) ëë properties_listìì ê·¸ê²ì ìëµí ìë ìë¤ (ì°ì¶ë ê°ì´ ì¬ì©ëë ê²½ì°). ì´ íìì ìµì
ì ë°ì´í°ë² ì´ì¤ ë´ìì ì°ì°ëë id ì°ì°ìë¤ì ì¬ì©í ëìë§ ì´ì© ê°ë¥íë¤; ììì \"ë©ëª¨ë¦¬ ë´\" íì
ì°ì°ìë¤ê³¼ í¨ê» ì´ ìµì
ì ì¬ì©íë ¤ê³ ìëíë ê²ì íì± ëìì ìì¸ìí©ì ì¼ì¼í¬ ê²ì´ë¤. ì´ ë
¼ìì 목ì ì, ë°ì´í°ë² ì´ì¤ ë´ ì°ì¶ì(generator)ë¤ì <literal>org.hibernate.id.SequenceGenerator</literal> (ê·¸ë¦¬ê³ ê·¸ê²ì ìë¸í´ëì¤ë¤) ê·¸ë¦¬ê³ ììì <literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>ì 구íìë¤ì´ë¼ê³ ê°ì£¼ë¨ì ë
¸í¸íë¼. ì¬ê¸°ì ê°ì¥ 주목í!
ë§í ìì¸ìí©ì ê·¸ê²ì´ ê·¸ê²ì ê°ë¤ì ì»ê¸° ìí select ê°ë¥í ë°©ë²ì ë
¸ì¶ìí¤ì§ ì기 ë문ã
ì ì¬ì©ë ì ìë <literal>org.hibernate.id.TableHiLoGenerator</literal>ì´ë¤."
+
+#: index.docbook:247
+msgid "For properties mapped as either <literal>version</literal> or <literal>timestamp</literal>, the insert statement gives you two options. You can either specify the property in the properties_list (in which case its value is taken from the corresponding select expressions) or omit it from the properties_list (in which case the <literal>seed value</literal> defined by the <literal>org.hibernate.type.VersionType</literal> is used)."
+msgstr "<literal>version</literal> ëë <literal>timestamp</literal>ë¡ì 매íë íë¡í¼í°ë¤ì ê²½ì°ì, insert 문ì¥ì ë¹ì ìê² ë ê°ì ìµì
ë¤ì ì¤ë¤. ë¹ì ì properties_list ë´ì ê·¸ íë¡í¼í°ë¥¼ ì§ì í ì ìê±°ë (ê·¸ ê²ì ê°ì´ ëìíë select ííìì¼ë¡ë¶í° ì»ì´ì§ ê²½ì°) ëë properties_listìì ê·¸ê²ì ìëµí ì ìë¤ (<literal>org.hibernate.type.VersionType</literal>ì ìí´ ì ìë <literal>seed value</literal> ê°ì´ ì¬ì©ëë ê²½ì°)."
+
+#: index.docbook:257
+msgid "An example HQL <literal>INSERT</literal> statement execution:"
+msgstr "ìì HQL <literal>INSERT</literal> ë¬¸ì¥ ì¤í:"
+
+#: index.docbook:261
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";\n"
+ "int createdEntities = s.createQuery( hqlInsert )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";\n"
+ "int createdEntities = s.createQuery( hqlInsert )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/best_practices.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/best_practices.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/best_practices.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,168 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Best Practices"
+msgstr "ìµìì ì¤ì ê²½íë¤"
+
+#: index.docbook:9
+msgid "Write fine-grained classes and map them using <literal><component></literal>."
+msgstr "fine-grained í´ëì¤ë¤ì ìì±íê³ <literal><component></literal>를 ì¬ì©íì¬ ê·¸ê²ë¤ì 매ííë¼."
+
+#: index.docbook:11
+msgid "Use an <literal>Address</literal> class to encapsulate <literal>street</literal>, <literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>. This encourages code reuse and simplifies refactoring."
+msgstr "<literal>street</literal>, <literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>를 캡ìí ìí¤ëë° <literal>Address</literal> í´ëì¤ë¥¼ ì¬ì©íë¼. ì´ê²ì ì½ë ì¬ì¬ì©ì±ì ì´ì§ìí¤ê³ 리í©í ë§ì ë¨ìí ìí¨ë¤."
+
+#: index.docbook:19
+msgid "Declare identifier properties on persistent classes."
+msgstr "ìì í´ëì¤ë¤ì ëí´ ìë³ì íë¡í¼í°ë¤ì ì ì¸íë¼."
+
+#: index.docbook:21
+msgid "Hibernate makes identifier properties optional. There are all sorts of reasons why you should use them. We recommend that identifiers be 'synthetic' (generated, with no business meaning)."
+msgstr "Hibernateë ìë³ì íë¡í¼í°ë¤ì ìµì
ì¼ë¡ ë§ë ë¤. ì ì°ë¦¬ê° ê·¸ê²ë¤ì ì¬ì©í´ì¼ íëê°ì ëí 모ë ì¢
ë¥ì ì´ì ë¤ì´ ì¡´ì¬íë¤. ì°ë¦¬ë ìë³ìë¤ì´ 'í©ì±(synthetic)'ì´ ëë(ë¹ì§ëì¤ ì미 ìì´ ìì±ëë) ê²ì ê¶ì¥íë¤."
+
+#: index.docbook:29
+msgid "Identify natural keys."
+msgstr "ê³ ì í¤ë¤ì ìë³íë¼."
+
+#: index.docbook:31
+msgid "Identify natural keys for all entities, and map them using <literal><natural-id></literal>. Implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the properties that make up the natural key."
+msgstr "모ë ìí°í°ë¤ì ëí´ ê³ ì í¤ë¤ì ìë³íê³ , <literal><natural-id></literal>를 ì¬ì©íì¬ ê·¸ê²ë¤ì 매ííë¼. ê³ ì í¤ë¥¼ 구ì±íë íë¡í¼í°ë¤ì ë¹êµí기 ìí´ <literal>equals()</literal>ì <literal>hashCode()</literal>를 구ííë¼."
+
+#: index.docbook:39
+msgid "Place each class mapping in its own file."
+msgstr "ê°ê°ì í´ëì¤ ë§¤íì ê·¸ê² ìì ì íì¼ ë´ì ìì¹ì§ìë¼."
+
+#: index.docbook:41
+msgid "Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</literal> in the file <literal>com/eg/Foo.hbm.xml</literal>. This makes particularly good sense in a team environment."
+msgstr "íëì íë©ì´ë¦¬ 매í 문ì를 ì¬ì©íì§ ë§ë¼. <literal>com/eg/Foo.hbm.xml</literal> íì¼ ìì <literal>com.eg.Foo</literal>를 매ííë¼. ì´ê²ì í íê²½ìì í¹í ì¢ì ì미를 ì¤ë¤."
+
+#: index.docbook:49
+msgid "Load mappings as resources."
+msgstr "매íë¤ì 리ìì¤ë¤ë¡ì ë¡ëìì¼ë¼."
+
+#: index.docbook:51
+msgid "Deploy the mappings along with the classes they map."
+msgstr "ê·¸ê²ë¤ì´ 매ííë í´ëì¤ë¤ì ë°ë¼ì 매íë¤ì ë°°ì¹íë¼"
+
+#: index.docbook:57
+msgid "Consider externalising query strings."
+msgstr "ì§ì 문ìì´ë¤ì ê°ê´í ìí¤ë ê²ì ê³ ë ¤íë¼."
+
+#: index.docbook:59
+msgid "This is a good practice if your queries call non-ANSI-standard SQL functions. Externalising the query strings to mapping files will make the application more portable."
+msgstr "ë¹ì ì ì§ìë¤ì´ ANSI íì¤ì´ ìë SQL í¨ìë¤ì í¸ì¶íë ê²½ì°ë ì¢ì ì¤ì ì°ìµì´ë¤. ì§ì 문ìì´ë¤ì 매í íì¼ë¤ìë¤ê° ì¸ë¶í ìí¤ë ê²ì ì´í리ì¼ì´ì
ì ë³´ë¤ ì´ìì± ìëë¡ ë§ë¤ì´ì¤ ê²ì´ë¤."
+
+#: index.docbook:67
+msgid "Use bind variables."
+msgstr "ë°ì¸ë ë³ìë¤ì ì¬ì©íë¼."
+
+#: index.docbook:69
+msgid "As in JDBC, always replace non-constant values by \"?\". Never use string manipulation to bind a non-constant value in a query! Even better, consider using named parameters in queries."
+msgstr "JDBCììì²ë¼, ìì ìë ê°ë¤ì \"?\"ë¡ ëì²´ìì¼ë¼. ì§ì ìì ìì ìë ê°ì ë°ì¸ë ìí¤ëë° ë¬¸ìì´ ì²ë¦¬ë¥¼ ê²°ì½ ì¬ì©íì§ ë§ë¼! ë ì¢ê²ë ì§ìë¤ ìì ëª
ëª
ë íë¼ë¯¸í°ë¤ì ì¬ì©íë ê²ì ê³ ë ¤íë¼."
+
+#: index.docbook:77
+msgid "Don't manage your own JDBC connections."
+msgstr "ë¹ì ìì ì JDBC 커ë¥ì
ë¤ì ê´ë¦¬íì§ ë§ë¼."
+
+#: index.docbook:79
+msgid "Hibernate lets the application manage JDBC connections. This approach should be considered a last-resort. If you can't use the built-in connections providers, consider providing your own implementation of <literal>org.hibernate.connection.ConnectionProvider</literal>."
+msgstr "Hibernateë ì´í리ì¼ì´ì
ì¼ë¡ íì¬ê¸ JDBC 커ë¥ì
ë¤ì ê´ë¦¬íëë¡ íë¤. ì´ ì ê·¼ë²ì ë§ì§ë§ ìë¨ì¼ë¡ì ê³ ë ¤ëì´ì¼ íë¤. ë§ì¼ ë¹ì ì´ ë¯¸ë¦¬ ë§ë¤ì´ì§ 커ë¥ì
íë¡ë°ì´ëë¤ì ì¬ì©í ì ìì ê²½ì°, <literal>org.hibernate.connection.ConnectionProvider</literal>ì ëí ë¹ì ìì ì 구íì ì ê³µíë ê²ì ê³ ë ¤íë¼."
+
+#: index.docbook:87
+msgid "Consider using a custom type."
+msgstr "ë§ì¶¤í íì
ì¬ì©ì ê³ ë ¤íë¼."
+
+#: index.docbook:89
+msgid "Suppose you have a Java type, say from some library, that needs to be persisted but doesn't provide the accessors needed to map it as a component. You should consider implementing <literal>org.hibernate.UserType</literal>. This approach frees the application code from implementing transformations to / from a Hibernate type."
+msgstr "ë¹ì ì´ ìë° íì
ì ê°ê³ ìê³ , ì´ë¤ ë¼ì´ë¸ë¬ë¦¬ë¡ë¶í° ë§íê³ , ê·¸ê²ì´ ììí ë íìê° ìì§ë§ ê·¸ê²ì ì»´í¬ëí¸ë¡ì 매íìí¤ëë° íìí accessorë¤ì ì ê³µí íìê° ìë¤ê³ ê°ì íì. ë¹ì ì <literal>org.hibernate.UserType</literal>ì 구ííë ê²ì ê³ ë ¤í´ì¼ í ê²ì´ë¤. ì´ ì ê·¼ë²ì Hibernate íì
ì¼ë¡/ì¼ë¡ë¶í° ë³íë¤ì 구ííë ê²ì¼ë¡ë¶í° ì´í리ì¼ì´ì
ì½ë를 ìì ë¡ê² í´ì¤ë¤."
+
+#: index.docbook:98
+msgid "Use hand-coded JDBC in bottlenecks."
+msgstr "ë³ëª© ì§ì ë¤ìì ììì
ì¼ë¡ ì½ë©ë JDBC를 ì¬ì©íë¼."
+
+#: index.docbook:100
+msgid "In performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. But please, wait until you <emphasis>know</emphasis> something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If you need to use direct JDBC, it might be worth opening a Hibernate <literal>Session</literal> and using that JDBC connection. That way you can still use the same transaction strategy and underlying connection provider."
+msgstr "ìì¤í
ì í¼í¬ë¨¼ì¤ê° ì¤ëí ììë¤ìì, ëªëª ì¢
ë¥ì ì¤í¼ë ì´ì
ë¤ì ì§ì ì ì¸ JDBCìì ì´ëì 본ë¤. ê·¸ë¬ë ë¹ì ì´ ì´ë¤ ê²ì´ ë³ëª©ì¸ì§ë¥¼ <emphasis>ì기</emphasis> ì ê¹ì§ 기ë¤ë¦¬ê¸¸ ë°ëë¤. ê·¸ë¦¬ê³ ì§ì ì ì¸ JDBCê° ë°ëì ë ë¹ ë¥´ë¤ê³ ê°ì íì§ ë§ë¼. ë§ì¼ ë¹ì ì´ ì§ì ì ì¸ JDBC를 ì¬ì©í íìê° ìì ê²½ì°, Hibernate <literal>Session</literal>ì ì´ê³ ê·¸ SQL 커ë¥ì
ì ì¬ì©í ê°ì¹ê° ìë¤. ê·¸ ë°©ë²ì¼ë¡ ë¹ì ì ëì¼í í¸ëìì
ë°©ëì 기본 커ë¥ì
íë¡ë°ì´ë를 ì¬ì í ì¬ì©í ì ìë¤"
+
+#: index.docbook:110
+msgid "Understand <literal>Session</literal> flushing."
+msgstr "<literal>Session</literal> flushingì ì´í´íë¼."
+
+#: index.docbook:112
+msgid "From time to time the Session synchronizes its persistent state with the database. Performance will be affected if this process occurs too often. You may sometimes minimize unnecessary flushing by disabling automatic flushing or even by changing the order of queries and other operations within a particular transaction."
+msgstr "ìê°ì´ ì§ë¨ì ë°ë¼ Sessionì ê·¸ê²ì ìì ìí를 ë°ì´í°ë² ì´ì¤ì ë기í ìí¨ë¤. ë§ì¼ ì´ ê³¼ì ì´ ë무 ì주 ë°ìí ê²½ì° í¼í¬ë¨¼ì¤ê° ìí¥ì ë°ì ê²ì´ë¤. ë¹ì ì ëëë¡ ìëì ì¸ flushingì ì¬ì© ë¶ê°ë¥íê² ë§ë¤ê±°ë í¹ì í¸ëìì
ë´ìì ì§ìë¤ì ììì ë¤ë¥¸ ì¤í¼ë ì´ì
ë¤ì ìì를 ë³ê²½ìì¼ì ë¶íìí flushingì ìµìí ìí¬ ì ìë¤."
+
+#: index.docbook:121
+msgid "In a three tiered architecture, consider using detached objects."
+msgstr "3-tier ìí¤í
ì²ìì, <literal>saveOrUpdate()</literal> ì¬ì©ì ê³ ë ¤íë¼."
+
+#: index.docbook:123
+msgid "When using a servlet / session bean architecture, you could pass persistent objects loaded in the session bean to and from the servlet / JSP layer. Use a new session to service each request. Use <literal>Session.merge()</literal> or <literal>Session.saveOrUpdate()</literal> to synchronize objects with the database."
+msgstr "servlet / session ë¹ ìí¤í
ì²ë¥¼ ì¬ì©í ë, ë¹ì ì sesson bean ë´ì ë¡ëë ìì ê°ì²´ë¤ì ìë¸ë¦¿/JSP ê³ì¸µì¼ë¡/ì¼ë¡ë¶í° ì ë¬í /ë°ì ì ìë¤. ê°ê°ì ìì²ì ìë¹ì¤íëë° ìë¡ì´ ì¸ì
ì ì¬ì©íë¼. ê°ì²´ë¤ì ë°ì´í°ë² ì´ì¤ì ë기í ìí¤ê¸° ìí´ì <literal>Session.merge()</literal> ëë <literal>Session.saveOrUpdate()</literal>를 ì¬ì©íë¼."
+
+#: index.docbook:132
+msgid "In a two tiered architecture, consider using long persistence contexts."
+msgstr "2-tier ìí¤í
ì²ìì, ìëª
ì´ ê¸´ ìì 컨í
ì¤í¸ë¤ì ì¬ì©íë ê²ì ê³ ë ¤íë¼."
+
+#: index.docbook:134
+msgid "Database Transactions have to be as short as possible for best scalability. However, it is often neccessary to implement long running <emphasis>application transactions</emphasis>, a single unit-of-work from the point of view of a user. An application transaction might span several client request/response cycles. It is common to use detached objects to implement application transactions. An alternative, extremely appropriate in two tiered architecture, is to maintain a single open persistence contact (session) for the whole life cycle of the application transaction and simply disconnect from the JDBC connection at the end of each request and reconnect at the beginning of the subsequent request. Never share a single session across more than one application transaction, or you will be working with stale data."
+msgstr "ë°ì´í°ë² ì´ì¤ í¸ëìì
ë¤ì ìµìì ê°ì©ì±ì ìí´ ê°ë¥í í 짧ìì¼ íë¤. íì§ë§ ì¥ê¸°ê° ì¤íëë <emphasis>ì´í리ì¼ì´ì
í¸ëìì
ë¤</emphasis>, ì¬ì©ìì ë·° ê´ì ìì í ê°ì ë¨ì ìì
ì 구ííë ê²ì´ ê°ë íìì ì´ë¤. íëì ì´í리ì¼ì´ì
í¸ëìì
ì ëª ê°ì í´ë¼ì´ì¸í¸ ìì²ë¤ê³¼ ìëµ ì£¼ê¸°ë¤ì ê±¸ì¹ ìë ìë¤. ì´í리ì¼ì´ì
í¸ëìì
ë¤ì 구ííëë° detached ê°ì²´ë¤ì ì¬ì©íë ê²ì´ ê³µíµì ì´ë¤. 2-í°ì´ ìí¤í
ì²ìì ë§¤ì° ì ì í ëìì ì´í리ì¼ì´ì
í¸ëìì
ì ì ì²´ ìëª
주기 ëìì í ê°ì ì´ë ¤ì§ ìì ì ì (ì¸ì
)ì ì ì§íë ê²ì´ê³ ê°ê°ì ìì²ì ëìì JDBC 커ë¥ì
ì ê°ë¨íê² ì°ê²°í´ì íê³ ì°¨íì ìì²ì ìì ìì ë¤ì ì°ê²°íë ê²ì´ë¤. í ê° ì´ìì ì´í리ì¼ì´ì
í¸ëìì
ì ê°ë¡ì§ë¬ì íëì ë¨ì¼ ì¸ì
ì ê²°ì½ ê³µì íì!
§ ë§ë¼. ê³µì í ê²½ì°ì ë¹ì ì ì¤í¨ì±ì´ ìë ë°ì´í°ë¡ ìì
íê² ë ê²ì´ë¤."
+
+#: index.docbook:148
+msgid "Don't treat exceptions as recoverable."
+msgstr "ìì¸ìí©ë¤ì 복구ê°ë¥í ê²ì¼ë¡ì ë¤ë£¨ì§ ë§ë¼."
+
+#: index.docbook:150
+msgid "This is more of a necessary practice than a \"best\" practice. When an exception occurs, roll back the <literal>Transaction</literal> and close the <literal>Session</literal>. If you don't, Hibernate can't guarantee that in-memory state accurately represents persistent state. As a special case of this, do not use <literal>Session.load()</literal> to determine if an instance with the given identifier exists on the database; use <literal>Session.get()</literal> or a query instead."
+msgstr "ì´ê²ì \"ìµìì\" ì¤ì ì´ ìë ë³´ë¤ íìì ì¸ ì¤ì ì´ë¤. ìì¸ìí©ì´ ë°ìí ë, <literal>Transaction</literal>ì 롤백ìí¤ê³ <literal>Session</literal>ì ë«ìë¼. ë§ì¼ ë¹ì ì´ ê·¸ë ê² íì§ ìì ê²½ì°, Hibernateë ë©ëª¨ë¦¬ ë´ ìíê° ìì ìí를 ì ííê² íííë ê²ì ë³´ì¦í ì ìë¤. ì´ í¹ë³í ê²½ì°ì²ë¼, ë§ì¼ 주ì´ì§ ìë³ì를 ê°ì§ ì¸ì¤í´ì¤ê° ë°ì´í°ë² ì´ì¤ ìì ì¡´ì¬íëì§ ì¬ë¶ë¥¼ ê²°ì íëë° <literal>Session.load()</literal>를 ì¬ì©íì§ ë§ë¼; ëì ì <literal>Session.get()</literal> ëë íëì ì§ì를 ì¬ì©íë¼."
+
+#: index.docbook:160
+msgid "Prefer lazy fetching for associations."
+msgstr "ì°ê´ë¤ì ëí lazy íì¹ì ì í¸íë¼."
+
+#: index.docbook:162
+msgid "Use eager fetching sparingly. Use proxies and lazy collections for most associations to classes that are not likely to be completely held in the second-level cache. For associations to cached classes, where there is an a extremely high probability of a cache hit, explicitly disable eager fetching using <literal>lazy=\"false\"</literal>. When an join fetching is appropriate to a particular use case, use a query with a <literal>left join fetch</literal>."
+msgstr "eager íì¹ì ê´ëíê² ì¬ì©íë¼. second-level ìºì ë´ì ìì íê² ë³´ê´ëì§ ìì ê² ê°ì í´ëì¤ë¤ì ëí ëë¶ë¶ì ì°ê´ë¤ì ëí´ íë½ìë¤ê³¼ lazy ì½ë ì
ë¤ì ì¬ì©íë¼. ìºìë í´ëì¤ë¤ì ëí ì°ê´ë¤ì ê²½ì°, ì´ê³³ì ìºì ì±ê³µì ë§¤ì° ëì íë¥ ì´ ì¡´ì¬íë ê³³ì´ë©°, <literal>lazy=\"false\"</literal>를 ì¬ì©íì¬ eager íì¹ì ëª
ìì ì¼ë¡ ì¬ì© ë¶ê°ë¥íê² íë¼. íì join íì¹ì´ í¹ì ì°ììì ëí´ ì ì í ë, íëì <literal>left join fetch</literal>를 ê°ì§ ì§ì를 ì¬ì©íë¼."
+
+#: index.docbook:172
+msgid "Use the <emphasis>open session in view</emphasis> pattern, or a disciplined <emphasis>assembly phase</emphasis> to avoid problems with unfetched data."
+msgstr "íì¹ëì§ ìì ë°ì´í° 문ì ì ë¤ì í¼í기 ìí´ <emphasis>ë·° ë´ì ì´ë ¤ì§ ì¸ì
(open session in view)</emphasis> í¨í´ ëë íëì ì 리ë <emphasis>ì´ì
ë¸ë¦¬ ë¨ê³(assembly phase)</emphasis>를 ì¬ì©íë¼."
+
+#: index.docbook:177
+msgid "Hibernate frees the developer from writing tedious <emphasis>Data Transfer Objects</emphasis> (DTO). In a traditional EJB architecture, DTOs serve dual purposes: first, they work around the problem that entity beans are not serializable; second, they implicitly define an assembly phase where all data to be used by the view is fetched and marshalled into the DTOs before returning control to the presentation tier. Hibernate eliminates the first purpose. However, you will still need an assembly phase (think of your business methods as having a strict contract with the presentation tier about what data is available in the detached objects) unless you are prepared to hold the persistence context (the session) open across the view rendering process. This is not a limitation of Hibernate! It is a fundamental requirement of safe transactional data access."
+msgstr "Hibernateë ê°ë°ìë¤ì´ <emphasis>Data Transfer Objects</emphasis> (DTO)를 ì§ë£¨íê² ìì±íë ê²ì¼ë¡ë¶í° ìì ë¡ê² í´ì¤ë¤. ì íµì ì¸ EJB ìí¤í
ì²ìì, DTOë ì´ì¤ ì©ëë¡ ê¸°ë¥íë¤: 첫 ë²ì§¸ë¡ ê·¸ê²ë¤ì ìí°í° ë¹ì¦ê° ì§ë ¬í ê°ë¥íì§ ìë 문ì ì ì ëí´ ì°©ìíë¤; ë ë²ì§¸ë¡ ê·¸ê²ë¤ì ë·°ì ìí´ ì¬ì©ëë 모ë ë°ì´í°ê° í리ì í
ì´ì
í°ì´ë¡ 컨í¸ë¡¤ì ë°íí기 ì ì DTOë¤ ìì¼ë¡ íì¹ëê³ ë§ì¬ë§ëë ì´ì
ë¸ë¦¬ ë¨ê³ë¥¼ ì묵ì ì¼ë¡ ì ìíë¤. Hibernateë 첫 ë²ì§¸ ì©ë를 ì ê±°ìí¨ë¤. íì§ë§ ë¹ì ì´ ë·° ë ëë§ íë¡ì¸ì¤ë¥¼ ê°ë¡ì§ë¬ ì´ë ¤ì ¸ ìë ìì 컨í
ì¤í¸(ì¸ì
)ì ë³´ê´í ì¤ë¹ê° ëì´ ìì§ ìë í, ë¹ì ì ì¬ì í ì´ì
ë¸ë¦¬ ë¨ê³ë¥¼ íìë¡ í ê²ì´ë¤(detached ê°ì²´ë¤ìì ì´ì©ê°ë¥í ë°ì´í°ê° 무ìì¸ì§ì ëí´ í리ì í
ì´ì
í°ì´ì ì격íê² ê³ì½ì ê°ëë¡!
ë¹ì ì ë¹ì§ëì¤ ë©ìëë¤ì ê³ ë ¤íë¼) ì´ê²ì Hibernateì íê³ì ì´ ìëë¤! ê·¸ê²ì ìì í í¸ëìì
ë°ì´í° ì ê·¼ì íì ì¡°ê±´ì´ë¤."
+
+#: index.docbook:191
+msgid "Consider abstracting your business logic from Hibernate."
+msgstr "Hibernateìì ë¹ì ì ë¹ì§ëì¤ ë¡ì§ì ì¶ìí ìí¤ë ê²ì ê³ ë ¤íë¼."
+
+#: index.docbook:193
+msgid "Hide (Hibernate) data-access code behind an interface. Combine the <emphasis>DAO</emphasis> and <emphasis>Thread Local Session</emphasis> patterns. You can even have some classes persisted by handcoded JDBC, associated to Hibernate via a <literal>UserType</literal>. (This advice is intended for \"sufficiently large\" applications; it is not appropriate for an application with five tables!)"
+msgstr "(Hibernate) ë°ì´í° ì¡ì¸ì¤ ì½ë를 ì¸í°íì´ì¤ ì´ë©´ì ìíìì¼ë¼. <emphasis>DAO</emphasis>ì <emphasis>Thread Local Session</emphasis> í¨í´ë¤ì ê²°í©ìì¼ë¼. ë¹ì ì ì¬ì§ì´ <literal>UserType</literal>ì íµí´ Hibernateì ì°ê´ë, ììì
ì¼ë¡ ì½ë©ë JDBCë¡ì ëªëª í´ëì¤ë¤ì ììí ìí¬ ìë ìë¤. (ì´ ì¶©ê³ ë \"충ë¶í í°\" ì´í리ì¼ì´ì
ë¤ì ëí ê²ì´ë¤; ê·¸ê²ì 5ê°ì í
ì´ë¸ë¤ì ê°ì§ ì´í리ì¼ì´ì
ì ëí´ìë ì ì íì§ ìë¤!)"
+
+#: index.docbook:203
+msgid "Don't use exotic association mappings."
+msgstr "ì ì¢
ì ì°ê´ 매íì ì¬ì©íì§ ë§ë¼."
+
+#: index.docbook:205
+msgid "Good usecases for a real many-to-many associations are rare. Most of the time you need additional information stored in the \"link table\". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, we think that most associations are one-to-many and many-to-one, you should be careful when using any other association style and ask yourself if it is really neccessary."
+msgstr "ì¤ì ì many-to-many ì°ê´ë¤ì ëí ì¢ì ì°ììë¤ì ë물ë¤. ëë¶ë¶ì ìê° ëì ë¹ì ì \"ì°ê²° í
ì´ë¸\" ë´ì ì ì¥ë ì¶ê°ì ì¸ ì 보를 íìë¡ íë¤. ì´ ê²½ì°ì, 매ê°íë ì°ê²° í´ëì¤ì ëí´ ë ê°ì one-to-many ì°ê´ë¤ì ì¬ì©íë ê²ì´ í¨ì¬ ë ì¢ë¤. ì¬ì¤ ì°ë¦¬ë ëë¶ë¶ì ì°ê´ë¤ì´ one-to-manyì many-to-oneì´ë¼ê³ ìê°íë©°, ë¹ì ì ë¤ë¥¸ ì°ê´ ì¤íì¼ì ì¬ì©í ë 주ìí´ì¼ íê³ ê·¸ê²ì´ ì§ì íìì ì¸ì§ë¥¼ ë¹ì ì¤ì¤ë¡ ì§ë¬¸íë¼."
+
+#: index.docbook:215
+msgid "Prefer bidirectional associations."
+msgstr "ìë°©í¥ ì°ê´ë¤ì ì í¸íë¼."
+
+#: index.docbook:217
+msgid "Unidirectional associations are more difficult to query. In a large application, almost all associations must be navigable in both directions in queries."
+msgstr "ë¨ë°©í¥ ì°ê´ë¤ì ì§ìíê¸°ê° ë ì´ë µë¤. ë§ì ì´í리ì¼ì´ì
ìì, ê±°ì 모ë ì°ê´ë¤ì ì§ìë¤ ë´ìì ì ë°©í¥ì¼ë¡ ë¤ë¹ê²ì´í¸ ê°ë¥í´ì¼ íë¤."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/collection_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/collection_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/collection_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1287 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Collection Mapping"
+msgstr "ì½ë ì
매í"
+
+#: index.docbook:8
+msgid "Persistent collections"
+msgstr "ìì ì½ë ì
ë¤"
+
+#: index.docbook:10
+msgid "Hibernate requires that persistent collection-valued fields be declared as an interface type, for example:"
+msgstr "ì를 ë¤ì´ Hibernateë ìì ì½ë ì
-ê°ì ê°ì§ íëë¤ì´ ì¸í°íì´ì¤ íì
ì¼ë¡ì ì ì¸ë ê²ì íìë¡ íë¤:"
+
+#: index.docbook:15
+msgid ""
+ "<![CDATA[public class Product {\n"
+ " private String serialNumber;\n"
+ " private Set parts = new HashSet();\n"
+ " \n"
+ " public Set getParts() { return parts; }\n"
+ " void setParts(Set parts) { this.parts = parts; }\n"
+ " public String getSerialNumber() { return serialNumber; }\n"
+ " void setSerialNumber(String sn) { serialNumber = sn; }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Product {\n"
+ " private String serialNumber;\n"
+ " private Set parts = new HashSet();\n"
+ " \n"
+ " public Set getParts() { return parts; }\n"
+ " void setParts(Set parts) { this.parts = parts; }\n"
+ " public String getSerialNumber() { return serialNumber; }\n"
+ " void setSerialNumber(String sn) { serialNumber = sn; }\n"
+ "}]]>"
+
+#: index.docbook:17
+msgid "The actual interface might be <literal>java.util.Set</literal>, <literal>java.util.Collection</literal>, <literal>java.util.List</literal>, <literal>java.util.Map</literal>, <literal>java.util.SortedSet</literal>, <literal>java.util.SortedMap</literal> or ... anything you like! (Where \"anything you like\" means you will have to write an implementation of <literal>org.hibernate.usertype.UserCollectionType</literal>.)"
+msgstr "ì¤ì ì¸í°íì´ì¤ë <literal>java.util.Set</literal>, <literal>java.util.Collection</literal>, <literal>java.util.List</literal>, <literal>java.util.Map</literal>, <literal>java.util.SortedSet</literal>, <literal>java.util.SortedMap</literal> ëë ë¹ì ì´ ì¢ìíë ì´ë¤ ê²ì¼ ì ìë¤!(ì¬ê¸°ì \"ë¹ì ì´ ì¢ìíë ì´ë¤ ê²\"ì´ë ë¹ì ì´ <literal>org.hibernate.usertype.UserCollectionType</literal>ì ëí 구íì ìì±í´ì¼ í¨ì ì미íë¤.)"
+
+#: index.docbook:26
+msgid "Notice how we initialized the instance variable with an instance of <literal>HashSet</literal>. This is the best way to initialize collection valued properties of newly instantiated (non-persistent) instances. When you make the instance persistent - by calling <literal>persist()</literal>, for example - Hibernate will actually replace the <literal>HashSet</literal> with an instance of Hibernate's own implementation of <literal>Set</literal>. Watch out for errors like this:"
+msgstr "ì°ë¦¬ê° <literal>HashSet</literal>ì ì¸ì¤í´ì¤ë¥¼ ê°ì§ ì¸ì¤í´ì¤ ë³ì를 ì´ê¸°í ìì¼°ë ë°©ë²ì 주목íë¼. ì´ê²ì ìë¡ì´ ì´ê¸°í ë(ë¹-ìì) ì¸ì¤í´ì¤ë¤ì ê°ì§ ì½ë ì
ê° íë¡í¼í°ë¤ì ì´ê¸°í ìí¤ë ìµì ì ë°©ë²ì´ë¤. ë¹ì ì´ -ì를 ë¤ì´ <literal>persist()</literal>를 í¸ì¶íì¬- ì¸ì¤í´ì¤ë¥¼ ììí ìí¬ ë Hibernateë ì¤ì ë¡ <literal>HashSet</literal>ì <literal>Set</literal>ì ëí Hibernate ìì ì 구íì ì¸ì¤í´ì¤ë¡ ëì²´ìí¬ ê²ì´ë¤. ë¤ìê³¼ ê°ì ì¤ë¥ë¤ì ê´ì°°íë¼:"
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "Cat kitten = new DomesticCat();\n"
+ "....\n"
+ "Set kittens = new HashSet();\n"
+ "kittens.add(kitten);\n"
+ "cat.setKittens(kittens);\n"
+ "session.persist(cat);\n"
+ "kittens = cat.getKittens(); // Okay, kittens collection is a Set\n"
+ "(HashSet) cat.getKittens(); // Error!]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "Cat kitten = new DomesticCat();\n"
+ "....\n"
+ "Set kittens = new HashSet();\n"
+ "kittens.add(kitten);\n"
+ "cat.setKittens(kittens);\n"
+ "session.persist(cat);\n"
+ "kittens = cat.getKittens(); // Okay, kittens collection is a Set\n"
+ "(HashSet) cat.getKittens(); // Error!]]>"
+
+#: index.docbook:38
+msgid "The persistent collections injected by Hibernate behave like <literal>HashMap</literal>, <literal>HashSet</literal>, <literal>TreeMap</literal>, <literal>TreeSet</literal> or <literal>ArrayList</literal>, depending upon the interface type."
+msgstr "Hibernateì ìí´ ëì
ë ìì ì½ë ì
ë¤ì ì¸í°íì´ì¤ íì
ì ë°ë¼ <literal>HashMap</literal>, <literal>HashSet</literal>, <literal>TreeMap</literal>, <literal>TreeSet</literal> ëë <literal>ArrayList</literal>ì ê°ì´ íìíë¤."
+
+#: index.docbook:45
+msgid "Collections instances have the usual behavior of value types. They are automatically persisted when referenced by a persistent object and automatically deleted when unreferenced. If a collection is passed from one persistent object to another, its elements might be moved from one table to another. Two entities may not share a reference to the same collection instance. Due to the underlying relational model, collection-valued properties do not support null value semantics; Hibernate does not distinguish between a null collection reference and an empty collection."
+msgstr "ì½ë ì
ì¸ì¤í´ì¤ë¤ì value íì
ë¤ì ê°ì§ íµìì í¹ì§ì ê°ëë¤. ê·¸ê²ë¤ì ìì ê°ì²´ì ìí´ ì°¸ì¡°ë ë ìëì ì¼ë¡ ììí ëê³ ì°¸ì¡° í´ì ë ë ìëì ì¼ë¡ ìì ëë¤. ë§ì¼ íëì ì½ë ì
ì´ íëì ìì ê°ì²´ë¡ë¶í° ë ë¤ë¥¸ ìì ê°ì²´ë¡ ì ë¬ë ë, ê·¸ê²ì ììë¤ì íëì í
ì´ë¸ë¡ë¶í° ë¤ë¥¸ í
ì´ë¸ë¡ ì´ëë ì ìë¤. ë ê°ì ìí°í°ë¤ì ëì¼í ì½ë ì
ì¸ì¤í´ì¤ì ëí 참조를 ê³µì íì§ ìëë¤. 기본 ê´ê³í 모í ë문ì ì½ë ì
ê° íë¡í¼í°ë¤ì null ê° ì미ë¤ì ì§ìíì§ ìëë¤; Hibernateë null ì½ë ì
참조ì 공백ì ì½ë ì
ì¬ì´ë¥¼ êµ¬ë³ ì§ì§ ìëë¤."
+
+#: index.docbook:56
+msgid "You shouldn't have to worry much about any of this. Use persistent collections the same way you use ordinary Java collections. Just make sure you understand the semantics of bidirectional associations (discussed later)."
+msgstr "ë¹ì ì ì´ê²ì ì´ë¤ ê²ì ëí´ ë무 ë§ì´ ê±±ì íì§ ììë ë ê²ì´ë¤. ë¹ì ì´ íµìì ìë° ì½ë ì
ë¤ì ì¬ì©íë ê²ê³¼ ëì¼í ë°©ë²ì¼ë¡ ìì ì½ë ì
ë¤ì ì¬ì©íë¼. ë¨ì§ ë¹ì ì´ ìë°©í¥ ì°ê´ê´ê³ë¤ì ëí ì미를 íì¤í ì´í´íëë¡ íë¼(ëì¤ì ë
¼ìë¨)."
+
+#: index.docbook:65
+msgid "Collection mappings"
+msgstr "ì½ë ì
매íë¤"
+
+#: index.docbook:67
+msgid "The Hibernate mapping element used for mapping a collection depends upon the type of the interface. For example, a <literal><set></literal> element is used for mapping properties of type <literal>Set</literal>."
+msgstr "ì½ë ì
ì 매ííëë° ì¬ì©ëë Hiberante 매í ììë ì¸í°íì´ì¤ì íì
ì ìì¡´íë¤. ì를 ë¤ì´<literal><set></literal> ììë <literal>Set</literal> íì
ì 매í íë¡í¼í°ë¤ì ì¬ì©ëë¤"
+
+#: index.docbook:73
+msgid ""
+ "<![CDATA[<class name=\"Product\">\n"
+ " <id name=\"serialNumber\" column=\"productSerialNumber\"/>\n"
+ " <set name=\"parts\">\n"
+ " <key column=\"productSerialNumber\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Product\">\n"
+ " <id name=\"serialNumber\" column=\"productSerialNumber\"/>\n"
+ " <set name=\"parts\">\n"
+ " <key column=\"productSerialNumber\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:75
+msgid "Apart from <literal><set></literal>, there is also <literal><list></literal>, <literal><map></literal>, <literal><bag></literal>, <literal><array></literal> and <literal><primitive-array></literal> mapping elements. The <literal><map></literal> element is representative:"
+msgstr "<literal><set></literal>ê³¼ë ë³ëë¡, ëí <literal><list></literal>, <literal><map></literal>, <literal><bag></literal>, <literal><array></literal>, ê·¸ë¦¬ê³ <literal><map></literal> 매í ììë¤ì´ ì¡´ì¬íë¤. <literal><map></literal> ììê° ëíì ì´ë¤:"
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<map\n"
+ " name=\"propertyName\"\n"
+ " table=\"table_name\"\n"
+ " schema=\"schema_name\"\n"
+ " lazy=\"true|extra|false\"\n"
+ " inverse=\"true|false\"\n"
+ " cascade=\"all|none|save-update|delete|all-delete-orphan|delete-orphan\"\n"
+ " sort=\"unsorted|natural|comparatorClass\"\n"
+ " order-by=\"column_name asc|desc\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " fetch=\"join|select|subselect\"\n"
+ " batch-size=\"N\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " mutable=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <key .... />\n"
+ " <map-key .... />\n"
+ " <element .... />\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map\n"
+ " name=\"propertyName\"\n"
+ " table=\"table_name\"\n"
+ " schema=\"schema_name\"\n"
+ " lazy=\"true|extra|false\"\n"
+ " inverse=\"true|false\"\n"
+ " cascade=\"all|none|save-update|delete|all-delete-orphan|delete-orphan\"\n"
+ " sort=\"unsorted|natural|comparatorClass\"\n"
+ " order-by=\"column_name asc|desc\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " fetch=\"join|select|subselect\"\n"
+ " batch-size=\"N\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " mutable=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <key .... />\n"
+ " <map-key .... />\n"
+ " <element .... />\n"
+ "</map>]]>"
+
+#: index.docbook:103
+msgid "<literal>name</literal> the collection property name"
+msgstr "<literal>name</literal> ì½ë ì
íë¡í¼í° ì´ë¦"
+
+#: index.docbook:108
+msgid "<literal>table</literal> (optional - defaults to property name) the name of the collection table (not used for one-to-many associations)"
+msgstr "<literal>table</literal> (ìµì
- ëí´í¸ë íë¡í¼í° ì´ë¦) ì½ë ì
í
ì´ë¸ì ì´ë¦(one-to-many ì°ê´ê´ê³ë¤ì ëí´ìë ì¬ì©ëì§ ìì)"
+
+#: index.docbook:114
+msgid "<literal>schema</literal> (optional) the name of a table schema to override the schema declared on the root element"
+msgstr "<literal>schema</literal> (ìµì
) ë£¨í¸ ìì ìì ì ì¸ë ì¤í¤ë§ë¥¼ ì¤ë²ë¼ì´ë ìí¤ë í
ì´ë¸ ì¤í¤ë§ì ì´ë¦"
+
+#: index.docbook:120
+msgid "<literal>lazy</literal> (optional - defaults to <literal>true</literal>) may be used to disable lazy fetching and specify that the association is always eagerly fetched, or to enable \"extra-lazy\" fetching where most operations do not initialize the collection (suitable for very large collections)"
+msgstr "<literal>lazy</literal> (ìµì
- ëí´í¸ë <literal>true</literal>)ë lazy íì¹ì ì¬ì© ë¶ê°ë¥íëë¡ íê³ ê·¸ ì°ê´ì´ íì eagerly íì¹ë¨ì ì§ì íëë° , ëë ëë¶ë¶ì ì°ì°ë¤ì´ ì½ë ì
ì ì´ê¸°íìí¤ì§ ìë ê³³ìì \"extra-lazy\" íì¹ì ì´ì© ê°ë¥íëë¡ íëë°(ë§¤ì° í° ì½ë ì
ë¤ì ì ë¹í¨) ì¬ì©ë ì ìë¤"
+
+#: index.docbook:129
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>) mark this collection as the \"inverse\" end of a bidirectional association"
+msgstr "<literal>inverse</literal> (ìµì
- ëí´í¸ë <literal>false</literal>) ì´ ì½ë ì
ì ìë°©í¥ ì°ê´ê´ê³ì \"inverse\" ë(end)ì¼ë¡ íìíë¤"
+
+#: index.docbook:135
+msgid "<literal>cascade</literal> (optional - defaults to <literal>none</literal>) enable operations to cascade to child entities"
+msgstr "<literal>cascade</literal> (ìµì
- ëí´í¸ë <literal>none</literal>) ì¤í¼ë ì´ì
ë¤ì´ ìì ìí°í°ë¤ì ëí´ ì¼ì¤ì¼ì´ëíë ê²ì ì´ì© ê°ë¥íê² íë¤"
+
+#: index.docbook:141
+msgid "<literal>sort</literal> (optional) specify a sorted collection with <literal>natural</literal> sort order, or a given comparator class"
+msgstr "<literal>sort</literal> (ìµì
) <literal>natural</literal> ì ë ¬ ììë¡ ì ë ¬ë(sorted) ì½ë ì
ëë 주ì´ì§ comparator í´ëì¤ë¥¼ ì§ì íë¤"
+
+#: index.docbook:147
+msgid "<literal>order-by</literal> (optional, JDK1.4 only) specify a table column (or columns) that define the iteration order of the <literal>Map</literal>, <literal>Set</literal> or bag, together with an optional <literal>asc</literal> or <literal>desc</literal>"
+msgstr "<literal>order-by</literal> (ìµì
, JDK1.4ììë§) <literal>asc</literal> ëë <literal>desc</literal> ìµì
ê³¼ í¨ê» <literal>Map</literal>, <literal>Set</literal> ëë bagì ë°ë³µ ìì를 ì ìíë í
ì´ë¸ 컬ë¼(ëë 컬ë¼ë¤)ì ì§ì íë¤"
+
+#: index.docbook:154
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving or removing the collection (useful if the collection should contain only a subset of the available data)"
+msgstr "<literal>where</literal> (ìµì
) ì½ë ì
ì ê²ìíê±°ë ì ê±°í ë ì¬ì©ë ììì ì¸ SQL <literal>WHERE</literal> ì¡°ê±´ì ì§ì íë¤ (ì½ë ì
ì´ ì¤ì§ ì´ì© ê°ë¥í ë°ì´í°ì ë¶ë¶ì§í© ë§ì í¬í¨í ê²½ì°ì ì ì©íë¤)"
+
+#: index.docbook:161
+msgid "<literal>fetch</literal> (optional, defaults to <literal>select</literal>) Choose between outer-join fetching, fetching by sequential select, and fetching by sequential subselect."
+msgstr "<literal>fetch</literal> (ìµì
, ëí´í¸ë <literal>select</literal>) outer-join íì¹, sequential select íì¹, ê·¸ë¦¬ê³ sequential subselect íì¹ ì¬ì´ìì ì ííë¼."
+
+#: index.docbook:168
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for lazily fetching instances of this collection."
+msgstr "<literal>batch-size</literal> (ìµì
, ëí´í¸ë <literal>1</literal>) ì´ ì½ë ì
ì lazily fetching ì¸ì¤í´ì¤ì ëí´ \"ë°°ì¹ ì¬ì´ì¦\"를 ì§ì íë¼."
+
+#: index.docbook:174
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the collection property value."
+msgstr "<literal>access</literal> (ìµì
- ëí´í¸ë <literal>property</literal>): Hibernateê° ì½ë ì
íë¡í¼í° ê°ì ì ê·¼íëë° ì¬ì©í ë°©ë."
+
+#: index.docbook:180
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Species that changes to the state of the collection results in increment of the owning entity's version. (For one to many associations, it is often reasonable to disable this setting.)"
+msgstr "<literal>optimistic-lock</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): ì½ë ì
ì ìíì ëí ë³ê²½ë¤ì´ ìì íë ìí°í°ì ë²ì ì ì¦ê°ë¡ ê·ê²°ë ê²ì¸ì§ë¥¼ ì§ì íë¤. (one to many ì°ê´ë¤ì ëí´, ì´ ì¤ì ì ì¬ì© ë¶ê°ë¥íê² íë ê²ì´ ì¢
ì¢
í©ë¹íë¤.)"
+
+#: index.docbook:188
+msgid "<literal>mutable</literal> (optional - defaults to <literal>true</literal>): A value of <literal>false</literal> specifies that the elements of the collection never change (a minor performance optimization in some cases)."
+msgstr "<literal>mutable</literal> (ìµì
- ëí´í¸ë <literal>true</literal>): <literal>false</literal> ê°ì ì½ë ì
ì ììë¤ì´ ê²°ì½ ë³ê²½ëì§ ììì ì§ì íë¤. (ëªëª ê²½ì°ë¤ìì ë§ì´ë í¼í¬ë¨¼ì¤ ìµì í)."
+
+#: index.docbook:198
+msgid "Collection foreign keys"
+msgstr "ì½ë ì
foreign í¤ë¤"
+
+#: index.docbook:200
+msgid "Collection instances are distinguished in the database by the foreign key of the entity that owns the collection. This foreign key is referred to as the <emphasis>collection key column</emphasis> (or columns) of the collection table. The collection key column is mapped by the <literal><key></literal> element."
+msgstr "ì½ë ì
ì¸ì¤í´ì¤ë¤ì ê·¸ ì½ë ì
ì ìì íë ìí°í°ì foreign í¤ì ìí´ ë°ì´í°ë² ì´ì¤ ë´ìì 구ë³ì§ìì§ë¤. ì´ foreign í¤ë ê·¸ ì½ë ì
í
ì´ë¸ì <emphasis>ì½ë ì
í¤ ì»¬ë¼</emphasis> (ëë 컬ë¼ë¤)ë¡ì 참조ëë¤. ê·¸ ì½ë ì
í¤ ì»¬ë¼ì <literal><key></literal> ììì ìí´ ë§¤íëë¤."
+
+#: index.docbook:208
+msgid "There may be a nullability constraint on the foreign key column. For most collections, this is implied. For unidirectional one to many associations, the foreign key column is nullable by default, so you might need to specify <literal>not-null=\"true\"</literal>."
+msgstr "foreign í¤ ì»¬ë¼ì ëí null íì© ê°ë¥ 컨ì¤í¸ë ì¸í¸ê° ì¡´ì¬í ì ìë¤. ëë¶ë¶ì ì½ë ì
ë¤ì ëí´, ì´ê²ì´ ë¹ì°í ìë°ëë¤. ë¨ë°©í¥ one to many ì°ê´ë¤ì ê²½ì°, foreign í¤ë ëí´í¸ë¡ null íì© ê°ë¥íì¬ì, ë¹ì ì <literal>not-null=\"true\"</literal>를 ì§ì í íìê° ìì ì ìë¤."
+
+#: index.docbook:215
+msgid "<![CDATA[<key column=\"productSerialNumber\" not-null=\"true\"/>]]>"
+msgstr "<![CDATA[<key column=\"productSerialNumber\" not-null=\"true\"/>]]>"
+
+#: index.docbook:217
+msgid "The foreign key constraint may use <literal>ON DELETE CASCADE</literal>."
+msgstr "foreign í¤ ì»¨ì¤í¸ë ì¸í¸ë <literal>ON DELETE CASCADE</literal>를 ì¬ì©í ìë ìë¤."
+
+#: index.docbook:221
+msgid "<![CDATA[<key column=\"productSerialNumber\" on-delete=\"cascade\"/>]]>"
+msgstr "<![CDATA[<key column=\"productSerialNumber\" on-delete=\"cascade\"/>]]>"
+
+#: index.docbook:223
+msgid "See the previous chapter for a full definition of the <literal><key></literal> element."
+msgstr "<literal><key></literal> ììì ëí ì ì²´ ì ìë ì ì¥ì ë³´ë¼."
+
+#: index.docbook:231
+msgid "Collection elements"
+msgstr "ì½ë ì
ììë¤"
+
+#: index.docbook:233
+msgid "Collections may contain almost any other Hibernate type, including all basic types, custom types, components, and of course, references to other entities. This is an important distinction: an object in a collection might be handled with \"value\" semantics (its life cycle fully depends on the collection owner) or it might be a reference to another entity, with its own life cycle. In the latter case, only the \"link\" between the two objects is considered to be state held by the collection."
+msgstr "ì½ë ì
ë¤ì 모ë 기본 íì
ë¤, ì»´í¬ëí¸ë¤, ê·¸ë¦¬ê³ ë¬¼ë¡ ë¤ë¥¸ ìí°í°ë¤ì ëí 참조ë¤ì í¬í¨íì¬ ê±°ì ëë¶ë¶ì ì´ë¤ ë¤ë¥¸ Hibernate íì
ì í¬í¨í ìë ìë¤. ì´ê²ì ì¤ìí 구ë¶ì´ë¤: ì½ë ì
ë´ì ìë ê°ì²´ë \"ê°(value)\" ìë¯¸ë¡ ì²ë¦¬ë ìë ìê±°ë(ê·¸ê²ì ìëª
주기ë ì½ë ì
ìì ìì ìì¡´íë¤) ê·¸ê²ì ê·¸ê² ìì ì ìëª
주기를 ê°ì§ ë ë¤ë¥¸ ìí°í°ì ëí ì°¸ì¡°ì¼ ì ìë¤. íìì ê²½ì°, ë ê°ì ê°ì²´ë¤ ì¬ì´ì \"ë§í¬\" ë§ì´ ê·¸ ì½ë ì
ì ìí´ ìì ë ìíë¡ ê°ì£¼ëë¤."
+
+#: index.docbook:242
+msgid "The contained type is referred to as the <emphasis>collection element type</emphasis>. Collection elements are mapped by <literal><element></literal> or <literal><composite-element></literal>, or in the case of entity references, with <literal><one-to-many></literal> or <literal><many-to-many></literal>. The first two map elements with value semantics, the next two are used to map entity associations."
+msgstr "í¬í¨ë íì
ì ì½ë ì
ìì íì
ì¼ë¡ì ë¶ë ¤ì§ë¤. ì½ë ì
ììë¤ì <literal><element></literal> ëë <literal><composite-element></literal>ì ìí´ ë§¤íëê±°ë, ìí°í° 참조ë¤ì ê²½ì°ì <literal><one-to-many></literal> ëë <literal><many-to-many></literal>ë¡ì 매íëë¤. ìì ë ê°ë value ì미를 ê°ì§ ììë¤ì 매íìí¤ê³ , ë¤ì ëê°ë ìí°í° ì°ê´ë¤ì 매ííëë° ì¬ì©ëë¤."
+
+#: index.docbook:254
+msgid "Indexed collections"
+msgstr "ì¸ë±ì± ë ì½ë ì
ë¤"
+
+#: index.docbook:256
+msgid "All collection mappings, except those with set and bag semantics, need an <emphasis>index column</emphasis> in the collection table - a column that maps to an array index, or <literal>List</literal> index, or <literal>Map</literal> key. The index of a <literal>Map</literal> may be of any basic type, mapped with <literal><map-key></literal>, it may be an entity reference mapped with <literal><map-key-many-to-many></literal>, or it may be a composite type, mapped with <literal><composite-map-key></literal>. The index of an array or list is always of type <literal>integer</literal> and is mapped using the <literal><list-index></literal> element. The mapped column contains sequential integers (numbered from zero, by default)."
+msgstr "set ê³¼ bag ì미ë¤ì ê°ì§ ê²ë¤ì ì ì¸íë©´, 모ë ì½ë ì
매íë¤ì ì½ë ì
í
ì´ë¸ ë´ì <emphasis>ì¸ë±ì¤ 컬ë¼</emphasis>- ë°°ì´ ì¸ë±ì¤, ëë <literal>List</literal> ì¸ë±ì¤ ëë <literal>Map</literal> í¤ë¡ 매íëë 컬ë¼-ì íìë¡ íë¤. <literal>Map</literal>ì ì¸ë±ì¤ë <literal><map-key></literal>ë¡ ë§¤íë, ì´ë¤ 기본 íì
ì¼ ì ìê³ , ê·¸ê²ì <literal><map-key-many-to-many></literal>ë¡ ë§¤íë ìí°í° ì°¸ì¡°ì¼ ì ìê±°ë, ê·¸ê²ì <literal><composite-map-key></literal>ë¡ ë§¤íë composite íì
ì¼ ì ìë¤. ë°°ì´ ëë 리ì¤í¸ì ì¸ë±ì¤ë íì <literal>integer</literal> íì
ì´ê³ <literal><list-index></literal> ìì를 ì¬ì©íì¬ ë§¤íëë¤. 매íë 컬ë¼ì ìì°¨ì ì¸ ì ìë¤ì í¬í¨íë¤(ëí´í¸ë¡ 0ìì ììíë ë²í¸ê° ë¶ì¬ì§)."
+
+#: index.docbook:267
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"index1\" coords=\"2 45\"/> <area id=\"index2\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<list-index \n"
+ " column=\"column_name\"\n"
+ " base=\"0|1|...\"/>]]></programlisting> <calloutlist> <callout arearefs=\"index1\"> <para> <literal>column_name</literal> (required): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"index1\"> <para> <literal>base</literal> (optional, defaults to <literal>0</literal>): The value of the index column that corresponds to the first element of the list or array. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"mapkey1\" coords=\"2 45\"/> <area id=\"mapkey2\" coords=\"3 45\"/> <area id=\"mapkey3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key \n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"type_name\"\n"
+ " node=\"@attribute-name\"\n"
+ " length=\"N\"/>]]></programlisting> <calloutlist> <callout arearefs=\"mapkey1\"> <para> <literal>column</literal> (optional): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"mapkey2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the key of the map. </para> </callout> <callout arearefs=\"mapkey3\"> <para> <literal>type</literal> (reguired): The type of the map keys. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"indexmanytomany1\" coords=\"2 45\"/> <area id=\"indexmanytomany2\" coords=\"3 45\"/> <area id=\"indexmanytomany3\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<map-key-many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"indexmanytomany1\"> <para> <literal>column</literal> (optional): The name of the foreign key column for the collection index values. </para> </callout> <callout arearefs=\"indexmanytomany2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the foreign key of the map key. </para> </callout> <callout arearefs=\"indexmanytomany3\"> <para> <literal>class</literal> (required): The entity class used as the map key. </para> </callout> </calloutlist> </programlistingco>"
+msgstr ""
+ "<programlistingco> <areaspec> <area id=\"index1\" coords=\"2 45\"/> <area id=\"index2\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<list-index \n"
+ " column=\"column_name\"\n"
+ " base=\"0|1|...\"/>]]></programlisting> <calloutlist> <callout arearefs=\"index1\"> <para> <literal>column_name</literal> (íì): ì½ë ì
ì¸ë±ì¤ ê°ë¤ì ë³´ê´íë 컬ë¼ì ì´ë¦. </para> </callout> <callout arearefs=\"index1\"> <para> <literal>base</literal> (ìµì
, ëí´í¸ë <literal>0</literal>): 리ì¤í¸ ëë ë°°ì´ì 첫 ë²ì§¸ ììì ëìíë ì¸ë±ì¤ 컬ë¼ì ê°. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"mapkey1\" coords=\"2 45\"/> <area id=\"mapkey2\" coords=\"3 45\"/> <area id=\"mapkey3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key \n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"type_name\"\n"
+ " node=\"@attribute-name\"\n"
+ " length=\"N\"/>]]></programlisting> <calloutlist> <callout arearefs=\"mapkey1\"> <para> <literal>column</literal> (ìµì
): ì½ë ì
ì¸ë±ì¤ ê°ë¤ì ë³´ê´íë 컬ë¼ì ì´ë¦. </para> </callout> <callout arearefs=\"mapkey2\"> <para> <literal>formula</literal> (ìµì
): mapì í¤ë¥¼ íê°íëë° ì¬ì©ëë SQL formula. </para> </callout> <callout arearefs=\"mapkey3\"> <para> <literal>type</literal> (íì): The type of the map í¤ë¤ì íì
</para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"indexmanytomany1\" coords=\"2 45\"/> <area id=\"indexmanytomany2\" coords=\"3 45\"/> <area id=\"indexmanytomany3\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<map-key-many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"indexmanytomany1\"> <para> <literal>column</literal> (ìµì
): ì½ë ì
ì¸ë±ì¤ ê°ë¤ì ëí foreign í¤ ì»¬ë¼ì ì´ë¦. </para> </callout> <callout arearefs=\"indexmanytomany2\"> <para> <literal>formula</literal> (ìµì
): mapì foreign í¤ë¥¼ íê°íëë° ì¬ì©ëë SQL formula. </para> </callout> <callout arearefs=\"indexmanytomany3\"> <para> <literal>class</literal> (íì): map í¤ë¡ì ì¬ì©ëë ìí°í° í´ëì¤. </para> </callout> </calloutlist> </programlistingco>"
+
+#: index.docbook:348
+msgid "If your table doesn't have an index column, and you still wish to use <literal>List</literal> as the property type, you should map the property as a Hibernate <emphasis><bag></emphasis>. A bag does not retain its order when it is retrieved from the database, but it may be optionally sorted or ordered."
+msgstr "ë§ì¼ ë¹ì ì í
ì´ë¸ì´ ì¸ë±ì¤ 컬ë¼ì ê°ì§ ìê³ , ë¹ì ì´ ì¬ì í íë¡í¼í° íì
ì¼ë¡ì <literal>List</literal>를 ì¬ì©íê³ ì ìí ê²½ì°, ë¹ì ì ê·¸ íë¡í¼í°ë¥¼ Hibernate <emphasis><bag></emphasis>ì¼ë¡ì 매íí´ì¼ íë¤. bagì´ ë°ì´í°ë² ì´ì¤ë¡ë¶í° ê²ìë ë ê·¸ê²ì ê·¸ê²ì ìì를 ë³´ì íì§ ìì§ë§, ê·¸ê²ì ì íì ì¼ë¡ ì ë ¬(sorting)ëê±°ë orderingë ìë ìë¤."
+
+#: index.docbook:357
+msgid "There are quite a range of mappings that can be generated for collections, covering many common relational models. We suggest you experiment with the schema generation tool to get a feeling for how various mapping declarations translate to database tables."
+msgstr "ë§ì ê³µíµë ê´ê³í 모íë¤ì ë¤ë£¨ë, ì½ë ì
ë¤ì ëí´ ìì±ë ì ìë 매íë¤ì ììì´ ê½¤ ì¡´ì¬íë¤. ì¬ë¬ê°ì§ 매í ì ì¸ë¤ì´ ë°ì´í°ë² ì´ì¤ í
ì´ë¸ë¤ë¡ ë³íëë ë°©ë²ì ë¹ì ì´ ëë¼ë ¤ë©´ ì¤í¤ë§ ìì± ëêµ¬ë¡ ì¤íí ê²ì ì°ë¦¬ë ì ìíë¤."
+
+#: index.docbook:364
+msgid "Collections of values and many-to-many associations"
+msgstr "ê°ë¤ì ê°ì§ ì½ë ì
ë¤ê³¼ many-to-many ì°ê´ë¤"
+
+#: index.docbook:366
+msgid "Any collection of values or many-to-many association requires a dedicated <emphasis>collection table</emphasis> with a foreign key column or columns, <emphasis>collection element column</emphasis> or columns and possibly an index column or columns."
+msgstr "ì´ë¤ ê°ë¤ì ê°ì§ ì½ë ì
ëë many-to-many ì°ê´ì foreign í¤ ì»¬ë¼ì´ë 컬ë¼ë¤, <emphasis>ì½ë ì
ìì 컬ë¼</emphasis>ì´ë 컬ë¼ë¤ ê·¸ë¦¬ê³ ê°ë¥íë©´ ì¸ë±ì¤ 컬ë¼ë¤ì´ë 컬ë¼ë¤ì ê°ì§ ì ì© <emphasis>ì½ë ì
í
ì´ë¸</emphasis>ì íìë¡ íë¤."
+
+#: index.docbook:373
+msgid "For a collection of values, we use the <literal><element></literal> tag."
+msgstr "ê°ë¤ì ê°ì§ ì½ë ì
ì ê²½ì°, ì°ë¦¬ë <literal><element></literal> í그를 ì¬ì©íë¤."
+
+#: index.docbook:375
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"element1b\" coords=\"2 50\"/> <area id=\"element2b\" coords=\"3 50\"/> <area id=\"element3b\" coords=\"4 50\"/> </areaspec> <programlisting><![CDATA[<element\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"typename\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"element1b\"> <para> <literal>column</literal> (optional): The name of the column holding the collection element values. </para> </callout> <callout arearefs=\"element2b\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element. </para> </callout> <callout arearefs=\"element3b\"> <para> <literal>type</literal> (required): The type of the collection element. </para> </callout> </calloutlist> </programlistingco> <para> A <emphasis>many-to-many association</emphasis> is specified using the <literal><many-to-many></literal> element. </para> <programlistingco> <areaspec> <area id=\"manytomany1\" coords=\"2 60\"/> <area id=\"manytomany2\" coords=\"3 60\"/> <area id=\"manytomany3\" coords=\"4 60\"/> <area id=\"manytomany4\" coords=\"5 60\"/> <area id=\"manytomany5\" coords=\"6 60\"/> <area id=\"manytomany6\" coords=\"7 60\"/> <area id=\"manytomany7\" coords=\"8 60\"/> <area id=\!
"manytomany8\" coords=\"9 60\"/> </areaspec> <programlisting><![CDATA[<many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ " fetch=\"select|join\"\n"
+ " unique=\"true|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]></programlisting> <calloutlist> <callout arearefs=\"manytomany1\"> <para> <literal>column</literal> (optional): The name of the element foreign key column. </para> </callout> <callout arearefs=\"manytomany2\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element foreign key value. </para> </callout> <callout arearefs=\"manytomany3\"> <para> <literal>class</literal> (required): The name of the associated class. </para> </callout> <callout arearefs=\"manytomany4\"> <para> <literal>fetch</literal> (optional - defaults to <literal>join</literal>): enables outer-join or sequential select fetching for this association. This is a special case; for full eager fetching (in a single <literal>SELECT</literal>) of an entity and its many-to-many relationships to other entities, you would enable <literal>join</literal> fetching not only of the collection itself, but also with this attribute on the <literal><many-to-many></literal!
> nested element. </para> </callout> <callout arearefs=\"manytomany5\"> <para> <literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. This makes the association multiplicity effectively one to many. </para> </callout> <callout arearefs=\"manytomany6\"> <para> <literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association. </para> </callout> <callout arearefs=\"manytomany7\"> <para> <literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>. </para> </callout> <callout arearefs=\"manytomany8\"> <para> <literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class !
is used. </para> </callout> </calloutlist> </programlistingco>"
+msgstr ""
+ "<programlistingco> <areaspec> <area id=\"element1b\" coords=\"2 50\"/> <area id=\"element2b\" coords=\"3 50\"/> <area id=\"element3b\" coords=\"4 50\"/> </areaspec> <programlisting><![CDATA[<element\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"typename\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"element1b\"> <para> <literal>column</literal> (ìµì
): ì½ë ì
ìì ê°ë¤ì ìì íë 컬ë¼ì ì´ë¦. </para> </callout> <callout arearefs=\"element2b\"> <para> <literal>formula</literal> (ìµì
): ìì를 íê°íëë° ì¬ì©ëë SQL formula. </para> </callout> <callout arearefs=\"element3b\"> <para> <literal>type</literal> (íì): ì½ë ì
ììì íì
. </para> </callout> </calloutlist> </programlistingco> <para> <emphasis>many-to-many association</emphasis> ì°ê´ì <literal><many-to-many></literal> ìì를 ì¬ì©íì¬ ì§ì ëë¤. </para> <programlistingco> <areaspec> <area id=\"manytomany1\" coords=\"2 60\"/> <area id=\"manytomany2\" coords=\"3 60\"/> <area id=\"manytomany3\" coords=\"4 60\"/> <area id=\"manytomany4\" coords=\"5 60\"/> <area id=\"manytomany5\" coords=\"6 60\"/> <area id=\"manytomany6\" coords=\"7 60\"/> <area id=\"manytomany7\" coords=\"8 60\"/> <area id!
=\"manytomany8\" coords=\"9 60\"/> </areaspec> <programlisting><![CDATA[<many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ " fetch=\"select|join\"\n"
+ " unique=\"true|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]></programlisting> <calloutlist> <callout arearefs=\"manytomany1\"> <para> <literal>column</literal> (ìµì
): ìì foreign í¤ ì»¬ë¼ì ì´ë¦. </para> </callout> <callout arearefs=\"manytomany2\"> <para> <literal>formula</literal> (ìµì
): ìì foreign í¤ ê°ì íê°íëë° ì¬ì©ëë SQL formula. </para> </callout> <callout arearefs=\"manytomany3\"> <para> <literal>class</literal> (íì): ì°ê´ë í´ëì¤ì ì´ë¦. </para> </callout> <callout arearefs=\"manytomany4\"> <para> <literal>fetch</literal> (ìµì
- ëí´í¸ë <literal>join</literal>): ì´ ì°ê´ì ëí´ outer-join íì¹ ëë sequential select íì¹ì ì´ì© ê°ë¥íê² ë§ë ë¤. ì´ê²ì í¹ë³í ê²½ì°ì´ë¤; ìí°í° ê·¸ë¦¬ê³ ë¤ë¥¸ ìí°í°ë¤ê³¼ ê·¸ê²ì many-to-many ê´ê³ë¤ì ëí (íëì <literal>SELECT</literal> ë´ìì) ì ì²´ eager íì¹ì ê²½ì°, ë¹ì ì ì½ë ì
ê·¸ ìì²´ì ëí´ì ë¿ë§ ìëë¼ ë´í¬ë ìì <literal><ma!
ny-to-many></literal> ìì ì´ ìì±ì ëí´ <literal>join</literal> íì¹ì ì´ì© ê°ë¥íê² í ê²ì´ë¤. </para> </callout> <callout arearefs=\"manytomany5\"> <para> <literal>unique</literal> (ìµì
): foreign-key 컬ë¼ì ëí ì ì¼ ì»¨ì¤í¸ë ì¸í¸ì DDL ìì±ì ê°ë¥íëë¡ íë¤. ì´ê²ì ì°ê´ ë¤ì¤ì± (association multiplicity)ì í¨ì¨ì ì¼ë¡ one to manyë¡ ë§ë ë¤. </para> </callout> <callout arearefs=\"manytomany6\"> <para> <literal>not-found</literal> (ìµì
- ëí´í¸ë <literal>exception</literal>): ëë½ë íë¤ì 참조íë foreign í¤ë¤ì´ ì´ë»ê² ì²ë¦¬ë ê²ì¸ì§ë¥¼ ì§ì íë¤: <literal>ignore</literal>ë ëë½ë í íì í ê°ì ì°ê´ì¼ë¡ ë¤ë£° ê²ì´ë¤. </para> </callout> <callout arearefs=\"manytomany7\"> <para> <literal>entity-name</literal> (ìµì
): <literal>class</literal>ì ëí íëì ëìì¼ë¡ì, ì°ê´ë í´ëì¤ì ìí°í° ì´ë¦. </para> </callout> <callout arearef!
s=\"manytomany8\"> <para> <literal>property-ref</literal>: (ìµì
) ì
´ foreign í¤ì ì¡°ì¸ë ì°ê´ í´ëì¤ì íë¡í¼í°ì ì´ë¦. ì§ì ëì§ ìì ê²½ì°, ì°ê´ í´ëì¤ì íë¼ì´ë¨¸ë¦¬ í¤ê° ì¬ì©ëë¤. </para> </callout> </calloutlist> </programlistingco>"
+
+#: index.docbook:480
+msgid "Some examples, first, a set of strings:"
+msgstr "ëªëª ìì ë¤, 먼ì 문ìì´ë¤ì ê°ì§ set:"
+
+#: index.docbook:484
+msgid ""
+ "<![CDATA[<set name=\"names\" table=\"person_names\">\n"
+ " <key column=\"person_id\"/>\n"
+ " <element column=\"person_name\" type=\"string\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"names\" table=\"person_names\">\n"
+ " <key column=\"person_id\"/>\n"
+ " <element column=\"person_name\" type=\"string\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:486
+msgid "A bag containing integers (with an iteration order determined by the <literal>order-by</literal> attribute):"
+msgstr "(<literal>order-by</literal> ìì±ì ìí´ ê²°ì ëë ë°ë³µ ìì를 ê°ì§) ì ìë¤ì í¬í¨íë bag :"
+
+#: index.docbook:491
+msgid ""
+ "<![CDATA[<bag name=\"sizes\" \n"
+ " table=\"item_sizes\" \n"
+ " order-by=\"size asc\">\n"
+ " <key column=\"item_id\"/>\n"
+ " <element column=\"size\" type=\"integer\"/>\n"
+ "</bag>]]>"
+msgstr ""
+ "<![CDATA[<bag name=\"sizes\" \n"
+ " table=\"item_sizes\" \n"
+ " order-by=\"size asc\">\n"
+ " <key column=\"item_id\"/>\n"
+ " <element column=\"size\" type=\"integer\"/>\n"
+ "</bag>]]>"
+
+#: index.docbook:493
+msgid "An array of entities - in this case, a many to many association:"
+msgstr "ìí°í°ë¤ì ê°ì§ ë°°ì´ - ì´ ê²½ì°ì, many to many ì°ê´ :"
+
+#: index.docbook:497
+msgid ""
+ "<![CDATA[<array name=\"addresses\" \n"
+ " table=\"PersonAddress\" \n"
+ " cascade=\"persist\">\n"
+ " <key column=\"personId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <many-to-many column=\"addressId\" class=\"Address\"/>\n"
+ "</array>]]>"
+msgstr ""
+ "<![CDATA[<array name=\"addresses\" \n"
+ " table=\"PersonAddress\" \n"
+ " cascade=\"persist\">\n"
+ " <key column=\"personId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <many-to-many column=\"addressId\" class=\"Address\"/>\n"
+ "</array>]]>"
+
+#: index.docbook:499
+msgid "A map from string indices to dates:"
+msgstr "ë ì§ë¤ì ëí 문ìì´ ì¸ë±ì¤ë¤ì ê°ì§ map :"
+
+#: index.docbook:503
+msgid ""
+ "<![CDATA[<map name=\"holidays\" \n"
+ " table=\"holidays\" \n"
+ " schema=\"dbo\" \n"
+ " order-by=\"hol_name asc\">\n"
+ " <key column=\"id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"holidays\" \n"
+ " table=\"holidays\" \n"
+ " schema=\"dbo\" \n"
+ " order-by=\"hol_name asc\">\n"
+ " <key column=\"id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:505
+msgid "A list of components (discussed in the next chapter):"
+msgstr "ì»´í¬ëí¸ë¤ì 리ì¤í¸(ë¤ì ì¥ìì ë
¼ìë¨):"
+
+#: index.docbook:509
+msgid ""
+ "<![CDATA[<list name=\"carComponents\" \n"
+ " table=\"CarComponents\">\n"
+ " <key column=\"carId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <composite-element class=\"CarComponent\">\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"type\"/>\n"
+ " <property name=\"serialNumber\" column=\"serialNum\"/>\n"
+ " </composite-element>\n"
+ "</list>]]>"
+msgstr ""
+ "<![CDATA[<list name=\"carComponents\" \n"
+ " table=\"CarComponents\">\n"
+ " <key column=\"carId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <composite-element class=\"CarComponent\">\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"type\"/>\n"
+ " <property name=\"serialNumber\" column=\"serialNum\"/>\n"
+ " </composite-element>\n"
+ "</list>]]>"
+
+#: index.docbook:514
+msgid "One-to-many associations"
+msgstr "One-to-many ì°ê´ë¤"
+
+#: index.docbook:516
+msgid "A <emphasis>one to many association</emphasis> links the tables of two classes via a foreign key, with no intervening collection table. This mapping loses certain semantics of normal Java collections:"
+msgstr "<emphasis>one to many ì°ê´</emphasis>ì ì¤ì¬íë ì½ë ì
í
ì´ë¸ ìì´ foreign í¤ë¥¼ íµí´ ë ê°ì í´ëì¤ë¤ì í
ì´ë¸ë¤ì ì°ê²°ìí¨ë¤. ì´ ë§¤íì íµìì ìë° ì½ë ì
ë¤ì ì´ë¤ ì미를 ìì¤íë¤:"
+
+#: index.docbook:524
+msgid "An instance of the contained entity class may not belong to more than one instance of the collection"
+msgstr "í¬í¨ë ìí°í° í´ëì¤ì ì¸ì¤í´ì¤ë ê·¸ ì½ë ì
ì íë ì´ìì ì¸ì¤í´ì¤ì ìíì§ ìì ì ìë¤"
+
+#: index.docbook:530
+msgid "An instance of the contained entity class may not appear at more than one value of the collection index"
+msgstr "í¬í¨ë ìí°í° í´ëì¤ì ì¸ì¤í´ì¤ë ì½ë ì
ì¸ë±ì¤ì íë ì´ìì ê°ìì ëíëì§ ìì ì ìë¤"
+
+#: index.docbook:537
+msgid "An association from <literal>Product</literal> to <literal>Part</literal> requires existence of a foreign key column and possibly an index column to the <literal>Part</literal> table. A <literal><one-to-many></literal> tag indicates that this is a one to many association."
+msgstr "<literal>Product</literal>ë¡ë¶í° <literal>Part</literal>ë¡ì ì°ê´ì foreign í¤ ì»¬ë¼ê³¼ <literal>Part</literal> í
ì´ë¸ì ëí ì¸ë±ì¤ 컬ë¼ì ì¡´ì¬ë¥¼ íìë¡ íë¤. <literal><one-to-many></literal> íê·¸ë ì´ê²ì´ one to many ì°ê´ìì ëíë¸ë¤."
+
+#: index.docbook:550
+msgid ""
+ "<![CDATA[<one-to-many \n"
+ " class=\"ClassName\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]>"
+msgstr ""
+ "<![CDATA[<one-to-many \n"
+ " class=\"ClassName\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]>"
+
+#: index.docbook:553
+msgid "<literal>class</literal> (required): The name of the associated class."
+msgstr "<literal>class</literal> (íì): ì°ê´ë í´ëì¤ì ì´ë¦."
+
+#: index.docbook:558
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how cached identifiers that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr "<literal>not-found</literal> (ìµì
- ëí´í¸ë <literal>exception</literal>): ëë½ë íë¤ì 참조íë ìºìë ìë³ìë¤ì´ ì´ë»ê² ì²ë¦¬ë ê²ì¸ì§ë¥¼ ì§ì íë¤: <literal>ignore</literal>ë ëë½ë í íì í ê°ì ì°ê´ì¼ë¡ ë¤ë£° ê²ì´ë¤."
+
+#: index.docbook:565
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>."
+msgstr "<literal>entity-name</literal> (ìµì
): <literal>class</literal>ì ëí ëìì¼ë¡ì, ì°ê´ë í´ëì¤ì ìí°í° ì´ë¦."
+
+#: index.docbook:573
+msgid "Notice that the <literal><one-to-many></literal> element does not need to declare any columns. Nor is it necessary to specify the <literal>table</literal> name anywhere."
+msgstr "<literal><one-to-many></literal> ììë ì´ë¤ 컬ë¼ë¤ì ì ì¸íëë° íìíì§ ììì 주목íë¼. ì´ëê°ì <literal>table</literal> ì´ë¦ì ì§ì íë ê²ë íìì ì´ì§ ìë¤."
+
+#: index.docbook:579
+msgid "<emphasis>Very important note:</emphasis> If the foreign key column of a <literal><one-to-many></literal> association is declared <literal>NOT NULL</literal>, you must declare the <literal><key></literal> mapping <literal>not-null=\"true\"</literal> or <emphasis>use a bidirectional association</emphasis> with the collection mapping marked <literal>inverse=\"true\"</literal>. See the discussion of bidirectional associations later in this chapter."
+msgstr "<emphasis>ë§¤ì° ì¤ìí ë
¸í¸</emphasis>: ë§ì¼ <literal><one-to-many></literal> ì°ê´ì foreign í¤ ì»¬ë¼ì´ <literal>NOT NULL</literal>ë¡ ì ì¸ë ê²½ì°, ë¹ì ì <literal><key></literal> 매íì <literal>not-null=\"true\"</literal>ë¡ ì ì¸í´ì¼ íê±°ë <literal>inverse=\"true\"</literal>ë¡ ë§í¬ë ì½ë ì
매íì ê°ì§ <emphasis>ìë°©í¥ ì°ê´ì ì¬ì©í´ì¼ íë¤</emphasis>. ìë°©í¥ ì°ê´ë¤ì ëí ë
¼ìë ì´ ì¥ì ë·ë¶ë¶ì ë³´ë¼."
+
+#: index.docbook:588
+msgid "This example shows a map of <literal>Part</literal> entities by name (where <literal>partName</literal> is a persistent property of <literal>Part</literal>). Notice the use of a formula-based index."
+msgstr "ì´ ìì ë nameì¼ë¡ <literal>Part</literal> ìí°í°ë¤ì ê°ì§ mapì ë³´ì¬ì¤ë¤(ì¬ê¸°ì <literal>partName</literal>ì <literal>Part</literal>ì ìì íë¡í¼í°ì´ë¤). formula-ê¸°ë° indexì ì¬ì©ì 주목íë¼."
+
+#: index.docbook:594
+msgid ""
+ "<![CDATA[<map name=\"parts\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"productId\" not-null=\"true\"/>\n"
+ " <map-key formula=\"partName\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"parts\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"productId\" not-null=\"true\"/>\n"
+ " <map-key formula=\"partName\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:600
+msgid "Advanced collection mappings"
+msgstr "ê°ì ë ì½ë ì
매íë¤"
+
+#: index.docbook:603
+msgid "Sorted collections"
+msgstr "Sorted ì½ë ì
ë¤"
+
+#: index.docbook:605
+msgid "Hibernate supports collections implementing <literal>java.util.SortedMap</literal> and <literal>java.util.SortedSet</literal>. You must specify a comparator in the mapping file:"
+msgstr "Hibernateë <literal>java.util.SortedMap</literal>ê³¼ <literal>java.util.SortedSet</literal>를 구ííë ì½ë ì
ë¤ì ì§ìíë¤. ë¹ì ì 매í íì¼ ìì íëì comparator를 ì§ì í´ì¼ íë¤:"
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<set name=\"aliases\" \n"
+ " table=\"person_aliases\" \n"
+ " sort=\"natural\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" sort=\"my.custom.HolidayComparator\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"aliases\" \n"
+ " table=\"person_aliases\" \n"
+ " sort=\"natural\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" sort=\"my.custom.HolidayComparator\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:612
+msgid "Allowed values of the <literal>sort</literal> attribute are <literal>unsorted</literal>, <literal>natural</literal> and the name of a class implementing <literal>java.util.Comparator</literal>."
+msgstr "<literal>sort</literal> ìì±ì íì©ëë ê°ë¤ì <literal>unsorted</literal>, <literal>natural</literal>, ê·¸ë¦¬ê³ <literal>java.util.Comparator</literal>를 구ííë í´ëì¤ì ì´ë¦ì´ë¤."
+
+#: index.docbook:618
+msgid "Sorted collections actually behave like <literal>java.util.TreeSet</literal> or <literal>java.util.TreeMap</literal>."
+msgstr "Sorted ì½ë ì
ë¤ì <literal>java.util.TreeSet</literal> ëë <literal>java.util.TreeMap</literal>ì²ë¼ íëíë¤."
+
+#: index.docbook:623
+msgid "If you want the database itself to order the collection elements use the <literal>order-by</literal> attribute of <literal>set</literal>, <literal>bag</literal> or <literal>map</literal> mappings. This solution is only available under JDK 1.4 or higher (it is implemented using <literal>LinkedHashSet</literal> or <literal>LinkedHashMap</literal>). This performs the ordering in the SQL query, not in memory."
+msgstr "ë§ì¼ ë¹ì ì´ ë°ì´í°ë² ì´ì¤ ê·¸ ìì²´ê° ì½ë ì
ììë¤ì ììì§ì°ëë¡(order)ìí ê²½ì° <literal>set</literal>, <literal>bag</literal> ëë<literal>map</literal> 매íë¤ì ëí´ <literal>order-by</literal> ìì±ì ì¬ì©íë¼. ì´ í´ê²°ì±
ì JDK 1.4 ì´ìì ë²ì ììë§ ì´ì© ê°ë¥íë¤(ê·¸ê²ì <literal>LinkedHashSet</literal> ëë <literal>LinkedHashMap</literal>ì ì¬ì©íì¬ êµ¬íëë¤). ì´ê²ì ë©ëª¨ë¦¬ ë´ê° ìë, SQL ì§ì ë´ìì ììì§ì(ordering)ì ìííë¤."
+
+#: index.docbook:632
+msgid ""
+ "<![CDATA[<set name=\"aliases\" table=\"person_aliases\" order-by=\"lower(name) asc\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" order-by=\"hol_date, hol_name\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"aliases\" table=\"person_aliases\" order-by=\"lower(name) asc\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" order-by=\"hol_date, hol_name\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date type=\"date\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:634
+msgid "Note that the value of the <literal>order-by</literal> attribute is an SQL ordering, not a HQL ordering!"
+msgstr "<literal>order-by</literal> ìì±ì ê°ì HQL ììì§ì(ordering)ì´ ìëë¼ SQL ììì§ì(ordering)ìì ë
¸í¸íë¼!"
+
+#: index.docbook:639
+msgid "Associations may even be sorted by some arbitrary criteria at runtime using a collection <literal>filter()</literal>."
+msgstr "ì°ê´ë¤ì ì½ë ì
<literal>filter()</literal>를 ì¬ì©íì¬ ì¤í ìì ì´ë¤ ììì criteria(기ì¤)ì ì¬ì©íì¬ ì ë ¬(sort)ë ìë ìë¤."
+
+#: index.docbook:644
+msgid "<![CDATA[sortedUsers = s.createFilter( group.getUsers(), \"order by this.name\" ).list();]]>"
+msgstr "<![CDATA[sortedUsers = s.createFilter( group.getUsers(), \"order by this.name\" ).list();]]>"
+
+#: index.docbook:649
+msgid "Bidirectional associations"
+msgstr "ìë°©í¥ ì°ê´ë¤"
+
+#: index.docbook:651
+msgid "A <emphasis>bidirectional association</emphasis> allows navigation from both \"ends\" of the association. Two kinds of bidirectional association are supported:"
+msgstr "<emphasis>ìë°©í¥ ì°ê´</emphasis>ì ì°ê´ì ì \"ë(end)ë¤\"ë¡ë¶í° ë¤ë¹ê²ì´ì
ì íì©íë¤. ë ê°ì§ ì¢
ë¥ì ìë°©í¥ ì°ê´ë¤ì´ ì§ìëë¤:"
+
+#: index.docbook:658
+msgid "one-to-many"
+msgstr "one-to-many"
+
+#: index.docbook:660
+msgid "set or bag valued at one end, single-valued at the other"
+msgstr "í쪽 ëì set ëë bag ê°ì ê°ê³ , ë¤ë¥¸ 쪽 ê¸ì ë¨ì¼ ê°ì ê°ì§ ì°ê´"
+
+#: index.docbook:666
+msgid "many-to-many"
+msgstr "many-to-many"
+
+#: index.docbook:668
+msgid "set or bag valued at both ends"
+msgstr "ì ëìì set ëë bag ê°ì ê°ì§ ì°ê´"
+
+#: index.docbook:677
+msgid "You may specify a bidirectional many-to-many association simply by mapping two many-to-many associations to the same database table and declaring one end as <emphasis>inverse</emphasis> (which one is your choice, but it can not be an indexed collection)."
+msgstr "ë¹ì ì ëì¼í ë ê°ì many-to-many ì°ê´ë¤ì ëì¼í ë°ì´í°ë² ì´ì¤ í
ì´ë¸ë¡ ê°ë¨íê² ë§¤ííê³ í 쪽 ëì <emphasis>inverse</emphasis>(ë¹ì ì ì íì íëì´ì§ë§, ê·¸ê²ì ì¸ë±ì±ë ì½ë ì
ì¼ ì ìë¤)ë¡ ì ì¸í¨ì¼ë¡ì¨ íëì ìë°©í¥ many-to-many ì°ê´ì ì§ì í ìë ìë¤."
+
+#: index.docbook:684
+msgid "Here's an example of a bidirectional many-to-many association; each category can have many items and each item can be in many categories:"
+msgstr "ë¤ìì ìë°©í¥ many-to-many ì°ê´ì ê´í ìì ì´ë¤; ê°ê°ì ì¹´í
ê³ ë¦¬ë ë§ì ìì´í
ë¤ì ê°ì§ ì ìê³ ê°ê°ì ìì´í
ì ë§ì ì¹´í
ê³ ë¦¬ë¤ ìì ìì ì ìë¤:"
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<class name=\"Category\">\n"
+ " <id name=\"id\" column=\"CATEGORY_ID\"/>\n"
+ " ...\n"
+ " <bag name=\"items\" table=\"CATEGORY_ITEM\">\n"
+ " <key column=\"CATEGORY_ID\"/>\n"
+ " <many-to-many class=\"Item\" column=\"ITEM_ID\"/>\n"
+ " </bag>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Item\">\n"
+ " <id name=\"id\" column=\"ITEM_ID\"/>\n"
+ " ...\n"
+ "\n"
+ " <!-- inverse end -->\n"
+ " <bag name=\"categories\" table=\"CATEGORY_ITEM\" inverse=\"true\">\n"
+ " <key column=\"ITEM_ID\"/>\n"
+ " <many-to-many class=\"Category\" column=\"CATEGORY_ID\"/>\n"
+ " </bag>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Category\">\n"
+ " <id name=\"id\" column=\"CATEGORY_ID\"/>\n"
+ " ...\n"
+ " <bag name=\"items\" table=\"CATEGORY_ITEM\">\n"
+ " <key column=\"CATEGORY_ID\"/>\n"
+ " <many-to-many class=\"Item\" column=\"ITEM_ID\"/>\n"
+ " </bag>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Item\">\n"
+ " <id name=\"id\" column=\"ITEM_ID\"/>
+\n"
+ " ...\n"
+ "\n"
+ " <!-- inverse end -->\n"
+ " <bag name=\"categories\" table=\"CATEGORY_ITEM\" inverse=\"true\">\n"
+ " <key column=\"ITEM_ID\"/>\n"
+ " <many-to-many class=\"Category\" column=\"CATEGORY_ID\"/>\n"
+ " </bag>\n"
+ "</class>]]>"
+
+#: index.docbook:691
+msgid "Changes made only to the inverse end of the association are <emphasis>not</emphasis> persisted. This means that Hibernate has two representations in memory for every bidirectional association, one link from A to B and another link from B to A. This is easier to understand if you think about the Java object model and how we create a many-to-many relationship in Java:"
+msgstr "ì°ê´ì inverse ë(end)ì ëí´ìë§ íí´ì§ ë³ê²½ë¤ì ììí ëì§ <emphasis>ìëë¤</emphasis>. ì´ê²ì Hibernateê° ëª¨ë ìë°©í¥ ì°ê´ì ëí´ ë©ëª¨ë¦¬ ë´ì ë ê°ì íìë¤ì ê°ëë¤ë ì ì ì미íë¤: Aë¡ë¶í° Bë¡ì íëì ë§í¬ì Bë¡ë¶í° Aë¡ì ë ë¤ë¥¸ ë§í¬. ë§ì¼ ë¹ì ì´ ìë° ê°ì²´ 모íì ëí´ ê·¸ë¦¬ê³ ìë°ìì many-to-many ê´ê³ë¥¼ ìì±ìí¤ë ë°©ë²ì ëí´ ìê°íë©´ ì´ê²ì ì´í´íê¸°ê° ë ì½ë¤:"
+
+#: index.docbook:699
+msgid ""
+ "<![CDATA[\n"
+ "category.getItems().add(item); // The category now \"knows\" about the relationship\n"
+ "item.getCategories().add(category); // The item now \"knows\" about the relationship\n"
+ "\n"
+ "session.persist(item); // The relationship won't be saved!\n"
+ "session.persist(category); // The relationship will be saved]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "category.getItems().add(item); // The category now \"knows\" about the relationship\n"
+ "item.getCategories().add(category); // The item now \"knows\" about the relationship\n"
+ "\n"
+ "session.persist(item); // The relationship won't be saved!\n"
+ "session.persist(category); // The relationship will be saved]]>"
+
+#: index.docbook:701
+msgid "The non-inverse side is used to save the in-memory representation to the database."
+msgstr "non-inverse 측ì ë©ëª¨ë¦¬ ë´ íìì ë°ì´í°ë² ì´ì¤ë¡ ì ì¥íëë° ì¬ì©ëë¤."
+
+#: index.docbook:705
+msgid "You may define a bidirectional one-to-many association by mapping a one-to-many association to the same table column(s) as a many-to-one association and declaring the many-valued end <literal>inverse=\"true\"</literal>."
+msgstr "ë¹ì ì íëì one-to-many ì°ê´ì íëì many-to-one ì°ê´ì¼ë¡ì ëì¼í í
ì´ë¸ 컬ë¼(ë¤)ë¡ ë§¤ííê³ many-ê°ì ê°ì§ ë(end)ì <literal>inverse=\"true\"</literal>ë¡ ì ì¸í¨ì¼ë¡ì¨ íëì ìë°©í¥ ì°ê´ì ì ìí ìë ìë¤."
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:713
+msgid "Mapping one end of an association with <literal>inverse=\"true\"</literal> doesn't affect the operation of cascades, these are orthogonal concepts!"
+msgstr "ì°ê´ì í쪽 ëì <literal>inverse=\"true\"</literal>ë¡ ë§¤ííë ê²ì cascadeë¤ì ê°ì§ ì¤í¼ë ì´ì
ì ìí¥ì ì£¼ì§ ìì¼ë©°, ì´ê²ë¤ì orthogonal(ì§êµ) ê°ë
ë¤ì´ë¤!"
+
+#: index.docbook:721
+msgid "Bidirectional associations with indexed collections"
+msgstr "ì¸ë±ì±ë ì½ë ì
ë¤ì ê°ì§ ìë°©í¥ ì°ê´ë¤"
+
+#: index.docbook:722
+msgid "A bidirectional association where one end is represented as a <literal><list></literal> or <literal><map></literal> requires special consideration. If there is a property of the child class which maps to the index column, no problem, we can continue using <literal>inverse=\"true\"</literal> on the collection mapping:"
+msgstr "í쪽 ëì´ íëì <literal><list></literal> ëë <literal><map></literal>ì¼ë¡ì ííëë ìë°©í¥ ì°ê´ì í¹ë³í ê²í 를 íìë¡ íë¤. ë§ì¼ ì¸ë±ì¤ 컬ë¼ì¼ë¡ 매íëë child í´ëì¤ì íë¡í¼í°ê° íë ì¡´ì¬íë¤ë©´ 문ì ê° ìê³ , ì°ë¦¬ë ì½ë ì
매í ìì <literal>inverse=\"true\"</literal>를 ì¬ì©íì¬ ê³ìí ì ìë¤:"
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"/>\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"/>\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:731
+msgid "But, if there is no such property on the child class, we can't think of the association as truly bidirectional (there is information available at one end of the association that is not available at the other end). In this case, we can't map the collection <literal>inverse=\"true\"</literal>. Instead, we could use the following mapping:"
+msgstr "ê·¸ë¬ë ë§ì¼ child í´ëì¤ ìì ê·¸ë° íë¡í¼í°ê° ì¡´ì¬íì§ ìì ê²½ì°, ì°ë¦¬ë ê·¸ ì°ê´ì ì§ì íê² ìë°©í¥ì¼ë¡ ê°ì£¼í ì ìë¤ (ë¤ë¥¸ 쪽 ëìì ì´ì©ê°ë¥íì§ ìì ê·¸ ì°ê´ì ëìì ì´ì© ê°ë¥í ì ë³´ê° ì¡´ì¬íë¤). ì´ ê²½ì°ì ì°ë¦¬ë ê·¸ ì½ë ì
ì <literal>inverse=\"true\"</literal>ë¡ ë§¤íìí¬ ì ìë¤. ëì ì ì°ë¦¬ë ë¤ì 매íì ì¬ì©í ì ìë¤:"
+
+#: index.docbook:738
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\">\n"
+ " <key column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\">\n"
+ " <key column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:740
+msgid "Note that in this mapping, the collection-valued end of the association is responsible for updates to the foreign key. TODO: Does this really result in some unnecessary update statements?"
+msgstr "ì´ ë§¤íìì ê·¸ ì°ê´ì ì½ë ì
ê°ì ê°ì§ ëì´ foreign í¤ì ëí ì
ë°ì´í¸ ì±
ìì´ ììì ë
¸í¸íë¼."
+
+#: index.docbook:748
+msgid "Ternary associations"
+msgstr "Ternary associations(ì¸ê²¹ ì°ê´ë¤)"
+
+#: index.docbook:750
+msgid "There are three possible approaches to mapping a ternary association. One is to use a <literal>Map</literal> with an association as its index:"
+msgstr "ì¸ ê²¹ì ì°ê´ì 매ííë ì¸ ê°ì§ ê°ë¥í ì ê·¼ë²ë¤ì´ ì¡´ì¬íë¤. íëì ì ê·¼ë²ì ê·¸ê²ì ì¸ë±ì¤ë¡ì ì°ê´ê´ê³ë¥¼ ê°ì§ <literal>Map</literal>ì ì¬ì©íë ê²ì´ë¤:"
+
+#: index.docbook:755
+msgid ""
+ "<![CDATA[<map name=\"contracts\">\n"
+ " <key column=\"employer_id\" not-null=\"true\"/>\n"
+ " <map-key-many-to-many column=\"employee_id\" class=\"Employee\"/>\n"
+ " <one-to-many class=\"Contract\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"contracts\">\n"
+ " <key column=\"employer_id\" not-null=\"true\"/>\n"
+ " <map-key-many-to-many column=\"employee_id\" class=\"Employee\"/>\n"
+ " <one-to-many class=\"Contract\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<map name=\"connections\">\n"
+ " <key column=\"incoming_node_id\"/>\n"
+ " <map-key-many-to-many column=\"outgoing_node_id\" class=\"Node\"/>\n"
+ " <many-to-many column=\"connection_id\" class=\"Connection\"/>\n"
+ "</map>]]>"
+msgstr ""
+ "<![CDATA[<map name=\"connections\">\n"
+ " <key column=\"incoming_node_id\"/>\n"
+ " <map-key-many-to-many column=\"outgoing_node_id\" class=\"Node\"/>\n"
+ " <many-to-many column=\"connection_id\" class=\"Connection\"/>\n"
+ "</map>]]>"
+
+#: index.docbook:759
+msgid "A second approach is to simply remodel the association as an entity class. This is the approach we use most commonly."
+msgstr "ë ë²ì§¸ ì ê·¼ë²ì ê·¸ ì°ê´ì ìí°í° í´ëì¤ë¡ì ë¨ìíê² ë¦¬ëª¨ë¸ë§ íë ê²ì´ë¤. ì´ê²ì ì°ë¦¬ê° ê°ì¥ ê³µíµì ì¼ë¡ ì¬ì©íë ì ê·¼ë²ì´ë¤."
+
+#: index.docbook:764
+msgid "A final alternative is to use composite elements, which we will discuss later."
+msgstr "ë§ì§ë§ ëìì ì°ë¦¬ê° ëì¤ì ë
¼ìíê² ë composite ììë¤ì ì¬ì©íë ê²ì´ë¤."
+
+#: index.docbook:771
+msgid "Using an <idbag>"
+msgstr "<literal><idbag></literal> ì¬ì©í기"
+
+#: index.docbook:773
+msgid "If you've fully embraced our view that composite keys are a bad thing and that entities should have synthetic identifiers (surrogate keys), then you might find it a bit odd that the many to many associations and collections of values that we've shown so far all map to tables with composite keys! Now, this point is quite arguable; a pure association table doesn't seem to benefit much from a surrogate key (though a collection of composite values <emphasis>might</emphasis>). Nevertheless, Hibernate provides a feature that allows you to map many to many associations and collections of values to a table with a surrogate key."
+msgstr "ë§ì¼ ë¹ì ì´ composite í¤ë¤ì´ ëì ê²ì´ê³ ìí°í°ë¤ì´ í©ì± ìë³ìë¤(ëì© í¤ë¤, surrogate keys)ì ê°ì ¸ì¼ íë¤ë ì°ë¦¬ì 견í´ë¥¼ ì ì ì¼ë¡ ìì©í ê²½ì°, ë¹ì ì ì°ë¦¬ê° ì§ê¸ê¹ì§ ë³´ì¬ì£¼ìë ê°ë¤ì ê°ì§ ì½ë ì
ë¤ê³¼ many to many ì°ê´ë¤ì´ 모ë composite í¤ë¤ì ê°ì§ í
ì´ë¸ë¤ë¡ 매íëë¤ë ì½ê° ì´ìí ì ì ë°ê²¬í ìë ìë¤! ì´ì ì´ ì ì 꽤 ë
¼ìì ì¬ì§ê° ìë¤; ììí ì°ê´ í
ì´ë¸ì (ë¹ë¡ composite ê°ë¤ì ê°ì§ ì½ë ì
<emphasis>ì¼ ìë</emphasis> ììì§ë¼ë) ëì© í¤ë¡ë¶í° ë§ì ì´ì ì ì·¨íì§ ìë ê²ì²ë¼ ë³´ì¸ë¤. ê·¸ë¼ìë ë¶êµ¬íê³ Hibernateë ë¹ì ì´ ê°ë¤ì ê°ì§ ì½ë ì
ë¤ê³¼ many to many ì°ê´ë¤ì ëì© í¤ë¥¼ ê°ì§ í
ì´ë¸ë¡ 매íìí¤ë ê²ì ë¹ì ìê² íì©í´ì£¼ë í¹ì§ì ì ê³µíë¤."
+
+#: index.docbook:784
+msgid "The <literal><idbag></literal> element lets you map a <literal>List</literal> (or <literal>Collection</literal>) with bag semantics."
+msgstr "<literal><idbag></literal> ììë bag ì미를 ê°ì§ <literal>List</literal>(ëë <literal>Collection</literal>)ì 매ííëë¡ ë¹ì ìê² íì©í´ì¤ë¤."
+
+#: index.docbook:789
+msgid ""
+ "<![CDATA[<idbag name=\"lovers\" table=\"LOVERS\">\n"
+ " <collection-id column=\"ID\" type=\"long\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </collection-id>\n"
+ " <key column=\"PERSON1\"/>\n"
+ " <many-to-many column=\"PERSON2\" class=\"Person\" fetch=\"join\"/>\n"
+ "</idbag>]]>"
+msgstr ""
+ "<![CDATA[<idbag name=\"lovers\" table=\"LOVERS\">\n"
+ " <collection-id column=\"ID\" type=\"long\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </collection-id>\n"
+ " <key column=\"PERSON1\"/>\n"
+ " <many-to-many column=\"PERSON2\" class=\"Person\" fetch=\"join\"/>\n"
+ "</idbag>]]>"
+
+#: index.docbook:791
+msgid "As you can see, an <literal><idbag></literal> has a synthetic id generator, just like an entity class! A different surrogate key is assigned to each collection row. Hibernate does not provide any mechanism to discover the surrogate key value of a particular row, however."
+msgstr "ë¹ì ì´ ë³¼ ì ìë¯ì´, <literal><idbag></literal>ì ë§ì¹ ìí°í° í´ëì¤ì¸ì synthetic id generator(í©ì± id ìì±ê¸°)를 ê°ëë¤! ë¤ë¥¸ ëì© í¤ë ê°ê°ì ì½ë ì
íì í ë¹ëë¤. íì§ë§ Hibernateë í¹ì íì ëì© í¤ ê°ì ë°ê²¬íë ë©ì»¤ëì¦ì ì ê³µíì§ ìëë¤."
+
+#: index.docbook:798
+msgid "Note that the update performance of an <literal><idbag></literal> is <emphasis>much</emphasis> better than a regular <literal><bag></literal>! Hibernate can locate individual rows efficiently and update or delete them individually, just like a list, map or set."
+msgstr "<literal><idbag></literal>ì ì
ë°ì´í¸ í¼í¬ë¨¼ì¤ë ì ê· <literal><bag></literal> ë³´ë¤ í¨ì¬ ì¢ë¤ë ì ì ë
¸í¸íë¼! Hibernateë ë§ì¹ list, map, ëë setì¸ì, ê°ë³ íë¤ì í¨ì¨ì ì¼ë¡ ìì¹ì§ì¸ ì ìê³ ê·¸ê²ë¤ì ê°ë³ì ì¼ë¡ ì
ë°ì´í¸ íê±°ë ìì ìí¬ ì ìë¤."
+
+#: index.docbook:805
+msgid "In the current implementation, the <literal>native</literal> identifier generation strategy is not supported for <literal><idbag></literal> collection identifiers."
+msgstr "íì¬ êµ¬íìì, <literal>native</literal> ìë³ì ìì± ë°©ëë <literal><idbag></literal> ì½ë ì
ìë³ìë¤ì ëí´ ì§ìëì§ ìëë¤."
+
+#: index.docbook:829
+msgid "Collection examples"
+msgstr "ì½ë ì
ìì ë¤"
+
+#: index.docbook:831
+msgid "The previous sections are pretty confusing. So lets look at an example. This class:"
+msgstr "ìì ì ë¤ì 꽤 í¼ëì¤ë½ë¤. ë°ë¼ì ìì 를 ì´í´ë³´ì. ë¤ì í´ëì¤:"
+
+#: index.docbook:836
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "\n"
+ "public class Parent {\n"
+ " private long id;\n"
+ " private Set children;\n"
+ "\n"
+ " public long getId() { return id; }\n"
+ " private void setId(long id) { this.id=id; }\n"
+ "\n"
+ " private Set getChildren() { return children; }\n"
+ " private void setChildren(Set children) { this.children=children; }\n"
+ "\n"
+ " ....\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "\n"
+ "public class Parent {\n"
+ " private long id;\n"
+ " private Set children;\n"
+ "\n"
+ " public long getId() { return id; }\n"
+ " private void setId(long id) { this.id=id; }\n"
+ "\n"
+ " private Set getChildren() { return children; }\n"
+ " private void setChildren(Set children) { this.children=children; }\n"
+ "\n"
+ " ....\n"
+ " ....\n"
+ "}]]>"
+
+#: index.docbook:838
+msgid "has a collection of <literal>Child</literal> instances. If each child has at most one parent, the most natural mapping is a one-to-many association:"
+msgstr "ë <literal>Child</literal> ì¸ì¤í´ì¤ë¤ì ê°ì§ íëì ì½ë ì
ì ê°ê³ ìë¤. ë§ì¼ ê°ê°ì ììì´ ìµìí í ê°ì ë¶ëª¨ë¥¼ ê°ì§ ê²½ì°, ëë¶ë¶ì ê³ ì í 매íì one-to-many ì°ê´ì´ë¤:"
+
+#: index.docbook:844
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:846
+msgid "This maps to the following table definitions:"
+msgstr "ì´ê²ì ë¤ì í
ì´ë¸ ì ìë¤ë¡ 매íëë¤:"
+
+#: index.docbook:850
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+
+#: index.docbook:852
+msgid "If the parent is <emphasis>required</emphasis>, use a bidirectional one-to-many association:"
+msgstr "ë§ì¼ ë¶ëª¨ê° <emphasis>íìì </emphasis>ì´ë¼ë©´, ìë°©í¥ one-to-many ì°ê´ê´ê³ë¥¼ ì¬ì©íë¼:"
+
+#: index.docbook:857
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <many-to-one name=\"parent\" class=\"Parent\" column=\"parent_id\" not-null=\"true\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <many-to-one name=\"parent\" class=\"Parent\" column=\"parent_id\" not-null=\"true\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:859
+msgid "Notice the <literal>NOT NULL</literal> constraint:"
+msgstr "<literal>NOT NULL</literal> 컨ì¤í¸ë ì¸í¸ë¥¼ 주목íë¼:"
+
+#: index.docbook:863
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null\n"
+ " primary key,\n"
+ " name varchar(255),\n"
+ " parent_id bigint not null )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null\n"
+ " primary key,\n"
+ " name varchar(255),\n"
+ " parent_id bigint not null )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+
+#: index.docbook:865
+msgid "Alternatively, if you absolutely insist that this association should be unidirectional, you can declare the <literal>NOT NULL</literal> constraint on the <literal><key></literal> mapping:"
+msgstr "ëìì ì¼ë¡, ë§ì¼ ë¹ì ì´ ì´ ì°ê´ê´ê³ê° ë¨ë°©í¥ì´ì´ì¼ í¨ì ì ëì ì¼ë¡ ìì¤í ê²½ì°, ë¹ì ì <literal><key></literal> 매í ìì <literal>NOT NULL</literal> 컨ì¤í¸ë ì¸í¸ë¥¼ ì ì¸í ì ìë¤:"
+
+#: index.docbook:871
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:873
+msgid "On the other hand, if a child might have multiple parents, a many-to-many association is appropriate:"
+msgstr "ë°ë©´ì, ë§ì¼ ììì´ ì¬ë¬ ë¶ëª¨ë¤ì ê°ì§ ì ìì ê²½ì°, many-to-many ì°ê´ì´ ì ì íë¤:"
+
+#: index.docbook:878
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" table=\"childset\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <many-to-many class=\"Child\" column=\"child_id\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" table=\"childset\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <many-to-many class=\"Child\" column=\"child_id\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:880
+msgid "Table definitions:"
+msgstr "í
ì´ë¸ ì ìë¤:"
+
+#: index.docbook:884
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255) )\n"
+ "create table childset ( parent_id bigint not null,\n"
+ " child_id bigint not null,\n"
+ " primary key ( parent_id, child_id ) )\n"
+ "alter table childset add constraint childsetfk0 (parent_id) references parent\n"
+ "alter table childset add constraint childsetfk1 (child_id) references child]]>"
+msgstr ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255) )\n"
+ "create table childset ( parent_id bigint not null,\n"
+ " child_id bigint not null,\n"
+ " primary key ( parent_id, child_id ) )\n"
+ "alter table childset add constraint childsetfk0 (parent_id) references parent\n"
+ "alter table childset add constraint childsetfk1 (child_id) references child]]>"
+
+#: index.docbook:886
+msgid "For more examples and a complete walk-through a parent/child relationship mapping, see <xref linkend=\"example-parentchild\"/>."
+msgstr "ë¶ëª¨/ìì ê´ê³ 매íì ì°ìµíë ë ë§ì ìì ë¤ê³¼ ì ì²´ 리íì¤ì <xref linkend=\"example-parentchild\"/>를 ë³´ë¼."
+
+#: index.docbook:891
+msgid "Even more exotic association mappings are possible, we will catalog all possibilities in the next chapter."
+msgstr "ë¹ë¡ ë ë§ì ì ì¢
ì°ê´ 매íë¤ì´ ê°ë¥í ì§ë¼ë, ì°ë¦¬ë ë¤ì ì¥ìì 모ë ê°ë¥ì±ë¤ì ë¶ë¥í ê²ì´ë¤."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/component_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/component_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/component_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,532 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Component Mapping"
+msgstr "Component 매í"
+
+#: index.docbook:7
+msgid "The notion of a <emphasis>component</emphasis> is re-used in several different contexts, for different purposes, throughout Hibernate."
+msgstr "<emphasis>component</emphasis>ì ê°ë
ì Hibernateìì ë¤ë¥¸ ì©ëë¡ ëªëª ë¤ë¥¸ 컨í
ì¤í¸ë¤ ë´ìì ì¬ì¬ì©ëë¤."
+
+#: index.docbook:13
+msgid "Dependent objects"
+msgstr "ì¢
ì ê°ì²´ë¤"
+
+#: index.docbook:15
+msgid "A component is a contained object that is persisted as a value type, not an entity reference. The term \"component\" refers to the object-oriented notion of composition (not to architecture-level components). For example, you might model a person like this:"
+msgstr "íëì ì»´í¬ëí¸ë ìí°í° ì°¸ì¡°ê° ìë, value íì
ì¼ë¡ì ììí ëë íëì í¬í¨ë ê°ì²´ì´ë¤. \"ì»´í¬ëí¸\" ì©ì´ë (ìí¤í
ì² ìì¤ì ì»´í¬ëí¸ë¤ì´ ìë) composition(구ì±,í©ì±)ì ëí ê°ì²´-ì§í¥ì ì¸ ê°ë
ì ì¸ê¸íë¤. ì를 ë¤ì´ ë¹ì ì ë¤ìê³¼ ê°ì´ ê°ì¸ì 모íí ìí¬ ìë ìë¤:"
+
+#: index.docbook:21
+msgid ""
+ "<![CDATA[public class Person {\n"
+ " private java.util.Date birthday;\n"
+ " private Name name;\n"
+ " private String key;\n"
+ " public String getKey() {\n"
+ " return key;\n"
+ " }\n"
+ " private void setKey(String key) {\n"
+ " this.key=key;\n"
+ " }\n"
+ " public java.util.Date getBirthday() {\n"
+ " return birthday;\n"
+ " }\n"
+ " public void setBirthday(java.util.Date birthday) {\n"
+ " this.birthday = birthday;\n"
+ " }\n"
+ " public Name getName() {\n"
+ " return name;\n"
+ " }\n"
+ " public void setName(Name name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ " ......\n"
+ " ......\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Person {\n"
+ " private java.util.Date birthday;\n"
+ " private Name name;\n"
+ " private String key;\n"
+ " public String getKey() {\n"
+ " return key;\n"
+ " }\n"
+ " private void setKey(String key) {\n"
+ " this.key=key;\n"
+ " }\n"
+ " public java.util.Date getBirthday() {\n"
+ " return birthday;\n"
+ " }\n"
+ " public void setBirthday(java.util.Date birthday) {\n"
+ " this.birthday = birthday;\n"
+ " }\n"
+ " public Name getName() {\n"
+ " return name;\n"
+ " }\n"
+ " public void setName(Name name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ " ......\n"
+ " ......\n"
+ "}]]>"
+
+#: index.docbook:23
+msgid ""
+ "<![CDATA[public class Name {\n"
+ " char initial;\n"
+ " String first;\n"
+ " String last;\n"
+ " public String getFirst() {\n"
+ " return first;\n"
+ " }\n"
+ " void setFirst(String first) {\n"
+ " this.first = first;\n"
+ " }\n"
+ " public String getLast() {\n"
+ " return last;\n"
+ " }\n"
+ " void setLast(String last) {\n"
+ " this.last = last;\n"
+ " }\n"
+ " public char getInitial() {\n"
+ " return initial;\n"
+ " }\n"
+ " void setInitial(char initial) {\n"
+ " this.initial = initial;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Name {\n"
+ " char initial;\n"
+ " String first;\n"
+ " String last;\n"
+ " public String getFirst() {\n"
+ " return first;\n"
+ " }\n"
+ " void setFirst(String first) {\n"
+ " this.first = first;\n"
+ " }\n"
+ " public String getLast() {\n"
+ " return last;\n"
+ " }\n"
+ " void setLast(String last) {\n"
+ " this.last = last;\n"
+ " }\n"
+ " public char getInitial() {\n"
+ " return initial;\n"
+ " }\n"
+ " void setInitial(char initial) {\n"
+ " this.initial = initial;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:25
+msgid "Now <literal>Name</literal> may be persisted as a component of <literal>Person</literal>. Notice that <literal>Name</literal> defines getter and setter methods for its persistent properties, but doesn't need to declare any interfaces or identifier properties."
+msgstr "ì´ì <literal>Name</literal>ì <literal>Person</literal>ì ì»´í¬ëí¸ë¡ì ììí ë ìë ìë¤. <literal>Name</literal>ì´ ê·¸ê²ì ìì íë¡í¼í°ë¤ì ëí getter ë©ìëì setter ë©ìë를 ì ìíì§ë§, ì´ë¤ ì¸í°íì´ì¤ë¤ì´ë ìë³ì íë¡í¼í°ë¤ì ì ì¸íë ê²ì íìë¡ íì§ ììì 주목íë¼."
+
+#: index.docbook:32
+msgid "Our Hibernate mapping would look like:"
+msgstr "ì°ë¦¬ì Hibernate 매íì ë¤ìê³¼ ê°ì ê²ì´ë¤:"
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\"> <!-- class attribute optional -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\"> <!-- class attribute optional -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+
+#: index.docbook:38
+msgid "The person table would have the columns <literal>pid</literal>, <literal>birthday</literal>, <literal>initial</literal>, <literal>first</literal> and <literal>last</literal>."
+msgstr "person í
ì´ë¸ì <literal>pid</literal>, <literal>birthday</literal>, <literal>initial</literal>, <literal>first</literal>, <literal>last</literal> 컬ë¼ë¤ì ê°ì§ ê²ì´ë¤."
+
+#: index.docbook:46
+msgid "Like all value types, components do not support shared references. In other words, two persons could have the same name, but the two person objects would contain two independent name ojects, only \"the same\" by value. The null value semantics of a component are <emphasis>ad hoc</emphasis>. When reloading the containing object, Hibernate will assume that if all component columns are null, then the entire component is null. This should be okay for most purposes."
+msgstr "모ë ê°(value) íì
ë¤ì²ë¼, ì»´í¬ëí¸ë¤ì ê³µì ë 참조ë¤ì ì§ìíì§ ìëë¤. ë¬ë¦¬ ë§í´, ë ëª
ì ê°ì¸ë¤ì ëì¼í ì´ë¦ì ê°ì§ ì ìì§ë§, ë ê°ì person ê°ì²´ë¤ì ì¤ì§ ê° ë§ì´ \"ëì¼í\" ë ê°ì ë
립ì ì¸ name ê°ì²´ë¤ì í¬í¨í ê²ì´ë¤. ì»´í¬ëí¸ì null ê° ì미ë <emphasis>í¹ë³í ì©ë를 ìí ê²ì´ë¤</emphasis>. í¬í¨ë ê°ì²´ë¥¼ ë¤ì ë¡ëìí¬ ë, Hibernateë 모ë ì»´í¬ëí¸ ì»¬ë¼ë¤ì´ nullì¼ ê²½ì°ì ì ì²´ ì»´í¬ëí¸ê° nullì´ë¼ê³ ê°ì í ê²ì´ë¤. ì´ê²ì ëë¶ë¶ì ì©ëì ë§ì ê²ì´ë¤."
+
+#: index.docbook:55
+msgid "The properties of a component may be of any Hibernate type (collections, many-to-one associations, other components, etc). Nested components should <emphasis>not</emphasis> be considered an exotic usage. Hibernate is intended to support a very fine-grained object model."
+msgstr "ì»´í¬ëí¸ì íë¡í¼í°ë¤ì ììì Hibernate íì
ì¼ ì ìë¤(ì½ë ì
ë¤, many-to-one ì°ê´ë¤, ë¤ë¥¸ ì»´í¬ëí¸ë¤, 기í). ë´í¬ë ì»´í¬ëí¸ë¤ì ì ì¢
ì ì¬ì©ë¡ë¡ ê°ì£¼ëì§ <emphasis>ìì</emphasis> ê²ì´ë¤. Hibernateë ë§¤ì° ì ì ì ë ê°ì²´ 모íì ì§ìíëë¡ ê³ ìëì´ìë¤."
+
+#: index.docbook:62
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr "<literal><component></literal> ììë ì»´í¬ëí¸ í´ëì¤ì íë¡í¼í°ë¥¼ í¬í¨ëë ìí°í°ì ëí ì 참조ë¡ì 매íìí¤ë <literal><parent></literal> ìë¸ìì를 íì©íë¤."
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\" unique=\"true\">\n"
+ " <parent name=\"namedPerson\"/> <!-- reference back to the Person -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\" unique=\"true\">\n"
+ " <parent name=\"namedPerson\"/> <!-- reference back to the Person -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+
+#: index.docbook:73
+msgid "Collections of dependent objects"
+msgstr "ì¢
ì ê°ì²´ë¤ì ê°ì§ ì½ë ì
ë¤"
+
+#: index.docbook:75
+msgid "Collections of components are supported (eg. an array of type <literal>Name</literal>). Declare your component collection by replacing the <literal><element></literal> tag with a <literal><composite-element></literal> tag."
+msgstr "ì»´í¬ëí¸ë¤ì ê°ì§ ì½ë ì
ë¤ì´ ì§ìëë¤(ì를 ë¤ë©´ <literal>Name</literal> íì
ì ê°ì§ ë°°ì´). <literal><element></literal> í그를 <literal><composite-element></literal> íê·¸ë¡ ëì²´ìì¼ì ë¹ì ì ì»´í¬ëí¸ ì½ë ì
ì ì ì¸íë¼."
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<set name=\"someNames\" table=\"some_names\" lazy=\"true\">\n"
+ " <key column=\"id\"/>\n"
+ " <composite-element class=\"eg.Name\"> <!-- class attribute required -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </composite-element>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"someNames\" table=\"some_names\" lazy=\"true\">\n"
+ " <key column=\"id\"/>\n"
+ " <composite-element class=\"eg.Name\"> <!-- class attribute required -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </composite-element>\n"
+ "</set>]]>"
+
+#: index.docbook:84
+msgid "Note: if you define a <literal>Set</literal> of composite elements, it is very important to implement <literal>equals()</literal> and <literal>hashCode()</literal> correctly."
+msgstr "ë
¸í¸: ë§ì¼ ë¹ì ì´ composite ìì를 ê°ì§ íëì <literal>Set</literal>를 ì ìí ê²½ì°, <literal>equals()</literal>ì <literal>hashCode()</literal>를 ì ííê² êµ¬ííë ê²ì´ ë§¤ì° ì¤ìíë¤."
+
+#: index.docbook:90
+msgid "Composite elements may contain components but not collections. If your composite element itself contains components, use the <literal><nested-composite-element></literal> tag. This is a pretty exotic case - a collection of components which themselves have components. By this stage you should be asking yourself if a one-to-many association is more appropriate. Try remodelling the composite element as an entity - but note that even though the Java model is the same, the relational model and persistence semantics are still slightly different."
+msgstr "Composite ììë¤ì ì»´í¬ëí¸ë¤ì í¬í¨íì§ë§ ì½ë ì
ë¤ì í¬í¨íì§ ìëë¤. ë§ì¼ ë¹ì ì composite ìì ìì²´ê° ì»´í¬ëí¸ë¤ì í¬í¨í ê²½ì°, <literal><nested-composite-element></literal> í그를 ì¬ì©íë¼. ì´ê²ì 꽤 ì ì¢
ì ê²½ì°-ê·¸ê²ë¤ ìì²´ê° ì»´í¬ëí¸ë¤ì ê°ê³ ìë ì»´í¬ëí¸ë¤ì ì½ë ì
-ì´ë¤. ì´ ë¨ê³ìì ë¹ì ì one-to-many ì°ê´ì´ ë ì ì íì§ë¥¼ ë¹ì ì¤ì¤ë¡ìê² ì§ë¬¸íê² ë ê²ì´ë¤. íëì ìí°í°ë¡ì composite ìì를 ë¤ì 모ë¸ë§íë ¤ê³ ìëíë¼ - ê·¸ë¬ë ìë° ëª¨íë¤ì´ ëì¼í ì§ë¼ë, ê´ê³í 모íê³¼ ììí ì미ë¤ì ì¬ì í ì½ê° ë¤ë¥´ë¤."
+
+#: index.docbook:102
+msgid "Please note that a composite element mapping doesn't support null-able properties if you're using a <literal><set></literal>. Hibernate has to use each columns value to identify a record when deleting objects (there is no separate primary key column in the composite element table), which is not possible with null values. You have to either use only not-null properties in a composite-element or choose a <literal><list></literal>, <literal><map></literal>, <literal><bag></literal> or <literal><idbag></literal>."
+msgstr "ë¹ì ì´ íëì <literal><set></literal>ì ì¬ì© ì¤ì´ë¼ë©´, íëì composite ìì 매íì null ê°ë¥í íë¡í¼í°ë¤ì ì§ìíì§ ììì ë
¸í¸í길 ë°ëë¤. Hibernateë ê°ì²´ë¤ì ìì í ë íëì ë ì½ë를 ìë³íëë° ê°ê°ì 컬ë¼ë¤ ê°ì ì¬ì©í´ì¼ íë©° (composite ìì í
ì´ë¸ ë´ì ë³ëì íë¼ì´ë¨¸ë¦¬ í¤ ì»¬ë¼ì´ ì¡´ì¬íì§ ìëë¤), ê·¸ê²ì null ê°ë¤ì ëí´ìë ë¶ê°ë¥íë¤. ë¹ì ì íëì composite-ìì ë´ì not-null íë¡í¼í°ë¤ ë§ì ì¬ì©í´ì¼ íê±°ë íëì <literal><list></literal>, <literal><map></literal>, <literal><bag></literal> ëë <literal><idbag></literal>ì ì íí´ì¼ íë¤."
+
+#: index.docbook:113
+msgid "A special case of a composite element is a composite element with a nested <literal><many-to-one></literal> element. A mapping like this allows you to map extra columns of a many-to-many association table to the composite element class. The following is a many-to-many association from <literal>Order</literal> to <literal>Item</literal> where <literal>purchaseDate</literal>, <literal>price</literal> and <literal>quantity</literal> are properties of the association:"
+msgstr "composite ììì ëí íëì í¹ë³í ê²½ì°ë ë´í¬ë <literal><many-to-one></literal> ìì를 ê°ì§ composite ììì´ë¤. ì´ê°ì 매íì many-to-many ì°ê´ í
ì´ë¸ì í¹ë³í 컬ë¼ë¤ì composite ìì í´ëì¤ë¡ 매íìí¤ë ê²ì ë¹ì ìê² íì©í´ì¤ë¤. ë¤ìì <literal>Order</literal>ë¡ë¶í° <literal>Item</literal>ì¼ë¡ì many-to-many ì°ê´ì´ë¤. ì¬ê¸°ì <literal>purchaseDate</literal>, <literal>price</literal>, ê·¸ë¦¬ê³ <literal>quantity</literal>ë ì°ê´ì íë¡í¼í°ë¤ì´ë¤:"
+
+#: index.docbook:123
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.Purchase\">\n"
+ " <property name=\"purchaseDate\"/>\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/> <!-- class attribute is optional -->\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.Purchase\">\n"
+ " <property name=\"purchaseDate\"/>\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/> <!-- class attribute is optional -->\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:125
+msgid "Of course, there can't be a reference to the purchae on the other side, for bidirectional association navigation. Remember that components are value types and don't allow shared references. A single <literal>Purchase</literal> can be in the set of an <literal>Order</literal>, but it can't be referenced by the <literal>Item</literal> at the same time."
+msgstr "ë¬¼ë¡ , ìë°©í¥ ì°ê´ ë¤ë¹ê²ì´ì
ì ê²½ì°, ë¤ë¥¸ 측 ìì ìë purchaseì ëí ì°¸ì¡°ê° ì¡´ì¬í ì ìë¤. ì»´í¬ëí¸ë¤ì´ ê°(value) íì
ë¤ì´ê³ ê³µì ë 참조ë¤ì íì©íì§ ììì 기ìµíë¼. íëì <literal>Purchase</literal>ë<literal>Order</literal>를 ê°ì§ set ë´ì ìì ì ìì§ë§, ê·¸ê²ì ëìì <literal>Item</literal>ì ìí´ ì°¸ì¡°ë ì ìë¤."
+
+#: index.docbook:133
+msgid "Even ternary (or quaternary, etc) associations are possible:"
+msgstr "ì¬ì§ì´ ì¸ê²¹ì(ëë ë¤ ê²¹ì, 기í) ì°ê´ë¤ì´ ê°ë¥íë¤:"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.OrderLine\">\n"
+ " <many-to-one name=\"purchaseDetails class=\"eg.Purchase\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/>\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.OrderLine\">\n"
+ " <many-to-one name=\"purchaseDetails class=\"eg.Purchase\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/>\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:137
+msgid "Composite elements may appear in queries using the same syntax as associations to other entities."
+msgstr "composite ììë¤ì ë¤ë¥¸ ìí°í°ë¤ì ëí ì°ê´ë¤ê³¼ ëì¼í 구문ì ì¬ì©íì¬ ì§ìë¤ ë´ì ëíë ìë ìë¤."
+
+#: index.docbook:145
+msgid "Components as Map indices"
+msgstr "Map ì¸ë±ì¤ë¤ë¡ì ì»´í¬ëí¸ë¤"
+
+#: index.docbook:147
+msgid "The <literal><composite-map-key></literal> element lets you map a component class as the key of a <literal>Map</literal>. Make sure you override <literal>hashCode()</literal> and <literal>equals()</literal> correctly on the component class."
+msgstr "<literal><composite-map-key></literal> ììë ë¹ì ìê² íëì ì»´í¬ëí¸ í´ëì¤ë¥¼ íëì <literal>Map</literal>ì í¤ë¡ì 매íìí¤ëë¡ íë¤. ë¹ì ì ì»´í¬ëí¸ í´ëì¤ ììì <literal>hashCode()</literal>ì <literal>equals()</literal>를 ì ííê² ì¤ë²ë¼ì´ë ìí¤ëë¡ íë¼."
+
+#: index.docbook:156
+msgid "Components as composite identifiers"
+msgstr "composite ìë³ìë¤ë¡ì ì»´í¬ëí¸ë¤"
+
+#: index.docbook:158
+msgid "You may use a component as an identifier of an entity class. Your component class must satisfy certain requirements:"
+msgstr "ë¹ì ì íëì ì»´í¬ëí¸ë¥¼ íëì ìí°í° í´ëì¤ì ëí íëì ìë³ìë¡ì ì¬ì©í ìë ìë¤. ë¹ì ì ì»´í¬ëí¸ í´ëì¤ë ì´ë¤ ì¬ìë¤ì 충족ìì¼ì¼ íë¤:"
+
+#: index.docbook:165
+msgid "It must implement <literal>java.io.Serializable</literal>."
+msgstr "ê·¸ê²ì <literal>java.io.Serializable</literal>ì 구íí´ì¼ íë¤."
+
+#: index.docbook:170
+msgid "It must re-implement <literal>equals()</literal> and <literal>hashCode()</literal>, consistently with the database's notion of composite key equality."
+msgstr "ê·¸ê²ì composite í¤ ë±ê°(equality)ì ëí ë°ì´í°ë² ì´ì¤ ê°ë
ê³¼ ì¼ì¹ëê², <literal>equals()</literal>ì <literal>hashCode()</literal>를 ë¤ì 구íí´ì¼ íë¤."
+
+#: index.docbook:179
+msgid "Note: in Hibernate3, the second requirement is not an absolutely hard requirement of Hibernate. But do it anyway."
+msgstr "ë
¸í¸: Hibernate3ìì, ë ë²ì§¸ ì¬ìì Hibernateì ì ëì ì¼ë¡ ì격í ì¬ìì´ ìëë¤. ê·¸ë¬ë ìë¬´í¼ ê·¸ê²ì ííë¼."
+
+#: index.docbook:183
+msgid "You can't use an <literal>IdentifierGenerator</literal> to generate composite keys. Instead the application must assign its own identifiers."
+msgstr "ë¹ì ì compsite í¤ë¤ì ìì±ìí¤ëë° <literal>IdentifierGenerator</literal>를 ì¬ì©í ì ìë¤. ëì ì ì´í리ì¼ì´ì
ì ê·¸ê² ìì ì ìë³ìë¤ì í ë¹í´ì¼ íë¤."
+
+#: index.docbook:188
+msgid "Use the <literal><composite-id></literal> tag (with nested <literal><key-property></literal> elements) in place of the usual <literal><id></literal> declaration. For example, the <literal>OrderLine</literal> class has a primary key that depends upon the (composite) primary key of <literal>Order</literal>."
+msgstr "íµìì <literal><id></literal> ì ì¸ ìì¹ì (ë´í¬ë <literal><key-property></literal> ììë¤ì ê°ì§) <literal><composite-id></literal> í그를 ì¬ì©íë¼. ì를 ë¤ì´, <literal>OrderLine</literal> í´ëì¤ë <literal>Order</literal>ì (composite) íë¼ì´ë¨¸ë¦¬ í¤ì ìì¡´íë íë¼ì´ë¨¸ë¦¬ í¤ë¥¼ ê°ëë¤."
+
+#: index.docbook:196
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " \n"
+ " <composite-id name=\"id\" class=\"OrderLineId\">\n"
+ " <key-property name=\"lineId\"/>\n"
+ " <key-property name=\"orderId\"/>\n"
+ " <key-property name=\"customerId\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"name\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\" class=\"Order\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-one>\n"
+ " ....\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " \n"
+ " <composite-id name=\"id\" class=\"OrderLineId\">\n"
+ " <key-property name=\"lineId\"/>\n"
+ " <key-property name=\"orderId\"/>\n"
+ " <key-property name=\"customerId\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"name\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\" class=\"Order\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-one>\n"
+ " ....\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:198
+msgid "Now, any foreign keys referencing the <literal>OrderLine</literal> table are also composite. You must declare this in your mappings for other classes. An association to <literal>OrderLine</literal> would be mapped like this:"
+msgstr "ì´ì <literal>OrderLine</literal> í
ì´ë¸ì 참조íë ììì foreign í¤ë¤ì´ ëí compsiteì´ë¤. ë¹ì ì ë¤ë¥¸ í´ëì¤ë¤ì ëí ë¹ì ì 매íë¤ ìì ì´ê²ì ì ì¸í´ì¼ íë¤. <literal>OrderLine</literal>ì ëí íëì ì°ê´ì ë¤ìê³¼ ê°ì´ 매íë ê²ì´ë¤:"
+
+#: index.docbook:204
+msgid ""
+ "<![CDATA[<many-to-one name=\"orderLine\" class=\"OrderLine\">\n"
+ "<!-- the \"class\" attribute is optional, as usual -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ "</many-to-one>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"orderLine\" class=\"OrderLine\">\n"
+ "<!-- the \"class\" attribute is optional, as usual -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ "</many-to-one>]]>"
+
+#: index.docbook:206
+msgid "(Note that the <literal><column></literal> tag is an alternative to the <literal>column</literal> attribute everywhere.)"
+msgstr "(<literal><column></literal> íê·¸ê° ëª¨ë ê³³ìì <literal>column</literal> ìì±ì ëí ëììì ë
¸í¸íë¼.)"
+
+#: index.docbook:211
+msgid "A <literal>many-to-many</literal> association to <literal>OrderLine</literal> also uses the composite foreign key:"
+msgstr "<literal>OrderLine</literal>ì ëí <literal>many-to-many</literal> ì°ê´ì ëí composite foreign í¤ë¥¼ ì¬ì©íë¤:"
+
+#: index.docbook:216
+msgid ""
+ "<![CDATA[<set name=\"undeliveredOrderLines\">\n"
+ " <key column name=\"warehouseId\"/>\n"
+ " <many-to-many class=\"OrderLine\">\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-many>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"undeliveredOrderLines\">\n"
+ " <key column name=\"warehouseId\"/>\n"
+ " <many-to-many class=\"OrderLine\">\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-many>\n"
+ "</set>]]>"
+
+#: index.docbook:218
+msgid "The collection of <literal>OrderLine</literal>s in <literal>Order</literal> would use:"
+msgstr "<literal>Order</literal>ìì <literal>OrderLine</literal>ë¤ì ì½ë ì
ì´ ì¬ì©ë ê²ì´ë¤:"
+
+#: index.docbook:223
+msgid ""
+ "<![CDATA[<set name=\"orderLines\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"OrderLine\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"orderLines\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"OrderLine\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:225
+msgid "(The <literal><one-to-many></literal> element, as usual, declares no columns.)"
+msgstr "(íµìì ì¼ë¡ <literal><one-to-many></literal> ììë 컬ë¼ë¤ì ì ì¸íì§ ìëë¤.)"
+
+#: index.docbook:229
+msgid "If <literal>OrderLine</literal> itself owns a collection, it also has a composite foreign key."
+msgstr "ë§ì¼ <literal>OrderLine</literal> ìì²´ê° íëì ì½ë ì
ì ìì í ê²½ì°, ê·¸ê²ì ëí íëì composite foreign í¤ë¥¼ ê°ëë¤."
+
+#: index.docbook:234
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " ....\n"
+ " ....\n"
+ " <list name=\"deliveryAttempts\">\n"
+ " <key> <!-- a collection inherits the composite key type -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <list-index column=\"attemptId\" base=\"1\"/>\n"
+ " <composite-element class=\"DeliveryAttempt\">\n"
+ " ...\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " ....\n"
+ " ....\n"
+ " <list name=\"deliveryAttempts\">\n"
+ " <key> <!-- a collection inherits the composite key type -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <list-index column=\"attemptId\" base=\"1\"/>\n"
+ " <composite-element class=\"DeliveryAttempt\">\n"
+ " ...\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:239
+msgid "Dynamic components"
+msgstr "ëì ì¸ ì»´í¬ëí¸ë¤"
+
+#: index.docbook:241
+msgid "You may even map a property of type <literal>Map</literal>:"
+msgstr "ë¹ì ì <literal>Map</literal> íì
ì íë¡í¼í°ë¥¼ 매íìí¬ ìë ìë¤:"
+
+#: index.docbook:245
+msgid ""
+ "<![CDATA[<dynamic-component name=\"userAttributes\">\n"
+ " <property name=\"foo\" column=\"FOO\" type=\"string\"/>\n"
+ " <property name=\"bar\" column=\"BAR\" type=\"integer\"/>\n"
+ " <many-to-one name=\"baz\" class=\"Baz\" column=\"BAZ_ID\"/>\n"
+ "</dynamic-component>]]>"
+msgstr ""
+ "<![CDATA[<dynamic-component name=\"userAttributes\">\n"
+ " <property name=\"foo\" column=\"FOO\" type=\"string\"/>\n"
+ " <property name=\"bar\" column=\"BAR\" type=\"integer\"/>\n"
+ " <many-to-one name=\"baz\" class=\"Baz\" column=\"BAZ_ID\"/>\n"
+ "</dynamic-component>]]>"
+
+#: index.docbook:247
+msgid "The semantics of a <literal><dynamic-component></literal> mapping are identical to <literal><component></literal>. The advantage of this kind of mapping is the ability to determine the actual properties of the bean at deployment time, just by editing the mapping document. Runtime manipulation of the mapping document is also possible, using a DOM parser. Even better, you can access (and change) Hibernate's configuration-time metamodel via the <literal>Configuration</literal> object."
+msgstr "<literal><dynamic-component></literal> 매íì ì미ë <literal><component></literal>ì ëì¼íë¤. ì´ë° ì¢
ë¥ì 매íì ì¥ì ì ë°°ì¹ ìì ë¨ì§ 매í 문ì를 í¸ì§í¨ì¼ë¡ì¨ ê·¸ beanì ì¤ì íë¡í¼í°ë¤ì ê²°ì íë ê°ì©ì±ì´ë¤. 매í 문ìì ëí ë°íì ì²ë¦¬ë ëí DOM íì를 ì¬ì©íì¬ ê°ë¥íë¤. ë ì¢ê²ë ë¹ì ì´ <literal>Configuration</literal> ê°ì²´ë¥¼ íµí´ Hibernateì 구ì±-ì ë©í모íì ì ê·¼í ì ìë¤(ê·¸ë¦¬ê³ ë³ê²½ìí¬ ì ìë¤)"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/configuration.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/configuration.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/configuration.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1598 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Configuration"
+msgstr "<title>구ì±</title>"
+
+#: index.docbook:7
+msgid "Because Hibernate is designed to operate in many different environments, there are a large number of configuration parameters. Fortunately, most have sensible default values and Hibernate is distributed with an example <literal>hibernate.properties</literal> file in <literal>etc/</literal> that shows the various options. Just put the example file in your classpath and customize it."
+msgstr "Hibernateê° ë§ì ë¤ë¥¸ íê²½ë¤ìì ëìíëë¡ ì¤ê³ëì´ ìì¼ë¯ë¡, ë§ì ê°ìì êµ¬ì± íë¼ë¯¸í°ë¤ì´ ì¡´ì¬íë¤. ë¤íí ëë¶ë¶ì ì ì미í ëí´í¸ ê°ë¤ì´ê³ Hibernateë ë¤ìí ìµì
ë¤ì ë³´ì¬ì£¼ë <literal>etc/</literal> ë´ì ìì íì¼ <literal>hibernate.properties</literal>ë¡ ë°°í¬ëë¤. ë¹ì ì ë¨ì§ ë¹ì ì classpath ê²½ë¡ ìì ê·¸ íì¼ì ì§ì´ë£ê³ ê·¸ê²ì 커ì¤í¸ë§ì´ì§íê¸°ë§ í´ì¼ íë¤."
+
+#: index.docbook:16
+msgid "Programmatic configuration"
+msgstr "íë¡ê·¸ë¨ ìì 구ì±"
+
+#: index.docbook:18
+msgid "An instance of <literal>org.hibernate.cfg.Configuration</literal> represents an entire set of mappings of an application's Java types to an SQL database. The <literal>Configuration</literal> is used to build an (immutable) <literal>SessionFactory</literal>. The mappings are compiled from various XML mapping files."
+msgstr "<literal>org.hibernate.cfg.Configuration</literal>ì ì¸ì¤í´ì¤ë ì´í리ì¼ì´ì
ì Java íì
ë¤ì SQL ë°ì´í°ë² ì´ì¤ íì
ì¼ë¡ì ì ì²´ 매í ì§í©ì íííë¤. <literal>Configuration</literal>ì (ë¶ë³ì) <literal>SessionFactory</literal>를 ë¹ëíëë° ì¬ì©ëë¤. 매íë¤ì ì¬ë¬ XML 매í íì¼ë¤ë¡ë¶í° ì»´íì¼ ëë¤."
+
+#: index.docbook:26
+msgid "You may obtain a <literal>Configuration</literal> instance by instantiating it directly and specifying XML mapping documents. If the mapping files are in the classpath, use <literal>addResource()</literal>:"
+msgstr "ë¹ì ì <literal>Configuration</literal> ì¸ì¤í´ì¤ë¥¼ ì´ê¸°í ìí¤ê³ XML 매í 문ìë¤ì ì§ì í¨ì¼ë¡ì¨ <literal>Configuration</literal> ì¸ì¤í´ì¤ë¥¼ ì»ì ì ìë¤. ë§ì¼ 매í íì¼ë¤ì´ classpath ë´ì ìë¤ë©´, <literal>addResource()</literal>를 ì¬ì©íë¼:"
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addResource(\"Item.hbm.xml\")\n"
+ " .addResource(\"Bid.hbm.xml\");]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addResource(\"Item.hbm.xml\")\n"
+ " .addResource(\"Bid.hbm.xml\");]]>"
+
+#: index.docbook:34
+msgid "An alternative (sometimes better) way is to specify the mapped class, and let Hibernate find the mapping document for you:"
+msgstr "(ëëë¡ ë ëì) ë¤ë¥¸ ë°©ë²ì 매íë í´ëì¤ë¥¼ ì§ì íë ê²ì´ê³ , Hibernateë¡ íì¬ê¸ ë¹ì ì ìí´ ë§¤í 문ì를 ì°¾ëë¡ íë¼:"
+
+#: index.docbook:39
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class);]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class);]]>"
+
+#: index.docbook:41
+msgid "Then Hibernate will look for mapping files named <literal>/org/hibernate/auction/Item.hbm.xml</literal> and <literal>/org/hibernate/auction/Bid.hbm.xml</literal> in the classpath. This approach eliminates any hardcoded filenames."
+msgstr "ê·¸ë Hibernateë classpath ë´ìì <literal>/org/hibernate/auction/Item.hbm.xml</literal>ê³¼ <literal>/org/hibernate/auction/Bid.hbm.xml</literal>ë¡ ëª
ëª
ë 매í íì¼ë¤ì 룩ì
í ê²ì´ë¤. ì´ ì ê·¼ë²ì ììì íëì½ë©ë íì¼ ì´ë¦ë¤ì ì ê±°íë¤."
+
+#: index.docbook:48
+msgid "A <literal>Configuration</literal> also allows you to specify configuration properties:"
+msgstr "<literal>Configuration</literal>ì ëí êµ¬ì± íë¡í¼í°ë¤ì ì§ì íë ê²ì íì©í´ì¤ë¤:"
+
+#: index.docbook:53
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class)\n"
+ " .setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLInnoDBDialect\")\n"
+ " .setProperty(\"hibernate.connection.datasource\", \"java:comp/env/jdbc/test\")\n"
+ " .setProperty(\"hibernate.order_updates\", \"true\");]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class)\n"
+ " .setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLInnoDBDialect\")\n"
+ " .setProperty(\"hibernate.connection.datasource\", \"java:comp/env/jdbc/test\")\n"
+ " .setProperty(\"hibernate.order_updates\", \"true\");]]>"
+
+#: index.docbook:55
+msgid "This is not the only way to pass configuration properties to Hibernate. The various options include:"
+msgstr "ì´ê²ì 컨í¼ê·¸ë ì´ì
íë¡í¼í°ë¤ì Hibernateì ì ë¬íë ì ì¼í ë°©ë²ì´ ìëë¤. ì¬ë¬ ê°ì§ ìµì
ë¤ì ë¤ìì í¬í¨íë¤:"
+
+#: index.docbook:62
+msgid "Pass an instance of <literal>java.util.Properties</literal> to <literal>Configuration.setProperties()</literal>."
+msgstr "<literal>java.util.Properties</literal>ì ì¸ì¤í´ì¤ë¥¼ <literal>Configuration.setProperties()</literal>ì ì ë¬íë¤ ."
+
+#: index.docbook:68
+msgid "Place <literal>hibernate.properties</literal> in a root directory of the classpath."
+msgstr "classpathì ë£¨í¸ ëë í 리ì <literal>hibernate.properties</literal>를 ìì¹ì§ì´ë¤."
+
+#: index.docbook:74
+msgid "Set <literal>System</literal> properties using <literal>java -Dproperty=value</literal>."
+msgstr "<literal>java -Dproperty=value</literal>를 ì¬ì©íì¬ <literal>System</literal> íë¡í¼í°ë¤ì ì¤ì íë¤."
+
+#: index.docbook:80
+msgid "Include <literal><property></literal> elements in <literal>hibernate.cfg.xml</literal> (discussed later)."
+msgstr "<literal>hibernate.cfg.xml</literal>ì <literal><property></literal> ììë¤ì í¬í¨íë¤ (ëì¤ì ë
¼ìë¨)."
+
+#: index.docbook:87
+msgid "<literal>hibernate.properties</literal> is the easiest approach if you want to get started quickly."
+msgstr "ë¹ì ì´ ë¹ ë¥´ê² ììíê³ ìí ê²½ì° <literal>hibernate.properties</literal>ë ê°ì¥ ì¬ì´ ì ê·¼ë²ì´ë¤."
+
+#: index.docbook:92
+msgid "The <literal>Configuration</literal> is intended as a startup-time object, to be discarded once a <literal>SessionFactory</literal> is created."
+msgstr "<literal>Configuration</literal>ì ìì ì(startup-time) ê°ì²´ë¡ì ì¼ë¨ <literal>SessionFactory</literal>ê° ìì±ëë©´ í기ëê²ë ìì ëì´ ìë¤."
+
+#: index.docbook:100
+msgid "Obtaining a SessionFactory"
+msgstr "SessionFactory ì»ê¸°"
+
+#: index.docbook:102
+msgid "When all mappings have been parsed by the <literal>Configuration</literal>, the application must obtain a factory for <literal>Session</literal> instances. This factory is intended to be shared by all application threads:"
+msgstr "모ë 매íë¤ì´ <literal>Configuration</literal>ì ìí´ íì±ëìì ë, ì´í리ì¼ì´ì
ì <literal>Session</literal> ì¸ì¤í´ì¤ë¤ì ëí í©í 리를 ì»ì´ì¼ íë¤. ì´ í©í 리ë 모ë ì´í리ì¼ì´ì
ì°ë ëë¤ì ìí´ ê³µì ëëë¡ ê³ ìëìë¤:"
+
+#: index.docbook:108
+msgid "<![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]>"
+msgstr "<![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]>"
+
+#: index.docbook:110
+msgid "Hibernate does allow your application to instantiate more than one <literal>SessionFactory</literal>. This is useful if you are using more than one database."
+msgstr "íì§ë§ Hibernateë ë¹ì ì ì´í리ì¼ì´ì
ì´ íë ì´ìì <literal>SessionFactory</literal>를 ì´ê¸°í ìí¤ë ê²ì íì©íë¤. ì´ê²ì ë¹ì ì´ íë ì´ìì ë°ì´í°ë² ì´ì¤ë¥¼ ì¬ì©íë ê²½ì°ì ì ì©íë¤."
+
+#: index.docbook:119
+msgid "JDBC connections"
+msgstr "JDBC 커ë¥ì
ë¤"
+
+#: index.docbook:121
+msgid "Usually, you want to have the <literal>SessionFactory</literal> create and pool JDBC connections for you. If you take this approach, opening a <literal>Session</literal> is as simple as:"
+msgstr "ëê° ë¹ì ì <literal>SessionFactory</literal>ë¡ íì¬ê¸ ë¹ì ì ìí JDBC 커ë¥ì
ë¤ì ìì±ìí¤ê³ íë§ìí¤ë ê²ì ìíë¤. ë§ì¼ ë¹ì ì´ ì´ ì ê·¼ë²ì ì·¨í ê²½ì°, í ê°ì <literal>Session</literal>ì ì¬ë ê²ì ë¤ìê³¼ ê°ì´ ê°ë¨íë¤:"
+
+#: index.docbook:127
+msgid "<![CDATA[Session session = sessions.openSession(); // open a new Session]]>"
+msgstr "<![CDATA[Session session = sessions.openSession(); // open a new Session]]>"
+
+#: index.docbook:129
+msgid "As soon as you do something that requires access to the database, a JDBC connection will be obtained from the pool."
+msgstr "ë¹ì ì´ ë°ì´í°ë² ì´ì¤ì ëí ì ê·¼ì ìì²íë ì´ë¤ ê²ì ííì ë§ì, í ê°ì JDBC 커ë¥ì
ì´ ê·¸ íë¡ë¶í° ì»ì´ì§ ê²ì´ë¤."
+
+#: index.docbook:134
+msgid "For this to work, we need to pass some JDBC connection properties to Hibernate. All Hibernate property names and semantics are defined on the class <literal>org.hibernate.cfg.Environment</literal>. We will now describe the most important settings for JDBC connection configuration."
+msgstr "ì´ê²ì´ ëìíëë¡ í기 ìí´ì, ì°ë¦¬ë ëªëª JDBC 커ë¥ì
íë¡í¼í°ë¤ì Hibernateì ì ë¬í íìê° ìë¤. 모ë Hibernate íë¡í¼í° ì´ë¦ë¤ê³¼ ìë¯¸ë¡ ë¤ì <literal>org.hibernate.cfg.Environment</literal> í´ëì¤ ìì ì ìëì´ ìë¤. ì°ë¦¬ë ì´ì JDBC 커ë¥ì
구ì±ì ìí ê°ì¥ ì¤ìí ì¤ì ë¤ì ì¤ëª
í ê²ì´ë¤."
+
+#: index.docbook:141
+msgid "Hibernate will obtain (and pool) connections using <literal>java.sql.DriverManager</literal> if you set the following properties:"
+msgstr "ë§ì¼ ë¹ì ì´ ë¤ì íë¡í¼í°ë¤ì ì¤ì í ê²½ì° Hibernateë <literal>java.sql.DriverManager</literal>를 ì¬ì©íì¬ ì»¤ë¥ì
ë¤ì ì»ì ê²ì´ë¤(ê·¸ë¦¬ê³ íë§ìí¬ ê²ì´ë¤):"
+
+#: index.docbook:147
+msgid "Hibernate JDBC Properties"
+msgstr "Hibernate JDBC íë¡í¼í°ë¤"
+
+#: index.docbook:153, index.docbook:241, index.docbook:338, index.docbook:529, index.docbook:725, index.docbook:832, index.docbook:920
+msgid "Property name"
+msgstr "íë¡í¼í° ì´ë¦"
+
+#: index.docbook:154, index.docbook:242, index.docbook:339, index.docbook:530, index.docbook:726, index.docbook:833, index.docbook:921
+msgid "Purpose"
+msgstr "<entry>ì©ë</entry>"
+
+#: index.docbook:160
+msgid "hibernate.connection.driver_class"
+msgstr "hibernate.connection.driver_class"
+
+#: index.docbook:163
+msgid "JDBC driver class"
+msgstr "jdbc ëë¼ì´ë² í´ëì¤"
+
+#: index.docbook:168
+msgid "hibernate.connection.url"
+msgstr "hibernate.connection.url"
+
+#: index.docbook:171
+msgid "JDBC URL"
+msgstr "jdbc URL"
+
+#: index.docbook:176, index.docbook:272
+msgid "hibernate.connection.username"
+msgstr "hibernate.connection.username"
+
+#: index.docbook:179
+msgid "database user"
+msgstr "ë°ì´í°ë² ì´ì¤ ì¬ì©ì"
+
+#: index.docbook:184, index.docbook:280
+msgid "hibernate.connection.password"
+msgstr "hibernate.connection.password"
+
+#: index.docbook:187
+msgid "database user password"
+msgstr "ë°ì´í°ë² ì´ì¤ ì¬ì©ì í¨ì¤ìë"
+
+#: index.docbook:192
+msgid "hibernate.connection.pool_size"
+msgstr "hibernate.connection.pool_size"
+
+#: index.docbook:195
+msgid "maximum number of pooled connections"
+msgstr "íë§ë 커ë¥ì
ë¤ì ìµë ê°ì"
+
+#: index.docbook:202
+msgid "Hibernate's own connection pooling algorithm is however quite rudimentary. It is intended to help you get started and is <emphasis>not intended for use in a production system</emphasis> or even for performance testing. You should use a third party pool for best performance and stability. Just replace the <literal>hibernate.connection.pool_size</literal> property with connection pool specific settings. This will turn off Hibernate's internal pool. For example, you might like to use C3P0."
+msgstr "íì§ë§ Hibernate ìì ì 커ë¥ì
íë§ ìê³ ë¦¬ì¦ì ì주 기본ì ì´ë¤. ê·¸ê²ì ë¹ì ì´ ììíë ê²ì ëìì£¼ë ¤ê³ ìëëìê³ <emphasis>ì í ìì¤í
ì©ë ëë í¼í¬ë¨¼ì¤ í
ì¤í¸ì©ì¼ë¡ë ê³ ìëì§ ììë¤</emphasis>. ìµìì í¼í¬ë¨¼ì¤ì ìì ì±ì ìí´ìë ì 3ì íì ì¬ì©íë¼. ì¦ <literal>hibernate.connection.pool_size</literal> íë¡í¼í°ë¥¼ 커ë¥ì
í ì§ì ì¤ì ë¤ë¡ ëì²´íë¼. ì´ê²ì Hibernateì ë´ë¶ poolì ì¤íìí¬ ê²ì´ë¤. ì를 ë¤ì´ ë¹ì ì C3P0를 ì¬ì©í ìë ìë¤."
+
+#: index.docbook:212
+msgid "C3P0 is an open source JDBC connection pool distributed along with Hibernate in the <literal>lib</literal> directory. Hibernate will use its <literal>C3P0ConnectionProvider</literal> for connection pooling if you set <literal>hibernate.c3p0.*</literal> properties. If you'd like to use Proxool refer to the packaged <literal>hibernate.properties</literal> and the Hibernate web site for more information."
+msgstr "C3P0ë <literal>lib</literal> ëíí 리 ìì Hibernateì ë°°í¬ë ì¤í ìì¤ JDBC 커ë¥ì
íì´ë¤. ë¹ì ì´ <literal>hibernate.c3p0.*</literal> íë¡í¼í°ë¤ì ì¤ì í ê²½ì° Hibernateë 커ë¥ì
íë§ì ìí´ ê·¸ê²ì <literal>C3P0ConnectionProvider</literal>를 ì¬ì©í ê²ì´ë¤. ë§ì¼ ë¹ì ì´ Proxoolì ì¬ì©íê³ ì ìí ê²½ì° í¨í¤ì§í ë <literal>hibernate.properties</literal>를 참조íê³ ì¶ê° ì ë³´ë Hibernate ì¹ ì¬ì´í¸ë¥¼ 참조íë¼."
+
+#: index.docbook:221
+msgid "Here is an example <literal>hibernate.properties</literal> file for C3P0:"
+msgstr "ë¤ìì C3P0ì ëí ì¬ì©íë ìì <literal>hibernate.properties</literal> íì¼ì´ë¤:"
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[hibernate.connection.driver_class = org.postgresql.Driver\n"
+ "hibernate.connection.url = jdbc:postgresql://localhost/mydatabase\n"
+ "hibernate.connection.username = myuser\n"
+ "hibernate.connection.password = secret\n"
+ "hibernate.c3p0.min_size=5\n"
+ "hibernate.c3p0.max_size=20\n"
+ "hibernate.c3p0.timeout=1800\n"
+ "hibernate.c3p0.max_statements=50\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+ "<![CDATA[hibernate.connection.driver_class = org.postgresql.Driver\n"
+ "hibernate.connection.url = jdbc:postgresql://localhost/mydatabase\n"
+ "hibernate.connection.username = myuser\n"
+ "hibernate.connection.password = secret\n"
+ "hibernate.c3p0.min_size=5\n"
+ "hibernate.c3p0.max_size=20\n"
+ "hibernate.c3p0.timeout=1800\n"
+ "hibernate.c3p0.max_statements=50\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+
+#: index.docbook:227
+msgid "For use inside an application server, you should almost always configure Hibernate to obtain connections from an application server <literal>Datasource</literal> registered in JNDI. You'll need to set at least one of the following properties:"
+msgstr "ì´í리ì¼ì´ì
ìë² ë´ë¶ì ì©ëë¡, ë¹ì ì JNDIë¡ ë±ë¡ë ì´í리ì¼ì´ì
ìë² <literal>Datasource</literal>ë¡ë¶í° 커ë¥ì
ì ì»ê¸° ìí´ íì Hibernate를 구ì±í´ì¼ íë¤. ë¹ì ì ì ì´ë ë¤ì íë¡í¼í°ë¤ ì¤ íë를 ìµìíì¼ë¡ ì¤ì í íìê° ìì ê²ì´ë¤."
+
+#: index.docbook:235
+msgid "Hibernate Datasource Properties"
+msgstr "Hibernate Datasource Properties"
+
+#: index.docbook:248
+msgid "hibernate.connection.datasource"
+msgstr "hibernate.connection.datasource"
+
+#: index.docbook:251
+msgid "datasource JNDI name"
+msgstr "ë°ì´í°ìì¤ JNDI ì´ë¦"
+
+#: index.docbook:256
+msgid "hibernate.jndi.url"
+msgstr "hibernate.jndi.url"
+
+#: index.docbook:258
+msgid "<emphasis>URL of the JNDI provider</emphasis> (optional)"
+msgstr "<emphasis>JNDI íë¡ë°ì´ëì URL</emphasis> (ìµì
)"
+
+#: index.docbook:264
+msgid "hibernate.jndi.class"
+msgstr "hibernate.jndi.class"
+
+#: index.docbook:266
+msgid "<emphasis>class of the JNDI <literal>InitialContextFactory</literal></emphasis> (optional)"
+msgstr "<emphasis>JNDI <literal>InitialContextFactory</literal>ì í´ëì¤ </emphasis> (ìµì
)"
+
+#: index.docbook:274
+msgid "<emphasis>database user</emphasis> (optional)"
+msgstr "<emphasis>ë°ì´í°ë² ì´ì¤ ì¬ì©ì</emphasis> (ìµì
)"
+
+#: index.docbook:282
+msgid "<emphasis>database user password</emphasis> (optional)"
+msgstr "<emphasis>ë°ì´í°ë² ì´ì¤ ì¬ì©ì í¨ì¤ìë</emphasis> (ìµì
)"
+
+#: index.docbook:290
+msgid "Here's an example <literal>hibernate.properties</literal> file for an application server provided JNDI datasource:"
+msgstr "ë¤ìì ì´í리ì¼ì´ì
ìë² ì ê³µ JNDI ë°ì´í°ìì¤ì© ìì <literal>hibernate.properties</literal> íì¼ì´ë¤:"
+
+#: index.docbook:295
+msgid ""
+ "<![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test\n"
+ "hibernate.transaction.factory_class = \\\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ "hibernate.transaction.manager_lookup_class = \\\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+ "<![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test\n"
+ "hibernate.transaction.factory_class = \\\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ "hibernate.transaction.manager_lookup_class = \\\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+
+#: index.docbook:297
+msgid "JDBC connections obtained from a JNDI datasource will automatically participate in the container-managed transactions of the application server."
+msgstr "JNDI datasourceë¡ë¶í° ì»ì´ì§ JDBC 커ë¥ì
ë¤ì ì´í리ì¼ì´ì
ìë²ì 컨í
ì´ëì ìí´ ê´ë¦¬ëë í¸ëìì
ë¤ì ìëì ì¼ë¡ ì°¸ì¬í ê²ì´ë¤."
+
+#: index.docbook:302
+msgid "Arbitrary connection properties may be given by prepending \"<literal>hibernate.connection</literal>\" to the property name. For example, you may specify a <literal>charSet</literal> using <literal>hibernate.connection.charSet</literal>."
+msgstr "ììì 커ë¥ì
íë¡í¼í°ë¤ì íë¡í¼í° ì´ë¦ ìì \"<literal>hibernate.connnection</literal>\"ì 첨ê°íì¬ ë¶ì¬ë ì ìë¤. ì를 ë¤ì´ ë¹ì ì <literal>hibernate.connection.charSet</literal>ì ì¬ì©íì¬ <literal>charSet</literal>ì ì§ì í ìë ìë¤."
+
+#: index.docbook:308
+msgid "You may define your own plugin strategy for obtaining JDBC connections by implementing the interface <literal>org.hibernate.connection.ConnectionProvider</literal>. You may select a custom implementation by setting <literal>hibernate.connection.provider_class</literal>."
+msgstr "ë¹ì ì <literal>org.hibernate.connection.ConnectionProvider</literal> ì¸í°íì´ì¤ë¥¼ 구íí¨ì¼ë¡ì¨ JDBC 커ë¥ì
ë¤ì ì»ë ë¹ì ìì ì íë¬ê·¸ì¸ ë°©ë를 ì ìí ìë ìë¤. ë¹ì ì <literal>hibernate.connection.provider_class</literal>를 ì¤ì íì¬ ë§ì¶¤í 구íì ì íí ìë ìë¤."
+
+#: index.docbook:317
+msgid "Optional configuration properties"
+msgstr "ì íì ì¸ êµ¬ì± íë¡í¼í°ë¤"
+
+#: index.docbook:319
+msgid "There are a number of other properties that control the behaviour of Hibernate at runtime. All are optional and have reasonable default values."
+msgstr "ì¤í ìì Hibernateì íì를 ì ì´íë ë§ì ë¤ë¥¸ íë¡í¼í°ë¤ì´ ì¡´ì¬íë¤. 모ë ê²ì´ ìµì
ì´ì§ë§ í©ë¹í ëí´í¸ ê°ë¤ì ê°ëë¤."
+
+#: index.docbook:324
+msgid "<emphasis>Warning: some of these properties are \"system-level\" only.</emphasis> System-level properties can be set only via <literal>java -Dproperty=value</literal> or <literal>hibernate.properties</literal>. They may <emphasis>not</emphasis> be set by the other techniques described above."
+msgstr "<emphasis>ê²½ê³ : ì´ë¤ íë¡í¼í°ë¤ ì¤ ëªëªì \"system-level\" ì ì©ì´ë¤.</emphasis> ìì¤í
ë 벨 íë¡í¼í°ë¤ì ì¤ì§ <literal>java -Dproperty=value</literal> ëë <literal>hibernate.properties</literal>를 íµí´ìë§ ì¤ì ë ì ìë¤. ê·¸ê²ë¤ì ìì ì¤ëª
ë ë¤ë¥¸ 기ë²ë¤ì ìí´ ì¤ì ë ì <emphasis>ìë¤</emphasis>."
+
+#: index.docbook:332
+msgid "Hibernate Configuration Properties"
+msgstr "Hibernate êµ¬ì± íë¡í¼í°ë¤"
+
+#: index.docbook:345
+msgid "hibernate.dialect"
+msgstr "hibernate.dialect"
+
+#: index.docbook:347
+msgid "The classname of a Hibernate <literal>Dialect</literal> which allows Hibernate to generate SQL optimized for a particular relational database."
+msgstr "í¹ì ê´ê³í ë°ì´í°ë² ì´ì¤ì ìµì í ë SQLì ìì±ìí¤ë ê²ì Hibernateìê² íì©í´ì£¼ë Hibernate <literal>Dialect</literal>ì í´ëì¤ëª
."
+
+#: index.docbook:351
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>full.classname.of.Dialect</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>full.classname.of.Dialect</literal>"
+
+#: index.docbook:359
+msgid "hibernate.show_sql"
+msgstr "hibernate.show_sql"
+
+#: index.docbook:361
+msgid "Write all SQL statements to console. This is an alternative to setting the log category <literal>org.hibernate.SQL</literal> to <literal>debug</literal>."
+msgstr "모ë SQL 문ì¥ë¤ì ì½ìì 기ë¡íë¤. ì´ê²ì ë¡ê·¸ ì¹´í
ê³ ë¦¬ <literal>org.hibernate.SQL</literal>를 <literal>debug</literal>ë¡ ì¤ì íë ê²ì ëí íëì ë¤ë¥¸ ë°©ë²ì´ë¤."
+
+#: index.docbook:365, index.docbook:377, index.docbook:471, index.docbook:484, index.docbook:497, index.docbook:510, index.docbook:564, index.docbook:591, index.docbook:605, index.docbook:660, index.docbook:888, index.docbook:903, index.docbook:993
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true</literal> | <literal>false</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>true</literal> | <literal>false</literal>"
+
+#: index.docbook:373
+msgid "hibernate.format_sql"
+msgstr "hibernate.format_sql"
+
+#: index.docbook:375
+msgid "Pretty print the SQL in the log and console."
+msgstr "ë¡ê·¸ì ì½ì ìì SQLì ê¹ëíê² í린í¸íë¤."
+
+#: index.docbook:385
+msgid "hibernate.default_schema"
+msgstr "hibernate.default_schema"
+
+#: index.docbook:387
+msgid "Qualify unqualified table names with the given schema/tablespace in generated SQL."
+msgstr "ìì±ë SQL ë´ì 주ì´ì§ schema/tablespaceë¡ì ììì´ ìë í
ì´ë¸ì´ë¦ë¤ì ììíë¤."
+
+#: index.docbook:390
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>SCHEMA_NAME</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>SCHEMA_NAME</literal>"
+
+#: index.docbook:398
+msgid "hibernate.default_catalog"
+msgstr "hibernate.default_catalog"
+
+#: index.docbook:400
+msgid "Qualify unqualified table names with the given catalog in generated SQL."
+msgstr "주ì´ì§ SQL ë´ì 주ì´ì§ ì¹´íë¡ì¼ë¡ì ììì´ ìë í
ì´ë¸ì´ë¦ë¤ì ììíë¤."
+
+#: index.docbook:403
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>CATALOG_NAME</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>CATALOG_NAME</literal>"
+
+#: index.docbook:411
+msgid "hibernate.session_factory_name"
+msgstr "hibernate.session_factory_name"
+
+#: index.docbook:413
+msgid "The <literal>SessionFactory</literal> will be automatically bound to this name in JNDI after it has been created."
+msgstr "<literal>SessionFactory</literal>ë ê·¸ê²ì´ ìì±ë íì JNDI ë´ìì ì´ ì´ë¦ì ìëì ì¼ë¡ ë°ì¸ë ë ê²ì´ë¤."
+
+#: index.docbook:416, index.docbook:859
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jndi/composite/name</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>jndi/composite/name</literal>"
+
+#: index.docbook:424
+msgid "hibernate.max_fetch_depth"
+msgstr "hibernate.max_fetch_depth"
+
+#: index.docbook:426
+msgid "Set a maximum \"depth\" for the outer join fetch tree for single-ended associations (one-to-one, many-to-one). A <literal>0</literal> disables default outer join fetching."
+msgstr "single-ended ì°ê´ê´ê³ë¤(one-to-one, many-to-one)ì ê²½ì°ì outer join fetch í¸ë¦¬ì ìµë \"ê¹ì´\"를 ì¤ì íë¤. <literal>0</literal>ì ëí´í¸ outer join fetchingì ì¬ì©ë¶ê°ë¥íê² ë§ë ë¤."
+
+#: index.docbook:430
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>0</literal> and <literal>3</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>0</literal>ê³¼ <literal>3</literal> ì¬ì´ì ê°ë¤ì´ê¶ì¥ëë¤"
+
+#: index.docbook:439
+msgid "hibernate.default_batch_fetch_size"
+msgstr "hibernate.default_batch_fetch_size"
+
+#: index.docbook:441
+msgid "Set a default size for Hibernate batch fetching of associations."
+msgstr "ì°ê´ë¤ì Hibernate ë°°ì¹ íì¹ì ëí ëí´í¸ í¬ê¸°ë¥¼ ì¤ì íë¤."
+
+#: index.docbook:443
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values <literal>4</literal>, <literal>8</literal>, <literal>16</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> ê¶ì¥ëë ê°ë¤ì <literal>4</literal>, <literal>8</literal>, <literal>16</literal>"
+
+#: index.docbook:452
+msgid "hibernate.default_entity_mode"
+msgstr "hibernate.default_entity_mode"
+
+#: index.docbook:454
+msgid "Set a default mode for entity representation for all sessions opened from this <literal>SessionFactory</literal>"
+msgstr "ì´ <literal>SessionFactory</literal>ë¡ë¶í° ì´ë ¤ì§ 모ë ì¸ì
ë¤ì ëí´ ìí°í° ííì ëí´í¸ 모ëë¡ ì¤ì íë¤"
+
+#: index.docbook:457
+msgid "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+msgstr "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+
+#: index.docbook:465
+msgid "hibernate.order_updates"
+msgstr "hibernate.order_updates"
+
+#: index.docbook:467
+msgid "Force Hibernate to order SQL updates by the primary key value of the items being updated. This will result in fewer transaction deadlocks in highly concurrent systems."
+msgstr "ì
ë°ì´í¸ ì¤ì¸ í목ë¤ì íë¼ì´ë¨¸ë¦¬ í¤ ê°ì ìí´ SQL ì
ë°ì´í¸ë¤ì´ ìì(ordering)ì§ìì§ëë¡ Hibernateìê² ê°ì ìí¨ë¤. ì´ê²ì ê³ ëì ëìì± ìì¤í
ë¤ìì ë ì ì í¸ëìì
ë°ëë½(deadlock)ë¤ë¡ ê·ê²°ë ê²ì´ë¤"
+
+#: index.docbook:479
+msgid "hibernate.generate_statistics"
+msgstr "hibernate.generate_statistics"
+
+#: index.docbook:481
+msgid "If enabled, Hibernate will collect statistics useful for performance tuning."
+msgstr "ì´ì© ê°ë¥íê² ëë©´, Hibernateë í¼í¬ë¨¼ì¤ íëì ì ì©í íµê³ë¤ì ìì§í ê²ì´ë¤."
+
+#: index.docbook:492
+msgid "hibernate.use_identifier_rollback"
+msgstr "hibernate.use_identifer_rollback"
+
+#: index.docbook:494
+msgid "If enabled, generated identifier properties will be reset to default values when objects are deleted."
+msgstr "ì´ì© ê°ë¥íê² ëë©´, ê°ì²´ê° ìì ë ë ìì±ë ìë³ì íë¡í¼í°ë¤ì ëí´í¸ ê°ë¤ë¡ ì¬ì¤ì ë ê²ì´ë¤."
+
+#: index.docbook:505
+msgid "hibernate.use_sql_comments"
+msgstr "hibernate.use_sql_comments"
+
+#: index.docbook:507
+msgid "If turned on, Hibernate will generate comments inside the SQL, for easier debugging, defaults to <literal>false</literal>."
+msgstr "ì´ì© ê°ë¥íê² ëë©´, Hibernateë ë³´ë¤ ì¬ì´ ëë²ê¹
ì ìí´ SQL ë´ì 주ìë¤ì ìì±ìí¬ ê²ì´ë¤. ëí´í¸ë <literal>false</literal>."
+
+#: index.docbook:521
+msgid "Hibernate JDBC and Connection Properties"
+msgstr "Hibernate JDBC ë° ì»¤ë¥ì
íë¡í¼í°ë¤"
+
+#: index.docbook:536
+msgid "hibernate.jdbc.fetch_size"
+msgstr "hibernate.jdbc.fetch_size"
+
+#: index.docbook:538
+msgid "A non-zero value determines the JDBC fetch size (calls <literal>Statement.setFetchSize()</literal>)."
+msgstr "0 ìë ê°ì JDBC fetch ì¬ì´ì¦ë¥¼ ê²°ì íë¤(<literal>Statement.setFetchSize()</literal>ì í¸ì¶íë¤ )."
+
+#: index.docbook:545
+msgid "hibernate.jdbc.batch_size"
+msgstr "hibernate.jdbc.batch_size"
+
+#: index.docbook:547
+msgid "A non-zero value enables use of JDBC2 batch updates by Hibernate."
+msgstr "0 ìë ê°ì Hibernateì ìí JDBC2 ë°°ì¹ ì
ë°ì´í¸ì ì¬ì©ì ì´ì© ê°ë¥íê² íë¤."
+
+#: index.docbook:549
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>5</literal> and <literal>30</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>5</literal>ì <literal>30</literal> ì¬ì´ì ê°ë¤ì´ ê¶ì¥ëë¤"
+
+#: index.docbook:557
+msgid "hibernate.jdbc.batch_versioned_data"
+msgstr "hibernate.jdbc.batch_versioned_data"
+
+#: index.docbook:559
+msgid "Set this property to <literal>true</literal> if your JDBC driver returns correct row counts from <literal>executeBatch()</literal> (it is usually safe to turn this option on). Hibernate will then use batched DML for automatically versioned data. Defaults to <literal>false</literal>."
+msgstr "ë¹ì ì JDBC ëë¼ì´ë²ê° <literal>executeBatch()</literal>ë¡ë¶í° ì íí í ì¹´ì´í¸ë¤ì ë°íí ê²½ì°ì ì´ íë¡í¼í°ë¥¼ <literal>true</literal>ë¡ ì¤ì íë¼(ëê° ì´ ìµì
ì ì¬ì© ê°ë¥íê² íë ê²ì´ ìì íë¤). ê·¸ë¬ë©´ Hibernateë ìëì ì¼ë¡ ë²ì í ë ë°ì´í°ì ëí´ ë°°ì¹íë(batched) DMLì ì¬ì©í ê²ì´ë¤. ëí´í¸ë <literal>false</literal>."
+
+#: index.docbook:572
+msgid "hibernate.jdbc.factory_class"
+msgstr "hibernate.jdbc.factory_class"
+
+#: index.docbook:574
+msgid "Select a custom <literal>Batcher</literal>. Most applications will not need this configuration property."
+msgstr "ë§ì¶¤í <literal>Batcher</literal>를 ì ííë¤. ëë¶ë¶ì ì´í리ì¼ì´ì
ë¤ì ì´ êµ¬ì± íë¡í¼í°ë¥¼ íìë¡ íì§ ìì ê²ì´ë¤."
+
+#: index.docbook:577
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.BatcherFactory</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>classname.of.BatcherFactory</literal>"
+
+#: index.docbook:585
+msgid "hibernate.jdbc.use_scrollable_resultset"
+msgstr "hibernate.jdbc.use_scrollable_resultset"
+
+#: index.docbook:587
+msgid "Enables use of JDBC2 scrollable resultsets by Hibernate. This property is only necessary when using user supplied JDBC connections, Hibernate uses connection metadata otherwise."
+msgstr "Hibernateì ìí JDBC2 ì¤í¬ë¡¤ ê°ë¥í ê²°ê³¼ì
ë¤ì ì¬ì©ì ê°ë¥íê² í´ì¤ë¤. ì´ íë¡í¼í°ë ì¬ì©ìê° ì ê³µí JDBC커ë¥ì
ë¤ì ì¬ì©í ëìë§ íìì ì´ê³ , ê·¸ ë°ì ê²½ì° Hibernateë 커ë¥ì
ë©íë°ì´í°ë¥¼ ì¬ì©íë¤."
+
+#: index.docbook:599
+msgid "hibernate.jdbc.use_streams_for_binary"
+msgstr "hibernate.jdbc.use_streams_for_binary"
+
+#: index.docbook:601
+msgid "Use streams when writing/reading <literal>binary</literal> or <literal>serializable</literal> types to/from JDBC (system-level property)."
+msgstr "<literal>binary</literal> ëë <literal>serializable</literal> íì
ë¤ì JDBCë¡ ê¸°ë¡íê³ /JDBCë¡ë¶í° <literal>binary</literal> ëë <literal>serializable</literal> íì
ë¤ì ì½ì´ë¤ì¼ ë ì¤í¸ë¦¼ë¤ì ì¬ì©íë¤(ìì¤í
-ë 벨 íë¡í¼í°)."
+
+#: index.docbook:613
+msgid "hibernate.jdbc.use_get_generated_keys"
+msgstr "hibernate.jdbc.use_get_generated_keys"
+
+#: index.docbook:615
+msgid "Enable use of JDBC3 <literal>PreparedStatement.getGeneratedKeys()</literal> to retrieve natively generated keys after insert. Requires JDBC3+ driver and JRE1.4+, set to false if your driver has problems with the Hibernate identifier generators. By default, tries to determine the driver capabilities using connection metadata."
+msgstr "insert íì ê³ ì íê² ìì±ë í¤ë¤ì ê²ìíëë° JDBC3 <literal>PreparedStatement.getGeneratedKeys()</literal>ì ì¬ì©ì ì´ì© ê°ë¥íëë¡ ë§ë ë¤. JDBC3+ ëë¼ì´ë²ì JRE1.4+를 íìë¡ íê³ , ë¹ì ì ëë¼ì´ë²ê° Hibernate ìë³ì ìì±ìë¤ì 문ì ê° ìì ê²½ì°ì falseë¡ ì¤ì íë¼. ëí´í¸ë¡ 커ë¥ì
ë©í ë°ì´í°ë¥¼ ì¬ì©íì¬ ëë¼ì´ë² ê°ì©ì±ë¤ì ê²°ì íë ¤ê³ ìëíë¼."
+
+#: index.docbook:621, index.docbook:751, index.docbook:763, index.docbook:777, index.docbook:815
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true|false</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>true|false</literal>"
+
+#: index.docbook:629
+msgid "hibernate.connection.provider_class"
+msgstr "hibernate.connection.provider_class"
+
+#: index.docbook:631
+msgid "The classname of a custom <literal>ConnectionProvider</literal> which provides JDBC connections to Hibernate."
+msgstr "Hibernateì JDBC 커ë¥ì
ë¤ì ì ê³µíë ë§ì¶¤í <literal>ConnectionProvider</literal>ì í´ëì¤ëª
."
+
+#: index.docbook:634
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.ConnectionProvider</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>classname.of.ConnectionProvider</literal>"
+
+#: index.docbook:642
+msgid "hibernate.connection.isolation"
+msgstr "hibernate.connection.isolation"
+
+#: index.docbook:644
+msgid "Set the JDBC transaction isolation level. Check <literal>java.sql.Connection</literal> for meaningful values but note that most databases do not support all isolation levels."
+msgstr "JDBC transaction isolation ë 벨ì ì¤ì íë¤. ì미ìë ê°ë¤ë¡ <literal>java.sql.Connection</literal>ì ì²´í¬íì§ë§ ëë¶ë¶ì ë°ì´í°ë² ì´ì¤ë¤ì´ 모ë 격리(isolate) ë 벨ë¤ì ì§ìíì§ ììì ë
¸í¸íë¼."
+
+#: index.docbook:648
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>1, 2, 4, 8</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>1, 2, 4, 8</literal>"
+
+#: index.docbook:656
+msgid "hibernate.connection.autocommit"
+msgstr "hibernate.connection.autocommit"
+
+#: index.docbook:658
+msgid "Enables autocommit for JDBC pooled connections (not recommended)."
+msgstr "JDBC íë§ë 커ë¥ì
ë¤ì ëí´ ìë커ë°ì ì´ì© ê°ë¥íëë¡ íë¤(ê¶ì¥ëì§ ìì)."
+
+#: index.docbook:668
+msgid "hibernate.connection.release_mode"
+msgstr "hibernate.connection.release_mode"
+
+#: index.docbook:670
+msgid "Specify when Hibernate should release JDBC connections. By default, a JDBC connection is held until the session is explicitly closed or disconnected. For an application server JTA datasource, you should use <literal>after_statement</literal> to aggressively release connections after every JDBC call. For a non-JTA connection, it often makes sense to release the connection at the end of each transaction, by using <literal>after_transaction</literal>. <literal>auto</literal> will choose <literal>after_statement</literal> for the JTA and CMT transaction strategies and <literal>after_transaction</literal> for the JDBC transaction strategy."
+msgstr "Hibernateê° JDBC 커ë¥ì
ë¤ì í´ì íê² ë ìì ì ì§ì íë¤. ëí´í¸ë¡ í ê°ì JDBC 커ë¥ì
ì ê·¸ ì¸ì
ì´ ëª
ìì ì¼ë¡ ë«íê±°ë ì°ê²°í´ì ë기 ì ê¹ì§ ë³´ê´ëë¤. ì´í리ì¼ì´ì
í¸ëìì
ìë² JTA ë°ì´í°ìì¤ì ê²½ì°, ë¹ì ì 모ë JDBC í¸ì¶ íì 커ë¥ì
ë¤ì ê³¼ê°íê² í´ì ìí¤ê¸° ìí´ <literal>after_statement</literal>를 ì¬ì©í´ì¼ íë¤. ë¹-JTA ì°ê²°ì ê²½ì°, <literal>after_transaction</literal>ì ì¬ì©íì¬ ê°ê°ì í¸ëìì
ì ëìì 커ë¥ì
ë¤ì í´ì ìí¤ë ê²ì´ ì¢
ì¢
ìë¯¸ê° ìë¤. <literal>auto</literal>ë JTA ë° CMT í¸ëìì
ë°©ëë¤ì ê²½ì°ì <literal>after_statement</literal>를 ì ííê³ JDBC í¸ëìì
ë°©ëì ëí´ <literal>after_transaction</literal>를 ì íí ê²ì´ë¤."
+
+#: index.docbook:681
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>auto</literal> (default) | <literal>on_close</literal> | <literal>after_transaction</literal> | <literal>after_statement</literal>"
+msgstr "<emphasis role=\"strong\">eg.</emphasis> <literal>auto</literal> (ëí´í¸) | <literal>on_close</literal> | <literal>after_transaction</literal> | <literal>after_statement</literal>"
+
+#: index.docbook:686
+msgid "Note that this setting only affects <literal>Session</literal>s returned from <literal>SessionFactory.openSession</literal>. For <literal>Session</literal>s obtained through <literal>SessionFactory.getCurrentSession</literal>, the <literal>CurrentSessionContext</literal> implementation configured for use controls the connection release mode for those <literal>Session</literal>s. See"
+msgstr "ì´ ì¤ì ì´ <literal>SessionFactory.openSession</literal>ë¡ë¶í° ë°íë <literal>Session</literal>ë¤ìë§ ìí¥ì ì¤ë¤ë ì ì ë
¸í¸íë¼. <literal>SessionFactory.getCurrentSession</literal>ì íµí´ ì»ì´ì§ <literal>Session</literal>ë¤ì ê²½ì°, ì¬ì©í기 ìí´ êµ¬ì±ë <literal>CurrentSessionContext</literal> 구íì´ ê·¸ë¤ <literal>Session</literal>ë¤ì ëí ì°ê²° í´ì 를 ì ì´íë¤. <xref linkend=\"architecture-current-session\"/>를 ë³´ë¼."
+
+#: index.docbook:698
+msgid "hibernate.connection.<emphasis><propertyName></emphasis>"
+msgstr "hibernate.connection.<emphasis><propertyName></emphasis>"
+
+#: index.docbook:700
+msgid "Pass the JDBC property <literal>propertyName</literal> to <literal>DriverManager.getConnection()</literal>."
+msgstr "JDBC íë¡í¼í° <literal>propertyName</literal>ì <literal>DriverManager.getConnection()</literal>ì ì ë¬íë¤."
+
+#: index.docbook:707
+msgid "hibernate.jndi.<emphasis><propertyName></emphasis>"
+msgstr "hibernate.jndi.<emphasis><propertyName></emphasis>"
+
+#: index.docbook:709
+msgid "Pass the property <literal>propertyName</literal> to the JNDI <literal>InitialContextFactory</literal>."
+msgstr "<literal>propertyName</literal> íë¡í¼í°ë¥¼ JNDI <literal>InitialContextFactory</literal>ì ì ë¬íë¤."
+
+#: index.docbook:719
+msgid "Hibernate Cache Properties"
+msgstr "Hibernate Cache íë¡í¼í°ë¤"
+
+#: index.docbook:732
+msgid "hibernate.cache.provider_class"
+msgstr "hibernate.cache.provider_class"
+
+#: index.docbook:734
+msgid "The classname of a custom <literal>CacheProvider</literal>."
+msgstr "ë§ì¶¤í <literal>CacheProvider</literal>ì í´ëì¤ëª
."
+
+#: index.docbook:736
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.CacheProvider</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>classname.of.CacheProvider</literal>"
+
+#: index.docbook:744
+msgid "hibernate.cache.use_minimal_puts"
+msgstr "hibernate.cache.use_minimal_puts"
+
+#: index.docbook:746
+msgid "Optimize second-level cache operation to minimize writes, at the cost of more frequent reads. This setting is most useful for clustered caches and, in Hibernate3, is enabled by default for clustered cache implementations."
+msgstr "ì½ê¸°ê° ë§¤ì° ë¹ë²í ê²½ì°ì, ì°ê¸°ë¥¼ ìµìí ìí¤ê¸° ìí´ second-level ìºì ì°ì°ì ìµì í ìí¨ë¤. ì´ ì¤ì ì Hibernate3ìì í´ë¬ì¤í°ë§ ë ìºìë¤ì ê°ì¥ ì ì©íê³ , Hibernate3ììë í´ë¬ì¤í°ë§ë ìºì 구íë¤ì ëí´ ëí´í¸ë¡ ì´ì© ê°ë¥íë¤."
+
+#: index.docbook:759
+msgid "hibernate.cache.use_query_cache"
+msgstr "hibernate.cache.use_query_cache"
+
+#: index.docbook:761
+msgid "Enable the query cache, individual queries still have to be set cachable."
+msgstr "ì§ì ìºì를 ê°ë¥íê² ë§ë ë¤. ê°ë³ ì§ìë¤ì ì¬ì í ìºì ê°ë¥í ê²ì¼ë¡ ì¤ì ëì´ì¼ íë¤."
+
+#: index.docbook:771
+msgid "hibernate.cache.use_second_level_cache"
+msgstr "hibernate.cache.use_second_level_cache"
+
+#: index.docbook:773
+msgid "May be used to completely disable the second level cache, which is enabled by default for classes which specify a <literal><cache></literal> mapping."
+msgstr "second-level ìºì를 ìì í ì¬ì© ë¶ê°ë¥íê² íëë° ì¬ì©ë ì ìê³ , ê·¸ê²ì <literal><cache></literal> 매íì ì§ì íë í´ëì¤ë¤ì ëí´ ëí´í¸ë¡ ì´ì© ê°ë¥ì´ë¤."
+
+#: index.docbook:785
+msgid "hibernate.cache.query_cache_factory"
+msgstr "hibernate.cache.query_cache_factory"
+
+#: index.docbook:787
+msgid "The classname of a custom <literal>QueryCache</literal> interface, defaults to the built-in <literal>StandardQueryCache</literal>."
+msgstr "ë§ì¶¤í <literal>QueryCache</literal> ì¸í°íì´ì¤ì í´ëì¤ëª
. ëí´í¸ë 미리 ë¹ëë <literal>StandardQueryCache</literal>."
+
+#: index.docbook:790
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.QueryCache</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>classname.of.QueryCache</literal>"
+
+#: index.docbook:798
+msgid "hibernate.cache.region_prefix"
+msgstr "hibernate.cache.region_prefix"
+
+#: index.docbook:800
+msgid "A prefix to use for second-level cache region names."
+msgstr "second-level ìºì ìì ì´ë¦ë¤ì ì¬ì©í ì ëì´."
+
+#: index.docbook:802
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>prefix</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>prefix</literal>"
+
+#: index.docbook:810
+msgid "hibernate.cache.use_structured_entries"
+msgstr "hibernate.cache.use_structured_entries"
+
+#: index.docbook:812
+msgid "Forces Hibernate to store data in the second-level cache in a more human-friendly format."
+msgstr "ì¸ê°ìê² ë³´ë¤ ë ì¹ìí íìì¼ë¡ second-level ìºì ìì ë°ì´í°ë¥¼ ì ì¥íëë¡ Hibernateìê² ê°ì ìí¨ë¤.."
+
+#: index.docbook:826
+msgid "Hibernate Transaction Properties"
+msgstr "Hibernate í¸ëìì
íë¡í¼í°ë¤"
+
+#: index.docbook:839
+msgid "hibernate.transaction.factory_class"
+msgstr "hibernate.transaction.factory_class"
+
+#: index.docbook:841
+msgid "The classname of a <literal>TransactionFactory</literal> to use with Hibernate <literal>Transaction</literal> API (defaults to <literal>JDBCTransactionFactory</literal>)."
+msgstr "Hibernate <literal>Transaction</literal> API ì ì¬ì©í <literal>TransactionFactory</literal>ì í´ëì¤ ì´ë¦.(ëí´í¸ë <literal>JDBCTransactionFactory</literal>)."
+
+#: index.docbook:845
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionFactory</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>classname.of.TransactionFactory</literal>"
+
+#: index.docbook:853
+msgid "jta.UserTransaction"
+msgstr "jta.UserTransaction"
+
+#: index.docbook:855
+msgid "A JNDI name used by <literal>JTATransactionFactory</literal> to obtain the JTA <literal>UserTransaction</literal> from the application server."
+msgstr "ì´í리ì¼ì´ì
ìë²ë¡ë¶í° JTA <literal>UserTransaction</literal>ì ì»ê¸° ìí´ <literal>JTATransactionFactory</literal>ì ìí´ ì¬ì©ëë JNDI ì´ë¦."
+
+#: index.docbook:867
+msgid "hibernate.transaction.manager_lookup_class"
+msgstr "hibernate.transaction.manager_lookup_class"
+
+#: index.docbook:869
+msgid "The classname of a <literal>TransactionManagerLookup</literal> - required when JVM-level caching is enabled or when using hilo generator in a JTA environment."
+msgstr "<literal>TransactionManagerLookup</literal>ì í´ëì¤ëª
- JVM ë 벨ì ìºì±ì´ ì´ì© ê°ë¥í ë ëë JTA íê²½ìì hilo generator를 ì¬ì©í ë íìíë¤."
+
+#: index.docbook:873
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionManagerLookup</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>classname.of.TransactionManagerLookup</literal>"
+
+#: index.docbook:881
+msgid "hibernate.transaction.flush_before_completion"
+msgstr "hibernate.transaction.flush_before_completion"
+
+#: index.docbook:883
+msgid "If enabled, the session will be automatically flushed during the before completion phase of the transaction. Built-in and automatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr "ë§ì¼ ì¬ì©ê°ë¥íëë¡ ëë©´, ì¸ì
ì í¸ëìì
ì before completion ë¨ê³ ëìì ìëì ì¼ë¡ flush ë ê²ì´ë¤. ë¹ëëì´ ìë ìëì ì¸ ì¸ì
컨í
ì¤í¸ ê´ë¦¬ê° ì í¸ëëë°, <xref linkend=\"architecture-current-session\"/>를 ë³´ë¼."
+
+#: index.docbook:896
+msgid "hibernate.transaction.auto_close_session"
+msgstr "hibernate.transaction.auto_close_session"
+
+#: index.docbook:898
+msgid "If enabled, the session will be automatically closed during the after completion phase of the transaction. Built-in and utomatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr "ë§ì¼ ì¬ì©ê°ë¥í ë¡ íë©´, after completion ë¨ê³ ëìì ì¸ì
ì´ ìëì ì¼ë¡ ë«íì§ ê²ì´ë¤. (CMTì ëí´ Hibernate를 ì¬ì©í ë ë§¤ì° ì ì©íë¤.)"
+
+#: index.docbook:914
+msgid "Miscellaneous Properties"
+msgstr "ì¬ë¬ê°ì§ íë¡í¼í°ë¤"
+
+#: index.docbook:927
+msgid "hibernate.current_session_context_class"
+msgstr "hibernate.current_session_context_class"
+
+#: index.docbook:929
+msgid "Supply a (custom) strategy for the scoping of the \"current\" <literal>Session</literal>. See <xref linkend=\"architecture-current-session\"/> for more information about the built-in strategies."
+msgstr "\"íì¬\" <literal>Session</literal>ì ììí를 ìí íëì (ë§ì¶¤) ë°©ë를 ì ê³µíë¤. ë¹ëëì´ ìë ë°©ëë¤ì ëí ì¶ê° ì ë³´ë <xref linkend=\"architecture-current-session\"/>를 ë³´ë¼."
+
+#: index.docbook:934
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jta</literal> | <literal>thread</literal> | <literal>managed</literal> | <literal>custom.Class</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>jta</literal> | <literal>thread</literal> | <literal>managed</literal> | <literal>custom.Class</literal>"
+
+#: index.docbook:943
+msgid "hibernate.query.factory_class"
+msgstr "hibernate.query.factory_class"
+
+#: index.docbook:945
+msgid "Chooses the HQL parser implementation."
+msgstr "Chooses the HQL íì 구íì ì ííë¤."
+
+#: index.docbook:947
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>"
+
+#: index.docbook:956
+msgid "hibernate.query.substitutions"
+msgstr "hibernate.query.substitutions"
+
+#: index.docbook:958
+msgid "Mapping from tokens in Hibernate queries to SQL tokens (tokens might be function or literal names, for example)."
+msgstr "Hibernate ì§ìë¤ ë´ì í í°ë¤ë¡ë¶í° SQL í í°ë¤ë¡ì 매í (ì를 ë¤ì´ í í°ë¤ì í¨ì ì´ë¦ ëë 리í°ë´ ì´ë¦ì¼ ì ìë¤)."
+
+#: index.docbook:961
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>"
+
+#: index.docbook:969
+msgid "hibernate.hbm2ddl.auto"
+msgstr "hibernate.hbm2ddl.auto"
+
+#: index.docbook:971
+msgid "Automatically validate or export schema DDL to the database when the <literal>SessionFactory</literal> is created. With <literal>create-drop</literal>, the database schema will be dropped when the <literal>SessionFactory</literal> is closed explicitly."
+msgstr "<literal>SessionFactory</literal>ê° ìì±ë ë, ìëì ì¼ë¡ ì í¨ì±ì ê²ì¬íê±°ë schema DDLì ë°ì´í°ë² ì´ì¤ë¡ ë´ë³´ë´ê¸° íë¤. <literal>create-drop</literal>ì ê²½ì°, <literal>SessionFactory</literal>ê° ëª
ìì ì¼ë¡ ë«íì§ ë ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ê° ëë¡ë ê²ì´ë¤."
+
+#: index.docbook:977
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>validate</literal> | <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+msgstr "<emphasis role=\"strong\">ì.</emphasis> <literal>validate</literal> | <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+
+#: index.docbook:986
+msgid "hibernate.cglib.use_reflection_optimizer"
+msgstr "hibernate.cglib.use_reflection_optimizer"
+
+#: index.docbook:988
+msgid "Enables use of CGLIB instead of runtime reflection (System-level property). Reflection can sometimes be useful when troubleshooting, note that Hibernate always requires CGLIB even if you turn off the optimizer. You can not set this property in <literal>hibernate.cfg.xml</literal>."
+msgstr "ë°íì reflection ëì ì CGLIBì ì¬ì©ì ê°ë¥íëë¡ ë§ë ë¤(ìì¤í
ë 벨 íë¡í¼í°). Reflectionì 문ì ê° ë°ìí ìì ëëë¡ ì ì©í ì ìê³ , ë¹ì ì´ optimizer를 ì¬ì©íì§ ìì ê²½ì°ì¡°ì°¨ë Hibernateë íì íìë¡ í¨ì ì ìíë¼. ë¹ì ì <literal>hibernate.cfg.xml</literal> ìì ì´ íë¡í¼í°ë¥¼ ì¤ì í ì ìë¤."
+
+#: index.docbook:1004
+msgid "SQL Dialects"
+msgstr "SQL Dialects"
+
+#: index.docbook:1006
+msgid "You should always set the <literal>hibernate.dialect</literal> property to the correct <literal>org.hibernate.dialect.Dialect</literal> subclass for your database. If you specify a dialect, Hibernate will use sensible defaults for some of the other properties listed above, saving you the effort of specifying them manually."
+msgstr "ë¹ì ì íì ë¹ì ì ë°ì´í°ë² ì´ì¤ë¥¼ ìí´ <literal>hibernate.dialect</literal> íë¡í¼í°ë¥¼ ì íí <literal>org.hibernate.dialect.Dialect</literal> ìë¸í´ëì¤ë¡ ì¤ì í´ì¼ íë¤. ë§ì¼ ë¹ì ì´ dialect를 ì§ì í ê²½ì°, ë¹ì ì´ íë¡í¼í°ë¤ì ììì
ì¼ë¡ ì§ì íë ë
¸ë ¥ì ì ì½íëë¡ Hibernateë ìì ì´ê±°ë ë¤ë¥¸ íë¡í¼í°ë¤ ì¤ ëªëªì ëí´ ì미ìë ëí´í¸ë¤ì ì¬ì©í ê²ì´ë¤."
+
+#: index.docbook:1014
+msgid "Hibernate SQL Dialects (<literal>hibernate.dialect</literal>)"
+msgstr "Hibernate SQL Dialects (<literal>hibernate.dialect</literal>)"
+
+#: index.docbook:1022
+msgid "RDBMS"
+msgstr "RDBMS"
+
+#: index.docbook:1023
+msgid "Dialect"
+msgstr "Dialect"
+
+#: index.docbook:1028
+msgid "<entry>DB2</entry>"
+msgstr "<entry>DB2</entry>"
+
+#: index.docbook:1028
+msgid "org.hibernate.dialect.DB2Dialect"
+msgstr "org.hibernate.dialect.DB2Dialect"
+
+#: index.docbook:1031
+msgid "DB2 AS/400"
+msgstr "DB2 AS/400"
+
+#: index.docbook:1031
+msgid "org.hibernate.dialect.DB2400Dialect"
+msgstr "org.hibernate.dialect.DB2400Dialect"
+
+#: index.docbook:1034
+msgid "DB2 OS390"
+msgstr "DB2 OS390"
+
+#: index.docbook:1034
+msgid "org.hibernate.dialect.DB2390Dialect"
+msgstr "org.hibernate.dialect.DB2390Dialect"
+
+#: index.docbook:1037
+msgid "PostgreSQL"
+msgstr "PostgreSQL"
+
+#: index.docbook:1037
+msgid "org.hibernate.dialect.PostgreSQLDialect"
+msgstr "org.hibernate.dialect.PostgreSQLDialect"
+
+#: index.docbook:1040
+msgid "MySQL"
+msgstr "MySQL"
+
+#: index.docbook:1040
+msgid "org.hibernate.dialect.MySQLDialect"
+msgstr "org.hibernate.dialect.MySQLDialect"
+
+#: index.docbook:1043
+msgid "MySQL with InnoDB"
+msgstr "MySQL with InnoDB"
+
+#: index.docbook:1043
+msgid "org.hibernate.dialect.MySQLInnoDBDialect"
+msgstr "org.hibernate.dialect.MySQLInnoDBDialect"
+
+#: index.docbook:1046
+msgid "MySQL with MyISAM"
+msgstr "MySQL with MyISAM"
+
+#: index.docbook:1046
+msgid "org.hibernate.dialect.MySQLMyISAMDialect"
+msgstr "org.hibernate.dialect.MySQLMyISAMDialect"
+
+#: index.docbook:1049
+msgid "Oracle (any version)"
+msgstr "Oracle (any version)"
+
+#: index.docbook:1049
+msgid "org.hibernate.dialect.OracleDialect"
+msgstr "org.hibernate.dialect.OracleDialect"
+
+#: index.docbook:1052
+msgid "Oracle 9i/10g"
+msgstr "Oracle 9i/10g"
+
+#: index.docbook:1052
+msgid "org.hibernate.dialect.Oracle9Dialect"
+msgstr "org.hibernate.dialect.Oracle9Dialect"
+
+#: index.docbook:1055
+msgid "Sybase"
+msgstr "Sybase"
+
+#: index.docbook:1055
+msgid "org.hibernate.dialect.SybaseDialect"
+msgstr "org.hibernate.dialect.SybaseDialect"
+
+#: index.docbook:1058
+msgid "Sybase Anywhere"
+msgstr "Sybase Anywhere"
+
+#: index.docbook:1058
+msgid "org.hibernate.dialect.SybaseAnywhereDialect"
+msgstr "org.hibernate.dialect.SybaseAnywhereDialect"
+
+#: index.docbook:1061
+msgid "Microsoft SQL Server"
+msgstr "Microsoft SQL Server"
+
+#: index.docbook:1061
+msgid "org.hibernate.dialect.SQLServerDialect"
+msgstr "org.hibernate.dialect.SQLServerDialect"
+
+#: index.docbook:1064
+msgid "SAP DB"
+msgstr "SAP DB"
+
+#: index.docbook:1064
+msgid "org.hibernate.dialect.SAPDBDialect"
+msgstr "org.hibernate.dialect.SAPDBDialect"
+
+#: index.docbook:1067
+msgid "Informix"
+msgstr "Informix"
+
+#: index.docbook:1067
+msgid "org.hibernate.dialect.InformixDialect"
+msgstr "org.hibernate.dialect.InformixDialect"
+
+#: index.docbook:1070
+msgid "HypersonicSQL"
+msgstr "HypersonicSQL"
+
+#: index.docbook:1070
+msgid "org.hibernate.dialect.HSQLDialect"
+msgstr "org.hibernate.dialect.HSQLDialect"
+
+#: index.docbook:1073
+msgid "Ingres"
+msgstr "Ingres"
+
+#: index.docbook:1073
+msgid "org.hibernate.dialect.IngresDialect"
+msgstr "org.hibernate.dialect.IngresDialect"
+
+#: index.docbook:1076
+msgid "Progress"
+msgstr "Progress"
+
+#: index.docbook:1076
+msgid "org.hibernate.dialect.ProgressDialect"
+msgstr "org.hibernate.dialect.ProgressDialect"
+
+#: index.docbook:1079
+msgid "Mckoi SQL"
+msgstr "Mckoi SQL"
+
+#: index.docbook:1079
+msgid "org.hibernate.dialect.MckoiDialect"
+msgstr "org.hibernate.dialect.MckoiDialect"
+
+#: index.docbook:1082
+msgid "Interbase"
+msgstr "Interbase"
+
+#: index.docbook:1082
+msgid "org.hibernate.dialect.InterbaseDialect"
+msgstr "org.hibernate.dialect.InterbaseDialect"
+
+#: index.docbook:1085
+msgid "Pointbase"
+msgstr "Pointbase"
+
+#: index.docbook:1085
+msgid "org.hibernate.dialect.PointbaseDialect"
+msgstr "org.hibernate.dialect.PointbaseDialect"
+
+#: index.docbook:1088
+msgid "FrontBase"
+msgstr "FrontBase"
+
+#: index.docbook:1088
+msgid "org.hibernate.dialect.FrontbaseDialect"
+msgstr "org.hibernate.dialect.FrontbaseDialect"
+
+#: index.docbook:1091
+msgid "Firebird"
+msgstr "Firebird"
+
+#: index.docbook:1091
+msgid "org.hibernate.dialect.FirebirdDialect"
+msgstr "org.hibernate.dialect.FirebirdDialect"
+
+#: index.docbook:1100
+msgid "Outer Join Fetching"
+msgstr "Outer Join Fetching"
+
+#: index.docbook:1102
+msgid "If your database supports ANSI, Oracle or Sybase style outer joins, <emphasis>outer join fetching</emphasis> will often increase performance by limiting the number of round trips to and from the database (at the cost of possibly more work performed by the database itself). Outer join fetching allows a whole graph of objects connected by many-to-one, one-to-many, many-to-many and one-to-one associations to be retrieved in a single SQL <literal>SELECT</literal>."
+msgstr "ë§ì¼ ë¹ì ì ë°ì´í°ë² ì´ì¤ê° ANSI, Oracle, ëë Sybase ì¤íì¼ì outer joinë¤ì ì§ìí ê²½ì°, <emphasis>outer join fetching</emphasis>ì (ë°ì´í°ë² ì´ì¤ ê·¸ ìì²´ì ìí´ ë³´ë¤ ë ë§ì ìì
ì´ ìíëë ë¹ì©ì¼ë¡) ë°ì´í°ë² ì´ì¤ë¡ì ê·¸ë¦¬ê³ ë°ì´í°ë² ì´ì¤ë¡ë¶í°ì ë¼ì´ë í¸ë¦½ë¤ì ê°ì를 ì íí¨ì¼ë¡ì¨ ì¢
ì¢
í¼í¬ë¨¼ì¤ë¥¼ ì¦ê°ìí¬ ê²ì´ë¤. Outer join fetchingì many-to-one, one-to-many, many-to-many,one-to-one ì°ê´ê´ê³ë¤ì´ ì ìí´ ì°ê²°ë ê°ì²´ë¤ì ì ì²´ ê·¸ëíê° íëì SQL <literal>SELECT</literal> ììì ê²ìëê²ë íì©í´ì¤ë¤."
+
+#: index.docbook:1111
+msgid "Outer join fetching may be disabled <emphasis>globally</emphasis> by setting the property <literal>hibernate.max_fetch_depth</literal> to <literal>0</literal>. A setting of <literal>1</literal> or higher enables outer join fetching for one-to-one and many-to-one associations which have been mapped with <literal>fetch=\"join\"</literal>."
+msgstr "Outer join fetchingì hibernate.max_fetch_depth íë¡í¼í°ë¥¼ <literal>0</literal>ì¼ë¡ ì¤ì í¨ì¼ë¡ì¨ <emphasis>ì ìì ì¼ë¡</emphasis> ì¬ì© ë¶ê°ë¥íê² í ì ìë¤. <literal>1</literal> ì´ìì ê°ì ì¤ì íë ê²ì <literal>fetch=\"join\"</literal>ì¼ë¡ 매íëìë 모ë one-to-one ë° many-to-one ì°ê´ê´ê³ë¤ì ëí´ outer join fetchingì ì¬ì© ê°ë¥íëë¡ ë§ë ë¤."
+
+#: index.docbook:1119
+msgid "See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "ì¶ê° ì ë³´ë <xref linkend=\"performance-fetching\"/>를 ë³´ë¼."
+
+#: index.docbook:1126
+msgid "Binary Streams"
+msgstr "Binary Streams"
+
+#: index.docbook:1128
+msgid "Oracle limits the size of <literal>byte</literal> arrays that may be passed to/from its JDBC driver. If you wish to use large instances of <literal>binary</literal> or <literal>serializable</literal> type, you should enable <literal>hibernate.jdbc.use_streams_for_binary</literal>. <emphasis>This is a system-level setting only.</emphasis>"
+msgstr "Oracleì JDBC ëë¼ì´ë² ë¡/ë¶í° ì ë¬ëë <literal>byte</literal> ë°°ì´ë¤ì í¬ê¸°ë¥¼ ì íìí¨ë¤. ë§ì¼ ë¹ì ì´ <literal>binary</literal> ëë <literal>serializable</literal> íì
ì ëí ì¸ì¤í´ì¤ë¥¼ ì¬ì©íê³ ì ìí ê²½ì°ì, ë¹ì ì <literal>hibernate.jdbc.use_streams_for_binary</literal>를 ì¬ì© ê°ë¥íê² í´ì¼ í ê²ì´ë¤. <emphasis>ì´ê²ì ì¤ì§ ìì¤í
ë 벨 ì¤ì ì´ë¤.</emphasis>"
+
+#: index.docbook:1139
+msgid "Second-level and query cache"
+msgstr "Second-level ìºìì query ìºì"
+
+#: index.docbook:1141
+msgid "The properties prefixed by <literal>hibernate.cache</literal> allow you to use a process or cluster scoped second-level cache system with Hibernate. See the <xref linkend=\"performance-cache\"/> for more details."
+msgstr "<literal>hibernate.cache</literal> ì ëì´ê° ë¶ì íë¡í¼í°ë¤ì Hibernateì ëí´ íë¡ì¸ì¤ ëë í´ë¬ì¤í° ë²ìì ë ë²ì§¸ ë 벨 ìºì ìì¤í
ì ì¬ì©íë ê²ì íì©í´ì¤ë¤. ìì¸í ê²ì <xref linkend=\"performance-cache\"/>를 ë³´ë¼."
+
+#: index.docbook:1151
+msgid "Query Language Substitution"
+msgstr "Query Language ì¹í"
+
+#: index.docbook:1153
+msgid "You may define new Hibernate query tokens using <literal>hibernate.query.substitutions</literal>. For example:"
+msgstr "ë¹ì ì <literal>hibernate.query.substitutions</literal>ì ì¬ì©íì¬ ìë¡ì´ Hibernate ì§ì í í°ë¤ì ì ìí ì ìë¤. ì를 ë¤ì´:"
+
+#: index.docbook:1158
+msgid "hibernate.query.substitutions true=1, false=0"
+msgstr "hibernate.query.substitutions true=1, false=0"
+
+#: index.docbook:1160
+msgid "would cause the tokens <literal>true</literal> and <literal>false</literal> to be translated to integer literals in the generated SQL."
+msgstr "ì<literal>true</literal>ì <literal>false</literal> í í°ë¤ì´ ìì±ë SQL ë´ìì ì ì 리í°ë´ë¤ë¡ ë²ìëëë¡ ê°ì í ê²ì´ë¤."
+
+#: index.docbook:1165
+msgid "hibernate.query.substitutions toLowercase=LOWER"
+msgstr "hibernate.query.substitutions toLowercase=LOWER"
+
+#: index.docbook:1167
+msgid "would allow you to rename the SQL <literal>LOWER</literal> function."
+msgstr "ì SQL <literal>LOWER</literal> function í¨ì ì´ë¦ì ë³ê²½íë ê²ì ë¹ì ìê² íì©í´ ì¤ ê²ì´ë¤"
+
+#: index.docbook:1174
+msgid "Hibernate statistics"
+msgstr "Hibernate íµê³"
+
+#: index.docbook:1176
+msgid "If you enable <literal>hibernate.generate_statistics</literal>, Hibernate will expose a number of metrics that are useful when tuning a running system via <literal>SessionFactory.getStatistics()</literal>. Hibernate can even be configured to expose these statistics via JMX. Read the Javadoc of the interfaces in <literal>org.hibernate.stats</literal> for more information."
+msgstr "ë§ì¼ ë¹ì ì´ <literal>hibernate.generate_statistics</literal>를 ì¬ì© ê°ë¥íëë¡ í ê²½ì°, Hibernateë <literal>SessionFactory.getStatistics()</literal>를 íµí´ ê°ë ì¤ì¸ ìì¤í
ì íëí ë ì ì©í ë§ì íµê³ë¤ì ë
¸ì¶ìí¬ ê²ì´ë¤. Hibernateë ì¬ì§ì´ JMX를 íµí´ ì´ë¤ íµê³ë¤ì ë
¸ì¶ìí¤ëë¡ êµ¬ì±ë ì ìë¤. ì¶ê° ì ë³´ë <literal>org.hibernate.stats</literal>ì ìë ì¸í°íì´ì¤ë¤ì ê´í Javadoc를 ì½ì´ë¼."
+
+#: index.docbook:1188
+msgid "Logging"
+msgstr "<title>ë¡ê¹
</title>"
+
+#: index.docbook:1190
+msgid "Hibernate logs various events using Apache commons-logging."
+msgstr "Hibernateë Apache commons-logging를 ì¬ì©íì¬ ë¤ìí ì´ë²¤í¸ë¤ì ë¡ê·¸ìí¨ë¤."
+
+#: index.docbook:1194
+msgid "The commons-logging service will direct output to either Apache Log4j (if you include <literal>log4j.jar</literal> in your classpath) or JDK1.4 logging (if running under JDK1.4 or above). You may download Log4j from <literal>http://jakarta.apache.org</literal>. To use Log4j you will need to place a <literal>log4j.properties</literal> file in your classpath, an example properties file is distributed with Hibernate in the <literal>src/</literal> directory."
+msgstr "commons-logging ìë¹ì¤ë (ë§ì¼ ë¹ì ì´ classpath ë´ì <literal>log4j.jar</literal>를 í¬í¨í ê²½ì°) Apache Log4jë¡ ëë (JDK1.4 ì´ìì ë²ì ìì ì¤íë ê²½ì°) JDK 1.4 ë¡ê¹
ì¼ë¡ ì§ì ì¶ë ¥í ê²ì´ë¤. ë¹ì ì <literal>http://jakarta.apache.org</literal>ìì Log4j를 ë¤ì´ë¡ë í ì ìë¤. Log4j를 ì¬ì©í기 ìí´, ë¹ì ì <literal>log4j.properties</literal> íì¼ì ë¹ì ì classpath ë´ì ìì¹ì§ì¸ íìê° ìì ê²ì´ê³ , ìì properties íì¼ì Hibernateì <literal>src/</literal> ëë í 리 ë´ì ë°°í¬ëì´ ìë¤."
+
+#: index.docbook:1204
+msgid "We strongly recommend that you familiarize yourself with Hibernate's log messages. A lot of work has been put into making the Hibernate log as detailed as possible, without making it unreadable. It is an essential troubleshooting device. The most interesting log categories are the following:"
+msgstr "ì°ë¦¬ë ë¹ì ì´ Hibernateì ë¡ê·¸ ë©ìì§ë¤ì ìµìí´ì§ê¸°ë¥¼ ê°ë ¥í ê¶ì¥íë¤. ì½ê¸° ë¶ê°ë¥íì§ ìê²ë ê°ë¥í í ìì¸íê² Hibernate ë¡ê·¸ë¥¼ ë§ë¤ëë¡ ë§ì ìì
ì´ íí´ì¡ë¤. ê·¸ê²ì 본ì§ì ì¸ ë¬¸ì ëì§ê¸° ì¥ì¹ì´ë¤. ê°ì¥ í¥ë¯¸ë¡ì´ ë¡ê·¸ ì¹´í
ê³ ë¦¬ë¤ì´ ë¤ìì ìë¤:"
+
+#: index.docbook:1213
+msgid "Hibernate Log Categories"
+msgstr "Hibernate ë¡ê·¸ ì¹´í
ê³ ë¦¬ë¤"
+
+#: index.docbook:1219
+msgid "Category"
+msgstr "ì¹´í
ê³ ë¦¬"
+
+#: index.docbook:1220
+msgid "Function"
+msgstr "<entry>기ë¥</entry>"
+
+#: index.docbook:1225
+msgid "org.hibernate.SQL"
+msgstr "org.hibernate.SQL"
+
+#: index.docbook:1226
+msgid "Log all SQL DML statements as they are executed"
+msgstr "SQL DML 문ì¥ë¤ì´ ì¤íë ë ê·¸ê²ë¤ 모ë를 ë¡ê·¸ ìí¨ë¤"
+
+#: index.docbook:1229
+msgid "org.hibernate.type"
+msgstr "org.hibernate.type"
+
+#: index.docbook:1230
+msgid "Log all JDBC parameters"
+msgstr "모ë JDBC íë¼ë¯¸í°ë¤ì ë¡ê·¸ìí¨ë¤"
+
+#: index.docbook:1233
+msgid "org.hibernate.tool.hbm2ddl"
+msgstr "org.hibernate.tool.hbm2ddl"
+
+#: index.docbook:1234
+msgid "Log all SQL DDL statements as they are executed"
+msgstr "SQL DDL 문ì¥ë¤ì´ ì¤íë ë ê·¸ê²ë¤ 모ë를 ë¡ê·¸ ìí¨ë¤"
+
+#: index.docbook:1237
+msgid "org.hibernate.pretty"
+msgstr "org.hibernate.pretty"
+
+#: index.docbook:1238
+msgid "Log the state of all entities (max 20 entities) associated with the session at flush time"
+msgstr "flush ìì ìì ì¸ì
ê³¼ ì°ê´ë 모ë ìí°í°ë¤(ìµë 20ê°ì ìí°í°ë¤)ì ìí를 ë¡ê·¸ ìí¨ë¤"
+
+#: index.docbook:1244
+msgid "org.hibernate.cache"
+msgstr "org.hibernate.cache"
+
+#: index.docbook:1245
+msgid "Log all second-level cache activity"
+msgstr "모ë second-level ìºì ì¡í°ë¹í°ë¥¼ ë¡ê·¸ìí¨ë¤"
+
+#: index.docbook:1248
+msgid "org.hibernate.transaction"
+msgstr "org.hibernate.transaction"
+
+#: index.docbook:1249
+msgid "Log transaction related activity"
+msgstr "í¸ëìì
ê´ë ¨ ì¡í°ë¹í°ë¥¼ ë¡ê·¸ ìí¨ë¤"
+
+#: index.docbook:1252
+msgid "org.hibernate.jdbc"
+msgstr "org.hibernate.jdbc"
+
+#: index.docbook:1253
+msgid "Log all JDBC resource acquisition"
+msgstr "모ë JDBC 리ìì¤ ì·¨ëì ë¡ê·¸ ìí¨ë¤"
+
+#: index.docbook:1256
+msgid "org.hibernate.hql.ast.AST"
+msgstr "org.hibernate.hql.ast.AST"
+
+#: index.docbook:1257
+msgid "Log HQL and SQL ASTs during query parsing"
+msgstr "ì§ì íì± ëìì HQL ASTì SQL AST를 ë¡ê·¸ìí¨ë¤"
+
+#: index.docbook:1262
+msgid "org.hibernate.secure"
+msgstr "org.hibernate.secure"
+
+#: index.docbook:1263
+msgid "Log all JAAS authorization requests"
+msgstr "모ë JAAS íê° ìì²ë¤ì ë¡ê·¸ìí¨ë¤"
+
+#: index.docbook:1266
+msgid "org.hibernate"
+msgstr "org.hibernate"
+
+#: index.docbook:1267
+msgid "Log everything (a lot of information, but very useful for troubleshooting)"
+msgstr "모ë ê²ì ë¡ê·¸ìí¨ë¤(ë§ì ì ë³´ì´ì§ë§, 문ì í´ê²°ì ë§¤ì° ì ì©íë¤)"
+
+#: index.docbook:1276
+msgid "When developing applications with Hibernate, you should almost always work with <literal>debug</literal> enabled for the category <literal>org.hibernate.SQL</literal>, or, alternatively, the property <literal>hibernate.show_sql</literal> enabled."
+msgstr "Hibernateë¡ ì´í리ì¼ì´ì
ë¤ì ê°ë°í ë, ë¹ì ì ê±°ì íì <literal>org.hibernate.SQL</literal> ì¹´í
ê³ ë¦¬ì ëí´ ì´ì© ê°ë¥í <literal>debug</literal> 모ëë¡ ìì
íê±°ë, ë¤ë¥¸ ë°©ë²ì¼ë¡ <literal>hibernate.show_sql</literal> íë¡í¼í°ë¥¼ ì´ì©ê°ë¥íê² íì¬ ìì
í´ì¼ í ê²ì´ë¤."
+
+#: index.docbook:1286
+msgid "Implementing a <literal>NamingStrategy</literal>"
+msgstr "<literal>NamingStrategy</literal> 구íí기"
+
+#: index.docbook:1288
+msgid "The interface <literal>org.hibernate.cfg.NamingStrategy</literal> allows you to specify a \"naming standard\" for database objects and schema elements."
+msgstr "<literal>org.hibernate.cfg.NamingStrategy</literal> ì¸í°íì´ì¤ë ë°ì´í°ë² ì´ì¤ ê°ì²´ë¤ê³¼ ì¤í¤ë§ ììë¤ì ëí \"ë¤ì´ë° íì¤\"ì ì§ì íë ê²ì ë¹ì ìê² íì©í´ì¤ë¤."
+
+#: index.docbook:1293
+msgid "You may provide rules for automatically generating database identifiers from Java identifiers or for processing \"logical\" column and table names given in the mapping file into \"physical\" table and column names. This feature helps reduce the verbosity of the mapping document, eliminating repetitive noise (<literal>TBL_</literal> prefixes, for example). The default strategy used by Hibernate is quite minimal."
+msgstr "ë¹ì ì Java ìë³ìë¤ë¡ë¶í° ë°ì´í°ë² ì´ì¤ ìë³ìë¤ì ìëì ì¼ë¡ ìì±ìí¤ê±°ë 매í íì¼ì 주ì´ì§ \"ë
¼ë¦¬ì \" 컬ë¼ê³¼ í
ì´ë¸ ì´ë¦ë¤ì \"물리ì \" í
ì´ë¸ê³¼ ì»¬ë¼ ì´ë¦ë¤ë¡ ìëì ì¼ë¡ ì²ë¦¬íë ê·ì¹ë¤ì ì ê³µí ì ìë¤. ì´ í¹ì§ì ë°ë³µëë ì¡ì(ì를 ë¤ì´ <literal>TBL_</literal>ì ëì´ë¤)ì ì ê±°í¨ì¼ë¡ì¨, 매í 문ìì ë§ë§ì ì¥í©í¨ì ê°ììí¤ëë¡ ëìì¤ë¤. Hibernateì ìí´ ì¬ì©ëë ëí´í¸ ë°©ëë ì주 ìì ìíì´ë¤."
+
+#: index.docbook:1302
+msgid "You may specify a different strategy by calling <literal>Configuration.setNamingStrategy()</literal> before adding mappings:"
+msgstr "ë¹ì ì 매íë¤ì ì¶ê°í기 ì´ì ì <literal>Configuration.setNamingStrategy()</literal>를 í¸ì¶í¨ì¼ë¡ì¨ ë¤ë¥¸ ë°©ë를 ì§ì í ì ìë¤:"
+
+#: index.docbook:1307
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)\n"
+ " .addFile(\"Item.hbm.xml\")\n"
+ " .addFile(\"Bid.hbm.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)\n"
+ " .addFile(\"Item.hbm.xml\")\n"
+ " .addFile(\"Bid.hbm.xml\")\n"
+ " .buildSessionFactory();]]>"
+
+#: index.docbook:1309
+msgid "<literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> is a built-in strategy that might be a useful starting point for some applications."
+msgstr "<literal>org.hibernate.cfg.ImprovedNamingStrategy</literal>ë ì´ë¤ ì´í리ì¼ì´ì
ë¤ì ëí ì ì©í ììì ì¼ ì ìë 미리 ë¹ëë ë°©ëì´ë¤."
+
+#: index.docbook:1317
+msgid "XML configuration file"
+msgstr "XML êµ¬ì± íì¼"
+
+#: index.docbook:1319
+msgid "An alternative approach to configuration is to specify a full configuration in a file named <literal>hibernate.cfg.xml</literal>. This file can be used as a replacement for the <literal>hibernate.properties</literal> file or, if both are present, to override properties."
+msgstr "구ì±ì ëí ë¤ë¥¸ ì ê·¼ë²ì <literal>hibernate.cfg.xml</literal>ë¡ ëª
ëª
ë íì¼ ìì ì ì²´ 구ì±ì ì§ì íë ê²ì´ë¤. ì´ íì¼ì <literal>hibernate.properties</literal> íì¼ì ëí ëì©ë¬¼ë¡ì ì¬ì©ë ì ìê±°ë, ë§ì¼ ë ë¤ ì¡´ì¬í ê²½ì°ì íë¡í¼í°ë¤ì ì¤ë³µì ìíëë° ì¬ì©ë ì ìë¤."
+
+#: index.docbook:1326
+msgid "The XML configuration file is by default expected to be in the root o your <literal>CLASSPATH</literal>. Here is an example:"
+msgstr "XML êµ¬ì± íì¼ì ëí´í¸ë¡ ë¹ì ì <literal>CLASSPATH</literal>ì 루í¸ì ì¡´ì¬íë ê²ì´ 기ëëë¤. ë¤ìì ìì ì´ë¤:"
+
+#: index.docbook:1331
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <!-- a SessionFactory instance listed as /jndi/name -->\n"
+ " <session-factory\n"
+ " name=\"java:hibernate/SessionFactory\">\n"
+ "\n"
+ " <!-- properties -->\n"
+ " <property name=\"connection.datasource\">java:/comp/env/jdbc/MyDB</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.MySQLDialect</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"transaction.factory_class\">\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ " </property>\n"
+ " <property name=\"jta.UserTransaction\">java:comp/UserTransaction</property>\n"
+ "\n"
+ " <!-- mapping files -->\n"
+ " <mapping resource=\"org/hibernate/auction/Item.hbm.xml\"/>\n"
+ " <mapping resource=\"org/hibernate/auction/Bid.hbm.xml\"/>\n"
+ "\n"
+ " <!-- cache settings -->\n"
+ " <class-cache class=\"org.hibernate.auction.Item\" usage=\"read-write\"/>\n"
+ " <class-cache class=\"org.hibernate.auction.Bid\" usage=\"read-only\"/>\n"
+ " <collection-cache collection=\"org.hibernate.auction.Item.bids\" usage=\"read-write\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <!-- a SessionFactory instance listed as /jndi/name -->\n"
+ " <session-factory\n"
+ " name=\"java:hibernate/SessionFactory\">\n"
+ "\n"
+ " <!-- properties -->\n"
+ " <property name=\"connection.datasource\">java:/comp/env/jdbc/MyDB</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.MySQLDialect</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"transaction.factory_class\">\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ " </property>\n"
+ " <property name=\"jta.UserTransaction\">java:comp/UserTransaction</property>\n"
+ "\n"
+ " <!-- mapping files -->\n"
+ " <mapping resource=\"org/hibernate/auction/Item.hbm.xml\"/>\n"
+ " <mapping resource=\"org/hibernate/auction/Bid.hbm.xml\"/>\n"
+ "\n"
+ " <!-- cache settings -->\n"
+ " <class-cache class=\"org.hibernate.auction.Item\" usage=\"read-write\"/>\n"
+ " <class-cache class=\"org.hibernate.auction.Bid\" usage=\"read-only\"/>\n"
+ " <collection-cache collection=\"org.hibernate.auction.Item.bids\" usage=\"read-write\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:1333
+msgid "As you can see, the advantage of this approach is the externalization of the mapping file names to configuration. The <literal>hibernate.cfg.xml</literal> is also more convenient once you have to tune the Hibernate cache. Note that is your choice to use either <literal>hibernate.properties</literal> or <literal>hibernate.cfg.xml</literal>, both are equivalent, except for the above mentioned benefits of using the XML syntax."
+msgstr "ë¹ì ì´ ë³¼ ì ìë¯ì´, ì´ ì ê·¼ë²ì ì¥ì ì 구ì±ì ëí 매í íì¼ ì´ë¦ë¤ì 구체í ìí¤ë ê²ì´ë¤. <literal>hibernate.cfg.xml</literal>ì ëí ë¹ì ì´ Hibernate ìºì를 íëí´ì¼í ë ë³´ë¤ í¸ë¦¬íë¤. <literal>hibernate.properties</literal> ëë <literal>hibernate.cfg.xml</literal> ì¤ ì´ë ê²ì ì¬ì©íëê°ë ë¹ì ì ì íì´ë¤. XML 구문ì ì¬ì©íë ìì ì¸ê¸ë ì´ì ë¤ì ì ì¸íë©´ ëë¤ ê°ì ê²ìì ë
¸í¸íë¼."
+
+#: index.docbook:1342
+msgid "With the XML configuration, starting Hibernate is then as simple as"
+msgstr "Hibernate 구ì±ì¼ë¡, Hibernate를 ììíë ê²ì ë¤ìê³¼ ê°ì´ ê°ë¨íë¤"
+
+#: index.docbook:1346
+msgid "<![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]>"
+msgstr "<![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]>"
+
+#: index.docbook:1348
+msgid "You can pick a different XML configuration file using"
+msgstr "ë¹ì ì ë¤ìì ì¬ì©íì¬ ë¤ë¥¸ XML êµ¬ì± íì¼ì ì°¾ìë¼ ì ìë¤"
+
+#: index.docbook:1352
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .configure(\"catdb.cfg.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .configure(\"catdb.cfg.xml\")\n"
+ " .buildSessionFactory();]]>"
+
+#: index.docbook:1357
+msgid "J2EE Application Server integration"
+msgstr "J2EE ì´í리ì¼ì´ì
ìë² íµí©"
+
+#: index.docbook:1359
+msgid "Hibernate has the following integration points for J2EE infrastructure:"
+msgstr "Hibernateë J2EE ì¸íë¼ì¤í¸ëì²ì ëí ë¤ì íµí© ì ë¤ì ê°ê³ ìë¤:"
+
+#: index.docbook:1365
+msgid "<emphasis>Container-managed datasources</emphasis>: Hibernate can use JDBC connections managed by the container and provided through JNDI. Usually, a JTA compatible <literal>TransactionManager</literal> and a <literal>ResourceManager</literal> take care of transaction management (CMT), esp. distributed transaction handling across several datasources. You may of course also demarcate transaction boundaries programmatically (BMT) or you might want to use the optional Hibernate <literal>Transaction</literal> API for this to keep your code portable."
+msgstr "<emphasis>Container-managed datasources</emphasis>: Hibernateë 컨í
ì´ëì ìí´ ê´ë¦¬ëë JDBC 커ë¥ì
ë¤ì ì¬ì©í ì ìê³ JNDI를 íµí´ ì ê³µëë¤. ëê° JTA í¸í <literal>TransactionManager</literal>ì <literal>ResourceManager</literal>ë í¸ëìì
ê´ë¦¬(CMT), í¹í ëªëª ë°ì´í°ìì¤ë¤ì ê°ë¡ì§ë¬ ë¶ì°ë í¸ëìì
í¸ë¤ë§ì ì²ë¦¬íë¤. ë¬¼ë¡ ë¹ì ì ëí íë¡ê·¸ë¨ ìì¼ë¡ í¸ëìì
ê²½ê³ë¤ì íì í ìë ìê±°ë(BMT) ë¹ì ì ë¹ì ì ì½ëê° ì´ìì±ì ì ì§íëë¡ ì´ê²ì ëí ì íì ì¸ Hibernate <literal>Transaction</literal> API를 ì¬ì©íê³ ì ìí ìë ìë¤."
+
+#: index.docbook:1380
+msgid "<emphasis>Automatic JNDI binding</emphasis>: Hibernate can bind its <literal>SessionFactory</literal> to JNDI after startup."
+msgstr "<emphasis>ìëì ì¸ JNDI ë°ì¸ë©</emphasis>: Hibernateë ìì íì ê·¸ê²ì <literal>SessionFactory</literal>를 JNDIì ë°ì¸ë ìí¬ ì ìë¤."
+
+#: index.docbook:1389
+msgid "<emphasis>JTA Session binding:</emphasis> The Hibernate <literal>Session</literal> may be automatically bound to the scope of JTA transactions. Simply lookup the <literal>SessionFactory</literal> from JNDI and get the current <literal>Session</literal>. Let Hibernate take care of flushing and closing the <literal>Session</literal> when your JTA transaction completes. Transaction demarcation is either declarative (CMT) or programmatic (BMT/UserTransaction)."
+msgstr "<emphasis>JTA Session ë°ì¸ë©</emphasis>: Hibernate <literal>Session</literal>ì JTA í¸ëìì
ë¤ì ìì(scope)ì ìëì ì¼ë¡ ë°ì¸ë ìí¬ ìë ìë¤. ê°ë¨íê² JNDIë¡ë¶í° <literal>SessionFactory</literal>를 룩ì
íê³ íì¬ <literal>Session</literal>ì ì»ì´ë¼. Hibernateë¡ íì¬ê¸ ë¹ì ì JTA í¸ëìì
ì´ ìë£ë ë <literal>Session</literal>ì flushìí¤ê³ ë«ë ê²ì ì²ë¦¬íëë¡ íë¼. í¸ëìì
ê²½ê³ êµ¬ë¶ì ì ì¸ì (CMT)ì´ê±°ë íë¡ê·¸ëë°ì ((BMT/UserTransaction))ì´ë¤."
+
+#: index.docbook:1402
+msgid "<emphasis>JMX deployment:</emphasis> If you have a JMX capable application server (e.g. JBoss AS), you can chose to deploy Hibernate as a managed MBean. This saves you the one line startup code to build your <literal>SessionFactory</literal> from a <literal>Configuration</literal>. The container will startup your <literal>HibernateService</literal>, and ideally also take care of service dependencies (Datasource has to be available before Hibernate starts, etc)."
+msgstr "<emphasis>JMX ë°°ì¹</emphasis>: ë§ì¼ ë¹ì ì´ JMX ê°ì©ì±ì´ ìë ì´í리ì¼ì´ì
ìë²(ì를 ë¤ë©´ JBoss AS)를 ê°ê³ ìë¤ë©´, ë¹ì ì Hibernate를 íëì managed MBeanì¼ë¡ì ë°°ì¹íë ê²ì ì íí ì ìë¤. ì´ê²ì <literal>Configuration</literal>ì¼ë¡ë¶í° ë¹ì ì <literal>SessionFactory</literal>를 ë¹ë ìí¤ë í ì¤ì ìì ì½ë를 ì ì½í´ì¤ë¤. 컨í
ì´ëë ë¹ì ì <literal>HibernateService</literal>를 ììí ê²ì´ê³ , ëí ì´ìì ì¼ë¡ ìë¹ì¤ ìì¡´ì±ë¤ì ì²ë¦¬í ê²ì´ë¤(ë°ì´í°ìì¤ë Hibernateê° ììë기 ì ì ì´ì© ê°ë¥í´ì¼ íë¤)."
+
+#: index.docbook:1413
+msgid "Depending on your environment, you might have to set the configuration option <literal>hibernate.connection.aggressive_release</literal> to true if your application server shows \"connection containment\" exceptions."
+msgstr "ë¹ì ì íê²½ì ë°ë¼, ë¹ì ì ë¹ì ì ì´í리ì¼ì´ì
ìë²ê° \"connection containment(ì°ê²° ë´ì)\" ìì¸ìí©ë¤ì ë³´ì¼ ê²½ì°ì êµ¬ì± ìµì
<literal>hibernate.connection.aggressive_release</literal>를 trueë¡ ì¤ì í´ì¼ ë ìë ìë¤."
+
+#: index.docbook:1420
+msgid "Transaction strategy configuration"
+msgstr "í¸ëìì
ë°©ë 구ì±"
+
+#: index.docbook:1422
+msgid "The Hibernate <literal>Session</literal> API is independent of any transaction demarcation system in your architecture. If you let Hibernate use JDBC directly, through a connection pool, you may begin and end your transactions by calling the JDBC API. If you run in a J2EE application server, you might want to use bean-managed transactions and call the JTA API and <literal>UserTransaction</literal> when needed."
+msgstr "Hibernate <literal>Session</literal> APIë ë¹ì ì ìì¹´í
ì² ë´ìì ììì í¸ëìì
ê´í ìì¤í
ì ë
립ì ì´ë¤. ë§ì¼ ë¹ì ì´ Hibernateë¡ íì¬ê¸ 커ë¥ì
íì íµí´ ì§ì JDBC를 ì¬ì©íëë¡ ê°ì í ê²½ì°, ë¹ì ì JDBC API를 í¸ì¶íì¬ ë¹ì ì í¸ëìì
ì ììíê³ ëë¼ ì ìë¤. ë§ì¼ ë¹ì ì´ J2EE ì´í리ì¼ì´ì
ìë²ë¥¼ ì¤í ì¤ì´ë¼ë©´, ë¹ì ì íìí ë bean-managed í¸ëìì
ë¤ì ì¬ì©íê³ JTA APIì <literal>UserTransaction</literal>ì í¸ì¶íê³ ì ìí ì ìë¤."
+
+#: index.docbook:1430
+msgid "To keep your code portable between these two (and other) environments we recommend the optional Hibernate <literal>Transaction</literal> API, which wraps and hides the underlying system. You have to specify a factory class for <literal>Transaction</literal> instances by setting the Hibernate configuration property <literal>hibernate.transaction.factory_class</literal>."
+msgstr "ì´ë¤ ë ê°ì (ê·¸ë¦¬ê³ ë¤ë¥¸) íê²½ë¤ìì ë¹ì ì ì½ëì ì´ìì±ì ì ì§í기 ìí´ ì°ë¦¬ë 기본 ìì¤í
ì í¬ì¥íê³ ìíìí¤ë ì íì ì¸ Hibernate <literal>Transaction</literal> API를 ê¶ì¥íë¤. ë¹ì ì Hibernate êµ¬ì± íë¡í¼í° <literal>hibernate.transaction.factory_class</literal>를 ì¬ì©íì¬ <literal>Transaction</literal> ì¸ì¤í´ì¤ë¤ì ëí í©í 리 í´ëì¤ë¥¼ ì§ì í´ì¼ íë¤."
+
+#: index.docbook:1437
+msgid "There are three standard (built-in) choices:"
+msgstr "ì¸ ê°ì íì¤(미리 ë§ë¤ì´ì§) ì íë¤ì´ ì¡´ì¬íë¤:"
+
+#: index.docbook:1443
+msgid "org.hibernate.transaction.JDBCTransactionFactory"
+msgstr "org.hibernate.transaction.JDBCTransactionFactory"
+
+#: index.docbook:1445
+msgid "delegates to database (JDBC) transactions (default)"
+msgstr "ë°ì´í°ë² ì´ì¤ (JDBC) í¸ëìì
ë¤ìê² ìììí¨ë¤(ëí´í¸)"
+
+#: index.docbook:1449
+msgid "org.hibernate.transaction.JTATransactionFactory"
+msgstr "org.hibernate.transaction.JTATransactionFactory"
+
+#: index.docbook:1451
+msgid "delegates to container-managed transaction if an existing transaction is underway in this context (e.g. EJB session bean method), otherwise a new transaction is started and bean-managed transaction are used."
+msgstr "기존ì í¸ëìì
ì´ ì´ ì»¨í
ì¤í¸(ì를 ë¤ë©´ EJB session bean ë©ìë) ë´ìì ì§í ì¤ì¼ ê²½ì°ì container-managed transactionìê² ìììí¤ê³ , ê·¸ ë°ì ê²½ì° ìë¡ì´ í¸ëìì
ì´ ììëê³ bean-managed transactionì´ ì¬ì©ëë¤."
+
+#: index.docbook:1459
+msgid "org.hibernate.transaction.CMTTransactionFactory"
+msgstr "org.hibernate.transaction.CMTTransactionFactory"
+
+#: index.docbook:1461
+msgid "delegates to container-managed JTA transactions"
+msgstr "container-managed JTA í¸ëìì
ë¤ìê² ìììí¨ë¤"
+
+#: index.docbook:1466
+msgid "You may also define your own transaction strategies (for a CORBA transaction service, for example)."
+msgstr "ë¹ì ì ëí ë¹ì ìì ì í¸ëìì
ë°©ëë¤(ì를 ë¤ë©´ CORBA í¸ëìì
ìë¹ì¤)ì ì ìí ìë ìë¤."
+
+#: index.docbook:1471
+msgid "Some features in Hibernate (i.e. the second level cache, Contextual Sessions with JTA, etc.) require access to the JTA <literal>TransactionManager</literal> in a managed environment. In an application server you have to specify how Hibernate should obtain a reference to the <literal>TransactionManager</literal>, since J2EE does not standardize a single mechanism:"
+msgstr "Hibernateì ìë ëªëª í¹ì§ë¤(ì를 ë¤ë©´. second level ìºì, JTA를 ê°ì§ 컨í
ì¤í¸ ìì ì¸ì
ë¤, 기í.)ì ê´ë¦¬ëë íê²½ìì JTA <literal>TransactionManager</literal>ì ëí ì ê·¼ì íìë¡ íë¤. ì´í리ì¼ì´ì
ìë²ìì ë¹ì ì Hibernateê° <literal>TransactionManager</literal>ì ëí 참조를 íëíë ë°©ë²ì ì§ì í´ì¼ íë¤. ìëíë©´ J2EEê° í ê°ì ë©ì»¤ëì¦ì íì¤í ìí¤ê³ ìì§ ì기 ë문ì´ë¤:"
+
+#: index.docbook:1479
+msgid "JTA TransactionManagers"
+msgstr "JTA TransactionManagers"
+
+#: index.docbook:1485
+msgid "Transaction Factory"
+msgstr "í¸ëìì
í©í 리"
+
+#: index.docbook:1486
+msgid "Application Server"
+msgstr "ì´í리ì¼ì´ì
ìë²"
+
+#: index.docbook:1491
+msgid "org.hibernate.transaction.JBossTransactionManagerLookup"
+msgstr "org.hibernate.transaction.JBossTransactionManagerLookup"
+
+#: index.docbook:1492
+msgid "JBoss"
+msgstr "JBoss"
+
+#: index.docbook:1495
+msgid "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+msgstr "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+
+#: index.docbook:1496
+msgid "Weblogic"
+msgstr "Weblogic"
+
+#: index.docbook:1499
+msgid "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+msgstr "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+
+#: index.docbook:1500
+msgid "WebSphere"
+msgstr "WebSphere"
+
+#: index.docbook:1503
+msgid "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+msgstr "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+
+#: index.docbook:1504
+msgid "WebSphere 6"
+msgstr "WebSphere 6"
+
+#: index.docbook:1507
+msgid "org.hibernate.transaction.OrionTransactionManagerLookup"
+msgstr "org.hibernate.transaction.OrionTransactionManagerLookup"
+
+#: index.docbook:1508
+msgid "Orion"
+msgstr "Orion"
+
+#: index.docbook:1511
+msgid "org.hibernate.transaction.ResinTransactionManagerLookup"
+msgstr "org.hibernate.transaction.ResinTransactionManagerLookup"
+
+#: index.docbook:1512
+msgid "Resin"
+msgstr "Resin"
+
+#: index.docbook:1515
+msgid "org.hibernate.transaction.JOTMTransactionManagerLookup"
+msgstr "org.hibernate.transaction.JOTMTransactionManagerLookup"
+
+#: index.docbook:1516
+msgid "JOTM"
+msgstr "JOTM"
+
+#: index.docbook:1519
+msgid "org.hibernate.transaction.JOnASTransactionManagerLookup"
+msgstr "org.hibernate.transaction.JOnASTransactionManagerLookup"
+
+#: index.docbook:1520
+msgid "JOnAS"
+msgstr "JOnAS"
+
+#: index.docbook:1523
+msgid "org.hibernate.transaction.JRun4TransactionManagerLookup"
+msgstr "org.hibernate.transaction.JRun4TransactionManagerLookup"
+
+#: index.docbook:1524
+msgid "JRun4"
+msgstr "JRun4"
+
+#: index.docbook:1527
+msgid "org.hibernate.transaction.BESTransactionManagerLookup"
+msgstr "org.hibernate.transaction.BESTransactionManagerLookup"
+
+#: index.docbook:1528
+msgid "Borland ES"
+msgstr "Borland ES"
+
+#: index.docbook:1537
+msgid "JNDI-bound <literal>SessionFactory</literal>"
+msgstr "JNDI-bound <literal>SessionFactory</literal>"
+
+#: index.docbook:1539
+msgid "A JNDI bound Hibernate <literal>SessionFactory</literal> can simplify the lookup of the factory and the creation of new <literal>Session</literal>s. Note that this is not related to a JNDI bound <literal>Datasource</literal>, both simply use the same registry!"
+msgstr "íëì JNDI ë°ì¸ëë Hibernate <literal>SessionFactory</literal>ë ê·¸ í©í 리ì ëí 룩ì
ê³¼ ìë¡ì´ <literal>Session</literal>ë¤ì ìì±ì ë¨ìí ìí¬ ì ìë¤. ì´ê²ì JNDI ë°ì¸ëë <literal>Datasource</literal>ì ê´ë ¨ëì´ ìì§ ìê³ , ë¨ìíê² ë ë¤ ëì¼í ë ì§ì¤í¸ë¦¬ë¥¼ ì¬ì©íë¤ë ì ì ë
¸í¸íë¼!"
+
+#: index.docbook:1546
+msgid "If you wish to have the <literal>SessionFactory</literal> bound to a JNDI namespace, specify a name (eg. <literal>java:hibernate/SessionFactory</literal>) using the property <literal>hibernate.session_factory_name</literal>. If this property is omitted, the <literal>SessionFactory</literal> will not be bound to JNDI. (This is especially useful in environments with a read-only JNDI default implementation, e.g. Tomcat.)"
+msgstr "ë§ì¼ ë¹ì ì´ <literal>SessionFactory</literal>를 íëì JNDI namespaceì ë°ì¸ë ìí¤ê³ ì ìí ê²½ì°, <literal>hibernate.session_factory_name</literal> íë¡í¼í°ë¥¼ ì¬ì©íì¬ í ê°ì ì´ë¦(ì를 ë¤ë©´. <literal>java:hibernate/SessionFactory</literal>)ì ì§ì íë¼. ë§ì¼ ì´ íë¡í¼í°ê° ìëµë ê²½ì°, <literal>SessionFactory</literal>ë JNDIì ë°ì¸ë ëì§ ìì ê²ì´ë¤. (ì´ê²ì ì½ê¸°-ì ì© JNDI ëí´í¸ 구íì ê°ì§ íê²½ë¤, ì를 ë¤ë©´ Tomcatìì í¹í ì ì©íë¤.)"
+
+#: index.docbook:1554
+msgid "When binding the <literal>SessionFactory</literal> to JNDI, Hibernate will use the values of <literal>hibernate.jndi.url</literal>, <literal>hibernate.jndi.class</literal> to instantiate an initial context. If they are not specified, the default <literal>InitialContext</literal> will be used."
+msgstr "<literal>SessionFactory</literal>를 JNDIì ë°ì¸ë ìí¬ ë, Hibernateë ì´ê¸° 컨í
ì¤í¸ë¥¼ ì´ê¸°í ìí¤ê¸° ìí´ <literal>hibernate.jndi.url</literal>, <literal>hibernate.jndi.class</literal>ì ê°ë¤ì ì¬ì©í ê²ì´ë¤. ë§ì¼ ê·¸ê²ë¤ì´ ì§ì ëì´ ìì§ ìì ê²½ì°, ëí´í¸ <literal>InitialContext</literal>ê° ì¬ì©ë ê²ì´ë¤."
+
+#: index.docbook:1561
+msgid "Hibernate will automatically place the <literal>SessionFactory</literal> in JNDI after you call <literal>cfg.buildSessionFactory()</literal>. This means you will at least have this call in some startup code (or utility class) in your application, unless you use JMX deployment with the <literal>HibernateService</literal> (discussed later)."
+msgstr "Hibernateë ë¹ì ì´ <literal>cfg.buildSessionFactory()</literal>를 í¸ì¶í íì <literal>SessionFactory</literal>를 JNDI ë´ì ìëì ì¼ë¡ ìì¹ì§ì¸ ê²ì´ë¤. ì´ê²ì ë¹ì ì´ (ëì¤ì ë
¼ìëë) <literal>HibernateService</literal>를 ê°ì§ JMX ë°°ì¹ë¥¼ ì¬ì©íì§ ìë í, ë¹ì ì´ ì ì´ë ë¹ì ì ì´í리ì¼ì´ì
ë´ì ìë ì´ë¤ ìì ì½ë (ëë ì í¸ë¦¬í° í´ëì¤) ë´ìì ì´ê²ì í¸ì¶í ê²ìì ì미íë¤."
+
+#: index.docbook:1568
+msgid "If you use a JNDI <literal>SessionFactory</literal>, an EJB or any other class may obtain the <literal>SessionFactory</literal> using a JNDI lookup."
+msgstr "ë§ì¼ ë¹ì ì´ íëì JNDI <literal>SessionFactory</literal>를 ì¬ì©í ê²½ì°, íëì EJB ëë ì´ë¤ ë¤ë¥¸ í´ëì¤ë JNDI 룩ì
ì ì¬ì©íì¬ <literal>SessionFactory</literal>를 ì»ì ì ìë¤."
+
+#: index.docbook:1573
+msgid "We recommend that you bind the <literal>SessionFactory</literal> to JNDI in a managed environment and use a <literal>static</literal> singleton otherwise. To shield your application code from these details, we also recommend to hide the actual lookup code for a <literal>SessionFactory</literal> in a helper class, such as <literal>HibernateUtil.getSessionFactory()</literal>. Note that such a class is also a convenient way to startup Hibernate—see chapter 1."
+msgstr "ì°ë¦¬ë ê´ë¦¬ëë íê²½ë¤ìì <literal>SessionFactory</literal>를 JNDIì ë°ì¸ë ìí¤ê³ ê·¸ ë°ì ê²½ì°ìë íëì <literal>static</literal> ì±ê¸í¤ì ì¬ì©íë ê²ì ê¶ì¥íë¤. ì´ë¤ ìì¸ë¡ë¶í° ë¹ì ì ì´í리ì¼ì´ì
ì½ë를 ìíìí¤ê¸° ìí´, ì°ë¦¬ë ëí <literal>HibernateUtil.getSessionFactory()</literal>ê³¼ ê°ì íëì helper í´ëì¤ ë´ìì <literal>SessionFactory</literal>ì ëí ì¤ì 룩ì
ì½ë를 ìíìí¤ê¸°ë¥¼ ê¶ì¥íë¤. ê·¸ë° í´ëì¤ë ëí Hibernate를 ììíë í¸ë¦¬í ë°©ë²ìì ë
¸í¸íë¼— 1ì¥ì ë³´ë¼."
+
+#: index.docbook:1585
+msgid "Current Session context management with JTA"
+msgstr "Current Session context management with JTA"
+
+#: index.docbook:1587
+msgid "The easiest way to handle <literal>Session</literal>s and transactions is Hibernates automatic \"current\" <literal>Session</literal> management. See the discussion of <xref linkend=\"architecture-current-session\"/>current sessions. Using the <literal>\"jta\"</literal> session context, if there is no Hibernate <literal>Session</literal> associated with the current JTA transaction, one will be started and associated with that JTA transaction the first time you call <literal>sessionFactory.getCurrentSession()</literal>. The <literal>Session</literal>s retrieved via <literal>getCurrentSession()</literal> in <literal>\"jta\"</literal> context will be set to automatically flush before the transaction completes, close after the transaction completes, and aggressively release JDBC connections after each statement. This allows the <literal>Session</literal>s to be managed by the life cycle of the JTA transaction to which it is associated, keeping user code clean of such man!
agement concerns. Your code can either use JTA programmatically through <literal>UserTransaction</literal>, or (recommended for portable code) use the Hibernate <literal>Transaction</literal> API to set transaction boundaries. If you run in an EJB container, declarative transaction demarcation with CMT is preferred."
+msgstr "ë¹ì ìì ì <literal>ThreadLocal</literal> ì í¸ë¦¬í°ë¥¼ ìëìí¤ë ëì ì, ì°ë¦¬ë ëí Hibernate <literal>Session</literal>를 ì»ê¸° ìí´ <literal>SessionFactory</literal> ìì <literal>getCurrentSession()</literal> ë©ìë ì¬ì©ì ê¶ì¥íë¤. <xref linkend=\"architecture-current-session\"/>íì¬ ì¸ì
ë¤ì ê´í ë
¼ì를 ë³´ë¼. <literal>\"jta\"</literal> ì¸ì
컨í
ì¤í¸ë¥¼ ì¬ì©íê³ ìë ê²½ì°ì, íì¬ì JTA í¸ëìì
ì¼ë¡ ììëê³ ì°ê´ë Hibernate <literal>Session</literal>ì´ ì¡´ì¬íì§ ìì ê²½ì°, ì°ë¦¬ë JTA í¸ëìì
ì¼ë¡ ììëê³ ì°ê´ë ê²ì´ë¤. <literal>\"jta\"</literal> 컨í
ì¤í¸ìì <literal>getCurrentSession()</literal>를 íµí´ ê²ìë <literal>Session</literal>ë¤ì ê·¸ í¸ëìì
ì´ ìë£ë기 ì ì ìëì ì¼ë¡ flushë ê²ì´ê³ í¸ëìì
ìë£ íì ë«íì§ ê²ì´ê³ , ê·¸ë¦¬ê³ ê°ê°ì ë¬¸ì¥ ë¤ì JDBC 커ë¥ì
ë¤ì ì ê·¹ì ì¼ë¡ í´ì í!
ê²ì´ë¤. ì´ê²ì ê·¸ë° ê´ë¦¬ ì¬íë¤ì ëí´ ì¬ì©ì ì½ë를 ëª
ë£íê² ì ì§ìì¼ì, ì°ê´ëì´ ìë JTA í¸ëìì
ì ìëª
주기ì ìí´ <literal>Session</literal>ë¤ì´ ê´ë¦¬ëëë¡ íì©í´ì¤ë¤. ì´ê²ì ê·¸ë° ê´ë¦¬ ì¬íë¤ì ëí´ ì¬ì©ì ì½ë를 ëª
ë£íê² ì ì§ìì¼ì, ì¸ì
ì´ ì°ê´ëì´ ìë JTA í¸ëìì
ì ìëª
주기ì ìí´ ê´ë¦¬ëë ê²ì <literal>Session</literal>ë¤ìê² íì©í´ì¤ë¤. ë¹ì ì ì½ëë <literal>Session</literal>ë¤ê³¼ í¸ëìì
ë¤ì ì²ë¦¬íë ê°ì¥ ìì¬ì´ ë°©ë²ì Hibernateì ìëì ì¸ \"íì¬\" <literal>Session</literal>ì´ë¤. <xref linkend=\"architecture-current-session\"/>current sessionsì ê´í ë
¼ì를 ë³´ë¼. <literal>\"jta\"</literal> ì¸ì
컨í
ì¤í¸ë¥¼ ì¬ì©íë ê²½ì°, íì¬ì JTA í¸ëìì
ì¼ë¡ ììëê³ ì°ê´ë Hibernate <literal>Session</literal>ë¤ì´ ì¡´ì¬íì§ ìì ê²½ì°, ë¹ì ì´ <literal>sessionFactory.get!
CurrentSession()</literal>ì ì²ì í¸ì¶í ë íëì ì¸ì
ì´
íì¬ì JTA í¸ëìì
ì ëí´ ììëê³ ì°ê´ë ê²ì´ë¤. <literal>\"jta\"</literal> 컨í
ì¤í¸ìì <literal>getCurrentSession()</literal>ì íµí´ ê²ìë <literal>Session</literal>ë¤ì ê·¸ í¸ëìì
ì´ ìë£ë기 ì ì ìëì ì¼ë¡ flushë ê²ì´ê³ ê·¸ í¸ëìì
ìë£ë¤ íì ë«íì§ ê²ì´ê³ ê°ê°ì ë¬¸ì¥ íì JDBC 커ë¥ì
ë¤ì ì ê·¹ì ì¼ë¡ í´ì í ê²ì´ë¤. ì´ê²ì ê·¸ë° ê´ë¦¬ ì¬íë¤ì ëí´ ì¬ì©ì ì½ë를 ëª
ë£íê² ì ì§ìì¼ì, ì°ê´ëì´ ìë JTA í¸ëìì
ì ìëª
주기ì ìí´ <literal>Session</literal>ë¤ì´ ê´ë¦¬ëëë¡ íì©í´ì¤ë¤. ì´ê²ì ê·¸ë° ê´ë¦¬ ì¬íë¤ì ëí´ ì¬ì©ì ì½ë를 ëª
ë£íê² ì ì§ìì¼ì, ì¸ì
ì´ ì°ê´ëì´ ìë JTA í¸ëìì
ì ìëª
주기ì ìí´ ê´ë¦¬ëë ê²ì <literal>Session</literal>ë¤ìê² íì©í´ì¤ë¤. ë¹ì ì ì½ëë í¸ëìì
ê²½ê³ë¤ì ì¤ì íëë° <literal>UserTransaction</literal>ì íµí!
´ íë¡ê·¸ë¨ ìì¼ë¡ JTA를 ì¬ì©íê±°ë, Hibernate <literal>Transaction</literal> API를 (ì´ìì±ì ìí ì½ëë¡ ê¶ì¥ë¨) ì¬ì©í ì ìë¤. ë§ì¼ ë¹ì ì´ íëì EJB 컨í
ì´ëìì ì¤ííê³ ìì ê²½ì°, CMTì ê²½ì°ì ì ì¸ì ì¸ í¸ëìì
ê²½ê³ì¤ì ì´ ì í¸ëë¤."
+
+#: index.docbook:1610
+msgid "JMX deployment"
+msgstr "JMX ë°°ì¹"
+
+#: index.docbook:1612
+msgid "The line <literal>cfg.buildSessionFactory()</literal> still has to be executed somewhere to get a <literal>SessionFactory</literal> into JNDI. You can do this either in a <literal>static</literal> initializer block (like the one in <literal>HibernateUtil</literal>) or you deploy Hibernate as a <emphasis>managed service</emphasis>."
+msgstr "<literal>cfg.buildSessionFactory()</literal> ì¤ì ì¬ì í JNDIì ë¶ì íëì <literal>SessionFactory</literal>를 ì»ê¸° ìí´ ì´ëê°ìì ì¤íëì´ì¼ íë¤. ë¹ì ì (<literal>HibernateUtil</literal> ë´ì ìë ê²ì²ë¼) <literal>static</literal> initializer ë¸ë¡ ììì ì´ê²ì íí ì ìê±°ë ë¹ì ì Hibernate를 <emphasis>managed service</emphasis>ë¡ì ë°°ì¹í ì ìë¤."
+
+#: index.docbook:1620
+msgid "Hibernate is distributed with <literal>org.hibernate.jmx.HibernateService</literal> for deployment on an application server with JMX capabilities, such as JBoss AS. The actual deployment and configuration is vendor specific. Here is an example <literal>jboss-service.xml</literal> for JBoss 4.0.x:"
+msgstr "Hibernateë JBoss ASì ê°ì JMX ê°ì©ì±ë¤ì ê°ì§ ì´í리ì¼ì´ì
ìë² ìì ë°°ì¹ë¥¼ ìí´ <literal>org.hibernate.jmx.HibernateService</literal>를 ë°°í¬íê³ ìë¤. ì¤ì ë°°ì¹ì 구ì±ì 벤ë ì§ì ì ì´ë¤. ë¤ìì JBoss 4.0.x를 ìí <literal>jboss-service.xml</literal> ìì ì´ë¤:"
+
+#: index.docbook:1627
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<server>\n"
+ "\n"
+ "<mbean code=\"org.hibernate.jmx.HibernateService\"\n"
+ " name=\"jboss.jca:service=HibernateFactory,name=HibernateFactory\">\n"
+ "\n"
+ " <!-- Required services -->\n"
+ " <depends>jboss.jca:service=RARDeployer</depends>\n"
+ " <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>\n"
+ "\n"
+ " <!-- Bind the Hibernate service to JNDI -->\n"
+ " <attribute name=\"JndiName\">java:/hibernate/SessionFactory</attribute>\n"
+ "\n"
+ " <!-- Datasource settings -->\n"
+ " <attribute name=\"Datasource\">java:HsqlDS</attribute>\n"
+ " <attribute name=\"Dialect\">org.hibernate.dialect.HSQLDialect</attribute>\n"
+ "\n"
+ " <!-- Transaction integration -->\n"
+ " <attribute name=\"TransactionStrategy\">\n"
+ " org.hibernate.transaction.JTATransactionFactory</attribute>\n"
+ " <attribute name=\"TransactionManagerLookupStrategy\">\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup</attribute>\n"
+ " <attribute name=\"FlushBeforeCompletionEnabled\">true</attribute>\n"
+ " <attribute name=\"AutoCloseSessionEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Fetching options -->\n"
+ " <attribute name=\"MaximumFetchDepth\">5</attribute>\n"
+ "\n"
+ " <!-- Second-level caching -->\n"
+ " <attribute name=\"SecondLevelCacheEnabled\">true</attribute>\n"
+ " <attribute name=\"CacheProviderClass\">org.hibernate.cache.EhCacheProvider</attribute>\n"
+ " <attribute name=\"QueryCacheEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Logging -->\n"
+ " <attribute name=\"ShowSqlEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <attribute name=\"MapResources\">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>\n"
+ "\n"
+ "</mbean>\n"
+ "\n"
+ "</server>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<server>\n"
+ "\n"
+ "<mbean code=\"org.hibernate.jmx.HibernateService\"\n"
+ " name=\"jboss.jca:service=HibernateFactory,name=HibernateFactory\">\n"
+ "\n"
+ " <!-- Required services -->\n"
+ " <depends>jboss.jca:service=RARDeployer</depends>\n"
+ " <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>\n"
+ "\n"
+ " <!-- Bind the Hibernate service to JNDI -->\n"
+ " <attribute name=\"JndiName\">java:/hibernate/SessionFactory</attribute>\n"
+ "\n"
+ " <!-- Datasource settings -->\n"
+ " <attribute name=\"Datasource\">java:HsqlDS</attribute>\n"
+ " <attribute name=\"Dialect\">org.hibernate.dialect.HSQLDialect</attribute>\n"
+ "\n"
+ " <!-- Transaction integration -->\n"
+ " <attribute name=\"TransactionStrategy\">\n"
+ " org.hibernate.transaction.JTATransactionFactory</attribute>\n"
+ " <attribute name=\"TransactionManagerLookupStrategy\">\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup</attribute>\n"
+ " <attribute name=\"FlushBeforeCompletionEnabled\">true</attribute>\n"
+ " <attribute name=\"AutoCloseSessionEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Fetching options -->\n"
+ " <attribute name=\"MaximumFetchDepth\">5</attribute>\n"
+ "\n"
+ " <!-- Second-level caching -->\n"
+ " <attribute name=\"SecondLevelCacheEnabled\">true</attribute>\n"
+ " <attribute name=\"CacheProviderClass\">org.hibernate.cache.EhCacheProvider</attribute>\n"
+ " <attribute name=\"QueryCacheEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Logging -->\n"
+ " <attribute name=\"ShowSqlEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <attribute name=\"MapResources\">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>\n"
+ "\n"
+ "</mbean>\n"
+ "\n"
+ "</server>]]>"
+
+#: index.docbook:1629
+msgid "This file is deployed in a directory called <literal>META-INF</literal> and packaged in a JAR file with the extension <literal>.sar</literal> (service archive). You also need to package Hibernate, its required third-party libraries, your compiled persistent classes, as well as your mapping files in the same archive. Your enterprise beans (usually session beans) may be kept in their own JAR file, but you may include this EJB JAR file in the main service archive to get a single (hot-)deployable unit. Consult the JBoss AS documentation for more information about JMX service and EJB deployment."
+msgstr "ì´ íì¼ì <literal>META-INF</literal>ë¡ ëª
ëª
ë ëë í 리 ìì ë°°ì¹ëê³ íì¥ì <literal>.sar</literal> (service archive)를 ê°ì§ í ê°ì JAR íì¼ ìì í¨í¤ì§ëë¤. ë¹ì ì ëí Hibernate, ê·¸ê²ì íìí ì 3ì ë¼ì´ë¸ë¬ë¦¬ë¤, ë¹ì ì ì»´íì¼ë ìì í´ëì¤ë¤ ë¿ë§ ìëë¼ ë¹ì ì 매í íì¼ë¤ì ëì¼í ìì¹´ì´ë¸ ìì í¨í¤ì§í íìê° ìë¤. ë¹ì ì ìí°íë¼ì´ì¦ ë¹ì¦(ëê° session beans)ë ê·¸ê²ë¤ ìì ì JAR íì¼ ìì ì ì§ë ì ìì§ë§, ë¹ì ì í ê°ì (hot-)ë°°ì¹ ê°ë¥í ë¨ì를 ì»ê¸° ìí´ ë©ì¸ ìë¹ì¤ ìì¹´ì´ë¸ ìì ì´ EJB JAR íì¼ì í¬í¨ìí¬ ìë ìë¤. JMX ìë¹ì¤ì EJB ë°°ì¹ì ê´í ì¶ê° ì ë³´ë JBoss AS 문ì를 참조íë¼."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/events.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/events.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/events.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,362 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Interceptors and events"
+msgstr "ì¸í°ì
í°ë¤ê³¼ ì´ë²¤í¸ë¤"
+
+#: index.docbook:7
+msgid "It is often useful for the application to react to certain events that occur inside Hibernate. This allows implementation of certain kinds of generic functionality, and extension of Hibernate functionality."
+msgstr "ì´í리ì¼ì´ì
ì´ Hibernate ë´ë¶ìì ë°ìíë ì´ë¤ ì´ë²¤í¸ë¤ì ëí´ ë°ìíë ê²ì íí ì ì©íë¤. ì´ê²ì ì´ë¤ ì¢
ë¥ì ì¼ë°ì ì¸ ê¸°ë¥, ê·¸ë¦¬ê³ Hibernateì íì¥ ê¸°ë¥ì 구íì íì©í´ì¤ë¤."
+
+#: index.docbook:14
+msgid "Interceptors"
+msgstr "ì¸í°ì
í°ë¤"
+
+#: index.docbook:16
+msgid "The <literal>Interceptor</literal> interface provides callbacks from the session to the application allowing the application to inspect and/or manipulate properties of a persistent object before it is saved, updated, deleted or loaded. One possible use for this is to track auditing information. For example, the following <literal>Interceptor</literal> automatically sets the <literal>createTimestamp</literal> when an <literal>Auditable</literal> is created and updates the <literal>lastUpdateTimestamp</literal> property when an <literal>Auditable</literal> is updated."
+msgstr "<literal>Interceptor</literal> ì¸í°íì´ì¤ë ìì ê°ì²´ê° ì ì¥ëê³ , ì
ë°ì´í¸ëê³ , ìì ëê±°ë ë¡ëë기 ì ì ìì ê°ì²´ì íë¡í¼í°ë¤ì ì¡°ì¬íê³ /íê±°ë ì²ë¦¬íë ê²ì ì´í리ì¼ì´ì
ì íì©í´ì¤ì¼ë¡ì¨ ì¸ì
ì¼ë¡ë¶í° ì´í리ì¼ì´ì
ì¼ë¡ì ì½ë°±ë¤ì ì ê³µíë¤. ì´ê²ì ëí í ê°ì§ ê°ë¥í ì¬ì©ì ê°ì¬ ì 보를 ì¶ì íë ê²ì´ë¤. ì를 ë¤ì´, ë¤ì <literal>Interceptor</literal>ë <literal>Auditable</literal>ì´ ìì±ë ë <literal>createTimestamp</literal>를 ìëì ì¼ë¡ ì¤ì íê³ <literal>Auditable</literal>ì´ ì
ë°ì´í¸ë ë <literal>lastUpdateTimestamp</literal> íë¡í¼í°ë¥¼ ì
ë°ì´í¸ íë¤."
+
+#: index.docbook:27
+msgid "You may either implement <literal>Interceptor</literal> directly or (better) extend <literal>EmptyInterceptor</literal>."
+msgstr "ë¹ì ì <literal>Interceptor</literal>를 ì§ì 구íí´ì¼ íê±°ë (ë ì¢ê²ë) <literal>EmptyInterceptor</literal>를 íì¥(extend)í´ì¼ íë¤."
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[package org.hibernate.test;\n"
+ "\n"
+ "import java.io.Serializable;\n"
+ "import java.util.Date;\n"
+ "import java.util.Iterator;\n"
+ "\n"
+ "import org.hibernate.EmptyInterceptor;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.type.Type;\n"
+ "\n"
+ "public class AuditInterceptor extends EmptyInterceptor {\n"
+ "\n"
+ " private int updates;\n"
+ " private int creates;\n"
+ " private int loads;\n"
+ "\n"
+ " public void onDelete(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " // do nothing\n"
+ " }\n"
+ "\n"
+ " public boolean onFlushDirty(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] currentState,\n"
+ " Object[] previousState,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " updates++;\n"
+ " for ( int i=0; i < propertyNames.length; i++ ) {\n"
+ " if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " currentState[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onLoad(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " loads++;\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onSave(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " creates++;\n"
+ " for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " state[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public void afterTransactionCompletion(Transaction tx) {\n"
+ " if ( tx.wasCommitted() ) {\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);\n"
+ " }\n"
+ " updates=0;\n"
+ " creates=0;\n"
+ " loads=0;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package org.hibernate.test;\n"
+ "\n"
+ "import java.io.Serializable;\n"
+ "import java.util.Date;\n"
+ "import java.util.Iterator;\n"
+ "\n"
+ "import org.hibernate.EmptyInterceptor;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.type.Type;\n"
+ "\n"
+ "public class AuditInterceptor extends EmptyInterceptor {\n"
+ "\n"
+ " private int updates;\n"
+ " private int creates;\n"
+ " private int loads;\n"
+ "\n"
+ " public void onDelete(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " // do nothing\n"
+ " }\n"
+ "\n"
+ " public boolean onFlushDirty(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] currentState,\n"
+ " Object[] previousState,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " updates++;\n"
+ " for ( int i=0; i < propertyNames.length; i++ ) {\n"
+ " if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " currentState[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onLoad(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " loads++;\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onSave(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " creates++;\n"
+ " for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " state[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public void afterTransactionCompletion(Transaction tx) {\n"
+ " if ( tx.wasCommitted() ) {\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);\n"
+ " }\n"
+ " updates=0;\n"
+ " creates=0;\n"
+ " loads=0;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:34
+msgid "Interceptors come in two flavors: <literal>Session</literal>-scoped and <literal>SessionFactory</literal>-scoped."
+msgstr "ì¸í°ì
í°ë¤ì ë¤ì ë ê°ì í¹ì§ë¤ë¡ ëíëë¤: <literal>Session</literal>-ììí ê·¸ë¦¬ê³ <literal>SessionFactory</literal>-ììí."
+
+#: index.docbook:39
+msgid "A <literal>Session</literal>-scoped interceptor is specified when a session is opened using one of the overloaded SessionFactory.openSession() methods accepting an <literal>Interceptor</literal>."
+msgstr "<literal>Session</literal>-ììì ì¸í°ì
í°ë ì¸ì
ì´ íëì <literal>Interceptor</literal>를 ìì©íë ì¤ë²ë¡ëë SessionFactory.openSession() ë©ìëë¤ ì¤ íë를 ì¬ì©íì¬ ì´ë¦´ ë ì§ì ëë¤."
+
+#: index.docbook:45
+msgid "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+msgstr "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+
+#: index.docbook:47
+msgid "A <literal>SessionFactory</literal>-scoped interceptor is registered with the <literal>Configuration</literal> object prior to building the <literal>SessionFactory</literal>. In this case, the supplied interceptor will be applied to all sessions opened from that <literal>SessionFactory</literal>; this is true unless a session is opened explicitly specifying the interceptor to use. <literal>SessionFactory</literal>-scoped interceptors must be thread safe, taking care to not store session-specific state since multiple sessions will use this interceptor (potentially) concurrently."
+msgstr "ë¹ì ì ëí <literal>Configuration</literal>ì ì¬ì©íì¬ ì¸í°ì
í°ë¥¼ ì ì ë 벨 ìì ì¤ì í ìë ìë¤. ì´ ê²½ì°ì, ì¸í°ì
í°ë threadsafeì´ì´ì¼ íë¤."
+
+#: index.docbook:56
+msgid "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
+msgstr "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+
+#: index.docbook:61
+msgid "Event system"
+msgstr "<literal>SessionFactory</literal>-ììì ì¸í°ì
í°ë <literal>SessionFactory</literal>ì ë¹ëí기ì ìì <literal>Configuration</literal> ê°ì²´ì ë±ë¡ëë¤. ì´ ê²½ì°ì, ê³µê¸ëë ì¸í°ì
í°ë ê·¸ <literal>SessionFactory</literal>ë¡ë¶í° ì´ë ¤ì§ 모ë ì¸ì
ë¤ì ì ì©ë ê²ì´ë¤; íëì ì¸ì
ì´ ì¬ì©í ì¸í°ì
í°ë¥¼ ëª
ìì ì¼ë¡ ì§ì íì¬ ì´ë¦¬ì§ ìë í ì´ê²ì ì°¸ì´ë¤. <literal>SessionFactory</literal>-ììì ì¸í°ì
í°ë¤ì ì¸ì
-ì§ì ì ì¸ ìí를 ì ì¥íì§ ìëë¡ ì£¼ìíì¬ ì°ë ë-ìì í´ì¼ íë¤. ìëíë©´ ë¤ì¤ ì¸ì
ë¤ì (ì ì ì ì¼ë¡) ì´ ì¸í°ì
í°ë¥¼ ëìì ì¼ë¡ ì¬ì©í ê²ì´ê¸° ë문ì´ë¤."
+
+#: index.docbook:63
+msgid "If you have to react to particular events in your persistence layer, you may also use the Hibernate3 <emphasis>event</emphasis> architecture. The event system can be used in addition or as a replacement for interceptors."
+msgstr "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
+
+#: index.docbook:69
+msgid "Essentially all of the methods of the <literal>Session</literal> interface correlate to an event. You have a <literal>LoadEvent</literal>, a <literal>FlushEvent</literal>, etc (consult the XML configuration-file DTD or the <literal>org.hibernate.event</literal> package for the full list of defined event types). When a request is made of one of these methods, the Hibernate <literal>Session</literal> generates an appropriate event and passes it to the configured event listeners for that type. Out-of-the-box, these listeners implement the same processing in which those methods always resulted. However, you are free to implement a customization of one of the listener interfaces (i.e., the <literal>LoadEvent</literal> is processed by the registered implemenation of the <literal>LoadEventListener</literal> interface), in which case their implementation would be responsible for processing any <literal>load()</literal> requests made of the <literal>Session</literal>."
+msgstr "ì´ë²¤í¸ ìì¤í
"
+
+#: index.docbook:84
+msgid "The listeners should be considered effectively singletons; meaning, they are shared between requests, and thus should not save any state as instance variables."
+msgstr "ë§ì¼ ë¹ì ì´ ë¹ì ì ìì ê³ì¸µìì í¹ì ì´ë²¤í¸ë¤ì ëí´ ë°ìí´ì¼ íë¤ë©´, ë¹ì ì ëí Hibernate3 <emphasis>event</emphasis> ìí¤í
ì²ë¥¼ ì¬ì©í ìë ìë¤. ì´ë²¤í¸ ìì¤í
ì ë¶ê°ë¬¼ë¡ ì¬ì©ë ì ìê±°ë ì¸í°ì
í°ë¤ì ëí ëì²´ë¬¼ë¡ ì¬ì©ë ì ìë¤."
+
+#: index.docbook:89
+msgid "A custom listener should implement the appropriate interface for the event it wants to process and/or extend one of the convenience base classes (or even the default event listeners used by Hibernate out-of-the-box as these are declared non-final for this purpose). Custom listeners can either be registered programmatically through the <literal>Configuration</literal> object, or specified in the Hibernate configuration XML (declarative configuration through the properties file is not supported). Here's an example of a custom load event listener:"
+msgstr "본ì§ì ì¼ë¡ <literal>Session</literal> ì¸í°íì´ì¤ì 모ë ë©ìëë¤ì ì´ë²¤í¸ì ìë¡ ê´ë ¨ëì´ ìë¤. ë¹ì ì <literal>LoadEvent</literal>, <literal>FlushEvent</literal>, ë±ì ê°ëë¤ (ì ìë ì´ë²¤í¸ íì
ë¤ì ì ì²´ 리ì¤í¸ì ëí´ìë XML êµ¬ì± íì¼ DTD ëë <literal>org.hibernate.event</literal> í¨í¤ì§ë¥¼ 참조íë¼). íëì ìì²ì´ ì´ë¤ ë©ìëë¤ ì¤ íëì ìí´ ë§ë¤ì´ì§ ë, Hibernate <literal>Session</literal>ì ì ì í ì´ë²¤í¸ë¥¼ ìì±ìí¤ê³ ê·¸ê²ì ê·¸ íì
ì 구ì±ë ì´ë²¤í¸ 리ì¤ëìê² ì ë¬íë¤. ë°ì±ìì´, ì´ë¤ 리ì¤ëë¤ì ê·¸ë¤ ë©ìëë¤ì´ íì ê·ê²°ëìë ëì¼í íë¡ì¸ì±ì 구ííë¤. íì§ë§ ë¹ì ì´ ë¦¬ì¤ë ì¸í°íì´ì¤ë¤ ì¤ íëì ë§ì¶¤ì 구ííë ê²ì´ ìì ë¡ê³ (ì를 ë¤ì´ <literal>LoadEvent</literal>ë <literal>LoadEventListener</literal> ì¸í°íì´ì¤ì ë±ë¡ë 구íì ìí´ ì²ë¦¬ëë¤)!
, ê·¸ ê²½ì°ì ê·¸ë¤ êµ¬íì <literal>Session</literal>ì ëí´ íí´ì§ ììì <literal>load()</literal> ìì²ë¤ì ì²ë¦¬í ì±
ìì´ ìì ê²ì´ë¤."
+
+#: index.docbook:99
+msgid ""
+ "<![CDATA[public class MyLoadListener implements LoadEventListener {\n"
+ " // this is the single method defined by the LoadEventListener interface\n"
+ " public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)\n"
+ " throws HibernateException {\n"
+ " if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {\n"
+ " throw MySecurityException(\"Unauthorized access\");\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr "리ì¤ëë¤ì í¨ì¨ì ì´ê²ë ì±ê¸í¤(singleton)ë¤ë¡ ê°ì£¼ëì´ì¼ í ê²ì´ë¤; ì´ê²ì ê·¸ê²ë¤ì´ ìì²ë¤ ì¬ì´ìì ê³µì ëê³ , ë°ë¼ì ììì ìí를 ì¸ì¤í´ì¤ ë³ìë¤ë¡ì ì ì¥íì§ ë§ìì¼ í¨ì ì미íë¤."
+
+#: index.docbook:101
+msgid "You also need a configuration entry telling Hibernate to use the listener in addition to the default listener:"
+msgstr "ë§ì¶¤í 리ì¤ëë ê·¸ê²ì´ í¸ìì ì¸ ê¸°ì í´ëì¤ë¤(ëë 리ì¤ëë¤ì´ ì´ ì©ëë¡ finalì´ ìë ê²ì¼ë¡ ì ì¸ëë¯ë¡ Hibernate out-of-the-boxì ìí´ ì¬ì©ë ëí´í¸ ì´ë²¤í¸ 리ì¤ëë¤) ì¤ íë를 ì²ë¦¬íê³ /íê±°ë íì¥íê³ ì ìíë ì´ë²¤í¸ë¤ì ëí´ ì ì í ì¸í°íì´ì¤ë¥¼ 구íí´ì¼ íë¤. ë§ì¶¤í 리ì¤ëë¤ì <literal>Configuration</literal> ê°ì²´ë¥¼ íµí´ íë¡ê·¸ë¨ ìì¼ë¡ ë±ë¡ë ì ìê±°ë, Hibernate êµ¬ì± XML ìì ì§ì ë ì ìë¤ (properties íì¼ì íµí ì ì¸ì ì¸ êµ¬ì±ì ì§ìëì§ ìëë¤). ë¤ìì ë§ì¶¤í load ì´ë²¤í¸ 리ì¤ëì ëí ìì ì´ë¤:"
+
+#: index.docbook:106
+msgid ""
+ "<![CDATA[<hibernate-configuration>\n"
+ " <session-factory>\n"
+ " ...\n"
+ " <event type=\"load\">\n"
+ " <listener class=\"com.eg.MyLoadListener\"/>\n"
+ " <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>\n"
+ " </event>\n"
+ " </session-factory>\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+ "<![CDATA[public class MyLoadListener implements LoadEventListener {\n"
+ " // this is the single method defined by the LoadEventListener interface\n"
+ " public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)\n"
+ " throws HibernateException {\n"
+ " if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {\n"
+ " throw MySecurityException(\"Unauthorized access\");\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:108
+msgid "Instead, you may register it programmatically:"
+msgstr "ë¹ì ì ëí ëí´í¸ 리ì¤ëì ë§ë¶ì¬ ê·¸ 리ì¤ë를 ì¬ì©íëë¡ Hibernateìê² ìë ¤ì£¼ë êµ¬ì± ìí¸ë¦¬ë¥¼ íìë¡ íë¤:"
+
+#: index.docbook:112
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration();\n"
+ "LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };\n"
+ "cfg.EventListeners().setLoadEventListeners(stack);]]>"
+msgstr ""
+ "<![CDATA[<hibernate-configuration>\n"
+ " <session-factory>\n"
+ " ...\n"
+ " <event type=\"load\">\n"
+ " <listener class=\"com.eg.MyLoadListener\"/>\n"
+ " <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>\n"
+ " </event>\n"
+ " </session-factory>\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:114
+msgid "Listeners registered declaratively cannot share instances. If the same class name is used in multiple <literal><listener/></literal> elements, each reference will result in a separate instance of that class. If you need the capability to share listener instances between listener types you must use the programmatic registration approach."
+msgstr "ëì ì ë¹ì ì ê·¸ê²ì íë¡ê·¸ëë° ë°©ìì¼ë¡ ë±ë¡í ìë ìë¤:"
+
+#: index.docbook:122
+msgid "Why implement an interface and define the specific type during configuration? Well, a listener implementation could implement multiple event listener interfaces. Having the type additionally defined during registration makes it easier to turn custom listeners on or off during configuration."
+msgstr ""
+ "<![CDATA[Configuration cfg = new Configuration();\n"
+ "LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };\n"
+ "cfg.EventListeners().setLoadEventListeners(stack);]]>"
+
+#: index.docbook:132
+msgid "Hibernate declarative security"
+msgstr "ì ì¸ì ì¼ë¡ ë±ë¡ë 리ì¤ëë¤ì ì¸ì¤í´ì¤ë¤ì ê³µì í ì ìë¤. ë§ì¼ ëì¼í í´ëì¤ ì´ë¦ì´ ì¬ë¬ ê°ì <literal><listener/></literal> ììë¤ìì ì¬ì©ë ê²½ì°, ê°ê°ì 참조ë ê·¸ í´ëì¤ì ëí ë³ëì ì¸ì¤í´ì¤ë¡ ê·ê²°ë ê²ì´ë¤. ë§ì¼ ë¹ì ì´ ë¦¬ì¤ë íì
ë¤ ì¬ì´ìì 리ì¤ë ì¸ì¤í´ì¤ë¤ì ê³µì í ê°ì©ì±ì íìë¡ í ê²½ì° ë¹ì ì íë¡ê·¸ëë° ë°©ìì ë±ë¡ ì ê·¼ë²ì ì¬ì©í´ì¼ íë¤."
+
+#: index.docbook:133
+msgid "Usually, declarative security in Hibernate applications is managed in a session facade layer. Now, Hibernate3 allows certain actions to be permissioned via JACC, and authorized via JAAS. This is optional functionality built on top of the event architecture."
+msgstr "êµ¬ì± ëìì ì ì¸í°íì´ì¤ë¥¼ 구ííê³ í¹ì íì
ì ì§ì íëê°? ë¬¼ë¡ ë¦¬ì¤ë 구íì ì¬ë¬ ê°ì ì´ë²¤í¸ 리ì¤ë ì¸í°íì´ì¤ë¤ì 구íí ì ìë¤. ë±ë¡ ëìì ì¶ê°ì ì¼ë¡ íì
ì ì ìíë ê²ì 컨í¼ê·¸ë ì´ì
ëìì ë§ì¶¤í 리ì¤ëë¤ì ì¬ì© ì¬ë¶ë¥¼ ì íìí¤ë ê²ì ë ì½ê² í´ì¤ë¤."
+
+#: index.docbook:139
+msgid "First, you must configure the appropriate event listeners, to enable the use of JAAS authorization."
+msgstr "Hibernate ì ì¸ì ì¸ ë³´ì"
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>\n"
+ "<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>\n"
+ "<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>\n"
+ "<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
+msgstr "ëê° Hibernate ì´í리ì¼ì´ì
ë¤ìì ì ì¸ì ì¸ ë³´ìì session facade ê³ì¸µ ë´ìì ê´ë¦¬ëë¤. ì´ì , Hibernate3ë ì´ë¤ ì¡ì
ë¤ì´ JACC를 íµí´ í¼ë¯¸ì
ì 주ì´ì§ê³ , JAAS를 íµí´ ì¸ê°ëë ê²ì íì©í´ì¤ë¤. ì´ê²ì 모ë ìí¤í
ì²ì ìë¨ì ë¹ëë ìµì
기ë¥ì´ë¤."
+
+#: index.docbook:146
+msgid "Note that <literal><listener type=\"...\" class=\"...\"/></literal> is just a shorthand for <literal><event type=\"...\"><listener class=\"...\"/></event></literal> when there is exactly one listener for a particular event type."
+msgstr "먼ì , ë¹ì ì JAAS authorization ì¬ì©ì ì´ì© ê°ë¥íëë¡ í기 ìí´ ì ì í ì´ë²¤í¸ 리ì¤í°ë¤ì 구ì±í´ì¼ íë¤."
+
+#: index.docbook:152
+msgid "Next, still in <literal>hibernate.cfg.xml</literal>, bind the permissions to roles:"
+msgstr ""
+ "<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>\n"
+ "<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>\n"
+ "<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>\n"
+ "<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>\n"
+ "<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
+msgstr "<literal><listener type=\"...\" class=\"...\"/></literal>ë í¹ì ì´ë²¤í¸ íì
ì ëí´ ì íí í ê°ì 리ì¤ëê° ì¡´ì¬í ë ë¨ì§ <literal><event type=\"...\"><listener class=\"...\"/></event></literal>ì ë¨ì¶íìì ë
¸í¸íë¼."
+
+#: index.docbook:158
+msgid "The role names are the roles understood by your JACC provider."
+msgstr "ë¤ìì¼ë¡, ì¬ì í <literal>hibernate.cfg.xml</literal> ë´ìì í¼ë¯¸ì
ë¤ì roleë¤ì ë°ì¸ë ìí¨ë¤ :"
+
+#: index.docbook:146
+msgid "appended paragraph 1"
+msgstr ""
+ "<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>\n"
+ "<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
+
+#: index.docbook:148
+msgid "appended paragraph 2"
+msgstr "ìí (role) ì´ë¦ë¤ì ë¹ì ì JACC íë¡ë°ì´ëì ìí´ ì¸ì§ë ìí (role)ë¤ì´ë¤."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/example_mappings.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/example_mappings.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/example_mappings.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1162 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Example: Various Mappings"
+msgstr "ìì : ì¬ë¬ ê°ì§ 매íë¤"
+
+#: index.docbook:22
+msgid "This chapters shows off some more complex association mappings."
+msgstr "ì´ ì¥ì ëªëª ë³´ë¤ ë³µì¡í ì°ê´ 매íë¤ì ë³´ì¬ì¤ë¤."
+
+#: index.docbook:27
+msgid "Employer/Employee"
+msgstr "Employer/Employee"
+
+#: index.docbook:29
+msgid "The following model of the relationship between <literal>Employer</literal> and <literal>Employee</literal> uses an actual entity class (<literal>Employment</literal>) to represent the association. This is done because there might be more than one period of employment for the same two parties. Components are used to model monetary values and employee names."
+msgstr "<literal>Employer</literal>ì <literal>Employee</literal> ì¬ì´ì ê´ê³ì ëí ë¤ì 모íì ê·¸ ì°ê´ë¥¼ íííë ë° ì¤ì ìí°í° í´ëì¤(<literal>Employment</literal>)를 ì¬ì©íë¤. ëì¼í ë ë¶ë¶ë¤ì ëí´ íë ì´ìì ì±ì© ì£¼ê¸°ê° ì¡´ì¬í ì ì기 ë문ì ì´ê²ì´ íí´ì§ë¤. ì»´í¬ëí¸ë¤ì´ íí ê°ë¤ê³¼ ì¢
ì
ì ì´ë¦ë¤ì 모íí ìí¤ëë° ì¬ì©ëë¤."
+
+#: index.docbook:46
+msgid "Heres a possible mapping document:"
+msgstr "ë¤ìì ê°ë¥í 매í 문ìì´ë¤:"
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " \n"
+ " <class name=\"Employer\" table=\"employers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employer_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employment\" table=\"employment_periods\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employment_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"startDate\" column=\"start_date\"/>\n"
+ " <property name=\"endDate\" column=\"end_date\"/>\n"
+ "\n"
+ " <component name=\"hourlyRate\" class=\"MonetaryAmount\">\n"
+ " <property name=\"amount\">\n"
+ " <column name=\"hourly_rate\" sql-type=\"NUMERIC(12, 2)\"/>\n"
+ " </property>\n"
+ " <property name=\"currency\" length=\"12\"/>\n"
+ " </component>\n"
+ "\n"
+ " <many-to-one name=\"employer\" column=\"employer_id\" not-null=\"true\"/>\n"
+ " <many-to-one name=\"employee\" column=\"employee_id\" not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employee\" table=\"employees\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employee_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"taxfileNumber\"/>\n"
+ " <component name=\"name\" class=\"Name\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </component>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " \n"
+ " <class name=\"Employer\" table=\"employers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employer_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employment\" table=\"employment_periods\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employment_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"startDate\" column=\"start_date\"/>\n"
+ " <property name=\"endDate\" column=\"end_date\"/>\n"
+ "\n"
+ " <component name=\"hourlyRate\" class=\"MonetaryAmount\">\n"
+ " <property name=\"amount\">\n"
+ " <column name=\"hourly_rate\" sql-type=\"NUMERIC(12, 2)\"/>\n"
+ " </property>\n"
+ " <property name=\"currency\" length=\"12\"/>\n"
+ " </component>\n"
+ "\n"
+ " <many-to-one name=\"employer\" column=\"employer_id\" not-null=\"true\"/>\n"
+ " <many-to-one name=\"employee\" column=\"employee_id\" not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employee\" table=\"employees\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employee_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"taxfileNumber\"/>\n"
+ " <component name=\"name\" class=\"Name\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </component>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:52
+msgid "And heres the table schema generated by <literal>SchemaExport</literal>."
+msgstr "ê·¸ë¦¬ê³ ë¤ìì <literal>SchemaExport</literal>ì ìí´ ìì±ë í
ì´ë¸ ì¤í¤ë§ì´ë¤."
+
+#: index.docbook:56
+msgid ""
+ "<![CDATA[create table employers (\n"
+ " id BIGINT not null, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employment_periods (\n"
+ " id BIGINT not null,\n"
+ " hourly_rate NUMERIC(12, 2),\n"
+ " currency VARCHAR(12), \n"
+ " employee_id BIGINT not null, \n"
+ " employer_id BIGINT not null, \n"
+ " end_date TIMESTAMP, \n"
+ " start_date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employees (\n"
+ " id BIGINT not null, \n"
+ " firstName VARCHAR(255), \n"
+ " initial CHAR(1), \n"
+ " lastName VARCHAR(255), \n"
+ " taxfileNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK0 foreign key (employer_id) references employers\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK1 foreign key (employee_id) references employees\n"
+ "create sequence employee_id_seq\n"
+ "create sequence employment_id_seq\n"
+ "create sequence employer_id_seq]]>"
+msgstr ""
+ "<![CDATA[create table employers (\n"
+ " id BIGINT not null, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employment_periods (\n"
+ " id BIGINT not null,\n"
+ " hourly_rate NUMERIC(12, 2),\n"
+ " currency VARCHAR(12), \n"
+ " employee_id BIGINT not null, \n"
+ " employer_id BIGINT not null, \n"
+ " end_date TIMESTAMP, \n"
+ " start_date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employees (\n"
+ " id BIGINT not null, \n"
+ " firstName VARCHAR(255), \n"
+ " initial CHAR(1), \n"
+ " lastName VARCHAR(255), \n"
+ " taxfileNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK0 foreign key (employer_id) references employers\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK1 foreign key (employee_id) references employees\n"
+ "create sequence employee_id_seq\n"
+ "create sequence employment_id_seq\n"
+ "create sequence employer_id_seq]]>"
+
+#: index.docbook:61
+msgid "Author/Work"
+msgstr "Author/Work"
+
+#: index.docbook:63
+msgid "Consider the following model of the relationships between <literal>Work</literal>, <literal>Author</literal> and <literal>Person</literal>. We represent the relationship between <literal>Work</literal> and <literal>Author</literal> as a many-to-many association. We choose to represent the relationship between <literal>Author</literal> and <literal>Person</literal> as one-to-one association. Another possibility would be to have <literal>Author</literal> extend <literal>Person</literal>."
+msgstr "<literal>Work</literal>, <literal>Author</literal> ê·¸ë¦¬ê³ <literal>Person</literal> ì¬ì´ì ê´ê³ë¤ì ëí ë¤ì 모íì ê²í íì. ì°ë¦¬ë <literal>Work</literal>ê³¼ <literal>Author</literal> ì¬ì´ì ê´ê³ë¥¼ many-to-many ì°ê´ì¼ë¡ íííë¤. ì°ë¦¬ë <literal>Author</literal>ì <literal>Person</literal> ì¬ì´ì ê´ê³ë¥¼ one-to-one ì°ê´ì¼ë¡ íííê³ ì ì ííë¤. ë ë¤ë¥¸ ê°ë¥ì±ì <literal>Author</literal>ê° <literal>Person</literal>ì íì¥íëë¡ íë ê²ì¼ ê²ì´ë¤."
+
+#: index.docbook:81
+msgid "The following mapping document correctly represents these relationships:"
+msgstr "ë¤ì 매í 문ìë ì´ë¤ ê´ê³ë¤ì ì ííê² íííë¤:"
+
+#: index.docbook:85
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Work\" table=\"works\" discriminator-value=\"W\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"type\" type=\"character\"/>\n"
+ "\n"
+ " <property name=\"title\"/>\n"
+ " <set name=\"authors\" table=\"author_work\">\n"
+ " <key column name=\"work_id\"/>\n"
+ " <many-to-many class=\"Author\" column name=\"author_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"Book\" discriminator-value=\"B\">\n"
+ " <property name=\"text\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " <subclass name=\"Song\" discriminator-value=\"S\">\n"
+ " <property name=\"tempo\"/>\n"
+ " <property name=\"genre\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Author\" table=\"authors\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <!-- The Author must have the same identifier as the Person -->\n"
+ " <generator class=\"assigned\"/> \n"
+ " </id>\n"
+ "\n"
+ " <property name=\"alias\"/>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "\n"
+ " <set name=\"works\" table=\"author_work\" inverse=\"true\">\n"
+ " <key column=\"author_id\"/>\n"
+ " <many-to-many class=\"Work\" column=\"work_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Person\" table=\"persons\">\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Work\" table=\"works\" discriminator-value=\"W\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"type\" type=\"character\"/>\n"
+ "\n"
+ " <property name=\"title\"/>\n"
+ " <set name=\"authors\" table=\"author_work\">\n"
+ " <key column name=\"work_id\"/>\n"
+ " <many-to-many class=\"Author\" column name=\"author_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"Book\" discriminator-value=\"B\">\n"
+ " <property name=\"text\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " <subclass name=\"Song\" discriminator-value=\"S\">\n"
+ " <property name=\"tempo\"/>\n"
+ " <property name=\"genre\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Author\" table=\"authors\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <!-- The Author must have the same identifier as the Person -->\n"
+ " <generator class=\"assigned\"/> \n"
+ " </id>\n"
+ "\n"
+ " <property name=\"alias\"/>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "\n"
+ " <set name=\"works\" table=\"author_work\" inverse=\"true\">\n"
+ " <key column=\"author_id\"/>\n"
+ " <many-to-many class=\"Work\" column=\"work_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Person\" table=\"persons\">\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:87
+msgid "There are four tables in this mapping. <literal>works</literal>, <literal>authors</literal> and <literal>persons</literal> hold work, author and person data respectively. <literal>author_work</literal> is an association table linking authors to works. Heres the table schema, as generated by <literal>SchemaExport</literal>."
+msgstr "ì´ ë§¤íìë ë¤ ê°ì í
ì´ë¸ë¤ì´ ì¡´ì¬íë¤. <literal>works</literal>, <literal>authors</literal>ì <literal>persons</literal>ì ê°ê° ìì
ë°ì´í°, ì ì ë°ì´í°, ê°ì¸ ë°ì´í°ë¥¼ ë³´ê´íë¤. <literal>author_work</literal>ë ì ìë¤ì ìì
ë¤ì ì°ê²°ìí¤ë ì°ê´ í
ì´ë¸ì´ë¤. ë¤ìì <literal>SchemaExport</literal>ì ìí´ ìì±ë í
ì´ë¸ ì¤í¤ë§ì´ë¤."
+
+#: index.docbook:95
+msgid ""
+ "<![CDATA[create table works (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " tempo FLOAT, \n"
+ " genre VARCHAR(255), \n"
+ " text INTEGER, \n"
+ " title VARCHAR(255), \n"
+ " type CHAR(1) not null, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table author_work (\n"
+ " author_id BIGINT not null, \n"
+ " work_id BIGINT not null, \n"
+ " primary key (work_id, author_id)\n"
+ ")\n"
+ "\n"
+ "create table authors (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " alias VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table persons (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table authors \n"
+ " add constraint authorsFK0 foreign key (id) references persons\n"
+ "alter table author_work \n"
+ " add constraint author_workFK0 foreign key (author_id) references authors\n"
+ "alter table author_work\n"
+ " add constraint author_workFK1 foreign key (work_id) references works]]>"
+msgstr ""
+ "<![CDATA[create table works (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " tempo FLOAT, \n"
+ " genre VARCHAR(255), \n"
+ " text INTEGER, \n"
+ " title VARCHAR(255), \n"
+ " type CHAR(1) not null, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table author_work (\n"
+ " author_id BIGINT not null, \n"
+ " work_id BIGINT not null, \n"
+ " primary key (work_id, author_id)\n"
+ ")\n"
+ "\n"
+ "create table authors (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " alias VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table persons (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table authors \n"
+ " add constraint authorsFK0 foreign key (id) references persons\n"
+ "alter table author_work \n"
+ " add constraint author_workFK0 foreign key (author_id) references authors\n"
+ "alter table author_work\n"
+ " add constraint author_workFK1 foreign key (work_id) references works]]>"
+
+#: index.docbook:100
+msgid "Customer/Order/Product"
+msgstr "Customer/Order/Product"
+
+#: index.docbook:102
+msgid "Now consider a model of the relationships between <literal>Customer</literal>, <literal>Order</literal> and <literal>LineItem</literal> and <literal>Product</literal>. There is a one-to-many association between <literal>Customer</literal> and <literal>Order</literal>, but how should we represent <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal>? I've chosen to map <literal>LineItem</literal> as an association class representing the many-to-many association between <literal>Order</literal> and <literal>Product</literal>. In Hibernate, this is called a composite element."
+msgstr "ì´ì <literal>Customer</literal>, <literal>Order</literal>ì <literal>LineItem</literal> ê·¸ë¦¬ê³ <literal>Product</literal> ì¬ì´ì ê´ê³ë¤ì ê´í 모íì ê²í íì. <literal>Customer</literal>ì <literal>Order</literal> ì¬ì´ì one-to-many ì°ê´ì´ ì¡´ì¬íì§ë§, ì°ë¦¬ë ì´ë»ê² <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal>를 ííí ê²ì¸ê°? ëë <literal>Order</literal>ì <literal>Product</literal> ì¬ì´ì many-to-many ì°ê´ë¥¼ ëíë´ë íëì ì°ê´ í´ëì¤ë¡ì <literal>LineItem</literal>ì 매ííê¸°ë¡ ì ííë¤. Hibernateìì ì´ê²ì composite ììë¡ ëª
ëª
ëë¤."
+
+#: index.docbook:122
+msgid "The mapping document:"
+msgstr "매í 문ì:"
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Customer\" table=\"customers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <set name=\"orders\" inverse=\"true\">\n"
+ " <key column=\"customer_id\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Order\" table=\"orders\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\"/>\n"
+ " <many-to-one name=\"customer\" column=\"customer_id\"/>\n"
+ " <list name=\"lineItems\" table=\"line_items\">\n"
+ " <key column=\"order_id\"/>\n"
+ " <list-index column=\"line_number\"/>\n"
+ " <composite-element class=\"LineItem\">\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"product\" column=\"product_id\"/>\n"
+ " </composite-element>\n"
+ " </list>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Product\" table=\"products\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"serialNumber\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Customer\" table=\"customers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <set name=\"orders\" inverse=\"true\">\n"
+ " <key column=\"customer_id\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Order\" table=\"orders\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\"/>\n"
+ " <many-to-one name=\"customer\" column=\"customer_id\"/>\n"
+ " <list name=\"lineItems\" table=\"line_items\">\n"
+ " <key column=\"order_id\"/>\n"
+ " <list-index column=\"line_number\"/>\n"
+ " <composite-element class=\"LineItem\">\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"product\" column=\"product_id\"/>\n"
+ " </composite-element>\n"
+ " </list>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Product\" table=\"products\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"serialNumber\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:128
+msgid "<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> and <literal>products</literal> hold customer, order, order line item and product data respectively. <literal>line_items</literal> also acts as an association table linking orders with products."
+msgstr "<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> ê·¸ë¦¬ê³ <literal>products</literal>ë ê°ê° ê³ ê° ë°ì´í°, 주문 ë°ì´í°, 주문 ë¼ì¸ ìì´í
ë°ì´í°, ê·¸ë¦¬ê³ ì í ë°ì´í°ë¥¼ ë³´ê´íë¤. <literal>line_items</literal>ë ëí 주문ë¤ì ì íë¤ê³¼ ì°ê²°ìí¤ë ì°ê´ í
ì´ë¸ë¡ì ëìíë¤."
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[create table customers (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table orders (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " customer_id BIGINT, \n"
+ " date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table line_items (\n"
+ " line_number INTEGER not null, \n"
+ " order_id BIGINT not null, \n"
+ " product_id BIGINT, \n"
+ " quantity INTEGER, \n"
+ " primary key (order_id, line_number)\n"
+ ")\n"
+ "\n"
+ "create table products (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " serialNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table orders \n"
+ " add constraint ordersFK0 foreign key (customer_id) references customers\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK0 foreign key (product_id) references products\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK1 foreign key (order_id) references orders]]>"
+msgstr ""
+ "<![CDATA[create table customers (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table orders (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " customer_id BIGINT, \n"
+ " date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table line_items (\n"
+ " line_number INTEGER not null, \n"
+ " order_id BIGINT not null, \n"
+ " product_id BIGINT, \n"
+ " quantity INTEGER, \n"
+ " primary key (order_id, line_number)\n"
+ ")\n"
+ "\n"
+ "create table products (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " serialNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table orders \n"
+ " add constraint ordersFK0 foreign key (customer_id) references customers\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK0 foreign key (product_id) references products\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK1 foreign key (order_id) references orders]]>"
+
+#: index.docbook:140
+msgid "Miscellaneous example mappings"
+msgstr "기í ìì 매íë¤"
+
+#: index.docbook:142
+msgid "These examples are all taken from the Hibernate test suite. You will find many other useful example mappings there. Look in the <literal>test</literal> folder of the Hibernate distribution."
+msgstr "ì´ë¤ ìì ë¤ì 모ë Hiberante test suiteë¡ë¶í° ì·¨íë¤. ë¹ì ì 거기ì ë§ì ë¤ë¥¸ ì ì©í ìì 매íë¤ì ë°ê²¬í ê²ì´ë¤. Hibernate ë°°í¬ë³¸ì <literal>test</literal> í´ë를 ì´í´ë³´ë¼."
+
+#: index.docbook:148
+msgid "TODO: put words around this stuff"
+msgstr "TODO: ì´ ë´ì©ì ëë¬ì¼ ë§ë¤ì ì§ì´ë£ì ê²."
+
+#: index.docbook:151
+msgid "\"Typed\" one-to-one association"
+msgstr "\"íìíë(Typed)\" one-to-one ì°ê´"
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"name\"/>\n"
+ " <one-to-one name=\"address\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'HOME'</formula>\n"
+ " </one-to-one>\n"
+ " <one-to-one name=\"mailingAddress\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'MAILING'</formula>\n"
+ " </one-to-one>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\" batch-size=\"2\" \n"
+ " check=\"addressType in ('MAILING', 'HOME', 'BUSINESS')\">\n"
+ " <composite-id>\n"
+ " <key-many-to-one name=\"person\" \n"
+ " column=\"personName\"/>\n"
+ " <key-property name=\"type\" \n"
+ " column=\"addressType\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"street\" type=\"text\"/>\n"
+ " <property name=\"state\"/>\n"
+ " <property name=\"zip\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"name\"/>\n"
+ " <one-to-one name=\"address\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'HOME'</formula>\n"
+ " </one-to-one>\n"
+ " <one-to-one name=\"mailingAddress\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'MAILING'</formula>\n"
+ " </one-to-one>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\" batch-size=\"2\" \n"
+ " check=\"addressType in ('MAILING', 'HOME', 'BUSINESS')\">\n"
+ " <composite-id>\n"
+ " <key-many-to-one name=\"person\" \n"
+ " column=\"personName\"/>\n"
+ " <key-property name=\"type\" \n"
+ " column=\"addressType\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"street\" type=\"text\"/>\n"
+ " <property name=\"state\"/>\n"
+ " <property name=\"zip\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:156
+msgid "Composite key example"
+msgstr "Composite í¤ ìì "
+
+#: index.docbook:157
+msgid ""
+ "<![CDATA[<class name=\"Customer\">\n"
+ "\n"
+ " <id name=\"customerId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\" not-null=\"true\" length=\"100\"/>\n"
+ " <property name=\"address\" not-null=\"true\" length=\"200\"/>\n"
+ "\n"
+ " <list name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key column=\"customerId\"/>\n"
+ " <index column=\"orderNumber\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </list>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Order\" table=\"CustomerOrder\" lazy=\"true\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ " <synchronize table=\"Product\"/>\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"Order$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"orderDate\" \n"
+ " type=\"calendar_date\"\n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <property name=\"total\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity*p.price) \n"
+ " from LineItem li, Product p \n"
+ " where li.productId = p.productId \n"
+ " and li.customerId = customerId \n"
+ " and li.orderNumber = orderNumber )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ " <many-to-one name=\"customer\"\n"
+ " column=\"customerId\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <bag name=\"lineItems\"\n"
+ " fetch=\"join\" \n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key>\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"LineItem\"/>\n"
+ " </bag>\n"
+ " \n"
+ "</class>\n"
+ " \n"
+ "<class name=\"LineItem\">\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"LineItem$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " <key-property name=\"productId\" length=\"10\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"quantity\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\">\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </many-to-one>\n"
+ " \n"
+ " <many-to-one name=\"product\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"\n"
+ " column=\"productId\"/>\n"
+ " \n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Product\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ "\n"
+ " <id name=\"productId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"description\" \n"
+ " not-null=\"true\" \n"
+ " length=\"200\"/>\n"
+ " <property name=\"price\" length=\"3\"/>\n"
+ " <property name=\"numberAvailable\"/>\n"
+ " \n"
+ " <property name=\"numberOrdered\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity) \n"
+ " from LineItem li \n"
+ " where li.productId = productId )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\">\n"
+ "\n"
+ " <id name=\"customerId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\" not-null=\"true\" length=\"100\"/>\n"
+ " <property name=\"address\" not-null=\"true\" length=\"200\"/>\n"
+ "\n"
+ " <list name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key column=\"customerId\"/>\n"
+ " <index column=\"orderNumber\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </list>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Order\" table=\"CustomerOrder\" lazy=\"true\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ " <synchronize table=\"Product\"/>\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"Order$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"orderDate\" \n"
+ " type=\"calendar_date\"\n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <property name=\"total\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity*p.price) \n"
+ " from LineItem li, Product p \n"
+ " where li.productId = p.productId \n"
+ " and li.customerId = customerId \n"
+ " and li.orderNumber = orderNumber )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ " <many-to-one name=\"customer\"\n"
+ " column=\"customerId\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <bag name=\"lineItems\"\n"
+ " fetch=\"join\" \n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key>\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"LineItem\"/>\n"
+ " </bag>\n"
+ " \n"
+ "</class>\n"
+ " \n"
+ "<class name=\"LineItem\">\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"LineItem$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " <key-property name=\"productId\" length=\"10\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"quantity\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\">\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </many-to-one>\n"
+ " \n"
+ " <many-to-one name=\"product\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"\n"
+ " column=\"productId\"/>\n"
+ " \n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Product\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ "\n"
+ " <id name=\"productId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"description\" \n"
+ " not-null=\"true\" \n"
+ " length=\"200\"/>\n"
+ " <property name=\"price\" length=\"3\"/>\n"
+ " <property name=\"numberAvailable\"/>\n"
+ " \n"
+ " <property name=\"numberOrdered\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity) \n"
+ " from LineItem li \n"
+ " where li.productId = productId )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:161
+msgid "Many-to-many with shared composite key attribute"
+msgstr "ê³µì ë í©ì± í¤ ìì±ì ê°ì§ Many-to-many"
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[<class name=\"User\" table=\"`User`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <set name=\"groups\" table=\"UserGroup\">\n"
+ " <key>\n"
+ " <column name=\"userName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"Group\">\n"
+ " <column name=\"groupName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ " \n"
+ "<class name=\"Group\" table=\"`Group`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"description\"/>\n"
+ " <set name=\"users\" table=\"UserGroup\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"groupName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"User\">\n"
+ " <column name=\"userName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[<class name=\"User\" table=\"`User`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <set name=\"groups\" table=\"UserGroup\">\n"
+ " <key>\n"
+ " <column name=\"userName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"Group\">\n"
+ " <column name=\"groupName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ " \n"
+ "<class name=\"Group\" table=\"`Group`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"description\"/>\n"
+ " <set name=\"users\" table=\"UserGroup\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"groupName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"User\">\n"
+ " <column name=\"userName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ "]]>"
+
+#: index.docbook:166
+msgid "Content based discrimination"
+msgstr "ë´ì© ê¸°ë° íë³"
+
+#: index.docbook:167
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " discriminator-value=\"P\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"person_id\" \n"
+ " unsaved-value=\"0\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " \n"
+ " \n"
+ " <discriminator \n"
+ " type=\"character\">\n"
+ " <formula>\n"
+ " case \n"
+ " when title is not null then 'E' \n"
+ " when salesperson is not null then 'C' \n"
+ " else 'P' \n"
+ " end\n"
+ " </formula>\n"
+ " </discriminator>\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"\n"
+ " length=\"80\"/>\n"
+ " \n"
+ " <property name=\"sex\" \n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ " \n"
+ " <component name=\"address\">\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </component>\n"
+ " \n"
+ " <subclass name=\"Employee\" \n"
+ " discriminator-value=\"E\">\n"
+ " <property name=\"title\"\n"
+ " length=\"20\"/>\n"
+ " <property name=\"salary\"/>\n"
+ " <many-to-one name=\"manager\"/>\n"
+ " </subclass>\n"
+ " \n"
+ " <subclass name=\"Customer\" \n"
+ " discriminator-value=\"C\">\n"
+ " <property name=\"comments\"/>\n"
+ " <many-to-one name=\"salesperson\"/>\n"
+ " </subclass>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " discriminator-value=\"P\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"person_id\" \n"
+ " unsaved-value=\"0\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " \n"
+ " \n"
+ " <discriminator \n"
+ " type=\"character\">\n"
+ " <formula>\n"
+ " case \n"
+ " when title is not null then 'E' \n"
+ " when salesperson is not null then 'C' \n"
+ " else 'P' \n"
+ " end\n"
+ " </formula>\n"
+ " </discriminator>\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"\n"
+ " length=\"80\"/>\n"
+ " \n"
+ " <property name=\"sex\" \n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ " \n"
+ " <component name=\"address\">\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </component>\n"
+ " \n"
+ " <subclass name=\"Employee\" \n"
+ " discriminator-value=\"E\">\n"
+ " <property name=\"title\"\n"
+ " length=\"20\"/>\n"
+ " <property name=\"salary\"/>\n"
+ " <many-to-one name=\"manager\"/>\n"
+ " </subclass>\n"
+ " \n"
+ " <subclass name=\"Customer\" \n"
+ " discriminator-value=\"C\">\n"
+ " <property name=\"comments\"/>\n"
+ " <many-to-one name=\"salesperson\"/>\n"
+ " </subclass>\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:171
+msgid "Associations on alternate keys"
+msgstr "ëì²´ í¤ë¤ì ëí ì°ê´ë¤"
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"name\" length=\"100\"/>\n"
+ " \n"
+ " <one-to-one name=\"address\" \n"
+ " property-ref=\"person\"\n"
+ " cascade=\"all\"\n"
+ " fetch=\"join\"/>\n"
+ " \n"
+ " <set name=\"accounts\" \n"
+ " inverse=\"true\">\n"
+ " <key column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " <one-to-many class=\"Account\"/>\n"
+ " </set>\n"
+ " \n"
+ " <property name=\"userId\" length=\"8\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"address\" length=\"300\"/>\n"
+ " <property name=\"zip\" length=\"5\"/>\n"
+ " <property name=\"country\" length=\"25\"/>\n"
+ " <many-to-one name=\"person\" unique=\"true\" not-null=\"true\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Account\">\n"
+ " <id name=\"accountId\" length=\"32\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " \n"
+ " <many-to-one name=\"user\"\n"
+ " column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " \n"
+ " <property name=\"type\" not-null=\"true\"/>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"name\" length=\"100\"/>\n"
+ " \n"
+ " <one-to-one name=\"address\" \n"
+ " property-ref=\"person\"\n"
+ " cascade=\"all\"\n"
+ " fetch=\"join\"/>\n"
+ " \n"
+ " <set name=\"accounts\" \n"
+ " inverse=\"true\">\n"
+ " <key column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " <one-to-many class=\"Account\"/>\n"
+ " </set>\n"
+ " \n"
+ " <property name=\"userId\" length=\"8\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"address\" length=\"300\"/>\n"
+ " <property name=\"zip\" length=\"5\"/>\n"
+ " <property name=\"country\" length=\"25\"/>\n"
+ " <many-to-one name=\"person\" unique=\"true\" not-null=\"true\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Account\">\n"
+ " <id name=\"accountId\" length=\"32\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " \n"
+ " <many-to-one name=\"user\"\n"
+ " column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " \n"
+ " <property name=\"type\" not-null=\"true\"/>\n"
+ " \n"
+ "</class>]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/example_parentchild.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/example_parentchild.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/example_parentchild.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,350 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Parent/Child"
+msgstr "ìì : ë¶ëª¨/ìì"
+
+#: index.docbook:7
+msgid "One of the very first things that new users try to do with Hibernate is to model a parent / child type relationship. There are two different approaches to this. For various reasons the most convenient approach, especially for new users, is to model both <literal>Parent</literal> and <literal>Child</literal> as entity classes with a <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a <literal><composite-element></literal>.) Now, it turns out that default semantics of a one to many association (in Hibernate) are much less close to the usual semantics of a parent / child relationship than those of a composite element mapping. We will explain how to use a <emphasis>bidirectional one to many association with cascades</emphasis> to model a parent / child relationship efficiently and elegantly. It's not at all difficult!"
+msgstr "ìë¡ì´ ì¬ì©ìë¤ì´ Hibernateë¡ ííê³ ì ìëíë ë°ë¡ 첫 ë²ì§¸ ê²ë¤ ì¤ íëë ë¶ëª¨/ìì íì
ì ê´ê³ë¥¼ 모íí ìí¤ë ê²ì´ë¤. ì´ê²ì ëí ë ê°ì§ ë¤ë¥¸ ì ê·¼ë²ë¤ì´ ì¡´ì¬íë¤. ì¬ë¬ê°ì§ ì´ì ë¤ë¡ ì¸í´ í¹í ìë¡ì´ ì¬ì©ìë¤ìê² ê°ì¥ í¸í ì ê·¼ë²ì <literal>Parent</literal>ë¡ë¶í° <literal>Child</literal>ë¡ì <literal><one-to-many></literal> ì°ê´ì ê°ì§ ìí°í° í´ëì¤ë¤ë¡ì <literal>Parent</literal>ì <literal>Child</literal> ìì를 모íí ìí¤ë ê²ì´ë¤. (ë¤ë¥¸ ì ê·¼ë²ì <literal>Child</literal>를 <literal><composite-element></literal>ë¡ ì ì¸íë ê²ì´ë¤.) ì´ì , (Hibernateìì) one to many ì°ê´ì ëí ëí´í¸ ì미ë composite ìì 매íì ìë¯¸ë³´ë¤ ë¶ëª¨/ìì ê´ê³ì íµìì ì¸ ì미ì í¨ì¬ ë ê°ê¹ë¤ë ê²ì´ íëª
ëë¤. ì°ë¦¬ë ë¶ëª¨/ìì ê´ê³ë¥¼ í¨ì¨ì ì´ê³ ê°ë ¥íê² ëª¨íí ì!
í¤ê¸° ìí´ <emphasis>ì¼ì¤ì¼ì´ëë¤ì ê°ì§ ìë°©í¥ one to many ì°ê´</emphasis>ì ì¬ì©íë ë°©ë²ì ì¤ëª
í ê²ì´ë¤. ê·¸ê²ì ì í ì´ë µì§ ìë¤!"
+
+#: index.docbook:21
+msgid "A note about collections"
+msgstr "ì½ë ì
ë¤ì ê´í ë
¸í¸"
+
+#: index.docbook:23
+msgid "Hibernate collections are considered to be a logical part of their owning entity; never of the contained entities. This is a crucial distinction! It has the following consequences:"
+msgstr "Hibernate ì½ë ì
ë¤ì ê·¸ê²ë¤ì ìì íê³ ìë ìí°í°ì ë
¼ë¦¬ì ë¶ë¶ì¼ë¡ ê°ì£¼ëë¤; ê²°ì½ í¬í¨ë ìí°í°ë¤ì ë¶ë¶ì´ ìëë¤. ì´ê²ì ì¤ëí 구ë¶ì ì´ë¤! ê·¸ê²ì ë¤ìì ë¤ì ê²°ê³¼ë¤ì ê°ëë¤:"
+
+#: index.docbook:30
+msgid "When we remove / add an object from / to a collection, the version number of the collection owner is incremented."
+msgstr "ì½ë ì
ì¼ë¡ë¶í° ê°ì²´ë¥¼ ì ê±°íê³ /ì½ë ì
ì ê°ì²´ë¥¼ ì¶ê° ìí¬ ë, ì½ë ì
ìì ìì ë²ì ë²í¸ê° ì¦ê°ëë¤."
+
+#: index.docbook:36
+msgid "If an object that was removed from a collection is an instance of a value type (eg, a composite element), that object will cease to be persistent and its state will be completely removed from the database. Likewise, adding a value type instance to the collection will cause its state to be immediately persistent."
+msgstr "ë§ì¼ ì½ë ì
ì¼ë¡ë¶í° ì ê±°ëìë ê°ì²´ê° íëì ê° íì
ì ì¸ì¤í´ì¤(ì를 ë¤ì´ composite ìì)ì´ë©´, ê·¸ ê°ì²´ë ìììí를 ëë´ê³ ê·¸ê²ì ìíê° ë°ì´í°ë² ì´ì¤ë¡ë¶í° ìì í ì ê±°ë ê²ì´ë¤. ë§ì°¬ê°ì§ë¡ íëì ê° íì
ì ì¸ì¤í´ì¤ë¥¼ ì½ë ì
ì ì¶ê°ìí¤ë ê²ì ê·¸ê²ì ìíê° ì¦ì ììí ëëë¡ ê°ì ìí¬ ê²ì´ë¤."
+
+#: index.docbook:44
+msgid "On the other hand, if an entity is removed from a collection (a one-to-many or many-to-many association), it will not be deleted, by default. This behaviour is completely consistent - a change to the internal state of another entity should not cause the associated entity to vanish! Likewise, adding an entity to a collection does not cause that entity to become persistent, by default."
+msgstr "ë°ë©´ì, ë§ì¼ ìí°í°ê° ì½ë ì
ì¼ë¡ë¶í° ì ê±°ë ê²½ì°(one-to-many ëë many-to-many ì°ê´), ê·¸ê²ì ëí´í¸ë¡ ìì ëì§ ìì ê²ì´ë¤. ì´ í¹ì§ì ìì íê² ì¼ê´ì ì´ë¤ - ë¤ë¥¸ ìí°í°ì ë´ë¶ ìíì ëí ë³ê²½ì ì°ê´ë ìí°í°ë¥¼ ì¬ë¼ì§ëë¡ ê°ì íì§ ìì ê²ì´ë¤! ë§ì°¬ê°ì§ë¡ ì½ë ì
ì ìí°í°ë¥¼ ì¶ê°ìí¤ë ê²ì ëí´í¸ë¡ ê·¸ ìí°í°ê° ììí ëëë¡ ê°ì ìí¤ì§ ìëë¤."
+
+#: index.docbook:54
+msgid "Instead, the default behaviour is that adding an entity to a collection merely creates a link between the two entities, while removing it removes the link. This is very appropriate for all sorts of cases. Where it is not appropriate at all is the case of a parent / child relationship, where the life of the child is bound to the life cycle of the parent."
+msgstr "ëì ì ì½ë ì
ì¼ë¡ì ìí°í° ì¶ê°ê° ë ìí°í°ë¤ ì¬ì´ì ë¨ì§ íëì ë§í¬ë¥¼ ìì±ìí¤ë ë°ë©´ì, ê·¸ê²ì ì ê±°íë ê²ì ë§í¬ë¥¼ ì ê±°íë¤ë ì ì´ ëí´í¸ í¹ì§ì´ë¤. ì´ê²ì 모ë ì¢
ë¥ì ê²½ì°ë¤ì ëí´ ë§¤ì° ì ì íë¤. ê·¸ê²ì´ ì í ì ì íì§ ìì ê³³ì ë¶ëª¨/ìì ê´ê³ì¸ ê²½ì°ì´ê³ , ì¬ê¸°ì ììì ìì ë ë¶ëª¨ì ìëª
주기ì 묶ì¬ì ¸ ìë¤."
+
+#: index.docbook:64
+msgid "Bidirectional one-to-many"
+msgstr "ìë°©í¥ one-to-many"
+
+#: index.docbook:66
+msgid "Suppose we start with a simple <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>."
+msgstr "<literal>Parent</literal>ë¡ë¶í° <literal>Child</literal>ë¡ì ê°ë¨í <literal><one-to-many></literal> ì°ê´ê´ê³ë¡ ììíë¤ê³ ê°ì íì."
+
+#: index.docbook:71
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:73
+msgid "If we were to execute the following code"
+msgstr "ì°ë¦¬ê° ë¤ì ì½ë를 ì¤íìì¼°ë¤ë©´"
+
+#: index.docbook:77
+msgid ""
+ "<![CDATA[Parent p = .....;\n"
+ "Child c = new Child();\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = .....;\n"
+ "Child c = new Child();\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:79
+msgid "Hibernate would issue two SQL statements:"
+msgstr "Hibernateë ë ê°ì SQL 문ì¥ë¤ì ì¤íí ê²ì´ë¤:"
+
+#: index.docbook:85
+msgid "an <literal>INSERT</literal> to create the record for <literal>c</literal>"
+msgstr "<literal>c</literal>ì ëí ë ì½ë를 ìì±ìí¤ë <literal>INSERT</literal>"
+
+#: index.docbook:88
+msgid "an <literal>UPDATE</literal> to create the link from <literal>p</literal> to <literal>c</literal>"
+msgstr "<literal>p</literal>ë¡ë¶í° <literal>c</literal>ë¡ì ë§í¬ë¥¼ ìì±ìí¤ë <literal>UPDATE</literal>"
+
+#: index.docbook:95
+msgid "This is not only inefficient, but also violates any <literal>NOT NULL</literal> constraint on the <literal>parent_id</literal> column. We can fix the nullability constraint violation by specifying <literal>not-null=\"true\"</literal> in the collection mapping:"
+msgstr "ì´ê²ì ë¹í¨ì¨ì ì¼ ë¿ë§ ìëë¼, ëí <literal>parent_id</literal> ì»¬ë¼ ìì ììì <literal>NOT NULL</literal> 컨ì¤í¸ë ì¸í¸ì ìë°°ëë¤. ì°ë¦¬ë ì½ë ì
매íìì <literal>not-null=\"true\"</literal>를 ì§ì í¨ì¼ë¡ì¨ null íì© ê°ë¥ 컨ì¤í¸ë ì¸í¸ ìë°ì ì ì í ì ìë¤:"
+
+#: index.docbook:101
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:103
+msgid "However, this is not the recommended solution."
+msgstr "íì§ë§ ì´ê²ì ê¶ì¥ëë í´ê²°ì±
ì´ ìëë¤."
+
+#: index.docbook:106
+msgid "The underlying cause of this behaviour is that the link (the foreign key <literal>parent_id</literal>) from <literal>p</literal> to <literal>c</literal> is not considered part of the state of the <literal>Child</literal> object and is therefore not created in the <literal>INSERT</literal>. So the solution is to make the link part of the <literal>Child</literal> mapping."
+msgstr "ì´ íìì 기본 ìì¸ì <literal>p</literal>ë¡ë¶í° <literal>c</literal>ë¡ì ë§í¬(foreign key <literal>parent_id</literal>)ê° <literal>Child</literal> ê°ì²´ì ìíì ë¶ë¶ì¼ë¡ ê°ì£¼ëì§ ìê³ ê·¸ë¬ë¯ë¡ <literal>INSERT</literal>ë¡ ìì±ëì§ ìëë¤ë ì ì´ë¤. ë°ë¼ì í´ê²°ì±
ì <literal>Child</literal> 매íì ë§í¬ ë¶ë¶ì ë§ëë ê²ì´ë¤."
+
+#: index.docbook:113
+msgid "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
+
+#: index.docbook:115
+msgid "(We also need to add the <literal>parent</literal> property to the <literal>Child</literal> class.)"
+msgstr "(ì°ë¦¬ë ëí <literal>parent</literal> íë¡í¼í°ë¥¼ <literal>Child</literal> í´ëì¤ì ì¶ê°ìí¬ íìê° ìë¤.)"
+
+#: index.docbook:119
+msgid "Now that the <literal>Child</literal> entity is managing the state of the link, we tell the collection not to update the link. We use the <literal>inverse</literal> attribute."
+msgstr "ì´ì <literal>Child</literal> ìí°í°ê° ë§í¬ì ìí를 ê´ë¦¬íë¤ë ì ì ë
¸í¸íê³ , ì°ë¦¬ë ë§í¬ë¥¼ ì
ë°ì´í¸ ìí¤ì§ ë§ëë¡ ì½ë ì
ìê² íµë³´íë¤. ì°ë¦¬ë <literal>inverse</literal> ìì±ì ì¬ì©íë¤."
+
+#: index.docbook:124
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:126
+msgid "The following code would be used to add a new <literal>Child</literal>"
+msgstr "ë¤ì ì½ëë ìë¡ì´ <literal>Child</literal>를 ì¶ê°ìí¤ëë° ì¬ì©ë ê²ì´ë¤"
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:132
+msgid "And now, only one SQL <literal>INSERT</literal> would be issued!"
+msgstr "ê·¸ë¦¬ê³ ì´ì , ì ì¼íê² í ê°ì SQL <literal>INSERT</literal>ê° ì¤íë ê²ì´ë¤!"
+
+#: index.docbook:136
+msgid "To tighten things up a bit, we could create an <literal>addChild()</literal> method of <literal>Parent</literal>."
+msgstr "ì½ê° ê±°ì¹ ê², ì°ë¦¬ë <literal>Parent</literal>ì <literal>addChild()</literal> ë©ìë를 ìì±ìí¬ ì ìë¤."
+
+#: index.docbook:141
+msgid ""
+ "<![CDATA[public void addChild(Child c) {\n"
+ " c.setParent(this);\n"
+ " children.add(c);\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public void addChild(Child c) {\n"
+ " c.setParent(this);\n"
+ " children.add(c);\n"
+ "}]]>"
+
+#: index.docbook:143
+msgid "Now, the code to add a <literal>Child</literal> looks like"
+msgstr "ì´ì , <literal>Child</literal>를 ì¶ê°íë ì½ëë ë¤ìê³¼ ê°ë¤"
+
+#: index.docbook:147
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:152
+msgid "Cascading life cycle"
+msgstr "ì¼ì¤ì¼ì´ë© ìëª
주기"
+
+#: index.docbook:154
+msgid "The explicit call to <literal>save()</literal> is still annoying. We will address this by using cascades."
+msgstr "<literal>save()</literal>ì ëí ëª
ìì ì¸ í¸ì¶ì ì¬ì í ì±ê°ìë¤. ì°ë¦¬ë ì¼ì¤ì¼ì´ë©ì ì¬ì©íì¬ ì´ê²ì ì기í ê²ì´ë¤."
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:161
+msgid "This simplifies the code above to"
+msgstr "ë¤ìì ìì ì½ë를 ë¨ìí ìí¨ë¤"
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:167
+msgid "Similarly, we don't need to iterate over the children when saving or deleting a <literal>Parent</literal>. The following removes <literal>p</literal> and all its children from the database."
+msgstr "ì ì¬íê², ì°ë¦¬ë <literal>Parent</literal>를 ì ì¥íê±°ë ìì í ë ììë¤ì ëí´ ë°ë³µíë ê²ì íìë¡ íì§ ìëë¤. ë¤ìì ë°ì´í°ë² ì´ì¤ë¡ë¶í° <literal>p</literal>ì 모ë ê·¸ê²ì ììë¤ì ì ê±°ìí¨ë¤."
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "session.delete(p);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "session.delete(p);\n"
+ "session.flush();]]>"
+
+#: index.docbook:174
+msgid "However, this code"
+msgstr "íì§ë§, ë¤ì ì½ë"
+
+#: index.docbook:178
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "c.setParent(null);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "c.setParent(null);\n"
+ "session.flush();]]>"
+
+#: index.docbook:180
+msgid "will not remove <literal>c</literal> from the database; it will ony remove the link to <literal>p</literal> (and cause a <literal>NOT NULL</literal> constraint violation, in this case). You need to explicitly <literal>delete()</literal> the <literal>Child</literal>."
+msgstr "ë ë°ì´í°ë² ì´ì¤ë¡ë¶í° <literal>c</literal>를 ì ê±°íì§ ìì ê²ì´ë¤; ê·¸ê²ì ì¤ì§ <literal>p</literal>ì ëí ë§í¬ë§ì ì ê±°í ê²ì´ë¤(ê·¸ë¦¬ê³ ì´ ê²½ì°ì <literal>NOT NULL</literal> 컨ì¤í¸ë ì¸í¸ ìë°ì ì¼ì¼í¬ ê²ì´ë¤ ). ë¹ì ì ëª
ìì ì¼ë¡ <literal>Child</literal>를 <literal>delete()</literal> ìí¬ íìê° ìë¤."
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "session.delete(c);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "session.delete(c);\n"
+ "session.flush();]]>"
+
+#: index.docbook:188
+msgid "Now, in our case, a <literal>Child</literal> can't really exist without its parent. So if we remove a <literal>Child</literal> from the collection, we really do want it to be deleted. For this, we must use <literal>cascade=\"all-delete-orphan\"</literal>."
+msgstr "ì´ì ì°ë¦¬ì ê²½ì°ì <literal>Child</literal>ë ê·¸ê²ì ë¶ëª¨ ìì´ë ì§ì ì¼ë¡ ì¡´ì¬í ì ìë¤. ë°ë¼ì ë§ì¼ ì°ë¦¬ê° ì½ë ì
ì¼ë¡ë¶í° íëì <literal>Child</literal>를 ì ê±°í ê²½ì°, ì°ë¦¬ë ê·¸ê²ì´ ì ë§ë¡ ìì ë기를 ìíë¤. ì´ë¥¼ ìí´ ì°ë¦¬ë <literal>cascade=\"all-delete-orphan\"</literal>ì ì¬ì©í´ì¼ íë¤."
+
+#: index.docbook:194
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:196
+msgid "Note: even though the collection mapping specifies <literal>inverse=\"true\"</literal>, cascades are still processed by iterating the collection elements. So if you require that an object be saved, deleted or updated by cascade, you must add it to the collection. It is not enough to simply call <literal>setParent()</literal>."
+msgstr "ë
¸í¸: ë¹ë¡ ì½ë ì
매íì´ <literal>inverse=\"true\"</literal>를 ì§ì í ì§ë¼ë, ì¼ì¤ì¼ì´ëë¤ì ì¬ì í ì½ë ì
ììë¤ì ë°ë³µí¨ì¼ë¡ì¨ ì²ë¦¬ëë¤. ë°ë¼ì ê°ì²´ê° ì¼ì¤ì¼ì´ëì ìí´ ì ì¥ëê³ , ìì ëê±°ë ì
ë°ì´í¸ ëë ê²ì ë¹ì ì´ íìë¡ í ê²½ì°, ë¹ì ì ê·¸ê²ì ê·¸ ì½ë ì
ì ì¶ê°í´ì¼ íë¤. ë¨ìí <literal>setParent()</literal>를 í¸ì¶íë ê²ì¼ë¡ë 충ë¶íì§ ìë¤."
+
+#: index.docbook:206
+msgid "Cascades and <literal>unsaved-value</literal>"
+msgstr "ì¼ì¤ì¼ì´ëë¤ê³¼ <literal>unsaved-value</literal>"
+
+#: index.docbook:208
+msgid "Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</literal>, made some changes in a UI action and wish to persist these changes in a new session by calling <literal>update()</literal>. The <literal>Parent</literal> will contain a collection of childen and, since cascading update is enabled, Hibernate needs to know which children are newly instantiated and which represent existing rows in the database. Lets assume that both <literal>Parent</literal> and <literal>Child</literal> have genenerated identifier properties of type <literal>Long</literal>. Hibernate will use the identifier and version/timestamp property value to determine which of the children are new. (See <xref linkend=\"objectstate-saveorupdate\"/>.) <emphasis>In Hibernate3, it is no longer necessary to specify an <literal>unsaved-value</literal> explicitly.</emphasis>"
+msgstr "ì°ë¦¬ê° íëì <literal>Session</literal> ìì <literal>Parent</literal>를 ë¡ëìì¼°ê³ UI ì¡ì
ìì ì´ë¤ ë³ê²½ë¤ì ííê³ , <literal>update()</literal>를 í¸ì¶íì¬ ìë¡ì´ ì¸ì
ìì ì´ë¤ ë³ê²½ë¤ì ììí ìí¤ë ê²ì ìíë¤ê³ ê°ì íì. <literal>Parent</literal>ë ììë¤ì ê°ì§ ì½ë ì
ì í¬í¨í ê²ì´ê³ , ì¼ì¤ì¼ì´ë© ì
ë°ì´í¸ê° ì¬ì© ê°ë¥í기 ë문ì, Hibernateë ì´ë ììë¤ì´ ìë¡ì´ ì´ê¸°í ëëì§ ê·¸ë¦¬ê³ ì´ë ê²ì´ ë°ì´í°ë² ì´ì¤ìì íì¬ íë¤ì íííëì§ë¥¼ ì íìê° ìë¤. <literal>Parent</literal>ì <literal>Child</literal> 모ë <literal>Long</literal> íì
ì ìë³ì íë¡í¼í°ë¤ì ìì±ìì¼°ë¤ê³ ê°ì íì. Hibernateë ì´ë ììë¤ì´ ìë¡ì´ ê²ì¸ì§ë¥¼ ê²°ì íëë° ìë³ìì version/timestamp íë¡í¼í° ê°ì ì¬ì©í ê²ì´ë¤.(<xref linkend=\"objectstate-saveorupdate\"/>ì ë³´ë¼.) <emphasis>Hibernate!
3ììë<literal>unsaved-value</literal>를 ëì´ì ëª
ìì ì¼ë¡ ì§ì í íìê° ìë¤.</emphasis>"
+
+#: index.docbook:220
+msgid "The following code will update <literal>parent</literal> and <literal>child</literal> and insert <literal>newChild</literal>."
+msgstr "ë¤ì ì½ëë <literal>parent</literal>ì <literal>child</literal>를 ì
ë°ì´í¸íê³ <literal>newChild</literal>를 ì½ì
ìí¬ ê²ì´ë¤."
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[//parent and child were both loaded in a previous session\n"
+ "parent.addChild(child);\n"
+ "Child newChild = new Child();\n"
+ "parent.addChild(newChild);\n"
+ "session.update(parent);\n"
+ "session.flush();]]>"
+msgstr ""
+ "<![CDATA[//parent and child were both loaded in a previous session\n"
+ "parent.addChild(child);\n"
+ "Child newChild = new Child();\n"
+ "parent.addChild(newChild);\n"
+ "session.update(parent);\n"
+ "session.flush();]]>"
+
+#: index.docbook:227
+msgid "Well, that's all very well for the case of a generated identifier, but what about assigned identifiers and composite identifiers? This is more difficult, since Hibernate can't use the identifier property to distinguish between a newly instantiated object (with an identifier assigned by the user) and an object loaded in a previous session. In this case, Hibernate will either use the timestamp or version property, or will actually query the second-level cache or, worst case, the database, to see if the row exists."
+msgstr "ë¬¼ë¡ ê·¸ê²ì ìì±ëë ìë³ìì ê²½ì°ìë 모ë ë§¤ì° ì¢ì§ë§, í ë¹ëë ìë³ìë¤ê³¼ composite ìë³ìë¤ì ëí´ìë ì´ë íê°? ì´ê²ì ë³´ë¤ ì´ë µë¤. ìëíë©´ Hibernateë (ì¬ì©ìì ìí´ í ë¹ë ìë³ì를 ê°ì§) ìë¡ì´ ì´ê¸°í ë ê°ì²´ì ì´ì ì¸ì
ìì ë¡ëëìë ê°ì²´ ì¬ì´ë¥¼ 구ë³ì§ëë° ìë³ì íë¡í¼í°ë¥¼ ì¬ì©í ì ì기 ë문ì´ë¤. ì´ ê²½ì°ì, Hibernateë timestamp íë¡í¼í° ëë version íë¡í¼í°ë¥¼ ì¬ì©íê±°ë ì¤ì ë¡ second-level ìºì를 ì§ìíê±°ë ê°ì¥ ëì ê²½ì°ìë íì´ ì¡´ì¬íëì§ë¥¼ ì기 ìí´ ë°ì´í°ë² ì´ì¤ë¥¼ ì§ìí ê²ì´ë¤."
+
+#: index.docbook:260
+msgid "Conclusion"
+msgstr "<title>ê²°ë¡ </title>"
+
+#: index.docbook:262
+msgid "There is quite a bit to digest here and it might look confusing first time around. However, in practice, it all works out very nicely. Most Hibernate applications use the parent / child pattern in many places."
+msgstr "ì¬ê¸°ì ìì§í ê²ì´ ì½ê° ìê³ ê·¸ê²ì ì²ììë í¼ëì¤ë¬ì´ ê²ì²ë¼ ë³´ì¼ ì ìë¤. íì§ë§ ì¤ì ë¡ ê·¸ê²ì 모ë ë§¤ì° ì¢ê² ëìíë¤. ëë¶ë¶ì Hibernate ì´í리ì¼ì´ì
ë¤ì ë§ì ì¥ìë¤ìì ë¶ëª¨/ìì í¨í´ì ì¬ì©íë¤."
+
+#: index.docbook:267
+msgid "We mentioned an alternative in the first paragraph. None of the above issues exist in the case of <literal><composite-element></literal> mappings, which have exactly the semantics of a parent / child relationship. Unfortunately, there are two big limitations to composite element classes: composite elements may not own collections, and they should not be the child of any entity other than the unique parent."
+msgstr "ì°ë¦¬ë 첫 ë²ì§¸ ë¨ë½ìì ëìì ì¸ê¸íë¤. ìì ìì ë¤ ì¤ ì´ë ê²ë ì ííê² ë¶ëª¨/ìì ê´ê³ì ì미를 ê°ì§, <literal><composite-element></literal> 매íë¤ì ê²½ì°ìë ì¡´ì¬íì§ ìëë¤. ë¶ííë, composite ìì í´ëì¤ë¤ì ëí ë ê°ì 커ë¤ë ì ì½ë¤ì´ ì¡´ì¬íë¤: composite ììë¤ì ì½ë ì
ë¤ì ìì íì§ ìê³ , ê·¸ê²ë¤ì ì ì¼í ë¶ëª¨ê° ìë ë¤ë¥¸ ì´ë¤ ìí°í°ì ììì¼ ìë ìë¤."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/example_weblog.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/example_weblog.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/example_weblog.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,840 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Weblog Application"
+msgstr "ìì : Weblog ì´í리ì¼ì´ì
"
+
+#: index.docbook:8
+msgid "Persistent Classes"
+msgstr "ìì í´ëì¤ë¤"
+
+#: index.docbook:10
+msgid "The persistent classes represent a weblog, and an item posted in a weblog. They are to be modelled as a standard parent/child relationship, but we will use an ordered bag, instead of a set."
+msgstr "ìì í´ëì¤ë¤ì ì¹ë¡ê·¸, ê·¸ë¦¬ê³ ì¹ ë¡ê·¸ ë´ì ê²ìë í목ì íííë¤.ê·¸ê²ë¤ì íì¤ ë¶ëª¨/ìì ê´ê³ë¡ 모íí ë ê²ì´ì§ë§, ì°ë¦¬ë set ëì ì ììì§ìì§ bag를 ì¬ì©í ê²ì´ë¤."
+
+#: index.docbook:16
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.List;\n"
+ "\n"
+ "public class Blog {\n"
+ " private Long _id;\n"
+ " private String _name;\n"
+ " private List _items;\n"
+ "\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public List getItems() {\n"
+ " return _items;\n"
+ " }\n"
+ " public String getName() {\n"
+ " return _name;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setItems(List list) {\n"
+ " _items = list;\n"
+ " }\n"
+ " public void setName(String string) {\n"
+ " _name = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.List;\n"
+ "\n"
+ "public class Blog {\n"
+ " private Long _id;\n"
+ " private String _name;\n"
+ " private List _items;\n"
+ "\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public List getItems() {\n"
+ " return _items;\n"
+ " }\n"
+ " public String getName() {\n"
+ " return _name;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setItems(List list) {\n"
+ " _items = list;\n"
+ " }\n"
+ " public void setName(String string) {\n"
+ " _name = string;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:18
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.text.DateFormat;\n"
+ "import java.util.Calendar;\n"
+ "\n"
+ "public class BlogItem {\n"
+ " private Long _id;\n"
+ " private Calendar _datetime;\n"
+ " private String _text;\n"
+ " private String _title;\n"
+ " private Blog _blog;\n"
+ "\n"
+ " public Blog getBlog() {\n"
+ " return _blog;\n"
+ " }\n"
+ " public Calendar getDatetime() {\n"
+ " return _datetime;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public String getText() {\n"
+ " return _text;\n"
+ " }\n"
+ " public String getTitle() {\n"
+ " return _title;\n"
+ " }\n"
+ " public void setBlog(Blog blog) {\n"
+ " _blog = blog;\n"
+ " }\n"
+ " public void setDatetime(Calendar calendar) {\n"
+ " _datetime = calendar;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setText(String string) {\n"
+ " _text = string;\n"
+ " }\n"
+ " public void setTitle(String string) {\n"
+ " _title = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.text.DateFormat;\n"
+ "import java.util.Calendar;\n"
+ "\n"
+ "public class BlogItem {\n"
+ " private Long _id;\n"
+ " private Calendar _datetime;\n"
+ " private String _text;\n"
+ " private String _title;\n"
+ " private Blog _blog;\n"
+ "\n"
+ " public Blog getBlog() {\n"
+ " return _blog;\n"
+ " }\n"
+ " public Calendar getDatetime() {\n"
+ " return _datetime;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public String getText() {\n"
+ " return _text;\n"
+ " }\n"
+ " public String getTitle() {\n"
+ " return _title;\n"
+ " }\n"
+ " public void setBlog(Blog blog) {\n"
+ " _blog = blog;\n"
+ " }\n"
+ " public void setDatetime(Calendar calendar) {\n"
+ " _datetime = calendar;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setText(String string) {\n"
+ " _text = string;\n"
+ " }\n"
+ " public void setTitle(String string) {\n"
+ " _title = string;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:23
+msgid "Hibernate Mappings"
+msgstr "Hibernate 매íë¤"
+
+#: index.docbook:25
+msgid "The XML mappings should now be quite straightforward."
+msgstr "XML 매íë¤ì ì´ì ë§¤ì° ê°ë¨í´ì§ ê²ì´ë¤."
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"Blog\"\n"
+ " table=\"BLOGS\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ "\n"
+ " <bag\n"
+ " name=\"items\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"DATE_TIME\"\n"
+ " cascade=\"all\">\n"
+ "\n"
+ " <key column=\"BLOG_ID\"/>\n"
+ " <one-to-many class=\"BlogItem\"/>\n"
+ "\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"Blog\"\n"
+ " table=\"BLOGS\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ "\n"
+ " <bag\n"
+ " name=\"items\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"DATE_TIME\"\n"
+ " cascade=\"all\">\n"
+ "\n"
+ " <key column=\"BLOG_ID\"/>\n"
+ " <one-to-many class=\"BlogItem\"/>\n"
+ "\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:31
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"BlogItem\"\n"
+ " table=\"BLOG_ITEMS\"\n"
+ " dynamic-update=\"true\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ITEM_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"title\"\n"
+ " column=\"TITLE\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"text\"\n"
+ " column=\"TEXT\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"datetime\"\n"
+ " column=\"DATE_TIME\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <many-to-one\n"
+ " name=\"blog\"\n"
+ " column=\"BLOG_ID\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"BlogItem\"\n"
+ " table=\"BLOG_ITEMS\"\n"
+ " dynamic-update=\"true\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ITEM_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"title\"\n"
+ " column=\"TITLE\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"text\"\n"
+ " column=\"TEXT\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"datetime\"\n"
+ " column=\"DATE_TIME\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <many-to-one\n"
+ " name=\"blog\"\n"
+ " column=\"BLOG_ID\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:36
+msgid "Hibernate Code"
+msgstr "Hibernate ì½ë"
+
+#: index.docbook:38
+msgid "The following class demonstrates some of the kinds of things we can do with these classes, using Hibernate."
+msgstr "ë¤ì í´ëì¤ë ì°ë¦¬ê° Hibernate를 ì¬ì©íì¬ ì´ë¤ í´ëì¤ë¤ë¡ íí ì ìë ëªëª ì¢
ë¥ì ê²ë¤ì ì¤ëª
íë¤."
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.ArrayList;\n"
+ "import java.util.Calendar;\n"
+ "import java.util.Iterator;\n"
+ "import java.util.List;\n"
+ "\n"
+ "import org.hibernate.HibernateException;\n"
+ "import org.hibernate.Query;\n"
+ "import org.hibernate.Session;\n"
+ "import org.hibernate.SessionFactory;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.cfg.Configuration;\n"
+ "import org.hibernate.tool.hbm2ddl.SchemaExport;\n"
+ "\n"
+ "public class BlogMain {\n"
+ " \n"
+ " private SessionFactory _sessions;\n"
+ " \n"
+ " public void configure() throws HibernateException {\n"
+ " _sessions = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class)\n"
+ " .buildSessionFactory();\n"
+ " }\n"
+ " \n"
+ " public void exportTables() throws HibernateException {\n"
+ " Configuration cfg = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class);\n"
+ " new SchemaExport(cfg).create(true, true);\n"
+ " }\n"
+ " \n"
+ " public Blog createBlog(String name) throws HibernateException {\n"
+ " \n"
+ " Blog blog = new Blog();\n"
+ " blog.setName(name);\n"
+ " blog.setItems( new ArrayList() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.persist(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Blog blog, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setBlog(blog);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " blog.getItems().add(item);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Long blogid, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Blog blog = (Blog) session.load(Blog.class, blogid);\n"
+ " item.setBlog(blog);\n"
+ " blog.getItems().add(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(BlogItem item, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " item.setText(text);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(Long itemid, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);\n"
+ " item.setText(text);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public List listAllBlogNamesAndItemCounts(int max)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"select blog.id, blog.name, count(blogItem) \" +\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join blog.items as blogItem \" +\n"
+ " \"group by blog.name, blog.id \" +\n"
+ " \"order by max(blogItem.datetime)\"\n"
+ " );\n"
+ " q.setMaxResults(max);\n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ " \n"
+ " public Blog getBlogAndAllItems(Long blogid)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " Blog blog = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join fetch blog.items \" +\n"
+ " \"where blog.id = :blogid\"\n"
+ " );\n"
+ " q.setParameter(\"blogid\", blogid);\n"
+ " blog = (Blog) q.uniqueResult();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public List listBlogsAndRecentItems() throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"inner join blog.items as blogItem \" +\n"
+ " \"where blogItem.datetime > :minDate\"\n"
+ " );\n"
+ "\n"
+ " Calendar cal = Calendar.getInstance();\n"
+ " cal.roll(Calendar.MONTH, false);\n"
+ " q.setCalendar(\"minDate\", cal);\n"
+ " \n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.ArrayList;\n"
+ "import java.util.Calendar;\n"
+ "import java.util.Iterator;\n"
+ "import java.util.List;\n"
+ "\n"
+ "import org.hibernate.HibernateException;\n"
+ "import org.hibernate.Query;\n"
+ "import org.hibernate.Session;\n"
+ "import org.hibernate.SessionFactory;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.cfg.Configuration;\n"
+ "import org.hibernate.tool.hbm2ddl.SchemaExport;\n"
+ "\n"
+ "public class BlogMain {\n"
+ " \n"
+ " private SessionFactory _sessions;\n"
+ " \n"
+ " public void configure() throws HibernateException {\n"
+ " _sessions = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class)\n"
+ " .buildSessionFactory();\n"
+ " }\n"
+ " \n"
+ " public void exportTables() throws HibernateException {\n"
+ " Configuration cfg = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class);\n"
+ " new SchemaExport(cfg).create(true, true);\n"
+ " }\n"
+ " \n"
+ " public Blog createBlog(String name) throws HibernateException {\n"
+ " \n"
+ " Blog blog = new Blog();\n"
+ " blog.setName(name);\n"
+ " blog.setItems( new ArrayList() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.persist(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Blog blog, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setBlog(blog);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " blog.getItems().add(item);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Long blogid, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Blog blog = (Blog) session.load(Blog.class, blogid);\n"
+ " item.setBlog(blog);\n"
+ " blog.getItems().add(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(BlogItem item, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " item.setText(text);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(Long itemid, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);\n"
+ " item.setText(text);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public List listAllBlogNamesAndItemCounts(int max)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"select blog.id, blog.name, count(blogItem) \" +\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join blog.items as blogItem \" +\n"
+ " \"group by blog.name, blog.id \" +\n"
+ " \"order by max(blogItem.datetime)\"\n"
+ " );\n"
+ " q.setMaxResults(max);\n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ " \n"
+ " public Blog getBlogAndAllItems(Long blogid)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " Blog blog = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join fetch blog.items \" +\n"
+ " \"where blog.id = :blogid\"\n"
+ " );\n"
+ " q.setParameter(\"blogid\", blogid);\n"
+ " blog = (Blog) q.uniqueResult();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public List listBlogsAndRecentItems() throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"inner join blog.items as blogItem \" +\n"
+ " \"where blogItem.datetime > :minDate\"\n"
+ " );\n"
+ "\n"
+ " Calendar cal = Calendar.getInstance();\n"
+ " cal.roll(Calendar.MONTH, false);\n"
+ " q.setCalendar(\"minDate\", cal);\n"
+ " \n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ "}]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/filters.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/filters.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/filters.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,194 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Filtering data"
+msgstr "ë°ì´í° íí°ë§í기"
+
+#: index.docbook:7
+msgid "Hibernate3 provides an innovative new approach to handling data with \"visibility\" rules. A <emphasis>Hibernate filter</emphasis> is a global, named, parameterized filter that may be enabled or disabled for a particular Hibernate session."
+msgstr "Hibernate3ì íì ì ì¸ \"ê°ìì±(visibility)\" ê·ì¹ë¤ë¡ì ë°ì´í°ë¥¼ ì²ë¦¬íë ìë¡ì´ ì ê·¼ë²ì ì ê³µíë¤. <emphasis>Hibernate íí°</emphasis>ë í¹ì Hibernate ì¸ì
ì ëí´ ì´ì© ê°ë¥íê² ëê±°ë ì´ì© ë¶ê°ë¥íê² ë ìë ìë ì ì, ëª
ëª
ë íë¼ë¯¸í°í ë íí°ì´ë¤."
+
+#: index.docbook:14
+msgid "Hibernate filters"
+msgstr "Hibernate íí°ë¤"
+
+#: index.docbook:16
+msgid "Hibernate3 adds the ability to pre-define filter criteria and attach those filters at both a class and a collection level. A filter criteria is the ability to define a restriction clause very similiar to the existing \"where\" attribute available on the class and various collection elements. Except these filter conditions can be parameterized. The application can then make the decision at runtime whether given filters should be enabled and what their parameter values should be. Filters can be used like database views, but parameterized inside the application."
+msgstr "Hibernate3ì íí° ê¸°ì¤(criteria)ì 미리 ì ìíê³ í´ëì¤ ë 벨과 ì½ë ì
ë 벨 ìììì ê·¸ë¤ íí°ë¤ì 첨ë¶í ë¥ë ¥ì ì¶ê°ìí¨ë¤. íí° ê¸°ì¤(criteria)ì í´ëì¤ ììì ë¤ìí ì½ë ì
ììë¤ì ëí´ ì´ì© ê°ë¥í 기존ì \"where\" ìì±ê³¼ ë§¤ì° ì ì¬í íëì ì í ì ì ì ìíë ë¥ë ¥ì´ë¤. ì´ê²ë¤ì ì ì¸íë©´ íí° ì¡°ê±´ë¤ì íë¼ë¯¸í°í ë ì ìë¤. ê·¸ë ì´í리ì¼ì´ì
ì 주ì´ì§ íí°ë¤ì´ ì´ì© ê°ë¥íì§ ì¬ë¶ ê·¸ë¦¬ê³ ê·¸ë¤ íë¼ë¯¸í° ê°ë¤ì´ 무ìì´ì´ì¼ íëì§ë¥¼ ì¤í ìì ê²°ì í ì ìë¤. íí°ë¤ì ë°ì´í°ë² ì´ì¤ ë·°ë¤ ì²ë¼ ì¬ì©ë ì ìì§ë§, ì´í리ì¼ì´ì
ë´ë¶ì íë¼ë¯¸í°í ëë¤."
+
+#: index.docbook:26
+msgid "In order to use filters, they must first be defined and then attached to the appropriate mapping elements. To define a filter, use the <literal><filter-def/></literal> element within a <literal><hibernate-mapping/></literal> element:"
+msgstr "íí°ë¤ì ì¬ì©í기 ìí´ì, ê·¸ê²ë¤ì 먼ì ì ìëê³ ëì ì ì í 매í ììë¤ì 첨ê°ëì´ì¼ íë¤. íí°ë¥¼ ì ìí기 ìí´, <literal><hibernate-mapping/></literal> ìì ë´ë¶ì <literal><filter-def/></literal> ìì를 ì¬ì©íë¼:"
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\">\n"
+ " <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
+ "</filter-def>]]>"
+msgstr ""
+ "<![CDATA[<filter-def name=\"myFilter\">\n"
+ " <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
+ "</filter-def>]]>"
+
+#: index.docbook:34
+msgid "Then, this filter can be attached to a class:"
+msgstr "ê·¸ë ì´ íí°ë í´ëì¤ì 첨ê°ë ì ìë¤:"
+
+#: index.docbook:38
+msgid ""
+ "<![CDATA[<class name=\"myClass\" ...>\n"
+ " ...\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"myClass\" ...>\n"
+ " ...\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:40
+msgid "or, to a collection:"
+msgstr "ëë ì½ë ì
ì 첨ê°ë ì ìë¤:"
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<set ...>\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set ...>\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:46
+msgid "or, even to both (or multiples of each) at the same time."
+msgstr "ëë ëìì ììì(ëë ê°ê°ì ì¬ë¬ë²) 첨ê°ë ì ìë¤."
+
+#: index.docbook:50
+msgid "The methods on <literal>Session</literal> are: <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, and <literal>disableFilter(String filterName)</literal>. By default, filters are <emphasis>not</emphasis> enabled for a given session; they must be explcitly enabled through use of the <literal>Session.enabledFilter()</literal> method, which returns an instance of the <literal>Filter</literal> interface. Using the simple filter defined above, this would look like:"
+msgstr "<literal>Session</literal> ìì ë©ìëë¤ì ë¤ìê³¼ ê°ë¤: <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, <literal>disableFilter(String filterName)</literal>. ëí´í¸ë¡, íí°ë¤ì 주ì´ì§ ì¸ì
ì ëí´ ì´ì© ê°ë¥íì§ <emphasis>ìë¤</emphasis>; ê·¸ê²ë¤ì <literal>Session.enabledFilter()</literal> ë©ìëì ì¬ì©ì íµí´ ëª
ìì ì¼ë¡ ì´ì© ê°ë¥íê² ëì´ì¼ íë¤. <literal>Session.enabledFilter()</literal>ë <literal>Filter</literal> ì¸í°íì´ì¤ì ì¸ì¤í´ì¤ë¥¼ ë°ííë¤. ìì ì ìë ê°ë¨í íí°ë¥¼ ì¬ì©íë©´, ì´ê²ì ë¤ìê³¼ ê°ì ê²ì´ë¤:"
+
+#: index.docbook:59
+msgid "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
+msgstr "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
+
+#: index.docbook:61
+msgid "Note that methods on the org.hibernate.Filter interface do allow the method-chaining common to much of Hibernate."
+msgstr "org.hibernate.Filter ì¸í°íì´ì¤ ìì ë©ìëë¤ì Hibernateì ë§¤ì° ê³µíµë method-chainingì íì©íë¤ë ì ì ë
¸í¸íë¼."
+
+#: index.docbook:65
+msgid "A full example, using temporal data with an effective record date pattern:"
+msgstr "ì í¨í ê¸°ë¡ ë ì§ í¨í´ì ê°ì§ ìê° ë°ì´í°ë¥¼ ì¬ì©íë ì ì²´ ìì :"
+
+#: index.docbook:69
+msgid ""
+ "<![CDATA[<filter-def name=\"effectiveDate\">\n"
+ " <filter-param name=\"asOfDate\" type=\"date\"/>\n"
+ "</filter-def>\n"
+ "\n"
+ "<class name=\"Employee\" ...>\n"
+ "...\n"
+ " <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>\n"
+ " <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>\n"
+ " <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>\n"
+ "...\n"
+ " <!--\n"
+ " Note that this assumes non-terminal records have an eff_end_dt set to\n"
+ " a max db date for simplicity-sake\n"
+ " -->\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Department\" ...>\n"
+ "...\n"
+ " <set name=\"employees\" lazy=\"true\">\n"
+ " <key column=\"dept_id\"/>\n"
+ " <one-to-many class=\"Employee\"/>\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<filter-def name=\"effectiveDate\">\n"
+ " <filter-param name=\"asOfDate\" type=\"date\"/>\n"
+ "</filter-def>\n"
+ "\n"
+ "<class name=\"Employee\" ...>\n"
+ "...\n"
+ " <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>\n"
+ " <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>\n"
+ " <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>\n"
+ "...\n"
+ " <!--\n"
+ " Note that this assumes non-terminal records have an eff_end_dt set to\n"
+ " a max db date for simplicity-sake\n"
+ " -->\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Department\" ...>\n"
+ "...\n"
+ " <set name=\"employees\" lazy=\"true\">\n"
+ " <key column=\"dept_id\"/>\n"
+ " <one-to-many class=\"Employee\"/>\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:71
+msgid "Then, in order to ensure that you always get back currently effective records, simply enable the filter on the session prior to retrieving employee data:"
+msgstr "ê·¸ë ë¹ì ì´ íì¬ ì í¨í ë ì½ëë¤ì íì ì»ë ê²ì íì¤í í기 ìí´, employee ë°ì´í°ë¥¼ ê²ìí기 ì ì ì¸ì
ìì íí°ë¥¼ ê°ë¨íê² ì´ì© ê°ë¥íê² íë¼:"
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[Session session = ...;\n"
+ "session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());\n"
+ "List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")\n"
+ " .setLong(\"targetSalary\", new Long(1000000))\n"
+ " .list();\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[Session session = ...;\n"
+ "session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());\n"
+ "List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")\n"
+ " .setLong(\"targetSalary\", new Long(1000000))\n"
+ " .list();\n"
+ "]]>"
+
+#: index.docbook:78
+msgid "In the HQL above, even though we only explicitly mentioned a salary constraint on the results, because of the enabled filter the query will return only currently active employees who have a salary greater than a million dollars."
+msgstr "ìì HQL ìì, ì¬ì§ì´ ë¹ë¡ ì°ë¦¬ê° ê²°ê³¼ë¤ì ëí ë´ê¸ 컨ì¤í¸ë ì¸í¸ë¥¼ ëª
ìì ì¼ë¡ ì¸ê¸ë§ íìì§ë¼ë, ì´ì© ê°ë¥í íí° ë문ì ê·¸ ì§ìë ë´ê¸ì´ ë°±ë§ë¬ë¬ ì´ìì¸ íì¬ ì±ì©ì¤ì¸ ì§ìë¤ë§ì ë°íí ê²ì´ë¤."
+
+#: index.docbook:84
+msgid "Note: if you plan on using filters with outer joining (either through HQL or load fetching) be careful of the direction of the condition expression. Its safest to set this up for left outer joining; in general, place the parameter first followed by the column name(s) after the operator."
+msgstr "ë
¸í¸: ë§ì¼ ë¹ì ì´ outer ì¡°ì¸ì ëí´ íí°ë¤ì ì¬ì©í ê³íì´ë¼ë©´ (HQLì´ë ë¡ë íì¹ì´ë ) ì¡°ê±´ ííìì ë°©í¥ì 주ìíë¼. ì´ê²ì left outer joinì¼ë¡ ì¤ì íë ê²ì´ ê°ì¥ ìì íë¤; ì¼ë°ì ì¼ë¡ ì¤í¼ë ì´í° ë¤ì ìë ì»¬ë¼ ì´ë¦(ë¤)ì´ ë¤ë°ë¥´ë 첫ë²ì§¸ì íë¼ë¯¸í°ë¥¼ ìì¹ì§ìë¼."
+
+#: index.docbook:91
+msgid "After being defined a filter might be attached to multiple entities and/or collections each with its own condition. That can be tedious when the conditions are the same each time. Thus <literal><filter-def/></literal> allows defining a default condition, either as an attribute or CDATA:"
+msgstr "íí°ê° ì ìë íìë ê·¸ê² ìì ì ì¡°ê±´ì ëí´ ê°ê° ì¬ë¬ ê°ì ìí°í°ë¤ ê·¸ë¦¬ê³ /ëë ì½ë ì
ë¤ì 첨ê°ë ì ìë¤. ì¡°ê±´ë¤ì´ ë§¤ë² ëì¼í ë ê·¸ê²ì ì§ë£¨í ì ìë¤. ë°ë¼ì <literal><filter-def/></literal>ì attribute ë CDATA ë ì´ëê²ì´ë ëí´í¸ ì¡°ê±´ì ì ìíë ê²ì íì©í´ì¤ë¤:"
+
+#: index.docbook:98
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\" condition=\"abc > xyz\">...</filter-def>\n"
+ "<filter-def name=\"myOtherFilter\">abc=xyz</filter-def>]]>"
+msgstr ""
+ "<![CDATA[<filter-def name=\"myFilter\" condition=\"abc > xyz\">...</filter-def>\n"
+ "<filter-def name=\"myOtherFilter\">abc=xyz</filter-def>]]>"
+
+#: index.docbook:100
+msgid "This default condition will then be used whenever the filter is attached to something without specifying a condition. Note that this means you can give a specific condition as part of the attachment of the filter which overrides the default condition in that particular case."
+msgstr "ê·¸ë ì´ ëí´í¸ ì¡°ê±´ì ê·¸ íí°ê° ì´ë¤ ì¡°ê±´ì ì§ì í¨ì´ ìì´ ì´ë¤ ê²ì 첨ê°ë ëë§ë¤ ì¬ì©ë ì ìë¤. ì´ê²ì ë¹ì ì´ í¹ì í ê²½ì°ì ëí´í¸ ì¡°ê±´ì ì¤ë²ë¼ì´ë ìí¤ë íí°ì ì²¨ê° ë¶ë¶ì¼ë¡ì í¹ì ì¡°ê±´ì ë¶ì¬í ì ììì ì미í¨ì ë
¸í¸íë¼."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/inheritance_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/inheritance_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/inheritance_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,642 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Inheritance Mapping"
+msgstr "ìì 매í"
+
+#: index.docbook:8
+msgid "The Three Strategies"
+msgstr "ì¸ ê°ì§ ë°©ëë¤"
+
+#: index.docbook:10
+msgid "Hibernate supports the three basic inheritance mapping strategies:"
+msgstr "Hibernateë ì¸ ê°ì§ 기본ì ì¸ ìì 매í ë°©ëë¤ì ì§ìíë¤:"
+
+#: index.docbook:16
+msgid "table per class hierarchy"
+msgstr "table per class hierarchy"
+
+#: index.docbook:21
+msgid "<para>table per subclass</para>"
+msgstr "<para>table per subclass</para>"
+
+#: index.docbook:26
+msgid "table per concrete class"
+msgstr "table per concrete class"
+
+#: index.docbook:32
+msgid "In addition, Hibernate supports a fourth, slightly different kind of polymorphism:"
+msgstr "ê²ë¤ê° Hibernateë ë¤ ë²ì§¸ì ì½ê° ë¤ë¥¸ ì¢
ë¥ì ë¤íì±ì ì§ìíë¤:"
+
+#: index.docbook:39
+msgid "implicit polymorphism"
+msgstr "implicit polymorphism(í¨ì¶ì ì¸ ë¤íì±)"
+
+#: index.docbook:45
+msgid "It is possible to use different mapping strategies for different branches of the same inheritance hierarchy, and then make use of implicit polymorphism to achieve polymorphism across the whole hierarchy. However, Hibernate does not support mixing <literal><subclass></literal>, and <literal><joined-subclass></literal> and <literal><union-subclass></literal> mappings under the same root <literal><class></literal> element. It is possible to mix together the table per hierarchy and table per subclass strategies, under the the same <literal><class></literal> element, by combining the <literal><subclass></literal> and <literal><join></literal> elements (see below)."
+msgstr "ëì¼í ìì ê³ì¸µêµ¬ì¡°ì ë¤ë¥¸ ê°ì§ë¤ì ëí´ ë¤ë¥¸ 매í ë°©ëë¤ì ì¬ì©íë ê²ì´ ê°ë¥íê³ , ê·¸ë° ë¤ì ì ì²´ ê³ì¸µ 구조를 ê°ë¡ì§ë¬ ë¤íì±ì ì±ì·¨íëë° í¨ì¶ì ì¸ ë¤íì±ì ì¬ì©íë¼. íì§ë§ Hibernateë ëì¼í ë£¨í¸ <literal><class></literal> ìì íìì <literal><subclass></literal> ê·¸ë¦¬ê³ <literal><joined-subclass></literal> ê·¸ë¦¬ê³ <literal><union-subclass></literal> 매íë¤ì í¼í©íë ê²ì ì§ìíì§ ìëë¤. ëì¼í <literal><class></literal> ìì íìì <literal><subclass></literal> ììì <literal><join></literal> ìì를 ê²°í©ìí´ì¼ë¡ì¨ table per hierarchy ë°©ëì table per subclass ë°©ë를 í¨ê» í¼í©ìí¤ë ê²ì´ ê°ë¥íë¤(ìë를 ë³´ë¼)."
+
+#: index.docbook:59
+msgid "It is possible to define <literal>subclass</literal>, <literal>union-subclass</literal>, and <literal>joined-subclass</literal> mappings in separate mapping documents, directly beneath <literal>hibernate-mapping</literal>. This allows you to extend a class hierachy just by adding a new mapping file. You must specify an <literal>extends</literal> attribute in the subclass mapping, naming a previously mapped superclass. Note: Previously this feature made the ordering of the mapping documents important. Since Hibernate3, the ordering of mapping files does not matter when using the extends keyword. The ordering inside a single mapping file still needs to be defined as superclasses before subclasses."
+msgstr "ë³ëì 매í 문ì ë´ì, <literal>hibernate-mapping</literal> ë°ë¡ ë°ì <literal>subclass</literal>, <literal>union-subclass</literal>, ê·¸ë¦¬ê³ <literal>joined-subclass</literal> 매íë¤ì ì ìíë ê²ì´ ê°ë¥íë¤. ì´ê²ì ë¨ì§ íëì ìë¡ì´ 매í íì¼ì ì¶ê°ìì¼ì íëì class ê³ì¸µêµ¬ì¡°ë¥¼ íì¥íë ê²ì ë¹ì ìê² íì©í´ì¤ë¤. ë¹ì ì subclass 매í ë´ì ìì 매íë ìí¼í´ëì¤ë¥¼ ëª
ëª
íì¬ <literal>extends</literal> ìì±ì ì§ì í´ì¼ íë¤. ë
¸í¸ : ëª
ë°±íê² ì´ í¹ì§ì 매í 문ìë¤ì ìì를 ì¤ìíê²ë ë§ë¤ìë¤. Hibernate3 ì´íë¡, 매í íì¼ë¤ì ììë extends í¤ìë를 ì¬ì©í ë ìê´ìë¤. íëì 매í íì¼ ë´ì ììë ì¬ì í ìë¸í´ëì¤ë¤ì ìì ìí¼í´ëì¤ë¤ì ì ìíëë° ì¬ì í íìíë¤."
+
+#: index.docbook:70
+msgid ""
+ "<![CDATA[\n"
+ " <hibernate-mapping>\n"
+ " <subclass name=\"DomesticCat\" extends=\"Cat\" discriminator-value=\"D\">\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </subclass>\n"
+ " </hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ " <hibernate-mapping>\n"
+ " <subclass name=\"DomesticCat\" extends=\"Cat\" discriminator-value=\"D\">\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </subclass>\n"
+ " </hibernate-mapping>]]>"
+
+#: index.docbook:74
+msgid "Table per class hierarchy"
+msgstr "Table per class hierarchy"
+
+#: index.docbook:76
+msgid "Suppose we have an interface <literal>Payment</literal>, with implementors <literal>CreditCardPayment</literal>, <literal>CashPayment</literal>, <literal>ChequePayment</literal>. The table per hierarchy mapping would look like:"
+msgstr "ì°ë¦¬ê° <literal>CreditCardPayment</literal>, <literal>CashPayment</literal>, <literal>ChequePayment</literal> 구íìë¤ì ê°ì§ íëì ì¸í°íì´ì¤ <literal>Payment</literal>를 ê°ê³ ìë¤ê³ ê°ì íì. table per hierarchy 매íì ë¤ìê³¼ ê°ì ê²ì´ë¤:"
+
+#: index.docbook:83
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:85
+msgid "Exactly one table is required. There is one big limitation of this mapping strategy: columns declared by the subclasses, such as <literal>CCTYPE</literal>, may not have <literal>NOT NULL</literal> constraints."
+msgstr "ì íí íëì í
ì´ë¸ì´ íìíë¤. ì´ ë§¤í ë°©ëìë ë¤ìì íëì í° ì ì½ì´ ì¡´ì¬íë¤: <literal>CCTYPE</literal>ê³¼ ê°ì´, ìë¸ í´ëì¤ë¤ì ìí´ ì ì¸ë 컬ë¼ë¤ì <literal>NOT NULL</literal> 컨ì¤í¸ë ì¸í¸ë¤ì ê°ì§ ì ìë¤."
+
+#: index.docbook:94
+msgid "Table per subclass"
+msgstr "Table per subclass"
+
+#: index.docbook:96
+msgid "A table per subclass mapping would look like:"
+msgstr "table per subclass 매íì ë¤ìê³¼ ê°ì ê²ì´ë¤:"
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <joined-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <joined-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:102
+msgid "Four tables are required. The three subclass tables have primary key associations to the superclass table (so the relational model is actually a one-to-one association)."
+msgstr "ë¤ ê°ì í
ì´ë¸ë¤ì´ íìíë¤. ì¸ ê°ì ìë¸í´ëì¤ í
ì´ë¸ë¤ì ìí¼í´ëì¤ í
ì´ë¸ì ëí íë¼ì´ë¨¸ë¦¬ í¤ ì°ê´ë¤ì ê°ëë¤ (ë°ë¼ì ê·¸ ê´ê³í 모íì ì¤ì ë¡ one-to-one ì°ê´ì´ë¤)."
+
+#: index.docbook:111
+msgid "Table per subclass, using a discriminator"
+msgstr "discriminator를 ì¬ì©íë, table per subclass"
+
+#: index.docbook:113
+msgid "Note that Hibernate's implementation of table per subclass requires no discriminator column. Other object/relational mappers use a different implementation of table per subclass which requires a type discriminator column in the superclass table. The approach taken by Hibernate is much more difficult to implement but arguably more correct from a relational point of view. If you would like to use a discriminator column with the table per subclass strategy, you may combine the use of <literal><subclass></literal> and <literal><join></literal>, as follow:"
+msgstr "table-per-subclassì ëí Hibernateì 구íì discriminator(íë³ì) 컬ë¼ì íìë¡ íì§ ììì ë
¸í¸íë¼. ë¤ë¥¸ ê°ì²´/ê´ê³í 매í기ë¤ì ìí¼í´ëì¤ í
ì´ë¸ ìì íëì íì
íë³ì 컬ë¼ì íìë¡ íë table-per-subclassì ëí ë¤ë¥¸ 구íì ì¬ì©íë¤. Hibernateì ìí´ ì±íë ì ê·¼ë²ì 구ííê¸°ê° í¨ì¬ ë ì´ë µì§ë§ ê´ê³í ê´ì ììë ìë§ í림ìì´ ë³´ë¤ ë ì ííë¤. ë§ì¼ ë¹ì ì´ table per subclass ë°©ëì ëí´ íëì íë³ì 컬ë¼ì ì¬ì©íê³ ì¶ë¤ë©´, ë¹ì ì ë¤ìê³¼ ê°ì´ <literal><subclass></literal>ì <literal><join></literal>ì ì¬ì©ì ê²°í©ìí¬ ìë ìë¤:"
+
+#: index.docbook:125
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " <join table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " <join table=\"CHEQUE_PAYMENT\" fetch=\"select\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " <join table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " <join table=\"CHEQUE_PAYMENT\" fetch=\"select\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:127
+msgid "The optional <literal>fetch=\"select\"</literal> declaration tells Hibernate not to fetch the <literal>ChequePayment</literal> subclass data using an outer join when querying the superclass."
+msgstr "ì íì ì¸ <literal>fetch=\"select\"</literal> ì ì¸ì ìí¼í´ëì¤ë¥¼ ì§ìí ë outer joinì ì¬ì©íì¬ <literal>ChequePayment</literal> ìë¸í´ëì¤ ë°ì´í°ë¥¼ íì¹ìí¤ì§ ìëë¡ Hibernateìê² ìë ¤ì¤ë¤."
+
+#: index.docbook:136
+msgid "Mixing table per class hierarchy with table per subclass"
+msgstr "table per class hierarchyì table per subclass를 í¼í©í기"
+
+#: index.docbook:138
+msgid "You may even mix the table per hierarchy and table per subclass strategies using this approach:"
+msgstr "ë¹ì ì ì´ ì ê·¼ë²ì ì¬ì©íì¬ table per hierarchy ë°©ëì table per subclass ë°©ë를 í¼í©ìí¬ ì ìë¤:"
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:145
+msgid "For any of these mapping strategies, a polymorphic association to the root <literal>Payment</literal> class is mapped using <literal><many-to-one></literal>."
+msgstr "ì´ë¤ 매í ë°©ëë¤ ì¤ ì´ë¤ ê²ì ëí´, ë£¨í¸ <literal>Payment</literal> í´ëì¤ì ëí íëì ë¤íì± ì°ê´ì <literal><many-to-one></literal>ì ì¬ì©íì¬ ë§¤íëë¤."
+
+#: index.docbook:151
+msgid "<![CDATA[<many-to-one name=\"payment\" column=\"PAYMENT_ID\" class=\"Payment\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"payment\" column=\"PAYMENT_ID\" class=\"Payment\"/>]]>"
+
+#: index.docbook:156
+msgid "Table per concrete class"
+msgstr "Table per concrete class"
+
+#: index.docbook:158
+msgid "There are two ways we could go about mapping the table per concrete class strategy. The first is to use <literal><union-subclass></literal>."
+msgstr "ì°ë¦¬ê° table per concrete class ë°©ë 매íì ëí´ ì·¨í ì ìë ë ê°ì§ ë°©ë²ë¤ì´ ì¡´ì¬íë¤. 첫 ë²ì§¸ë <literal><union-subclass></literal>를 ì¬ì©íë ê²ì´ë¤."
+
+#: index.docbook:163
+msgid ""
+ "<![CDATA[<class name=\"Payment\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <union-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Payment\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <union-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:165
+msgid "Three tables are involved for the subclasses. Each table defines columns for all properties of the class, including inherited properties."
+msgstr "ì¸ ê°ì í
ì´ë¸ë¤ì´ ìí¼í´ëì¤ë¤ì ëí´ ìë°ëë¤. ê°ê°ì í
ì´ë¸ì ììë íë¡í¼í°ë¤ì í¬í¨íì¬, ê·¸ í´ëì¤ì 모ë íë¡í¼í°ë¤ì ëí 컬ë¼ë¤ì ì ìíë¤."
+
+#: index.docbook:170
+msgid "The limitation of this approach is that if a property is mapped on the superclass, the column name must be the same on all subclass tables. (We might relax this in a future release of Hibernate.) The identity generator strategy is not allowed in union subclass inheritance, indeed the primary key seed has to be shared accross all unioned subclasses of a hierarchy."
+msgstr "ì´ ì ê·¼ë²ì ì ì½ì ë§ì¼ íëì íë¡í¼í°ê° ìí¼í´ëì¤ ìì¼ë¡ 매íë ê²½ì°, ê·¸ ì»¬ë¼ ì´ë¦ì´ 모ë ìë¸í´ëì¤ í
ì´ë¸ë¤ ììì ê°ìì¼ íë¤ë ì ì´ë¤.(ì¥ëì Hibernate ë°°í¬ë³¸ìì ì°ë¦¬ë ì´ ì ì½ì í ìë ìë¤.) identity ìì±ê¸° ë°©ëë union ìë¸í´ëì¤ ìììì íì©ëì§ ìì¼ë©°, ì§ì íë¼ì´ë¨¸ë¦¬ í¤ ìëë íëì ê³ì¸µêµ¬ì¡°ì 모ë unioned ìë¸í´ëì¤ë¤ì ê°ë¡ì§ë¬ ê³µì ëì´ì¼ íë¤."
+
+#: index.docbook:179
+msgid "If your superclass is abstract, map it with <literal>abstract=\"true\"</literal>. Of course, if it is not abstract, an additional table (defaults to <literal>PAYMENT</literal> in the example above) is needed to hold instances of the superclass."
+msgstr "ë§ì¼ ë¹ì ì ìí¼í´ëì¤ê° abstractì¼ ê²½ì°ì, ê·¸ê²ì <literal>abstract=\"true\"</literal>ë¡ ë§¤ííë¼. ë¬¼ë¡ ë§ì¼ ê·¸ê²ì´ abstractê° ìë ê²½ì°, ì¶ê°ì ì¸ í
ì´ë¸(ìì ìì ììë ëí´í¸ë¡ <literal>PAYMENT</literal>)ì´ ìí¼í´ëì¤ì ì¸ì¤í´ì¤ë¤ì ìì íëë° íìíë¤."
+
+#: index.docbook:189
+msgid "Table per concrete class, using implicit polymorphism"
+msgstr "í¨ì¶ì ì¸ ë¤íì±ì ì¬ì©íë, table per concrete class"
+
+#: index.docbook:191
+msgid "An alternative approach is to make use of implicit polymorphism:"
+msgstr "ëìì ì¸ ì ê·¼ë²ì í¨ì¶ì ì¸ ë¤íì±ì ì¬ì©íë ê²ì´ë¤:"
+
+#: index.docbook:195
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CASH_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CHEQUE_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CASH_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CHEQUE_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:197
+msgid "Notice that nowhere do we mention the <literal>Payment</literal> interface explicitly. Also notice that properties of <literal>Payment</literal> are mapped in each of the subclasses. If you want to avoid duplication, consider using XML entities (e.g. <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal> in the <literal>DOCTYPE</literal> declartion and <literal>&allproperties;</literal> in the mapping)."
+msgstr "ì´ë ê³³ììë ì°ë¦¬ê° ëª
ìì ì¼ë¡ <literal>Payment</literal> ì¸í°íì´ì¤ë¥¼ ì¸ê¸íì§ ììì 주목íë¼. ëí <literal>Payment</literal>ì íë¡í¼í°ë¤ì´ ìë¸í´ëì¤ë¤ ê°ê°ìì 매íëë¤ë ì ì 주목íë¼. ë§ì¼ ë¹ì ì´ ì¤ë³µì í¼íê³ ì ìíë¤ë©´, XML ìí°í°ë¤ì ì¬ì©íë ê²ì ê³ ë ¤íë¼(ì를 ë¤ì´ 매íìì <literal>DOCTYPE</literal> ì ì¸ê³¼ <literal>&allproperties;</literal>ìì <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal>)."
+
+#: index.docbook:207
+msgid "The disadvantage of this approach is that Hibernate does not generate SQL <literal>UNION</literal>s when performing polymorphic queries."
+msgstr "ì´ ì ê·¼ë²ì ë¨ì ì ë¤íì± ì§ìë¤ì ìíí ë Hibernateê° ìì±ë SQl <literal>UNION</literal>ë¤ì ìì±ìí¤ë ìëë¤ë ì ì´ë¤."
+
+#: index.docbook:212
+msgid "For this mapping strategy, a polymorphic association to <literal>Payment</literal> is usually mapped using <literal><any></literal>."
+msgstr "ì´ ë§¤í ë°©ëì ê²½ì°, <literal>Payment</literal>ì ëí íëì ë¤íì± ì°ê´ì ëê° <literal><any></literal>를 ì¬ì©íì¬ ë§¤íëë¤."
+
+#: index.docbook:217
+msgid ""
+ "<![CDATA[<any name=\"payment\" meta-type=\"string\" id-type=\"long\">\n"
+ " <meta-value value=\"CREDIT\" class=\"CreditCardPayment\"/>\n"
+ " <meta-value value=\"CASH\" class=\"CashPayment\"/>\n"
+ " <meta-value value=\"CHEQUE\" class=\"ChequePayment\"/>\n"
+ " <column name=\"PAYMENT_CLASS\"/>\n"
+ " <column name=\"PAYMENT_ID\"/>\n"
+ "</any>]]>"
+msgstr ""
+ "<![CDATA[<any name=\"payment\" meta-type=\"string\" id-type=\"long\">\n"
+ " <meta-value value=\"CREDIT\" class=\"CreditCardPayment\"/>\n"
+ " <meta-value value=\"CASH\" class=\"CashPayment\"/>\n"
+ " <meta-value value=\"CHEQUE\" class=\"ChequePayment\"/>\n"
+ " <column name=\"PAYMENT_CLASS\"/>\n"
+ " <column name=\"PAYMENT_ID\"/>\n"
+ "</any>]]>"
+
+#: index.docbook:222
+msgid "Mixing implicit polymorphism with other inheritance mappings"
+msgstr "í¨ì¶ì ì¸ ë¤íì±ì ë¤ë¥¸ ìì 매íë¤ê³¼ í¼í©í기"
+
+#: index.docbook:224
+msgid "There is one further thing to notice about this mapping. Since the subclasses are each mapped in their own <literal><class></literal> element (and since <literal>Payment</literal> is just an interface), each of the subclasses could easily be part of another inheritance hierarchy! (And you can still use polymorphic queries against the <literal>Payment</literal> interface.)"
+msgstr "ì´ ë§¤íì ëí´ ì£¼ëª©í íë ì´ìì ê²ì´ ì¡´ì¬íë¤. ìë¸í´ëì¤ë¤ì´ ê·¸ê²ë¤ ìì ì<literal><class></literal> ìì ë´ì ê°ê° 매íëë¯ë¡(ê·¸ë¦¬ê³ <literal>Payment</literal>ê° ë¨ì§ ì¸í°íì´ì¤ì´ë¯ë¡), ìë¸í´ëì¤ë¤ ê°ê°ì ì½ê² ë ë¤ë¥¸ ìì ê³ì¸µêµ¬ì¡°ì ë¶ë¶ì¼ ì ìë¤! (ê·¸ë¦¬ê³ ë¹ì ì <literal>Payment</literal> ì¸í°íì´ì¤ì ëí´ ì¬ì í ë¤íì± ì§ìë¤ì ì¬ì©í ì ìë¤.)"
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"CREDIT_CARD\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"MasterCardPayment\" discriminator-value=\"MDC\"/>\n"
+ " <subclass name=\"VisaPayment\" discriminator-value=\"VISA\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"NonelectronicTransaction\" table=\"NONELECTRONIC_TXN\">\n"
+ " <id name=\"id\" type=\"long\" column=\"TXN_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " ...\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"CREDIT_CARD\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"MasterCardPayment\" discriminator-value=\"MDC\"/>\n"
+ " <subclass name=\"VisaPayment\" discriminator-value=\"VISA\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"NonelectronicTransaction\" table=\"NONELECTRONIC_TXN\">\n"
+ " <id name=\"id\" type=\"long\" column=\"TXN_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " ...\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:234
+msgid "Once again, we don't mention <literal>Payment</literal> explicitly. If we execute a query against the <literal>Payment</literal> interface - for example, <literal>from Payment</literal> - Hibernate automatically returns instances of <literal>CreditCardPayment</literal> (and its subclasses, since they also implement <literal>Payment</literal>), <literal>CashPayment</literal> and <literal>ChequePayment</literal> but not instances of <literal>NonelectronicTransaction</literal>."
+msgstr "ë¤ì íë², ì°ë¦¬ë <literal>Payment</literal>를 ëª
ìì ì¼ë¡ ì¸ê¸íì§ ìëë¤. ë§ì¼ ì°ë¦¬ê° <literal>Payment</literal> ì¸í°íì´ì¤ì ëí´ íëì ì§ì를 ì¤íí ê²½ì°-ì를 ë¤ì´, from Payment-, Hibernateë <literal>CreditCardPayment</literal> (ì ê·¸ê²ì ìë¸í´ëì¤ë¤, ìëíë©´ ê·¸ê²ë¤ ëí <literal>Payment</literal>를 구ííë¯ë¡), <literal>CashPayment</literal> ê·¸ë¦¬ê³ <literal>ChequePayment</literal> ì¸ì¤í´ì¤ë¤ì ìëì ì¼ë¡ ë°íí ê²ì´ì§ë§ <literal>NonelectronicTransaction</literal>ì ì¸ì¤í´ì¤ë¤ì ë°ííì§ ìëë¤."
+
+#: index.docbook:249
+msgid "Limitations"
+msgstr "<title>ì ì½ë¤</title>"
+
+#: index.docbook:251
+msgid "There are certain limitations to the \"implicit polymorphism\" approach to the table per concrete-class mapping strategy. There are somewhat less restrictive limitations to <literal><union-subclass></literal> mappings."
+msgstr "table per concrete-class 매í ë°©ëì ëí \"í¨ì¶ì ì¸ ë¤íì±\" ì ê·¼ë²ìë ì´ë¤ ì ì½ë¤ì´ ì¡´ì¬íë¤. <literal><union-subclass></literal> 매íë¤ì ëí´ìë ë¤ì ë ì íì ì¸ ì ì½ë¤ì´ ì¡´ì¬íë¤:"
+
+#: index.docbook:258
+msgid "The following table shows the limitations of table per concrete-class mappings, and of implicit polymorphism, in Hibernate."
+msgstr "ë¤ì íë Hibernateìì table per concrete-class 매íë¤ì ëí ì ì½ë¤, ê·¸ë¦¬ê³ í¨ì¶ì ì¸ ë¤íì±ì ëí ì ì½ë¤ì ë³´ì¬ì¤ë¤."
+
+#: index.docbook:264
+msgid "Features of inheritance mappings"
+msgstr "ìì 매íë¤ì í¹ì§ë¤"
+
+#: index.docbook:276
+msgid "Inheritance strategy"
+msgstr "ìì ë°©ë"
+
+#: index.docbook:277
+msgid "Polymorphic many-to-one"
+msgstr "ë¤íì± ë¤ëì¼"
+
+#: index.docbook:278
+msgid "Polymorphic one-to-one"
+msgstr "ë¤íì± ì¼ëì¼"
+
+#: index.docbook:279
+msgid "Polymorphic one-to-many"
+msgstr "ë¤íì± ì¼ëë¤"
+
+#: index.docbook:280
+msgid "Polymorphic many-to-many"
+msgstr "ë¤íì± ë¤ëë¤"
+
+#: index.docbook:281
+msgid "Polymorphic <literal>load()/get()</literal>"
+msgstr "ë¤íì± <literal>load()/get()</literal>"
+
+#: index.docbook:282
+msgid "Polymorphic queries"
+msgstr "ë¤íì± ì§ìë¤"
+
+#: index.docbook:283
+msgid "Polymorphic joins"
+msgstr "ë¤íì± ì¡°ì¸ë¤"
+
+#: index.docbook:284
+msgid "Outer join fetching"
+msgstr "Outer ì¡°ì¸ íì¹"
+
+#: index.docbook:289
+msgid "table per class-hierarchy"
+msgstr "table per class-hierarchy"
+
+#: index.docbook:290, index.docbook:301, index.docbook:312
+msgid "<many-to-one>"
+msgstr "<many-to-one>"
+
+#: index.docbook:291, index.docbook:302, index.docbook:313
+msgid "<one-to-one>"
+msgstr "<one-to-one>"
+
+#: index.docbook:292, index.docbook:303
+msgid "<one-to-many>"
+msgstr "<one-to-many>"
+
+#: index.docbook:293, index.docbook:304, index.docbook:315
+msgid "<many-to-many>"
+msgstr "<many-to-many>"
+
+#: index.docbook:294, index.docbook:305, index.docbook:316
+msgid "s.get(Payment.class, id)"
+msgstr "s.get(Payment.class, id)"
+
+#: index.docbook:295, index.docbook:306, index.docbook:317, index.docbook:328
+msgid "from Payment p"
+msgstr "from Payment p"
+
+#: index.docbook:296, index.docbook:307, index.docbook:318
+msgid "from Order o join o.payment p"
+msgstr "from Order o join o.payment p"
+
+#: index.docbook:297, index.docbook:308, index.docbook:319
+msgid "supported"
+msgstr "<emphasis>ì§ìë¨</emphasis>"
+
+#: index.docbook:300
+msgid "<entry>table per subclass</entry>"
+msgstr "<entry>table per subclass</entry>"
+
+#: index.docbook:311
+msgid "table per concrete-class (union-subclass)"
+msgstr "table per concrete-class (union-subclass)"
+
+#: index.docbook:314
+msgid "<literal><one-to-many></literal> (for <literal>inverse=\"true\"</literal> only)"
+msgstr "<literal><one-to-many></literal> (for <literal>inverse=\"true\"</literal> only)"
+
+#: index.docbook:322
+msgid "table per concrete class (implicit polymorphism)"
+msgstr "table per concrete class (implicit polymorphism)"
+
+#: index.docbook:323
+msgid "<any>"
+msgstr "<any>"
+
+#: index.docbook:324, index.docbook:325, index.docbook:329, index.docbook:330
+msgid "not supported"
+msgstr "ì§ìëì§ ìì"
+
+#: index.docbook:326
+msgid "<many-to-any>"
+msgstr "<many-to-any>"
+
+#: index.docbook:327
+msgid "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+msgstr "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/performance.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/performance.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/performance.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1220 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Improving performance"
+msgstr "í¼í¬ë¨¼ì¤ ê°ì í기"
+
+#: index.docbook:8
+msgid "Fetching strategies"
+msgstr "íì¹ ë°©ëë¤"
+
+#: index.docbook:10
+msgid "A <emphasis>fetching strategy</emphasis> is the strategy Hibernate will use for retrieving associated objects if the application needs to navigate the association. Fetch strategies may be declared in the O/R mapping metadata, or over-ridden by a particular HQL or <literal>Criteria</literal> query."
+msgstr "<emphasis>íì¹ ë°©ë</emphasis>ë ì´í리ì¼ì´ì
ì´ ì°ê´ì ë¤ë¹ê²ì´í¸í íìê° ìì ë Hibernateê° ì°ê´ë ê°ì²´ë¤ì ê²ìíëë° ì¬ì©íê² ë ë°©ëì´ë¤.íì¹ ë°©ëë¤ì O/R 매í ë©íë°ì´í° ë´ìì ì ì¸ë ì ìê±°ë íëì í¹ì HQL ëë <literal>Criteria</literal> ì§ìì ìí´ ì¤ë²ë¼ì´ë ë ìë ìë¤."
+
+#: index.docbook:17
+msgid "Hibernate3 defines the following fetching strategies:"
+msgstr "Hibernate3ë ë¤ì íì¹ ë°©ëë¤ì ì ìíë¤:"
+
+#: index.docbook:23
+msgid "<emphasis>Join fetching</emphasis> - Hibernate retrieves the associated instance or collection in the same <literal>SELECT</literal>, using an <literal>OUTER JOIN</literal>."
+msgstr "<emphasis>Join íì¹</emphasis> - Hibernateë <literal>OUTER JOIN</literal>ì ì¬ì©íì¬ ì°ê´ë ì¸ì¤í´ì¤ ëë ëì¼í <literal>SELECT</literal> ë´ìì ì½ë ì
ì ê²ìíë¤."
+
+#: index.docbook:30
+msgid "<emphasis>Select fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated entity or collection. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr "<emphasis>Select íì¹</emphasis> - ë ë²ì§¸ <literal>SELECT</literal>ë ì°ê³¼ë ìí°í° ëë ì½ë ì
ì ê²ìíëë° ì¬ì©ëë¤. ë¹ì ì´ <literal>lazy=\"false\"</literal>를 ì§ì í¨ì¼ë¡ì¨ ëª
ìì ì¼ë¡ lazy íì¹ì ì¬ì© ë¶ê°ë¥íê² íì§ ìë í, ì´ ë ë²ì§¸ selectë ë¹ì ì´ ê·¸ ì°ê´ì ì¤ì ë¡ ì¡ì¸ì¤í ë ì¤ì§ ì¤íë ê²ì´ë¤."
+
+#: index.docbook:39
+msgid "<emphasis>Subselect fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated collections for all entities retrieved in a previous query or fetch. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr "<emphasis>Subselect íì¹</emphasis> - ë ë²ì§¸ <literal>SELECT</literal>ë ì´ì ì§ì ëë íì¹ìì ê²ìë 모ë ìí°í°ë¤ì ëí´ ì°ê´ë ì½ë ì
ë¤ì ê²ìíëë° ì¬ì©ëë¤. ë¹ì ì´ <literal>lazy=\"false\"</literal>를 ì§ì íì¬ ëª
ìì ì¼ë¡ lazy íì¹ì ì¬ì© ë¶ê°ë¥íê² íì§ ìë í, ì´ ë ë²ì§¸ selectë ë¹ì ì´ ì¤ì ë¡ ê·¸ ì°ê´ì ì ê·¼í ë ì¤ì§ ì¤íë ê²ì´ë¤."
+
+#: index.docbook:48
+msgid "<emphasis>Batch fetching</emphasis> - an optimization strategy for select fetching - Hibernate retrieves a batch of entity instances or collections in a single <literal>SELECT</literal>, by specifying a list of primary keys or foreign keys."
+msgstr "<emphasis>Batch íì¹</emphasis> - select íì¹ì ìí ìµì í ë°©ë - Hibernateë íë¼ì´ë¨¸ë¦¬ í¤ë¤ì´ë foreign í¤ë¤ì 리ì¤í¸ë¥¼ ì§ì í¨ì¼ë¡ì¨ íëì<literal>SELECT</literal> ë´ìì ìí°í° ì¸ì¤í´ì¤ë¤ì´ë ì½ë ì
ë¤ì ëí batch를 ê²ìíë¤."
+
+#: index.docbook:57
+msgid "Hibernate also distinguishes between:"
+msgstr "Hibernateë ëí ë¤ì ì¬ì´ë¥¼ êµ¬ë³ ì§ëë¤:"
+
+#: index.docbook:63
+msgid "<emphasis>Immediate fetching</emphasis> - an association, collection or attribute is fetched immediately, when the owner is loaded."
+msgstr "<emphasis>ì¦ê°ì ì¸ íì¹</emphasis> - ìì ìê° ë¡ëë ë, ì°ê´, ì½ë ì
ëë ìì±ì´ ì¦ì íì¹ëë¤."
+
+#: index.docbook:69
+msgid "<emphasis>Lazy collection fetching</emphasis> - a collection is fetched when the application invokes an operation upon that collection. (This is the default for collections.)"
+msgstr "<emphasis>Lazy ì½ë ì
íì¹</emphasis> - ì´í리ì¼ì´ì
ì´ ê·¸ ì½ë ì
ì ëí´ íëì ì¤í¼ë ì´ì
ì í¸ì¶í ë ì½ë ì
ì´ íì¹ëë¤.(ì´ê²ì ì½ë ì
ë¤ì ëí´ ëí´í¸ì´ë¤.)"
+
+#: index.docbook:76
+msgid "<emphasis>\"Extra-lazy\" collection fetching</emphasis> - individual elements of the collection are accessed from the database as needed. Hibernate tries not to fetch the whole collection into memory unless absolutely needed (suitable for very large collections)"
+msgstr "<emphasis>\"Extra-lazy\" ì½ë ì
íì¹</emphasis> - ì½ë ì
ì ê°ë³ ììë¤ì íìí ë ë°ì´í°ë² ì´ì¤ë¡ë¶í° ì ê·¼ëë¤. Hibernateë ì ëì ì¼ë¡ íìíì§ ìì í ì ì²´ ì½ë ì
ì ë©ëª¨ë¦¬ ë´ë¡ íì¹íë ¤ê³ ìëíì§ ìëë¤(ë§¤ì° í° ì½ë ì
ì ì í©í¨)"
+
+#: index.docbook:84
+msgid "<emphasis>Proxy fetching</emphasis> - a single-valued association is fetched when a method other than the identifier getter is invoked upon the associated object."
+msgstr "<emphasis>íë½ì íì¹</emphasis> - ìë³ì getterê° ìë ë¤ë¥¸ ë©ìëê° ì°ê´ë ê°ì²´ì ëí´ í¸ì¶ë ë ë¨ì¼ ê° ì°ê´ì´ íì¹ëë¤."
+
+#: index.docbook:91
+msgid "<emphasis>\"No-proxy\" fetching</emphasis> - a single-valued association is fetched when the instance variable is accessed. Compared to proxy fetching, this approach is less lazy (the association is fetched even when only the identifier is accessed) but more transparent, since no proxy is visible to the application. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr "<emphasis>\"No-proxy\" íì¹</emphasis> - ì¸ì¤í´ì¤ ë³ìê° ì ê·¼ë ë ë¨ì¼ ê° ì°ê´ì´ íì¹ëë¤. íë½ì íì¹ê³¼ ë¹êµí ë, ì´ ì ê·¼ë²ì ë¤ì ë lazyíì§ë§(ê·¸ ì°ê´ì ì¬ì§ì´ ì ì¼íê² ìë³ìê° ì ê·¼ë ëìë íì¹ëë¤)ë³´ë¤ í¬ëª
íë¤. ìëíë©´ íë½ìë ì´í리ì¼ì´ì
ì ê°ìì ì´ì§ ì기 ë문ì´ë¤. ì´ ì ê·¼ë²ì ë¹ë ì ë°ì´í¸ì½ë ìë¨ì íìë¡ íë©° ëë¬¼ê² íìíë¤."
+
+#: index.docbook:101
+msgid "<emphasis>Lazy attribute fetching</emphasis> - an attribute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr "<emphasis>Lazy ìì± íì¹</emphasis> - ì¸ì¤í´ì¤ ë³ìê° ì ê·¼ë ë ìì± ëë ë¨ì¼ ê° ì°ê´ì´ íì¹ëë¤ ì´ ì ê·¼ë²ì ë¹ëì ë°ì´í¸ì½ë ìë¨ì íìë¡ íë©° ëë¬¼ê² íìíë¤."
+
+#: index.docbook:110
+msgid "We have two orthogonal notions here: <emphasis>when</emphasis> is the association fetched, and <emphasis>how</emphasis> is it fetched (what SQL is used). Don't confuse them! We use <literal>fetch</literal> to tune performance. We may use <literal>lazy</literal> to define a contract for what data is always available in any detached instance of a particular class."
+msgstr "ì°ë¦¬ë ì¬ê¸°ì ë ê°ì ì§êµíë ê°ë
ë¤ì ê°ëë¤: ì°ê´ì´ íì¹ë <emphasis>ë</emphasis>, ê·¸ë¦¬ê³ ê·¸ê²ì´ íì¹ëë <emphasis>ë°©ë²</emphasis>(ì¬ì©ëë SQL). ê·¸ê²ë¤ì í¼ëíì§ ë§ë¼! ì°ë¦¬ë í¼í¬ë¨¼ì¤ë¥¼ íí
íëë° <literal>íì¹</literal>를 ì¬ì©íë¤. ì°ë¦¬ë í¹ì í´ëì¤ì ì´ë¤ detached ì¸ì¤í´ì¤ ë´ìì íì ì´ì© ê°ë¥í ë°ì´í°ê° 무ìì¸ì§ì ëí ê³ì½ì ì ìíëë° <literal>lazy</literal>를 ì¬ì©í ì ìë¤."
+
+#: index.docbook:119
+msgid "Working with lazy associations"
+msgstr "lazy ì°ê´ë¤ë¡ ìì
í기"
+
+#: index.docbook:121
+msgid "By default, Hibernate3 uses lazy select fetching for collections and lazy proxy fetching for single-valued associations. These defaults make sense for almost all associations in almost all applications."
+msgstr "ëí´í¸ë¡ Hibernate3ë ì½ë ì
ë¤ì ëí´ lazy select íì¹ì ì¬ì©íê³ , ë¨ì¼ ê° ì°ê´ë¤ì ëí´ lazy íë½ì íì¹ì ì¬ì©íë¤. ì´ë¤ ëí´í¸ë¤ì ê±°ì 모ë ì´í리ì¼ì´ì
ë¤ìì ê±°ì 모ë ì°ê´ë¤ì ëí´ ì ì미íë¤."
+
+#: index.docbook:127
+msgid "<emphasis>Note:</emphasis> if you set <literal>hibernate.default_batch_fetch_size</literal>, Hibernate will use the batch fetch optimization for lazy fetching (this optimization may also be enabled at a more granular level)."
+msgstr "<emphasis>ë
¸í¸:</emphasis> ë§ì¼ ë¹ì ì´ <literal>hibernate.default_batch_fetch_size</literal>를 ì¤ì íë ê²½ì°, Hibernateë lazy íì¹ì ìí batch íì¹ ìµì í를 ì¬ì©í ê²ì´ë¤(ì´ ìµì íë ëí ë ë§ì 과립ìì ë 벨ìì ì´ì© ê°ë¥í ì ìë¤)."
+
+#: index.docbook:134
+msgid "However, lazy fetching poses one problem that you must be aware of. Access to a lazy association outside of the context of an open Hibernate session will result in an exception. For example:"
+msgstr "íì§ë§, lazy íì¹ì ë¹ì ì´ ìê³ ìì´ì¼ íë í ê°ì§ 문ì 를 ì 기íë¤. ì´ë ¤ì§ Hibernate ì¸ì
컨í
ì¤í¸ ì¸ë¶ìì lazy ì°ê´ì ëí ì ê·¼ì ìì¸ìí©ì¼ë¡ ê·ê²°ë ê²ì´ë¤. ì를 ë¤ë©´ :"
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[s = sessions.openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ " \n"
+ "User u = (User) s.createQuery(\"from User u where u.name=:userName\")\n"
+ " .setString(\"userName\", userName).uniqueResult();\n"
+ "Map permissions = u.getPermissions();\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();\n"
+ "\n"
+ "Integer accessLevel = (Integer) permissions.get(\"accounts\"); // Error!]]>"
+msgstr ""
+ "<![CDATA[s = sessions.openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ " \n"
+ "User u = (User) s.createQuery(\"from User u where u.name=:userName\")\n"
+ " .setString(\"userName\", userName).uniqueResult();\n"
+ "Map permissions = u.getPermissions();\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();\n"
+ "\n"
+ "Integer accessLevel = (Integer) permissions.get(\"accounts\"); // Error!]]>"
+
+#: index.docbook:142
+msgid "Since the permissions collection was not initialized when the <literal>Session</literal> was closed, the collection will not be able to load its state. <emphasis>Hibernate does not support lazy initialization for detached objects</emphasis>. The fix is to move the code that reads from the collection to just before the transaction is committed."
+msgstr "<literal>Session</literal>ì´ ë«íì ë permissions ì½ë ì
ì´ ì´ê¸°í ëì§ ììì¼ë¯ë¡, ê·¸ ì½ë ì
ì ê·¸ê²ì ìí를 ë¡ëìí¬ ìê° ìì ê²ì´ë¤. <emphasis>Hibernate ë detached ê°ì²´ë¤ì ëí lazy ì´ê¸°í를 ì§ìíì§ ìëë¤.</emphasis> ì ì ì ì½ë ì
ì¼ë¡ë¶í° ì½ì´ë¤ì´ë ì½ë를 ì»¤ë° ë°ë¡ ì§ì ì¼ë¡ ì´ëìí¤ë ê²ì´ë¤."
+
+#: index.docbook:150
+msgid "Alternatively, we could use a non-lazy collection or association, by specifying <literal>lazy=\"false\"</literal> for the association mapping. However, it is intended that lazy initialization be used for almost all collections and associations. If you define too many non-lazy associations in your object model, Hibernate will end up needing to fetch the entire database into memory in every transaction!"
+msgstr "ë¤ë¥¸ ë°©ë²ì¼ë¡ ì°ê´ 매íì ëí´ <literal>lazy=\"false\"</literal>를 ì§ì í¨ì¼ë¡ì¨, non-lazy ì½ë ì
ëë non-lazy ì°ê´ì ì¬ì©í ì ìë¤. íì§ë§ lazy ì´ê¸°íë ê±°ì 모ë ì½ë ì
ë¤ê³¼ ì°ê´ë¤ì ëí´ ì¬ì©ëëë¡ ê³ ìëì´ ìë¤. ë§ì¼ ë¹ì ì´ ë¹ì ì ê°ì²´ 모í ë´ì ë무 ë§ì non-lazy ì°ê´ë¤ì ì ìí ê²½ì°, Hibernateë 모ë í¸ëìì
ìì ì ì²´ ë°ì´í°ë² ì´ì¤ë¥¼ ë©ëª¨ë¦¬ ìì¼ë¡ íì¹íë íìì±ì ëë´ê² ë ê²ì´ë¤!"
+
+#: index.docbook:159
+msgid "On the other hand, we often want to choose join fetching (which is non-lazy by nature) instead of select fetching in a particular transaction. We'll now see how to customize the fetching strategy. In Hibernate3, the mechanisms for choosing a fetch strategy are identical for single-valued associations and collections."
+msgstr "ë¤ë¥¸ íí¸ì¼ë¡, ì°ë¦¬ë í¹ì í¸ëìì
ë´ìì select íì¹ ëì ì (ê³ ì íê² non-lazyì¸) join íì¹ì ì íí기를 ì주 ìíë¤. ì°ë¦¬ë ì´ì íì¹ ë°©ë를 ë§ì¶¤í ìí¤ë ë°©ë²ì ìê² ë ê²ì´ë¤. Hibernate3ìì, íì¹ ë°©ë를 ì ííë ë©ì»¤ëì¦ì ë¨ì¼ ê° ì°ê´ë¤ê³¼ ì½ë ì
ë¤ì ëí´ ëì¼íë¤."
+
+#: index.docbook:170
+msgid "Tuning fetch strategies"
+msgstr "íì¹ ë°©ëë¤ì íëí기"
+
+#: index.docbook:172
+msgid "Select fetching (the default) is extremely vulnerable to N+1 selects problems, so we might want to enable join fetching in the mapping document:"
+msgstr "select íì¹(ëí´í¸)ì N+1 selects 문ì ì ë¤ì ë§¤ì° ì·¨ì½í´ì, ì°ë¦¬ë 매í 문ììì join íì¹ì ì¬ì© ê°ë¥íê² í기를 ìí ìë ìë¤:"
+
+#: index.docbook:177
+msgid ""
+ "<![CDATA[<set name=\"permissions\" \n"
+ " fetch=\"join\">\n"
+ " <key column=\"userId\"/>\n"
+ " <one-to-many class=\"Permission\"/>\n"
+ "</set]]>"
+msgstr ""
+ "<![CDATA[<set name=\"permissions\" \n"
+ " fetch=\"join\">\n"
+ " <key column=\"userId\"/>\n"
+ " <one-to-many class=\"Permission\"/>\n"
+ "</set]]>"
+
+#: index.docbook:179
+msgid "<![CDATA[<many-to-one name=\"mother\" class=\"Cat\" fetch=\"join\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"mother\" class=\"Cat\" fetch=\"join\"/>]]>"
+
+#: index.docbook:181
+msgid "The <literal>fetch</literal> strategy defined in the mapping document affects:"
+msgstr "매í 문ì ë´ì ì ìë <literal>fetch</literal> ë°©ëë ë¤ìì ìí¥ì ì¤ë¤:"
+
+#: index.docbook:187
+msgid "retrieval via <literal>get()</literal> or <literal>load()</literal>"
+msgstr "<literal>get()</literal> ëë <literal>load()</literal>를 íµí ê²ì"
+
+#: index.docbook:192
+msgid "retrieval that happens implicitly when an association is navigated"
+msgstr "ì°ê´ì´ ë¤ë¹ê²ì´í¸ë ë í¨ì¶ì ì¼ë¡ ë°ìíë ê²ì"
+
+#: index.docbook:197
+msgid "<literal>Criteria</literal> queries"
+msgstr "<literal>Criteria</literal> ì§ìë¤"
+
+#: index.docbook:202
+msgid "HQL queries if <literal>subselect</literal> fetching is used"
+msgstr "<literal>subselect</literal> íì¹ì´ ì¬ì©ë ê²½ì°ì HQL ì§ìë¤"
+
+#: index.docbook:208
+msgid "No matter what fetching strategy you use, the defined non-lazy graph is guaranteed to be loaded into memory. Note that this might result in several immediate selects being used to execute a particular HQL query."
+msgstr "ë¹ì ì´ ì¬ì©íë íì¹ ë°©ëê° ë¬´ìì¸ê°ì ìê´ìì´, ì ìë ë¹-lazy ê·¸ëíê° ë©ëª¨ë¦¬ ë´ë¡ ë¡ëëë ê²ì´ ë³´ì¥ëë¤. ì´ê²ì íëì í¹ë³í HQL ì§ì를 ì¤íìí¤ëë° ì¬ì©ëë ëªëª ì¦ìì ì¸ selectë¤ë¡ ê·ê²°ë ì ììì ë
¸í¸íë¼."
+
+#: index.docbook:214
+msgid "Usually, we don't use the mapping document to customize fetching. Instead, we keep the default behavior, and override it for a particular transaction, using <literal>left join fetch</literal> in HQL. This tells Hibernate to fetch the association eagerly in the first select, using an outer join. In the <literal>Criteria</literal> query API, you would use <literal>setFetchMode(FetchMode.JOIN)</literal>."
+msgstr "ëê°, ì°ë¦¬ë íì¹ì ë§ì¶¤í ìí¤ëë° ë§¤í 문ì를 ì¬ì©íì§ ìëë¤. ëì ì, ì°ë¦¬ë ëí´í¸ í¹ì§ì ì ì§íê³ , HQLìì <literal>left join fetch</literal>를 ì¬ì©íì¬, í¹ì í¸ëìì
ì ëí´ ê·¸ê²ì ì¤ë²ë¼ì´ë ìí¨ë¤. ì´ê²ì outer joinì ì¬ì©íì¬ ì²« ë²ì§¸ selectìì ì´ê¸°ì ê·¸ ì°ê´ì eagerly íì¹ìí¬ ê²ì Hibernateìê² ìë ¤ì¤ë¤. <literal>Criteria</literal> query APIìì, ì°ë¦¬ë <literal>setFetchMode(FetchMode.JOIN)</literal>ì ì¬ì©íë¤."
+
+#: index.docbook:223
+msgid "If you ever feel like you wish you could change the fetching strategy used by <literal>get()</literal> or <literal>load()</literal>, simply use a <literal>Criteria</literal> query, for example:"
+msgstr "ë§ì¼ ë¹ì ì´ <literal>get()</literal> ëë <literal>load()</literal>ì ìí´ ì¬ì©ë íì¹ ë°©ë를 ë³ê²½ìí¬ ì ì기를 ë¹ì ì´ ìíë¤ê³ ëë ê²½ì°, ë¨ìíê² <literal>Criteria</literal> ì§ì를 ì¬ì©íë¼. ì를 ë¤ë©´:"
+
+#: index.docbook:229
+msgid ""
+ "<![CDATA[User user = (User) session.createCriteria(User.class)\n"
+ " .setFetchMode(\"permissions\", FetchMode.JOIN)\n"
+ " .add( Restrictions.idEq(userId) )\n"
+ " .uniqueResult();]]>"
+msgstr ""
+ "<![CDATA[User user = (User) session.createCriteria(User.class)\n"
+ " .setFetchMode(\"permissions\", FetchMode.JOIN)\n"
+ " .add( Restrictions.idEq(userId) )\n"
+ " .uniqueResult();]]>"
+
+#: index.docbook:231
+msgid "(This is Hibernate's equivalent of what some ORM solutions call a \"fetch plan\".)"
+msgstr "(ì´ê²ì ëªëª ORM ì루ì
ë¤ì´ \"íì¹ ê³í\"ì´ë¼ê³ ë¶ë¥´ë ê²ì ëí Hibernateì ë±ê°ë¬¼ì´ë¤.)"
+
+#: index.docbook:235
+msgid "A completely different way to avoid problems with N+1 selects is to use the second-level cache."
+msgstr "N+1 ê°ì selectë¤ì ê°ì§ 문ì ì ë¤ì í¼íë ìì í ë¤ë¥¸ ë°©ë²ì second-level ìºì를 ì¬ì©íë ê²ì´ë¤."
+
+#: index.docbook:243
+msgid "Single-ended association proxies"
+msgstr "Single-ended ì°ê´ íë½ì"
+
+#: index.docbook:245
+msgid "Lazy fetching for collections is implemented using Hibernate's own implementation of persistent collections. However, a different mechanism is needed for lazy behavior in single-ended associations. The target entity of the association must be proxied. Hibernate implements lazy initializing proxies for persistent objects using runtime bytecode enhancement (via the excellent CGLIB library)."
+msgstr "ì½ë ì
ë¤ì ëí Lazy íì¹ì ìì ì½ë ì
ë¤ì ëí Hibernate ìì ì 구íì ì¬ì©íì¬ êµ¬íëë¤. íì§ë§ ë¤ë¥¸ ë©ì»¤ëì¦ì single-ended ì°ê´ë¤ìì lazy í¹ì§ì íìíë¤. ì°ê´ì ëì ìí°í°ë íë½ì ëì´ì¼ íë¤. Hibernateë (íë¥í CGLIB ë¼ì´ë¸ë¬ë¦¬ë¥¼ íµí´) ë°íì ë°ì´í¸ì½ë ì¦ì§ì ì¬ì©íì¬ ìì ê°ì²´ë¤ì ëí lazy ì´ê¸°í íë½ìë¤ì 구ííë¤."
+
+#: index.docbook:253
+msgid "By default, Hibernate3 generates proxies (at startup) for all persistent classes and uses them to enable lazy fetching of <literal>many-to-one</literal> and <literal>one-to-one</literal> associations."
+msgstr "ëí´í¸ë¡, Hibernate3ë 모ë ìì í´ëì¤ë¤ì ëí´ (ìì ìì) íë½ìë¤ì ìì±ìí¤ê³ <literal>many-to-one</literal> ì°ê´ê³¼ <literal>one-to-one</literal> ì°ê´ì ëí´ lazy íì¹ì ì´ì© ê°ë¥íê² íëë° ê·¸ê²ë¤ì ì¬ì©íë¤."
+
+#: index.docbook:259
+msgid "The mapping file may declare an interface to use as the proxy interface for that class, with the <literal>proxy</literal> attribute. By default, Hibernate uses a subclass of the class. <emphasis>Note that the proxied class must implement a default constructor with at least package visibility. We recommend this constructor for all persistent classes!</emphasis>"
+msgstr "매í íì¼ì ê·¸ í´ëì¤ì ëí íë½ì ì¸í°íì´ì¤ë¡ì ì¬ì©í , <literal>proxy</literal> ìì±ì ê°ì§, ì¸í°íì´ì¤ë¥¼ ì ì¸í ìë ìë¤. ëí´í¸ë¡ Hibernateë ê·¸ í´ëì¤ì ìë¸í´ëì¤ë¥¼ ì¬ì©íë¤. <emphasis>íë½ìë í´ëì¤ë ìµìíì í¨í¤ì§ ê°ìì± (visibility)ì ê°ì§ ëí´í¸ ìì±ì를 구íí´ì¼ í¨ì ë
¸í¸íë¼. ì°ë¦¬ë 모ë ìì í´ëì¤ë¤ì ëí´ ì´ ìì±ì를 ê¶ì¥íë¤!</emphasis>"
+
+#: index.docbook:266
+msgid "There are some gotchas to be aware of when extending this approach to polymorphic classes, eg."
+msgstr "ë¤íì± í´ëì¤ë¤ì ëí´ ì´ ì ê·¼ë²ì íì¥í ë ììí´ì¼ íë ëªëª ëì²í¨ë¤ì´ ì¡´ì¬íë¤. ì를 ë¤ë©´."
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<class name=\"Cat\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Cat\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:273
+msgid "Firstly, instances of <literal>Cat</literal> will never be castable to <literal>DomesticCat</literal>, even if the underlying instance is an instance of <literal>DomesticCat</literal>:"
+msgstr "첫 ë²ì§¸ë¡, ì¬ì§ì´ 기본 ì¸ì¤í´ì¤ê° <literal>DomesticCat</literal>ì ì¸ì¤í´ì¤ì¸ ê²½ì°ì¡°ì°¨ë, <literal>Cat</literal>ì ì¸ì¤í´ì¤ë¤ì ê²°ì½ <literal>DomesticCat</literal>ì¼ë¡ íì
ìºì¤í¸ê° ê°ë¥íì§ ìì ê²ì´ë¤:"
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)\n"
+ "if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy\n"
+ " DomesticCat dc = (DomesticCat) cat; // Error!\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)\n"
+ "if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy\n"
+ " DomesticCat dc = (DomesticCat) cat; // Error!\n"
+ " ....\n"
+ "}]]>"
+
+#: index.docbook:281
+msgid "Secondly, it is possible to break proxy <literal>==</literal>."
+msgstr "ëë²ì§¸ë¡, íë½ì <literal>==</literal>를 í기í ê°ë¥ì±ì´ ìë¤."
+
+#: index.docbook:285
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy\n"
+ "DomesticCat dc = \n"
+ " (DomesticCat) session.load(DomesticCat.class, id); // acquire new DomesticCat proxy!\n"
+ "System.out.println(cat==dc); // false]]>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy\n"
+ "DomesticCat dc = \n"
+ " (DomesticCat) session.load(DomesticCat.class, id); // acquire new DomesticCat proxy!\n"
+ "System.out.println(cat==dc); // false]]>"
+
+#: index.docbook:287
+msgid "However, the situation is not quite as bad as it looks. Even though we now have two references to different proxy objects, the underlying instance will still be the same object:"
+msgstr "íì§ë§, ê·¸ ê²½ì°ë ë³´ì´ë ë§í¼ ê·¸ë ê² ëìì§ë ìë¤. ì¬ì§ì´ ì°ë¦¬ê° ì´ì ë¤ë¥¸ íë½ì ê°ì²´ë¤ì ëí ë ê°ì 참조를 ê°ì§ì§ë¼ë, 기본 ì¸ì¤í´ì¤ë ì¬ì í ëì¼í ê°ì²´ë¤ì¼ ê²ì´ë¤:"
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy\n"
+ "System.out.println( dc.getWeight() ); // 11.0]]>"
+msgstr ""
+ "<![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy\n"
+ "System.out.println( dc.getWeight() ); // 11.0]]>"
+
+#: index.docbook:294
+msgid "Third, you may not use a CGLIB proxy for a <literal>final</literal> class or a class with any <literal>final</literal> methods."
+msgstr "ì¸ë²ì§¸ë¡, ë¹ì ì <literal>final</literal> í´ëì¤ ëë ììì <literal>final</literal> ë©ìëë¤ì ê°ì§ í´ëì¤ì ëí´ CGLIB íë½ì를 ì¬ì©íì§ ìì ì ìë¤."
+
+#: index.docbook:299
+msgid "Finally, if your persistent object acquires any resources upon instantiation (eg. in initializers or default constructor), then those resources will also be acquired by the proxy. The proxy class is an actual subclass of the persistent class."
+msgstr "ë§ì§ë§ì¼ë¡, ë§ì¼ ë¹ì ì ìì ê°ì²´ê° ì´ê¸°í ìì ì´ë¤ 리ìì¤ë¤ì íìë¡ í ê²½ì°(ì를 ë¤ì´, initializerë¤ ëë ëí´í¸ ìì±ì ë´ìì), ê·¸ë ê·¸ë¤ ë¦¬ìì¤ë¤ì´ ëí íë½ìì ìí´ íëë ê²ì´ë¤. íë½ì í´ëì¤ë ìì í´ëì¤ì ëí ì¤ì ìë¸í´ëì¤ì´ë¤."
+
+#: index.docbook:305
+msgid "These problems are all due to fundamental limitations in Java's single inheritance model. If you wish to avoid these problems your persistent classes must each implement an interface that declares its business methods. You should specify these interfaces in the mapping file. eg."
+msgstr "ì´ë¤ 문ì ì ë¤ì 모ë ìë°ì ë¨ì¼ ìì 모íì 기본ì ì¸ ì ì½ ë문ì´ë¤. ë§ì¼ ë¹ì ì´ ì´ë¤ 문ì ì ë¤ì í¼íê³ ì ìí ê²½ì° ë¹ì ì ìì í´ëì¤ë¤ì ê°ê° ê·¸ê²ì ë¹ì§ëì¤ ë©ìëë¤ì ì ì¸íë ì¸í°íì´ì¤ë¥¼ 구íí´ì¼ íë¤. ë¹ì ì 매í íì¼ ìì ì´ë¤ ì¸í°íì´ì¤ë¤ì ì§ì í´ì¼ íë¤. ì를 ë¤ë©´."
+
+#: index.docbook:311
+msgid ""
+ "<![CDATA[<class name=\"CatImpl\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCatImpl\" proxy=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"CatImpl\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCatImpl\" proxy=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+
+#: index.docbook:313
+msgid "where <literal>CatImpl</literal> implements the interface <literal>Cat</literal> and <literal>DomesticCatImpl</literal> implements the interface <literal>DomesticCat</literal>. Then proxies for instances of <literal>Cat</literal> and <literal>DomesticCat</literal> may be returned by <literal>load()</literal> or <literal>iterate()</literal>. (Note that <literal>list()</literal> does not usually return proxies.)"
+msgstr "ì¬ê¸°ì <literal>CatImpl</literal>ì <literal>Cat</literal> ì¸í°íì´ì¤ë¥¼ 구ííê³ <literal>DomesticCatImpl</literal>ì <literal>DomesticCat</literal> ì¸í°íì´ì¤ë¥¼ 구ííë¤. ê·¸ë <literal>Cat</literal>ê³¼ <literal>DomesticCat</literal>ì ì¸ì¤í´ì¤ë¤ì ëí íë½ìë¤ì <literal>load()</literal> ëë <literal>iterate()</literal>ì ìí´ ë°íë ì ìë¤. (<literal>list()</literal>ê° ëê° íë½ìë¤ì ë°ííì§ ììì ë
¸í¸íë¼.)"
+
+#: index.docbook:321
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);\n"
+ "Iterator iter = session.createQuery(\"from CatImpl as cat where cat.name='fritz'\").iterate();\n"
+ "Cat fritz = (Cat) iter.next();]]>"
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);\n"
+ "Iterator iter = session.createQuery(\"from CatImpl as cat where cat.name='fritz'\").iterate();\n"
+ "Cat fritz = (Cat) iter.next();]]>"
+
+#: index.docbook:323
+msgid "Relationships are also lazily initialized. This means you must declare any properties to be of type <literal>Cat</literal>, not <literal>CatImpl</literal>."
+msgstr "ê´ê³ë¤ì ëí lazy ì´ê¸°í ëë¤. ì´ê²ì ë¹ì ì´ ììì íë¡í¼í°ë¤ì <literal>CatImpl</literal> íì
ì´ ìë <literal>Cat</literal> íì
ì¼ë¡ ì ì¸í´ì¼ í¨ì ì미íë¤."
+
+#: index.docbook:328
+msgid "Certain operations do <emphasis>not</emphasis> require proxy initialization"
+msgstr "ì´ë¤ ì¤í¼ë ì´ì
ë¤ì íë½ì ì´ê¸°í를 íìë¡ íì§ <emphasis>ìëë¤</emphasis>"
+
+#: index.docbook:334
+msgid "<literal>equals()</literal>, if the persistent class does not override <literal>equals()</literal>"
+msgstr "<literal>equals()</literal>, ë§ì¼ ìì í´ëì¤ê° <literal>equals()</literal>를 ì¤ë²ë¼ì´ë ìí¤ì§ ìë ê²½ì°"
+
+#: index.docbook:340
+msgid "<literal>hashCode()</literal>, if the persistent class does not override <literal>hashCode()</literal>"
+msgstr "<literal>hashCode()</literal>, ë§ì¼ ìì í´ëì¤ê°<literal>hashCode()</literal>를 ì¤ë²ë¼ì´ë ìí¤ì§ ìë ê²½ì°"
+
+#: index.docbook:346
+msgid "The identifier getter method"
+msgstr "ìë³ì getter ë©ìë"
+
+#: index.docbook:352
+msgid "Hibernate will detect persistent classes that override <literal>equals()</literal> or <literal>hashCode()</literal>."
+msgstr "Hibernateë <literal>equals()</literal> ëë <literal>hashCode()</literal>를 ì¤ë²ë¼ì´ë ìí¤ë ìì í´ëì¤ë¤ì ê²ì¶í ê²ì´ë¤."
+
+#: index.docbook:357
+msgid "By choosing <literal>lazy=\"no-proxy\"</literal> instead of the default <literal>lazy=\"proxy\"</literal>, we can avoid the problems associated with typecasting. However, we will require buildtime bytecode instrumentation, and all operations will result in immediate proxy initialization."
+msgstr "ëí´í¸ <literal>lazy=\"proxy\"</literal> ëì ì <literal>lazy=\"no-proxy\"</literal>를 ì ííì¬, ì°ë¦¬ë íì
ìºì¤í
ê³¼ ì°ê´ë 문ì ì ë¤ì í¼í ì ìë¤. íì§ë§ ì°ë¦¬ë ë¹ë ì ë°ì´í¸ì½ë ìë¨ì íìë¡ í ê²ì´ê³ , 모ë ì°ì°ë¤ì ì¦ê°ì ì¸ íë½ì ì´ê¸°íë¡ ê·ê²°ë ê²ì´ë¤."
+
+#: index.docbook:367
+msgid "Initializing collections and proxies"
+msgstr "ì½ë ì
ë¤ê³¼ íë½ìë¤ì ì´ê¸°í ìí¤ê¸°"
+
+#: index.docbook:369
+msgid "A <literal>LazyInitializationException</literal> will be thrown by Hibernate if an uninitialized collection or proxy is accessed outside of the scope of the <literal>Session</literal>, ie. when the entity owning the collection or having the reference to the proxy is in the detached state."
+msgstr "ë§ì¼ ì´ê¸°í ëì§ ìì ì½ë ì
ì´ë íë½ìê° <literal>Session</literal> ììì ì¸ë¶ìì ì ê·¼ë ê²½ì°ì, ì를 ë¤ì´ ì½ë ì
ì ìì íê±°ë íë½ìì ëí 참조를 ê°ì§ ìí°í°ê° detached ìíì ìì ë, <literal>LazyInitializationException</literal>ì´ Hibernateì ìí´ ëì ¸ì§ ê²ì´ë¤."
+
+#: index.docbook:375
+msgid "Sometimes we need to ensure that a proxy or collection is initialized before closing the <literal>Session</literal>. Of course, we can alway force initialization by calling <literal>cat.getSex()</literal> or <literal>cat.getKittens().size()</literal>, for example. But that is confusing to readers of the code and is not convenient for generic code."
+msgstr "ëëë¡ ì°ë¦¬ë<literal>Session</literal>ì ë«ê¸° ì ì íë½ì ëë ì½ë ì
ì´ ì´ê¸°í ë¨ì íì¤í í íìê° ìë¤. ë¬¼ë¡ ì°ë¦¬ë ì를 ë¤ì´ <literal>cat.getSex()</literal> ëë <literal>cat.getKittens().size()</literal>를 í¸ì¶íì¬ íì ì´ê¸°í를 ê°ì ìí¬ ì ìë¤. ê·¸ë¬ë ê·¸ê²ì ì½ëì ë
ìë¤ìê²ë í¼ëì¤ë½ê³ ì¼ë°ì ì¸ ì½ëë¡ í¸ìì ì´ì§ ìë¤."
+
+#: index.docbook:382
+msgid "The static methods <literal>Hibernate.initialize()</literal> and <literal>Hibernate.isInitialized()</literal> provide the application with a convenient way of working with lazily initialized collections or proxies. <literal>Hibernate.initialize(cat)</literal> will force the initialization of a proxy, <literal>cat</literal>, as long as its <literal>Session</literal> is still open. <literal>Hibernate.initialize( cat.getKittens() )</literal> has a similar effect for the collection of kittens."
+msgstr "static ë©ìëë¤ <literal>Hibernate.initialize()</literal>ì <literal>Hibernate.isInitialized()</literal>ë lazy ì´ê¸°í ë ì½ë ì
ë¤ì´ë íë½ìë¤ì ëí´ ìì
íë í¸ë¦¬í ë°©ë²ì ì´í리ì¼ì´ì
ì ì ê³µíë¤. <literal>Hibernate.initialize(cat)</literal>ì ê·¸ê²ì <literal>Session</literal>ì´ ì¬ì í ì´ë ¤ì ¸ ìë í íë½ì <literal>cat</literal>ì ì´ê¸°í를 ê°ì í ê²ì´ë¤. <literal>Hibernate.initialize( cat.getKittens())</literal>ë kittensì ì½ë ì
ì ëí´ ì ì¬í í¨ê³¼ë¥¼ ê°ëë¤."
+
+#: index.docbook:391
+msgid "Another option is to keep the <literal>Session</literal> open until all needed collections and proxies have been loaded. In some application architectures, particularly where the code that accesses data using Hibernate, and the code that uses it are in different application layers or different physical processes, it can be a problem to ensure that the <literal>Session</literal> is open when a collection is initialized. There are two basic ways to deal with this issue:"
+msgstr "ë ë¤ë¥¸ ìµì
ì 모ë íìí ì½ë ì
ë¤ê³¼ íë½ìë¤ì´ ë¡ëë기 ì ê¹ì§ <literal>Session</literal>ì ì´ë¦° ì±ë¡ ì ì§íë ê²ì´ë¤. ëªëª ì´í리ì¼ì´ì
ìí¤í
ì²ë¤, í¹í Hibernate를 ì¬ì©íì¬ ë°ì´í°ì ì ê·¼íë ì½ë, ê·¸ë¦¬ê³ ë¤ë¥¸ ì´í리ì¼ì´ì
ê³ì¸µë¤ì´ë ë¤ë¥¸ 물리ì íë¡ì¸ì¤ë¤ ë´ìì ê·¸ê²ì ì¬ì©íë ì½ëìì, ê·¸ê²ì ì½ë ì
ì´ ì´ê¸°í ë ë <literal>Session</literal>ì´ ì´ë ¤ì ¸ ììì íì¤í íë 문ì ì¼ ì ìë¤. ì´ ìì ì ë¤ë£¨ë ë ê°ì§ 기본 ë°©ë²ë¤ì´ ì¡´ì¬íë¤:"
+
+#: index.docbook:402
+msgid "In a web-based application, a servlet filter can be used to close the <literal>Session</literal> only at the very end of a user request, once the rendering of the view is complete (the <emphasis>Open Session in View</emphasis> pattern). Of course, this places heavy demands on the correctness of the exception handling of your application infrastructure. It is vitally important that the <literal>Session</literal> is closed and the transaction ended before returning to the user, even when an exception occurs during rendering of the view. See the Hibernate Wiki for examples of this \"Open Session in View\" pattern."
+msgstr "ì¹ ê¸°ë° ì´í리ì¼ì´ì
ìì, ìë¸ë¦¿ íí°ë ë·° ë ëë§ì´ ìë£ëë, ì¬ì©ì ìì²ì ë°ë¡ ëììë§ <literal>Session</literal>ì ë«ëë° ì¬ì©ë ì ìë¤(<emphasis>Open Session in View</emphasis> í¨í´). ë¬¼ë¡ ì´ê²ì ë¹ì ì ì´í리ì¼ì´ì
ì¸íë¼ì¤í¸ëì²ì ìì¸ìí© ì²ë¦¬ì ì ì ì ê´í ë¬´ê±°ì´ ì구를 ë¶ê³¼íë¤. ë·° ë ëë§ ëìì íëì ìì¸ìí©ì´ ë°ìí ëìë ì¬ì©ììê² ë°íë기 ì ì <literal>Session</literal>ì´ ë«íì§ê³ í¸ëìì
ì´ ì¢
ë£ëë ê²ì ì§ê·¹í ì¤ìíë¤. ì´ \"Open Session in View\" í¨í´ì ê´í ìì ë¤ì Hibernate ìí¤ë¥¼ ë³´ë¼."
+
+#: index.docbook:415
+msgid "In an application with a separate business tier, the business logic must \"prepare\" all collections that will be needed by the web tier before returning. This means that the business tier should load all the data and return all the data already initialized to the presentation/web tier that is required for a particular use case. Usually, the application calls <literal>Hibernate.initialize()</literal> for each collection that will be needed in the web tier (this call must occur before the session is closed) or retrieves the collection eagerly using a Hibernate query with a <literal>FETCH</literal> clause or a <literal>FetchMode.JOIN</literal> in <literal>Criteria</literal>. This is usually easier if you adopt the <emphasis>Command</emphasis> pattern instead of a <emphasis>Session Facade</emphasis>."
+msgstr "ë³ëì ë¹ì§ëì¤ í°ì´ë¥¼ ê°ì§ ì´í리ì¼ì´ì
ìì, ë¹ì§ëì¤ ë¡ì§ì ë°í ì ì ì¹ í°ì´ì íìí 모ë ì½ë ì
ë¤ì \"ì¤ë¹\"í´ì¼ íë¤. ì´ê²ì ë¹ì§ëì¤ í°ì´ê° 모ë ë°ì´í°ë¥¼ ë¡ëìí¤ê³ ì´ë¯¸ ì´ê¸°íë 모ë ë°ì´í°ë¥¼ í¹ì ì°ììì íìí í리ì í
ì´ì
/ì¹ í°ì´ë¡ ë°íí´ì¼ í¨ì ì미íë¤. ëê° ì´í리ì¼ì´ì
ì ì¹ í°ì´ì íìíê² ë ê°ê°ì ì½ë ì
ì ëí´ <literal>Hibernate.initialize()</literal>를 í¸ì¶íê±°ë(ì´ í¸ì¶ì ì¸ì
ì´ ë«í기 ì ì ë°ìí´ì¼ íë¤) ëë <literal>FETCH</literal> ì ì ê°ê±°ë ëë <literal>Criteria</literal> ë´ì <literal>FetchMode.JOIN</literal>ì ê°ì§ Hibernate ì§ì를 ì¬ì©íì¬ ì½ë ì
ì ì´ì¬í ê²ìíë¤. ì´ê²ì ëê° ë¹ì ì´ <emphasis>Session Facade</emphasis> ëì <emphasis>Command</emphasis> í¨í´ì ì±íí ê²½ì°ì ë ì½ë¤."
+
+#: index.docbook:430
+msgid "You may also attach a previously loaded object to a new <literal>Session</literal> with <literal>merge()</literal> or <literal>lock()</literal> before accessing uninitialized collections (or other proxies). No, Hibernate does not, and certainly <emphasis>should</emphasis> not do this automatically, since it would introduce ad hoc transaction semantics!"
+msgstr "ë¹ì ì ëí ì´ê¸°í ëì§ ìì ì½ë ì
ë¤(ëë ë¤ë¥¸ íë½ìë¤)ì ì ê·¼í기 ì ì <literal>merge()</literal> ëë <literal>lock()</literal>ì¼ë¡ ìì ë¡ëë ê°ì²´ë¥¼ ìë¡ì´ <literal>Session</literal>nì 첨ë¶í ìë ìë¤. ìëë¤. Hibernateë ì´ê²ì ìëì ì¼ë¡ ííì§ ìê³ , íì¤í ìëì ì¼ë¡ ííì§ <emphasis>ìì ê²ì´ë¤</emphasis>. ìëíë©´ ê·¸ê²ì í¹ë³í 목ì ì ìí í¸ëìì
ì미를 ëì
í ê²ì´ê¸° ë문ì´ë¤!"
+
+#: index.docbook:440
+msgid "Sometimes you don't want to initialize a large collection, but still need some information about it (like its size) or a subset of the data."
+msgstr "ëëë¡ ë¹ì ì ê±°ëí ì½ë ì
ì ì´ê¸°í ìí¤ë ê²ì ìíì§ ìì§ë§, ì¬ì í (ê·¸ê²ì ì¬ì´ì¦ì ê°ì) ê·¸ê²ì ëí ì´ë¤ ì ë³´ ëë ë°ì´í°ì ë¶ë¶ì§í©ì íìë¡ íë¤."
+
+#: index.docbook:445
+msgid "You can use a collection filter to get the size of a collection without initializing it:"
+msgstr "ë¹ì ì ê·¸ê²ì ì´ê¸°í ìí¤ì§ ìê³ ì ì½ë ì
ì ì¬ì´ì¦ë¥¼ ì»ëë° ì½ë ì
íí°ë¥¼ ì¬ì©í ì ìë¤:"
+
+#: index.docbook:449
+msgid "<![CDATA[( (Integer) s.createFilter( collection, \"select count(*)\" ).list().get(0) ).intValue()]]>"
+msgstr "<![CDATA[( (Integer) s.createFilter( collection, \"select count(*)\" ).list().get(0) ).intValue()]]>"
+
+#: index.docbook:451
+msgid "The <literal>createFilter()</literal> method is also used to efficiently retrieve subsets of a collection without needing to initialize the whole collection:"
+msgstr "<literal>createFilter()</literal> ë©ìëë ëí ì ì²´ ì½ë ì
ì ì´ê¸°í ìí¬ íì ìì´ ì½ë ì
ì ë¶ë¶ì§í©ë¤ì í¨ì¨ì ì¼ë¡ ê²ìíëë° ì¬ì©ëë¤:"
+
+#: index.docbook:456
+msgid "<![CDATA[s.createFilter( lazyCollection, \"\").setFirstResult(0).setMaxResults(10).list();]]>"
+msgstr "<![CDATA[s.createFilter( lazyCollection, \"\").setFirstResult(0).setMaxResults(10).list();]]>"
+
+#: index.docbook:461
+msgid "Using batch fetching"
+msgstr "batch íì¹ ì¬ì©í기"
+
+#: index.docbook:463
+msgid "Hibernate can make efficient use of batch fetching, that is, Hibernate can load several uninitialized proxies if one proxy is accessed (or collections. Batch fetching is an optimization of the lazy select fetching strategy. There are two ways you can tune batch fetching: on the class and the collection level."
+msgstr "Hibernateë ë°°ì¹ íì¹ì í¨ì¨ì ì¼ë¡ ì¬ì©í ì ìë¤. ì¦ íëì íë½ìê° ì¡ì¸ì¤ ë ê²½ì°ì Hibernateë ëªëª ì´ê¸°í ëì§ ìì íë½ìë¤ì ë¡ëìí¬ ì ìë¤(ëë ì½ë ì
ë¤). batch íì¹ì lazy select íì¹ ë°©ëì ëí ìµì íì´ë¤. ë¹ì ì´ batch íì¹ì íëìí¬ ì ìë ë ê°ì§ ë°©ë²ë¤ì´ ì¡´ì¬íë¤: í´ëì¤ ë 벨ìì ê·¸ë¦¬ê³ ì½ë ì
ë 벨ìì."
+
+#: index.docbook:469
+msgid "Batch fetching for classes/entities is easier to understand. Imagine you have the following situation at runtime: You have 25 <literal>Cat</literal> instances loaded in a <literal>Session</literal>, each <literal>Cat</literal> has a reference to its <literal>owner</literal>, a <literal>Person</literal>. The <literal>Person</literal> class is mapped with a proxy, <literal>lazy=\"true\"</literal>. If you now iterate through all cats and call <literal>getOwner()</literal> on each, Hibernate will by default execute 25 <literal>SELECT</literal> statements, to retrieve the proxied owners. You can tune this behavior by specifying a <literal>batch-size</literal> in the mapping of <literal>Person</literal>:"
+msgstr "í´ëì¤ë¤/ìí°í°ë¤ì ëí batch íì¹ì ì´í´íê¸°ê° ë ì½ë¤. ë¹ì ì´ ì¤í ìì ë¤ì ìí©ì ì²íë¤ê³ ììíë¼: ë¹ì ì íëì <literal>Session</literal> ìì ë¡ëë 25ê°ì <literal>Cat</literal> ì¸ì¤í´ì¤ë¤ì ê°ê³ ìê³ , ê°ê°ì <literal>Cat</literal>ì ê·¸ê²ì <literal>ìì ì</literal> ì¦, <literal>Person</literal>ì ëí 참조를 ê°ê³ ìë¤. <literal>Person</literal> í´ëì¤ë íë½ì <literal>lazy=\"true\"</literal>ë¡ì 매íëë¤. ë§ì¼ ë¹ì ì´ ì´ì 모ë catë¤ì íµí´ ë°ë³µíê³ ê°ê°ì catì ëí´ <literal>getOwner()</literal>를 í¸ì¶í ê²½ì°, Hibernateë íë½ìë ìì ìë¤ì ê²ìí기 ìí´ 25ê°ì <literal>SELECT</literal> 문ì¥ë¤ì ëí´í¸ë¡ ì¤íìí¬ ê²ì´ë¤. ë¹ì ì <literal>Person</literal> 매íìì <literal>batch-size</literal>를 ì§ì í¨ì¼ë¡ì¨ ì´ ëìì íëìí¬ ì ìë¤:"
+
+#: index.docbook:479
+msgid "<![CDATA[<class name=\"Person\" batch-size=\"10\">...</class>]]>"
+msgstr "<![CDATA[<class name=\"Person\" batch-size=\"10\">...</class>]]>"
+
+#: index.docbook:481
+msgid "Hibernate will now execute only three queries, the pattern is 10, 10, 5."
+msgstr "Hibernateë ì´ì ì¸ ê°ì ì§ìë¤ ë§ì ì¤íìí¬ ê²ì´ê³ , ê·¸ í¨í´ì 10,10, 5 ì´ë¤."
+
+#: index.docbook:485
+msgid "You may also enable batch fetching of collections. For example, if each <literal>Person</literal> has a lazy collection of <literal>Cat</literal>s, and 10 persons are currently loaded in the <literal>Sesssion</literal>, iterating through all persons will generate 10 <literal>SELECT</literal>s, one for every call to <literal>getCats()</literal>. If you enable batch fetching for the <literal>cats</literal> collection in the mapping of <literal>Person</literal>, Hibernate can pre-fetch collections:"
+msgstr "ë¹ì ì ëí ì½ë ì
ë¤ì ëí´ batch íì¹ì ì´ì© ê°ë¥íê² í ìë ìë¤. ì를 ë¤ì´, ë§ì¼ ê°ê°ì <literal>Person</literal>ì´ <literal>Cat</literal>ë¤ì ê°ì§ lazy ì½ë ì
ì ê°ê³ , 10ê°ì personë¤ì´ <literal>Sesssion</literal> ë´ì íì¬ ë¡ëëì´ ìì ê²½ì°, 모ë personë¤ì ëí ë°ë³µì 10ê°ì <literal>SELECT</literal>ë¤ì ìì±ìí¬ ê²ì´ê³ , <literal>getCats()</literal>ì ëí 매ë²ì í¸ì¶ì ëí´ íëì <literal>SELECT</literal>를 ìì±ìí¬ ê²ì´ë¤. ë§ì¼ ë¹ì ì´ <literal>Person</literal> 매íìì <literal>cats</literal> ì½ë ì
ì ëí´ batch íì¹ì ì¬ì©ê°ë¥íê² í ê²½ì°, Hibernateë ì½ë ì
ë¤ì 미리-íì¹ ìí¬ ì ìë¤:"
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <set name=\"cats\" batch-size=\"3\">\n"
+ " ...\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <set name=\"cats\" batch-size=\"3\">\n"
+ " ...\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:496
+msgid "With a <literal>batch-size</literal> of 3, Hibernate will load 3, 3, 3, 1 collections in four <literal>SELECT</literal>s. Again, the value of the attribute depends on the expected number of uninitialized collections in a particular <literal>Session</literal>."
+msgstr "<literal>batch-size</literal> 8ë¡ì, Hibernateë 4ê°ì SELECTë¤ìì 3, 3, 3, 1 ê°ì ì½ë ì
ë¤ì ë¡ëìí¬ ê²ì´ë¤. ë¤ì ê·¸ ìì±ì ê°ì í¹ì <literal>Session</literal> ë´ìì ì´ê¸°í ëì§ ìì ì½ë ì
ë¤ì ììëë ê°ìì ìì¡´íë¤."
+
+#: index.docbook:502
+msgid "Batch fetching of collections is particularly useful if you have a nested tree of items, ie. the typical bill-of-materials pattern. (Although a <emphasis>nested set</emphasis> or a <emphasis>materialized path</emphasis> might be a better option for read-mostly trees.)"
+msgstr "ë§ì¼ ë¹ì ì´ í목ë¤ì í¬ê°ì§ í¸ë¦¬ë¥¼ ê°ì§ ê²½ì°, ì를 ë¤ì´ ì íì ì¸ bill-of-materials í¨í´ì¸ ê²½ì°, (ë¹ë¡ <emphasis>ë´í¬ë set</emphasis> ëë <emphasis>ì¤ì²´íë ê²½ë¡(materialized path)</emphasis>ê° ì£¼ë¡-ì½ê¸°-í¸ë¦¬ë¤ì ëí´ ë ì¢ì ìµì
ì¼ ì ììì§ë¼ë) ì½ë ì
ë¤ì ëí batch íì¹ì´ í¹í ì ì©íë¤."
+
+#: index.docbook:511
+msgid "Using subselect fetching"
+msgstr "subselect íì¹ ì¬ì©í기"
+
+#: index.docbook:513
+msgid "If one lazy collection or single-valued proxy has to be fetched, Hibernate loads all of them, re-running the original query in a subselect. This works in the same way as batch-fetching, without the piecemeal loading."
+msgstr "ë§ì¼ í ê°ì lazy ì½ë ì
ì´ë ë¨ì¼ ê° íë½ìê° íì¹ëì´ì¼ íë¤ë©´, Hibernateë íëì subselect ë´ìì ìëì ì§ì를 ë¤ì ì¤ííì¬ ê·¸ê²ë¤ 모ë를 ë¡ëìí¨ë¤. ì´ê²ì ì¡°ê°ë ë¡ë© ìì´ batch íì¹ê³¼ ëì¼í ë°©ìì¼ë¡ ëìíë¤."
+
+#: index.docbook:524
+msgid "Using lazy property fetching"
+msgstr "lazy íë¡í¼í° íì¹ ì¬ì©í기"
+
+#: index.docbook:526
+msgid "Hibernate3 supports the lazy fetching of individual properties. This optimization technique is also known as <emphasis>fetch groups</emphasis>. Please note that this is mostly a marketing feature, as in practice, optimizing row reads is much more important than optimization of column reads. However, only loading some properties of a class might be useful in extreme cases, when legacy tables have hundreds of columns and the data model can not be improved."
+msgstr "Hibernate3ì ê°ë³ì ì¸ íë¡í¼í°ë¤ì ëí lazy íì¹ì ì§ìíë¤. ì´ ìµì í 기ì ì ëí <emphasis>fetch groups</emphasis> ì¼ë¡ ìë ¤ì ¸ ìë¤. ì´ê²ì´ ëê° ë§ì¼í
í¹ì§ìì ë
¸í¸í길 ë°ëë¤. ìëíë©´ ì¤ì ë¡ í ì½ê¸°ë¥¼ ìµì í ìí¤ë ê²ì´ ì»¬ë¼ ì½ê¸°ì ëí ìµì í ë³´ë¤ í¨ì¬ ë ì¤ìí기 ë문ì´ë¤. íì§ë§ 리거ì í
ì´ë¸ë¤ì´ ìë°± ê°ì 컬ë¼ë¤ì ê°ê³ ë°ì´í° 모íì´ ê°ì ë ì ìì ë, ì¤ì§ í´ëì¤ì ëªëª íë¡í¼í°ë¤ì ë¡ëìí¤ë ê² ë§ì´ ì ì©í ìë ìë¤."
+
+#: index.docbook:535
+msgid "To enable lazy property loading, set the <literal>lazy</literal> attribute on your particular property mappings:"
+msgstr "lazy íë¡í¼í° ë¡ë©ì ì´ì©ê°ë¥íê² íë ¤ë©´, ë¹ì ì í¹ì property 매íë¤ì ëí´ <literal>lazy</literal> ìì±ì ì¤ì íë¼:"
+
+#: index.docbook:540
+msgid ""
+ "<![CDATA[<class name=\"Document\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\" length=\"50\"/>\n"
+ " <property name=\"summary\" not-null=\"true\" length=\"200\" lazy=\"true\"/>\n"
+ " <property name=\"text\" not-null=\"true\" length=\"2000\" lazy=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Document\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\" length=\"50\"/>\n"
+ " <property name=\"summary\" not-null=\"true\" length=\"200\" lazy=\"true\"/>\n"
+ " <property name=\"text\" not-null=\"true\" length=\"2000\" lazy=\"true\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:542
+msgid "Lazy property loading requires buildtime bytecode instrumentation! If your persistent classes are not enhanced, Hibernate will silently ignore lazy property settings and fall back to immediate fetching."
+msgstr "Lazy property ë¡ë©ì ë¹ë ì ë°ì´í¸ì½ë ìë¨ì íìë¡ íë¤! ë§ì¼ ë¹ì ì ìì í´ëì¤ë¤ì´ ê°ì ëì§ ìì ê²½ì°, Hibernateë ì¡°ì©íê² lazy íë¡í¼í° ì¤ì ë¤ì 무ìíê³ ì¦ê°ì ì¸ íì¹ì¼ë¡ íí´í ê²ì´ë¤."
+
+#: index.docbook:548
+msgid "For bytecode instrumentation, use the following Ant task:"
+msgstr "bytecode ìë¨ì¼ë¡, ë¤ì Ant íì¤í¬ë¥¼ ì¬ì©íë¼:"
+
+#: index.docbook:552
+msgid ""
+ "<![CDATA[<target name=\"instrument\" depends=\"compile\">\n"
+ " <taskdef name=\"instrument\" classname=\"org.hibernate.tool.instrument.InstrumentTask\">\n"
+ " <classpath path=\"${jar.path}\"/>\n"
+ " <classpath path=\"${classes.dir}\"/>\n"
+ " <classpath refid=\"lib.class.path\"/>\n"
+ " </taskdef>\n"
+ "\n"
+ " <instrument verbose=\"true\">\n"
+ " <fileset dir=\"${testclasses.dir}/org/hibernate/auction/model\">\n"
+ " <include name=\"*.class\"/>\n"
+ " </fileset>\n"
+ " </instrument>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"instrument\" depends=\"compile\">\n"
+ " <taskdef name=\"instrument\" classname=\"org.hibernate.tool.instrument.InstrumentTask\">\n"
+ " <classpath path=\"${jar.path}\"/>\n"
+ " <classpath path=\"${classes.dir}\"/>\n"
+ " <classpath refid=\"lib.class.path\"/>\n"
+ " </taskdef>\n"
+ "\n"
+ " <instrument verbose=\"true\">\n"
+ " <fileset dir=\"${testclasses.dir}/org/hibernate/auction/model\">\n"
+ " <include name=\"*.class\"/>\n"
+ " </fileset>\n"
+ " </instrument>\n"
+ "</target>]]>"
+
+#: index.docbook:554
+msgid "A different (better?) way to avoid unnecessary column reads, at least for read-only transactions is to use the projection features of HQL or Criteria queries. This avoids the need for buildtime bytecode processing and is certainly a prefered solution."
+msgstr "ë¶íìí ì»¬ë¼ ì½ê¸°ë¥¼ í¼íë ë¤ë¥¸ (ë ì¢ì?) ë°©ë²ì ì ì´ë ì½ê¸° ì ì© í¸ëìì
ì ê²½ì°ì HQL ì§ì ëë Criteria ì§ìì í¬ì¬(projection) í¹ì§ë¤ì ì¬ì©íë ê²ì´ë¤. ì´ê²ì ë¹ë ì ë°ì´í¸ì½ë ì²ë¦¬ì ëí íìì±ì í¼íê² í´ì£¼ê³ íì¤í ì í¸ëë í´ê²°ì±
ì´ë¤."
+
+#: index.docbook:561
+msgid "You may force the usual eager fetching of properties using <literal>fetch all properties</literal> in HQL."
+msgstr "ë¹ì ì HQLìì <literal>fetch all properties</literal>를 ì¬ì©íì¬ íë¡í¼í°ë¤ì ëí íµìì eager íì¹ì ê°ì ìí¬ ì ìë¤."
+
+#: index.docbook:571
+msgid "The Second Level Cache"
+msgstr "ëë²ì§¸ ë 벨 ìºì"
+
+#: index.docbook:573
+msgid "A Hibernate <literal>Session</literal> is a transaction-level cache of persistent data. It is possible to configure a cluster or JVM-level (<literal>SessionFactory</literal>-level) cache on a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be careful. Caches are never aware of changes made to the persistent store by another application (though they may be configured to regularly expire cached data)."
+msgstr "Hibernate <literal>Session</literal>ì ìì ë°ì´í°ì ëí í¸ëìì
ë 벨 ìºìì´ë¤. class-by-classì collection-by-collection ê¸°ë° ìì í´ë¬ì¤í° ëë JVM-ë 벨(<literal>SessionFactory</literal>-ë 벨) ìºì를 구ì±íë ê²ì´ ê°ë¥íë¤. ë¹ì ì í´ë¬ì¤í°ë§ ë ìºì ìì íë¬ê·¸ì¸ í ìë ìë¤. 주ìíë¼. ìºìë¤ì (ë¹ë¡ ê·¸ê²ë¤ì´ ìºìë ë°ì´í°ë¥¼ ì 기ì ì¼ë¡ ë§ë£ëëë¡ êµ¬ì±ëì´ ììì§ë¼ë) ë ë¤ë¥¸ ì´í리ì¼ì´ì
ì ìí´ ìì ì ì¥ìì ëí´ íí´ì§ ë³ê²½ë¤ì ê²°ì½ ìì§ ëª»íë¤."
+
+#: index.docbook:581
+msgid "You have the option to tell Hibernate which caching implementation to use by specifying the name of a class that implements <literal>org.hibernate.cache.CacheProvider</literal> using the property <literal>hibernate.cache.provider_class</literal>. 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."
+msgstr "ëí´í¸ë¡, Hibernateë JVM-ë 벨ì ìºì±ì EHCache를 ì¬ì©íë¤. (JCS ì§ìì ì´ì ì§ë¶íê² ëìê³ Hibernateì ì¥ë ë²ì ìì ì ê±°ë ê²ì´ë¤.) ë¹ì ì <literal>hibernate.cache.provider_class</literal> íë¡í¼í°ë¥¼ ì¬ì©íì¬ <literal>org.hibernate.cache.CacheProvider</literal>를 구ííë í´ëì¤ì ì´ë¦ì ì§ì í¨ì¼ë¡ì¨ ë¤ë¥¸ 구íì ì íí ìë ìë¤. You have the option to tell Hibernate which caching implementation to use by specifying the name of a class that implements <literal>org.hibernate.cache.CacheProvider</literal> using the property <literal>hibernate.cache.provider_class</literal>. 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. !
ë¹ì ì <literal>hibernate.cache.provider_class</literal> íë¡í¼í°ë¥¼ ì¬ì©íì¬ <literal>org.hibernate.cache.CacheProvider</literal>를 구ííë í´ëì¤ì ì´ë¦ì ì§ì í¨ì¼ë¡ì¨ ì´ë ìºì± 구íì ì¬ì©í ê²ì¸ì§ë¥¼ Hibernateìê² ìë ¤ì£¼ë ìµì
ì ê°ëë¤. Hibernateë (ìëì ì´ê±°ë) ì¤í-ìì¤ íë¡ë°ì´ëë¤ì ê°ì§ ë§ì ë¹ëëì´ ìë íµí©ë¤ì ë²ë¤ë¡ ê°ê³ ìë¤; ì¶ê°ì ì¼ë¡ ë¹ì ì ììì ì¸ê¸íë¯ì´ ê·¸ê²ì ë¹ì ìì ì ê²ì 구íí ì ìê³ ê·¸ê²ì íë¬ê·¸ ìí¬ ì ìë¤. 3.2 ì´ë² ë²ì ë¤ì ëíí¸ ìºì íë¡ë°ì´ëë¡ì EhCache를 ì¬ì©íëë¡ ëí¬ë¦ë¡ ë´ì¥ëì´ ììì ë
¸í¸íë¼; ë²ì 3.2ì ê²½ì°ì ê·¸ê²ì ëì´ì ëí´í¸ ë´ì¥ì´ ìëë¤."
+
+#: index.docbook:592
+msgid "Cache Providers"
+msgstr "ìºì íë¡ë°ì´ëë¤"
+
+#: index.docbook:601, index.docbook:774
+msgid "Cache"
+msgstr "<entry>ìºì</entry>"
+
+#: index.docbook:602
+msgid "Provider class"
+msgstr "íë¡ë°ì´ë í´ëì¤"
+
+#: index.docbook:603
+msgid "Type"
+msgstr "<entry>íì
</entry>"
+
+#: index.docbook:604
+msgid "Cluster Safe"
+msgstr "í´ë¬ì¤í° ìì "
+
+#: index.docbook:605
+msgid "Query Cache Supported"
+msgstr "ì§ì ìºì ì§ì"
+
+#: index.docbook:610, index.docbook:783
+msgid "Hashtable (not intended for production use)"
+msgstr "Hashtable (ì í ì©ëë¡ ê³ ìëì´ ìì§ ìì)"
+
+#: index.docbook:611
+msgid "org.hibernate.cache.HashtableCacheProvider"
+msgstr "org.hibernate.cache.HashtableCacheProvider"
+
+#: index.docbook:612
+msgid "memory"
+msgstr "memory"
+
+#: index.docbook:614, index.docbook:621, index.docbook:628, index.docbook:784, index.docbook:785, index.docbook:786, index.docbook:791, index.docbook:792, index.docbook:793, index.docbook:798, index.docbook:799, index.docbook:800, index.docbook:805, index.docbook:806, index.docbook:812, index.docbook:815
+msgid "<entry>yes</entry>"
+msgstr "<entry>yes</entry>"
+
+#: index.docbook:617, index.docbook:790
+msgid "EHCache"
+msgstr "EHCache"
+
+#: index.docbook:618
+msgid "org.hibernate.cache.EhCacheProvider"
+msgstr "org.hibernate.cache.EhCacheProvider"
+
+#: index.docbook:619, index.docbook:626
+msgid "memory, disk"
+msgstr "memory, disk"
+
+#: index.docbook:624, index.docbook:797
+msgid "OSCache"
+msgstr "OSCache"
+
+#: index.docbook:625
+msgid "org.hibernate.cache.OSCacheProvider"
+msgstr "org.hibernate.cache.OSCacheProvider"
+
+#: index.docbook:631, index.docbook:804
+msgid "SwarmCache"
+msgstr "<entry>yes</entry>"
+
+#: index.docbook:632
+msgid "org.hibernate.cache.SwarmCacheProvider"
+msgstr "SwarmCache"
+
+#: index.docbook:633
+msgid "clustered (ip multicast)"
+msgstr "org.hibernate.cache.SwarmCacheProvider"
+
+#: index.docbook:634
+msgid "yes (clustered invalidation)"
+msgstr "clustered (ip multicast)"
+
+#: index.docbook:638, index.docbook:811
+msgid "JBoss TreeCache"
+msgstr "yes (clustered invalidation)"
+
+#: index.docbook:639
+msgid "org.hibernate.cache.TreeCacheProvider"
+msgstr "JBoss TreeCache"
+
+#: index.docbook:640
+msgid "clustered (ip multicast), transactional"
+msgstr "org.hibernate.cache.TreeCacheProvider"
+
+#: index.docbook:641
+msgid "yes (replication)"
+msgstr "clustered (ip multicast), transactional"
+
+#: index.docbook:642
+msgid "yes (clock sync req.)"
+msgstr "yes (replication)"
+
+#: index.docbook:649
+msgid "Cache mappings"
+msgstr "yes (clock sync req.)"
+
+#: index.docbook:651
+msgid "The <literal><cache></literal> element of a class or collection mapping has the following form:"
+msgstr "Cache 매íë¤"
+
+#: index.docbook:662
+msgid ""
+ "<![CDATA[<cache \n"
+ " usage=\"transactional|read-write|nonstrict-read-write|read-only\"\n"
+ " region=\"RegionName\"\n"
+ " include=\"all|non-lazy\"\n"
+ "/>]]>"
+msgstr "í´ëì¤ ëë ì½ë ì
매íì <literal><cache></literal> ììë ë¤ì íìì ê°ëë¤:"
+
+#: index.docbook:665
+msgid "<literal>usage</literal> (required) specifies the caching strategy: <literal>transactional</literal>, <literal>read-write</literal>, <literal>nonstrict-read-write</literal> or <literal>read-only</literal>"
+msgstr ""
+ "<![CDATA[<cache \n"
+ " usage=\"transactional|read-write|nonstrict-read-write|read-only\"\n"
+ " region=\"RegionName\"\n"
+ " include=\"all|non-lazy\"\n"
+ "/>]]>"
+
+#: index.docbook:674
+msgid "<literal>region</literal> (optional, defaults to the class or collection role name) specifies the name of the second level cache region"
+msgstr "<literal>usage</literal>(íì) ìºì± ë°©ë를 ì§ì íë¤: <literal>transactional</literal>, <literal>read-write</literal>, <literal>nonstrict-read-write</literal> ëë <literal>read-only</literal>"
+
+#: index.docbook:681
+msgid "<literal>include</literal> (optional, defaults to <literal>all</literal>) <literal>non-lazy</literal> specifies that properties of the entity mapped with <literal>lazy=\"true\"</literal> may not be cached when attribute-level lazy fetching is enabled"
+msgstr "<literal>region</literal> (ìµì
, ëí´í¸ë class ëë ì½ë ì
role ì´ë¦) second level ìºì ììì ì´ë¦ì ì§ì íë¤"
+
+#: index.docbook:691
+msgid "Alternatively (preferrably?), you may specify <literal><class-cache></literal> and <literal><collection-cache></literal> elements in <literal>hibernate.cfg.xml</literal>."
+msgstr "<literal>include</literal> (ìµì
, ëí´í¸ë <literal>all</literal>) <literal>non-lazy</literal>ë <literal>lazy=\"true\"</literal>ë¡ ë§¤íë ìí°í°ì íë¡í¼í°ë¤ì ì§ì íë©° ìì±-ë 벨 lazy íì¹ì´ ì´ì© ê°ë¥í ë í¤ìë ì ìë¤"
+
+#: index.docbook:696
+msgid "The <literal>usage</literal> attribute specifies a <emphasis>cache concurrency strategy</emphasis>."
+msgstr "ë¤ë¥¸ ë°©ë²ì¼ë¡ (ì í¸ì ì¼ë¡?), ë¹ì ì <literal>hibernate.cfg.xml</literal> ë´ì <literal><class-cache></literal>ì <literal><collection-cache></literal> ììë¤ì ì§ì í ìë ìë¤."
+
+#: index.docbook:703
+msgid "Strategy: read only"
+msgstr "<literal>usage</literal> ìì±ì <emphasis> ìºì ëìì± ë°©ë</emphasis>를 ì§ì íë¤."
+
+#: index.docbook:705
+msgid "If your application needs to read but never modify instances of a persistent class, a <literal>read-only</literal> cache may be used. This is the simplest and best performing strategy. It's even perfectly safe for use in a cluster."
+msgstr "ë°©ë: ì½ê¸° ì ì©"
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"eg.Immutable\" mutable=\"false\">\n"
+ " <cache usage=\"read-only\"/>\n"
+ " ....\n"
+ "</class>]]>"
+msgstr "ë¹ì ì ì´í리ì¼ì´ì
ì´ ìì í´ëì¤ì ì¸ì¤í´ì¤ë¤ì ì½ì´ë¤ì¼ íìê° ìì§ë§ ê²°ì½ ë³ê²½í íìê° ìì ê²½ì°ì <literal>read-only</literal> ìºìê° ì¬ì©ë ì ìë¤. ì´ê²ì ê°ì¥ ê°ë¨í ìµìì í¼í¬ë¨¼ì¤ë¥¼ ìí ë°©ëì´ë¤. ê·¸ê²ì í´ë¬ì¤í° ë´ ì¬ì©ìë ìë²½íê² ìì íë¤."
+
+#: index.docbook:717
+msgid "Strategy: read/write"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Immutable\" mutable=\"false\">\n"
+ " <cache usage=\"read-only\"/>\n"
+ " ....\n"
+ "</class>]]>"
+
+#: index.docbook:719
+msgid "If the application needs to update data, a <literal>read-write</literal> cache might be appropriate. This cache strategy should never be used if serializable transaction isolation level is required. If the cache is used in a JTA environment, you must specify the property <literal>hibernate.transaction.manager_lookup_class</literal>, naming a strategy for obtaining the JTA <literal>TransactionManager</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called. If you wish to use this strategy in a cluster, you should ensure that the underlying cache implementation supports locking. The built-in cache providers do <emphasis>not</emphasis>."
+msgstr "ë°©ë: ì½ê¸°/ì°ê¸°"
+
+#: index.docbook:730
+msgid ""
+ "<![CDATA[<class name=\"eg.Cat\" .... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " <set name=\"kittens\" ... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr "ì´í리ì¼ì´ì
ì´ ë°ì´í°ë¥¼ ì
ë°ì´í¸ í íìê° ìì ê²½ì°, <literal>read-write</literal> ìºìê° ì ì íë¤. ë§ì¼ ì§ë ¬í ê°ë¥í(serializable) í¸ëìì
격리 ë ë²¨ì´ íìí ê²½ì°ìë ì´ ìºì ë°©ëê° ê²°ì½ ì¬ì©ëì§ ë§ìì¼ íë¤. ë§ì¼ ìºìê° JTA íê²½ìì ì¬ì©ë ê²½ì°, ë¹ì ì JTA <literal>TransactionManager</literal>를 ì»ë ë°©ë를 ëª
ëª
íë <literal>hibernate.transaction.manager_lookup_class</literal> íë¡í¼í°ë¥¼ ì§ì í´ì¼ íë¤. ë¤ë¥¸ íê²½ë¤ìì, ë¹ì ì<literal>Session.close()</literal> ëë <literal>Session.disconnect()</literal>ê° í¸ì¶ë ë í¸ëìì
ì´ ìë£ëë ê²ì íì¤í í´ì¼ íë¤. ë§ì¼ ë¹ì ì´ í´ë¬ì¤í° ë´ì ì´ ë°©ë를 ì¬ì©íê³ ì ìí ê²½ì°, ë¹ì ì 기본 ìºì 구íì´ ì ê¸ì ì§ìíëë¡ íë ê²ì íì¤í í´ì¼ íë¤. 미리 ë§ë¤ì´ì§ ìºì íë¡ë°ì´ëë¤ì ê·¸ë ê² ííì§ <emphasis>ìëë!
¤</emphasis>."
+
+#: index.docbook:735
+msgid "Strategy: nonstrict read/write"
+msgstr ""
+ "<![CDATA[<class name=\"eg.Cat\" .... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " <set name=\"kittens\" ... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " </set>\n"
+ "</class>]]>"
+
+#: index.docbook:737
+msgid "If the application only occasionally needs to update data (ie. if it is extremely unlikely that two transactions would try to update the same item simultaneously) and strict transaction isolation is not required, a <literal>nonstrict-read-write</literal> cache might be appropriate. If the cache is used in a JTA environment, you must specify <literal>hibernate.transaction.manager_lookup_class</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called."
+msgstr "ë°©ë: ì격íì§ ìì ì½ê¸°/ì°ê¸°"
+
+#: index.docbook:749
+msgid "Strategy: transactional"
+msgstr "ë§ì¼ ì´í리ì¼ì´ì
ì´ ì¤ì§ ë°ì´í°ë¥¼ ì주 ì
ë°ì´í¸í íìê° ìê³ (ì를 ë¤ì´, ë§ì¼ ë ê°ì í¸ëìì
ë¤ì´ ëìì ëì¼í í목ì ì
ë°ì´í¸ íë ¤ê³ ìëíë ì ë§ ììì§íì§ ìì ê²½ì°) ê·¸ë¦¬ê³ ì격í í¸ëìì
ê²©ë¦¬ê° íìíì§ ìì ê²½ì°, <literal>nonstrict-read-write</literal> ìºìê° ì ì í ì ìë¤. ë§ì¼ ê·¸ ìºìê° JTA íê²½ìì ì¬ì©ë ê²½ì°, ë¹ì ì <literal>hibernate.transaction.manager_lookup_class</literal>를 ì§ì í´ì¼ íë¤. ë¤ë¥¸ íê²½ë¤ìì, ë¹ì ì <literal>Session.close()</literal> ëë <literal>Session.disconnect()</literal>ê° í¸ì¶ë ë í¸ëìì
ì´ ìë£ëëë¡ íì¤í í´ì¼ íë¤."
+
+#: index.docbook:751
+msgid "The <literal>transactional</literal> cache strategy provides support for fully transactional cache providers such as JBoss TreeCache. Such a cache may only be used in a JTA environment and you must specify <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr "ë°©ë: transactional"
+
+#: index.docbook:759
+msgid "None of the cache providers support all of the cache concurrency strategies. The following table shows which providers are compatible with which concurrency strategies."
+msgstr "<literal>transactional</literal> ìºì ë°©ëë JBoss TreeCacheì ê°ì ì ì²´ í¸ëìì
ì ì¸ ìºì íë¡ë°ì´ëë¤ì ëí ì§ìì ì ê³µíë¤. ê·¸ë° ìºìë ì¤ì§ JTA íê²½ ë´ìì ì¬ì©ë ì ìê³ ë¹ì ì <literal>hibernate.transaction.manager_lookup_class</literal>를 ì§ì í´ì¼ íë¤."
+
+#: index.docbook:765
+msgid "Cache Concurrency Strategy Support"
+msgstr "ìºì íë¡ë°ì´ëë¤ ì¤ ì´ë ê²ë 모ë ìºì ëìì± ë°©ëë¤ì ì§ìíì§ ìëë¤. ë¤ì í
ì´ë¸ì ì´ë íë¡ë°ì´ëë¤ì´ ì´ë ëìì± ë°©ëë¤ê³¼ í¸íëëì§ë¥¼ ë³´ì¬ì¤ë¤."
+
+#: index.docbook:775
+msgid "read-only"
+msgstr "<entry>ìºì</entry>"
+
+#: index.docbook:776
+msgid "nonstrict-read-write"
+msgstr "ì½ê¸° ì ì©"
+
+#: index.docbook:777
+msgid "read-write"
+msgstr "ì격íì§ ìì ì½ê¸°-ì°ê¸°"
+
+#: index.docbook:778
+msgid "transactional"
+msgstr "ì½ê¸°-ì°ê¸°"
+
+#: index.docbook:824
+msgid "Managing the caches"
+msgstr "<entry>ì</entry>"
+
+#: index.docbook:826
+msgid "Whenever you pass an object to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal> and whenever you retrieve an object using <literal>load()</literal>, <literal>get()</literal>, <literal>list()</literal>, <literal>iterate()</literal> or <literal>scroll()</literal>, that object is added to the internal cache of the <literal>Session</literal>."
+msgstr "ìºìë¤ì ê´ë¦¬í기"
+
+#: index.docbook:833
+msgid "When <literal>flush()</literal> is subsequently called, the state of that object will be synchronized with the database. If you do not want this synchronization to occur or if you are processing a huge number of objects and need to manage memory efficiently, the <literal>evict()</literal> method may be used to remove the object and its collections from the first-level cache."
+msgstr "ë¹ì ì´ ê°ì²´ë¥¼ <literal>save()</literal>, <literal>update()</literal> ëë <literal>saveOrUpdate()</literal>ì ì ë¬í ëë§ë¤ ê·¸ë¦¬ê³ ë¹ì ì´ <literal>load()</literal>, <literal>get()</literal>, <literal>list()</literal>, <literal>iterate()</literal> ëë <literal>scroll()</literal>ì ì¬ì©íì¬ ê°ì²´ë¥¼ ê²ìí ëë§ë¤, ê·¸ ê°ì²´ë <literal>Session</literal>ì ë´ë¶ ìºìì ì¶ê°ëë¤."
+
+#: index.docbook:841
+msgid ""
+ "<![CDATA[ScrollableResult cats = sess.createQuery(\"from Cat as cat\").scroll(); //a huge result set\n"
+ "while ( cats.next() ) {\n"
+ " Cat cat = (Cat) cats.get(0);\n"
+ " doSomethingWithACat(cat);\n"
+ " sess.evict(cat);\n"
+ "}]]>"
+msgstr "<literal>flush()</literal>ê° ì°¨íì ì¼ë¡ í¸ì¶ë ë, ê·¸ ê°ì²´ì ìíë ë°ì´í°ë² ì´ì¤ì ë기í ë ê²ì´ë¤. ë§ì¼ ë¹ì ì´ ì´ ë기íê° ë°ìëë ê²ì ìíì§ ìê±°ë ë§ì¼ ë¹ì ì´ ëëì ê°ì²´ë¤ì ì²ë¦¬ ì¤ì´ê³ ë©ëª¨ë¦¬ë¥¼ í¨ì¨ì ì¼ë¡ ê´ë¦¬í íìê° ìì ê²½ì°, <literal>evict()</literal> ë©ìëë first-level ìºìë¡ë¶í° ê·¸ ê°ì²´ì ê·¸ê²ì ì½ë ì
ë¤ì ì ê±°íëë° ì¬ì©ë ì ìë¤."
+
+#: index.docbook:843
+msgid "The <literal>Session</literal> also provides a <literal>contains()</literal> method to determine if an instance belongs to the session cache."
+msgstr ""
+ "<![CDATA[ScrollableResult cats = sess.createQuery(\"from Cat as cat\").scroll(); //a huge result set\n"
+ "while ( cats.next() ) {\n"
+ " Cat cat = (Cat) cats.get(0);\n"
+ " doSomethingWithACat(cat);\n"
+ " sess.evict(cat);\n"
+ "}]]>"
+
+#: index.docbook:848
+msgid "To completely evict all objects from the session cache, call <literal>Session.clear()</literal>"
+msgstr "<literal>Session</literal>ì ëí ì¸ì¤í´ì¤ê° ì¸ì
ìºìì ìíëì§ ì¬ë¶ë¥¼ ê²°ì íëë° <literal>contains()</literal> ë©ìë를 ì ê³µíë¤."
+
+#: index.docbook:852
+msgid "For the second-level cache, there are methods defined on <literal>SessionFactory</literal> for evicting the cached state of an instance, entire class, collection instance or entire collection role."
+msgstr "ì¸ì
ìºìë¡ë¶í° 모ë ê°ì²´ë¤ì ìì íê² í´ê±°ìí¤ê¸° ìí´, <literal>Session.clear()</literal>를 í¸ì¶íë¼."
+
+#: index.docbook:858
+msgid ""
+ "<![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat\n"
+ "sessionFactory.evict(Cat.class); //evict all Cats\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\", catId); //evict a particular collection of kittens\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\"); //evict all kitten collections]]>"
+msgstr "second-level ìºìì ê²½ì°, íëì ì¸ì¤í´ì¤, ì ì²´ í´ëì¤, ì½ë ì
ì¸ì¤í´ì¤ ëë ì ì²´ ì½ë ì
roleì ìºìë ìí를 í´ê±°ìí¤ë <literal>SessionFactory</literal> ìì ì ìë ë©ìëë¤ì´ ì¡´ì¬íë¤."
+
+#: index.docbook:860
+msgid "The <literal>CacheMode</literal> controls how a particular session interacts with the second-level cache."
+msgstr ""
+ "<![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat\n"
+ "sessionFactory.evict(Cat.class); //evict all Cats\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\", catId); //evict a particular collection of kittens\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\"); //evict all kitten collections]]>"
+
+#: index.docbook:867
+msgid "<literal>CacheMode.NORMAL</literal> - read items from and write items to the second-level cache"
+msgstr "<literal>CacheMode</literal>ë í¹ì ì¸ì
ì´ second-level ìºìì ì´ë»ê² ìí¸ìì©íëì§ë¥¼ ì ì´íë¤"
+
+#: index.docbook:872
+msgid "<literal>CacheMode.GET</literal> - read items from the second-level cache, but don't write to the second-level cache except when updating data"
+msgstr "<literal>CacheMode.NORMAL</literal> - second-level ìºìë¡ë¶í° ìì´í
ë¤ì ì½ì´ë¤ì´ê³ second-level ìºìë¡ ìì´í
ë¤ì 기ë¡íë¤"
+
+#: index.docbook:878
+msgid "<literal>CacheMode.PUT</literal> - write items to the second-level cache, but don't read from the second-level cache"
+msgstr "<literal>CacheMode.GET</literal> - second-level ìºìë¡ë¶í° ìì´í
ë¤ì ì½ì´ë¤ì´ì§ë§, ë°ì´í°ë¥¼ ì
ë°ì´í¸í ë를 ì ì¸íë©´ second-level ìºìë¡ ê¸°ë¡íì§ ìëë¤"
+
+#: index.docbook:884
+msgid "<literal>CacheMode.REFRESH</literal> - write items to the second-level cache, but don't read from the second-level cache, bypass the effect of <literal>hibernate.cache.use_minimal_puts</literal>, forcing a refresh of the second-level cache for all items read from the database"
+msgstr "<literal>CacheMode.PUT</literal> - ìì´í
ë¤ì second-level ìºìì 기ë¡íì§ë§, second-level ìºìë¡ë¶í° ì½ì´ë¤ì´ì§ ìëë¤"
+
+#: index.docbook:892
+msgid "To browse the contents of a second-level or query cache region, use the <literal>Statistics</literal> API:"
+msgstr "<literal>CacheMode.REFRESH</literal> - ìì´í
ë¤ì second-level ìºìë¡ê¸°ë¡íì§ë§, second-level ìºìë¡ë¶í° ì½ì´ë¤ì´ì§ ìê³ , ë°ì´í°ë² ì´ì¤ë¡ë¶í° ì½ì´ë¤ì¸ 모ë ìì´í
ë¤ì ëí second-level ìºìì ê°±ì ì ê°ì ìì¼, <literal>hibernate.cache.use_minimal_puts</literal>ì í¨ê³¼ë¥¼ 무ìíë¤"
+
+#: index.docbook:897
+msgid ""
+ "<![CDATA[Map cacheEntries = sessionFactory.getStatistics()\n"
+ " .getSecondLevelCacheStatistics(regionName)\n"
+ " .getEntries();]]>"
+msgstr "second-level ìºì ëë ì§ì ìºì ììì ë´ì©ë¬¼ì ë¸ë¼ì°ì§íë ¤ë©´ <literal>Statistics</literal> API를 ì¬ì©íë¼:"
+
+#: index.docbook:899
+msgid "You'll need to enable statistics, and, optionally, force Hibernate to keep the cache entries in a more human-understandable format:"
+msgstr ""
+ "<![CDATA[Map cacheEntries = sessionFactory.getStatistics()\n"
+ " .getSecondLevelCacheStatistics(regionName)\n"
+ " .getEntries();]]>"
+
+#: index.docbook:904
+msgid ""
+ "<![CDATA[hibernate.generate_statistics true\n"
+ "hibernate.cache.use_structured_entries true]]>"
+msgstr "ë¹ì ì íµê³ë¥¼ ì´ì© ê°ë¥íê² íê³ , ì íì ì¼ë¡ Hibernateë¡ íì¬ê¸ ìºì ìí¸ë¦¬ë¤ì ë³´ë¤ ì¸ê°ìê² ì´í´ê°ë¥í íìì¼ë¡ ì ì§ìí¤ëë¡ ê°ì ìí¤ë ê²ì´ íìí ê²ì´ë¤:"
+
+#: index.docbook:909
+msgid "The Query Cache"
+msgstr ""
+ "<![CDATA[hibernate.generate_statistics true\n"
+ "hibernate.cache.use_structured_entries true]]>"
+
+#: index.docbook:911
+msgid "Query result sets may also be cached. This is only useful for queries that are run frequently with the same parameters. To use the query cache you must first enable it:"
+msgstr "ì§ì ìºì"
+
+#: index.docbook:916
+msgid "<![CDATA[hibernate.cache.use_query_cache true]]>"
+msgstr "ì§ì ê²°ê³¼ ì
ë¤ì´ ëí ìºìë ìë ìë¤. ì´ê²ì ëì¼í íë¼ë¯¸í°ë¤ì ê°ì§ê³ ì주 ì¤íëë ì§ìë¤ìë§ ì ì©íë¤. ì§ì ìºì를 ì¬ì©í기 ìí´ ë¹ì ì 먼ì ê·¸ê²ì ì´ì© ê°ë¥íëë¡ í´ì¼ íë¤:"
+
+#: index.docbook:918
+msgid "This setting causes the creation of two new cache regions - one holding cached query result sets (<literal>org.hibernate.cache.StandardQueryCache</literal>), the other holding timestamps of the most recent updates to queryable tables (<literal>org.hibernate.cache.UpdateTimestampsCache</literal>). Note that the query cache does not cache the state of the actual entities in the result set; it caches only identifier values and results of value type. So the query cache should always be used in conjunction with the second-level cache."
+msgstr "<![CDATA[hibernate.cache.use_query_cache true]]>"
+
+#: index.docbook:928
+msgid "Most queries do not benefit from caching, so by default queries are not cached. To enable caching, call <literal>Query.setCacheable(true)</literal>. This call allows the query to look for existing cache results or add its results to the cache when it is executed."
+msgstr "ì´ ì¤ì ì ë ê°ì ìë¡ì´ ìºì ììë¤ - ìºìë ì§ì ê²°ê³¼ ì
ë¤ì ë³´ê´íë ê² (<literal>org.hibernate.cache.StandardQueryCache</literal>), ì§ì ê°ë¥í í
ì´ë¸ë¤ì ëí ê°ì¥ ìµì ì
ë°ì´í¸ë¤ì ëí timestampë¤ì ë³´ê´íë ë¤ë¥¸ ê² (<literal>org.hibernate.cache.UpdateTimestampsCache</literal>)-ì ìì±ì ê°ì íë¤ . ì§ì ìºìë ê²°ê³¼ ì
ë´ì ì¤ì ìí°í°ë¤ì ìí를 ìºììí¤ì§ ììì ë
¸í¸íë¼; ê·¸ê²ì ì¤ì§ ìë³ì ê°ë¤ê³¼ ê° íì
ì ê²°ê³¼ë¤ ë§ì ìºììí¨ë¤. ë°ë¼ì ì§ì ìºìë íì second-level ìºìì í¨ê» ì¬ì©ëì´ì¼ íë¤."
+
+#: index.docbook:935
+msgid "If you require fine-grained control over query cache expiration policies, you may specify a named cache region for a particular query by calling <literal>Query.setCacheRegion()</literal>."
+msgstr "ëë¶ë¶ì ì§ìë¤ì ìºì±ì¼ë¡ë¶í° ì´ì ì´ ì기ì, ëí´í¸ë¡ ì§ìë¤ì ìºìëì§ ìëë¤. ìºì±ì ì´ì© ê°ë¥íëë¡ íë ¤ë©´, <literal>Query.setCacheable(true)</literal>를 í¸ì¶íë¼. ì´ í¸ì¶ì 기존 ìºì ê²°ê³¼ë¤ì ì°¾ë ê²ì ì§ììê² íì©í´ì£¼ê±°ë ì§ìê° ì¤íë ë ê·¸ê²ì ê²°ê³¼ë¤ì ìºìì ì¶ê°íë ê²ì íì©í´ì¤ë¤."
+
+#: index.docbook:941
+msgid ""
+ "<![CDATA[List blogs = sess.createQuery(\"from Blog blog where blog.blogger = :blogger\")\n"
+ " .setEntity(\"blogger\", blogger)\n"
+ " .setMaxResults(15)\n"
+ " .setCacheable(true)\n"
+ " .setCacheRegion(\"frontpages\")\n"
+ " .list();]]>"
+msgstr "ë§ì¼ ë¹ì ì´ ì§ì ìºì ë§ë£ ì ì±
ë¤ì ëí ì¸ë°í ì ì´ë¥¼ íìë¡ í ê²½ì°, ë¹ì ì <literal>Query.setCacheRegion()</literal>ì í¸ì¶í¨ì¼ë¡ì¨ í¹ë³í ì§ìì ëí´ ëª
ëª
ëë ìºì ììì ì§ì í ìë ìë¤."
+
+#: index.docbook:943
+msgid "If the query should force a refresh of its query cache region, you should call <literal>Query.setCacheMode(CacheMode.REFRESH)</literal>. This is particularly useful in cases where underlying data may have been updated via a separate process (i.e., not modified through Hibernate) and allows the application to selectively refresh particular query result sets. This is a more efficient alternative to eviction of a query cache region via <literal>SessionFactory.evictQueries()</literal>."
+msgstr ""
+ "<![CDATA[List blogs = sess.createQuery(\"from Blog blog where blog.blogger = :blogger\")\n"
+ " .setEntity(\"blogger\", blogger)\n"
+ " .setMaxResults(15)\n"
+ " .setCacheable(true)\n"
+ " .setCacheRegion(\"frontpages\")\n"
+ " .list();]]>"
+
+#: index.docbook:955
+msgid "Understanding Collection performance"
+msgstr "ë§ì¼ ì§ìê° ê·¸ê²ì ì§ì ìºì ììì ê°±ì ì ê°ì ìì¼ì¼ íë ê²½ì°ì, ë¹ì ì <literal>Query.setCacheMode(CacheMode.REFRESH)</literal>를 í¸ì¶í´ì¼ íë¤. ì´ê²ì 기본 ë°ì´í°ê° ë³ëì íë¡ì¸ì¤ë¥¼ íµí´ ì
ë°ì´í¸ëìê³ (ì를 ë¤ë©´, Hibernate를 íµí´ ë³ê²½ëì§ ììê³ ) í¹ì ì§ì ê²°ê³¼ ì
ë¤ì ì íì ì¼ë¡ ê°±ì íë ê²ì ì´í리ì¼ì´ì
ìê² íì©í´ì£¼ë ê²½ì°ë¤ìì í¹ë³í ì ì©íë¤. ì´ê²ì <literal>SessionFactory.evictQueries()</literal>를 íµí´ ì§ì ìºì ììì í´ê±°ìí¤ë ë³´ë¤ í¨ê³¼ì ì¸ ëìì´ë¤."
+
+#: index.docbook:957
+msgid "We've already spent quite some time talking about collections. In this section we will highlight a couple more issues about how collections behave at runtime."
+msgstr "ì½ë ì
í¼í¬ë¨¼ì¤ ì´í´í기"
+
+#: index.docbook:964
+msgid "Taxonomy"
+msgstr "ì°ë¦¬ëì´ë¯¸ ì½ë ì
ë¤ì ê´í´ ì기íëë° ê½¤ ë§ì ìê°ì ììíë¤. ì´ ì ìì ì°ë¦¬ë ì½ë ì
ë¤ì´ ì¤í ìì ì´ë»ê² íìíëì§ì ê´í í ìì ìì ë¤ì ì¡°ëª
í ê²ì´ë¤."
+
+#: index.docbook:966
+msgid "Hibernate defines three basic kinds of collections:"
+msgstr "<title>ë¶ë¥</title>"
+
+#: index.docbook:970
+msgid "collections of values"
+msgstr "Hibernateë ì¸ ê°ì§ 기본ì ì¸ ì¢
ë¥ì ì½ë ì
ë¤ì ì ìíë¤:"
+
+#: index.docbook:973
+msgid "one to many associations"
+msgstr "ê°ë¤ì ê°ì§ ì½ë ì
ë¤"
+
+#: index.docbook:976
+msgid "many to many associations"
+msgstr "one to many ì°ê´ë¤"
+
+#: index.docbook:980
+msgid "This classification distinguishes the various table and foreign key relationships but does not tell us quite everything we need to know about the relational model. To fully understand the relational structure and performance characteristics, we must also consider the structure of the primary key that is used by Hibernate to update or delete collection rows. This suggests the following classification:"
+msgstr "many to many ì°ê´ë¤"
+
+#: index.docbook:991
+msgid "indexed collections"
+msgstr "ì´ ë¶ë¥ë ì¬ë¬ ê°ì§ í
ì´ë¸ê³¼ foreign key ê´ê³ë¤ì 구ë³ì§ì§ë§ ì°ë¦¬ê° ê´ê³í 모íì ëí´ ì íìê° ìë 모ë ê²ì ì°ë¦¬ìê² ë§í´ì£¼ì§ ìëë¤. ê´ê³í 구조ì í¼í¬ë¨¼ì¤ í¹ì§ë¤ì ìì íê² ì´í´í기 ìí´, ì°ë¦¬ë ëí ì½ë ì
íë¤ì ì
ë°ì´í¸íê±°ë ìì í기 ìí´ Hibernateì ìí´ ì¬ì©ëë íë¼ì´ë¨¸ë¦¬ í¤ì 구조를 ê²í í´ì¼ íë¤. ì´ê²ì ë¤ì ë¶ë¥ë¥¼ ì ìíë¤:"
+
+#: index.docbook:994
+msgid "sets"
+msgstr "ì¸ë±ì± ë ì½ë ì
ë¤"
+
+#: index.docbook:997
+msgid "bags"
+msgstr "setë¤"
+
+#: index.docbook:1001
+msgid "All indexed collections (maps, lists, arrays) have a primary key consisting of the <literal><key></literal> and <literal><index></literal> columns. In this case collection updates are usually extremely efficient - the primary key may be efficiently indexed and a particular row may be efficiently located when Hibernate tries to update or delete it."
+msgstr "bagë¤"
+
+#: index.docbook:1009
+msgid "Sets have a primary key consisting of <literal><key></literal> and element columns. This may be less efficient for some types of collection element, particularly composite elements or large text or binary fields; the database may not be able to index a complex primary key as efficently. On the other hand, for one to many or many to many associations, particularly in the case of synthetic identifiers, it is likely to be just as efficient. (Side-note: if you want <literal>SchemaExport</literal> to actually create the primary key of a <literal><set></literal> for you, you must declare all columns as <literal>not-null=\"true\"</literal>.)"
+msgstr "모ë ì¸ë±ì±ë ì½ë ì
ë¤(mapë¤, listë¤, arrayë¤)ì <literal><key></literal>ì <literal><index></literal> 컬ë¼ë¤ë¡ ì´ë£¨ì´ì§ íë¼ì´ë¨¸ë¦¬ í¤ë¥¼ ê°ëë¤. ì´ ê²½ì°ì ì½ë ì
ì
ë°ì´í¸ë¤ì ëê° ê·¹í í¨ì¨ì ì´ë¤ - Hibernateê° ê·¸ê²ì ì
ë°ì´í¸ë ìì 를 ìëí ë íë¼ì´ë¨¸ë¦¬ í¤ë í¨ì¨ì ì¼ë¡ ì¸ë±ì±ë ì ìê³ í¹ì íì í¨ì¨ì ì¼ë¡ ìì¹ì§ìì§ ì ìë¤."
+
+#: index.docbook:1020
+msgid "<literal><idbag></literal> mappings define a surrogate key, so they are always very efficient to update. In fact, they are the best case."
+msgstr "Setë¤ì <literal><key></literal>ì ìì 컬ë¼ë¤ë¡ 구ì±ë íë¼ì´ë¨¸ë¦¬ í¤ë¥¼ ê°ëë¤. ì´ê²ì ëªëª ì íì ì½ë ì
ìì, í¹í composite ììë¤ ëë ëí í
ì¤í¸ ëë ë°ì´ë리 íëë¤ì ëí´ ë í¨ì¨ì ì¼ ì ìë¤; ë°ì´í°ë² ì´ì¤ë ë³µì¡í íë¼ì´ë¨¸ë¦¬ í¤ë¥¼ í¨ì¨ì ì¼ë¡ ì¸ë±ì±íë ê²ì´ ë¶ê°ë¥í ìë ìë¤. ë°ë©´ì one to many ëë many to many ì°ê´ë¤ì ê²½ì°, í¹í í©ì± ìë³ìë¤ì ê²½ì°ìë í¨ì¨ì ì¼ ì ìì ê² ê°ë¤.(ë¶ì-ë
¸í¸: ë§ì¼ ë¹ì ì´ ë¹ì ì ìí <literal><set></literal>ì íë¼ì´ë¨¸ë¦¬ í¤ë¥¼ ì¤ì ë¡ ìì±ìí¤ê¸° ìí´ <literal>SchemaExport</literal>를 ìíë¤ë©´ ë¹ì ì 모ë 컬ë¼ë¤ì <literal>not-null=\"true\"</literal>ë¡ ì ì¸í´ì¼ íë¤.)"
+
+#: index.docbook:1025
+msgid "Bags are the worst case. Since a bag permits duplicate element values and has no index column, no primary key may be defined. Hibernate has no way of distinguishing between duplicate rows. Hibernate resolves this problem by completely removing (in a single <literal>DELETE</literal>) and recreating the collection whenever it changes. This might be very inefficient."
+msgstr "<literal><idbag></literal> 매íë¤ì ëì© í¤ë¥¼ ì ìíì¬ì, ê·¸ê²ë¤ì íì ì
ë°ì´í¸ì ë§¤ì° í¨ì¨ì ì´ë¤. ì¬ì¤, ê·¸ê²ë¤ì ìµìì ê²½ì°ì´ë¤."
+
+#: index.docbook:1033
+msgid "Note that for a one-to-many association, the \"primary key\" may not be the physical primary key of the database table - but even in this case, the above classification is still useful. (It still reflects how Hibernate \"locates\" individual rows of the collection.)"
+msgstr "Bagë¤ì ê°ì¥ ëì ê²½ì°ì´ë¤. ìëíë©´ íëì bagì ì¤ë³µ ìì ê°ë¤ì íì©íê³ ì¸ë±ì¤ 컬ë¼ì ê°ì§ ì기 ë문ì, íë¼ì´ë¨¸ë¦¬ í¤ê° ì ìë ì ìë¤. Hibernateë ì¤ë³µ íë¤ ì¬ì´ë¥¼ êµ¬ë¶ ì§ë ë°©ë²ì ê°ê³ ìì§ ìë¤. Hibernateë ê·¸ê²ì´ ë³ê²½ë ëë§ë¤ (í ê°ì DELETEë¡) ì½ë ì
ì ìì íê² ì ê±°íê³ ë¤ì ìì±ìí´ì¼ë¡ì¨ ì´ ë¬¸ì 를 í´ê²°íë¤. ì´ê²ì ë§¤ì° ë¹í¨ì¨ì ì´ë¤."
+
+#: index.docbook:1043
+msgid "Lists, maps, idbags and sets are the most efficient collections to update"
+msgstr "one-to-many ì°ê´ì ê²½ì°, \"íë¼ì´ë¨¸ë¦¬ í¤\"ë ë°ì´í°ë² ì´ì¤ í
ì´ë¸ì 물리ì ì¸ íë¼ì´ë¨¸ë¦¬ í¤ê° ìë ìë ìì§ë§- ì´ ê²½ì°ììë ìì ë¶ë¥ë ì¬ì í ì ì©íë¤. (ê·¸ê²ì ì¬ì í Hibernateê° ì½ë ì
ì ê°ë³ íë¤ì ì´ë»ê² \"ìì¹ì§ì°ë\"ì§ë¥¼ ë°ìíë¤.)"
+
+#: index.docbook:1045
+msgid "From the discussion above, it should be clear that indexed collections and (usually) sets allow the most efficient operation in terms of adding, removing and updating elements."
+msgstr "List, map, idbag, setë¤ì updateì ê°ì¥ í¨ì¨ì ì¸ ì½ë ì
ë¤ì´ë¤"
+
+#: index.docbook:1051
+msgid "There is, arguably, one more advantage that indexed collections have over sets for many to many associations or collections of values. Because of the structure of a <literal>Set</literal>, Hibernate doesn't ever <literal>UPDATE</literal> a row when an element is \"changed\". Changes to a <literal>Set</literal> always work via <literal>INSERT</literal> and <literal>DELETE</literal> (of individual rows). Once again, this consideration does not apply to one to many associations."
+msgstr "ìì ë
¼ììì, ì¸ë±ì±ë ì½ë ì
ë¤ê³¼ (ëê°) setë¤ì´ ììë¤ì ì¶ê°íê³ , ì ê±°íê³ ì
ë°ì´í¸í¨ì ìì´ ê°ì¥ í¨ì¨ì ì¸ ì¤í¼ë ì´ì
ì íì©í´ì¤ë¤."
+
+#: index.docbook:1060
+msgid "After observing that arrays cannot be lazy, we would conclude that lists, maps and idbags are the most performant (non-inverse) collection types, with sets not far behind. Sets are expected to be the most common kind of collection in Hibernate applications. This is because the \"set\" semantics are most natural in the relational model."
+msgstr "ìë§ ì¸ë±ì± ë ì½ë ì
ë¤ì´ many to many ì°ê´ë¤ì ìí ëë ê°ë¤ì ê°ì§ ì½ë ì
ë¤ì ìí setë¤ì ëí´ ê°ê³ ìë íë ì´ìì ì¥ì ë¤ì´ ì¡´ì¬íë¤. <literal>Set</literal>ì 구조 ë문ì, Hibernateë ììê° \"ë³ê²½\"ë ë íì <literal>UPDATE</literal> íì§ ìëë¤. <literal>Set</literal>ì ëí ë³ê²½ë¤ì íì (ê°ë³ íë¤ì ëí) <literal>INSERT</literal>ì <literal>DELETE</literal>를 íµí´ ëìíë¤. ë¤ì ì´ ê²í ë one to many ì°ê´ë¤ì ì ì©ëì§ ìëë¤."
+
+#: index.docbook:1068
+msgid "However, in well-designed Hibernate domain models, we usually see that most collections are in fact one-to-many associations with <literal>inverse=\"true\"</literal>. For these associations, the update is handled by the many-to-one end of the association, and so considerations of collection update performance simply do not apply."
+msgstr "ë°°ì´ë¤ì´ lazy ë ì ììì ê´ì°° í íì, ì°ë¦¬ë listë¤, mapë¤, ê·¸ë¦¬ê³ idbagë¤ì´ ë¨ë
ì´ ìë setë¤ì ê°ì§ ê°ì¥ í¼í¬ë¨¼ì¤ê° ì¢ì(non-inverse) ì½ë ì
íì
ë¤ìì ê²°ë¡ ì§ì ê²ì´ë¤. Setë¤ì Hibernate ì´í리ì¼ì´ì
ë¤ìì ê°ì¥ ê³µíµë ì¢
ë¥ì ì½ë ì
ì´ ë ê²ì´ë¼ ììëë¤. ì´ê²ì \"set\" ìë¯¸ê° ê´ê³í 모íìì ê°ì¥ ê³ ì í ê²ì´ê¸° ë문ì´ë¤."
+
+#: index.docbook:1078
+msgid "Bags and lists are the most efficient inverse collections"
+msgstr "íì§ë§, ì ì¤ê³ë Hibernate ëë©ì¸ 모íë¤ìì, ì°ë¦¬ë ëê° ëë¶ë¶ì ì½ë ì
ë¤ì´ ì¬ì¤ <literal>inverse=\"true\"</literal>를 ê°ì§ one-to-many ì°ê´ë¤ìì ë³´ê² ëë¤. ì´ë¤ ì°ê´ë¤ì ê²½ì°, ì
ë°ì´í¸ë ì°ê´ì many-to-one ìëì ìí´ ì²ë¦¬ëê³ , ë°ë¼ì ì½ë ì
ì
ë°ì´í¸ í¼í¬ë¨¼ì¤ì ëí ê²í ë¤ì ë¨ìí ì ì©ëì§ ìëë¤."
+
+#: index.docbook:1080
+msgid "Just before you ditch bags forever, there is a particular case in which bags (and also lists) are much more performant than sets. For a collection with <literal>inverse=\"true\"</literal> (the standard bidirectional one-to-many relationship idiom, for example) we can add elements to a bag or list without needing to initialize (fetch) the bag elements! This is because <literal>Collection.add()</literal> or <literal>Collection.addAll()</literal> must always return true for a bag or <literal>List</literal> (unlike a <literal>Set</literal>). This can make the following common code much faster."
+msgstr "Bagë¤ê³¼ listë¤ì ê°ì¥ í¨ì¨ì ì¸ inverse ì½ë ì
ë¤ì´ë¤"
+
+#: index.docbook:1090
+msgid ""
+ "<![CDATA[Parent p = (Parent) sess.load(Parent.class, id);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c); //no need to fetch the collection!\n"
+ "sess.flush();]]>"
+msgstr "ë¨ì§ ë¹ì ì´ ììí bagë¤ì ë²ë¦¬ê¸° ì ì, bagë¤(ê³¼ ëí listë¤)ì´ setë¤ë³´ë¤ í¨ì¬ ë ì±ë¥ì´ ì¢ì í¹ë³í ê²½ì°ë¤ì´ ì¡´ì¬íë¤. <literal>inverse=\"true\"</literal>를 ê°ì§ ì½ë ì
ë¤(ì를 ë¤ì´, íì¤ ìë°©í¥ one-to-many ê´ê³ í¹ì§)ì ê²½ì°, ì°ë¦¬ë bag ììë¤ì ì´ê¸°í(íì¹) ìí¬ íì ìì´ bag ëë listì ììë¤ì ì¶ê°ìí¬ ì ìë¤! ì´ê²ì <literal>Collection.add()</literal> ëë <literal>Collection.addAll()</literal>ì´ (<literal>Set</literal>ê³¼ë ë¬ë¦¬) íì bag ëë <literal>List</literal>ì ëí´ true를 ë°íí´ì¼í기 ë문ì´ë¤. ì´ê²ì í¨ì¬ ë¤ì ê³µíµì ì¸ ì½ë를 ë ë¹ ë¥´ê² ë§ë¤ ì ìë¤."
+
+#: index.docbook:1095
+msgid "One shot delete"
+msgstr ""
+ "<![CDATA[Parent p = (Parent) sess.load(Parent.class, id);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c); //no need to fetch the collection!\n"
+ "sess.flush();]]>"
+
+#: index.docbook:1097
+msgid "Occasionally, deleting collection elements one by one can be extremely inefficient. Hibernate isn't completely stupid, so it knows not to do that in the case of an newly-empty collection (if you called <literal>list.clear()</literal>, for example). In this case, Hibernate will issue a single <literal>DELETE</literal> and we are done!"
+msgstr "ì ì· delete"
+
+#: index.docbook:1104
+msgid "Suppose we add a single element to a collection of size twenty and then remove two elements. Hibernate will issue one <literal>INSERT</literal> statement and two <literal>DELETE</literal> statements (unless the collection is a bag). This is certainly desirable."
+msgstr "ì¢
ì¢
ì½ë ì
ììë¤ì íëì© ìì íë ê²ì ê·¹í ë¹í¨ì¨ì ì¼ ì ìë¤! Hibernateë ìì íê² ë°ë³´ê° ìëì´ì, ê·¸ê²ì ìë¡ì´ 공백ì ì½ë ì
ì ê²½ì°(ì를 ë¤ì´ ë¹ì ì´ <literal>list.clear()</literal>를 í¸ì¶íì ê²½ì°)ì ê·¸ê²ì ííì§ ìì ê²ìì ìê³ ìë¤. ì´ ê²½ì°ì, Hibernateë íëì <literal>DELETE</literal> ëª
ë ¹ì ë´ë¦´ ê²ì´ê³ ì°ë¦¬ë 모ë ííë¤!"
+
+#: index.docbook:1110
+msgid "However, suppose that we remove eighteen elements, leaving two and then add thee new elements. There are two possible ways to proceed"
+msgstr "ì°ë¦¬ê° ê¸¸ì´ 20ì¸ íëì ì½ë ì
ì í ê°ì ìì를 ì¶ê°íê³ ê·¸ë° ë¤ì ë ê°ì ììë¤ì ì ê±°íë¤ê³ ê°ì íì. Hibernateë (ì½ë ì
ì´ bagê° ìë í) í ê°ì <literal>INSERT</literal> 문ì¥ê³¼ ë ê°ì <literal>DELETE</literal> 문ì¥ì ëª
ë ¹ ë´ë¦´ ê²ì´ë¤. ì´ê²ì íì¤í ë§ìì ë ë¤."
+
+#: index.docbook:1117
+msgid "delete eighteen rows one by one and then insert three rows"
+msgstr "íì§ë§, ì°ë¦¬ê° ë ê°ì ììë¤ì ë¨ê²¨ëì± 18 ê°ì ììë¤ì ì ê±°íê³ ëì ì¸ ê°ì ìë¡ì´ ììë¤ì ì¶ê°íë¤ê³ ê°ì íì. ë ê°ì§ ê°ë¥í ì²ë¦¬ ë°©ë²ë¤ì´ ì¡´ì¬íë¤."
+
+#: index.docbook:1120
+msgid "remove the whole collection (in one SQL <literal>DELETE</literal>) and insert all five current elements (one by one)"
+msgstr "íëì© ì´ ì¬ë ê°ì íë¤ì ìì í ë¤ìì ì¸ ê°ì íë¤ì ì½ì
ìí¨ë¤"
+
+#: index.docbook:1125
+msgid "Hibernate isn't smart enough to know that the second option is probably quicker in this case. (And it would probably be undesirable for Hibernate to be that smart; such behaviour might confuse database triggers, etc.)"
+msgstr "(í ê°ì SQL <literal>DELETE</literal>ë¡)ì ì²´ ì½ë ì
ì ìì íê³ ëª¨ë ë¤ì¯ê°ì íì¬ ììë¤ì (íëì©) insert ìí¨ë¤"
+
+#: index.docbook:1131
+msgid "Fortunately, you can force this behaviour (ie. the second strategy) at any time by discarding (ie. dereferencing) the original collection and returning a newly instantiated collection with all the current elements. This can be very useful and powerful from time to time."
+msgstr "Hibernateë ë ë²ì§¸ ìµì
ì´ ìë§ ì´ ê²½ì°ì ë ë¹ ë¥´ë¤ë ì ì ì ë§í¼ 충ë¶í ì리íì§ ìë¤.(ê·¸ë¦¬ê³ Hibernateê° ê·¸ë ê² ì리í´ì§ë ê²ì í¬ë§ íë ê²ì ê°ë¥íì§ ìì ê²ì´ë¤; ê·¸ë° í¹ì§ì ë°ì´í°ë² ì´ì¤ í¸ë¦¬ê±°ë¤ ë±ì í¼ëì¤ë½ê² í ìë ìë¤.)"
+
+#: index.docbook:1137
+msgid "Of course, one-shot-delete does not apply to collections mapped <literal>inverse=\"true\"</literal>."
+msgstr "ë¤íí, ë¹ì ì ìëì ì½ë ì
ì í기ìí¤ê³ (ì를 ë¤ì´ 참조 í´ì íê³ ) 모ë íì¬ ììë¤ì ê°ì§ ìë¡ì´ ì´ê¸°íë ì½ë ì
ì ë°íí¨ì¼ë¡ì¨ ì무ëë ì§ ì´ í¹ì§ì ê°ì ìí¬ ì ìë¤. ì´ê²ì ìê°ì´ íë¦ì ë°ë¼ ë§¤ì° ì ì©íê³ ê°ë ¥í´ì§ ì ìë¤."
+
+#: index.docbook:1146
+msgid "Monitoring performance"
+msgstr "ë¬¼ë¡ ë¨ íë²ì ìì (one-shot-delete)ë <literal>inverse=\"true\"</literal>ë¡ ë§¤íë ì½ë ì
ë¤ì ì ì©ëì§ ìëë¤."
+
+#: index.docbook:1148
+msgid "Optimization is not much use without monitoring and access to performance numbers. Hibernate provides a full range of figures about its internal operations. Statistics in Hibernate are available per <literal>SessionFactory</literal>."
+msgstr "í¼í¬ë¨¼ì¤ 모ëí°ë§í기"
+
+#: index.docbook:1155
+msgid "Monitoring a SessionFactory"
+msgstr "ìµì íë í¼í¬ë¨¼ì¤ ê´ë ¨ ì«ìë¤ì ëí 모ëí°ë§ê³¼ ì ê·¼ ìì´ë ë§ì´ ì¬ì©ëì§ ìëë¤. Hibernateë ê·¸ê²ì ë´ë¶ì ì¸ ì¤í¼ë ì´ì
ë¤ì ëí ì ì²´ ììì í¹ì§ë¤ì ì ê³µíë¤. Hibernateìì Statisticsë <literal>SessionFactory</literal>ì ëí´ ì´ì© ê°ë¥íë¤."
+
+#: index.docbook:1157
+msgid "You can access <literal>SessionFactory</literal> metrics in two ways. Your first option is to call <literal>sessionFactory.getStatistics()</literal> and read or display the <literal>Statistics</literal> yourself."
+msgstr "SessionFactory 모ëí°ë§ í기"
+
+#: index.docbook:1163
+msgid "Hibernate can also use JMX to publish metrics if you enable the <literal>StatisticsService</literal> MBean. You may enable a single MBean for all your <literal>SessionFactory</literal> or one per factory. See the following code for minimalistic configuration examples:"
+msgstr "ë¹ì ì ë ê°ì§ ë°©ë²ë¤ë¡ <literal>SessionFactory</literal> metricsì ì ê·¼í ì ìë¤. ë¹ì ì 첫 ë²ì§¸ ìµì
ì <literal>sessionFactory.getStatistics()</literal>를 í¸ì¶íê³ ë¹ì ì¤ì¤ë¡ <literal>Statistics</literal>를 ì½ê±°ë ëì¤íë ì´ íë ê²ì´ë¤."
+
+#: index.docbook:1170
+msgid ""
+ "<![CDATA[// MBean service registration for a specific SessionFactory\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"myFinancialApp\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory\n"
+ "server.registerMBean(stats, on); // Register the Mbean on the server]]>"
+msgstr "ë§ì¼ ë¹ì ì´ <literal>StatisticsService</literal> MBeanì ì´ì© ê°ë¥íëë¡ í ê²½ì° Hibernateë ëí metrics를 ë°ííëë° JMX를 ì¬ì©í ì ìë¤. ë¹ì ì 모ë ë¹ì ì<literal>SessionFactory</literal>ì ëí´ í ê°ì MBean ëë í©í 리 ë¹ í ê°ë¥¼ ì´ì© ê°ë¥íê² í ì ìë¤. ìµìíì êµ¬ì± ìì ë¤ì ë¤ì ì½ë를 ë³´ë¼:"
+
+#: index.docbook:1173
+msgid ""
+ "<![CDATA[// MBean service registration for all SessionFactory's\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"all\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "server.registerMBean(stats, on); // Register the MBean on the server]]>"
+msgstr ""
+ "<![CDATA[// MBean service registration for a specific SessionFactory\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"myFinancialApp\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory\n"
+ "server.registerMBean(stats, on); // Register the Mbean on the server]]>"
+
+#: index.docbook:1175
+msgid "TODO: This doesn't make sense: In the first case, we retrieve and use the MBean directly. In the second one, we must give the JNDI name in which the session factory is held before using it. Use <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal>"
+msgstr ""
+ "<![CDATA[// MBean service registration for all SessionFactory's\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"all\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "server.registerMBean(stats, on); // Register the MBean on the server]]>"
+
+#: index.docbook:1180
+msgid "You can (de)activate the monitoring for a <literal>SessionFactory</literal>"
+msgstr "TODO: ì´ê²ì ìë¯¸ê° ìë¤: 첫ë²ì§¸ ê²½ì°ì, ì°ë¦¬ë ì§ì MBeanì ê²ìíê³ ì¬ì©íë¤. ë ë²ì§¸ ê²½ì°ì ì°ë¦¬ë JNDI ì´ë¦ì ì¬ì©í기 ì ì ì¸ì
í©í ë¦¬ê° ë³´ê´íê³ ìë JNDI ì´ë¦ì ë¶ì¬í´ì¼ íë¤. <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal>ì ì¬ì©íë¼."
+
+#: index.docbook:1185
+msgid "at configuration time, set <literal>hibernate.generate_statistics</literal> to <literal>false</literal>"
+msgstr "ë¹ì ì <literal>SessionFactory</literal>ì ëí 모ëí°ë§ì (ë¹)íì±í ìí¬ ì ìë¤"
+
+#: index.docbook:1192
+msgid "at runtime: <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> or <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>"
+msgstr "êµ¬ì± ì : <literal>hibernate.generate_statistics</literal>, ëí´í¸ë <literal>false</literal>"
+
+#: index.docbook:1199
+msgid "Statistics can be reset programatically using the <literal>clear()</literal> method. A summary can be sent to a logger (info level) using the <literal>logSummary()</literal> method."
+msgstr "ì¤í ì : <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> ëë <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>"
+
+#: index.docbook:1208
+msgid "Metrics"
+msgstr "Statistics(íµê³ëë¤)ì <literal>clear()</literal> ë©ìë를 ì¬ì©íì¬ íë¡ê·¸ëë° ë°©ìì¼ë¡ ì¬ì¤ì ë ì ìë¤. ìì½ì <literal>logSummary()</literal> ë©ìë를 ì¬ì©íì¬ logger(info ë 벨)ìê² ì ì¡ë ì ìë¤."
+
+#: index.docbook:1210
+msgid "Hibernate provides a number of metrics, from very basic to the specialized information only relevant in certain scenarios. All available counters are described in the <literal>Statistics</literal> interface API, in three categories:"
+msgstr "Metrics"
+
+#: index.docbook:1217
+msgid "Metrics related to the general <literal>Session</literal> usage, such as number of open sessions, retrieved JDBC connections, etc."
+msgstr "Hibernateë ë§¤ì° ê¸°ë³¸ì ì¸ ê²ììë¶í° ì´ë¤ ìë리ì¤ë¤ìë§ ê´ë ¨ë ì 문 ì ë³´ì ì´ë¥´ë ë§ì metrics를 ì ê³µíë¤. 모ë ì´ì© ê°ë¥í ì¹´ì´í°ë¤ì <literal>Statistics</literal> interface APIìì 3ê°ì ì¹´í
ê³ ë¦¬ë¡ ì¤ëª
ëì´ ìë¤:"
+
+#: index.docbook:1223
+msgid "Metrics related to he entities, collections, queries, and caches as a whole (aka global metrics),"
+msgstr "ì´ë ¤ì§ ì¸ì
ë¤ì ê°ì, ê²ìë JDBC 커ë¥ì
ë¤ì ê°ì ë±ê³¼ ê°ì ì¼ë°ì ì¸ <literal>Session</literal> ì¬ì©ì ê´ë ¨ë metrics."
+
+#: index.docbook:1229
+msgid "Detailed metrics related to a particular entity, collection, query or cache region."
+msgstr "ì ì²´ì ì¼ë¡ ìí°í°ë¤, ì½ë ì
ë¤, ì§ìë¤, ê·¸ë¦¬ê³ ìºìë¤ì ê´ë ¨ë metrics(ì ì metricsë¡ ìë ¤ì ¸ ìì),"
+
+#: index.docbook:1236
+msgid "For exampl,e you can check the cache hit, miss, and put ratio of entities, collections and queries, and the average time a query needs. Beware that the number of milliseconds is subject to approximation in Java. Hibernate is tied to the JVM precision, on some platforms this might even only be accurate to 10 seconds."
+msgstr "í¹ì í ìí°í°, ì½ë ì
, ì§ì ëë ìºì ììì ê´ë ¨ë ìì¸ metrics."
+
+#: index.docbook:1243
+msgid "Simple getters are used to access the global metrics (i.e. not tied to a particular entity, collection, cache region, etc.). You can access the metrics of a particular entity, collection or cache region through its name, and through its HQL or SQL representation for queries. Please refer to the <literal>Statistics</literal>, <literal>EntityStatistics</literal>, <literal>CollectionStatistics</literal>, <literal>SecondLevelCacheStatistics</literal>, and <literal>QueryStatistics</literal> API Javadoc for more information. The following code shows a simple example:"
+msgstr "ì를 ë¤ì´ ë¹ì ì ìí°í°, ì½ë ì
, ì§ìë¤ì ìºì ì±ê³µì¨ ë° ì¤í¨ì¨, put(ìì 주, ìºì ìë, putt) ë¹ì¨, ì½ë ì
ë¤ê³¼ ì§ìë¤, ê·¸ë¦¬ê³ íê· ì§ì ì구 ìê° ë±ì ì°¾ì ì ìë¤. ì ë°ë¦¬ì´ë¤ê° ìë°ìì ê·¼ì¬ì¹ì ì¢
ìë¨ì ììíë¼. Hibernateë JVM ì ë°ëì ë¬¶ì¬ ìê³ , ëªëª íë«í¼ë¤ìì ì´ê²ì ì¬ì§ì´ ì½ 10ì´ê° ë ìë ìë¤."
+
+#: index.docbook:1253
+msgid ""
+ "<![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();\n"
+ "\n"
+ "double queryCacheHitCount = stats.getQueryCacheHitCount();\n"
+ "double queryCacheMissCount = stats.getQueryCacheMissCount();\n"
+ "double queryCacheHitRatio =\n"
+ " queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);\n"
+ "\n"
+ "log.info(\"Query Hit ratio:\" + queryCacheHitRatio);\n"
+ "\n"
+ "EntityStatistics entityStats =\n"
+ " stats.getEntityStatistics( Cat.class.getName() );\n"
+ "long changes =\n"
+ " entityStats.getInsertCount()\n"
+ " + entityStats.getUpdateCount()\n"
+ " + entityStats.getDeleteCount();\n"
+ "log.info(Cat.class.getName() + \" changed \" + changes + \"times\" );]]>"
+msgstr "ê°ë¨í getterë¤ì (ì를 ë¤ì´ í¹ì ìí°í°, ì½ë ì
, ìºì ììì 묶ì´ì§ ìì) ì ì metricsì ì ê·¼íëë° ì¬ì©ëë¤. ë¹ì ì ê·¸ê²(í¹ì ìí°í°, ì½ë ì
, ëë ìºì ìì)ì ì´ë¦ì íµí´, ê·¸ë¦¬ê³ ì§ìë¤ì ëí ê·¸ê²ì HQL ëë SQL ííì íµí´ í¹ì ìí°í°, ì½ë ì
, ëë ìºì ììì metricsì ì ê·¼í ì ìë¤. ì¶ê° ì ë³´ë <literal>Statistics</literal>, <literal>EntityStatistics</literal>, <literal>CollectionStatistics</literal>, <literal>SecondLevelCacheStatistics</literal>, ê·¸ë¦¬ê³ <literal>QueryStatistics</literal>를 참조íë¼. ë¤ì ì½ëë ê°ë¨í ìì 를 ë³´ì¬ì¤ë¤:"
+
+#: index.docbook:1255
+msgid "To work on all entities, collections, queries and region caches, you can retrieve the list of names of entities, collections, queries and region caches with the following methods: <literal>getQueries()</literal>, <literal>getEntityNames()</literal>, <literal>getCollectionRoleNames()</literal>, and <literal>getSecondLevelCacheRegionNames()</literal>."
+msgstr ""
+ "<![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();\n"
+ "\n"
+ "double queryCacheHitCount = stats.getQueryCacheHitCount();\n"
+ "double queryCacheMissCount = stats.getQueryCacheMissCount();\n"
+ "double queryCacheHitRatio =\n"
+ " queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);\n"
+ "\n"
+ "log.info(\"Query Hit ratio:\" + queryCacheHitRatio);\n"
+ "\n"
+ "EntityStatistics entityStats =\n"
+ " stats.getEntityStatistics( Cat.class.getName() );\n"
+ "long changes =\n"
+ " entityStats.getInsertCount()\n"
+ " + entityStats.getUpdateCount()\n"
+ " + entityStats.getDeleteCount();\n"
+ "log.info(Cat.class.getName() + \" changed \" + changes + \"times\" );]]>"
+
+#: index.docbook:1161
+msgid "appended paragraph 1"
+msgstr "모ë ìí°í°ë¤, ì½ë ì
ë¤, ì½ë ì
ë¤,ì§ìë¤ ê·¸ë¦¬ê³ ìì ìºìë¤ì ëí´ ìì
í기 ìí´, ë¹ì ì ë¤ì ë©ìëë¤ë¡ì ìí°í°ë¤, ì½ë ì
ë¤, ì§ìë¤, ê·¸ë¦¬ê³ ìì ìºìë¤ì ëí ì´ë¦ë¤ì 목ë¡ì ê²ìí ì ìë¤: <literal>getQueries()</literal>, <literal>getEntityNames()</literal>, <literal>getCollectionRoleNames()</literal>, ê·¸ë¦¬ê³ <literal>getSecondLevelCacheRegionNames()</literal>."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/persistent_classes.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/persistent_classes.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/persistent_classes.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,664 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Persistent Classes"
+msgstr "ìì í´ëì¤ë¤"
+
+#: index.docbook:7
+msgid "Persistent classes are classes in an application that implement the entities of the business problem (e.g. Customer and Order in an E-commerce application). Not all instances of a persistent class are considered to be in the persistent state - an instance may instead be transient or detached."
+msgstr "ìì í´ëì¤ë¤ì ë¹ì§ëì¤ ë¬¸ì ì ìí°í°ë¤(ì를 ë¤ì´ E-Commerce ì´í리ì¼ì´ì
ìì ê³ ê°ì´ë 주문)ì 구ííë ì´í리ì¼ì´ì
ë´ì í´ëì¤ë¤ì´ë¤. ìì í´ëì¤ë¤ì ì¸ì¤í´ì¤ë¤ì ìì ìíì ìë ê²ì¼ë¡ ì í ê°ì£¼ëì§ ìëë¤ - ëì ì íëì ì¸ì¤í´ì¤ë transient ëë detached ìíì¼ ì ìë¤."
+
+#: index.docbook:14
+msgid "Hibernate works best if these classes follow some simple rules, also known as the Plain Old Java Object (POJO) programming model. However, none of these rules are hard requirements. Indeed, Hibernate3 assumes very little about the nature of your persistent objects. You may express a domain model in other ways: using trees of <literal>Map</literal> instances, for example."
+msgstr "Hibernateë ì´ë¤ í´ëì¤ë¤ì´ Plain Old Java Object (POJO) íë¡ê·¸ëë° ëª¨íì¼ë¡ì ìë ¤ì§, ëªëª ê°ë¨í ê·ì¹ë¤ì ë°ë¥¼ ê²½ì°ì ê°ì¥ ì ëìíë¤. íì§ë§ ì´ë¤ ê·ì¹ë¤ ì¤ ì´ë¤ ê²ë ì´ë ¤ì´ ì¬ìë¤ì´ ìëë¤. ì§ì Hibernate3ë ë¹ì ì ìì ê°ì²´ë¤ì í¹ì§ì ëí´ ë§¤ì° ì ì ê²ì ê°ì íë¤. ë¹ì ì ë¤ë¥¸ ë°©ë²ë¤ë¡ ëë©ì¸ 모íì ííí ì ìë¤ : ì를 ë¤ì´ <literal>Map</literal> ì¸ì¤í´ì¤ì í¸ë¦¬ë¤ì ì¬ì©í기."
+
+#: index.docbook:23
+msgid "A simple POJO example"
+msgstr "ê°ë¨í POJO ìì "
+
+#: index.docbook:25
+msgid "Most Java applications require a persistent class representing felines."
+msgstr "ëë¶ë¶ì ìë° ì´í리ì¼ì´ì
ë¤ì ê³ ìì´ê³¼ë¤ì íííë ìì í´ëì¤ë¥¼ íìë¡ íë¤."
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ "\n"
+ " private Date birthdate;\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ " private int litterId;\n"
+ "\n"
+ " private Cat mother;\n"
+ " private Set kittens = new HashSet();\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ "\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ "\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " void setLitterId(int id) {\n"
+ " this.litterId = id;\n"
+ " }\n"
+ " public int getLitterId() {\n"
+ " return litterId;\n"
+ " }\n"
+ "\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " \n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kitten.setMother(this);\n"
+ " kitten.setLitterId( kittens.size() ); \n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ "\n"
+ " private Date birthdate;\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ " private int litterId;\n"
+ "\n"
+ " private Cat mother;\n"
+ " private Set kittens = new HashSet();\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ "\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ "\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " void setLitterId(int id) {\n"
+ " this.litterId = id;\n"
+ " }\n"
+ " public int getLitterId() {\n"
+ " return litterId;\n"
+ " }\n"
+ "\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " \n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kitten.setMother(this);\n"
+ " kitten.setLitterId( kittens.size() ); \n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:31
+msgid "There are four main rules to follow here:"
+msgstr "ì¤ìí ë¤ ê°ì 주ì ê·ì¹ë¤ì´ ë¤ìì ìë¤:"
+
+#: index.docbook:37
+msgid "Implement a no-argument constructor"
+msgstr "ìê·ë¨¼í¸ ìë ìì±ì를 구ííë¼"
+
+#: index.docbook:39
+msgid "<literal>Cat</literal> has a no-argument constructor. All persistent classes must have a default constructor (which may be non-public) so that Hibernate can instantiate them using <literal>Constructor.newInstance()</literal>. We strongly recommend having a default constructor with at least <emphasis>package</emphasis> visibility for runtime proxy generation in Hibernate."
+msgstr "<literal>Cat</literal>ì ìê·ë¨¼í¸ ìë ìì±ì를 ê°ëë¤. 모ë ìì í´ëì¤ë¤ì Hibernateë <literal>Constructor.newInstance()</literal>를 ì¬ì©íì¬ ê·¸ê²ë¤ì ì´ê¸°í ìí¬ ì ìëë¡ ëí´í¸ ìì±ì (publicì´ ìë ì ìë¤)를 ê°ì ¸ì¼ íë¤. ì°ë¦¬ë Hibernate ë´ìì ë°íì íë½ì ìì±ì ìí ìµìíì <emphasis>í¨í¤ì§</emphasis> ê°ìì±(visibility)를 ê°ì§ ëí´í¸ ìì±ì를 ê°ì§ ê²ì ê°ë ¥íê² ê¶ì¥íë¤."
+
+#: index.docbook:49
+msgid "Provide an identifier property (optional)"
+msgstr "identifier íë¡í¼í°ë¥¼ ì ê³µíë¼(ìµì
)"
+
+#: index.docbook:51
+msgid "<literal>Cat</literal> has a property called <literal>id</literal>. This property maps to the primary key column of a database table. The property might have been called anything, and its type might have been any primitive type, any primitive \"wrapper\" type, <literal>java.lang.String</literal> or <literal>java.util.Date</literal>. (If your legacy database table has composite keys, you can even use a user-defined class with properties of these types - see the section on composite identifiers later.)"
+msgstr "<literal>Cat</literal>ì <literal>id</literal>ë¡ ëª
ëª
ë íëì íë¡í¼í°ë¥¼ ê°ëë¤. ì´ íë¡í¼í°ë ë°ì´í°ë² ì´ì¤ í
ì´ë¸ì íë¼ì´ë¨¸ë¦¬ í¤ ì»¬ë¼ì¼ë¡ 매íëë¤. ì´ íë¡í¼í°ë ì´ë¤ ê²ì¼ë¡ ëª
ëª
ë ìë ìê³ , ê·¸ê²ì íì
ì ììì ìì íì
, ìì \"wrapper\" íì
, <literal>java.lang.String</literal> ëë <literal>java.util.Date</literal>ì¼ ì ìë¤. (ë§ì¼ ë¹ì ì 리거ì ë°ì´í°ë² ì´ì¤ í
ì´ë¸ì´ composite í¤ë¤ì ê°ê³ ìë¤ë©´, ë¹ì ì ì´ë¤ íì
ë¤ì ê°ì§ ì¬ì©ì ì ì í´ëì¤ë¥¼ ì¬ì©í ìë ìë¤ - ëì¤ì composite ìë³ìë¤ì ëí ì ì ë³´ë¼)"
+
+#: index.docbook:60
+msgid "The identifier property is strictly optional. You can leave them off and let Hibernate keep track of object identifiers internally. We do not recommend this, however."
+msgstr "identifier íë¡í¼í°ë ì격íê² ìµì
ì´ë¤. ë¹ì ì ê·¸ê²ì ìëµí ìë ìê³ , Hibernateë¡ íì¬ê¸ ë´ë¶ì ì¼ë¡ ê°ì²´ ìë³ìë¤ì ì¶ì íëë¡ í ì ìë¤. íì§ë§ ì°ë¦¬ë ì´ê²ì ê¶ì¥íì§ ìëë¤."
+
+#: index.docbook:65
+msgid "In fact, some functionality is available only to classes which declare an identifier property:"
+msgstr "ì¬ì¤, ì´ë¤ 기ë¥ì identifier íë¡í¼í°ë¥¼ ì ì¸íë í´ëì¤ë¤ì ëí´ìë§ ì´ì© ê°ë¥íë¤:"
+
+#: index.docbook:72
+msgid "Transitive reattachment for detached objects (cascade update or cascade merge) - see"
+msgstr "detached ê°ì²´ë¤ì ëí Transitive reattachment(cascade update ëë cascade merge) -"
+
+#: index.docbook:79
+msgid "Session.saveOrUpdate()"
+msgstr "Session.saveOrUpdate()"
+
+#: index.docbook:84
+msgid "Session.merge()"
+msgstr "Session.merge()"
+
+#: index.docbook:89
+msgid "We recommend you declare consistently-named identifier properties on persistent classes. We further recommend that you use a nullable (ie. non-primitive) type."
+msgstr "를 ë³´ë¼"
+
+#: index.docbook:96
+msgid "Prefer non-final classes (optional)"
+msgstr "ì°ë¦¬ë ë¹ì ì´ ìì í´ëì¤ë¤ì ëí´ ì¼ê´ëê² ëª
ëª
ë identifier íë¡í¼í°ë¤ì ì ì¸í ê²ì ê¶ì¥íë¤. ê²ë¤ê° ì°ë¦¬ë ë¹ì ì´ nullable íì
(ì를 ë¤ì´ non-primitive)ì ì¬ì©í ê²ì ê¶ì¥íë¤."
+
+#: index.docbook:97
+msgid "A central feature of Hibernate, <emphasis>proxies</emphasis>, depends upon the persistent class being either non-final, or the implementation of an interface that declares all public methods."
+msgstr "finalì´ ìë í´ëì¤ë¤ì ì í¸íë¼(ìµì
)"
+
+#: index.docbook:102
+msgid "You can persist <literal>final</literal> classes that do not implement an interface with Hibernate, but you won't be able to use proxies for lazy association fetching - which will limit your options for performance tuning."
+msgstr "Hibernateì ì¤ì¬ í¹ì§ì¸, íë½ì(<emphasis>proxies</emphasis>)ë¤ì finalì´ ìë ìì í´ëì¤ë¤ ëë 모ë public ë©ìëë¤ë¡ ì ì¸ë ì¸í°íì´ì¤ì 구íì¸ ìì í´ëì¤ë¤ì ìì¡´íë¤."
+
+#: index.docbook:107
+msgid "You should also avoid declaring <literal>public final</literal> methods on the non-final classes. If you want to use a class with a <literal>public final</literal> method, you must explicitly disable proxying by setting <literal>lazy=\"false\"</literal>."
+msgstr "ë¹ì ì Hibernateë¡ ì¸í°íì´ì¤ë¥¼ 구ííì§ ìì <literal>final</literal> í´ëì¤ë¤ì ììí ìí¬ ì ìì§ë§ ë¹ì ì lazy ì°ê´ íì¹(lazy association fetching)ì ëí´ íë½ìë¤ì ì¬ì©í ì ìì ê²ì´ë¤ -ê·¸ê²ì í¼í¬ë¨¼ì¤ íëì ìí ë¹ì ì ìµì
ë¤ì ì íìí¬ ê²ì´ë¤."
+
+#: index.docbook:115
+msgid "Declare accessors and mutators for persistent fields (optional)"
+msgstr "ë¹ì ì ëí non-final í´ëì¤ë¤ ìì <literal>public final</literal> ë©ìëë¤ì ì ì¸íë ê²ì í¼í´ì¼ íë¤. ë§ì¼ ë¹ì ì´ <literal>public final</literal> ë©ìë를 ê°ì§ í´ëì¤ë¥¼ ì¬ì©íê³ ì ìí ê²½ì°, ë¹ì ì <literal>lazy=\"false\"</literal>를 ì¤ì í¨ì¼ë¡ì¨ ëª
ìì ì¼ë¡ íë½ì±ì ì¬ì© ë¶ê°ë¥íëë¡ í´ì¼ íë¤."
+
+#: index.docbook:117
+msgid "<literal>Cat</literal> declares accessor methods for all its persistent fields. Many other ORM tools directly persist instance variables. We believe it is better to provide an indirection between the relational schema and internal data structures of the class. By default, Hibernate persists JavaBeans style properties, and recognizes method names of the form <literal>getFoo</literal>, <literal>isFoo</literal> and <literal>setFoo</literal>. You may switch to direct field access for particular properties, if needed."
+msgstr "ìì íëë¤ì ìí accessorë¤ê³¼ mutatorë¤ì ì ì¸íë¼(ìµì
)"
+
+#: index.docbook:127
+msgid "Properties need <emphasis>not</emphasis> be declared public - Hibernate can persist a property with a default, <literal>protected</literal> or <literal>private</literal> get / set pair."
+msgstr "<literal>Cat</literal>ì ê·¸ê²ì 모ë ìì íëë¤ì ëí´ accessor ë©ìëë¤ì ì ì¸íë¤. ë§ì ë¤ë¥¸ ORM ë구ë¤ì ì¸ì¤í´ì¤ ë³ìë¤ì ì§ì ììí ìí¨ë¤. ì°ë¦¬ë ê´ê³í ì¤í¤ë§ì í´ëì¤ì ë´ë¶ì ì¸ ë°ì´í° êµ¬ì¡°ë¤ ì¬ì´ì ê°ì ì ì¸ ìë¨ì ì ê³µíë ê²ì´ ë ì¢ë¤ê³ ë¯¿ê³ ìë¤. ëí´í¸ë¡ Hibernateë ìë°ë¹ì¦ ì¤íì¼ íë¡í¼í°ë¤ì ììí ìí¤ê³ , <literal>getFoo</literal>, <literal>isFoo</literal>ì <literal>setFoo</literal> íìì ë©ìë ì´ë¦ë¤ì ì¸ì§íë¤. ë¹ì ì ì§ì ì¼ë¡ í¹ì íë¡í¼í°ì ëí ì§ì ì ì¸ íë ì ê·¼ì¼ë¡ ì íí ìë ìë¤."
+
+#: index.docbook:138
+msgid "Implementing inheritance"
+msgstr "íë¡í¼í°ë¤ì publicì¼ë¡ ì ì¸ë íìê° <emphasis>ìë¤</emphasis> - Hibernateë ëí´í¸ë¡ <literal>protected</literal> get/set ì ëë <literal>private</literal> get/set ìì ê°ì§ íë¡í¼í°ë¥¼ ììí ìí¬ ì ìë¤."
+
+#: index.docbook:140
+msgid "A subclass must also observe the first and second rules. It inherits its identifier property from the superclass, <literal>Cat</literal>."
+msgstr "ìì 구íí기"
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "public class DomesticCat extends Cat {\n"
+ " private String name;\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ " protected void setName(String name) {\n"
+ " this.name=name;\n"
+ " }\n"
+ "}]]>"
+msgstr "ìë¸í´ëì¤ë ëí 첫 ë²ì§¸ ê·ì¹ë¤ê³¼ ë ë²ì§¸ ê·ì¹ë¤ì 주ìí´ì¼ íë¤. ê·¸ê²ì ìí¼í´ëì¤ <literal>Cat</literal>ì¼ë¡ë¶í° ê·¸ê²ì identifier íë¡í¼í°ë¥¼ ììë°ëë¤."
+
+#: index.docbook:149
+msgid "Implementing <literal>equals()</literal> and <literal>hashCode()</literal>"
+msgstr ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "public class DomesticCat extends Cat {\n"
+ " private String name;\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ " protected void setName(String name) {\n"
+ " this.name=name;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:151
+msgid "You have to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods if you"
+msgstr "<literal>equals()</literal>ì <literal>hashCode()</literal> 구íí기"
+
+#: index.docbook:157
+msgid "intend to put instances of persistent classes in a <literal>Set</literal> (the recommended way to represent many-valued associations) <emphasis>and</emphasis>"
+msgstr "ë§ì¼ ë¹ì ì´ ë¤ìì ê²½ì°ë¼ë©´, ë¹ì ì <literal>equals()</literal>ì <literal>hashCode()</literal> ë©ìëë¤ì ì¤ë²ë¼ì´ë ìì¼ì¼ íë¤."
+
+#: index.docbook:164
+msgid "intend to use reattachment of detached instances"
+msgstr "íëì <literal>Set</literal> ìì ìì í´ëì¤ë¤ì ì¸ì¤í´ì¤ë¤ì ì§ì´ë£ê³ ì ìëíê³ (many-valued ì°ê´ë¤ì ëí´ ê¶ì¥ëë ë°©ë²) <emphasis>ê·¸ë¦¬ê³ </emphasis>"
+
+#: index.docbook:170
+msgid "Hibernate guarantees equivalence of persistent identity (database row) and Java identity only inside a particular session scope. So as soon as we mix instances retrieved in different sessions, we must implement <literal>equals()</literal> and <literal>hashCode()</literal> if we wish to have meaningful semantics for <literal>Set</literal>s."
+msgstr "detached ì¸ì¤í´ì¤ë¤ì reattachment(ì¬ì²¨ë¶)를 ì¬ì©íê³ ì ìëíë"
+
+#: index.docbook:178
+msgid "The most obvious way is to implement <literal>equals()</literal>/<literal>hashCode()</literal> by comparing the identifier value of both objects. If the value is the same, both must be the same database row, they are therefore equal (if both are added to a <literal>Set</literal>, we will only have one element in the <literal>Set</literal>). Unfortunately, we can't use that approach with generated identifiers! Hibernate will only assign identifier values to objects that are persistent, a newly created instance will not have any identifier value! Furthermore, if an instance is unsaved and currently in a <literal>Set</literal>, saving it will assign an identifier value to the object. If <literal>equals()</literal> and <literal>hashCode()</literal> are based on the identifier value, the hash code would change, breaking the contract of the <literal>Set</literal>. See the Hibernate website for a full discussion of this problem. Note that this is not a Hibernate issue, but !
normal Java semantics of object identity and equality."
+msgstr "Hibernateë í¹ì session ë²ì ë´ììë§ persistent identity(ë°ì´í°ë² ì´ì¤ í)ê³¼ Java identityì ê°ìì ë³´ì¥íë¤. ë°ë¼ì ì°ë¦¬ê° ë¤ë¥¸ ì¸ì
ë¤ìì ê²ìë ì¸ì¤í´ì¤ë¤ì í¼í©ìí¤ìë§ì, ì°ë¦¬ê° <literal>Set</literal>ë¤ì ëí´ ì ì미íê² ë§ë¤ê³ ì ìí ê²½ì°, ì°ë¦¬ë <literal>equals()</literal>ì <literal>hashCode()</literal>를 구íí´ì¼ íë¤."
+
+#: index.docbook:192
+msgid "We recommend implementing <literal>equals()</literal> and <literal>hashCode()</literal> using <emphasis>Business key equality</emphasis>. Business key equality means that the <literal>equals()</literal> method compares only the properties that form the business key, a key that would identify our instance in the real world (a <emphasis>natural</emphasis> candidate key):"
+msgstr "ê°ì¥ ëª
ë°±í ë°©ë²ì ë ê°ì²´ë¤ì identifier ê°ì ë¹êµí¨ì¼ë¡ì¨ <literal>equals()</literal>/<literal>hashCode()</literal>를 구ííë ê²ì´ë¤. ë§ì¼ ê·¸ ê°ì´ ëì¼íë¤ë©´, ëë¤ ëì¼í ë°ì´í°ë² ì´ì¤ íì´ì´ì¼ íê³ , ê·¸ë¬ë¯ë¡ ê·¸ê²ë¤ì ê°ë¤(ëë¤ íëì <literal>Set</literal>ì ì¶ê°ëë ê²½ì°ì, ì°ë¦¬ë <literal>Set</literal> ììì íëì ììë§ì ê°ê² ë ê²ì´ë¤). ë¶ííê²ë, ì°ë¦¬ë ìì±ëë ìë³ìë¤ì ê°ë ê·¸ ì ê·¼ë²ì ì¬ì©í ì ìë¤! Hibernateë ì¤ì§ ìë³ì ê°ë¤ì ììí ëë ê°ì²´ë¤ì í ë¹í ê²ì´ê³ , ìë¡ì´ ìì±ë ì¸ì¤í´ì¤ë ììì identifier ê°ì ê°ì§ ìì ê²ì´ë¤! ë§ì¼ ì¸ì¤í´ì¤ê° ì ì¥ëì§ ìê³ íì¬ íëì <literal>Set</literal> ìì ìì ê²½ì°ì, ê·¸ê²ì ì ì¥íëê²ì íëì ìë³ì ê°ì ê·¸ ê°ì²´ìê² í ë¹í ê²ì´ë¤. ë§ì¼ <literal>equals()</literal>ì <literal>ha!
shCode()</literal>ê° ê·¸ ìë³ì ê°ì 기ì´í ê²½ì°, hash ì½ëë <literal>Set</literal>ì ê³ì½ì í기íì¬ ë³ê²½ë ê²ì´ë¤. ì´ ë¬¸ì ì ëí ì ì²´ ë
¼ìì ëí´ìë Hibernate ì¹ ì¬ì´í¸ë¥¼ ë³´ë¼. ì´ê²ì Hibernate ìì ì´ ìë, ê°ì²´ identityì equalityì ê´í íµìì ìë° ìë¯¸ë¡ ìì ë
¸í¸íë¼."
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[public class Cat {\n"
+ "\n"
+ " ...\n"
+ " public boolean equals(Object other) {\n"
+ " if (this == other) return true;\n"
+ " if ( !(other instanceof Cat) ) return false;\n"
+ "\n"
+ " final Cat cat = (Cat) other;\n"
+ "\n"
+ " if ( !cat.getLitterId().equals( getLitterId() ) ) return false;\n"
+ " if ( !cat.getMother().equals( getMother() ) ) return false;\n"
+ "\n"
+ " return true;\n"
+ " }\n"
+ "\n"
+ " public int hashCode() {\n"
+ " int result;\n"
+ " result = getMother().hashCode();\n"
+ " result = 29 * result + getLitterId();\n"
+ " return result;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr "ì°ë¦¬ë <emphasis>Business key equality</emphasis>를 ì¬ì©íì¬ <literal>equals()</literal>ì <literal>hashCode()</literal>를 구íí ê² ê¶ì¥íë¤. Business key equalityë <literal>equals()</literal> ë©ìëê° ë¹ì§ëì¤ í¤, ì¦ ì¤ì¸ê³ìì ì°ë¦¬ì ì¸ì¤í´ì¤ë¥¼ ìë³íê² ë í¤(<emphasis>natural</emphasis> íë³´ í¤)를 íì±íë íë¡í¼í°ë¤ë§ì ë¹êµíë¤ë ì ì ì미íë¤ :"
+
+#: index.docbook:202
+msgid "Note that a business key does not have to be as solid as a database primary key candidate (see <xref linkend=\"transactions-basics-identity\"/>). Immutable or unique properties are usually good candidates for a business key."
+msgstr ""
+ "<![CDATA[public class Cat {\n"
+ "\n"
+ " ...\n"
+ " public boolean equals(Object other) {\n"
+ " if (this == other) return true;\n"
+ " if ( !(other instanceof Cat) ) return false;\n"
+ "\n"
+ " final Cat cat = (Cat) other;\n"
+ "\n"
+ " if ( !cat.getLitterId().equals( getLitterId() ) ) return false;\n"
+ " if ( !cat.getMother().equals( getMother() ) ) return false;\n"
+ "\n"
+ " return true;\n"
+ " }\n"
+ "\n"
+ " public int hashCode() {\n"
+ " int result;\n"
+ " result = getMother().hashCode();\n"
+ " result = 29 * result + getLitterId();\n"
+ " return result;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:212
+msgid "Dynamic models"
+msgstr "íëì ë¹ì§ëì¤ í¤ë ë°ì´í°ë² ì´ì¤ íë¼ì´ë¨¸ë¦¬ í¤ íë³´ ë§í¼ ê²¬ê³ íì§ ììì¼ íë¤(<xref linkend=\"transactions-basics-identity\"/>를 ë³´ë¼). ëê° ë³ê²½í ì ìë íë¡í¼í° ëë ì ì¼í(unique) íë¡í¼í°ë ëê° ë¹ì§ëì¤ í¤ì ëí ì¢ì íë³´ë¤ì´ë¤."
+
+#: index.docbook:215
+msgid "Note that the following features are currently considered experimental and may change in the near future."
+msgstr "ëì ì¸ ëª¨íë¤"
+
+#: index.docbook:219
+msgid "Persistent entities don't necessarily have to be represented as POJO classes or as JavaBean objects at runtime. Hibernate also supports dynamic models (using <literal>Map</literal>s of <literal>Map</literal>s at runtime) and the representation of entities as DOM4J trees. With this approach, you don't write persistent classes, only mapping files."
+msgstr "ë¤ì í¹ì§ë¤ì íì¬ ì¤íì ì¼ë¡ ê³ ë ¤ëê³ ìì¼ë©° ì¥ëìë ë³ê²½ë ì ììì ë
¸í¸íë¼."
+
+#: index.docbook:227
+msgid "By default, Hibernate works in normal POJO mode. You may set a default entity representation mode for a particular <literal>SessionFactory</literal> using the <literal>default_entity_mode</literal> configuration option (see <xref linkend=\"configuration-optional-properties\"/>."
+msgstr "ìì ìí°í°ë¤ì ë°ëì ì¤íìì POJO í´ëì¤ë¤ë¡ ëë ìë°ë¹ì¦ ê°ì²´ë¤ë¡ ííëì´ì¼í íìë ìë¤. Hibernateë ëí (ì¤í ìì <literal>Map</literal>ë¤ì ê°ì§ <literal>Map</literal>ë¤ì ì¬ì©íì¬) ëì ì¸ ëª¨íë¤ì ì§ìíê³ DOM4J í¸ë¦¬ë¤ë¡ì ìí°í°ë¤ì ëí ííì ì§ìíë¤. ì´ ì ê·¼ë²ì¼ë¡, ë¹ì ì ìì í´ëì¤ë¤ì ìì±íì§ ìê³ , ì¤ì§ 매í íì¼ë¤ ë§ì ìì±íë¤."
+
+#: index.docbook:234
+msgid "The following examples demonstrates the representation using <literal>Map</literal>s. First, in the mapping file, an <literal>entity-name</literal> has to be declared instead of (or in addition to) a class name:"
+msgstr "ëí´í¸ë¡, Hibernateë íµì°ì POJO 모ëë¡ ëìíë¤. ë¹ì ì <literal>default_entity_mode</literal> êµ¬ì± ìµì
ì ì¬ì©íì¬ í¹ë³í <literal>SessionFactory</literal>ì ëí´ ëí´í¸ ìí°í° íí 모ë를 ì¤ì í ì ìë¤ (<xref linkend=\"configuration-optional-properties\"/>ì ë³´ë¼)."
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class entity-name=\"Customer\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " type=\"long\"\n"
+ " column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <property name=\"address\"\n"
+ " column=\"ADDRESS\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <many-to-one name=\"organization\"\n"
+ " column=\"ORGANIZATION_ID\"\n"
+ " class=\"Organization\"/>\n"
+ "\n"
+ " <bag name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " lazy=\"false\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"CUSTOMER_ID\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ " \n"
+ "</hibernate-mapping>]]>"
+msgstr "ë¤ì ìì ë¤ì<literal>Map</literal>ë¤ì ì¬ì©íë ííì ì¤ëª
íë¤. 먼ì 매í íì¼ìì, <literal>entity-name</literal>ì í´ëì¤ ì´ë¦ ëì ì(ëë í´ëì¤ ì´ë¦ì ë§ë¶ì¬) ì ì¸ëì´ì¼ íë¤:"
+
+#: index.docbook:242
+msgid "Note that even though associations are declared using target class names, the target type of an associations may also be a dynamic entity instead of a POJO."
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class entity-name=\"Customer\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " type=\"long\"\n"
+ " column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <property name=\"address\"\n"
+ " column=\"ADDRESS\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <many-to-one name=\"organization\"\n"
+ " column=\"ORGANIZATION_ID\"\n"
+ " class=\"Organization\"/>\n"
+ "\n"
+ " <bag name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " lazy=\"false\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"CUSTOMER_ID\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ " \n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:249
+msgid "After setting the default entity mode to <literal>dynamic-map</literal> for the <literal>SessionFactory</literal>, we can at runtime work with <literal>Map</literal>s of <literal>Map</literal>s:"
+msgstr "ì¬ì§ì´ ë¹ë¡ ì°ê´ë¤ì´ ëì(target) í´ëì¤ ì´ë¦ë¤ì ì¬ì©íì¬ ì ì¸ë ì§ë¼ë, ì°ê´ë¤ì ëì(target) íì
ì ëí POJOê° ìë ëì ì¸ ìí°í°ì¼ ì ììì ë
¸í¸íë¼."
+
+#: index.docbook:255
+msgid ""
+ "<![CDATA[Session s = openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ "Session s = openSession();\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "\n"
+ "// Create an organization\n"
+ "Map foobar = new HashMap();\n"
+ "foobar.put(\"name\", \"Foobar Inc.\");\n"
+ "\n"
+ "// Link both\n"
+ "david.put(\"organization\", foobar);\n"
+ "\n"
+ "// Save both\n"
+ "s.save(\"Customer\", david);\n"
+ "s.save(\"Organization\", foobar);\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();]]>"
+msgstr "<literal>SessionFactory</literal>ì ëí ëí´í¸ ìí°í° 모ë를 <literal>dynamic-map</literal>ì¼ë¡ ì¤ì í íì, ì°ë¦¬ë <literal>Map</literal>ë¤ì ê°ì§ <literal>Map</literal>ë¤ì ëí´ ì¤í ìì ìì
í ì ìë¤:"
+
+#: index.docbook:257
+msgid "The advantages of a dynamic mapping are quick turnaround time for prototyping without the need for entity class implementation. However, you lose compile-time type checking and will very likely deal with many exceptions at runtime. Thanks to the Hibernate mapping, the database schema can easily be normalized and sound, allowing to add a proper domain model implementation on top later on."
+msgstr ""
+ "<![CDATA[Session s = openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ "Session s = openSession();\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "\n"
+ "// Create an organization\n"
+ "Map foobar = new HashMap();\n"
+ "foobar.put(\"name\", \"Foobar Inc.\");\n"
+ "\n"
+ "// Link both\n"
+ "david.put(\"organization\", foobar);\n"
+ "\n"
+ "// Save both\n"
+ "s.save(\"Customer\", david);\n"
+ "s.save(\"Organization\", foobar);\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();]]>"
+
+#: index.docbook:265
+msgid "Entity representation modes can also be set on a per <literal>Session</literal> basis:"
+msgstr "dynamic 매íì ì¥ì ë¤ì ìí°í° í´ëì¤ êµ¬íì ëí íì ìì´ë íë¡í íì´íì ìí ë¹ ë¥¸ ì í ìê°ì´ë¤. íì§ë§ ë¹ì ì ì»´íì¼ ì íì
ì²´í¹ì ìê³ ì¤í ìì ë§ì ìì¸ìí©ë¤ì ë¤ë£¨ê² ë ê²ì´ë¤. Hibernate 매í ëë¶ì, ëì¤ì ê³ ì í ëë©ì¸ 모í 구íì ìë¨ì ì¶ê°íë ê²ì´ íì©ëì´ì, ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ê° ì½ê² ì ê·í ëê³ ìë¦¬ê° ì¸ë ¤ í¼ì§ ì ìë¤."
+
+#: index.docbook:270
+msgid ""
+ "<![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "dynamicSession.save(\"Customer\", david);\n"
+ "...\n"
+ "dynamicSession.flush();\n"
+ "dynamicSession.close()\n"
+ "...\n"
+ "// Continue on pojoSession\n"
+ "]]>"
+msgstr "ìí°í° íí 모ëë¤ì ëí íëì ë¨ì <literal>Session</literal> 기ì¤ì ëí´ ì¤ì ë ì ìë¤:"
+
+#: index.docbook:273
+msgid "Please note that the call to <literal>getSession()</literal> using an <literal>EntityMode</literal> is on the <literal>Session</literal> API, not the <literal>SessionFactory</literal>. That way, the new <literal>Session</literal> shares the underlying JDBC connection, transaction, and other context information. This means you don't have tocall <literal>flush()</literal> and <literal>close()</literal> on the secondary <literal>Session</literal>, and also leave the transaction and connection handling to the primary unit of work."
+msgstr ""
+ "<![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "dynamicSession.save(\"Customer\", david);\n"
+ "...\n"
+ "dynamicSession.flush();\n"
+ "dynamicSession.close()\n"
+ "...\n"
+ "// Continue on pojoSession\n"
+ "]]>"
+
+#: index.docbook:283
+msgid "More information about the XML representation capabilities can be found in <xref linkend=\"xml\"/>."
+msgstr "<literal>EntityMode</literal>를 ì¬ì©íë <literal>getSession()</literal>ì ëí í¸ì¶ì <literal>SessionFactory</literal>ê° ìë, <literal>Session</literal> APIì ëí ê²ìì ë
¸í¸í길 ë°ëë¤. ê·¸ ë°©ë²ì¼ë¡, ìë¡ì´ <literal>Session</literal>ì 기본 JDBC 커ë¥ì
, í¸ëìì
, ê·¸ë¦¬ê³ ë¤ë¥¸ 컨í
ì¤í¸ ì 보를 ê³µì íë¤. ì´ê²ì ë¹ì ì´ ë ë²ì§¸ <literal>Session</literal> ììì <literal>flush()</literal>ì <literal>close()</literal>를 í¸ì¶íì§ ë§ìì¼ íê³ , ëí í¸ëìì
ë° ì»¤ë¥ì
í¸ë¤ë§ì 주ë ìì
ë¨ììê² ë§¡ê¸´ë¤ë ì ì ì미íë¤."
+
+#: index.docbook:291
+msgid "Tuplizers"
+msgstr "XML íí ê°ì©ì±ë¤ì ëí ì¶ê° ì ë³´ë <xref linkend=\"xml\"/>ìì ì°¾ì ì ìë¤."
+
+#: index.docbook:293
+msgid "<literal>org.hibernate.tuple.Tuplizer</literal>, and its sub-interfaces, are responsible for managing a particular representation of a piece of data, given that representation's <literal>org.hibernate.EntityMode</literal>. If a given piece of data is thought of as a data structure, then a tuplizer is the thing which knows how to create such a data structure and how to extract values from and inject values into such a data structure. For example, for the POJO entity mode, the correpsonding tuplizer knows how create the POJO through its constructor and how to access the POJO properties using the defined property accessors. There are two high-level types of Tuplizers, represented by the <literal>org.hibernate.tuple.entity.EntityTuplizer</literal> and <literal>org.hibernate.tuple.component.ComponentTuplizer</literal> interfaces. <literal>EntityTuplizer</literal>s are responsible for managing the above mentioned contracts in regards to entities, while <literal>ComponentTu!
plizer</literal>s do the same for components."
+msgstr "Tuplizerë¤"
+
+#: index.docbook:308
+msgid "Users may also plug in their own tuplizers. Perhaps you require that a <literal>java.util.Map</literal> implementation other than <literal>java.util.HashMap</literal> be used while in the dynamic-map entity-mode; or perhaps you need to define a different proxy generation strategy than the one used by default. Both would be achieved by defining a custom tuplizer implementation. Tuplizers definitions are attached to the entity or component mapping they are meant to manage. Going back to the example of our customer entity:"
+msgstr "<literal>org.hibernate.tuple.Tuplizer</literal>, ê·¸ë¦¬ê³ ê·¸ê²ì ìë¸-ì¸í°íì´ì¤ë¤ì ë°ì´í°ì ì¡°ê°ì ëí í¹ë³í ííì <literal>org.hibernate.EntityMode</literal>ê° ì£¼ì´ì§ë©´ ê·¸ ííì ê´ë¦¬íë ì±
ìì´ ìë¤. ë§ì¼ 주ì´ì§ ë°ì´í° ì¡°ê°ì´ íëì ë°ì´í° êµ¬ì¡°ë¡ ê°ì£¼ë ê²½ì°, ê·¸ë íëì tuplizerë ê·¸ë° ë°ì´í° 구조를 ìì±ìí¤ë ë°©ë²ê³¼ ê·¸ë° ë°ì´í° 구조ë¡ë¶í° ê°ë¤ì ì¶ì¶ìí¤ë ë°©ë² ê·¸ë¦¬ê³ ê·¸ë° ë°ì´í°êµ¬ì¡° ìì¼ë¡ ê°ë¤ì ì½ì
ìí¤ë ë°©ë²ì ìê³ ìë ê²ì´ë¤. ì를 ë¤ì´, POJO ìí°í° 모ëì ê²½ì°, ëìíë tuplizerë ê·¸ê²ì ìì±ì를 íµí´ POJO를 ìì±ìí¤ë ë°©ë², ê·¸ë¦¬ê³ ì ìë íë¡í¼í° ì ê·¼ìë¤ì ì¬ì©íì¬ POJO íë¡í¼í°ë¤ì ì ê·¼íë ë°©ë²ì ìë¤. <literal>org.hibernate.tuple.entity.EntityTuplizer</literal> ì¸í°íì´ì¤ì <literal>org.hibernate.tuple.component.ComponentTuplizer</!
literal> ì¸í°íì´ì¤ì ìí´ ííëë ë ê°ì§ ê³ ê¸ ì íì Tuplizerë¤ì´ ì¡´ì¬íë¤. <literal>EntityTuplizer</literal>ë¤ì ìí°í°ë¤ì ê´í´ìë ìì ì¸ê¸ë ê³ì½ë¤ì 매íí ì±
ìì´ ìë ë°ë©´ì, <literal>ComponentTuplizer</literal>ë¤ì ì»´í¬ëí¸ë¤ì ëí´ìë ëì¼í ê²ì ííë¤."
+
+#: index.docbook:317
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " <class entity-name=\"Customer\">\n"
+ " <!--\n"
+ " Override the dynamic-map entity-mode\n"
+ " tuplizer for the customer entity\n"
+ " -->\n"
+ " <tuplizer entity-mode=\"dynamic-map\"\n"
+ " class=\"CustomMapTuplizerImpl\"/>\n"
+ "\n"
+ " <id name=\"id\" type=\"long\" column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <!-- other properties -->\n"
+ " ...\n"
+ " </class>\n"
+ "</hibernate-mapping>\n"
+ "\n"
+ "\n"
+ "public class CustomMapTuplizerImpl\n"
+ " extends org.hibernate.tuple.entity.DynamicMapEntityTuplizer {\n"
+ " // override the buildInstantiator() method to plug in our custom map...\n"
+ " protected final Instantiator buildInstantiator(\n"
+ " org.hibernate.mapping.PersistentClass mappingInfo) {\n"
+ " return new CustomMapInstantiator( mappingInfo );\n"
+ " }\n"
+ "\n"
+ " private static final class CustomMapInstantiator\n"
+ " extends org.hibernate.tuple.DynamicMapInstantitor {\n"
+ " // override the generateMap() method to return our custom map...\n"
+ " protected final Map generateMap() {\n"
+ " return new CustomMap();\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr "ì¬ì©ìë¤ì ëí ê·¸ë¤ ìì ì tuplizerë¤ì íë¬ê·¸ ìí¬ ì ìë¤. ìë§ ë¹ì ì dynamic-map entity-mode ëìì ì¬ì©ëë <literal>java.util.HashMap</literal> ëì ì íëì <literal>java.util.Map</literal> 구íì íìë¡ íë¤; ëë ìë§ ë¹ì ì ëí´í¸ë¡ ì¬ì©ëë ë°©ë ë³´ë¤ë íëì ë¤ë¥¸ ë¤ë¥¸ íë¦ì ì°ì¶ ë°©ë를 íìë¡ íë¤. ëë¤ íëì ë§ì¶¤í tuplizer를 ì ìí¨ì¼ë¡ì¨ ì±ì·¨ë ê²ì´ë¤. Tuplizerë¤ ì ìë¤ì ê·¸ê²ë¤ì´ ê´ë¦¬í ìë¨ì¸ ìí°í° 매í ëë ì»´í¬ëí¸ ë§¤íì 첨ë¶ëë¤. ì°ë¦¬ì ê³ ê° ìí°í°ì ëí ìì ë¡ ëëìê°ë©´:"
+
+#: index.docbook:322
+msgid "TODO: Document user-extension framework in the property and proxy packages"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " <class entity-name=\"Customer\">\n"
+ " <!--\n"
+ " Override the dynamic-map entity-mode\n"
+ " tuplizer for the customer entity\n"
+ " -->\n"
+ " <tuplizer entity-mode=\"dynamic-map\"\n"
+ " class=\"CustomMapTuplizerImpl\"/>\n"
+ "\n"
+ " <id name=\"id\" type=\"long\" column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <!-- other properties -->\n"
+ " ...\n"
+ " </class>\n"
+ "</hibernate-mapping>\n"
+ "\n"
+ "\n"
+ "public class CustomMapTuplizerImpl\n"
+ " extends org.hibernate.tuple.entity.DynamicMapEntityTuplizer {\n"
+ " // override the buildInstantiator() method to plug in our custom map...\n"
+ " protected final Instantiator buildInstantiator(\n"
+ " org.hibernate.mapping.PersistentClass mappingInfo) {\n"
+ " return new CustomMapInstantiator( mappingInfo );\n"
+ " }\n"
+ "\n"
+ " private static final class CustomMapInstantiator\n"
+ " extends org.hibernate.tuple.DynamicMapInstantitor {\n"
+ " // override the generateMap() method to return our custom map...\n"
+ " protected final Map generateMap() {\n"
+ " return new CustomMap();\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:293
+msgid "appended paragraph 1"
+msgstr "TODO: property í¨í¤ì§ì proxy í¨í¤ì§ ë´ì user-extension íë ììì 문ìí í ê²."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/preface.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/preface.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/preface.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,68 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Preface"
+msgstr "<title>머리ë§</title>"
+
+#: index.docbook:23
+msgid "Working with object-oriented software and a relational database can be cumbersome and time consuming in today's enterprise environments. Hibernate is an object/relational mapping tool for Java environments. The term object/relational mapping (ORM) refers to the technique of mapping a data representation from an object model to a relational data model with a SQL-based schema."
+msgstr "ê°ì²´ ì§í¥ ìíí¸ì¨ì´ì ê´ê³í ë°ì´í°ë² ì´ì¤ë¡ ìì
íë ê²ì ì¤ëë ì ìí°íë¼ì´ì¦ íê²½ë¤ìì ì±ê°ìê³ ìê°ì´ ìë¹ë ì ìë¤. Hibernateë ìë° íê²½ë¤ì ìí ê°ì²´/ê´ê³í 매í ë구ì´ë¤. object/relational mapping(ORM) ì©ì´ë ê°ì²´ 모íì¼ë¡ë¶í° SQL-기ë°ì ì¤í¤ë§ë¥¼ ê°ì§ ê´ê³í ë°ì´í° 모íì¼ë¡ì ë°ì´í° íìì 매ííë 기ì ì ì¸ê¸íë¤."
+
+#: index.docbook:31
+msgid "Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities and can significantly reduce development time otherwise spent with manual data handling in SQL and JDBC."
+msgstr "Hibernateë ìë° í´ëì¤ë¤ë¡ë¶í° ë°ì´í°ë² ì´ì¤ë¡ì 매í(ê·¸ë¦¬ê³ ìë° ë°ì´í° íì
ë¤ë¡ë¶í° SQL ë°ì´í° íì
ë¤ë¡ì 매í)ì ì²ë¦¬í ë¿ë§ ìëë¼, ëí ë°ì´í° ì§ìì ê²ì í¸ìë¤ì ì ê³µíë©°, SQLê³¼ JDBCë¡ ììì
ë°ì´í° í¸ë¤ë§ì ììëë ê°ë° ìê°ì íì íê² ë¨ì¶ìì¼ì¤ ì ìë¤."
+
+#: index.docbook:38
+msgid "Hibernates goal is to relieve the developer from 95 percent of common data persistence related programming tasks. Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate vendor-specific SQL code and will help with the common task of result set translation from a tabular representation to a graph of objects."
+msgstr "Hibernateì 목ì ì ê³µíµë ë°ì´í° ììí ê´ë ¨ íë¡ê·¸ëë° ìì
ë¤ì 95%를 ëì´ì£¼ë ê²ì´ë¤. Hibernateë ë°ì´í°ë² ì´ì¤ìì ë¹ì§ëì¤ ë¡ì§ì 구ííëë° ë´ì¥ íë¡ìì ë¤ì ì ì©ì¼ë¡ ì¬ì©íë ë°ì´í° ì¤ì¬ì ì´í리ì¼ì´ì
ì ëí ìµìì ì루ì
ì´ ìë ìë ìì§ë§, ê·¸ê²ì ìë° ê¸°ë° ë¯¸ë¤-í°ì´ìì ê°ì²´ ì§í¥ ëë©ì¸ 모íë¤ê³¼ ë¹ì§ëì¤ ë¡ì§ì ê°ì¥ ì ì©íë¤. íì§ë§ Hibernateë 벤ë ì§ì ì ì¸ SQL ì½ë를 ì ê±°íê±°ë 캡ìí ìí¤ë ë¹ì ì íì¤í ëìì¤ ì ìê³ í
ì´ë¸ íìì ííì¼ë¡ë¶í° ê°ì²´ë¤ì ê·¸ëíë¡ ê²°ê³¼ ì
ì ë³ííë ê³µíµë íì¤í¬ë¥¼ ëìì¤ ê²ì´ë¤."
+
+#: index.docbook:48
+msgid "If you are new to Hibernate and Object/Relational Mapping or even Java, please follow these steps:"
+msgstr "ë§ì¼ ë¹ì ì´ Hibernateì Object/Relational 매í ëë ì¬ì§ì´ ìë°ì ì´ì¬ìë¼ë©´, ë¤ì ë¨ê³ë¤ì ë°ë¥´ê¸° ë°ëë¤:"
+
+#: index.docbook:55
+msgid "Read <xref linkend=\"tutorial\"/> for a tutorial with step-by-step instructions. The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr "ë ë§ì ë¨ê³ì ì¸ ì¬ì© ì¤ëª
ìë¤ì ê°ì§ ë 긴 íí 리ì¼ì <xref linkend=\"tutorial\"/> ì ì½ì´ë¼. íí 리ì¼ì ìí ìì¤ ì½ëë <literal>doc/reference/tutorial/</literal> ëë í 리ì í¬í¨ëì´ ìë¤."
+
+#: index.docbook:63
+msgid "Read <xref linkend=\"architecture\"/> to understand the environments where Hibernate can be used."
+msgstr "Hibernateê° ì¬ì©ë ì ìë íê²½ì ì´í´ë ¤ë©´ <xref linkend=\"architecture\"/> 를 ì½ì´ë¼."
+
+#: index.docbook:69
+msgid "Have a look at the <literal>eg/</literal> directory in the Hibernate distribution, it contains a simple standalone application. Copy your JDBC driver to the <literal>lib/</literal> directory and edit <literal>etc/hibernate.properties</literal>, specifying correct values for your database. From a command prompt in the distribution directory, type <literal>ant eg</literal> (using Ant), or under Windows, type <literal>build eg</literal>."
+msgstr "Hibernate ë°°í¬ë³¸ ë´ì <literal>eg/</literal> ëë í 리를 ì´í´ ë³´ë¼. ì´ ëë í 리ë ê°ë¨í ì¤í ëì¼ë¡ ì´í리ì¼ì´ì
ì í¬í¨íê³ ìë¤. ë¹ì ì JDBC ëë¼ì´ë²ë¥¼ <literal>lib/</literal> ëë í 리ì ë³µì¬íê³ ë¹ì ì ë°ì´í°ë² ì´ì¤ì ë§ë ì íí ê°ì ì§ì íì¬ <literal>etc/hibernate.properties</literal> 를 í¸ì§íë¼. 배보본 ëë í 리ìì ëª
ë ¹ ë¼ì¸ í롬íí¸ìì (Ant를 ì¬ì©íì¬) <literal>ant eg</literal> 를 íì´í íê±°ë , Windows íìì <literal>build eg</literal> 를 íì´í íë¼."
+
+#: index.docbook:80
+msgid "Use this reference documentation as your primary source of information. Consider reading <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2) if you need more help with application design or if you prefer a step-by-step tutorial. Also visit http://caveatemptor.hibernate.org and download the example application for Java Persistence with Hibernate."
+msgstr "ë¹ì ì 주ë ì ë³´ì ìì¤ë¡ì ì´ ì°¸ì¡° 문ì를 ì¬ì©íë¼. ë§ì¼ ì´í리ì¼ì´ì
ì¤ê³ì ëí´ ë ë§ì ëìì íìë¡ íê±°ë ë¹ì ì´ ë¨ê³ì ì¸ íí 리ì¼ì ì í¸íë¤ë©´ <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2)ì ì½ë ê²ì ê³ ë ¤íë¼.ëí http://caveatemptor.hibernate.orgì 방문íì¬ Java Persistence with Hibernateì© ìì ì´í리ì¼ì´ì
ì ë¤ì´ë¡ë íë¼."
+
+#: index.docbook:90
+msgid "FAQs are answered on the Hibernate website."
+msgstr "FAQë¤ì Hibernate ì¹ ì¬ì´í¸ ìì ëµë³ëì´ ìë¤."
+
+#: index.docbook:95
+msgid "Third party demos, examples, and tutorials are linked on the Hibernate website."
+msgstr "ì 3ì ë°ëª¨ë¤, ìì ë¤, ê·¸ë¦¬ê³ íí 리ì¼ë¤ì Hibernate ì¹ ì¬ì´í¸ ìì ë§í¬ëì´ ìë¤."
+
+#: index.docbook:101
+msgid "The Community Area on the Hibernate website is a good resource for design patterns and various integration solutions (Tomcat, JBoss AS, Struts, EJB, etc.)."
+msgstr "Hibernate ì¹ì¬ì´í¸ ìì ê³µëì²´ ììì ì¤ê³ í¨í´ê³¼ ë¤ìí íµí© ì루ì
ë¤(Tomcat, JBoss AS, Struts, EJB ë±.)ì ê´í ì¢ì 리ìì¤ì´ë¤."
+
+#: index.docbook:109
+msgid "If you have questions, use the user forum linked on the Hibernate website. We also provide a JIRA issue trackings system for bug reports and feature requests. If you are interested in the development of Hibernate, join the developer mailing list. If you are interested in translating this documentation into your language, contact us on the developer mailing list."
+msgstr "ì§ë¬¸ì´ ìë¤ë©´, Hibernate ìì ë§í¬ëì´ ìë ì¬ì©ì í¬ë¼ì ì¬ì©íë¼. ì°ë¦¬ë ëí ë²ê·¸ ë³´ê³ ì í¹ì§ ìì²ë¤ì ìí JIRA ìì ì¶ì ìì¤í
ì ì ê³µíë¤. ë¹ì ì´ Hibernateì ê°ë°ì ê´ì¬ì´ ìë¤ë©´, ê°ë°ì ë©ì¼ë§ 리ì¤í¸ì ì°¸ì¬íë¼. ë§ì¼ ë¹ì ì´ ì´ ë¬¸ì를 ë¹ì ì ì¸ì´ë¡ ë²ìíë ê²ì ê´ì¬ì´ ìë¤ë©´, ê°ë°ì ë©ì¼ë§ 리ì¤í¸ì ì ì´íë¼."
+
+#: index.docbook:117
+msgid "Commercial development support, production support, and training for Hibernate is available through JBoss Inc. (see http://www.hibernate.org/SupportTraining/). Hibernate is a Professional Open Source project and a critical component of the JBoss Enterprise Middleware System (JEMS) suite of products."
+msgstr "Hibernate를 ìí ìì© ê°ë° ì§ì, ì í ì§ì, ê·¸ë¦¬ê³ êµì¡ì JBoss Inc를 íµí´ ì´ì© ê°ë¥íë¤ (http://www.hibernate.org/SupportTraining/를 ë³´ë¼). Hibernateë JBoss Professional Open Source product íë¡ì í¸ì´ê³ ì íë¤ì ëí JBoss Enterprise Middleware System (JEMS) suiteì ì¤ëí ì»´í¬ëí¸ì´ë¤."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/query_criteria.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/query_criteria.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/query_criteria.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,672 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Criteria Queries"
+msgstr "Criteria ì§ìë¤"
+
+#: index.docbook:7
+msgid "Hibernate features an intuitive, extensible criteria query API."
+msgstr "Hibernateë ì§ê´ì ì¸, íì¥ ê°ë¥í criteria query API를 í¹ì§ ì§ëë¤."
+
+#: index.docbook:12
+msgid "Creating a <literal>Criteria</literal> instance"
+msgstr "<literal>Criteria</literal> ì¸ì¤í´ì¤ ìì±í기"
+
+#: index.docbook:14
+msgid "The interface <literal>org.hibernate.Criteria</literal> represents a query against a particular persistent class. The <literal>Session</literal> is a factory for <literal>Criteria</literal> instances."
+msgstr "<literal>org.hibernate.Criteria</literal>ì¸í°íì´ì¤ë í¹ì ìì í´ëì¤ì ëí ì§ì를 íííë¤. <literal>Session</literal>ì <literal>Criteria</literal> ì¸ì¤í´ì¤ë¤ì ëí í©í 리ì´ë¤."
+
+#: index.docbook:20
+msgid ""
+ "<![CDATA[Criteria crit = sess.createCriteria(Cat.class);\n"
+ "crit.setMaxResults(50);\n"
+ "List cats = crit.list();]]>"
+msgstr ""
+ "<![CDATA[Criteria crit = sess.createCriteria(Cat.class);\n"
+ "crit.setMaxResults(50);\n"
+ "List cats = crit.list();]]>"
+
+#: index.docbook:25
+msgid "Narrowing the result set"
+msgstr "ê²°ê³¼ ì
ì íí기"
+
+#: index.docbook:27
+msgid "An individual query criterion is an instance of the interface <literal>org.hibernate.criterion.Criterion</literal>. The class <literal>org.hibernate.criterion.Restrictions</literal> defines factory methods for obtaining certain built-in <literal>Criterion</literal> types."
+msgstr "ê°ë³ì ì¸ ì§ì 기ì¤ì <literal>org.hibernate.criterion.Criterion</literal> ì¸í°íì´ì¤ì ì¸ì¤í´ì¤ì´ë¤. <literal>org.hibernate.criterion.Restrictions</literal> í´ëì¤ë ì´ë¤ 미리 ë§ë¤ì´ì§ <literal>Criterion</literal> íì
ë¤ì ì»ë í©í 리 ë©ìëë¤ì ì ìíë¤."
+
+#: index.docbook:35
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.between(\"weight\", minWeight, maxWeight) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.between(\"weight\", minWeight, maxWeight) )\n"
+ " .list();]]>"
+
+#: index.docbook:37
+msgid "Restrictions may be grouped logically."
+msgstr "ì íë¤ì ë
¼ë¦¬ì ì¼ë¡ 그룹ì§ìì§ ìë ìë¤."
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.or(\n"
+ " Restrictions.eq( \"age\", new Integer(0) ),\n"
+ " Restrictions.isNull(\"age\")\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.or(\n"
+ " Restrictions.eq( \"age\", new Integer(0) ),\n"
+ " Restrictions.isNull(\"age\")\n"
+ " ) )\n"
+ " .list();]]>"
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.in( \"name\", new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( Restrictions.isNull(\"age\") )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(0) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(1) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(2) ) )\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.in( \"name\", new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( Restrictions.isNull(\"age\") )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(0) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(1) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(2) ) )\n"
+ " ) )\n"
+ " .list();]]>"
+
+#: index.docbook:45
+msgid "There are quite a range of built-in criterion types (<literal>Restrictions</literal> subclasses), but one that is especially useful lets you specify SQL directly."
+msgstr "미리 ë§ë¤ì´ì§ criterion íì
ë¤(<literal>Restrictions</literal> ìë¸í´ëì¤ë¤)ì ììì´ ê½¤ ì¡´ì¬íì§ë§, í¹í ì ì©í ê²ì ë¹ì ì¼ë¡ íì¬ê¸ SQLì ì§ì ì§ì íëë¡ í´ì¤ë¤."
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.sqlRestriction(\"lower({alias}.name) like lower(?)\", \"Fritz%\", Hibernate.STRING) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.sqlRestriction(\"lower({alias}.name) like lower(?)\", \"Fritz%\", Hibernate.STRING) )\n"
+ " .list();]]>"
+
+#: index.docbook:52
+msgid "The <literal>{alias}</literal> placeholder with be replaced by the row alias of the queried entity."
+msgstr "ì§ìë ìí°í°ì í aliasì ìí´ ëì²´ë <literal>{alias}</literal> placeholder."
+
+#: index.docbook:57
+msgid "An alternative approach to obtaining a criterion is to get it from a <literal>Property</literal> instance. You can create a <literal>Property</literal> by calling <literal>Property.forName()</literal>."
+msgstr "criterionì ì»ë ëìì ì¸ ì ê·¼ë²ì <literal>Property</literal> ì¸ì¤í´ì¤ë¡ë¶í° ê·¸ê²ì ì»ë ê²ì´ë¤. ë¹ì ì <literal>Property.forName()</literal>ì í¸ì¶íì¬ <literal>Property</literal>를 ìì±ìí¬ ì ìë¤."
+
+#: index.docbook:63
+msgid ""
+ "<![CDATA[\n"
+ "Property age = Property.forName(\"age\");\n"
+ "List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( age.isNull() )\n"
+ " .add( age.eq( new Integer(0) ) )\n"
+ " .add( age.eq( new Integer(1) ) )\n"
+ " .add( age.eq( new Integer(2) ) )\n"
+ " ) )\n"
+ " .add( Property.forName(\"name\").in( new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "Property age = Property.forName(\"age\");\n"
+ "List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( age.isNull() )\n"
+ " .add( age.eq( new Integer(0) ) )\n"
+ " .add( age.eq( new Integer(1) ) )\n"
+ " .add( age.eq( new Integer(2) ) )\n"
+ " ) )\n"
+ " .add( Property.forName(\"name\").in( new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .list();]]>"
+
+#: index.docbook:68
+msgid "Ordering the results"
+msgstr "ê²°ê³¼ë¤ì ììì§ì°ê¸°(ordering)"
+
+#: index.docbook:70
+msgid "You may order the results using <literal>org.hibernate.criterion.Order</literal>."
+msgstr "ë¹ì ì <literal>org.hibernate.criterion.Order</literal>를 ì¬ì©íì¬ ê²°ê³¼ë¤ì ìì(ordering)ì§ì¸ ì ìë¤."
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .addOrder( Order.asc(\"name\") )\n"
+ " .addOrder( Order.desc(\"age\") )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .addOrder( Order.asc(\"name\") )\n"
+ " .addOrder( Order.desc(\"age\") )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"name\").like(\"F%\") )\n"
+ " .addOrder( Property.forName(\"name\").asc() )\n"
+ " .addOrder( Property.forName(\"age\").desc() )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"name\").like(\"F%\") )\n"
+ " .addOrder( Property.forName(\"name\").asc() )\n"
+ " .addOrder( Property.forName(\"age\").desc() )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:81
+msgid "Associations"
+msgstr "<title>ì°ê´ë¤</title>"
+
+#: index.docbook:83
+msgid "You may easily specify constraints upon related entities by navigating associations using <literal>createCriteria()</literal>."
+msgstr "ë¹ì ì <literal>createCriteria()</literal>를 ì¬ì©íì¬ ì°ê´ë¤ì ë¤ë¹ê²ì´í¸í¨ì¼ë¡ì¨ ê´ê³ë ìí°í°ë¤ì ëí 컨ì¤í¸ë ì¸í¸ë¤ì ì½ê² ì§ì í ì ìë¤."
+
+#: index.docbook:88
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .createCriteria(\"kittens\")\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .createCriteria(\"kittens\")\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .list();]]>"
+
+#: index.docbook:90
+msgid "note that the second <literal>createCriteria()</literal> returns a new instance of <literal>Criteria</literal>, which refers to the elements of the <literal>kittens</literal> collection."
+msgstr "ë ë²ì§¸ <literal>createCriteria()</literal>ë <literal>Criteria</literal>ì ìë¡ì´ ì¸ì¤í´ì¤ë¥¼ ë°ííë©°, ê·¸ê²ì <literal>kittens</literal> ì½ë ì
ì ììë¤ì 참조íë¤ë ì ì ë
¸í¸íë¼."
+
+#: index.docbook:96
+msgid "The following, alternate form is useful in certain circumstances."
+msgstr "ë¤ì ëì²´ íìì ì´ë¤ íê²½ë¤ìì ì ì©íë¤."
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createAlias(\"kittens\", \"kt\")\n"
+ " .createAlias(\"mate\", \"mt\")\n"
+ " .add( Restrictions.eqProperty(\"kt.name\", \"mt.name\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createAlias(\"kittens\", \"kt\")\n"
+ " .createAlias(\"mate\", \"mt\")\n"
+ " .add( Restrictions.eqProperty(\"kt.name\", \"mt.name\") )\n"
+ " .list();]]>"
+
+#: index.docbook:102
+msgid "(<literal>createAlias()</literal> does not create a new instance of <literal>Criteria</literal>.)"
+msgstr "(<literal>createAlias()</literal>ë <literal>Criteria</literal>ì ìë¡ì´ ì¸ì¤í´ì¤ë¥¼ ìì±ìí¤ì§ ìëë¤.)"
+
+#: index.docbook:107
+msgid "Note that the kittens collections held by the <literal>Cat</literal> instances returned by the previous two queries are <emphasis>not</emphasis> pre-filtered by the criteria! If you wish to retrieve just the kittens that match the criteria, you must use a <literal>ResultTransformer</literal>."
+msgstr "ìì ë ê°ì ì§ìë¤ì ìí´ ë°íë <literal>Cat</literal> ì¸ì¤í´ì¤ë¤ì ìí´ ë³´ê´ë kittens ì½ë ì
ë¤ì criteriaì ìí´ ì¬ì -íí°ë§ëì§ <emphasis>ìëë¤</emphasis>ë ì ì ë
¸í¸íë¼! ë§ì¼ ë¹ì ì´ criteria(기ì¤)ê³¼ ì¼ì¹íë ê³ ìì´ ìë¼ë¤ì ë¨ì§ ê²ìíê³ ì ìí ê²½ì°, ë¹ì ì íëì <literal>ResultTransformer</literal>를 ì¬ì©í´ì¼ íë¤."
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createCriteria(\"kittens\", \"kt\")\n"
+ " .add( Restrictions.eq(\"name\", \"F%\") )\n"
+ " .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)\n"
+ " .list();\n"
+ "Iterator iter = cats.iterator();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Map map = (Map) iter.next();\n"
+ " Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);\n"
+ " Cat kitten = (Cat) map.get(\"kt\");\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createCriteria(\"kittens\", \"kt\")\n"
+ " .add( Restrictions.eq(\"name\", \"F%\") )\n"
+ " .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)\n"
+ " .list();\n"
+ "Iterator iter = cats.iterator();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Map map = (Map) iter.next();\n"
+ " Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);\n"
+ " Cat kitten = (Cat) map.get(\"kt\");\n"
+ "}]]>"
+
+#: index.docbook:119
+msgid "Dynamic association fetching"
+msgstr "ëì ì¸ ì°ê´ íì¹"
+
+#: index.docbook:121
+msgid "You may specify association fetching semantics at runtime using <literal>setFetchMode()</literal>."
+msgstr "ë¹ì ì <literal>setFetchMode()</literal>를 ì¬ì©íì¬ ì¤í ìì ì°ê´ íì¹ ì미를 ì§ì í ì ìë¤."
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .setFetchMode(\"mate\", FetchMode.EAGER)\n"
+ " .setFetchMode(\"kittens\", FetchMode.EAGER)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .setFetchMode(\"mate\", FetchMode.EAGER)\n"
+ " .setFetchMode(\"kittens\", FetchMode.EAGER)\n"
+ " .list();]]>"
+
+#: index.docbook:128
+msgid "This query will fetch both <literal>mate</literal> and <literal>kittens</literal> by outer join. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "ì´ ì§ìë outer ì¡°ì¸ì¼ë¡ <literal>mate</literal>ì <literal>kittens</literal> 모ë를 íì¹í ê²ì´ë¤. ì¶ê° ì ë³´ë <xref linkend=\"performance-fetching\"/>ì ë³´ë¼."
+
+#: index.docbook:136
+msgid "Example queries"
+msgstr "ìì ì§ìë¤"
+
+#: index.docbook:138
+msgid "The class <literal>org.hibernate.criterion.Example</literal> allows you to construct a query criterion from a given instance."
+msgstr "<literal>org.hibernate.criterion.Example</literal> í´ëì¤ë 주ì´ì§ ì¸ì¤í´ì¤ë¡ë¶í° ì§ì 기ì¤(criterion)ì 구조í ìí¤ë ê²ì ë¹ì ìê² íì©í´ì¤ë¤."
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[Cat cat = new Cat();\n"
+ "cat.setSex('F');\n"
+ "cat.setColor(Color.BLACK);\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new Cat();\n"
+ "cat.setSex('F');\n"
+ "cat.setColor(Color.BLACK);\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .list();]]>"
+
+#: index.docbook:145
+msgid "Version properties, identifiers and associations are ignored. By default, null valued properties are excluded."
+msgstr "ë²ì íë¡í¼í°ë¤, ìë³ìë¤, ì°ê´ê´ê³ë¤ì´ 무ìëë¤. ëí´í¸ë¡ null ê° íë¡í¼í°ë¤ì´ ì ì¸ëë¤."
+
+#: index.docbook:150
+msgid "You can adjust how the <literal>Example</literal> is applied."
+msgstr "ë¹ì ì <literal>Example</literal>ì´ ì ì©ëë ë°©ë²ì ì¡°ì í ì ìë¤."
+
+#: index.docbook:154
+msgid ""
+ "<![CDATA[Example example = Example.create(cat)\n"
+ " .excludeZeroes() //exclude zero valued properties\n"
+ " .excludeProperty(\"color\") //exclude the property named \"color\"\n"
+ " .ignoreCase() //perform case insensitive string comparisons\n"
+ " .enableLike(); //use like for string comparisons\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add(example)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Example example = Example.create(cat)\n"
+ " .excludeZeroes() //exclude zero valued properties\n"
+ " .excludeProperty(\"color\") //exclude the property named \"color\"\n"
+ " .ignoreCase() //perform case insensitive string comparisons\n"
+ " .enableLike(); //use like for string comparisons\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add(example)\n"
+ " .list();]]>"
+
+#: index.docbook:156
+msgid "You can even use examples to place criteria upon associated objects."
+msgstr "ë¹ì ì ì°ê´ë ê°ì²´ë¤ì ëí criteria(기ì¤)ì ìì¹ì§ì°ëë° examples를 ì¬ì©í ì ìë¤."
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .createCriteria(\"mate\")\n"
+ " .add( Example.create( cat.getMate() ) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .createCriteria(\"mate\")\n"
+ " .add( Example.create( cat.getMate() ) )\n"
+ " .list();]]>"
+
+#: index.docbook:165
+msgid "Projections, aggregation and grouping"
+msgstr "Projections, aggregation ê·¸ë¦¬ê³ grouping"
+
+#: index.docbook:166
+msgid "The class <literal>org.hibernate.criterion.Projections</literal> is a factory for <literal>Projection</literal> instances. We apply a projection to a query by calling <literal>setProjection()</literal>."
+msgstr "<literal>org.hibernate.criterion.Projections</literal> í´ëì¤ë <literal>Projection</literal> ì¸ì¤í´ì¤ë¤ì ëí í©í 리ì´ë¤. ì°ë¦¬ë <literal>setProjection()</literal>ì í¸ì¶íì¬ íëì ì§ìì projection(í¬ì¬,í¬ì)ì ì ì©ìí¨ë¤."
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.rowCount() )\n"
+ " .add( Restrictions.eq(\"color\", Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.rowCount() )\n"
+ " .add( Restrictions.eq(\"color\", Color.BLACK) )\n"
+ " .list();]]>"
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount() )\n"
+ " .add( Projections.avg(\"weight\") )\n"
+ " .add( Projections.max(\"weight\") )\n"
+ " .add( Projections.groupProperty(\"color\") )\n"
+ " )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount() )\n"
+ " .add( Projections.avg(\"weight\") )\n"
+ " .add( Projections.max(\"weight\") )\n"
+ " .add( Projections.groupProperty(\"color\") )\n"
+ " )\n"
+ " .list();]]>"
+
+#: index.docbook:176
+msgid "There is no explicit \"group by\" necessary in a criteria query. Certain projection types are defined to be <emphasis>grouping projections</emphasis>, which also appear in the SQL <literal>group by</literal> clause."
+msgstr "criteria ì§ì ë´ììë ëª
ìì ì¸ \"group by\"ê° íìì ì´ì§ ìë¤. ì´ë¤ projection íì
ë¤ì <emphasis>grouping projections</emphasis>ë¤ì´ê²ë ì ìëê³ , ê·¸ê²ì ëí SQL <literal>group by</literal> ì ìì ëíëë¤."
+
+#: index.docbook:182
+msgid "An alias may optionally be assigned to a projection, so that the projected value may be referred to in restrictions or orderings. Here are two different ways to do this:"
+msgstr "aliasë ì íì ì¼ë¡ projectionì í ë¹ë ì ìì´ì, í¬ì¬ë(projected) ê°ì ì í(restriction)ë¤ ëë orderingë¤ ë´ìì 참조ë ì ìë¤. ë¤ìì ì´ê²ì ííë ë ê°ì ë¤ë¥¸ ë°©ë²ë¤ì´ë¤:"
+
+#: index.docbook:188
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.alias( Projections.groupProperty(\"color\"), \"colr\" ) )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.alias( Projections.groupProperty(\"color\"), \"colr\" ) )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+
+#: index.docbook:190
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.groupProperty(\"color\").as(\"colr\") )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.groupProperty(\"color\").as(\"colr\") )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+
+#: index.docbook:192
+msgid "The <literal>alias()</literal> and <literal>as()</literal> methods simply wrap a projection instance in another, aliased, instance of <literal>Projection</literal>. As a shortcut, you can assign an alias when you add the projection to a projection list:"
+msgstr "<literal>alias()</literal> ë©ìëì <literal>as()</literal> ë©ìëë ë ë¤ë¥¸ alias ë <literal>Projection</literal>ì ì¸ì¤í´ì¤ ë´ì íëì projection ì¸ì¤í´ì¤ë¥¼ ê°ë¨íê² í¬ì¥íë¤. ì§ë¦ê¸¸ë¡ì, ë¹ì ì´ projectionì projection 리ì¤í¸ì ì¶ê°í ë ë¹ì ì alias를 í ë¹í ì ìë¤:"
+
+#: index.docbook:199
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount(), \"catCountByColor\" )\n"
+ " .add( Projections.avg(\"weight\"), \"avgWeight\" )\n"
+ " .add( Projections.max(\"weight\"), \"maxWeight\" )\n"
+ " .add( Projections.groupProperty(\"color\"), \"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount(), \"catCountByColor\" )\n"
+ " .add( Projections.avg(\"weight\"), \"avgWeight\" )\n"
+ " .add( Projections.max(\"weight\"), \"maxWeight\" )\n"
+ " .add( Projections.groupProperty(\"color\"), \"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+
+#: index.docbook:201
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Domestic.class, \"cat\")\n"
+ " .createAlias(\"kittens\", \"kit\")\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.property(\"cat.name\"), \"catName\" )\n"
+ " .add( Projections.property(\"kit.name\"), \"kitName\" )\n"
+ " )\n"
+ " .addOrder( Order.asc(\"catName\") )\n"
+ " .addOrder( Order.asc(\"kitName\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Domestic.class, \"cat\")\n"
+ " .createAlias(\"kittens\", \"kit\")\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.property(\"cat.name\"), \"catName\" )\n"
+ " .add( Projections.property(\"kit.name\"), \"kitName\" )\n"
+ " )\n"
+ " .addOrder( Order.asc(\"catName\") )\n"
+ " .addOrder( Order.asc(\"kitName\") )\n"
+ " .list();]]>"
+
+#: index.docbook:203
+msgid "You can also use <literal>Property.forName()</literal> to express projections:"
+msgstr "ë¹ì ì ëí projectionë¤ì íííëë° <literal>Property.forName()</literal>ì ì¬ì©í ì ìë¤:"
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Property.forName(\"name\") )\n"
+ " .add( Property.forName(\"color\").eq(Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Property.forName(\"name\") )\n"
+ " .add( Property.forName(\"color\").eq(Color.BLACK) )\n"
+ " .list();]]>"
+
+#: index.docbook:209
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount().as(\"catCountByColor\") )\n"
+ " .add( Property.forName(\"weight\").avg().as(\"avgWeight\") )\n"
+ " .add( Property.forName(\"weight\").max().as(\"maxWeight\") )\n"
+ " .add( Property.forName(\"color\").group().as(\"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount().as(\"catCountByColor\") )\n"
+ " .add( Property.forName(\"weight\").avg().as(\"avgWeight\") )\n"
+ " .add( Property.forName(\"weight\").max().as(\"maxWeight\") )\n"
+ " .add( Property.forName(\"color\").group().as(\"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+
+#: index.docbook:214
+msgid "Detached queries and subqueries"
+msgstr "Detached ì§ìë¤ê³¼ ìë¸ì§ìë¤"
+
+#: index.docbook:215
+msgid "The <literal>DetachedCriteria</literal> class lets you create a query outside the scope of a session, and then later execute it using some arbitrary <literal>Session</literal>."
+msgstr "<literal>DetachedCriteria</literal> í´ëì¤ë ë¹ì ìê² ì¸ì
ììì ì¸ë¶ìì ì§ì를 ìì±ìí¤ëë¡ íê³ , ê·¸ë° ë¤ì ëì¤ì ì´ë¤ ììì <literal>Session</literal>ì ì¬ì©íì¬ ê·¸ê²ì ì¤ííëë¡ íë¤."
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)\n"
+ " .add( Property.forName(\"sex\").eq('F') );\n"
+ " \n"
+ "Session session = ....;\n"
+ "Transaction txn = session.beginTransaction();\n"
+ "List results = query.getExecutableCriteria(session).setMaxResults(100).list();\n"
+ "txn.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)\n"
+ " .add( Property.forName(\"sex\").eq('F') );\n"
+ " \n"
+ "Session session = ....;\n"
+ "Transaction txn = session.beginTransaction();\n"
+ "List results = query.getExecutableCriteria(session).setMaxResults(100).list();\n"
+ "txn.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:222
+msgid "A <literal>DetachedCriteria</literal> may also be used to express a subquery. Criterion instances involving subqueries may be obtained via <literal>Subqueries</literal> or <literal>Property</literal>."
+msgstr "<literal>DetachedCriteria</literal>ë ëí ìë¸ì§ì를 íííëë° ì¬ì©ëë¤. ìë¸ì§ìë¤ì í¬í¨íë Criterion ì¸ì¤í´ì¤ë¤ì <literal>Subqueries</literal> ëë <literal>Property</literal>를 íµí´ ì»ì´ì§ ì ìë¤."
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\").avg() );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"weight\").gt(avgWeight) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\").avg() );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"weight\").gt(avgWeight) )\n"
+ " .list();]]>"
+
+#: index.docbook:230
+msgid ""
+ "<![CDATA[DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\") );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Subqueries.geAll(\"weight\", weights) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\") );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Subqueries.geAll(\"weight\", weights) )\n"
+ " .list();]]>"
+
+#: index.docbook:232
+msgid "Even correlated subqueries are possible:"
+msgstr "ì¬ì§ì´ ìê´ê´ê³ ì§ìì§ ìë¸ì§ìë¤ì´ ê°ë¥íë¤:"
+
+#: index.docbook:236
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, \"cat2\")\n"
+ " .setProjection( Property.forName(\"weight\").avg() )\n"
+ " .add( Property.forName(\"cat2.sex\").eqProperty(\"cat.sex\") );\n"
+ "session.createCriteria(Cat.class, \"cat\")\n"
+ " .add( Property.forName(\"weight\").gt(avgWeightForSex) )\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, \"cat2\")\n"
+ " .setProjection( Property.forName(\"weight\").avg() )\n"
+ " .add( Property.forName(\"cat2.sex\").eqProperty(\"cat.sex\") );\n"
+ "session.createCriteria(Cat.class, \"cat\")\n"
+ " .add( Property.forName(\"weight\").gt(avgWeightForSex) )\n"
+ " .list();]]>"
+
+#: index.docbook:245
+msgid "Queries by natural identifier"
+msgstr "natural ìë³ìì ìí ì§ìë¤"
+
+#: index.docbook:247
+msgid "For most queries, including criteria queries, the query cache is not very efficient, because query cache invalidation occurs too frequently. However, there is one special kind of query where we can optimize the cache invalidation algorithm: lookups by a constant natural key. In some applications, this kind of query occurs frequently. The criteria API provides special provision for this use case."
+msgstr "ëë¶ë¶ì ì§ìë¤ìì, criteria ì§ìë¤ì í¬í¨íì¬, ì§ì ìºìë ë§¤ì° í¨ì¨ì ì´ì§ ìë¤. ìëíë©´ ì§ì ìºì ë¹ì í¨ì±ì´ ë무 ì주 ë°ìí기 ë문ì´ë¤. íì§ë§, ì°ë¦¬ê° ìºì ë¹ì í¨ì± ìê³ ë¦¬ì¦ì ìµì í ìí¬ ì ìë í ê°ì§ í¹ë³í ì¢
ë¥ì ì§ìê° ì¡´ì¬íë¤: ìì natural í¤ì ìí 룩ì
. ëªëª ì´í리ì¼ì´ì
ë¤ìì, ì´ë° ì¢
ë¥ì ì§ìê° ì주 ë°ìíë¤. criteria APIë ì´ ì°ìì를 ìí í¹ë³í ì¤ë¹ë¥¼ ì ê³µíë¤."
+
+#: index.docbook:255
+msgid "First, you should map the natural key of your entity using <literal><natural-id></literal>, and enable use of the second-level cache."
+msgstr "첫ë²ì§¸ë¡ ë¹ì ì <literal><natural-id></literal>를 ì¬ì©íì¬ ë¹ì ì ìí°í°ì ëí natural í¤ë¥¼ 매í ìì¼ì¼ íê³ , second-level ìºì ì¬ì©ì ê°ë¥íê² í´ì¼ íë¤."
+
+#: index.docbook:260
+msgid ""
+ "<![CDATA[<class name=\"User\">\n"
+ " <cache usage=\"read-write\"/>\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <natural-id>\n"
+ " <property name=\"name\"/>\n"
+ " <property name=\"org\"/>\n"
+ " </natural-id>\n"
+ " <property name=\"password\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"User\">\n"
+ " <cache usage=\"read-write\"/>\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <natural-id>\n"
+ " <property name=\"name\"/>\n"
+ " <property name=\"org\"/>\n"
+ " </natural-id>\n"
+ " <property name=\"password\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:262
+msgid "Note that this functionality is not intended for use with entities with <emphasis>mutable</emphasis> natural keys."
+msgstr "ì´ ê¸°ë¥ì <emphasis>ê°ë³ì± ìë</emphasis> natural í¤ë¤ì ê°ì§ ìí°í°ë¤ì ì©ëë¡ ê³ ìëì´ ìì§ ììì ë
¸í¸íë¼."
+
+#: index.docbook:267
+msgid "Next, enable the Hibernate query cache."
+msgstr "ë¤ìì¼ë¡ , Hibernate ì§ì ìºì를 ì¬ì© ê°ë¥íëë¡ íë¼."
+
+#: index.docbook:271
+msgid "Now, <literal>Restrictions.naturalId()</literal> allows us to make use of the more efficient cache algorithm."
+msgstr "ì´ì <literal>Restrictions.naturalId()</literal>ë ìºì ìê³ ë¦¬ì¦ì ë³´ë¤ í¨ì¨ì ì¼ë¡ ì¬ì©í ì ìëë¡ ì°ë¦¬ìê² íì©í´ì¤ë¤."
+
+#: index.docbook:276
+msgid ""
+ "<![CDATA[session.createCriteria(User.class)\n"
+ " .add( Restrictions.naturalId()\n"
+ " .set(\"name\", \"gavin\")\n"
+ " .set(\"org\", \"hb\") \n"
+ " ).setCacheable(true)\n"
+ " .uniqueResult();]]>"
+msgstr ""
+ "<![CDATA[session.createCriteria(User.class)\n"
+ " .add( Restrictions.naturalId()\n"
+ " .set(\"name\", \"gavin\")\n"
+ " .set(\"org\", \"hb\") \n"
+ " ).setCacheable(true)\n"
+ " .uniqueResult();]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/query_hql.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/query_hql.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/query_hql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1510 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "HQL: The Hibernate Query Language"
+msgstr "HQL: íì´ë²ë¤ì´í¸ ì§ì ì¸ì´(Hibernate Query Language)"
+
+#: index.docbook:7
+msgid "Hibernate is equipped with an extremely powerful query language that (quite intentionally) looks very much like SQL. But don't be fooled by the syntax; HQL is fully object-oriented, understanding notions like inheritence, polymorphism and association."
+msgstr "Hibernateë (ì주 ìëì ì¼ë¡) SQLê³¼ ë§¤ì° í¡ì¬íê² ë³´ì´ë ê·¹í ê°ë ¥í ì§ì ì¸ì´ë¥¼ 구ë¹íê³ ìë¤. ê·¸ë¬ë ê·¸ 구문ì ìí´ ì°ë¡±ë¹íì§ ë§ë¼; HQLì ìì, ë¤íì± ê·¸ë¦¬ê³ ì°ê´ê³¼ ê°ì ê°ë
ë¤ì ì´í´íì¬ì, ì ì²´ì ì¼ë¡ ê°ì²´ ì§í¥ì ì´ë¤."
+
+#: index.docbook:14
+msgid "Case Sensitivity"
+msgstr "ëì문ì 구ë¶"
+
+#: index.docbook:16
+msgid "Queries are case-insensitive, except for names of Java classes and properties. So <literal>SeLeCT</literal> is the same as <literal>sELEct</literal> is the same as <literal>SELECT</literal> but <literal>org.hibernate.eg.FOO</literal> is not <literal>org.hibernate.eg.Foo</literal> and <literal>foo.barSet</literal> is not <literal>foo.BARSET</literal>."
+msgstr "ì§ìë¤ì Java í´ëì¤ë¤ê³¼ íë¡í¼í°ë¤ì ì´ë¦ë¤ì ì ì¸íë©´ ëì문ì를 구ë¶íì§ ìëë¤. ë°ë¼ì <literal>SeLeCT</literal>ë <literal>SELECT</literal>ì ê°ê³ <literal>SELECT</literal>ìë ê°ì§ë§ <literal>org.hibernate.eg.FOO</literal>ë <literal>org.hibernate.eg.Foo</literal>ê³¼ ê°ì§ ìê³ <literal>foo.barSet</literal>ì <literal>foo.BARSET</literal>ê³¼ ê°ì§ ìë¤."
+
+#: index.docbook:27
+msgid "This manual uses lowercase HQL keywords. Some users find queries with uppercase keywords more readable, but we find this convention ugly when embedded in Java code."
+msgstr "ì´ ë§¤ë´ì¼ì ì문ì HQL í¤ìë를 ì¬ì©íë¤. ëªëª ì¬ì©ìë¤ì ë³´ë¤ ëì ê°ë
ì±ì ìí´ ë문ì í¤ìëë¤ì ê°ì§ ì§ìë¤ì ì°¾ì§ë§, ì°ë¦¬ë ìë° ì½ë ìì ì½ì
ë ë ì´ ì»¨ë²¤ì
ì´ ì¶íë¤ë ì ì ë°ê²¬íë¤."
+
+#: index.docbook:35
+msgid "The from clause"
+msgstr "from ì "
+
+#: index.docbook:37
+msgid "The simplest possible Hibernate query is of the form:"
+msgstr "ê°ì¥ ê°ë¨í ê°ë¥í Hibernate ì§ìë ë¤ì íìì´ë¤:"
+
+#: index.docbook:41
+msgid "<![CDATA[from eg.Cat]]>"
+msgstr "<![CDATA[from eg.Cat]]>"
+
+#: index.docbook:43
+msgid "which simply returns all instances of the class <literal>eg.Cat</literal>. We don't usually need to qualify the class name, since <literal>auto-import</literal> is the default. So we almost always just write:"
+msgstr "ì´ê²ì <literal>eg.Cat</literal> í´ëì¤ì 모ë ì¸ì¤í´ì¤ë¤ì ê°ë¨íê² ë°ííë¤. ì°ë¦¬ë ëê° í´ëì¤ ì´ë¦ì ììí íìê° ìë¤. ìëíë©´, <literal>auto-import</literal>ê° ëí´í¸ì´ê¸° ë문ì´ë¤. ë°ë¼ì ì°ë¦¬ë ëê° íì ë¨ì§ ë¤ìê³¼ ê°ì´ ìì±íë¤:"
+
+#: index.docbook:49
+msgid "<![CDATA[from Cat]]>"
+msgstr "<![CDATA[from Cat]]>"
+
+#: index.docbook:51
+msgid "Most of the time, you will need to assign an <emphasis>alias</emphasis>, since you will want to refer to the <literal>Cat</literal> in other parts of the query."
+msgstr "ëê° ë¹ì ì í ê°ì <emphasis>alias</emphasis>를 í ë¹í íìê° ìì ê²ì´ë¤. ìëíë©´ ë¹ì ì ì§ìì ë¤ë¥¸ ë¶ë¶ë¤ìì <literal>Cat</literal>ì 참조íê³ ì ìí ê²ì´ê¸° ë문ì´ë¤."
+
+#: index.docbook:57, index.docbook:372
+msgid "<![CDATA[from Cat as cat]]>"
+msgstr "<![CDATA[from Cat as cat]]>"
+
+#: index.docbook:59
+msgid "This query assigns the alias <literal>cat</literal> to <literal>Cat</literal> instances, so we could use that alias later in the query. The <literal>as</literal> keyword is optional; we could also write:"
+msgstr "ì´ ì§ìë alias <literal>cat</literal>ì <literal>Cat</literal> ì¸ì¤í´ì¤ë¤ì í ë¹íì¬ì, ì°ë¦¬ë ëì¤ì ì§ì ììì ê·¸ alias를 ì¬ì©í ì ìì ê²ì´ë¤. <literal>as</literal> í¤ìëë ìµì
ì´ë¤; ì°ë¦¬ë ëí ë¤ìê³¼ ê°ì´ ìì±í ì ìë¤:"
+
+#: index.docbook:65
+msgid "<![CDATA[from Cat cat]]>"
+msgstr "<![CDATA[from Cat cat]]>"
+
+#: index.docbook:67
+msgid "Multiple classes may appear, resulting in a cartesian product or \"cross\" join."
+msgstr "ì¬ë¬ ê°ì í´ëì¤ë¤ì cartesian product(ì¹´í°ì ¼ ê³±) ëë \"í¬ë¡ì¤\" ì¡°ì¸ì¼ë¡ ê·ê²°ëì´ ëíë ìë ìë¤."
+
+#: index.docbook:71
+msgid "<![CDATA[from Formula, Parameter]]>"
+msgstr "<![CDATA[from Formula, Parameter]]>"
+
+#: index.docbook:72
+msgid "<![CDATA[from Formula as form, Parameter as param]]>"
+msgstr "<![CDATA[from Formula as form, Parameter as param]]>"
+
+#: index.docbook:74
+msgid "It is considered good practice to name query aliases using an initial lowercase, consistent with Java naming standards for local variables (eg. <literal>domesticCat</literal>)."
+msgstr "ë¡ì»¬ ë³ìë¤ì ëí Java ë¤ì´ë° íì¤ë¤ê³¼ ì¼ì¹ëê², 첫 ì문ì를 ì¬ì©íì¬ ì§ì aliasë¤ì ëª
ëª
íë ê²ì ì¢ì ìµê´ì¼ë¡ ê°ì£¼ëë¤ (ì를 ë¤ë©´ <literal>domesticCat</literal>)."
+
+#: index.docbook:83
+msgid "Associations and joins"
+msgstr "ì°ê´ë¤ê³¼ ì¡°ì¸ë¤"
+
+#: index.docbook:85
+msgid "We may also assign aliases to associated entities, or even to elements of a collection of values, using a <literal>join</literal>."
+msgstr "ì°ë¦¬ë ëí <literal>join</literal>ì ì¬ì©íì¬ , ì°ê´ë ìí°í°ë¤ì ëë ê°ë¤ì ê°ì§ ì½ë ì
ì ììë¤ìë aliasë¤ì í ë¹í ìë ìë¤."
+
+#: index.docbook:90
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join cat.mate as mate\n"
+ " left outer join cat.kittens as kitten]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ " inner join cat.mate as mate\n"
+ " left outer join cat.kittens as kitten]]>"
+
+#: index.docbook:92
+msgid "<![CDATA[from Cat as cat left join cat.mate.kittens as kittens]]>"
+msgstr "<![CDATA[from Cat as cat left join cat.mate.kittens as kittens]]>"
+
+#: index.docbook:94
+msgid "<![CDATA[from Formula form full join form.parameter param]]>"
+msgstr "<![CDATA[from Formula form full join form.parameter param]]>"
+
+#: index.docbook:96
+msgid "The supported join types are borrowed from ANSI SQL"
+msgstr "ì§ìëë join íì
ë¤ì ANSI SQLë¡ë¶í° ë¹ë ¤ìë¤"
+
+#: index.docbook:103
+msgid "inner join"
+msgstr "inner join"
+
+#: index.docbook:108
+msgid "left outer join"
+msgstr "left outer join"
+
+#: index.docbook:113
+msgid "right outer join"
+msgstr "right outer join"
+
+#: index.docbook:117
+msgid "<literal>full join</literal> (not usually useful)"
+msgstr "<literal>full join</literal> (ëê° ì ì©íì§ ìì)"
+
+#: index.docbook:123
+msgid "The <literal>inner join</literal>, <literal>left outer join</literal> and <literal>right outer join</literal> constructs may be abbreviated."
+msgstr "<literal>inner join</literal>, <literal>left outer join</literal>, ê·¸ë¦¬ê³ <literal>right outer join</literal> 구조체ë¤ì´ ì½ì¹ë ì ìë¤."
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " join cat.mate as mate\n"
+ " left join cat.kittens as kitten]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ " join cat.mate as mate\n"
+ " left join cat.kittens as kitten]]>"
+
+#: index.docbook:130
+msgid "You may supply extra join conditions using the HQL <literal>with</literal> keyword."
+msgstr "ë¹ì ì HQL <literal>with</literal> í¤ìë를 ì¬ì©íì¬ í¹ë³í ì¡°ì¸ ì¡°ê±´ë¤ì ì ê³µí ì ìë¤."
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " left join cat.kittens as kitten\n"
+ " with kitten.bodyWeight > 10.0]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ " left join cat.kittens as kitten \n"
+ " with kitten.bodyWeight > 10.0]]>"
+
+#: index.docbook:137
+msgid "In addition, a \"fetch\" join allows associations or collections of values to be initialized along with their parent objects, using a single select. This is particularly useful in the case of a collection. It effectively overrides the outer join and lazy declarations of the mapping file for associations and collections. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr "ê²ë¤ê°, \"fetch\" joinì ê°ë¤ì ê°ì§ ì½ë ì
ë¤ì´ë ì°ê´ê´ê³ë¤ì´ í ê°ì select를 ì¬ì©íì¬, ê·¸ê²ë¤ì ë¶ëª¨ ê°ì²´ë¤ì ë°ë¼ ì´ê¸°í ëë ê²ì íì©í´ì¤ë¤. ì´ê²ì ì½ë ì
ì ê²½ì°ì í¹í ì ì©íë¤. ê·¸ê²ì ì°ê´ê´ê³ë¤ê³¼ ì½ë ì
ë¤ì ëí 매í íì¼ì outer joinê³¼ lazy ì ì¸ë¤ì í¨ì¨ì ì¼ë¡ ì¤ë²ë¼ì´ë ìí¨ë¤. ì¶ê° ì ë³´ë <xref linkend=\"performance-fetching\"/>ì ë³´ë¼."
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens]]>"
+
+#: index.docbook:147
+msgid "A fetch join does not usually need to assign an alias, because the associated objects should not be used in the <literal>where</literal> clause (or any other clause). Also, the associated objects are not returned directly in the query results. Instead, they may be accessed via the parent object. The only reason we might need an alias is if we are recursively join fetching a further collection:"
+msgstr "fetch joinì ëê° alias를 í ë¹í íìê° ìë¤. ìëíë©´, ì°ê´ë ê°ì²´ë¤ì´ <literal>where</literal> ì (ëë ì´ë¤ ë¤ë¥¸ ì ) ìì ì¬ì©ëì§ ìì ê²ì´ê¸° ë문ì´ë¤. ëí ì°ê´ë ê°ì²´ë¤ì ì§ì ê²°ê³¼ë¤ ìì ì§ì ë°íëì§ ìëë¤. ëì ê·¸ê²ë¤ì ë¶ëª¨ ê°ì²´ë¥¼ íµí´ ì ê·¼ë ì ìë¤. ì°ë¦¬ê° alias를 íìë¡ í ì ìë ì ì¼í ì´ì ë ë ë§ì ì½ë ì
ë¤ì ì¬ê·ì ì¼ë¡ ì¡°ì¸ íì¹ìí¤ë ê²½ì°ì´ë¤:"
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens child\n"
+ " left join fetch child.kittens]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat \n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens child\n"
+ " left join fetch child.kittens]]>"
+
+#: index.docbook:157
+msgid "Note that the <literal>fetch</literal> construct may not be used in queries called using <literal>iterate()</literal> (though <literal>scroll()</literal> can be used). Nor should <literal>fetch</literal> be used together with <literal>setMaxResults()</literal> or <literal>setFirstResult()</literal> as these operations are based on the result rows, which usually contain duplicates for eager collection fetching, hence, the number of rows is not what you'd expect. Nor may <literal>fetch</literal> be used together with an ad hoc <literal>with</literal> condition. It is possible to create a cartesian product by join fetching more than one collection in a query, so take care in this case. Join fetching multiple collection roles also sometimes gives unexpected results for bag mappings, so be careful about how you formulate your queries in this case. Finally, note that <literal>full join fetch</literal> and <literal>right join fetch</literal> are not meaningful."
+msgstr "(ë¹ë¡ <literal>scroll()</literal>ì´ ì¬ì©ë ì ììì§ë¼ë) <literal>fetch</literal> 구조체ë <literal>iterate()</literal>를 ì¬ì©íì¬ í¸ì¶ëë ì§ìë¤ ë´ì ì¬ì©ë ì ììì ë
¸í¸íë¼. ì´ë¤ ì¤í¼ë ì´ì
ë¤ì´ ê²°ê³¼ íë¤ì 기ì´íê³ ì기 ë문ì <literal>fetch</literal>ë <literal>setMaxResults()</literal> ëë <literal>setFirstResult()</literal>ê³¼ í¨ê» ì¬ì©ëì§ ë§ìì¼ íë©°, ê·¸ê²ë¤(ê²°ê³¼ íë¤)ì ëê° ê°ê°ì eager ì½ë ì
íì¹ì ëí´ ì¤ë³µë¤ì í¬í¨íë¯ë¡ ë§ì íë¤ì´ ë¹ì ì´ ê¸°ëíë ê²ì´ ìëë¤. <literal>fetch</literal>ë í¹ë³í ì©ëì <literal>with</literal> ì¡°ê±´ê³¼ë í¨ê» ì¬ì©ë ì ìë¤.í ê°ì ì§ì ë´ì íë ì´ìì ì½ë ì
ì ì¡°ì¸ íì¹ìì¼ ì¹´í°ì ¼ ê³±ì ìì±ìí¤ë ê²ì´ ê°ë¥íë°, ì´ ê²½ì°ì 주ìíë¼. ë¤ì¤ ì½ë ì
roleë¤ì ì¡°ì¸ íì¹ìí¤ë ê²ì ëí ëëë¡ bag 매íë¤ì ëí´ ì!
ê¸°ì¹ ìì ê²°ê³¼ë¤ì ê°ì ¸ë¤ì£¼ê¸° ë문ì, ë¹ì ì´ ì´ ê²½ì°ì ë¹ì ì ì§ìë¤ì ì²ë°©íë ë°©ë²ì ëí´ ì£¼ìíë¼. ë§ì§ë§ì¼ë¡ <literal>full join fetch</literal>ì <literal>right join fetch</literal>ë ìë¯¸ê° ìë¤."
+
+#: index.docbook:172
+msgid "If you are using property-level lazy fetching (with bytecode instrumentation), it is possible to force Hibernate to fetch the lazy properties immediately (in the first query) using <literal>fetch all properties</literal>."
+msgstr "ë§ì¼ ë¹ì ì´ (ë°ì´í¸ì½ë ë°©í¸ì¼ë¡) property-ë 벨 lazy íì¹ì ì¬ì©í ê²½ì°, Hibernateë¡ íì¬ê¸ <literal>fetch all properties</literal>를 ì¬ì©íì¬ (첫 ë²ì§¸ ì§ììì) lazy íë¡í¼í°ë¤ì ì¦ì íì¹íëë¡ ê°ì ìí¤ë ê²ì´ ê°ë¥íë¤."
+
+#: index.docbook:178
+msgid "<![CDATA[from Document fetch all properties order by name]]>"
+msgstr "<![CDATA[from Document fetch all properties order by name]]>"
+
+#: index.docbook:179
+msgid "<![CDATA[from Document doc fetch all properties where lower(doc.name) like '%cats%']]>"
+msgstr "<![CDATA[from Document doc fetch all properties where lower(doc.name) like '%cats%']]>"
+
+#: index.docbook:184
+msgid "Forms of join syntax"
+msgstr "join 구문ì íìë¤"
+
+#: index.docbook:186
+msgid "HQL supports two forms of association joining: <literal>implicit</literal> and <literal>explicit</literal>."
+msgstr "HQLì ë ê°ì§ íìì ì°ê´ ì¡°ì¸ì ì§ìíë¤: <literal>ì묵ì </literal> ê·¸ë¦¬ê³ <literal>ëª
ìì </literal>."
+
+#: index.docbook:190
+msgid "The queries shown in the previous section all use the <literal>explicit</literal> form where the join keyword is explicitly used in the from clause. This is the recommended form."
+msgstr "ìì ì ìì ë³´ì¬ì§ ì§ìë¤ì 모ë join í¤ìëê° from ì ë´ì ëª
ìì ì¼ë¡ ì¬ì©ëë <literal>ëª
ìì ì¸</literal> íìì ì¬ì©íë¤. ì´ê²ì ê¶ì¥ëë íìì´ë¤."
+
+#: index.docbook:195
+msgid "The <literal>implicit</literal> form does not use the join keyword. Instead, the associations are \"dereferenced\" using dot-notation. <literal>implicit</literal> joins can appear in any of the HQL clauses. <literal>implicit</literal> join result in inner joins in the resulting SQL statement."
+msgstr "<literal>í¨ì¶ì ì¸</literal> íìì join í¤ìë를 ì¬ì©íì§ ìëë¤. ëì ì, ì°ê´ë¤ì dot(.) í기를 ì¬ì©íì¬ \"dot-참조ëë¤(dereferenced)\". <literal>í¨ì¶ì ì¸</literal> ì¡°ì¸ë¤ì ììì HQL ì ë¤ë´ì ëíë ì ìë¤. <literal>í¨ì¶ì ì¸</literal> joinì ê²°ê³¼ëë SQL 문ì¥ìì inner joinì¼ë¡ ê·ê²°ëë¤."
+
+#: index.docbook:202
+msgid "<![CDATA[from Cat as cat where cat.mate.name like '%s%']]>"
+msgstr "<![CDATA[from Cat as cat where cat.mate.name like '%s%']]>"
+
+#: index.docbook:206
+msgid "Refering to identifier property"
+msgstr "ìë³ì ìì± ì°¸ì¡°í기"
+
+#: index.docbook:208
+msgid "There are, generally speaking, 2 ways to refer to an entity's identifier property:"
+msgstr "ê°ëµì ì¼ë¡ ë§íìë©´, ìí°í°ì ìë³ì ìì±ì 참조íë 2ê°ì§ ë°©ë²ë¤ì´ ì¡´ì¬íë¤:"
+
+#: index.docbook:213
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the identifier property of an entity <emphasis>provided that entity does not define a non-identifier property named id</emphasis>."
+msgstr "<emphasis>ìí°í°ê° idë¡ ëª
ëª
ë ë¹ìë³ì ìì±ì ì ìíì§ ìëë¤ê³ ê°ì íë©´</emphasis> í¹ë³í ìì±(ì문ì) <literal>id</literal>ê° ìí°í°ì ìë³ì ìì±ì 참조íëë° ì¬ì©ë ì ìë¤."
+
+#: index.docbook:220
+msgid "If the entity defines a named identifier property, you may use that property name."
+msgstr "ë§ì¼ ê·¸ ìí°í°ê° ëª
ëª
ë ìë³ì ìì±ì ì ìíë ê²½ì°, ë¹ì ì ê·¸ ìì± ì´ë¦ì ì¬ì©í ìë ìë¤."
+
+#: index.docbook:226
+msgid "References to composite identifier properties follow the same naming rules. If the entity has a non-identifier property named id, the composite identifier property can only be referenced by its defined named; otherwise, the special <literal>id</literal> property can be used to rerference the identifier property."
+msgstr "composite ìë³ì ìì±ë¤ì ëí 참조ë¤ì ëì¼í ë¤ì´ë° ê·ì¹ë¤ì ë°ë¥¸ë¤. ë§ì¼ ê·¸ ìí°í°ê° idë¡ ëª
ëª
ë ë¹ìë³ì를 ê°ê³ ìì ê²½ì°, composite ìì±ì ì¤ì§ ê·¸ê²ì ì ìë ëª
ëª
ì ìí´ ì°¸ì¡°ë ì ìë¤; ê·¸ë°ì ê²½ì° í¹ë³í <literal>id</literal> ìì±ì´ ìë³ì ìì±ì 참조íëë° ì¬ì©ë ì ìë¤."
+
+#: index.docbook:233
+msgid "Note: this has changed significantly starting in version 3.2.2. In previous versions, <literal>id</literal> <emphasis>always</emphasis> referred to the identifier property no matter what its actual name. A ramification of that decision was that non-identifier properties named <literal>id</literal> could never be referenced in Hibernate queries."
+msgstr "ë
¸í¸: ì´ê²ì ë²ì 3.2.2ìì ììë ë í격íê² ë³ê²½ëìë¤. ì´ì ë²ì ë¤ìì, <literal>id</literal>ë <emphasis>íì</emphasis> ê·¸ê²ì ì¤ì ì´ë¦ì ê´ê³ìì´ ìë³ì ìì±ì 참조íë¤. ê·¸ ê²°ì ì ë¶ê¸°ì ì <literal>id</literal>ë¡ ëª
ëª
ë ë¹ìë³ì ìì±ë¤ì´ Hibernate ì§ìë¤ ë´ìì ê²°ì½ ì°¸ì¡°ë ì ììë¤ë ì ì´ìë¤."
+
+#: index.docbook:242
+msgid "The select clause"
+msgstr "select ì "
+
+#: index.docbook:244
+msgid "The <literal>select</literal> clause picks which objects and properties to return in the query result set. Consider:"
+msgstr "<literal>select</literal> ì ì ì§ì ê²°ê³¼ ì
ìì ë°íí ê°ì²´ë¤ê³¼ íë¡í¼í°ë¤ì´ ì´ë ê²ì¸ì§ë¥¼ ê³¨ë¼ ë´ëë¡ ê°ì íë¤. ë¤ìì ê²í íì:"
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[select mate\n"
+ "from Cat as cat\n"
+ " inner join cat.mate as mate]]>"
+msgstr ""
+ "<![CDATA[select mate \n"
+ "from Cat as cat \n"
+ " inner join cat.mate as mate]]>"
+
+#: index.docbook:251
+msgid "The query will select <literal>mate</literal>s of other <literal>Cat</literal>s. Actually, you may express this query more compactly as:"
+msgstr "ì§ìë ë¤ë¥¸ <literal>Cat</literal>ë¤ì <literal>mate</literal>ë¤ì select í ê²ì´ë¤. ì¤ì ë¡ ë¹ì ì ì´ ì§ìë¤ì ë¤ìê³¼ ê°ì´ ë³´ë¤ ì¶ì½íì¼ë¡ ííí ìë ìë¤:"
+
+#: index.docbook:256
+msgid "<![CDATA[select cat.mate from Cat cat]]>"
+msgstr "<![CDATA[select cat.mate from Cat cat]]>"
+
+#: index.docbook:258
+msgid "Queries may return properties of any value type including properties of component type:"
+msgstr "ì§ìë¤ì ì»´í¬ëí¸ íì
ì íë¡í¼í°ë¤ì í¬í¨íë ììì ê° íì
ì íë¡í¼í°ë¤ì ë°íí ìë ìë¤:"
+
+#: index.docbook:262
+msgid ""
+ "<![CDATA[select cat.name from DomesticCat cat\n"
+ "where cat.name like 'fri%']]>"
+msgstr ""
+ "<![CDATA[select cat.name from DomesticCat cat\n"
+ "where cat.name like 'fri%']]>"
+
+#: index.docbook:264
+msgid "<![CDATA[select cust.name.firstName from Customer as cust]]>"
+msgstr "<![CDATA[select cust.name.firstName from Customer as cust]]>"
+
+#: index.docbook:266
+msgid "Queries may return multiple objects and/or properties as an array of type <literal>Object[]</literal>,"
+msgstr "<literal>Family</literal> í´ëì¤ê° ì ë¹í ìì±ì를 ê°ê³ ììì ê°ì íë©´, ì§ìë¤ì ì¬ë¬ ê°ì²´ë¤ ê·¸ë¦¬ê³ /ëë íë¡í¼í°ë¤ì <literal>Object[]</literal> íì
ì ë°°ì´ë¡ì,"
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[select mother, offspr, mate.name\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr ""
+ "<![CDATA[select mother, offspr, mate.name \n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+
+#: index.docbook:273
+msgid "or as a <literal>List</literal>,"
+msgstr "ëë <literal>List</literal>ë¡ì,"
+
+#: index.docbook:277
+msgid ""
+ "<![CDATA[select new list(mother, offspr, mate.name)\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr ""
+ "<![CDATA[select new list(mother, offspr, mate.name)\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+
+#: index.docbook:279
+msgid "or as an actual typesafe Java object,"
+msgstr "ëë ì¤ì typesafe ìë° ê°ì²´ë¡ì,"
+
+#: index.docbook:283
+msgid ""
+ "<![CDATA[select new Family(mother, mate, offspr)\n"
+ "from DomesticCat as mother\n"
+ " join mother.mate as mate\n"
+ " left join mother.kittens as offspr]]>"
+msgstr ""
+ "<![CDATA[select new Family(mother, mate, offspr)\n"
+ "from DomesticCat as mother\n"
+ " join mother.mate as mate\n"
+ " left join mother.kittens as offspr]]>"
+
+#: index.docbook:285
+msgid "assuming that the class <literal>Family</literal> has an appropriate constructor."
+msgstr "ë°íí ìë ìë¤."
+
+#: index.docbook:289
+msgid "You may assign aliases to selected expressions using <literal>as</literal>:"
+msgstr "ë¹ì ì <literal>as</literal>를 ì¬ì©íì¬ selectëë ííìë¤ì aliasë¤ì í ë¹í ì ìë¤:"
+
+#: index.docbook:293
+msgid ""
+ "<![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n\n"
+ "from Cat cat]]>"
+msgstr ""
+ "<![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n\n"
+ "from Cat cat]]>"
+
+#: index.docbook:295
+msgid "This is most useful when used together with <literal>select new map</literal>:"
+msgstr "ë¤ìì <literal>select new map</literal>ê³¼ í¨ê» ì¬ì©ë ë ê°ì¥ ì ì©íë¤:"
+
+#: index.docbook:299
+msgid ""
+ "<![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )\n"
+ "from Cat cat]]>"
+msgstr ""
+ "<![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )\n"
+ "from Cat cat]]>"
+
+#: index.docbook:301
+msgid "This query returns a <literal>Map</literal> from aliases to selected values."
+msgstr "ì´ ì§ìë selectë ê°ë¤ì ëí aliasë¡ë¶í° í ê°ì <literal>Map</literal>ì ë°ííë¤."
+
+#: index.docbook:308
+msgid "Aggregate functions"
+msgstr "ì§ê³ í¨ìë¤"
+
+#: index.docbook:310
+msgid "HQL queries may even return the results of aggregate functions on properties:"
+msgstr "HQL ì§ìë¤ì íë¡í¼í°ë¤ì ëí ì§ê³(aggregate) í¨ìë¤ì ê²°ê³¼ë¤ì ë°íí ìë ìë¤:"
+
+#: index.docbook:314
+msgid ""
+ "<![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)\n"
+ "from Cat cat]]>"
+msgstr ""
+ "<![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)\n"
+ "from Cat cat]]>"
+
+#: index.docbook:325
+msgid "The supported aggregate functions are"
+msgstr "ì§ìëë ì§ê³ í¨ìë¤ì ë¤ìê³¼ ê°ë¤"
+
+#: index.docbook:332
+msgid "avg(...), sum(...), min(...), max(...)"
+msgstr "avg(...), sum(...), min(...), max(...)"
+
+#: index.docbook:337
+msgid "count(*)"
+msgstr "count(*)"
+
+#: index.docbook:342
+msgid "count(...), count(distinct ...), count(all...)"
+msgstr "count(...), count(distinct ...), count(all...)"
+
+#: index.docbook:347
+msgid "You may use arithmetic operators, concatenation, and recognized SQL functions in the select clause:"
+msgstr "ë¹ì ì select ì ìì ì°ì ì°ì°ìë¤, ì°ê²° ì°ì°ì, ê·¸ë¦¬ê³ ì¸ì§ë SQL í¨ìë¤ì ì¬ì©í ì ìë¤:"
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[select cat.weight + sum(kitten.weight)\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.weight]]>"
+msgstr ""
+ "<![CDATA[select cat.weight + sum(kitten.weight) \n"
+ "from Cat cat \n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.weight]]>"
+
+#: index.docbook:354
+msgid "<![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]>"
+msgstr "<![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]>"
+
+#: index.docbook:356
+msgid "The <literal>distinct</literal> and <literal>all</literal> keywords may be used and have the same semantics as in SQL."
+msgstr "<literal>distinct</literal> í¤ìëì all <literal>all</literal>ê° ì¬ì©ë ì ìê³ SQLì ê²½ì°ì ëì¼í ì미를 ê°ëë¤."
+
+#: index.docbook:361
+msgid ""
+ "<![CDATA[select distinct cat.name from Cat cat\n"
+ "\n"
+ "select count(distinct cat.name), count(cat) from Cat cat]]>"
+msgstr ""
+ "<![CDATA[select distinct cat.name from Cat cat\n"
+ "\n"
+ "select count(distinct cat.name), count(cat) from Cat cat]]>"
+
+#: index.docbook:366
+msgid "Polymorphic queries"
+msgstr "Polymorphic(ë¤íì±) ì§ìë¤"
+
+#: index.docbook:368
+msgid "A query like:"
+msgstr "ë¤ìê³¼ ê°ì ì§ì:"
+
+#: index.docbook:374
+msgid "returns instances not only of <literal>Cat</literal>, but also of subclasses like <literal>DomesticCat</literal>. Hibernate queries may name <emphasis>any</emphasis> Java class or interface in the <literal>from</literal> clause. The query will return instances of all persistent classes that extend that class or implement the interface. The following query would return all persistent objects:"
+msgstr "ì <literal>Cat</literal>ì ì¸ì¤í´ì¤ë¤ ë¿ë§ ìëë¼, ëí <literal>DomesticCat</literal>ê³¼ ê°ì ìë¸í´ëì¤ë¤ ëí ë°ííë¤. Hibernate ì§ìë¤ì <literal>from</literal> ì ë´ì <emphasis>ììì</emphasis> ìë° í´ëì¤ë ì¸í°íì´ì¤ë¥¼ ëª
ëª
í ì ìë¤. ì§ìë ê·¸ í´ëì¤ë¥¼ íì¥íê±°ë ê·¸ ì¸í°íì´ì¤ë¥¼ 구ííë 모ë ìì í´ëì¤ë¤ì ì¸ì¤í´ì¤ë¤ì ë°íí ê²ì´ë¤. ë¤ì ì§ìë 모ë ìì ê°ì²´ë¤ì ë°íí ê²ì´ë¤:"
+
+#: index.docbook:382
+msgid "<![CDATA[from java.lang.Object o]]>"
+msgstr "<![CDATA[from java.lang.Object o]]>"
+
+#: index.docbook:384
+msgid "The interface <literal>Named</literal> might be implemented by various persistent classes:"
+msgstr "ì¸í°íì´ì¤ <literal>Named</literal>ë ì¬ë¬ ê°ì§ ìì í´ëì¤ë¤ì ìí´ êµ¬íë ìë ìë¤:"
+
+#: index.docbook:389
+msgid "<![CDATA[from Named n, Named m where n.name = m.name]]>"
+msgstr "<![CDATA[from Named n, Named m where n.name = m.name]]>"
+
+#: index.docbook:391
+msgid "Note that these last two queries will require more than one SQL <literal>SELECT</literal>. This means that the <literal>order by</literal> clause does not correctly order the whole result set. (It also means you can't call these queries using <literal>Query.scroll()</literal>.)"
+msgstr "ì´ë¤ ë§ì§ë§ ë ê°ì ì§ìë¤ì íë ì´ìì SQL <literal>SELECT</literal>를 íìë¡ í ê²ìì ë
¸í¸íë¼. ì´ê²ì <literal>order by</literal> ì ì´ ì ííê² ì ì²´ ê²°ê³¼ ì
ì ììì§ì°ì§ ììì ì미íë¤.(ê·¸ê²ì ëí ë¹ì ì´ <literal>Query.scroll()</literal>ì ì¬ì©íì¬ ì´ë¤ ì§ìë¤ì í¸ì¶í ì ììì ì미íë¤)."
+
+#: index.docbook:400
+msgid "The where clause"
+msgstr "where ì "
+
+#: index.docbook:402
+msgid "The <literal>where</literal> clause allows you to narrow the list of instances returned. If no alias exists, you may refer to properties by name:"
+msgstr "<literal>where</literal> ì ì ë°íë ì¸ì¤í´ì¤ë¤ì 목ë¡ì ì íìí¤ë ê²ì ë¹ì ìê² íì©í´ì¤ë¤. ë§ì¼ aliasê° ì¡´ì¬íì§ ìì ê²½ì°, ë¹ì ì ì´ë¦ì ìí´ íë¡í¼í°ë¤ì 참조í ìë ìë¤:"
+
+#: index.docbook:407
+msgid "<![CDATA[from Cat where name='Fritz']]>"
+msgstr "<![CDATA[from Cat where name='Fritz']]>"
+
+#: index.docbook:409
+msgid "If there is an alias, use a qualified property name:"
+msgstr "ë§ì¼ í ê°ì aliasê° ì¡´ì¬í ê²½ì°, íëì ììì´ê° ë¶ì íë¡í¼í° ì´ë¦ì ì¬ì©íë¼:"
+
+#: index.docbook:413
+msgid "<![CDATA[from Cat as cat where cat.name='Fritz']]>"
+msgstr "<![CDATA[from Cat as cat where cat.name='Fritz']]>"
+
+#: index.docbook:415
+msgid "returns instances of <literal>Cat</literal> named 'Fritz'."
+msgstr "ë 'Fritz'ë¡ ëª
ëª
ë <literal>Cat</literal>ì ì¸ì¤í´ì¤ë¤ì ë°ííë¤."
+
+#: index.docbook:419
+msgid ""
+ "<![CDATA[select foo\n"
+ "from Foo foo, Bar bar\n"
+ "where foo.startDate = bar.date]]>"
+msgstr ""
+ "<![CDATA[select foo \n"
+ "from Foo foo, Bar bar\n"
+ "where foo.startDate = bar.date]]>"
+
+#: index.docbook:421
+msgid "will return all instances of <literal>Foo</literal> for which there exists an instance of <literal>bar</literal> with a <literal>date</literal> property equal to the <literal>startDate</literal> property of the <literal>Foo</literal>. Compound path expressions make the <literal>where</literal> clause extremely powerful. Consider:"
+msgstr "ë <literal>Foo</literal>ì <literal>startDate</literal> íë¡í¼í°ì ëì¼í <literal>date</literal> íë¡í¼í°ë¥¼ ê°ì§ <literal>bar</literal>ì ì¸ì¤í´ì¤ê° ì¡´ì¬íë <literal>Foo</literal>ì 모ë ì¸ì¤í´ì¤ë¥¼ ë°íí ê²ì´ë¤. í©ì± ê²½ë¡ ííìë¤ì <literal>where</literal> ì ì ë§¤ì° ê°ë ¥íê² ë§ë¤ì´ì¤ë¤. ë¤ìì ê²í íì:"
+
+#: index.docbook:430
+msgid "<![CDATA[from Cat cat where cat.mate.name is not null]]>"
+msgstr "<![CDATA[from Cat cat where cat.mate.name is not null]]>"
+
+#: index.docbook:432
+msgid "This query translates to an SQL query with a table (inner) join. If you were to write something like"
+msgstr "ì´ ì§ìë í
ì´ë¸ (inner) joinì ê°ì§ SQL ì§ìë¡ ë²ìëë¤. ë§ì¼ ë¹ì ì´ ë¤ìê³¼ ê°ì ì´ë¤ ê²ì ìì±íë¤ë©´"
+
+#: index.docbook:437
+msgid ""
+ "<![CDATA[from Foo foo\n"
+ "where foo.bar.baz.customer.address.city is not null]]>"
+msgstr ""
+ "<![CDATA[from Foo foo \n"
+ "where foo.bar.baz.customer.address.city is not null]]>"
+
+#: index.docbook:439
+msgid "you would end up with a query that would require four table joins in SQL."
+msgstr "ë¹ì ì SQLìì ë¤ ê°ì í
ì´ë¸ joinë¤ì íìë¡ íë íëì ì§ìë¡ ëë¼ ê²ì´ë¤."
+
+#: index.docbook:443
+msgid "The <literal>=</literal> operator may be used to compare not only properties, but also instances:"
+msgstr "<literal>=</literal> ì°ì°ìë íë¡í¼í°ë¤ ë¿ë§ ìëë¼ ëí ì¸ì¤í´ì¤ë¤ì ë¹êµíëë° ì¬ì©ë ì ìë¤:"
+
+#: index.docbook:448
+msgid "<![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]>"
+msgstr "<![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]>"
+
+#: index.docbook:450
+msgid ""
+ "<![CDATA[select cat, mate\n"
+ "from Cat cat, Cat mate\n"
+ "where cat.mate = mate]]>"
+msgstr ""
+ "<![CDATA[select cat, mate \n"
+ "from Cat cat, Cat mate\n"
+ "where cat.mate = mate]]>"
+
+#: index.docbook:452
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the unique identifier of an object. See <xref linkend=\"queryhql-identifier-property\"/> for more information."
+msgstr "í¹ë³í íë¡í¼í°(ì문ì) <literal>id</literal>ë ê°ì²´ì ì ì¼ ìë³ì를 참조íëë° ì¬ì©ë ì ìë¤. ì¶ê° ì ë³´ë <xref linkend=\"queryhql-identifier-property\"/>를 ë³´ë¼."
+
+#: index.docbook:458
+msgid ""
+ "<![CDATA[from Cat as cat where cat.id = 123\n"
+ "\n"
+ "from Cat as cat where cat.mate.id = 69]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat where cat.id = 123\n"
+ "\n"
+ "from Cat as cat where cat.mate.id = 69]]>"
+
+#: index.docbook:460
+msgid "The second query is efficient. No table join is required!"
+msgstr "ë ë²ì§¸ ì§ìê° í¨ì¨ì ì´ë¤. í
ì´ë¸ joinì´ íì ìë¤!"
+
+#: index.docbook:464
+msgid "Properties of composite identifiers may also be used. Suppose <literal>Person</literal> has a composite identifier consisting of <literal>country</literal> and <literal>medicareNumber</literal>. Again, see <xref linkend=\"queryhql-identifier-property\"/> for more information regarding referencing identifier properties."
+msgstr "composite(í©ì±) ìë³ìë¤ì íë¡í¼í°ë¤ì´ ëí ì¬ì©ë ì ìë¤. <literal>Person</literal>ì´ <literal>country</literal>ì <literal>medicareNumber</literal>ë¡ êµ¬ì±ë composite ìë³ì를 ê°ëë¤ê³ ê°ì íì. ìë³ì ìì±ë¤ì 참조íë ê²ê³¼ ê´ë ¨ë ì¶ê° ì ë³´ë ë¤ì <xref linkend=\"queryhql-identifier-property\"/>를 ë³´ë¼."
+
+#: index.docbook:471
+msgid ""
+ "<![CDATA[from bank.Person person\n"
+ "where person.id.country = 'AU'\n"
+ " and person.id.medicareNumber = 123456]]>"
+msgstr ""
+ "<![CDATA[from bank.Person person\n"
+ "where person.id.country = 'AU'\n"
+ " and person.id.medicareNumber = 123456]]>"
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[from bank.Account account\n"
+ "where account.owner.id.country = 'AU'\n"
+ " and account.owner.id.medicareNumber = 123456]]>"
+msgstr ""
+ "<![CDATA[from bank.Account account\n"
+ "where account.owner.id.country = 'AU'\n"
+ " and account.owner.id.medicareNumber = 123456]]>"
+
+#: index.docbook:475
+msgid "Once again, the second query requires no table join."
+msgstr "ë¤ì íë², ë ë²ì§¸ ì§ìë í
ì´ë¸ joinì íìë¡ íì§ ìëë¤."
+
+#: index.docbook:479
+msgid "Likewise, the special property <literal>class</literal> accesses the discriminator value of an instance in the case of polymorphic persistence. A Java class name embedded in the where clause will be translated to its discriminator value."
+msgstr "ë§ì°¬ê°ì§ë¡, í¹ë³í íë¡í¼í° <literal>class</literal>ë ë¤íì ì¸ ììì±(polymorphic persistence)ì ê²½ì°ì ì¸ì¤í´ì¤ì íë³ì(discriminator) ê°ì ì¡ì¸ì¤íë¤. where ì ìì ì½ì
ë Java í´ëì¤ ì´ë¦ì ê·¸ê²ì íë³ì(discriminator) ê°ì¼ë¡ ë³íë ê²ì´ë¤."
+
+#: index.docbook:485
+msgid "<![CDATA[from Cat cat where cat.class = DomesticCat]]>"
+msgstr "<![CDATA[from Cat cat where cat.class = DomesticCat]]>"
+
+#: index.docbook:487
+msgid "You may also use components or composite user types, or properties of said component types. See <xref linkend=\"queryhql-coomponents\"/> for more details."
+msgstr "ë¹ì ì ëí ì»´í¬ëí¸ë¤ ëë composite ì¬ì©ì íì
ë¤, ëë ëª
ëª
ë ì»´í¬ëí¸ íì
ë¤ì ìì±ë¤ì ì¬ì©í ìë ìë¤. ìì¸í ê²ì <xref linkend=\"queryhql-components\"/>를 ë³´ë¼."
+
+#: index.docbook:492
+msgid "An \"any\" type has the special properties <literal>id</literal> and <literal>class</literal>, allowing us to express a join in the following way (where <literal>AuditLog.item</literal> is a property mapped with <literal><any></literal>)."
+msgstr "\"ììì\" íì
ì ë¤ì ë°©ë²ì¼ë¡ joinì íííë ê²ì ì°ë¦¬ìê² íì©í´ì£¼ë, í¹ë³í íë¡í¼í°ë¤ <literal>id</literal>ì <literal>class</literal>를 ê°ëë¤(ì¬ê¸°ì <literal>AuditLog.item</literal>ì <literal><any></literal>ë¡ ë§¤íë íë¡í¼í°ì´ë¤)."
+
+#: index.docbook:498
+msgid ""
+ "<![CDATA[from AuditLog log, Payment payment\n"
+ "where log.item.class = 'Payment' and log.item.id = payment.id]]>"
+msgstr ""
+ "<![CDATA[from AuditLog log, Payment payment \n"
+ "where log.item.class = 'Payment' and log.item.id = payment.id]]>"
+
+#: index.docbook:500
+msgid "Notice that <literal>log.item.class</literal> and <literal>payment.class</literal> would refer to the values of completely different database columns in the above query."
+msgstr "<literal>log.item.class</literal>ì <literal>payment.class</literal>ë ìì ì§ì ë´ìì ìì í ë¤ë¥¸ ë°ì´í°ë² ì´ì¤ 컬ë¼ë¤ì ê°ë¤ì 참조í ê²ìì ë
¸í¸íë¼."
+
+#: index.docbook:508
+msgid "Expressions"
+msgstr "ííìë¤"
+
+#: index.docbook:510
+msgid "Expressions allowed in the <literal>where</literal> clause include most of the kind of things you could write in SQL:"
+msgstr "<literal>where</literal> ì ìì íì©ëë ííìë¤ì ë¹ì ì´ SQLë¡ ìì±í ì ìë ëë¶ë¶ì ì¢
ë¥ì ê²ë¤ì í¬í¨íë¤:"
+
+#: index.docbook:517
+msgid "mathematical operators <literal>+, -, *, /</literal>"
+msgstr "ì°ì ì°ì°ìë¤ <literal>+, -, *, /</literal>"
+
+#: index.docbook:522
+msgid "binary comparison operators <literal>=, >=, <=, <>, !=, like</literal>"
+msgstr "ë°ì´ë리 ë¹êµ ì°ì°ìë¤ <literal>=, >=, <=, <>, !=, like</literal>"
+
+#: index.docbook:527
+msgid "logical operations <literal>and, or, not</literal>"
+msgstr "ë
¼ë¦¬ ì°ì°ë¤ <literal>and, or, not</literal>"
+
+#: index.docbook:532
+msgid "Parentheses <literal>( )</literal>, indicating grouping"
+msgstr "그룹íì ëíë´ë ê´í¸ë¤ <literal>( )</literal>, indicating grouping"
+
+#: index.docbook:537
+msgid "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> and <literal>not member of</literal>"
+msgstr "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> and <literal>not member of</literal>"
+
+#: index.docbook:550
+msgid "\"Simple\" case, <literal>case ... when ... then ... else ... end</literal>, and \"searched\" case, <literal>case when ... then ... else ... end</literal>"
+msgstr "\"ê°ë¨í\" ê²½ì°, <literal>case ... when ... then ... else ... end</literal>, ê·¸ë¦¬ê³ \"ê²ìì¸\" ê²½ì°, <literal>case when ... then ... else ... end</literal>"
+
+#: index.docbook:556
+msgid "string concatenation <literal>...||...</literal> or <literal>concat(...,...)</literal>"
+msgstr "문ìì´ ì°ê²° <literal>...||...</literal> or <literal>concat(...,...)</literal>"
+
+#: index.docbook:561
+msgid "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+msgstr "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+
+#: index.docbook:567
+msgid "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+msgstr "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+
+#: index.docbook:574
+msgid "Any function or operator defined by EJB-QL 3.0: <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()</literal>"
+msgstr "EJB-QL 3.0ì ìí´ ì ìë ììì í¨ì ëë ì¤í¼ë ì´í°: <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()</literal>"
+
+#: index.docbook:580
+msgid "<literal>coalesce()</literal> and <literal>nullif()</literal>"
+msgstr "<literal>coalesce()</literal> ê·¸ë¦¬ê³ <literal>nullif()</literal>"
+
+#: index.docbook:585
+msgid "<literal>str()</literal> for converting numeric or temporal values to a readable string"
+msgstr "numeric ê°ë¤ì´ë temporal ê°ë¤ì ê°ë
ì± ìë 문ìì´ë¡ ë³íìí¤ë <literal>str()</literal>"
+
+#: index.docbook:591
+msgid "<literal>cast(... as ...)</literal>, where the second argument is the name of a Hibernate type, and <literal>extract(... from ...)</literal> if ANSI <literal>cast()</literal> and <literal>extract()</literal> is supported by the underlying database"
+msgstr "<literal>cast(... as ...)</literal>, ì¬ê¸°ì ëë² ì§¸ ìê·ë¨¼í¸ë Hibernate íì
ì ì´ë¦ì´ê³ , ANSI <literal>cast()</literal>ì <literal>extract()</literal>ê° ê¸°ë° ë°ì´í°ë² ì´ì¤ì ìí´ ì§ìë ê²½ì°ìë <literal>extract(... from ...)</literal>."
+
+#: index.docbook:599
+msgid "the HQL <literal>index()</literal> function, that applies to aliases of a joined indexed collection"
+msgstr "ì¡°ì¸ë ì¸ë±ì±ë ì½ë ì
ì aliasë¤ì ì ì©ëë, HQL <literal>index()</literal> í¨ì"
+
+#: index.docbook:605
+msgid "HQL functions that take collection-valued path expressions: <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal>, along with the special <literal>elements()</literal> and <literal>indices</literal> functions which may be quantified using <literal>some, all, exists, any, in</literal>."
+msgstr "ì½ë ì
ê°ì ê°ì§ ê²½ë¡ ííìë¤ì ì·¨íë HQL í¨ìë¤ : <literal>some, all, exists, any, in</literal>ì ì¬ì©íì¬ ì ëí ë ì ìë í¹ë³í <literal>elements()</literal>ì <literal>indices</literal> í¨ìë¤ê³¼ í¨ê» <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal>."
+
+#: index.docbook:613
+msgid "Any database-supported SQL scalar function like <literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>"
+msgstr "<literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>ê³¼ ê°ì´ ììì ë°ì´í°ë² ì´ì¤ ì§ì SQL ì¤ì¹¼ë¼ í¨ì"
+
+#: index.docbook:619
+msgid "JDBC-style positional parameters <literal>?</literal>"
+msgstr "JDBC-ì¤íì¼ ìì¹ íë¼ë¯¸í°ë¤ <literal>?</literal>"
+
+#: index.docbook:624
+msgid "named parameters <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+msgstr "ëª
ëª
ë íë¼ë¯¸í°ë¤ <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+
+#: index.docbook:629
+msgid "SQL literals <literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+msgstr "SQL 리í°ë´ë¤ <literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+
+#: index.docbook:635
+msgid "Java <literal>public static final</literal> constants <literal>eg.Color.TABBY</literal>"
+msgstr "Java <literal>public static final</literal> ììë¤. <literal>eg.Color.TABBY</literal>"
+
+#: index.docbook:641
+msgid "<literal>in</literal> and <literal>between</literal> may be used as follows:"
+msgstr "<literal>in</literal> ê³¼ <literal>between</literal>ì ë¤ìê³¼ ê°ì´ ì¬ì©ë ì ìë¤:"
+
+#: index.docbook:645
+msgid "<![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]>"
+
+#: index.docbook:647
+msgid "<![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]>"
+
+#: index.docbook:649
+msgid "and the negated forms may be written"
+msgstr "ê·¸ë¦¬ê³ ë¶ì íë¤ì ë¤ìê³¼ ê°ì´ ìì±ë ì ìë¤"
+
+#: index.docbook:653
+msgid "<![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]>"
+
+#: index.docbook:655
+msgid "<![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr "<![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]>"
+
+#: index.docbook:657
+msgid "Likewise, <literal>is null</literal> and <literal>is not null</literal> may be used to test for null values."
+msgstr "ë§ì°¬ê°ì§ë¡, <literal>is null</literal>ê³¼ <literal>is not null</literal>ì null ê°ë¤ì í
ì¤í¸íëë° ì¬ì©ë ì ìë¤."
+
+#: index.docbook:662
+msgid "Booleans may be easily used in expressions by declaring HQL query substitutions in Hibernate configuration:"
+msgstr "Booleanë¤ì Hibernate êµ¬ì± ë´ì HQL ì§ì ì¹íë¤ì ì ì¸í¨ì¼ë¡ì¨ ííìë¤ ë´ì ì½ê² ì¬ì©ë ì ìë¤:"
+
+#: index.docbook:667
+msgid "<![CDATA[<property name=\"hibernate.query.substitutions\">true 1, false 0</property>]]>"
+msgstr "<![CDATA[<property name=\"hibernate.query.substitutions\">true 1, false 0</property>]]>"
+
+#: index.docbook:669
+msgid "This will replace the keywords <literal>true</literal> and <literal>false</literal> with the literals <literal>1</literal> and <literal>0</literal> in the translated SQL from this HQL:"
+msgstr "ì´ê²ì í¤ìë <literal>true</literal>ì <literal>false</literal> í¤ìëë¤ì ì´ HQLë¡ë¶í° ë²ìë SQLìì 리í°ë´ <literal>1</literal>ê³¼ <literal>0</literal>ì¼ë¡ ëì²´ë ê²ì´ë¤:"
+
+#: index.docbook:674
+msgid "<![CDATA[from Cat cat where cat.alive = true]]>"
+msgstr "<![CDATA[from Cat cat where cat.alive = true]]>"
+
+#: index.docbook:676
+msgid "You may test the size of a collection with the special property <literal>size</literal>, or the special <literal>size()</literal> function."
+msgstr "ë¹ì ì í¹ë³í íë¡í¼í° <literal>size</literal>ë¡ì ëë í¹ë³í <literal>size()</literal> í¨ìë¡ì ì½ë ì
ì ì¬ì´ì¦ë¥¼ í
ì¤í¸í ì ìë¤."
+
+#: index.docbook:681
+msgid "<![CDATA[from Cat cat where cat.kittens.size > 0]]>"
+msgstr "<![CDATA[from Cat cat where cat.kittens.size > 0]]>"
+
+#: index.docbook:683
+msgid "<![CDATA[from Cat cat where size(cat.kittens) > 0]]>"
+msgstr "<![CDATA[from Cat cat where size(cat.kittens) > 0]]>"
+
+#: index.docbook:685
+msgid "For indexed collections, you may refer to the minimum and maximum indices using <literal>minindex</literal> and <literal>maxindex</literal> functions. Similarly, you may refer to the minimum and maximum elements of a collection of basic type using the <literal>minelement</literal> and <literal>maxelement</literal> functions."
+msgstr "ì¸ë±ì±ë ì½ë ì
ë¤ì ëí´, ë¹ì ì<literal>minindex</literal>ì <literal>maxindex</literal> í¨ìë¤ì ì¬ì©íì¬ ìµì ì¸ë±ì¤ê³¼ ìµë ì¸ë±ì¤ë¥¼ 참조í ì ìë¤. ì ì¬íê² ë¹ì ì <literal>minelement</literal>ì <literal>maxelement</literal> í¨ì를 ì¬ì©íì¬ ê¸°ë³¸ íì
ì ê°ì§ ì½ë ì
ì ìµì ìì ë° ìµë ìì를 참조í ì ìë¤."
+
+#: index.docbook:693
+msgid "<![CDATA[from Calendar cal where maxelement(cal.holidays) > current_date]]>"
+msgstr "<![CDATA[from Calendar cal where maxelement(cal.holidays) > current_date]]>"
+
+#: index.docbook:695
+msgid "<![CDATA[from Order order where maxindex(order.items) > 100]]>"
+msgstr "<![CDATA[from Order order where maxindex(order.items) > 100]]>"
+
+#: index.docbook:697
+msgid "<![CDATA[from Order order where minelement(order.items) > 10000]]>"
+msgstr "<![CDATA[from Order order where minelement(order.items) > 10000]]>"
+
+#: index.docbook:699
+msgid "The SQL functions <literal>any, some, all, exists, in</literal> are supported when passed the element or index set of a collection (<literal>elements</literal> and <literal>indices</literal> functions) or the result of a subquery (see below)."
+msgstr "SQL í¨ìë¤ <literal>any, some, all, exists, in</literal>ì ì½ë ì
ì ìì ëë ì¸ë±ì¤ ì¸í¸(<literal>elements</literal> í¨ìì <literal>indices</literal> í¨ì), ëë ìë¸ì§ìì 결과를 ì ë¬íì ë ì§ìëë¤(ìë를 ë³´ë¼)."
+
+#: index.docbook:705
+msgid ""
+ "<![CDATA[select mother from Cat as mother, Cat as kit\n"
+ "where kit in elements(foo.kittens)]]>"
+msgstr ""
+ "<![CDATA[select mother from Cat as mother, Cat as kit\n"
+ "where kit in elements(foo.kittens)]]>"
+
+#: index.docbook:707
+msgid ""
+ "<![CDATA[select p from NameList list, Person p\n"
+ "where p.name = some elements(list.names)]]>"
+msgstr ""
+ "<![CDATA[select p from NameList list, Person p\n"
+ "where p.name = some elements(list.names)]]>"
+
+#: index.docbook:709
+msgid "<![CDATA[from Cat cat where exists elements(cat.kittens)]]>"
+msgstr "<![CDATA[from Cat cat where exists elements(cat.kittens)]]>"
+
+#: index.docbook:711
+msgid "<![CDATA[from Player p where 3 > all elements(p.scores)]]>"
+msgstr "<![CDATA[from Player p where 3 > all elements(p.scores)]]>"
+
+#: index.docbook:713
+msgid "<![CDATA[from Show show where 'fizard' in indices(show.acts)]]>"
+msgstr "<![CDATA[from Show show where 'fizard' in indices(show.acts)]]>"
+
+#: index.docbook:715
+msgid "Note that these constructs - <literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal> - may only be used in the where clause in Hibernate3."
+msgstr "ì´ë¤ 구조체ë¤-<literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal>-ë Hibernate3ìì where ì ë´ììë§ ì¬ì©ë ê²ìì ë
¸í¸íë¼."
+
+#: index.docbook:722
+msgid "Elements of indexed collections (arrays, lists, maps) may be referred to by index (in a where clause only):"
+msgstr "ì¸ë±ì± ë ì½ë ì
ë¤ì ììë¤(ë°°ì´ë¤, 리ì¤í¸ë¤, mapë¤)ì ì¸ë±ì¤ì ìí´ ì°¸ì¡°ë ì ìë¤(where ì ìììë§):"
+
+#: index.docbook:727
+msgid "<![CDATA[from Order order where order.items[0].id = 1234]]>"
+msgstr "<![CDATA[from Order order where order.items[0].id = 1234]]>"
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[select person from Person person, Calendar calendar\n"
+ "where calendar.holidays['national day'] = person.birthDay\n"
+ " and person.nationality.calendar = calendar]]>"
+msgstr ""
+ "<![CDATA[select person from Person person, Calendar calendar\n"
+ "where calendar.holidays['national day'] = person.birthDay\n"
+ " and person.nationality.calendar = calendar]]>"
+
+#: index.docbook:731
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11]]>"
+msgstr ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11]]>"
+
+#: index.docbook:733
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ maxindex(order.items) ] = item and order.id = 11]]>"
+msgstr ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ maxindex(order.items) ] = item and order.id = 11]]>"
+
+#: index.docbook:735
+msgid "The expression inside <literal>[]</literal> may even be an arithmetic expression."
+msgstr "<literal>[]</literal> ë´ë¶ì ííìì ì°ì ííì¤ì¼ ì ìë¤."
+
+#: index.docbook:739
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ size(order.items) - 1 ] = item]]>"
+msgstr ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ size(order.items) - 1 ] = item]]>"
+
+#: index.docbook:741
+msgid "HQL also provides the built-in <literal>index()</literal> function, for elements of a one-to-many association or collection of values."
+msgstr "HQLì ëí one-to-many ì°ê´ ëë ê°ë¤ì ê°ì§ ì½ë ì
ì ììë¤ì ëí´ ë¯¸ë¦¬ ë§ë¤ì´ì§ <literal>index()</literal> í¨ì를 ì ê³µíë¤."
+
+#: index.docbook:746
+msgid ""
+ "<![CDATA[select item, index(item) from Order order\n"
+ " join order.items item\n"
+ "where index(item) < 5]]>"
+msgstr ""
+ "<![CDATA[select item, index(item) from Order order \n"
+ " join order.items item\n"
+ "where index(item) < 5]]>"
+
+#: index.docbook:748
+msgid "Scalar SQL functions supported by the underlying database may be used"
+msgstr "기본 ë°ì´í°ë² ì´ì¤ì ìí´ ì ê³µëë Scalar SQL í¨ìë¤ì´ ì¬ì©ë ìë ìë¤"
+
+#: index.docbook:752
+msgid "<![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]>"
+msgstr "<![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]>"
+
+#: index.docbook:754
+msgid "If you are not yet convinced by all this, think how much longer and less readable the following query would be in SQL:"
+msgstr "ë¹ì ì´ ìì§ ì´ ëª¨ë ê²ì ë©ëíì§ ëª»íë¤ë©´, SQL ë´ìì ë¤ì ì§ìê° ê°ë
ì±ì´ ì¼ë§ë ë§ê³ ì ìì§ë¥¼ ìê°í´ë³´ë¼:"
+
+#: index.docbook:759
+msgid ""
+ "<![CDATA[select cust\n"
+ "from Product prod,\n"
+ " Store store\n"
+ " inner join store.customers cust\n"
+ "where prod.name = 'widget'\n"
+ " and store.location.name in ( 'Melbourne', 'Sydney' )\n"
+ " and prod = all elements(cust.currentOrder.lineItems)]]>"
+msgstr ""
+ "<![CDATA[select cust\n"
+ "from Product prod,\n"
+ " Store store\n"
+ " inner join store.customers cust\n"
+ "where prod.name = 'widget'\n"
+ " and store.location.name in ( 'Melbourne', 'Sydney' )\n"
+ " and prod = all elements(cust.currentOrder.lineItems)]]>"
+
+#: index.docbook:761
+msgid "<emphasis>Hint:</emphasis> something like"
+msgstr "<emphasis>íí¸</emphasis> : ë¤ìê³¼ ê°ì ì´ë¤ ê²"
+
+#: index.docbook:765
+msgid ""
+ "<![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order\n"
+ "FROM customers cust,\n"
+ " stores store,\n"
+ " locations loc,\n"
+ " store_customers sc,\n"
+ " product prod\n"
+ "WHERE prod.name = 'widget'\n"
+ " AND store.loc_id = loc.id\n"
+ " AND loc.name IN ( 'Melbourne', 'Sydney' )\n"
+ " AND sc.store_id = store.id\n"
+ " AND sc.cust_id = cust.id\n"
+ " AND prod.id = ALL(\n"
+ " SELECT item.prod_id\n"
+ " FROM line_items item, orders o\n"
+ " WHERE item.order_id = o.id\n"
+ " AND cust.current_order = o.id\n"
+ " )]]>"
+msgstr ""
+ "<![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order\n"
+ "FROM customers cust,\n"
+ " stores store,\n"
+ " locations loc,\n"
+ " store_customers sc,\n"
+ " product prod\n"
+ "WHERE prod.name = 'widget'\n"
+ " AND store.loc_id = loc.id\n"
+ " AND loc.name IN ( 'Melbourne', 'Sydney' )\n"
+ " AND sc.store_id = store.id\n"
+ " AND sc.cust_id = cust.id\n"
+ " AND prod.id = ALL(\n"
+ " SELECT item.prod_id\n"
+ " FROM line_items item, orders o\n"
+ " WHERE item.order_id = o.id\n"
+ " AND cust.current_order = o.id\n"
+ " )]]>"
+
+#: index.docbook:770
+msgid "The order by clause"
+msgstr "order by ì "
+
+#: index.docbook:772
+msgid "The list returned by a query may be ordered by any property of a returned class or components:"
+msgstr "ì§ìì ìí´ ë°íë 리ì¤í¸ë ë°íë í´ëì¤ ëë ì»´í¬ëí¸ë¤ì íë¡í¼í°ì ìí´ ìì(ordering)ì§ìì§ ì ìë¤:"
+
+#: index.docbook:776
+msgid ""
+ "<![CDATA[from DomesticCat cat\n"
+ "order by cat.name asc, cat.weight desc, cat.birthdate]]>"
+msgstr ""
+ "<![CDATA[from DomesticCat cat\n"
+ "order by cat.name asc, cat.weight desc, cat.birthdate]]>"
+
+#: index.docbook:778
+msgid "The optional <literal>asc</literal> or <literal>desc</literal> indicate ascending or descending order respectively."
+msgstr "<literal>asc</literal> ìµì
ëë <literal>desc</literal> ìµì
ì ê°ê° ì¤ë¦ì°¨ì ëë ë´ë¦¼ì°¨ì ì ë ¬ì ëíë¸ë¤."
+
+#: index.docbook:785
+msgid "The group by clause"
+msgstr "group by ì "
+
+#: index.docbook:787
+msgid "A query that returns aggregate values may be grouped by any property of a returned class or components:"
+msgstr "aggregate ê°ë¤ì ë°ííë ì§ìë ë°íë í´ëì¤ë ì»´í¬ëí¸ë¤ì íë¡í¼í°ì ìí´ ê·¸ë£¹ì§ìì§ ì ìë¤:"
+
+#: index.docbook:791
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color]]>"
+msgstr ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat) \n"
+ "from Cat cat\n"
+ "group by cat.color]]>"
+
+#: index.docbook:793
+msgid ""
+ "<![CDATA[select foo.id, avg(name), max(name)\n"
+ "from Foo foo join foo.names name\n"
+ "group by foo.id]]>"
+msgstr ""
+ "<![CDATA[select foo.id, avg(name), max(name) \n"
+ "from Foo foo join foo.names name\n"
+ "group by foo.id]]>"
+
+#: index.docbook:795
+msgid "A <literal>having</literal> clause is also allowed."
+msgstr "ëí <literal>having</literal> ì ì´ íì©ëë¤."
+
+#: index.docbook:799
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color\n"
+ "having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]>"
+msgstr ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat) \n"
+ "from Cat cat\n"
+ "group by cat.color \n"
+ "having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]>"
+
+#: index.docbook:801
+msgid "SQL functions and aggregate functions are allowed in the <literal>having</literal> and <literal>order by</literal> clauses, if supported by the underlying database (eg. not in MySQL)."
+msgstr "SQL í¨ìë¤ê³¼ ì§ê³ í¨ìë¤ì´ 기본 ë°ì´í°ë² ì´ì¤ì ìí´ ì§ìë ê²½ì°(ì를 ë¤ì´ MySQLì ì§ìëì§ ìëë¤) <literal>having</literal> ì ê³¼ <literal>order by</literal> ì ìì íì©ëë¤."
+
+#: index.docbook:807
+msgid ""
+ "<![CDATA[select cat\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.name, cat.other, cat.properties\n"
+ "having avg(kitten.weight) > 100\n"
+ "order by count(kitten) asc, sum(kitten.weight) desc]]>"
+msgstr ""
+ "<![CDATA[select cat\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.name, cat.other, cat.properties\n"
+ "having avg(kitten.weight) > 100\n"
+ "order by count(kitten) asc, sum(kitten.weight) desc]]>"
+
+#: index.docbook:809
+msgid "Note that neither the <literal>group by</literal> clause nor the <literal>order by</literal> clause may contain arithmetic expressions. Also note that Hibernate currently does not expand a grouped entity, so you can't write <literal>group by cat</literal> if all properties of <literal>cat</literal> are non-aggregated. You have to list all non-aggregated properties explicitly."
+msgstr "<literal>group by</literal> ì ë <literal>order by</literal> ì ì´ë ê²ë ì°ì ííìë¤ì í¬í¨í ì ìë¤ë ì ì ë
¸í¸íë¼. ëí Hibernateë íì¬ ê·¸ë£¹ì§ìì§ ìí°í°ë¥¼ íì¥íì§ ììì ë§ì¼ <literal>cat</literal>ì 모ë ìì±ë¤ì´ ì§ê³ëì§ ìì ê²½ì°ì ë¹ì ì´ <literal>group by cat</literal>ì ì¸ì ììì ë
¸í¸íë¼. ë¹ì ì ëª
ìì ì¼ë¡ 모ë ì§ê³ëì§ ìë ìì±ë¤ì 리ì¤í¸í´ì¼ íë¤."
+
+#: index.docbook:821
+msgid "Subqueries"
+msgstr "ìë¸ì§ìë¤"
+
+#: index.docbook:823
+msgid "For databases that support subselects, Hibernate supports subqueries within queries. A subquery must be surrounded by parentheses (often by an SQL aggregate function call). Even correlated subqueries (subqueries that refer to an alias in the outer query) are allowed."
+msgstr "subselectë¤ì ì§ìíë ë°ì´í°ë² ì´ì¤ë¤ì ê²½ì°, Hibernateë ì§ìë¤ ë´ì ìë¸ì§ìë¤ì ì§ìíë¤. ìë¸ì§ìë ê´í¸ë¡ 묶ì¬ì ¸ì¼ íë¤(ì주 SQL ì§ê³í¨ì í¸ì¶ì ìí´). ì¬ì§ì´ ìë¡ ìê´ë ìë¸ì§ìë¤(ì¸ë¶ ì§ì ë´ìì alias를 참조íë ìë¸ì§ìë¤)ì´ íì©ëë¤."
+
+#: index.docbook:829
+msgid ""
+ "<![CDATA[from Cat as fatcat\n"
+ "where fatcat.weight > (\n"
+ " select avg(cat.weight) from DomesticCat cat\n"
+ ")]]>"
+msgstr ""
+ "<![CDATA[from Cat as fatcat\n"
+ "where fatcat.weight > (\n"
+ " select avg(cat.weight) from DomesticCat cat\n"
+ ")]]>"
+
+#: index.docbook:831
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name = some (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name = some (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+
+#: index.docbook:833
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not exists (\n"
+ " from Cat as mate where mate.mate = cat\n"
+ ")]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat\n"
+ "where not exists (\n"
+ " from Cat as mate where mate.mate = cat\n"
+ ")]]>"
+
+#: index.docbook:835
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name not in (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name not in (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+
+#: index.docbook:837
+msgid ""
+ "<![CDATA[select cat.id, (select max(kit.weight) from cat.kitten kit)\n"
+ "from Cat as cat]]>"
+msgstr ""
+ "<![CDATA[select cat.id, (select max(kit.weight) from cat.kitten kit)\n"
+ "from Cat as cat]]>"
+
+#: index.docbook:839
+msgid "Note that HQL subqueries may occur only in the select or where clauses."
+msgstr "HQL ìë¸ì§ìë¤ì´ select ì ëë where ì ë´ììë§ ì¼ì´ë ì ììì ë
¸í¸íë¼."
+
+#: index.docbook:843
+msgid "Note that subqueries can also utilize <literal>row value constructor</literal> syntax. See <xref linkend=\"queryhql-tuple\"/> for more details."
+msgstr "ìë¸ì§ìë¤ì ëí <literal>row value constructor</literal> 구문ì íì©í ì ìë¤. ìì¸í ê²ì <xref linkend=\"queryhql-tuple\"/>를 ë³´ë¼."
+
+#: index.docbook:851
+msgid "HQL examples"
+msgstr "HQL ìì ë¤"
+
+#: index.docbook:853
+msgid "Hibernate queries can be quite powerful and complex. In fact, the power of the query language is one of Hibernate's main selling points. Here are some example queries very similar to queries that I used on a recent project. Note that most queries you will write are much simpler than these!"
+msgstr "Hibernate ì§ìë¤ì ë§¤ì° ê°ë ¥íê³ ë³µì¡í ì ìë¤. ì¬ì¤, ì§ì ì¸ì´ì íì Hibernateì 주ì í매 í¬ì¸í¸ë¤ ì¤ íëì´ë¤. ë¤ìì ë´ê° ìµê·¼ì íë¡ì í¸ìì ì¬ì©íë ì§ìë¤ê³¼ ë§¤ì° ì ì¬í ëªëª ìì ì§ìë¤ì´ë¤. ë¹ì ì´ ìì±íê² ë ëë¶ë¶ì ì§ìë¤ì ì´ê²ë¤ë³´ë¤ í¨ì¬ ê°ë¨íë¤ë ì ì ë
¸í¸íë¼!"
+
+#: index.docbook:859
+msgid "The following query returns the order id, number of items and total value of the order for all unpaid orders for a particular customer and given minimum total value, ordering the results by total value. In determining the prices, it uses the current catalog. The resulting SQL query, against the <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal> and <literal>PRICE</literal> tables has four inner joins and an (uncorrelated) subselect."
+msgstr "ë¤ì ì§ìë í¹ì ê³ ê°ì ëí 모ë ì§ë¶ëì§ ìì 주문ë¤ì 주문 id, í목ë¤ì ê°ì, ê·¸ë¦¬ê³ ì£¼ë¬¸ì ì ì²´ í©ê³ê° ê·¸ë¦¬ê³ ì£¼ì´ì§ ìµì ì ì²´ í©ê³ë¥¼ ì ì²´ í©ê³ê°ì ë°ë¼ ê²°ê³¼ë¤ì ììì§ìì ë°ííë¤. ê°ê²© ê²°ì ì ìì´, ê·¸ê²ì íì¬ì ì¹´íë¡ì ì¬ì©íë¤. ê·ê²°ëë SQL ì§ìë <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal>, <literal>PRICE</literal> í
ì´ë¸ë¤ì ëí ë¤ ê°ì inner ì¡°ì¸ë¤ê³¼ í ê°ì(ìê´ì§ìì§ì§ ìì) subselect를 ê°ê³ ìë¤."
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog.effectiveDate < sysdate\n"
+ " and catalog.effectiveDate >= all (\n"
+ " select cat.effectiveDate\n"
+ " from Catalog as cat\n"
+ " where cat.effectiveDate < sysdate\n"
+ " )\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog.effectiveDate < sysdate\n"
+ " and catalog.effectiveDate >= all (\n"
+ " select cat.effectiveDate \n"
+ " from Catalog as cat\n"
+ " where cat.effectiveDate < sysdate\n"
+ " )\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+
+#: index.docbook:870
+msgid "What a monster! Actually, in real life, I'm not very keen on subqueries, so my query was really more like this:"
+msgstr "괴물 ê°ì ê²! ì¤ì ë¡ ì¤ ìíìì, ëë ìë¸ì§ìë¤ì ë§¤ì° ì¢ìíì§ ììì, ëì ì§ìë ì¤ì ë¡ ë¤ìê³¼ ê°ìë¤:"
+
+#: index.docbook:875
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog = :currentCatalog\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog = :currentCatalog\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+
+#: index.docbook:877
+msgid "The next query counts the number of payments in each status, excluding all payments in the <literal>AWAITING_APPROVAL</literal> status where the most recent status change was made by the current user. It translates to an SQL query with two inner joins and a correlated subselect against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> and <literal>PAYMENT_STATUS_CHANGE</literal> tables."
+msgstr "ë¤ì ì§ìë íì¬ ì¬ì©ìì ìí´ ê°ì¥ ìµê·¼ì ìí ë³ê²½ì´ íí´ì¡ë <literal>AWAITING_APPROVAL</literal> ìíì ìë 모ë ì§ë¶ë¤ì ì ì¸í, ê°ê°ì ìíì ìë ì§ë¶ë¤ì ê°ì를 ì¹´ì´í¸ íë¤. ê·¸ê²ì <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>PAYMENT_STATUS_CHANGE</literal> í
ì´ë¸ë¤ì ëí ë ê°ì inner ì¡°ì¸ë¤ê³¼ íëì ìê´ê´ê³ ì§ìì§ subselect를 ê°ì§ SQL ì§ìë¡ ë³íëë¤."
+
+#: index.docbook:885
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ " join payment.statusChanges as statusChange\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or (\n"
+ " statusChange.timeStamp = (\n"
+ " select max(change.timeStamp)\n"
+ " from PaymentStatusChange change\n"
+ " where change.payment = payment\n"
+ " )\n"
+ " and statusChange.user <> :currentUser\n"
+ " )\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr ""
+ "<![CDATA[select count(payment), status.name \n"
+ "from Payment as payment \n"
+ " join payment.currentStatus as status\n"
+ " join payment.statusChanges as statusChange\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or (\n"
+ " statusChange.timeStamp = ( \n"
+ " select max(change.timeStamp) \n"
+ " from PaymentStatusChange change \n"
+ " where change.payment = payment\n"
+ " )\n"
+ " and statusChange.user <> :currentUser\n"
+ " )\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+
+#: index.docbook:887
+msgid "If I would have mapped the <literal>statusChanges</literal> collection as a list, instead of a set, the query would have been much simpler to write."
+msgstr "ë§ì¼ ë´ê° <literal>statusChanges</literal> ì½ë ì
ì setê° ìë listë¡ ë§¤ííë¤ë©´, ê·¸ ì§ìë ìì±íê¸°ê° í¨ì¬ ë ê°ë¨íì ê²ì´ë¤."
+
+#: index.docbook:892
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr ""
+ "<![CDATA[select count(payment), status.name \n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+
+#: index.docbook:894
+msgid "The next query uses the MS SQL Server <literal>isNull()</literal> function to return all the accounts and unpaid payments for the organization to which the current user belongs. It translates to an SQL query with three inner joins, an outer join and a subselect against the <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> and <literal>ORG_USER</literal> tables."
+msgstr "ë¤ì ì§ìë íì¬ì ì¬ì©ìê° ìí´ ìë ì¡°ì§ì 모ë ê³ì ë¤ê³¼ ì§ë¶ëì§ ìì ì§ë¶ë¤ì ë°ííëë° MS SQL Server <literal>isNull()</literal> í¨ì를 ì¬ì©íë¤. ê·¸ê²ì <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal>, <literal>ORG_USER</literal> í
ì´ë¸ë¤ì ëí ì¸ ê°ì inner ì¡°ì¸ë¤, íëì outer ì¡°ì¸, ê·¸ë¦¬ê³ íëì subselect를 ê°ì§ í ê°ì SQL ì§ìë¡ ë²ìëë¤."
+
+#: index.docbook:903
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser in elements(account.holder.users)\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser in elements(account.holder.users)\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+
+#: index.docbook:905
+msgid "For some databases, we would need to do away with the (correlated) subselect."
+msgstr "ëªëª ë°ì´í°ë² ì´ì¤ë¤ì ê²½ì°, ì°ë¦¬ë (ìê´ê´ê³ ì§ìì§) subselect를 ìì¨ íìê° ìì ê²ì´ë¤."
+
+#: index.docbook:909
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " join account.holder.users as user\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser = user\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " join account.holder.users as user\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser = user\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+
+#: index.docbook:914
+msgid "Bulk update and delete"
+msgstr "ëë updateì delete"
+
+#: index.docbook:916
+msgid "HQL now supports <literal>update</literal>, <literal>delete</literal> and <literal>insert ... select ...</literal> statements. See <xref linkend=\"batch-direct\"/> for details."
+msgstr "HQLì ì´ì <literal>update</literal>, <literal>delete</literal> ê·¸ë¦¬ê³ <literal>insert ... select ...</literal> 문ì¥ë¤ì ì§ìíë¤. ìì¸í ê²ì <xref linkend=\"batch-direct\"/>를 ë³´ë¼."
+
+#: index.docbook:924
+msgid "Tips & Tricks"
+msgstr "íë¤ & í¸ë¦ë¤"
+
+#: index.docbook:926
+msgid "You can count the number of query results without actually returning them:"
+msgstr "ë¹ì ì ì¤ì ë¡ ì§ì ê²°ê³¼ë¤ì ë°ííì§ ìê³ ì ê·¸ê²ë¤(ì§ì ê²°ê³¼ë¤)ì ê°ì를 ì¹´ì´í¸í ì ìë¤:"
+
+#: index.docbook:930
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue()]]>"
+msgstr "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue()]]>"
+
+#: index.docbook:932
+msgid "To order a result by the size of a collection, use the following query:"
+msgstr "ì½ë ì
ì í¬ê¸°ì ë°ë¼ 결과를 ìì(ordering)ì§ì°ë ¤ë©´, ë¤ì ì§ì를 ì¬ì©íë¼:"
+
+#: index.docbook:936
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "order by count(msg)]]>"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr \n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "order by count(msg)]]>"
+
+#: index.docbook:938
+msgid "If your database supports subselects, you can place a condition upon selection size in the where clause of your query:"
+msgstr "ë§ì¼ ë¹ì ì ë°ì´í°ë² ì´ì¤ê° subselectë¤ì ì§ìí ê²½ì°, ë¹ì ì ë¹ì ì ì§ìì where ì ë´ì selection ì¬ì´ì¦ì ëí ì¡°ê±´ì ìì¹ì§ì¸ ì ìë¤:"
+
+#: index.docbook:943
+msgid "<![CDATA[from User usr where size(usr.messages) >= 1]]>"
+msgstr "<![CDATA[from User usr where size(usr.messages) >= 1]]>"
+
+#: index.docbook:945
+msgid "If your database doesn't support subselects, use the following query:"
+msgstr "ë§ì¼ ë¹ì ì ë°ì´í°ë² ì´ì¤ê° subselect를 ì§ìíì§ ìì ê²½ì°, ë¤ì ì§ì를 ì¬ì©íë¼:"
+
+#: index.docbook:949
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User usr.name\n"
+ " join usr.messages msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) >= 1]]>"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User usr.name\n"
+ " join usr.messages msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) >= 1]]>"
+
+#: index.docbook:951
+msgid "As this solution can't return a <literal>User</literal> with zero messages because of the inner join, the following form is also useful:"
+msgstr "ì´ í´ê²°ì±
ì´ inner ì¡°ì¸ ë문ì 0ê°ì ë©ìì§ë¥¼ ê°ì§ <literal>User</literal>를 ë°íí ì ìì¼ë¯ë¡, ë¤ì íìì´ ëí ì ì©íë¤:"
+
+#: index.docbook:956
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) = 0]]>"
+msgstr ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) = 0]]>"
+
+#: index.docbook:958
+msgid "Properties of a JavaBean can be bound to named query parameters:"
+msgstr "íëì JavaBeanì íë¡í¼í°ë¤ì ëª
ëª
ë ì§ì íë¼ë¯¸í°ë¤ì ë°ì¸ëë ì ìë¤:"
+
+#: index.docbook:962
+msgid ""
+ "<![CDATA[Query q = s.createQuery(\"from foo Foo as foo where foo.name=:name and foo.size=:size\");\n"
+ "q.setProperties(fooBean); // fooBean has getName() and getSize()\n"
+ "List foos = q.list();]]>"
+msgstr ""
+ "<![CDATA[Query q = s.createQuery(\"from foo Foo as foo where foo.name=:name and foo.size=:size\");\n"
+ "q.setProperties(fooBean); // fooBean has getName() and getSize()\n"
+ "List foos = q.list();]]>"
+
+#: index.docbook:964
+msgid "Collections are pageable by using the <literal>Query</literal> interface with a filter:"
+msgstr "ì½ë ì
ë¤ì íí°ë¥¼ ê°ì§ <literal>Query</literal> ì¸í°íì´ì¤ë¥¼ ì¬ì©íì¬ ìª¼ë§¤ê¹íë ê²ì´ ê°ë¥íë¤:"
+
+#: index.docbook:968
+msgid ""
+ "<![CDATA[Query q = s.createFilter( collection, \"\" ); // the trivial filter\n"
+ "q.setMaxResults(PAGE_SIZE);\n"
+ "q.setFirstResult(PAGE_SIZE * pageNumber);\n"
+ "List page = q.list();]]>"
+msgstr ""
+ "<![CDATA[Query q = s.createFilter( collection, \"\" ); // the trivial filter\n"
+ "q.setMaxResults(PAGE_SIZE);\n"
+ "q.setFirstResult(PAGE_SIZE * pageNumber);\n"
+ "List page = q.list();]]>"
+
+#: index.docbook:970
+msgid "Collection elements may be ordered or grouped using a query filter:"
+msgstr "ì½ë ì
ììë¤ì ì§ì íí°ë¥¼ ì¬ì©íì¬ ìì(ordering)ì§ìì§ê±°ë 그룹ì§ìì§ ì ë ìë¤:"
+
+#: index.docbook:974
+msgid ""
+ "<![CDATA[Collection orderedCollection = s.filter( collection, \"order by this.amount\" );\n"
+ "Collection counts = s.filter( collection, \"select this.type, count(this) group by this.type\" );]]>"
+msgstr ""
+ "<![CDATA[Collection orderedCollection = s.filter( collection, \"order by this.amount\" );\n"
+ "Collection counts = s.filter( collection, \"select this.type, count(this) group by this.type\" );]]>"
+
+#: index.docbook:976
+msgid "You can find the size of a collection without initializing it:"
+msgstr "ë¹ì ì ì½ë ì
ì ì´ê¸°í íì§ ìê³ ì ê·¸ê²(ì½ë ì
)ì í¬ê¸°ë¥¼ ì°¾ì ì ìë¤:"
+
+#: index.docbook:980
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue();]]>"
+msgstr "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue();]]>"
+
+#: index.docbook:985
+msgid "Components"
+msgstr "ì»´í¬ëí¸ë¤"
+
+#: index.docbook:987
+msgid "Components might be used in just about every way that simple value types can be used in HQL queries. They can appear in the <literal>select</literal> clause:"
+msgstr "ì»´í¬ëí¸ë¤ì ë¨ì§ ê°ë¨í ê° ì íë¤ì´ HQL ì§ìë¤ ë´ì ì¬ì©ë ì ìë 모ë ë°©ë²ì¼ë¡ ì¬ì©ë ì ìë¤. ê·¸ê²ë¤ì <literal>select</literal> ì ë´ì ëíë ì ìë¤."
+
+#: index.docbook:992, index.docbook:1038
+msgid "<![CDATA[select p.name from from Person p]]>"
+msgstr "<![CDATA[select p.name from from Person p]]>"
+
+#: index.docbook:993
+msgid "<![CDATA[select p.name.first from from Person p]]>"
+msgstr "<![CDATA[select p.name.first from from Person p]]>"
+
+#: index.docbook:995
+msgid "where the Person's name property is a component. Components can also be used in the <literal>where</literal> clause:"
+msgstr "ì¬ê¸°ì Personì name ìì±ì ì»´í¬ëí¸ì´ë¤. ì»´í¬ëí¸ë¤ì ëí <literal>where</literal> ì ë´ì ì¬ì©ë ì ìë¤:"
+
+#: index.docbook:1000
+msgid "<![CDATA[from from Person p where p.name = :name]]>"
+msgstr "<![CDATA[from from Person p where p.name = :name]]>"
+
+#: index.docbook:1001
+msgid "<![CDATA[from from Person p where p.name.first = :firstName]]>"
+msgstr "<![CDATA[from from Person p where p.name.first = :firstName]]>"
+
+#: index.docbook:1003
+msgid "Components can also be used in the <literal>order by</literal> clause:"
+msgstr "ì»´í¬ëí¸ë¤ì ëí <literal>order by</literal> ì ë´ì ì¬ì©ë ì ìë¤:"
+
+#: index.docbook:1007
+msgid "<![CDATA[from from Person p order by p.name]]>"
+msgstr "<![CDATA[from from Person p order by p.name]]>"
+
+#: index.docbook:1008
+msgid "<![CDATA[from from Person p order by p.name.first]]>"
+msgstr "<![CDATA[from from Person p order by p.name.first]]>"
+
+#: index.docbook:1010
+msgid "Another common use of components is in <xref linkend=\"queryhql-tuple\"/>row value constructors."
+msgstr "ì»´í¬ëí¸ë¤ì ëí ë ë¤ë¥¸ ê³µíµì ì¸ ì¬ì©ì <xref linkend=\"queryhql-tuple\"/>row value constructorsì ìë¤."
+
+#: index.docbook:1016
+msgid "Row value constructor syntax"
+msgstr "Row value constructor 구문"
+
+#: index.docbook:1018
+msgid "HQL supports the use of ANSI SQL <literal>row value constructor</literal> syntax (sometimes called <literal>tuple</literal> syntax), even though the underlying database may not support that notion. Here we are generally referring to multi-valued comparisons, typically associated with components. Consider an entity Person which defines a name component:"
+msgstr "HQLì ANSI SQL <literal>row value constructor</literal> 구문(ì¢
ì¢
<literal>tuple</literal> 구문ì´ë¼ ëª
ëª
ëë¤)ì ì¬ì©ì ì§ìíë¤. ë¹ë¡ ë°ì´í°ë² ì´ì¤ê° ê·¸ ê°ë
ì ì§ìíì§ ììì§ë¼ë ê·¸ë¬íë¤. ì¬ê¸°ì ì°ë¦¬ë ì íì ì¼ë¡ ì»´í¬ëí¸ë¤ê³¼ ì°ê´ëì´ ìë ë¤ì¤-ê° ë¹êµë¤ì ì¼ë°ì ì¼ë¡ ì¸ê¸íê³ ìë¤. name ì»´í¬ëí¸ë¥¼ ì ìíë Person ìí°í°ë¥¼ ê²í íì:"
+
+#: index.docbook:1025
+msgid "<![CDATA[from Person p where p.name.first='John' and p.name.last='Jingleheimer-Schmidt']]>"
+msgstr "<![CDATA[from Person p where p.name.first='John' and p.name.last='Jingleheimer-Schmidt']]>"
+
+#: index.docbook:1027
+msgid "That's valid syntax, although a little verbose. It be nice to make this a bit more concise and use <literal>row value constructor</literal> syntax:"
+msgstr "ë¹ë¡ ì½ê° ì¥í©ì¤ë½ì§ë§ ê·¸ê²ì ì í¨í 구문ì´ë¤. ì´ê²ì ì½ê° ë ê°ê²°íê² ë§ë¤ê³ <literal>row value constructor</literal> 구문ì ì¬ì©íë ê²ì´ ì¢ë¤:"
+
+#: index.docbook:1032
+msgid "<![CDATA[from Person p where p.name=('John', 'Jingleheimer-Schmidt')]]>"
+msgstr "<![CDATA[from Person p where p.name=('John', 'Jingleheimer-Schmidt')]]>"
+
+#: index.docbook:1034
+msgid "It can also be useful to specify this in the <literal>select</literal> clause:"
+msgstr "<literal>select</literal>ì ë´ì ì´ê²ì ì§ì íë ê²ì´ ëí ì ì©í ì ìë¤:"
+
+#: index.docbook:1040
+msgid "Another time using <literal>row value constructor</literal> syntax can be beneficial is when using subqueries needing to compare against multiple values:"
+msgstr "<literal>row value constructor</literal> 구문ì ì¬ì©íë ë ë¤ë¥¸ ê²½ì°ë ë¤ì¤ ê°ë¤ì ëí´ ë¹êµí íìê° ìë ìë¸ ì§ìë¤ì ì¬ì©í ëì´ë¤:"
+
+#: index.docbook:1045
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not ( cat.name, cat.color ) in (\n"
+ " select cat.name, cat.color from DomesticCat cat\n"
+ ")]]>"
+msgstr ""
+ "<![CDATA[from Cat as cat\n"
+ "where not ( cat.name, cat.color ) in (\n"
+ " select cat.name, cat.color from DomesticCat cat\n"
+ ")]]>"
+
+#: index.docbook:1047
+msgid "One thing to consider when deciding if you want to use this syntax is that the query will be dependent upon the ordering of the component sub-properties in the metadata."
+msgstr "ë§ì¼ ë¹ì ì´ ì´ êµ¬ë¬¸ì ì¬ì©íê³ ì ìí ê²½ì°ì ê³ ë ¤í´ì¼ í í ê°ì§ë ì§ìê° ë©íë°ì´í° ë´ì ìë ì»´í¬ëí¸ ìë¸-ìì±ë¤ì ììì ì¢
ìë ê²ì´ë¼ë ì ì´ë¤."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/query_sql.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/query_sql.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/query_sql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1044 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Native SQL"
+msgstr "Native SQL"
+
+#: index.docbook:7
+msgid "You may also express queries in the native SQL dialect of your database. This is useful if you want to utilize database specific features such as query hints or the <literal>CONNECT</literal> keyword in Oracle. It also provides a clean migration path from a direct SQL/JDBC based application to Hibernate."
+msgstr "ë¹ì ì ëí ë¹ì ì ë°ì´í°ë² ì´ì¤ì native SQL dialectë¡ ì§ìë¤ì ííí ìë ìë¤. ë¹ì ì´ ì¤ë¼í´ì ì§ì íí¸ë¤ ëë <literal>CONNECT</literal> í¤ìëì ê°ì ë°ì´í°ë² ì´ì¤ ì§ì ì ì¸ í¹ì§ë¤ì íì©íê³ ì ìí ê²½ì°ì ì´ê²ì´ ì ì©íë¤. ê·¸ê²ì ëí ì§ì ì ì¸ SQL/JDBC 기ë°ì ì´í리ì¼ì´ì
ì¼ë¡ë¶í° Hibernateë¡ì ë³´ë¤ ëª
ë£í ì´ì ê²½ë¡ë¥¼ ì ê³µíë¤."
+
+#: index.docbook:13
+msgid "Hibernate3 allows you to specify handwritten SQL (including stored procedures) for all create, update, delete, and load operations."
+msgstr "Hibernate3ì ëí 모ë create, update, delete, load ì¤í¼ë ì´ì
ë¤ì ëí´ (ë´ì¥ íë¡ìì ë¤ì í¬í¨íì¬) ìì¼ë¡ ìì±ë SQLì ì§ì íë ê²ì ë¹ì ìê² íì©í´ì¤ë¤."
+
+#: index.docbook:17
+msgid "Using a <literal>SQLQuery</literal>"
+msgstr "<literal>SQLQuery</literal> ì¬ì©í기"
+
+#: index.docbook:19
+msgid "Execution of native SQL queries is controlled via the <literal>SQLQuery</literal> interface, which is obtained by calling <literal>Session.createSQLQuery()</literal>. The following describes how to use this API for querying."
+msgstr "native SQL ì§ìë¤ì ì¤íì <literal>SQLQuery</literal> ì¸í°íì´ì¤ë¥¼ íµí´ ì ì´ëë©°, ê·¸ê²ì <literal>Session.createSQLQuery()</literal>ì í¸ì¶íì¬ íëëë¤. ë¤ìì ì´ API를 ì§ìì ì¬ì©íë ë°©ë²ì ì¤ëª
íë¤."
+
+#: index.docbook:25
+msgid "Scalar queries"
+msgstr "ì¤ì¹¼ë¼ ì§ìë¤"
+
+#: index.docbook:27
+msgid "The most basic SQL query is to get a list of scalars (values)."
+msgstr "ê°ì¥ 기본ì ì¸ SQL ì§ìë ì¤ì¹¼ë¼ë¤(ê°ë¤)ì 목ë¡ì ì»ë ê²ì´ë¤."
+
+#: index.docbook:30
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").list();\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").list();\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").list();\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").list();\n"
+ "]]>"
+
+#: index.docbook:32
+msgid "These will both return a List of Object arrays (Object[]) with scalar values for each column in the CATS table. Hibernate will use ResultSetMetadata to deduce the actual order and types of the returned scalar values."
+msgstr "ì´ê²ë¤ì ëë¤ CATS í
ì´ë¸ ë´ì ìë ê°ê°ì 컬ë¼ì ëí ì¤ì¹¼ë¼ ê°ë¤ì ê°ì§ Object ë°°ì´ë¤ì List를 ë°íí ê²ì´ë¤. Hibernateë ë°íëë ì¤ì¹¼ë¼ ê°ë¤ì ì¤ì ììì íì
ë¤ì ëì¶íëë° ResultSetMetadata를 ì¬ì©í ê²ì´ë¤."
+
+#: index.docbook:37
+msgid "To avoid the overhead of using <literal>ResultSetMetadata</literal> or simply to be more explicit in what is returned one can use <literal>addScalar()</literal>."
+msgstr "<literal>ResultSetMetadata</literal> ì¬ì©ì ì¤ë²í¤ë를 í¼íê±°ë ê°ë¨íê²ë ë°íëë ê²ì ë³´ë¤ ëª
ìì ì´ê²ë í기 ìí´ ì°ë¦¬ë <literal>addScalar()</literal>를 ì¬ì©í ì ìë¤."
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\", Hibernate.STRING)\n"
+ " .addScalar(\"BIRTHDATE\", Hibernate.DATE)\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\", Hibernate.STRING)\n"
+ " .addScalar(\"BIRTHDATE\", Hibernate.DATE)\n"
+ "]]>"
+
+#: index.docbook:43, index.docbook:89, index.docbook:170, index.docbook:321
+msgid "This query specified:"
+msgstr "ì´ ì§ìë ë¤ìì ì§ì íë¤:"
+
+#: index.docbook:47, index.docbook:93, index.docbook:325
+msgid "the SQL query string"
+msgstr "SQL ì§ì 문ìì´"
+
+#: index.docbook:51
+msgid "the columns and types to return"
+msgstr "ë°íí 컬ë¼ë¤ê³¼ íì
ë¤"
+
+#: index.docbook:55
+msgid "This will still return Object arrays, but now it will not use <literal>ResultSetMetdata</literal> but will instead explicitly get the ID, NAME and BIRTHDATE column as respectively a Long, String and a Short from the underlying resultset. This also means that only these three columns will be returned, even though the query is using <literal>*</literal> and could return more than the three listed columns."
+msgstr "ì´ê²ì ì¬ì í Object ë°°ì´ë¤ì ë°íí ê²ì´ì§ë§, ì´ì ê·¸ê²ì <literal>ResultSetMetdata</literal>를 ì¬ì©íì§ ìì ê²ì´ê³ ëì ì ê¸°ë° ê²°ê³¼ì
ì¼ë¡ë¶í° ID, NAME ê·¸ë¦¬ê³ BIRTHDATE 컬ë¼ì ê°ê° Long, String ê·¸ë¦¬ê³ Short íì
ì¼ë¡ ë°íí ê²ì´ë¤. ì¬ì§ì´ ê·¸ ì§ìê° <literal>*</literal>를 ì¬ì©íê³ ì¸ ê°ì ì´ê±°ë 컬ë¼ë¤ ë³´ë¤ ë ë§ì ê²ì ë°íí ì ììì§ë¼ë, ì´ê²ì ëí ì¤ì§ ì´ë¤ ì¸ ê°ì 컬ë¼ë¤ ë§ì´ ë°íë ê²ìì ì미íë¤."
+
+#: index.docbook:63
+msgid "It is possible to leave out the type information for all or some of the scalars."
+msgstr "ì¤ì¹¼ë¼ë¤ ì¤ ëªëª ëë ì ë¶ì ëí íì
ì 보를 ë¨ê²¨ëë ê²ì´ ê°ë¥íë¤."
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\")\n"
+ " .addScalar(\"BIRTHDATE\")\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\")\n"
+ " .addScalar(\"BIRTHDATE\")\n"
+ "]]>"
+
+#: index.docbook:68
+msgid "This is essentially the same query as before, but now <literal>ResultSetMetaData</literal> is used to decide the type of NAME and BIRTHDATE where as the type of ID is explicitly specified."
+msgstr "ì´ê²ì 본ì§ì ì¼ë¡ ìì ê²ê³¼ ëì¼í ì§ìì´ì§ë§, ì´ì <literal>ResultSetMetaData</literal>ë IDì íì
ì´ ëª
ìì ì¼ë¡ ì§ì ëì´ ìì¼ë¯ë¡ NAMEê³¼ BIRTHDATEì íì
ì ê²°ì íëë° ì¬ì©ëë¤."
+
+#: index.docbook:72
+msgid "How the java.sql.Types returned from ResultSetMetaData is mapped to Hibernate types is controlled by the Dialect. If a specific type is not mapped or does not result in the expected type it is possible to customize it via calls to <literal>registerHibernateType</literal> in the Dialect."
+msgstr "java.sql.Types returned from ResultSetMetaDataì´ Hibernate íì
ë¤ë¡ 매íëë ë°©ë²ì Dialectì ìí´ ì ì´ëë¤. ë§ì¼ í¹ì íì
ì´ ë§¤íëì§ ìê±°ë ììëë íì
ì¼ë¡ ê·ê²°ëì§ ìì ê²½ì°ì Dialect ë´ì ìë <literal>registerHibernateType</literal>ì ëí í¸ì¶ë¤ì íµí´ ê·¸ê²ì ë§ì¶¤í ìí¤ë ê²ì´ ê°ë¥íë¤."
+
+#: index.docbook:80
+msgid "Entity queries"
+msgstr "Entity ì§ìë¤"
+
+#: index.docbook:82
+msgid "The above queries were all about returning scalar values, basically returning the \"raw\" values from the resultset. The following shows how to get entity objects from a native sql query via <literal>addEntity()</literal>."
+msgstr "ìì ì§ìë¤ì ì¤ì¹¼ë¼ ê°ë¤ì ë°ííë ê², ê²°ê³¼ì
ë¤ë¡ë¶í° \"ìëì\" ê°ë¤ì 기본ì ì¼ë¡ ë°ííë ê²ì ëí ì ë¶ìë¤. ë¤ìì <literal>addEntity()</literal>를 íµí´ native sql ì§ìë¡ë¶í° ìí°í° ê°ì²´ë¤ì ì»ë ë°©ë²ì ë³´ì¬ì¤ë¤."
+
+#: index.docbook:87
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").addEntity(Cat.class);\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").addEntity(Cat.class);\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+
+#: index.docbook:97
+msgid "the entity returned by the query"
+msgstr "ê·¸ ì§ìì ìí´ ë°íëë ìí°í°"
+
+#: index.docbook:101
+msgid "Assuming that Cat is mapped as a class with the columns ID, NAME and BIRTHDATE the above queries will both return a List where each element is a Cat entity."
+msgstr "Catì´ ì»¬ë¼ ID, NAME ê·¸ë¦¬ê³ BIRTHDATEë¡ì 매íëë¤ê³ ê°ì íë©´, ìì ì§ìë¤ì ëë¤ ê°ê°ì ììê° íëì Cat ìí°í°ì¸ íëì List를 ë°íí ê²ì´ë¤."
+
+#: index.docbook:105
+msgid "If the entity is mapped with a <literal>many-to-one</literal> to another entity it is required to also return this when performing the native query, otherwise a database specific \"column not found\" error will occur. The additional columns will automatically be returned when using the * notation, but we prefer to be explicit as in the following example for a <literal>many-to-one</literal> to a <literal>Dog</literal>:"
+msgstr "ë§ì¼ ê·¸ ìí°í°ê° ë ë¤ë¥¸ ìí°í°ì ëí´ <literal>many-to-one</literal>ë¡ ë§¤íëì´ ìë¤ë©´ ëí native ì§ì를 ì¤íí ë ì´ê²ì ë°ííë ê²ì´ íìì ê³ , ê·¸ ë°ì ê²½ì° ë°ì´í°ë² ì´ì¤ ì§ì ì ì¸ \"컬ë¼ì´ ë°ê²¬ëì§ ìììµëë¤\" ì¤ë¥ê° ì¼ì´ë ê²ì´ë¤. ì¶ê°ì ì¸ ì»¬ë¼ì * í기를 ì¬ì©í ìëì ì¼ë¡ ë°íë ê²ì´ì§ë§, ì°ë¦¬ë ë¤ì <literal>Dog</literal>ì ëí <literal>many-to-one</literal> ìì ììì²ë¼ ëª
ìì ì¸ ê²ì ë ì í¸íë¤:"
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+
+#: index.docbook:115
+msgid "This will allow cat.getDog() to function properly."
+msgstr "ì´ê²ì cat.getDog()ì´ ê³ ì íê² ê¸°ë¥íë ê²ì íì©íë¤."
+
+#: index.docbook:119
+msgid "Handling associations and collections"
+msgstr "ì°ê´ë¤ê³¼ ì½ë ì
ë¤ì ì²ë¦¬í기"
+
+#: index.docbook:121
+msgid "It is possible to eagerly join in the <literal>Dog</literal> to avoid the possible extra roundtrip for initializing the proxy. This is done via the <literal>addJoin()</literal> method, which allows you to join in an association or collection."
+msgstr "íë½ì를 ì´ê¸°í ìí´ì ìì´ ê°ë¥í í¹ë³í ë¼ì´ëí¸ë¦½ì í¼í기 ìí´ì <literal>Dog</literal>ìì eagerly joinìí¤ë ê²ì´ ê°ì¼íë¤. ì´ê²ì <literal>addJoin()</literal> ë©ìë를 íµí´ íí´ì§ëë°, ê·¸ê²ì ì°ê´ì´ë ì½ë ì
ë´ìì ì¡°ì¸ìí¤ë ê²ì ë¹ì ìê² íì©í´ì¤ë¤."
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.ID, NAME, BIRTHDATE, DOG_ID, D_ID, D_NAME FROM CATS c, DOGS d WHERE c.DOG_ID = d.D_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dog\");\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.ID, NAME, BIRTHDATE, DOG_ID, D_ID, D_NAME FROM CATS c, DOGS d WHERE c.DOG_ID = d.D_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dog\");\n"
+ "]]>"
+
+#: index.docbook:128
+msgid "In this example the returned <literal>Cat</literal>'s will have their <literal>dog</literal> property fully initialized without any extra roundtrip to the database. Notice that we added a alias name (\"cat\") to be able to specify the target property path of the join. It is possible to do the same eager joining for collections, e.g. if the <literal>Cat</literal> had a one-to-many to <literal>Dog</literal> instead."
+msgstr "ì´ ìì ìì ë°íëë <literal>Cat</literal>ë¤ì ë°ì´í°ë² ì´ì¤ì ëí ììì í¹ë³í ë¼ì´ëí¬ë¦½ ìì´ ì ì²´ì ì¼ë¡ ì´ê¸°íë ê·¸ê²ë¤ì <literal>dog</literal> íë¡í¼í°ë¥¼ ê°ëë¤. ì°ë¦¬ê° joinì ëì íë¡í¼í° ê²½ë¡ë¥¼ ì§ì íë ê²ì ê°ë¥íëë¡ í기 ìí´ íëì alias ì´ë¦(\"cat\")ì ì¶ê°íìì 주ì§íë¼. ëì ì ì를 ë¤ì´ <literal>Cat</literal>ì´ <literal>Dog</literal>ì ëí´ one-to-many를 ê°ì§ ê²½ì°, ì½ë ì
ë¤ì ëí´ ëì¼í eager joiningì ííë ê²ì´ ê°ë¥íë¤."
+
+#: index.docbook:136
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, D_ID, D_NAME, CAT_ID FROM CATS c, DOGS d WHERE c.ID = d.CAT_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dogs\");\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, D_ID, D_NAME, CAT_ID FROM CATS c, DOGS d WHERE c.ID = d.CAT_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dogs\");\n"
+ "]]>"
+
+#: index.docbook:138
+msgid "At this stage we are reaching the limits of what is possible with native queries without starting to enhance the sql queries to make them usable in Hibernate; the problems starts to arise when returning multiple entities of the same type or when the default alias/column names are not enough."
+msgstr "ì´ ë¨ê³ìì ì°ë¦¬ë Hibernateìì native ì§ìë¤ì ì¬ì©ê°ë¥íëë¡ ë§ë¤ê¸° ìí´ sql ì§ìë¤ì ê°íìí¤ì§ë ê²ì ììíì§ ìê³ ìë native ì§ìë¤ë¡ì ê°ë¥í ê²ì íê³ì ëë¬íê³ ìë¤; 문ì ì ë¤ì ëì¼í íì
ì ì¬ë¬ ìí°í°ë¤ì ë°íí ë ëë ëí´í¸ alias/column ì´ë¦ë¤ì´ 충ë¶íì§ ìì ë ë°ìí기 ììíë¤."
+
+#: index.docbook:146
+msgid "Returning multiple entities"
+msgstr "ì¬ë¬ ê°ì ìí°í°ë¤ì ë°íí기"
+
+#: index.docbook:148
+msgid "Until now the result set column names are assumed to be the same as the column names specified in the mapping document. This can be problematic for SQL queries which join multiple tables, since the same column names may appear in more than one table."
+msgstr "ì§ê¸ê¹ì§ ê²°ê³¼ ì
ì»¬ë¼ ì´ë¦ë¤ì 매í 문ì ë´ì ì§ì ë ì»¬ë¼ ì´ë¦ë¤ê³¼ ëì¼íë¤ê³ ê°ì ëì´ ìë¤. ëì¼í 컬ë¼ì´ íë ì´ìì í
ì´ë¸ ë´ìì ëíë ì ì기 ë문ì, ì´ê²ì ì¬ë¬ ê°ì í
ì´ë¸ë¤ì ì¡°ì¸ìí¤ë SQL ì§ìë¤ì ëí´ ë¬¸ì ê° ë ì ìë¤."
+
+#: index.docbook:153
+msgid "Column alias injection is needed in the following query (which most likely will fail):"
+msgstr "ì»¬ë¼ alias 주ì
ì ë¤ì ì§ì(ìë§ ì¤í¨í ê²ì´ë¤)ìì íìíë¤:"
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.*, m.* FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.*, m.* FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+
+#: index.docbook:158
+msgid "The intention for this query is to return two Cat instances per row, a cat and its mother. This will fail since there is a conflict of names since they are mapped to the same column names and on some databases the returned column aliases will most likely be on the form \"c.ID\", \"c.NAME\", etc. which are not equal to the columns specificed in the mappings (\"ID\" and \"NAME\")."
+msgstr "ì´ ì§ìì 목ì ì ë¨ì í ë¹ ë ê°ì Cat ì¸ì¤í´ì¤ë¤, íëì cat ê·¸ë¦¬ê³ ê·¸ê²ì mother를 ë°ííë ê²ì´ë¤. ìëíë©´ ê·¸ê²ë¤ì´ ëì¼í ì»¬ë¼ ì´ë¦ë¤ë¡ 매íëì´ ì기 ë문ì ì´ê²ì ì¤í¨í ê²ì´ê³ ë°ì´ë² ì´ì¤ ììì ë°íë ì»¬ë¼ aliasë¤ì ìë§ ë§¤íë¤ ë´ì ì§ì ë 컬ë¼ë¤(\"ID\" ì \"NAME\")ê³¼ ê°ì§ ìì \"c.ID\", \"c.NAME\" ë±ì íìì¼ ê²ì´ë¤."
+
+#: index.docbook:165
+msgid "The following form is not vulnerable to column name duplication:"
+msgstr "ë¤ì íìì ì»¬ë¼ ì´ë¦ ì¤ë³µ ì·¨ì½ì ì ê°ì§ ìëë¤:"
+
+#: index.docbook:168
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+
+#: index.docbook:174
+msgid "the SQL query string, with placeholders for Hibernate to inject column aliases"
+msgstr "ì»¬ë¼ aliasë¤ì 주ì
í기 ìí Hibernateì© placeholderë¤ì ê°ì§ SQL ì§ì 문ìì´"
+
+#: index.docbook:179
+msgid "the entities returned by the query"
+msgstr "ê·¸ ì§ìì ìí´ ë°íëë ìí°í°ë¤"
+
+#: index.docbook:183
+msgid "The {cat.*} and {mother.*} notation used above is a shorthand for \"all properties\". Alternatively, you may list the columns explicity, but even in this case we let Hibernate inject the SQL column aliases for each property. The placeholder for a column alias is just the property name qualified by the table alias. In the following example, we retrieve Cats and their mothers from a different table (cat_log) to the one declared in the mapping metadata. Notice that we may even use the property aliases in the where clause if we like."
+msgstr "ìì ì¬ì©ë {cat.*} ê³¼ {mother.*} í기ë \"모ë íë¡í¼í°ë¤\"ì ëí ìëµì´ë¤. ë¤ë¥¸ ë°©ë²ì¼ë¡ ë¹ì ì 컬ë¼ë¤ì ëª
ìì ì¼ë¡ ì´ê±°í ìë ìì§ë§, ì´ ê²½ì°ì ì°ë¦¬ë Hibernateë¡ íì¬ê¸ SQL ì»¬ë¼ aliasë¤ì ê°ê°ì 컬ë¼ì 주ì
ìí¤ëë¡ ê°ì íë¤. ì»¬ë¼ alias를 ìí placeholderë ë¨ì§ ê·¸ í
ì´ë¸ aliasì ìí´ ììë íë¡í¼í° ì´ë¦ì´ë¤. ë¤ì ìì ìì, ì°ë¦¬ë ë¤ë¥¸ í
ì´ë¸(cat_log)ë¡ë¶í° 매í ë©íë°ì´í° ë´ì ì ì¸ë ê²ì¼ë¡ì Catë¤ê³¼ ê·¸ê²ë¤ì motherë¤ì ê²ìíë¤. ì°ë¦¬ë ì°ë¦¬ê° ì¢ë¤ë©´ ì¬ì§ì´ where ì ë´ì íë¡í¼í° alias를 ì¬ì©í ìë ììì 주ì§íë¼."
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[String sql = \"SELECT ID as {c.id}, NAME as {c.name}, \" + \n"
+ " \"BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} \" +\n"
+ " \"FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID\";\n"
+ "\n"
+ "List loggedCats = sess.createSQLQuery(sql)\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class).list()\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[String sql = \"SELECT ID as {c.id}, NAME as {c.name}, \" + \n"
+ " \"BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} \" +\n"
+ " \"FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID\";\n"
+ "\n"
+ "List loggedCats = sess.createSQLQuery(sql)\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class).list()\n"
+ "]]>"
+
+#: index.docbook:195
+msgid "Alias and property references"
+msgstr "alias 참조ì íë¡í¼í° 참조"
+
+#: index.docbook:197
+msgid "For most cases the above alias injection is needed, but for queries relating to more complex mappings like composite properties, inheritance discriminators, collections etc. there are some specific aliases to use to allow Hibernate to inject the proper aliases."
+msgstr "ëë¶ë¶ì ê²½ì°ì ìì alias 주ì
ì´ íìíì§ë§, composite íë¡í¼í°ë¤, ìì íë³ìë¤ (inheritance discriminators), ì½ë ì
ë±ê³¼ ê°ì ë³´ë¤ ë³µì¡í 매íë¤ê³¼ ê´ë ¨ë ì§ìë¤ì ê²½ì°ìë ê³ ì í aliasë¤ì 주ì
ìí¤ë ê²ì Hibernateìê² íì©íëë° ì¬ì©ë ëªëª í¹ë³í aliasë¤ì´ ì¡´ì¬íë¤."
+
+#: index.docbook:202
+msgid "The following table shows the different possibilities of using the alias injection. Note: the alias names in the result are examples, each alias will have a unique and probably different name when used."
+msgstr "ë¤ì í
ì´ë¸ì alias 주ì
ì ì¬ì©íë ë¤ë¥¸ ê°ë¥ì±ë¤ì ë³´ì¬ì¤ë¤. ë
¸í¸: ê²°ê³¼ ë´ì ìë alias ì´ë¦ë¤ì´ ìì ì´ë©°, ê°ê°ì aliasë ì¬ì©ë ë íëì ì ì¼í ì´ë¦ê³¼ ìë§ ë¤ë¥¸ ì´ë¦ì ê°ì§ ê²ì´ë¤."
+
+#: index.docbook:208
+msgid "Alias injection names"
+msgstr "alias 주ì
ì´ë¦ë¤"
+
+#: index.docbook:219
+msgid "Description"
+msgstr "<entry>ì¤ëª
</entry>"
+
+#: index.docbook:221
+msgid "Syntax"
+msgstr "<entry>구문</entry>"
+
+#: index.docbook:223
+msgid "Example"
+msgstr "<entry>ìì </entry>"
+
+#: index.docbook:229
+msgid "A simple property"
+msgstr "ê°ë¨í íë¡í¼í°"
+
+#: index.docbook:231
+msgid "{[aliasname].[propertyname]"
+msgstr "{[aliasname].[propertyname]"
+
+#: index.docbook:233
+msgid "A_NAME as {item.name}"
+msgstr "A_NAME as {item.name}"
+
+#: index.docbook:237
+msgid "A composite property"
+msgstr "composite íë¡í¼í°"
+
+#: index.docbook:239
+msgid "{[aliasname].[componentname].[propertyname]}"
+msgstr "{[aliasname].[componentname].[propertyname]}"
+
+#: index.docbook:241
+msgid "CURRENCY as {item.amount.currency}, VALUE as {item.amount.value}"
+msgstr "CURRENCY as {item.amount.currency}, VALUE as {item.amount.value}"
+
+#: index.docbook:246
+msgid "Discriminator of an entity"
+msgstr "ìí°í°ì íë³ì(Discriminator)"
+
+#: index.docbook:248
+msgid "{[aliasname].class}"
+msgstr "{[aliasname].class}"
+
+#: index.docbook:250
+msgid "DISC as {item.class}"
+msgstr "DISC as {item.class}"
+
+#: index.docbook:254
+msgid "All properties of an entity"
+msgstr "ìí°í°ì 모ë íë¡í¼í°ë¤"
+
+#: index.docbook:256, index.docbook:304
+msgid "{[aliasname].*}"
+msgstr "{[aliasname].*}"
+
+#: index.docbook:258
+msgid "{item.*}"
+msgstr "{item.*}"
+
+#: index.docbook:262
+msgid "A collection key"
+msgstr "ì½ë ì
í¤"
+
+#: index.docbook:264
+msgid "{[aliasname].key}"
+msgstr "{[aliasname].key}"
+
+#: index.docbook:266
+msgid "ORGID as {coll.key}"
+msgstr "ORGID as {coll.key}"
+
+#: index.docbook:270
+msgid "The id of an collection"
+msgstr "ì½ë ì
ì id"
+
+#: index.docbook:272
+msgid "{[aliasname].id}"
+msgstr "{[aliasname].id}"
+
+#: index.docbook:274
+msgid "EMPID as {coll.id}"
+msgstr "EMPID as {coll.id}"
+
+#: index.docbook:278
+msgid "The element of an collection"
+msgstr "ì½ë ì
ì ìì"
+
+#: index.docbook:280
+msgid "{[aliasname].element}"
+msgstr "{[aliasname].element}"
+
+#: index.docbook:282
+msgid "XID as {coll.element}"
+msgstr "XID as {coll.element}"
+
+#: index.docbook:286
+msgid "roperty of the element in the collection"
+msgstr "ì½ë ì
ë´ì ìë ììì íë¡í¼í°"
+
+#: index.docbook:288
+msgid "{[aliasname].element.[propertyname]}"
+msgstr "{[aliasname].element.[propertyname]}"
+
+#: index.docbook:290
+msgid "NAME as {coll.element.name}"
+msgstr "NAME as {coll.element.name}"
+
+#: index.docbook:294
+msgid "All properties of the element in the collection"
+msgstr "ì½ë ì
ë´ì ìë ììì 모ë íë¡í¼í°ë¤"
+
+#: index.docbook:296
+msgid "{[aliasname].element.*}"
+msgstr "{[aliasname].element.*}"
+
+#: index.docbook:298
+msgid "{coll.element.*}"
+msgstr "{coll.element.*}"
+
+#: index.docbook:302
+msgid "All properties of the the collection"
+msgstr "ì½ë ì
ì 모ë íë¡í¼í°ë¤"
+
+#: index.docbook:306
+msgid "{coll.*}"
+msgstr "{coll.*}"
+
+#: index.docbook:315
+msgid "Returning non-managed entities"
+msgstr "non-managed ìí°í°ë¤ì ë°íí기"
+
+#: index.docbook:317
+msgid "It is possible to apply a ResultTransformer to native sql queries. Allowing it to e.g. return non-managed entities."
+msgstr "native sql ì§ìì ResultTransformer를 ì ì©íë ê²ì´ ê°ë¥íë¤. ì를 ë¤ì´ non-managed ìí°í°ë¤ì ë°íí기 ìí´ ResultTransformer를 íì©íë ê²."
+
+#: index.docbook:319
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT NAME, BIRTHDATE FROM CATS\")\n"
+ " .setResultTransformer(Transformers.aliasToBean(CatDTO.class))]]>"
+msgstr ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT NAME, BIRTHDATE FROM CATS\")\n"
+ " .setResultTransformer(Transformers.aliasToBean(CatDTO.class))]]>"
+
+#: index.docbook:329
+msgid "a result transformer"
+msgstr "ê²°ê³¼ ë³íì(transformer)"
+
+#: index.docbook:333
+msgid "The above query will return a list of <literal>CatDTO</literal> which has been instantiated and injected the values of NAME and BIRTHNAME into its corresponding properties or fields."
+msgstr "ìì ì§ìë ì´ê¸°íëì´ ìê³ NAMEê³¼ BIRTHNAMEì ê°ë¤ì <literal>CatDTO</literal>ì ëìíë íë¡í¼í°ë¤ê³¼ íëë¤ ìì¼ë¡ 주ì
ìí¨ <literal>CatDTO</literal>ì 리ì¤í¸ë¥¼ ë°íí ê²ì´ë¤."
+
+#: index.docbook:340
+msgid "Handling inheritance"
+msgstr "ìì ì²ë¦¬í기"
+
+#: index.docbook:342
+msgid "Native sql queries which query for entities that is mapped as part of an inheritance must include all properties for the baseclass and all it subclasses."
+msgstr "ììì ë¶ë¶ì¼ë¡ì 매íëë ìí°í°ë¤ì ì§ìíë native sql ì§ìë¤ì baseclassì 모ë íë¡í¼í°ë¤ì í¬í¨í´ì¼ íê³ ê·¸ 모ë ê²ì´ ìë¸í´ëì¤í ëì´ì¼ íë¤."
+
+#: index.docbook:348
+msgid "Parameters"
+msgstr "íë¼ë¯¸í°ë¤"
+
+#: index.docbook:350
+msgid "Native sql queries support positional as well as named parameters:"
+msgstr "Native sql ì§ìë¤ì ìì¹ íë¼ë¯¸í°ë¤ ë¿ë§ ìëë¼ ëª
ëª
ë íë¼ë¯¸í°ë¤ì ì§ìíë¤:"
+
+#: index.docbook:353
+msgid ""
+ "<![CDATA[Query query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like ?\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(0, \"Pus%\").list();\n"
+ " \n"
+ "query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like :name\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(\"name\", \"Pus%\").list(); ]]>"
+msgstr ""
+ "<![CDATA[Query query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like ?\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(0, \"Pus%\").list();\n"
+ " \n"
+ "query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like :name\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(\"name\", \"Pus%\").list(); ]]>"
+
+#: index.docbook:361
+msgid "Named SQL queries"
+msgstr "ëª
ëª
ë SQL ì§ìë¤"
+
+#: index.docbook:363
+msgid "Named SQL queries may be defined in the mapping document and called in exactly the same way as a named HQL query. In this case, we do <emphasis>not</emphasis> need to call <literal>addEntity()</literal>."
+msgstr "ëª
ëª
ë SQL ì§ìë¤ì HQL ì§ìì ëì¼í ë°©ë²ì¼ë¡ 매í 문ì ìì ì ìë ì ìê³ ì ííê² í¸ì¶ë ìë ìë¤. ì´ ê²½ì°ì, ì°ë¦¬ë <literal>addEntity()</literal> í¸ì¶ì íìë¡ íì§ <emphasis>ìëë¤</emphasis>."
+
+#: index.docbook:368
+msgid ""
+ "<![CDATA[<sql-query name=\"persons\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex}\n"
+ " FROM PERSON person\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"persons\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex}\n"
+ " FROM PERSON person\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+
+#: index.docbook:370
+msgid ""
+ "<![CDATA[List people = sess.getNamedQuery(\"persons\")\n"
+ " .setString(\"namePattern\", namePattern)\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List people = sess.getNamedQuery(\"persons\")\n"
+ " .setString(\"namePattern\", namePattern)\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+
+#: index.docbook:372
+msgid "The <literal><return-join></literal> and <literal><load-collection></literal> elements are used to join associations and define queries which initialize collections, respectively."
+msgstr "<literal><return-join></literal> ììì <literal><load-collection></literal> ììë ì°ê´ë¤ì ì¡°ì¸ìí¤ê³ ì½ë ì
ë¤ì ê°ê° ì´ê¸°í ìí¤ë ì§ìë¤ì ì ìíëë° ì¬ì©ëë¤."
+
+#: index.docbook:377
+msgid ""
+ "<![CDATA[<sql-query name=\"personsWith\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"personsWith\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+
+#: index.docbook:379
+msgid "A named SQL query may return a scalar value. You must declare the column alias and Hibernate type using the <literal><return-scalar></literal> element:"
+msgstr "ëª
ëª
ë SQL ì§ìë ì¤ì¹¼ë¼ ê°ì ë°íí ìë ìë¤. ë¹ì ì <literal><return-scalar></literal> ìì를 ì¬ì©íì¬ ì»¬ë¼ aliasì Hibernate íì
ì ì ì¸í´ì¼ íë¤:"
+
+#: index.docbook:383
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return-scalar column=\"name\" type=\"string\"/>\n"
+ " <return-scalar column=\"age\" type=\"long\"/>\n"
+ " SELECT p.NAME AS name,\n"
+ " p.AGE AS age,\n"
+ " FROM PERSON p WHERE p.NAME LIKE 'Hiber%'\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return-scalar column=\"name\" type=\"string\"/>\n"
+ " <return-scalar column=\"age\" type=\"long\"/>\n"
+ " SELECT p.NAME AS name,\n"
+ " p.AGE AS age,\n"
+ " FROM PERSON p WHERE p.NAME LIKE 'Hiber%'\n"
+ "</sql-query>]]>"
+
+#: index.docbook:385
+msgid "You can externalize the resultset mapping informations in a <literal><resultset></literal> element to either reuse them accross several named queries or through the <literal>setResultSetMapping()</literal> API."
+msgstr "ë¹ì ì ì¬ë¬ ê°ì ëª
ëª
ë ì§ìë¤ì ê°ë¡ì§ë¬ ì¬ì¬ì©íê±°ë <literal>setResultSetMapping()</literal> API를 íµí´ ê²°ê³¼ì
매íì ë³´ë¤ì ì¬ì¬ì©í기 ìí´ <literal><resultset></literal> ìì ìì ê²°ê³¼ì
매í ì ë³´ë¤ì 구체í ìí¬ ì ìë¤."
+
+#: index.docbook:390
+msgid ""
+ "<![CDATA[<resultset name=\"personAddress\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ "</resultset>\n"
+ "\n"
+ "<sql-query name=\"personsWith\" resultset-ref=\"personAddress\">\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<resultset name=\"personAddress\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ "</resultset>\n"
+ "\n"
+ "<sql-query name=\"personsWith\" resultset-ref=\"personAddress\">\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+
+#: index.docbook:392
+msgid "You can alternatively use the resultset mapping information in your hbm files directly in java code."
+msgstr "ë¤ë¥¸ë°©ë²ì¼ë¡ ë¹ì ì ë¹ì ì hbm íì¼ë¤ ë´ì ì§ì ìë° ì½ëë¡ ë ê²°ê³¼ì
매í ì 보를 ì¬ì©í ì ìë¤."
+
+#: index.docbook:395
+msgid ""
+ "<![CDATA[List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .setResultSetMapping(\"catAndKitten\")\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .setResultSetMapping(\"catAndKitten\")\n"
+ " .list();]]>"
+
+#: index.docbook:398
+msgid "Using return-property to explicitly specify column/alias names"
+msgstr "ëª
ìì ì¼ë¡ column/alias ì´ë¦ë¤ì ì§ì íëë° return-property ì¬ì©í기"
+
+#: index.docbook:401
+msgid "With <literal><return-property></literal> you can explicitly tell Hibernate what column aliases to use, instead of using the <literal>{}</literal>-syntax to let Hibernate inject its own aliases."
+msgstr "Hibernateë¡ íì¬ê¸ ê·¸ê² ìì ì aliasë¤ì ë¼ìë£ëë¡ í기 ìí´ <literal>{}</literal>-구문ì ì¬ì©íë ê² ëì ì, <literal><return-property></literal>ë¡ì ë¹ì ì ì¬ì©í ì»¬ë¼ aliasë¤ì´ 무ìì¸ì§ë¥¼ Hibernateìê² ëª
ìì ì¼ë¡ ìë ¤ì¤ ì ìë¤."
+
+#: index.docbook:406
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return alias=\"person\" class=\"eg.Person\">\n"
+ " <return-property name=\"name\" column=\"myName\"/>\n"
+ " <return-property name=\"age\" column=\"myAge\"/>\n"
+ " <return-property name=\"sex\" column=\"mySex\"/>\n"
+ " </return>\n"
+ " SELECT person.NAME AS myName,\n"
+ " person.AGE AS myAge,\n"
+ " person.SEX AS mySex,\n"
+ " FROM PERSON person WHERE person.NAME LIKE :name\n"
+ "</sql-query>\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return alias=\"person\" class=\"eg.Person\">\n"
+ " <return-property name=\"name\" column=\"myName\"/>\n"
+ " <return-property name=\"age\" column=\"myAge\"/>\n"
+ " <return-property name=\"sex\" column=\"mySex\"/>\n"
+ " </return>\n"
+ " SELECT person.NAME AS myName,\n"
+ " person.AGE AS myAge,\n"
+ " person.SEX AS mySex,\n"
+ " FROM PERSON person WHERE person.NAME LIKE :name\n"
+ "</sql-query>\n"
+ "]]>"
+
+#: index.docbook:408
+msgid "<literal><return-property></literal> also works with multiple columns. This solves a limitation with the <literal>{}</literal>-syntax which can not allow fine grained control of multi-column properties."
+msgstr "<literal><return-property></literal>ë ëí ë¤ì¤ 컬ë¼ë¤ì ëí´ ëìíë¤. ì´ê²ì ë¤ì¤-ì»¬ë¼ íë¡í¼í°ë¤ì ëí fine grained ì ì´ë¥¼ íì©í ì ìë <literal>{}</literal>-구문ì ê°ì§ ì ì½ì í´ê²°í´ì¤ë¤."
+
+#: index.docbook:413
+msgid ""
+ "<![CDATA[<sql-query name=\"organizationCurrentEmployments\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " <return-property name=\"endDate\" column=\"myEndDate\"/>\n"
+ " </return>\n"
+ " SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},\n"
+ " STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},\n"
+ " REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT\n"
+ " WHERE EMPLOYER = :id AND ENDDATE IS NULL\n"
+ " ORDER BY STARTDATE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"organizationCurrentEmployments\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " <return-property name=\"endDate\" column=\"myEndDate\"/>\n"
+ " </return>\n"
+ " SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},\n"
+ " STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},\n"
+ " REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT\n"
+ " WHERE EMPLOYER = :id AND ENDDATE IS NULL\n"
+ " ORDER BY STARTDATE ASC\n"
+ "</sql-query>]]>"
+
+#: index.docbook:415
+msgid "Notice that in this example we used <literal><return-property></literal> in combination with the <literal>{}</literal>-syntax for injection. Allowing users to choose how they want to refer column and properties."
+msgstr "ì´ ìì ìì ì°ë¦¬ë ë¼ìë£ê¸°(injection)를 ìí´ <literal>{}</literal>-구문과 í¨ê» <literal><return-property></literal>를 ì¬ì©íìì 주목íë¼. ì¬ì©ìë¤ì´ 컬ë¼ê³¼ íë¡í¼í°ë¤ì 참조íê³ ì ìíë ë°©ë²ì ì ííë ê²ì ì¬ì©ìë¤ìê² íì©í´ì¤ì¼ë¡ì¨."
+
+#: index.docbook:420
+msgid "If your mapping has a discriminator you must use <literal><return-discriminator></literal> to specify the discriminator column."
+msgstr "ë§ì¼ ë¹ì ì 매íì´ í ê°ì íë³ì(discriminator )를 ê°ì§ ê²½ì° ë¹ì ì íë³ì 컬ë¼ì ì§ì íëë° <literal><return-discriminator></literal>를 ì¬ì©í´ì¼ íë¤."
+
+#: index.docbook:426
+msgid "Using stored procedures for querying"
+msgstr "ì§ì를 ìí ë´ì¥ íë¡ìì ì¬ì©í기"
+
+#: index.docbook:428
+msgid "Hibernate 3 introduces support for queries via stored procedures and functions. Most of the following documentation is equivalent for both. The stored procedure/function must return a resultset as the first out-parameter to be able to work with Hibernate. An example of such a stored function in Oracle 9 and higher is as follows:"
+msgstr "Hibernate 3ì ë´ì¥ íë¡ìì ë¤ê³¼ í¨ìë¤ì íµí ì§ì ì§ìì ëì
íë¤. ëë¶ë¶ì ë¤ì 문ìë ìì 모ëì ëì¼íê² ì ì©ëë¤. ë´ì¥ íë¡ìì /í¨ìë Hibernateì ëìíë ê²ì´ ê°ë¥íëë¡ ì²« ë²ì§¸ out-íë¼ë¯¸í°ë¡ì í ê°ì ê²°ê³¼ì
ì ë°íí´ì¼ íë¤. Oracle9 ì´ìì ë²ì ìì ê·¸ë° ë´ì¥ íë¡ìì ì ëí ìì ë ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:434
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION selectAllEmployments\n"
+ " RETURN SYS_REFCURSOR\n"
+ "AS\n"
+ " st_cursor SYS_REFCURSOR;\n"
+ "BEGIN\n"
+ " OPEN st_cursor FOR\n"
+ " SELECT EMPLOYEE, EMPLOYER,\n"
+ " STARTDATE, ENDDATE,\n"
+ " REGIONCODE, EID, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT;\n"
+ " RETURN st_cursor;\n"
+ " END;]]>"
+msgstr ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION selectAllEmployments\n"
+ " RETURN SYS_REFCURSOR\n"
+ "AS\n"
+ " st_cursor SYS_REFCURSOR;\n"
+ "BEGIN\n"
+ " OPEN st_cursor FOR\n"
+ " SELECT EMPLOYEE, EMPLOYER,\n"
+ " STARTDATE, ENDDATE,\n"
+ " REGIONCODE, EID, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT;\n"
+ " RETURN st_cursor;\n"
+ " END;]]>"
+
+#: index.docbook:436
+msgid "To use this query in Hibernate you need to map it via a named query."
+msgstr "Hibernateìì ì´ ì§ì를 ì¬ì©í기 ìí´ ë¹ì ì íëì ëª
ëª
ë ì§ì(a named query)를 íµí´ ê·¸ê²ì 매íí íìê° ìë¤."
+
+#: index.docbook:439
+msgid ""
+ "<![CDATA[<sql-query name=\"selectAllEmployees_SP\" callable=\"true\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"employee\" column=\"EMPLOYEE\"/>\n"
+ " <return-property name=\"employer\" column=\"EMPLOYER\"/>\n"
+ " <return-property name=\"startDate\" column=\"STARTDATE\"/>\n"
+ " <return-property name=\"endDate\" column=\"ENDDATE\"/>\n"
+ " <return-property name=\"regionCode\" column=\"REGIONCODE\"/>\n"
+ " <return-property name=\"id\" column=\"EID\"/>\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " </return>\n"
+ " { ? = call selectAllEmployments() }\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"selectAllEmployees_SP\" callable=\"true\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"employee\" column=\"EMPLOYEE\"/>\n"
+ " <return-property name=\"employer\" column=\"EMPLOYER\"/>\n"
+ " <return-property name=\"startDate\" column=\"STARTDATE\"/>\n"
+ " <return-property name=\"endDate\" column=\"ENDDATE\"/>\n"
+ " <return-property name=\"regionCode\" column=\"REGIONCODE\"/>\n"
+ " <return-property name=\"id\" column=\"EID\"/>\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " </return>\n"
+ " { ? = call selectAllEmployments() }\n"
+ "</sql-query>]]>"
+
+#: index.docbook:441
+msgid "Notice stored procedures currently only return scalars and entities. <literal><return-join></literal> and <literal><load-collection></literal> are not supported."
+msgstr "ë´ì¥ íë¡ìì ë¤ì íì¬ ì¤ì¹¼ë¼ë¤ê³¼ ìí°í°ë¤ ë§ì ë°íí¨ì 주목íë¼. <literal><return-join></literal>ê³¼ <literal><load-collection></literal>ì ì§ìëì§ ìëë¤."
+
+#: index.docbook:446
+msgid "Rules/limitations for using stored procedures"
+msgstr "ë´ì¥ íë¡ìì ë¤ì ì¬ì©íë ê·ì¹ë¤/ì ì½ë¤"
+
+#: index.docbook:448
+msgid "To use stored procedures with Hibernate the procedures/functions have to follow some rules. If they do not follow those rules they are not usable with Hibernate. If you still want to use these procedures you have to execute them via <literal>session.connection()</literal>. The rules are different for each database, since database vendors have different stored procedure semantics/syntax."
+msgstr "Hibernateìì ë´ì¥ íë¡ìì ë¤ì ì¬ì©í기 ìí´ì íë¡ìì ë¤/í¨ìë¤ì ë¤ì ëªëª ê·ì¹ë¤ì ë°ë¼ì¼ íë¤. ë§ì¼ ê·¸ê²ë¤ì´ ê·¸ë¤ ê·ì¹ë¤ì ë°ë¥´ì§ ìì ê²½ì° ê·¸ê²ë¤ì Hibernateì í¨ê» ì¬ì© ë¶ê°ë¥íë¤. ë§ì¼ ë¹ì ì´ ì¬ì í ì´ë¤ íë¡ìì ë¤ì ì¬ì©íê³ ì ìí ê²½ì°, ë¹ì ì <literal>session.connection()</literal>ì íµí´ ê·¸ê²ë¤ì ì¤íìì¼ì¼ íë¤. ë°ì´í°ë² ì´ì¤ 벤ëë¤ì´ ë¤ë¥¸ ë´ì¥ íë¡ìì ìë¯¸ë¡ /구문ì ê°ê³ ì기 ë문ì, ê·ì¹ë¤ì ê°ê°ì ë°ì´í°ë² ì´ì¤ì ë°ë¼ ì°¨ì´ê° ëë¤."
+
+#: index.docbook:455
+msgid "Stored procedure queries can't be paged with <literal>setFirstResult()/setMaxResults()</literal>."
+msgstr "ë´ì¥ íë¡ìì ì§ìë¤ì <literal>setFirstResult()/setMaxResults()</literal>ë¡ì ìª½ë§¤ê¹ ë ì ìë¤."
+
+#: index.docbook:458
+msgid "Recommended call form is standard SQL92: <literal>{ ? = call functionName(<parameters>) }</literal> or <literal>{ ? = call procedureName(<parameters>}</literal>. Native call syntax is not supported."
+msgstr "ê¶ì¥ëë í¸ì¶ íìì íì¤ SQL92ì´ë¤: <literal>{ ? = call functionName(<parameters>) }</literal> ëë <literal>{ ? = call procedureName(<parameters>}</literal>. Native í¸ì¶ 구문ì ì§ìëì§ ìëë¤."
+
+#: index.docbook:463
+msgid "For Oracle the following rules apply:"
+msgstr "Oracleì ê²½ì° ë¤ì ê·ì¹ë¤ì´ ì ì©ëë¤:"
+
+#: index.docbook:467
+msgid "A function must return a result set. The first parameter of a procedure must be an <literal>OUT</literal> that returns a result set. This is done by using a <literal>SYS_REFCURSOR</literal> type in Oracle 9 or 10. In Oracle you need to define a <literal>REF CURSOR</literal> type, see Oracle literature."
+msgstr "íëì í¨ìë íëì ê²°ê³¼ ì
ì ë°íí´ì¼ íë¤. íë¡ìì ì 첫 ë²ì§¸ íë¼ë¯¸í°ë íëì ê²°ê³¼ ì
ì ë°ííë íëì <literal>OUT</literal>ì´ì´ì¼ íë¤. ì´ê²ì Oracle 9 ëë 10ìì íëì <literal>SYS_REFCURSOR</literal>를 ì¬ì©íì¬ íí´ì§ë¤. Oracleìì ë¹ì ì <literal>REF CURSOR</literal> íì
ì ì ìí íìê° ìëë°, Oracle ë³´ê³ ì를 ë³´ë¼."
+
+#: index.docbook:476
+msgid "For Sybase or MS SQL server the following rules apply:"
+msgstr "Sybase ëë MS SQL serverì ê²½ì° ë¤ì ê·ì¹ë¤ì´ ì ì©ëë¤:"
+
+#: index.docbook:480
+msgid "The procedure must return a result set. Note that since these servers can/will return multiple result sets and update counts, Hibernate will iterate the results and take the first result that is a result set as its return value. Everything else will be discarded."
+msgstr "íë¡ìì ë í ê°ì ê²°ê³¼ ì
ì ë°íí´ì¼ íë¤. ì´ë¤ ìë²ë¤ì´ ì¬ë¬ ê°ì ê²°ê³¼ì
ë¤ê³¼ ì
ë°ì´í¸ ì¹´ì´í¸ë¤ì ë°í í ì ìë¤/í ê²ì´ì´ë¯ë¡, Hibernateë ê²°ê³¼ë¤ì ë°ë³µ ìíí ê²ì´ê³ ê·¸ê²ì ë°í ê°ì¼ë¡ì íëì ê²°ê³¼ ì
ì¸ ì²« ë²ì§¸ 결과를 ì·¨í ê²ì´ë¤. ê·¸ ë°ì 모ë ê²ì í기ë ê²ì´ë¤."
+
+#: index.docbook:488
+msgid "If you can enable <literal>SET NOCOUNT ON</literal> in your procedure it will probably be more efficient, but this is not a requirement."
+msgstr "ë§ì¼ ë¹ì ì´ ë¹ì ì íë¡ìì ë´ì <literal>SET NOCOUNT ON</literal>ì ì´ì© ê°ë¥íê² í ì ìë¤ë©´ ê·¸ê²ì ìë§ ë³´ë¤ í¨ì¨ì ì´ê² ë ê²ì´ì§ë§ ì´ê²ì íì ì¡°ê±´ì´ ìëë¤."
+
+#: index.docbook:498
+msgid "Custom SQL for create, update and delete"
+msgstr "create, update ê·¸ë¦¬ê³ delete를 ìí ë§ì¶¤í SQL"
+
+#: index.docbook:500
+msgid "Hibernate3 can use custom SQL statements for create, update, and delete operations. The class and collection persisters in Hibernate already contain a set of configuration time generated strings (insertsql, deletesql, updatesql etc.). The mapping tags <literal><sql-insert></literal>, <literal><sql-delete></literal>, and <literal><sql-update></literal> override these strings:"
+msgstr "Hibernate3ë create, update, delete ì¤í¼ë ì´ì
ë¤ì ìí ë§ì¶¤í 문ì¥ë¤ì ì¬ì©í ì ìë¤. Hibernateìì í´ëì¤ì ì½ë ì
ìììë¤ì êµ¬ì± ìì ìì±ë 문ìì´ë¤ì ì§í©(insertsql, deletesql, updatesql ë±)ì ì´ë¯¸ í¬í¨íê³ ìë¤. <literal><sql-insert></literal>, <literal><sql-delete></literal>, <literal><sql-update></literal> 매í íê·¸ë¤ì ì´ë¤ 문ìì´ë¤ì ì¤ë²ë¼ì´ë ìí¨ë¤:"
+
+#: index.docbook:508
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>\n"
+ " <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>\n"
+ " <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>\n"
+ " <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>\n"
+ " <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>\n"
+ "</class>]]>"
+
+#: index.docbook:510
+msgid "The SQL is directly executed in your database, so you are free to use any dialect you like. This will of course reduce the portability of your mapping if you use database specific SQL."
+msgstr "SQLì´ ë¹ì ì ë°ì´í°ë² ì´ì¤ ë´ìì ì§ì ì¤íëì´ì, ë¹ì ì´ ì¢ìíë ììì dialect를 ì¬ì©íë ê²ì´ ìì ë¡ë¤. ë§ì¼ ë¹ì ì´ ë°ì´í°ë² ì´ì¤ ì§ì ì ì¸ SQLì ì¬ì©í ê²½ì° ì´ê²ì ë¬¼ë¡ ë¹ì ì 매íì ì´ìì±ì ê°ììí¬ ê²ì´ë¤."
+
+#: index.docbook:514
+msgid "Stored procedures are supported if the <literal>callable</literal> attribute is set:"
+msgstr "ë§ì¼ <literal>callable</literal> ìì±ì´ ì¤ì ëë©´ ë´ì¥ íë¡ìì ë¤ì´ ì§ìëë¤:"
+
+#: index.docbook:517
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert callable=\"true\">{call createPerson (?, ?)}</sql-insert>\n"
+ " <sql-delete callable=\"true\">{? = call deletePerson (?)}</sql-delete>\n"
+ " <sql-update callable=\"true\">{? = call updatePerson (?, ?)}</sql-update>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert callable=\"true\">{call createPerson (?, ?)}</sql-insert>\n"
+ " <sql-delete callable=\"true\">{? = call deletePerson (?)}</sql-delete>\n"
+ " <sql-update callable=\"true\">{? = call updatePerson (?, ?)}</sql-update>\n"
+ "</class>]]>"
+
+#: index.docbook:519
+msgid "The order of the positional parameters are currently vital, as they must be in the same sequence as Hibernate expects them."
+msgstr "ìì¹ íë¼ë¯¸í°ë¤ì Hibernateê° ê·¸ê²ë¤ì 기ëíë ê²ê³¼ ê°ì ììê° ëì´ì¼ íë¯ë¡, ìì¹ íë¼ë¯¸í°ë¤ì ììë íì¬ ì ëì ì¼ë¡ ì¤ìíë¤."
+
+#: index.docbook:522
+msgid "You can see the expected order by enabling debug logging for the <literal>org.hibernate.persister.entity</literal> level. With this level enabled Hibernate will print out the static SQL that is used to create, update, delete etc. entities. (To see the expected sequence, remember to not include your custom SQL in the mapping files as that will override the Hibernate generated static sql.)"
+msgstr "ë¹ì ì <literal>org.hiberate.persister.entity</literal> ë ë²¨ë¡ ëë²ê·¸ ë¡ê¹
ì ì¬ì© ê°ë¥íê² í¨ì¼ë¡ì¨ ììë ìì를 ë³¼ ì ìë¤. ì´ ë 벨ì ì´ì© ê°ë¥íê² íë©´ Hibernateë ìí°í°ë¤ì ìì±ìí¤ê³ , ì
ë°ì´í¸íê³ , ìì íëë° ì¬ì©ëë ì ì ì¸ SQLì ì¶ë ¥í ê²ì´ë¤. (ììëë 결과를 ë³´ë ¤ë©´, Hibernate ìì±ë ì ì ì¸ sqlì ì¤ë²ë¼ì´ë ìí¤ê² 매í íì¼ë¤ ìì ë¹ì ì ë§ì¶¤í SQLì í¬í¨ìí¤ì§ ìëë¡ ì¼ëì ëë¼.)"
+
+#: index.docbook:529
+msgid "The stored procedures are in most cases (read: better do it than not) required to return the number of rows inserted/updated/deleted, as Hibernate has some runtime checks for the success of the statement. Hibernate always registers the first statement parameter as a numeric output parameter for the CUD operations:"
+msgstr "Hibernateê° ë¬¸ì¥ì ì±ê³µì ìí´ ëªëª ì¤í ì ì²´í¬ë¤ì ííë¯ë¡, ë´ì¥ íë¡ìì ë¤ì ëë¶ë¶ì ê²½ì°ë¤(ì½ê¸°:ë¤ë¥¸ ê²½ì°ë¤ ë³´ë¤ ê·¸ê²ì ë ì ííë¤)ìì insertëê³ /ì
ë°ì´í¸ëê³ /ìì ë íë¤ì ê°ì를 ë°ííëë° íìíë¤. Hibernateë íì CUD ì¤í¼ë ì´ì
ë¤ì ëí ì«ì ì¶ë ¥ íë¼ë¯¸í°ë¡ì 첫 ë²ì§¸ ë¬¸ì¥ íë¼ë¯¸í°ë¥¼ ë±ë¡ìí¨ë¤:"
+
+#: index.docbook:535
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)\n"
+ " RETURN NUMBER IS\n"
+ "BEGIN\n"
+ "\n"
+ " update PERSON\n"
+ " set\n"
+ " NAME = uname,\n"
+ " where\n"
+ " ID = uid;\n"
+ "\n"
+ " return SQL%ROWCOUNT;\n"
+ "\n"
+ "END updatePerson;]]>"
+msgstr ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)\n"
+ " RETURN NUMBER IS\n"
+ "BEGIN\n"
+ "\n"
+ " update PERSON\n"
+ " set\n"
+ " NAME = uname,\n"
+ " where\n"
+ " ID = uid;\n"
+ "\n"
+ " return SQL%ROWCOUNT;\n"
+ "\n"
+ "END updatePerson;]]>"
+
+#: index.docbook:539
+msgid "Custom SQL for loading"
+msgstr "ë¡ë©ì ìí ë§ì¶¤í SQL"
+
+#: index.docbook:541
+msgid "You may also declare your own SQL (or HQL) queries for entity loading:"
+msgstr "ë¹ì ì ëí ìí°í° ë¡ë©ì ìí ë¹ì ìì ì SQL (ëë HQL)ì ì ì¸í ìë ìë¤:"
+
+#: index.docbook:544
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\" lock-mode=\"upgrade\"/>\n"
+ " SELECT NAME AS {pers.name}, ID AS {pers.id}\n"
+ " FROM PERSON\n"
+ " WHERE ID=?\n"
+ " FOR UPDATE\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\" lock-mode=\"upgrade\"/>\n"
+ " SELECT NAME AS {pers.name}, ID AS {pers.id}\n"
+ " FROM PERSON\n"
+ " WHERE ID=?\n"
+ " FOR UPDATE\n"
+ "</sql-query>]]>"
+
+#: index.docbook:546
+msgid "This is just a named query declaration, as discussed earlier. You may reference this named query in a class mapping:"
+msgstr "ì´ê²ì ìì ë
¼ìíë¯ì´ ë¨ì§ ëª
ëª
ë ì§ì ì ì¸ì´ë¤. ë¹ì ì class 매í ìì ì´ ëª
ëª
ë ì§ì를 참조í ì ìë¤:"
+
+#: index.docbook:549
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <loader query-ref=\"person\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <loader query-ref=\"person\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:551
+msgid "This even works with stored procedures."
+msgstr "ì´ê²ì ì¬ì§ì´ ë´ì¥ íë¡ìì ë¤ì ëìíë¤."
+
+#: index.docbook:553
+msgid "You may even define a query for collection loading:"
+msgstr "ë¹ì ì ì½ë ì
ë¡ë©ì ìí í ê°ì ì§ì를 ì ìí ìë ìë¤:"
+
+#: index.docbook:555
+msgid ""
+ "<![CDATA[<set name=\"employments\" inverse=\"true\">\n"
+ " <key/>\n"
+ " <one-to-many class=\"Employment\"/>\n"
+ " <loader query-ref=\"employments\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"employments\" inverse=\"true\">\n"
+ " <key/>\n"
+ " <one-to-many class=\"Employment\"/>\n"
+ " <loader query-ref=\"employments\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:557
+msgid ""
+ "<![CDATA[<sql-query name=\"employments\">\n"
+ " <load-collection alias=\"emp\" role=\"Person.employments\"/>\n"
+ " SELECT {emp.*}\n"
+ " FROM EMPLOYMENT emp\n"
+ " WHERE EMPLOYER = :id\n"
+ " ORDER BY STARTDATE ASC, EMPLOYEE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"employments\">\n"
+ " <load-collection alias=\"emp\" role=\"Person.employments\"/>\n"
+ " SELECT {emp.*}\n"
+ " FROM EMPLOYMENT emp\n"
+ " WHERE EMPLOYER = :id\n"
+ " ORDER BY STARTDATE ASC, EMPLOYEE ASC\n"
+ "</sql-query>]]>"
+
+#: index.docbook:559
+msgid "You could even define an entity loader that loads a collection by join fetching:"
+msgstr "ë¹ì ì ì¬ì§ì´ ì¡°ì¸ íì¹ì ìí´ íëì ì½ë ì
ì ë¡ëìí¤ë íëì ìí°í°ë¥¼ ì ìí ì ìë¤:"
+
+#: index.docbook:562
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\"/>\n"
+ " <return-join alias=\"emp\" property=\"pers.employments\"/>\n"
+ " SELECT NAME AS {pers.*}, {emp.*}\n"
+ " FROM PERSON pers\n"
+ " LEFT OUTER JOIN EMPLOYMENT emp\n"
+ " ON pers.ID = emp.PERSON_ID\n"
+ " WHERE ID=?\n"
+ "</sql-query>]]>"
+msgstr ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\"/>\n"
+ " <return-join alias=\"emp\" property=\"pers.employments\"/>\n"
+ " SELECT NAME AS {pers.*}, {emp.*}\n"
+ " FROM PERSON pers\n"
+ " LEFT OUTER JOIN EMPLOYMENT emp\n"
+ " ON pers.ID = emp.PERSON_ID\n"
+ " WHERE ID=?\n"
+ "</sql-query>]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/quickstart.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/quickstart.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/quickstart.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,474 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "appended paragraph 1"
+msgstr "Tomcatì¼ë¡ ë¹ ë¥¸ ìì"
+
+#: index.docbook:8
+msgid "appended paragraph 2"
+msgstr "Hibernate ììí기"
+
+#: index.docbook:10
+msgid "appended paragraph 3"
+msgstr "ì´ íí 리ì¼ì ì¹ ê¸°ë°ì ì´í리ì¼ì´ì
ì© Apache Tomcat ìë¸ë¦¿ 컨í
ì´ëì ëí Hibernate 3.0 ì
ì
ì ì¤ëª
íë¤(ì°ë¦¬ë ë²ì 4.1ì ì¬ì©íë¤. 5.0ì ëí ì°¨ì´ì ë¤ì ì ì ê²ì´ë¤). Hibernateë 모ë 주ì J2EE ì´í리ì¼ì´ì
ìë²ë¤ì ê´ë¦¬ëë íê²½ìì ì ëìíê³ , ëë ì¬ì§ì´ ì¤í ëì¼ë¡ ì´í리ì¼ì´ì
ë¤ììë ì ëì íë¤. ì´ íí 리ì¼ì ì¬ì©ëë ë°ì´í°ë² ì´ì¤ ìì¤í
ì PostgreSQL 7.4ì´ê³ , ë¤ë¥¸ ë°ì´í°ë² ì´ì¤ì ëí ì§ìì ë¨ì§ Hibernate SQL dialect 구ì±ê³¼ 커ë¥ì
íë¡í¼í°ë¤ì ë³ê²½ìí¤ë ê²ìë§ ê´ê³ëë¤."
+
+#: index.docbook:18
+msgid "appended paragraph 4"
+msgstr "먼ì ì°ë¦¬ë 모ë íìì ì¸ ë¼ì´ë¸ë¬ë¦¬ë¤ì Tomcat ì¤ì¹ ì¥ìì ë³µì¬í´ì¼ íë¤. ì°ë¦¬ë ì´ íí 리ì¼ì ìí´ ë³ëì ì¹ ì»¨í
ì¤í¸(<literal>webapps/quickstart</literal>)를 ì¬ì©íë©°, ë°ë¼ì ì°ë¦¬ë ì ì ë¼ì´ë¸ë¬ë¦¬ ê²ì ê²½ë¡ (<literal>TOMCAT/common/lib</literal>)ì <literal>webapps/quickstart/WEB-INF/lib</literal> (JAR íì¼ë¤ì ê²½ì°)ì <literal>webapps/quickstart/WEB-INF/classes</literal> ë´ ì ìë 컨í
ì¤í¸ ë 벨ìì í´ëì¤ë¡ë ìì를 ê³ ë ¤í´ì¼ íë¤. ì°ë¦¬ë ë ê°ì í´ëì¤ë¡ë ë 벨ë¤ì ì ì classpathì 컨í
ì¤í¸ classpathë¡ì ì¸ê¸íë¤."
+
+#: index.docbook:27
+msgid "appended paragraph 5"
+msgstr "ì´ì ë¼ì´ë¸ë¬ë¦¬ë¤ì ë ê°ì classpathë¤ì ë³µì¬íë¼:"
+
+#: index.docbook:33
+msgid "appended paragraph 6"
+msgstr "ë°ì´í°ë² ì´ì¤ ì© JDBC ëë¼ì´ë²ë¥¼ ì ì classpathë¡ ë³µì¬íë¼. ì´ê²ì Tomcatì ë²ë¤ë¡êµ¬ì±ë DBCP 커ë¥ì
í ìíí¸ì¨ì´ì íìíë¤. Hibernateë ë°ì´í°ë² ì´ì¤ ììì SQLì ì¤íìí¤ëë° JDBC 커ë¥ì
ë¤ì ì¬ì©íë¯ë¡, ë¹ì ì íë§ë JDBC 커ë¥ì
ë¤ì ì ê³µí´ì¼ íê±°ë, ì§ì ì§ìëë íë¤(C3P0, Proxool) ì¤ íë를 ì¬ì©í기 ìí´ Hibernate를 구ì±í´ì¼ íë¤. ì´ íí 리ì¼ì ìí´, (PostgreSQL 7.4ì JDK 1.4ì©) <literal>pg74jdbc3.jar</literal> ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì ì classloaders ê²½ë¡ë¡ ë³µì¬íë¼. ë§ì¼ ë¹ì ì´ ë¤ë¥¸ ë°ì´í°ë² ì´ì¤ë¥¼ ì¬ì©íê³ ì ìí ê²½ì°, ê°ë¨íê² ê·¸ê²ì ì ì í JDBC ëë¼ì´ë²ë¥¼ ë³µì¬íë¼."
+
+#: index.docbook:43
+msgid "appended paragraph 7"
+msgstr "ê·¸ ë°ì ì´ë¤ ê²ì Tomcat ë´ì ì ì í´ëì¤ë¡ë ê²½ë¡ì ë³µì¬íì§ ë§ë¼. ëë ë¹ì ì Log4j, commons-logging ê·¸ë¦¬ê³ ë¤ë¥¸ ê²ë¤ì í¬í¨íë ì¬ë¬ ê°ì§ ë구ë¤ì ê´ë ¨ë 문ì ì ë¤ì ì»ê² ë ê²ì´ë¤. ê°ê°ì ì¹ ì´í리ì¼ì´ì
ì ëí´ ì»¨í
ì¤í¸ classpath를 ì¬ì©íë¼. ì¦ ë¼ì´ë¸ë¬ë¦¬ë¤ì <literal>WEB-INF/lib</literal>ì ë³µì¬íê³ , ë¹ì ìì ì í´ëì¤ë¤ê³¼ êµ¬ì± íì¼ë¤/íë¡í¼í° íì¼ë¤ì <literal>WEB-INF/classes</literal>ì ë³µì¬íë¼. ë ëë í ë¦¬ë¤ ììë ëí´í¸ë¡ 컨í
ì¤í¸ classpath ë´ì ìë¤."
+
+#: index.docbook:52
+msgid "appended paragraph 8"
+msgstr "Hibernateë JAR ë¼ì´ë¸ë¬ë¦¬ë¡ì í¨í¤ì§í ëì´ ìë¤. <literal>hibernate3.jar</literal> íì¼ì ì´í리ì¼ì´ì
ì ë¤ë¥¸ í´ëì¤ë¤ê³¼ í¨ê» 컨í
ì¤í¸ classpath ìì ë³µì¬ëì´ì¼ íë¤. Hibernateë ì¤í ìì ì´ë¤ ì 3ì ë¼ì´ë¸ë¬ë¦¬ë¤ì íìë¡íê³ , ì´ê²ë¤ì <literal>lib/</literal> ëë í 리 ë´ì Hibernate ë°°í¬ë³¸ì ë²ë¤íëì´ ìë¤; <xref linkend=\"3rdpartylibs\"/>를 ë³´ë¼. íìí ì 3ì ë¼ì´ë¸ë¬ë¦¬ë¤ì 컨í
ì¤í¸ classpathë¡ ë³µì¬íë¼."
+
+#: index.docbook:62
+msgid "appended paragraph 9"
+msgstr "Hibernate ì 3ì ë¼ì´ë¸ë¬ë¦¬"
+
+#: index.docbook:70
+msgid "appended paragraph 10"
+msgstr "ë¼ì´ë¸ë¬ë¦¬"
+
+#: index.docbook:73
+msgid "appended paragraph 11"
+msgstr "<entry>ì¤ëª
</entry>"
+
+#: index.docbook:80
+msgid "appended paragraph 12"
+msgstr "antlr (íì)"
+
+#: index.docbook:83
+msgid "appended paragraph 13"
+msgstr "Hibernateë ì§ì íìë¤ì ì°ì¶íëë° ANTLRì ì¬ì©íê³ , ì´ ë¼ì´ë¸ë¬ë¦¬ë ëí ì¤í ìì íìíë¤."
+
+#: index.docbook:89
+msgid "appended paragraph 14"
+msgstr "dom4j (íì)"
+
+#: index.docbook:92
+msgid "appended paragraph 15"
+msgstr "Hibernateë XML 구ì±ê³¼ XML 매í ë©íë°ì´í° íì¼ë¤ì íì±íëë° dom4j를 ì¬ì© íë¤."
+
+#: index.docbook:98
+msgid "appended paragraph 16"
+msgstr "CGLIB, asm (íì)"
+
+#: index.docbook:101
+msgid "appended paragraph 17"
+msgstr "Hibernateë (Java reflectionê³¼ ê²°í©íì¬) ë°íì ìì í´ëì¤ë¤ì ê³ ììí¤ëë° ì½ë ìì± ë¼ì´ë¸ë¬ë¦¬ë¥¼ ì¬ì©íë¤."
+
+#: index.docbook:107
+msgid "appended paragraph 18"
+msgstr "Commons Collections, Commons Logging (íì)"
+
+#: index.docbook:110
+msgid "appended paragraph 19"
+msgstr "Hibernateë Apache Jakarta Commons íë¡ì í¸ë¡ë¶í° ë¤ìí ì í¸ë¦¬í° ë¼ì´ë¸ë¬ë¦¬ ë¤ì ì¬ì©íë¤."
+
+#: index.docbook:116
+msgid "appended paragraph 20"
+msgstr "EHCache (íì)"
+
+#: index.docbook:119
+msgid "appended paragraph 21"
+msgstr "Hibernateë second-level ìºì를 ìí ë¤ìí ìºì íë¡ë°ì´ëë¤ì ì¬ì©í ì ìë¤. ë§ì¼ 구ì±ìì ë³íì§ ìì ê²½ì° EHCacheê° ëí´í¸ ìºì íë¡ë°ì´ëì´ë¤."
+
+#: index.docbook:125
+msgid "appended paragraph 22"
+msgstr "Log4j (ìµì
)"
+
+#: index.docbook:128
+msgid "appended paragraph 23"
+msgstr "Hibernateë 기본 ë¡ê¹
ë©ì»¤ëì¦ì¼ë¡ì Log4j를 ì¬ì©í ì ìë, Commons Logging API를 ì¬ì©íë¤. ë§ì¼ Log4j ë¼ì´ë¸ë¬ë¦¬ê° 컨í
ì¤í¸ ë¼ì´ë¸ë¬ë¦¬ ëë í 리 ììì ì´ì© ê°ë¥íë¤ë©´, Commons Loggingì Log4jì 컨í
ì¤í¸ classpath ë´ì ìë <literal>log4j.properties</literal> 구ì±ì ì¬ì©í ê²ì´ë¤. Log4jì ëí ìì properties íì¼ì Hibernate ë°°í¬ë³¸ì ë²ë¤í ëì´ ìë¤. ë°ë¼ì ë¹ì ì´ ì´ë©´ìì 무ìì´ ì§íëë ì§ì ë³´ê³ ì ìí ê²½ì°ì log4j.jarì (<literal>src/</literal>ì ìë) êµ¬ì± íì¼ì ë¹ì ì 컨í
ì¤í¸ classpath ìì¼ë¡ ë³µì¬íë¼."
+
+#: index.docbook:138
+msgid "appended paragraph 24"
+msgstr "íì ì¬ë¶?"
+
+#: index.docbook:141
+msgid "appended paragraph 25"
+msgstr "Hibernate ë°°í¬ë³¸ ë´ì ìë <literal>lib/README.txt</literal> íì¼ì ì´í´ë³´ë¼. ì´ê²ì Hibernateì ë°°í¬ë ì 3ì ë¼ì´ë¸ë¬ë¦¬ë¤ì ìµì 목ë¡ì´ë¤. ë¹ì ì 그곳ì ì´ê±°ë 모ë íì ë¼ì´ë¸ë¬ë¦¬ë¤ê³¼ ìµì
ë¼ì´ë¸ë¬ë¦¬ë¤ì ì°¾ê² ë ê²ì´ë¤(ì¬ê¸°ì \"ë¹ë ì íìí¨\"ì ë¹ì ì ì´í리ì¼ì´ì
ì´ ìëë¼ Hibernateì ëí ì미ìì ë
¸í¸íë¼)."
+
+#: index.docbook:152
+msgid "appended paragraph 26"
+msgstr "ì°ë¦¬ë ì´ì Tomcatê³¼ Hibernate ìììì ë°ì´í°ë² ì´ì¤ 커ë¥ì
íë§ê³¼ ê³µì 를 ì¤ì íë¤. ì´ê²ì Tomcatì´ (ê·¸ê²ì 미리 ë¹ëëì´ ìë DBCP íë§ í¹ì§ì ì¬ì©íì¬) íë§ë JDBC 커ë¥ì
ë¤ì ì ê³µí ê²ì´ê³ , Hibernateê° JNDI를 íµí´ ì´ë¤ 커ë¥ì
ë¤ì ìì²íë¤ë ê²ì ì미íë¤. ë¬ë¦¬ ë¹ì ì Hibernateë¡ íì¬ê¸ 커ë¥ì
íì ê´ë¦¬íëë¡ í ì ìë¤. Tomcatì ê·¸ê²ì 커ë¥ì
íì JNDIì ë°ì¸ë ìí¨ë¤; ì°ë¦¬ë 리ìì¤ ì ì¸ì Tomcat ë©ì¸ êµ¬ì± íì¼ì¸ <literal>TOMCAT/conf/server.xml</literal>ì ì¶ê°íë¤:"
+
+#: index.docbook:160
+msgid "appended paragraph 27"
+msgstr ""
+ "<![CDATA[<Context path=\"/quickstart\" docBase=\"quickstart\">\n"
+ " <Resource name=\"jdbc/quickstart\" scope=\"Shareable\" type=\"javax.sql.DataSource\"/>\n"
+ " <ResourceParams name=\"jdbc/quickstart\">\n"
+ " <parameter>\n"
+ " <name>factory</name>\n"
+ " <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>\n"
+ " </parameter>\n"
+ "\n"
+ " <!-- DBCP database connection settings -->\n"
+ " <parameter>\n"
+ " <name>url</name>\n"
+ " <value>jdbc:postgresql://localhost/quickstart</value>\n"
+ " </parameter>\n"
+ " <parameter>\n"
+ " <name>driverClassName</name><value>org.postgresql.Driver</value>\n"
+ " </parameter>\n"
+ " <parameter>\n"
+ " <name>username</name>\n"
+ " <value>quickstart</value>\n"
+ " </parameter>\n"
+ " <parameter>\n"
+ " <name>password</name>\n"
+ " <value>secret</value>\n"
+ " </parameter>\n"
+ "\n"
+ " <!-- DBCP connection pooling options -->\n"
+ " <parameter>\n"
+ " <name>maxWait</name>\n"
+ " <value>3000</value>\n"
+ " </parameter>\n"
+ " <parameter>\n"
+ " <name>maxIdle</name>\n"
+ " <value>100</value>\n"
+ " </parameter>\n"
+ " <parameter>\n"
+ " <name>maxActive</name>\n"
+ " <value>10</value>\n"
+ " </parameter>\n"
+ " </ResourceParams>\n"
+ "</Context>]]>"
+
+#: index.docbook:162
+msgid "appended paragraph 28"
+msgstr "ì°ë¦¬ê° ì´ ìì ìì 구ì±íë 컨í
ì¤í¸ë <literal>quickstart</literal>ë¡ ëª
ëª
ëê³ , ê·¸ê²ì ë² ì´ì¤ë <literal>TOMCAT/webapp/quickstart</literal> ëë í 리ì´ë¤. ììì ìë¸ë¦¿ë¤ì ì ê·¼í기 ìí´, (ë¬¼ë¡ ë¹ì ì <literal>web.xml</literal> ìì 매íë ìë¸ë¦¿ì ì´ë¦ì ì¶ê°íì¬) ë¹ì ì ë¸ë¼ì°ì ìì <literal>http://localhost:8080/quickstart</literal> ê²½ë¡ë¥¼ í¸ì¶íë¼. ë¹ì ì ëí ê³ì ì§ííê³ ì´ì 공백ì <literal>process()</literal> ë©ìë를 ê°ì§ ê°ë¨í ìë¸ë¦¿ì ìì±ìí¬ ì ìë¤."
+
+#: index.docbook:170
+msgid "appended paragraph 29"
+msgstr "Tomcatì ì´ì <literal>java:comp/env/jdbc/quickstart</literal>ë¡ JNDIì íµí´ 커ë¥ì
ë¤ì ì ê³µíë¤. ë§ì¼ ë¹ì ì´ ì¤í ì¤ì¸ 커ë¥ì
íì ì»ë ê²ì 문ì ê° ìë¤ë©´ Tomcat 문ì를 참조íë¼. ë¹ì ì´ JDBC ëë¼ì´ë² ìì¸ìí© ë©ìì§ë¥¼ ì»ì ê²½ì°, 먼ì Hibernate ìì´ JDBC 커ë¥ì
íì ì
ì
íë¼. Tomcat & JDBC íí 리ì¼ë¤ì ê·¸ ì¹ ìì´í¸ìì ì´ì© ê°ë¥íë¤."
+
+#: index.docbook:177
+msgid "appended paragraph 30"
+msgstr "ë¹ì ì ë¤ì ë¨ê³ë Hibernate를 구ì±íë ê²ì´ë¤. Hibernateë ê·¸ê²ì´ JDBC 커ë¥ì
ë¤ì ì»ë ë°©ë²ì ìê³ ìì´ì¼ íë¤. ì°ë¦¬ë Hibernateì XML ê¸°ë° êµ¬ì±ì ì¬ì©íë¤. properties íì¼ì ì¬ì©íë ë¤ë¥¸ ì ê·¼ë²ì ê±°ì ëì¼íì§ë§ XML êµ¬ë¬¸ì´ íì©íë ëªëª í¹ì§ë¤ì ëë½íê³ ìë¤. XML êµ¬ì± íì¼ì <literal>hibernate.cfg.xml</literal>ë¡ì 컨í
ì¤í¸ classpath (<literal>WEB-INF/classes</literal>) ë´ì ìì¹í´ ìë¤:"
+
+#: index.docbook:184
+msgid "appended paragraph 31"
+msgstr ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <property name=\"connection.datasource\">java:comp/env/jdbc/quickstart</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.PostgreSQLDialect</property>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <mapping resource=\"Cat.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:186
+msgid "appended paragraph 32"
+msgstr "ì°ë¦¬ë SQL ëª
ë ¹ë¤ì ëí ë¡ê¹
ì ì¬ì©íì§ ìê³ Hibernateìê² ì¬ì©ëë ë°ì´í°ë² ì´ì¤ SQL directê° ë¬´ìì¸ì§ ê·¸ë¦¬ê³ (Tomcat ë°ì¸ëë íì JNDI 주ì를 ì ì¸íì¬) JDBC 커ë¥ì
ë¤ì ì»ë ê³³ì ìë ¤ì¤ë¤. dialectë íìì ì¸ ì¤ì ì´ê³ , ë°ì´í°ë² ì´ì¤ë¤ì SQL \"íì¤\"ì ëí ê·¸ê²ë¤ì í´ìì ë¬ë¦¬íë¤. Hibernateë ì°¨ì´ì ë¤ì ì²ë¦¬íê³ ëª¨ë 주ì ìì© ë°ì´í°ë² ì´ì¤ë¤ ë° ì¤í ìì¤ ë°ì´í°ë² ì´ì¤ë¤ ì©ëì directë¤ì ë²ë¤ë¡ í¬í¨íê³ ìë¤."
+
+#: index.docbook:193
+msgid "appended paragraph 33"
+msgstr "<literal>SessionFactory</literal>ë ë¨ì¼ ë°ì´í°ì ì¥ìì ê´í ê°ë
ì´ê³ , ì¬ë¬ ë°ì´í°ë² ì´ì¤ë¤ì ì¬ë¬ ê°ì XML êµ¬ì± íì¼ë¤ì ìì±ìí¤ê³ ë¹ì ì ì´í리ì¼ì´ì
ììì ì¬ë¬ ê°ì <literal>Configuration</literal> ë° <literal>SessionFactory</literal> ê°ì²´ë¤ì ìì±ìì¼ì ì¬ì©ë ì ìë¤."
+
+#: index.docbook:199
+msgid "appended paragraph 34"
+msgstr "<literal>hibernate.cfg.xml</literal>ì ë§ì§ë§ ììë ìì í´ëì¤ <literal>Cat</literal>ì ëí Hibernate XML 매í íì¼ì ì´ë¦ì¼ë¡ì¨ <literal>Cat.hbm.xml</literal>ì ì ì¸íë¤. ì´ íì¼ì ë°ì´í°ë² ì´ì¤ í
ì´ë¸(ëë í
ì´ë¸ë¤)ë¡ POJO í´ëì¤ <literal>Cat</literal> ì 매íìí¤ë ë©íë°ì´í°ë¥¼ í¬í¨íë¤. ì°ë¦¬ë 곧 ê·¸ íì¼ë¡ ëëì ê° ê²ì´ë¤. 먼ì POJO í´ëì¤ë¥¼ ìì±íê³ ê·¸ë° ë¤ì ê·¸ê²ì ìí 매í ë©íë°ì´í°ë¥¼ ì ì¸íì."
+
+#: index.docbook:209
+msgid "appended paragraph 35"
+msgstr "첫 ë²ì§¸ ìì í´ëì¤"
+
+#: index.docbook:211
+msgid "appended paragraph 36"
+msgstr "Hibernateë ìì í´ëì¤ë¤ì ëí Plain Old Java Objects (POJOs, ì¢
ì¢
Plain Ordinary Java Objectsë¡ ëª
ëª
ëë¤) íë¡ê·¸ëë° ëª¨íì¼ë¡ ê°ì¥ ì ëìíë¤. POJOë ê³µì©ì¼ë¡ ê°ìì ì¸ ì¸í°íì´ì¤ë¡ë¶í° ë´ë¶ì ì¸ íìì ìíìì¼, getterì setter ë©ìëë¤ì íµí´ ì ê·¼ê°ë¥í í´ëì¤ë¤ì íë¡í¼í°ë¤ì ê°ì§ ìë°ë¹ê³¼ 꽤 ì ì¬íë¤(íìíë¤ë©´ Hibernateë ëí íëë¤ì ì§ì ì ê·¼í ì ìë¤):"
+
+#: index.docbook:218
+msgid "appended paragraph 37"
+msgstr ""
+ "<![CDATA[package org.hibernate.examples.quickstart;\n"
+ "\n"
+ "public class Cat {\n"
+ "\n"
+ " private String id;\n"
+ " private String name;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " public Cat() {\n"
+ " }\n"
+ "\n"
+ " public String getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(String id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ "\n"
+ " public void setName(String name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ "\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " public void setSex(char sex) {\n"
+ " this.sex = sex;\n"
+ " }\n"
+ "\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:220
+msgid "appended paragraph 38"
+msgstr "Hibernateë ê·¸ê²ì íë¡í¼í° íì
ë¤ì ì¬ì©ì ì ì½ëì§ ìê³ , ìë° ì½ë ì
íë ììììì í´ëì¤ë¤ì í¬í¨íì¬, 모ë ìë° JDK íì
ë¤ê³¼ (<literal>String</literal>, <literal>char</literal>ì <literal>Date</literal> ê°ì) ììíì
ë¤ì´ 매íë ì ìë¤. ë¹ì ì ê·¸ê²ì ê°ë¤ë¡ì, ê°ë¤ì ê°ì§ ì½ë ì
ë¤ë¡ì, ëë ë¤ë¥¸ ìí°í°ë¤ì ëí ì°ê´ë¤ë¡ì 매íìí¬ ì ìë¤. <literal>id</literal>ë ê·¸ í´ëì¤ì ë°ì´í°ë² ì´ì¤ ìë³ì(íë¼ì´ë¨¸ë¦¬ í¤)를 íííë í¹ë³í íë¡í¼í°ì´ê³ , ê·¸ê²ì <literal>Cat</literal>ê³¼ ê°ì ìí°í°ë¤ì ëí´ ë§¤ì° ê¶ì¥ëë¤. Hibernateë ë´ë¶ì ì¼ë¡ë§ ìë³ìë¤ì ì¬ì©í ì ìì§ë§, ì°ë¦¬ë ì°ë¦¬ì ì´í리ì¼ì´ì
ìí¤í
ì²ìì ì´ë¤ ì ì°ì±ì ìì¤íê² ë ê²ì´ë¤."
+
+#: index.docbook:229
+msgid "appended paragraph 39"
+msgstr "í¹ì ì¸í°íì´ì¤ë ìì í´ëì¤ë¤ì ëí´ êµ¬íëì§ ë§ìì¼ íê±°ë í¹ì ë£¨í¸ ìì í´ëì¤ë¡ë¶í° ìë¸ í´ëì¤ë¡ ë§ë¤ì§ ë§ìì¼ íë¤. Hibernateë ëí ë°ì´í¸ ì½ë ì²ë¦¬ì ê°ì, ì´ë¤ ë¹ë ì ì²ë¦¬ë¥¼ íìë¡ íì§ ìê³ , ê·¸ê²ì ì¤ì§ ìë° reflectionê³¼ (CGLIB를 íµí) ë°íì í´ëì¤ ê³ ììë§ ìì¡´íë¤. ë°ë¼ì Hibernateì ëí POJO í´ëì¤ì ì´ë¤ ìì¡´ì± ìì´ë, ì°ë¦¬ë ê·¸ê²ì ë°ì´í°ë² ì´ì¤ í
ì´ë¸ë¡ 매íí ì ìë¤."
+
+#: index.docbook:239
+msgid "appended paragraph 40"
+msgstr "cat 매íí기"
+
+#: index.docbook:241
+msgid "appended paragraph 41"
+msgstr "<literal>Cat.hbm.xml</literal> 매ííì¼ì ê°ì²´/ê´ê³í 매íì íìí ë©íë°ì´í°ë¥¼ í¬í¨íë¤. ë©íë°ì´í°ë ìì í´ëì¤ë¤ì ì ì¸ê³¼ ë°ì´í°ë² ì´ì¤ í
ì´ë¸ë¤ì ëí (컬ë¼ë¤ê³¼ ë¤ë¥¸ ìí°í°ë¤ì ëí foreign í¤ ê´ê³ë¤ì ëí) íë¡í¼í°ë¤ì 매íì í¬í¨íë¤."
+
+#: index.docbook:247
+msgid "appended paragraph 42"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"org.hibernate.examples.quickstart.Cat\" table=\"CAT\">\n"
+ "\n"
+ " <!-- A 32 hex character is our surrogate key. It's automatically\n"
+ " generated by Hibernate with the UUID pattern. -->\n"
+ " <id name=\"id\" type=\"string\" unsaved-value=\"null\" >\n"
+ " <column name=\"CAT_ID\" sql-type=\"char(32)\" not-null=\"true\"/>\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ "\n"
+ " <!-- A cat has to have a name, but it shouldn' be too long. -->\n"
+ " <property name=\"name\">\n"
+ " <column name=\"NAME\" length=\"16\" not-null=\"true\"/>\n"
+ " </property>\n"
+ "\n"
+ " <property name=\"sex\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:249
+msgid "appended paragraph 43"
+msgstr "모ë ìì í´ëì¤ë ìë³ì ìì±ì ê°ì ¸ì¼ íë¤(ì¤ì ë¡ value-íì
ì í´ëì¤ë¤ì ìì¡´íì§ ìë, ìí°í°ë¤ì íííë ì ì¼í í´ëì¤ë¤ì ìí°í°ì ê°ì§ ì»´í¬ëí¸ë¤ë¡ 매íëë¤). ì´ íë¡í¼í°ë ìì ê°ì²´ë¤ì 구ë³ì§ëë° ì¬ì©ëë¤: ë§ì¼ <literal>catA.getId().equals(catB.getId())</literal>ê° trueì¼ ê²½ì°, ë ê°ì catë¤ì ê°ê³ , ì´ ê°ë
ì <emphasis>database identity</emphasis>ë¡ ëª
ëª
ëë¤. Hibernateë (ë°ì´í°ë² ì´ì¤ ìíì¤, hi/lo ìë³ì í
ì´ë¸ë¤, ê·¸ë¦¬ê³ ì´í리ì¼ì´ì
í ë¹ ìë³ìë¤ì ëí native ìì±ê¸°ë¤ì í¬í¨íë) ë¤ë¥¸ ìë리ì¤ë¤ì ëí´ ì¬ë¬ ê°ì§ ìë³ì ìì±ê¸°ë¤ì ë²ë¤ë¡ ê°ê³ ìë¤. ì°ë¦¬ë UUID ìì±ê¸°(ë°ì´í°ì´ì¤ì ìí´ ìì±ë ì ì ëì© í¤ë¤ì´ ì í¸ë ê²ì´ë¯ë¡, í
ì¤í¸ì©ì¼ë¡ë§ ê¶ì¥ë¨)를 ì¬ì©íê³ ëí Hibernate ìì±ë ìë³ì ê°ì ìí <literal>CAT</liter!
al> í
ì´ë¸ì <literal>CAT_ID</literal> 컬ë¼ì (í
ì´ë¸ì íë¼ì´ë¨¸ë¦¬ í¤ë¡ì) ì§ì íë¤."
+
+#: index.docbook:260
+msgid "appended paragraph 44"
+msgstr "<literal>Cat</literal>ì 모ë ë¤ë¥¸ íë¡í¼í°ë¤ì ëì¼í í
ì´ë¸ë¡ 매íëë¤. <literal>name</literal> íë¡í¼í°ì ê²½ì°ì, ì°ë¦¬ë ê·¸ê²ì ëª
ìì ì¸ ë°ì´í°ë² ì´ì¤ ì»¬ë¼ ì ì¸ì¼ë¡ 매íìì¼°ë¤. ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ê° Hibernateì <emphasis>SchemaExport</emphasis> ë구ì ìí´ ë§¤í ì ì¸ì¼ë¡ë¶í° (SQL DDL 문ì¥ë¤ë¡) ìëì ì¼ë¡ ìì±ë ë ì´ê²ì´ í¹ë³í ì ì©íë¤. 모ë ë¤ë¥¸ íë¡í¼í°ë¤ì Hibernateì ëí´í¸ ì¤ì ë¤ì ì¬ì©íì¬ ë§¤íëê³ , ëí´í¸ ì¤ì ë¤ì ë¹ì ì´ ê°ì¥ ë§ì ìê°ì íìë¡ íë ê²ì´ë¤. ë°ì´í°ë² ì´ì¤ ë´ì í
ì´ë¸ <literal>CAT</literal>ì ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:268
+msgid "appended paragraph 45"
+msgstr ""
+ "<![CDATA[ Column | Type | Modifiers\n"
+ "--------+-----------------------+-----------\n"
+ " cat_id | character(32) | not null\n"
+ " name | character varying(16) | not null\n"
+ " sex | character(1) |\n"
+ " weight | real |\n"
+ "Indexes: cat_pkey primary key btree (cat_id)]]>"
+
+#: index.docbook:270
+msgid "appended paragraph 46"
+msgstr "ë¹ì ì ì´ì ììì
ì¼ë¡ ë¹ì ì ë°ì´í°ë² ì´ì¤ ë´ì ì´ í
ì´ë¸ì ìì±ìí¬ ê²ì´ê³ , ë§ì¼ ë¹ì ì´ <literal>hbm2ddl</literal> ëêµ¬ë¡ ì´ ë¨ê³ë¥¼ ìëí ìí¤ê³ ì ìí ê²½ì° <xref linkend=\"toolsetguide\"/>를 ì½ì´ë¼. ì´ ë구ë í
ì´ë¸ ì ì, ë§ì¶¤í ì»¬ë¼ íì
컨ì¤í¸ë ì¸í¸ë¤, ì ì¼ ì»¨ì¤í¸ë ì¸í¸ë¤ê³¼ ì¸ë±ì¤ë¤ì í¬í¨íë, ì ì²´ SQL DDLì ìì±ìí¬ ì ìë¤."
+
+#: index.docbook:279
+msgid "appended paragraph 47"
+msgstr "catë¤ì ìì
í기"
+
+#: index.docbook:281
+msgid "appended paragraph 48"
+msgstr "ì°ë¦¬ë ì´ì Hibernateì <literal>Session</literal>ì ììí ì¤ë¹ê° ëì´ ìë¤. ê·¸ê²ì <emphasis>persistence manager</emphasis> (ìì ê´ë¦¬ì)ì´ê³ , ì°ë¦¬ë ë°ì´í°ë² ì´ì¤ë¡ <literal>Cat</literal>ë¤ì ì ì¥íê³ ë°ì´í°ë² ì´ì¤ë¡ë¶í° <literal>Cat</literal>ë¤ì ê²ìíëë° ê·¸ê²ì ì¬ì©íë¤. ê·¸ë¬ë 먼ì ì°ë¦¬ë <literal>SessionFactory</literal>ë¡ë¶í° <literal>Session</literal>(Hibernateì ìì
ë¨ì)를 ì»ì´ì¼ íë¤:"
+
+#: index.docbook:288
+msgid "appended paragraph 49"
+msgstr ""
+ "<![CDATA[SessionFactory sessionFactory =\n"
+ " new Configuration().configure().buildSessionFactory();]]>"
+
+#: index.docbook:290
+msgid "appended paragraph 50"
+msgstr "<literal>configure()</literal> í¸ì¶ì <literal>hibernate.cfg.xml</literal> êµ¬ì± íì¼ì ë¡ëìí¤ê³ <literal>Configuration</literal> ì¸ì¤í´ì¤ë¥¼ ì´ê¸°í ìí¨ë¤. ë¹ì ì´ SessionFactory(ë¶ë³ì ì)를 ë¹ëí기 <emphasis>ì´ì ì</emphasis> ë¹ì ì <literal>Configuration</literal>ì ì ê·¼í¨ì¼ë¡ì¨ ë¤ë¥¸ íë¡í¼í°ë¤ì ì¤ì í ì ìë¤(ê·¸ë¦¬ê³ ì¬ì§ì´ 매í ë©íë°ì´í°ë¥¼ ë³ê²½ìí¬ ì ìë¤). ì°ë¦¬ë ì´ëì <literal>SessionFactory</literal>를 ìì±ìí¤ê³ ì°ë¦¬ì ì´í리ì¼ì´ì
ììì ì´ë»ê² ê·¸ê²ì ì ê·¼í ì ìë?"
+
+#: index.docbook:298
+msgid "appended paragraph 51"
+msgstr "<literal>SessionFactory</literal>ë ëê° ì¤ì§ íë²ë§, ì를 ë¤ì´ ëê° <emphasis>load-on-startup</emphasis> ìë¸ë¦¿ì¼ë¡ ìì ìì ë¹ëëë¤. ì´ê²ì ëí ë¹ì ì´ ë¹ì ì ìë¸ë¦¿ë¤ ë´ì ìë ì¸ì¤í´ì¤ ë³ì ìì ê·¸ê²ì ì ì§íì§ ìì ê²ì´ì§ë§ ì´ë¤ ë¤ë¥¸ ìì¹ì ì ì§ìí¬ ê²ìì ì미íë¤. ë구ë ì°ë¦¬ë ì´ë¤ ì¢
ë¥ì <emphasis>Singleton</emphasis>ì íìë¡ íë©°, ë°ë¼ì ì°ë¦¬ë ì´í리ì¼ì´ì
ì½ëë¡ ì½ê² <literal>SessionFactory</literal>ì ì¡ì¸ì¤ í ì ìë¤. ë¤ìì ë³´ì¬ì§ ì ê·¼ë²ì ë 문ì 모ë를 í´ê²°íë¤: ìì 구ì±ê³¼ <literal>SessionFactory</literal>ì ëí ì¬ì´ ì ê·¼."
+
+#: index.docbook:306
+msgid "appended paragraph 52"
+msgstr "ì°ë¦¬ë <literal>HibernateUtil</literal> helper í´ëì¤ë¥¼ 구ííë¤:"
+
+#: index.docbook:310
+msgid "appended paragraph 53"
+msgstr ""
+ "<![CDATA[import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ "\n"
+ " private static Logger log = LoggerFactory.getLogger(HibernateUtil.class);\n"
+ "\n"
+ " private static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Create the SessionFactory\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " log.error(\"Initial SessionFactory creation failed.\", ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static final ThreadLocal session = new ThreadLocal();\n"
+ "\n"
+ " public static Session getCurrentSession() {\n"
+ " Session s = (Session) session.get();\n"
+ " // Open a new Session, if this Thread has none yet\n"
+ " if (s == null) {\n"
+ " s = sessionFactory.openSession();\n"
+ " session.set(s);\n"
+ " }\n"
+ " return s;\n"
+ " }\n"
+ "\n"
+ " public static void closeSession() {\n"
+ " Session s = (Session) session.get();\n"
+ " if (s != null)\n"
+ " s.close();\n"
+ " session.set(null);\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:312
+msgid "appended paragraph 54"
+msgstr "ì´ í´ëì¤ë static ì´ê¸°ì를 ê°ì§ <literal>SessionFactory</literal>를 ì²ë¦¬í ë¿ë§ ìëë¼ ëí íì¬ì ì°ë ë를 ìí <literal>Session</literal>ì ìì íë <literal>ThreadLocal</literal> ë³ì를 ê°ëë¤. ì´ helper를 ì¬ì©íë ¤ê³ ìëí기 ì ì thread-local ë³ìì ëí ìë° ê°ë
ì ì´í´í´ì¼ íë¤. ë³´ë¤ ë³µì¡íê³ ê°ë ¥í <literal>HibernateUtil</literal> í´ëì¤ë http://caveatemptor.hibernate.org/ì <literal>CaveatEmptor</literal>ìì ì°¾ì ì ìë¤."
+
+#: index.docbook:319
+msgid "appended paragraph 55"
+msgstr "<literal>SessionFactory</literal>ë threadsafeì´ê³ , ë§ì ì°ë ëë¤ì´ ëìì ê·¸ê²ì ì ê·¼í ì ìê³ <literal>Session</literal>ë¤ì ìì²í ì ìë¤. íëì <literal>Session</literal>ì ë°ì´í°ë² ì´ì¤ì ëí´ í ê°ì ë¨ì ìì
ì ëíë´ë non-threadsafe ê°ì²´ì´ë¤. <literal>Session</literal>ë¤ì <literal>SessionFactory</literal> ë¡ë¶í° ì´ë ¤ì§ê³ 모ë ìì
ì´ ìë£ë ë ë«íì§ë¤. ë¹ì ì ìë¸ë¦¿ì <literal>process()</literal> ë©ìë ë´ì ìë ìì ë ë¤ìê³¼ ê°ì ì ìë¤(ìì¸ìí© ì²ë¦¬ ìì´):"
+
+#: index.docbook:327
+msgid "appended paragraph 56"
+msgstr ""
+ "<![CDATA[Session session = HibernateUtil.getCurrentSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Cat princess = new Cat();\n"
+ "princess.setName(\"Princess\");\n"
+ "princess.setSex('F');\n"
+ "princess.setWeight(7.4f);\n"
+ "\n"
+ "session.save(princess);\n"
+ "\n"
+ "tx.commit();\n"
+ "HibernateUtil.closeSession();]]>"
+
+#: index.docbook:329
+msgid "appended paragraph 57"
+msgstr "íëì <literal>Session</literal> ë´ìì 모ë ë°ì´í°ë² ì´ì¤ ì¤í¼ë ì´ì
ì ë°ì´í°ë² ì´ì¤ ì¤í¼ë ì´ì
ë¤(ì¬ì§ì´ ì½ê¸° ì ì© ì¤í¼ë ì´ì
ë¤ ì¡°ì°¨ë)ì 격리ìí¤ë íëì í¸ëìì
ë´ë¶ìì ë°ìíë¤. ì°ë¦¬ë 기본 í¸ëìì
ë°©ë(ì°ë¦¬ì ê²½ì°, JDBC í¸ëìì
ë¤)ë¡ë¶í° ì¶ìíìí¤ëë° Hibernates <literal>Transaction</literal> API 를 ì¬ì©íë¤. ì´ê²ì ì°ë¦¬ì ì½ëê° ììì ë³ê²½ë¤ ìì´ë (JTA를 ì¬ì©íë) 컨í
ì´ë-ê´ë¦¬ëë í¸ëìì
ë¤ì ë°°ì¹ëë ê²ì íì©í´ì¤ë¤."
+
+#: index.docbook:336
+msgid "appended paragraph 58"
+msgstr "ë¹ì ì´ ìíë ë§í¼ ë¹ì ì´ <literal>HibernateUtil.getCurrentSession();</literal>ì í¸ì¶í ì ìê³ , ë¹ì ì ì´ ì°ë ëì íì¬ <literal>Session</literal>ì íì ì»ì ê²ìì ë
¸í¸íë¼. ë¹ì ì ìë¸ë¦¿ ì½ë ë´ììë ëë ìë¸ë¦¿ íí° ë´ììë HTTP responseê° ì ì¡ë기 ì ì, ë¹ì ì ë¨ì ìì
ì´ ìë£ë íì <literal>Session</literal>ì´ íì¤í ë«íì§ëë¡ í´ì¼ íë¤. ë ë²ì§¸ ìµì
ì ì¢ì 측면ì ì¬ì´ lazy ì´ê¸°íì´ë¤: ë·°ê° ë ëë§ ë ë <literal>Session</literal>ì´ ì¬ì í ì´ë ¤ì ¸ ìì´ì, Hibernateë ë¹ì ì´ íì¬ ê°ì²´ ê·¸ëí를 ë¤ë¹ê²ì´í¸ íë ëì ì´ê¸°í ëì§ ìì ê°ì²´ë¤ì ë¡ëìí¬ ì ìë¤."
+
+#: index.docbook:344
+msgid "appended paragraph 59"
+msgstr "Hibernateë ë°ì´í°ë² ì´ì¤ë¡ë¶í° ê°ì²´ë¤ì ê²ìíëë° ì¬ì©ë ì ìë ë¤ìí ë©ìëë¤ì ê°ê³ ìë¤. ê°ì¥ ì ì°í ë°©ë²ì Hibernate Query Language (HQL)ì ì¬ì©íë ê²ì´ë¤. Hibernate Query Language (HQL)ì ë°°ì°ê¸°ê° ì½ê³ SQLì ëí ê°ë ¥í ê°ì²´ ì§í¥ íì¥ì´ë¤:"
+
+#: index.docbook:350
+msgid "appended paragraph 60"
+msgstr ""
+ "<![CDATA[Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Query query = session.createQuery(\"select c from Cat as c where c.sex = :sex\");\n"
+ "query.setCharacter(\"sex\", 'F');\n"
+ "for (Iterator it = query.iterate(); it.hasNext();) {\n"
+ " Cat cat = (Cat) it.next();\n"
+ " out.println(\"Female Cat: \" + cat.getName() );\n"
+ "}\n"
+ "\n"
+ "tx.commit();]]>"
+
+#: index.docbook:352
+msgid "appended paragraph 61"
+msgstr "Hibernateë ëí type-safe ì§ìë¤ì ê³µìí ìí¤ëë° ì¬ì©ë ì ìë ê°ì²´-ì§í¥ <emphasis>query by criteria</emphasis> APIì ì ê³µíë¤. ë¬¼ë¡ Hibernateë ë°ì´í°ë² ì´ì¤ìì 모ë SQL íµì ì ìí´ <literal>PreparedStatement</literal>ë¤ê³¼ íë¼ë¯¸í° ë°ì¸ë©ì ì¬ì©íë¤. ë¹ì ì ëí Hibernate ì§ì ì ì¸ SQL ì§ì í¹ì§ì ì¬ì©í ìë ìê±°ë ë문 ê²½ì°ì <literal>Session</literal>ì¼ë¡ë¶í° plain JDBC 커ë¥ì
ì ì»ì ìë ìë¤."
+
+#: index.docbook:362
+msgid "appended paragraph 62"
+msgstr "ë§ì§ë§ì¼ë¡"
+
+#: index.docbook:364
+msgid "appended paragraph 63"
+msgstr "ì°ë¦¬ë ì´ ìì íí ë¦¬ì¼ ë´ìì ë¨ì§ Hibernateì íë©´ì íê¸°ë§ íë¤. ì°ë¦¬ë ì°ë¦¬ì ìì ë¤ ìì ì´ë¤ ìë¸ë¦¿ ì§ì ì ì½ë를 í¬í¨íì§ ììì ë
¸í¸íë¼. ë¹ì ì´ ì í©íì§ë¥¼ ìë ¤ê³ í ë ë¹ì ì ë¹ì ìì ì ìë¸ë¦¿ì ìì±ìì¼ì¼ íê³ Hibernate ì½ë를 ì½ì
í´ì¼ íë¤."
+
+#: index.docbook:370
+msgid "appended paragraph 64"
+msgstr "ë°ì´í° ì ê·¼ ê³ì¸µì¼ë¡ì Hibernateë ë¹ì ì ì´í리ì¼ì´ì
ì ê°íê² íµí©ë¨ì ì¼ëì ëë¼. ëê° ëª¨ë ë¤ë¥¸ ë ì´ì´ë¤ì ìì ë©ì»¤ëì¦ì ìì¡´íë¤. ë¹ì ì ì´ ì¤ê³ì í¨ì¶ì íì¤í ì´í´íëë¡ íë¼."
+
+#: index.docbook:375
+msgid "appended paragraph 65"
+msgstr "ë³´ë¤ ë³µì¡í ì´í리ì¼ì´ì
ìì ë http://caveatemptor.hibernate.org/ 를 ë³´ê³ http://caveatemptor.hibernate.org/ì ìë ë¤ë¥¸ íí 리ì¼ë¤ì ì´í´ë³´ë¼."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/session_api.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/session_api.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/session_api.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1225 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Working with objects"
+msgstr "ê°ì²´ë¤ë¡ ìì
í기"
+
+#: index.docbook:7
+msgid "Hibernate is a full object/relational mapping solution that not only shields the developer from the details of the underlying database management system, but also offers <emphasis>state management</emphasis> of objects. This is, contrary to the management of SQL <literal>statements</literal> in common JDBC/SQL persistence layers, a very natural object-oriented view of persistence in Java applications."
+msgstr "Hibernateë 기본 ë°ì´í°ë² ì´ì¤ ê´ë¦¬ ìì¤í
ì ìì¸ë¡ë¶í° ê°ë°ìë¤ì ìíìì¼ì¤ ë¿ë§ ìëë¼, ëí ê°ì²´ë¤ì ëí <emphasis>ìí ê´ë¦¬</emphasis>를 ì ê³µíë íëì ìì í ê°ì²´/ê´ê³í 매í ì루ì
ì´ë¤. ì´ê²ì ê³µíµì ì¸ JDBC/SQL ìì ê³ì¸µë¤ ë´ììì SQL <literal>문ì¥ë¤</literal>ì ëí ê´ë¦¬ìë ë°ëë¡, ìë° ì´í리ì¼ì´ì
ë¤ìì ììì ê´í ë§¤ì° ê³ ì í ê°ì²´-ì§í¥ì ê´ì ì´ë¤."
+
+#: index.docbook:16
+msgid "In other words, Hibernate application developers should always think about the <emphasis>state</emphasis> of their objects, and not necessarily about the execution of SQL statements. This part is taken care of by Hibernate and is only relevant for the application developer when tuning the performance of the system."
+msgstr "ë¬ë¦¬ ë§í´, Hibernate ì´í리ì¼ì´ì
ê°ë°ìë¤ì ê·¸ë¤ì ê°ì²´ë¤ì <emphasis>ìí</emphasis>ì ëí´ íì ìê°í´ì¼ íê³ , SQL 문ì¥ë¤ì ì¤íì ëí´ìë íìì ì´ì§ ìë¤. ì´ ë¶ë¶ì Hibernateì ìí´ ì²ë¦¬ëê³ ìì¤í
ì í¼í¬ë¨¼ì¤ë¥¼ íëí ë ì´í리ì¼ì´ì
ê°ë°ìì ì ì¼íê² ê´ë ¨ëë¤."
+
+#: index.docbook:24
+msgid "Hibernate object states"
+msgstr "Hibernate ê°ì²´ ìíë¤"
+
+#: index.docbook:26
+msgid "Hibernate defines and supports the following object states:"
+msgstr "Hibernate ë¤ì ê°ì²´ ìíë¤ì ì ìíê³ ì§ìíë¤:"
+
+#: index.docbook:32
+msgid "<emphasis>Transient</emphasis> - an object is transient if it has just been instantiated using the <literal>new</literal> operator, and it is not associated with a Hibernate <literal>Session</literal>. It has no persistent representation in the database and no identifier value has been assigned. Transient instances will be destroyed by the garbage collector if the application doesn't hold a reference anymore. Use the Hibernate <literal>Session</literal> to make an object persistent (and let Hibernate take care of the SQL statements that need to be executed for this transition)."
+msgstr "<emphasis>Transient</emphasis> - ë§ì¼ ê°ì²´ê° <literal>new</literal> ì°ì°ì를 ì¬ì©íì¬ ë°©ê¸ ì´ê¸°í ëìë¤ë©´ ê°ì²´ë transientì´ê³ , ê·¸ê²ì Hibernate <literal>Session</literal>ê³¼ ì°ê´ëì´ ìì§ ìë¤. ê·¸ê²ì ë°ì´í°ë² ì´ì¤ ë´ìì ìì íìì ê°ì§ ìê³ ìë³ì ê°ì´ í ë¹ëì§ ììë¤. ë§ì¼ ì´í리ì¼ì´ì
ì´ ë ì´ì 참조를 ìì íì§ ìì ê²½ì° transient ì¸ì¤í´ì¤ë¤ì ì°ë 기 ìì§ê¸°ì ìí´ íê´´ë ê²ì´ë¤. ê°ì²´ë¥¼ ììí ìí¤ëë° (ê·¸ë¦¬ê³ ì´ ì ì´(transition)ì ëí´ ì¤íë íìê° ìë SQL 문ì¥ë¤ì Hibernateë¡ íì¬ê¸ ì²ë¦¬íëë¡ íëë°) Hibernate <literal>Session</literal>ì ì¬ì©íë¼."
+
+#: index.docbook:44
+msgid "<emphasis>Persistent</emphasis> - a persistent instance has a representation in the database and an identifier value. It might just have been saved or loaded, however, it is by definition in the scope of a <literal>Session</literal>. Hibernate will detect any changes made to an object in persistent state and synchronize the state with the database when the unit of work completes. Developers don't execute manual <literal>UPDATE</literal> statements, or <literal>DELETE</literal> statements when an object should be made transient."
+msgstr "<emphasis>Persistent</emphasis> - íëì ìì ì¸ì¤í´ì¤ë ë°ì´í°ë² ì´ì¤ ë´ìì íëì íìì ê°ê³ íëì ìë³ì ê°ì ê°ëë¤. ê·¸ê²ì ë°©ê¸ ì ì¥ëìê±°ë ë¡ëëìì ì ìì§ë§, ì ìì ê·¸ê²ì <literal>Session</literal>ì ë²ì ë´ì ìë¤. Hibernateë ìì ìíìì ê°ì²´ì ëí´ íí´ì§ ììì ë³ê²½ë¤ì ê²ì¶í´ë¼ ê²ì´ê³ ë¨ì ìì
ì´ ìë£ë ë ê·¸ ìí를 ë°ì´í°ë² ì´ì¤ì ë기í ìí¬ ê²ì´ë¤. ê°ë°ìë¤ì íëì ê°ì²´ê° transientë¡ ëì´ì¼ í ë <literal>UPDATE</literal> 문ì¥ë¤ì´ë <literal>DELETE</literal> 문ì¥ë¤ì ììì
ì¼ë¡ ì¤ííì§ ìëë¤."
+
+#: index.docbook:55
+msgid "<emphasis>Detached</emphasis> - a detached instance is an object that has been persistent, but its <literal>Session</literal> has been closed. The reference to the object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be reattached to a new <literal>Session</literal> at a later point in time, making it (and all the modifications) persistent again. This feature enables a programming model for long running units of work that require user think-time. We call them <emphasis>application transactions</emphasis>, i.e. a unit of work from the point of view of the user."
+msgstr "<emphasis>Detached</emphasis> - íëì detached ì¸ì¤í´ì¤ë ììí ëìì§ë§, ê·¸ê²ì <literal>Session</literal>ì´ ë«íì§ ê°ì²´ì´ë¤. ë¬¼ë¡ ê·¸ ê°ì²´ì ëí 참조ë ì¬ì í ì í¨íê³ , ê·¸ detached ì¸ì¤í´ì¤ë ì´ ìíììë ë³ê²½ë ìë ìë¤. íëì detached ì¸ì¤í´ì¤ë ëì¤ì ê·¸ê²(ê³¼ 모ë ë³ê²½ë¤)ì ë¤ì ììí ìì¼ì ìë¡ì´ <literal>Session</literal>ì ë¤ì 첨ë¶ë ì ìë¤. ì´ í¹ì§ì ì¬ì©ìê° ìê°í ìê°ì íìë¡ íë ì¥ ê¸°ê° ì¤íëë ìì
ë¨ì를 ìí íë¡ê·¸ëë° ëª¨íì ê°ë¥íê² í´ì¤ë¤. ì°ë¦¬ë ê·¸ê²ë¤ì <emphasis>ì´í리ì¼ì´ì
í¸ëìì
ë¤</emphasis>, ì¦ ì¬ì©ìì ê´ì ì ìì
ë¨ìë¼ê³ ë¶ë¥¸ë¤."
+
+#: index.docbook:69
+msgid "We'll now discuss the states and state transitions (and the Hibernate methods that trigger a transition) in more detail."
+msgstr "ì´ì ì°ë¦¬ë ìíë¤ê³¼ ìí ì ì´(transition)ë¤(ê·¸ë¦¬ê³ ì ì´ë¥¼ í¸ë¦¬ê±° ìí¤ë Hibernate ë©ìëë¤)ì ìì¸íê² ë
¼ìí ê²ì´ë¤."
+
+#: index.docbook:77
+msgid "Making objects persistent"
+msgstr "ê°ì²´ë¤ì ììí ìí¤ê¸°"
+
+#: index.docbook:79
+msgid "Newly instantiated instances of a a persistent class are considered <emphasis>transient</emphasis> by Hibernate. We can make a transient instance <emphasis>persistent</emphasis> by associating it with a session:"
+msgstr "íëì ìì í´ëì¤ì ìë¡ì´ ì´ê¸°í ë ì¸ì¤í´ì¤ë¤ì Hibernateì ìí´ <emphasis>transient</emphasis>ë¡ ê°ì£¼ëë¤. ì°ë¦¬ë ê·¸ê²ì ì¸ì
ê³¼ ì°ê´ì§ì´ì transient ì¸ì¤í´ì¤ë¥¼ <emphasis>ììí</emphasis> ìí¬ ì ìë¤:"
+
+#: index.docbook:86
+msgid ""
+ "<![CDATA[DomesticCat fritz = new DomesticCat();\n"
+ "fritz.setColor(Color.GINGER);\n"
+ "fritz.setSex('M');\n"
+ "fritz.setName(\"Fritz\");\n"
+ "Long generatedId = (Long) sess.save(fritz);]]>"
+msgstr ""
+ "<![CDATA[DomesticCat fritz = new DomesticCat();\n"
+ "fritz.setColor(Color.GINGER);\n"
+ "fritz.setSex('M');\n"
+ "fritz.setName(\"Fritz\");\n"
+ "Long generatedId = (Long) sess.save(fritz);]]>"
+
+#: index.docbook:88
+msgid "If <literal>Cat</literal> has a generated identifier, the identifier is generated and assigned to the <literal>cat</literal> when <literal>save()</literal> is called. If <literal>Cat</literal> has an <literal>assigned</literal> identifier, or a composite key, the identifier should be assigned to the <literal>cat</literal> instance before calling <literal>save()</literal>. You may also use <literal>persist()</literal> instead of <literal>save()</literal>, with the semantics defined in the EJB3 early draft."
+msgstr "ë§ì¼ <literal>Cat</literal>ì´ ìì±ë ìë³ì를 ê°ì§ ê²½ì°, <literal>save()</literal>ê° í¸ì¶ë ë ê·¸ ìë³ìê° ìì±ëê³ <literal>cat</literal>ì í ë¹ëë¤. ë§ì¼ <literal>Cat</literal>ì´ íëì <literal>assigned</literal> ìë³ìë íëì composite key를 ê°ì§ ê²½ì°, <literal>save()</literal>를 í¸ì¶í기 ì ì ê·¸ ìë³ìê°<literal>cat</literal> ì¸ì¤í´ì¤ì í ë¹ë ê²ì´ë¤. ë¹ì ì ëí EJB3 ì´ê¸° ëëíí¸ìì ì ìë ìë¯¸ë¡ <literal>save()</literal> ëì <literal>persist()</literal>를 ì¬ì©í ìë ìë¤."
+
+#: index.docbook:100
+msgid "<literal>persist()</literal> makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. <literal>persist()</literal> also guarantees that it will not execute an <literal>INSERT</literal> statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context."
+msgstr "ë¤ë¥¸ ë°©ë²ì¼ë¡, ë¹ì ì <literal>save()</literal>ì ì¤ë²ë¡ëë ë²ì ì ì¬ì©íì¬ ìë³ì를 í ë¹í ì ìë¤."
+
+#: index.docbook:111
+msgid "<literal>save()</literal> does guarantee to return an identifier. If an INSERT has to be executed to get the identifier ( e.g. \"identity\" generator, not \"sequence\"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is problematic in a long-running conversation with an extended Session/persistence context."
+msgstr ""
+ "<![CDATA[DomesticCat pk = new DomesticCat();\n"
+ "pk.setColor(Color.TABBY);\n"
+ "pk.setSex('F');\n"
+ "pk.setName(\"PK\");\n"
+ "pk.setKittens( new HashSet() );\n"
+ "pk.addKitten(fritz);\n"
+ "sess.save( pk, new Long(1234) );]]>"
+
+#: index.docbook:121
+msgid "Alternatively, you may assign the identifier using an overloaded version of <literal>save()</literal>."
+msgstr "ë§ì¼ ë¹ì ì´ ììí ìí¤ë ê°ì²´ê° ì°ê´ë ê°ì²´ë¤(ì를 ë¤ë©´. ìì ìì ì ìë <literal>kittens</literal> ì½ë ì
)ì ê°ê³ ìë¤ë©´, ë¹ì ì´ íëì foreign í¤ ì»¬ë¼ì ëí´ íëì <literal>NOT NULL</literal> 컨ì¤í¸ë ì¸í¸ë¥¼ ê°ì§ ìë í, ì´ë¤ ê°ì²´ë¤ì ë¹ì ì´ ì¢ìíë ììì ììë¡ ììí ëìì ìë ìë¤. foreign í¤ ì»¨ì¤í¸ë ì¸í¸ë¤ì ìë°°íë ìíì±ì´ ê²°ì½ ì¡´ì¬íì§ ìëë¤. íì§ë§ ë¹ì ì´ ì못ë ììë¡ ê·¸ ê°ì²´ë¤ì <literal>save()</literal> ìí¬ ê²½ì° ë¹ì ì <literal>NOT NULL</literal> 컨ì¤í¸ë ì¸í¸ë¥¼ ìë°°í ìë ìë¤."
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[DomesticCat pk = new DomesticCat();\n"
+ "pk.setColor(Color.TABBY);\n"
+ "pk.setSex('F');\n"
+ "pk.setName(\"PK\");\n"
+ "pk.setKittens( new HashSet() );\n"
+ "pk.addKitten(fritz);\n"
+ "sess.save( pk, new Long(1234) );]]>"
+msgstr "ë¹ì ì´ ì°ê´ë ê°ì²´ë¤ì ìëì ì¼ë¡ ì ì¥ìí¤ëë° Hibernateì <emphasis>transitive persistence(ì ì´ ìì)</emphasis> í¹ì§ì ì¬ì©íë ê²ì ë§¤ì° ì¢ìí ê²ì´ë¯ë¡ ëê° ë¹ì ì ì´ ìì¸ë¥¼ ë´ë²ë ¤ëë¤. ê·¸ë <literal>NOT NULL</literal> 컨ì¤í¸ë ì¸í¸ ìë°°ë¤ì´ ë°ìëì§ ììì§ë¼ë - Hibernateë 모ë ê²ì ì²ë¦¬í ê²ì´ë¤. Transitive persistence(ì ì´ ìì)ì ì´ ì¥ìì íë°ë¶ìì ë
¼ìëë¤."
+
+#: index.docbook:128
+msgid "If the object you make persistent has associated objects (e.g. the <literal>kittens</literal> collection in the previous example), these objects may be made persistent in any order you like unless you have a <literal>NOT NULL</literal> constraint upon a foreign key column. There is never a risk of violating foreign key constraints. However, you might violate a <literal>NOT NULL</literal> constraint if you <literal>save()</literal> the objects in the wrong order."
+msgstr "ê°ì²´ë¥¼ ë¡ëìí¤ê¸°"
+
+#: index.docbook:138
+msgid "Usually you don't bother with this detail, as you'll very likely use Hibernate's <emphasis>transitive persistence</emphasis> feature to save the associated objects automatically. Then, even <literal>NOT NULL</literal> constraint violations don't occur - Hibernate will take care of everything. Transitive persistence is discussed later in this chapter."
+msgstr "<literal>Session</literal>ì <literal>load()</literal> ë©ìëë¤ì ë§ì¼ ë¹ì ì´ ê·¸ê²(ìì ì¸ì¤í´ì¤)ì ìë³ìë¤ì ì´ë¯¸ ìê³ ìì ê²½ì°ì ìì ì¸ì¤í´ì¤ë¥¼ ê²ìíë ë°©ë²ì ë¹ì ìê² ì ê³µíë¤. <literal>load()</literal>ë íëì í´ëì¤ ê°ì²´ë¥¼ ì·¨íê³ ê·¸ ìí를 ìì(persistent) ìíë¡ ê·¸ í´ëì¤ì ìë¡ì´ ì´ê¸°í ë ì¸ì¤í´ì¤ ìì¼ë¡ ë¡ëìí¬ ê²ì´ë¤."
+
+#: index.docbook:149
+msgid "Loading an object"
+msgstr "<![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]>"
+
+#: index.docbook:151
+msgid "The <literal>load()</literal> methods of <literal>Session</literal> gives you a way to retrieve a persistent instance if you already know its identifier. <literal>load()</literal> takes a class object and will load the state into a newly instantiated instance of that class, in persistent state."
+msgstr ""
+ "<![CDATA[// you need to wrap primitive identifiers\n"
+ "long id = 1234;\n"
+ "DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );]]>"
+
+#: index.docbook:158
+msgid "<![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]>"
+msgstr "ë¤ë¥¸ ë°©ë²ì¼ë¡ ë¹ì ì 주ì´ì§ ì¸ì¤í´ì¤ ìì¼ë¡ ìí를 ë¡ëìí¬ ì ìë¤:"
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[// you need to wrap primitive identifiers\n"
+ "long id = 1234;\n"
+ "DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );]]>"
+msgstr ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "// load pk's state into cat\n"
+ "sess.load( cat, new Long(pkId) );\n"
+ "Set kittens = cat.getKittens();]]>"
+
+#: index.docbook:162
+msgid "Alternatively, you can load state into a given instance:"
+msgstr "ë§ì¼ ì¼ì¹íë ë°ì´í°ë² ì´ì¤ íì´ ì¡´ì¬íì§ ìì ê²½ì°ì <literal>load()</literal>ê° unrecoverable(복구 ë¶ê°ë¥í) ìì¸ìí©ì ëì§ ê²ìì ë
¸í¸íë¼. ë§ì¼ í´ëì¤ê° íë½ì를 ê°ëë¡ ë§¤íë ê²½ì°, <literal>load()</literal>ë ì´ê¸°í ëì§ ìì íë½ì를 ë¨ì§ ë°ííê³ ë¹ì ì´ ê·¸ íë½ìì ë©ìë를 í¸ì¶í기 ì ê¹ì§ë ì¤ì ë¡ ë°ì´í°ë² ì´ì¤ì ì ìíì§ ìëë¤. ë¹ì ì´ ë°ì´í°ë² ì´ì¤ë¡ë¶í° ê°ì²´ì ëí ì°ê´ì ì¤ì ë¡ ë¡ëìí¤ì§ ìê³ ì ê°ì²´ì ëí ì°ê´ì ìì±ìí¤ê³ ì ìí ê²½ì°ì ì´ í¹ì§ì´ ë§¤ì° ì ì©íë¤. ë§ì¼ <literal>batch-size</literal>ê° class 매íì ì ìëë ê²½ì° ê·¸ê²ì ëí ë¤ì¤ ì¸ì¤í´ì¤ë¤ì´ íëì ë°°ì¹ë¡ì ë¡ëëë ê²ì íì©í´ì¤ë¤."
+
+#: index.docbook:166
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "// load pk's state into cat\n"
+ "sess.load( cat, new Long(pkId) );\n"
+ "Set kittens = cat.getKittens();]]>"
+msgstr "ë§ì¼ ë¹ì ì´ íëì ì¼ì¹íë íì´ ì¡´ì¬íëì§ë¥¼ íì í ì ìì ê²½ì°, ë¹ì ì <literal>get()</literal> ë©ìë를 ì¬ì©í´ì¼ íë¤. ê·¸ê²(<literal>get()</literal> ë©ìë)ë ë°ì´í°ë² ì´ì¤ì ì¦ì ì ìíê³ ë§ì¼ ì¼ì¹íë íì´ ìì ê²½ì° nullì ë°ííë¤."
+
+#: index.docbook:168
+msgid "Note that <literal>load()</literal> will throw an unrecoverable exception if there is no matching database row. If the class is mapped with a proxy, <literal>load()</literal> just returns an uninitialized proxy and does not actually hit the database until you invoke a method of the proxy. This behaviour is very useful if you wish to create an association to an object without actually loading it from the database. It also allows multiple instances to be loaded as a batch if <literal>batch-size</literal> is defined for the class mapping."
+msgstr ""
+ "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);\n"
+ "if (cat==null) {\n"
+ " cat = new Cat();\n"
+ " sess.save(cat, id);\n"
+ "}\n"
+ "return cat;]]>"
+
+#: index.docbook:179
+msgid "If you are not certain that a matching row exists, you should use the <literal>get()</literal> method, which hits the database immediately and returns null if there is no matching row."
+msgstr "ë¹ì ì íëì <literal>LockMode</literal>를 ì¬ì©íë, <literal>SELECT ... FOR UPDATE</literal>를 ì¬ì©íì¬ íëì ê°ì²´ë¥¼ ë¡ëìí¬ ìë ìë¤. ì¶ê° ì ë³´ë API 문ì를 ë³´ë¼."
+
+#: index.docbook:185
+msgid ""
+ "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);\n"
+ "if (cat==null) {\n"
+ " cat = new Cat();\n"
+ " sess.save(cat, id);\n"
+ "}\n"
+ "return cat;]]>"
+msgstr "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]>"
+
+#: index.docbook:187
+msgid "You may even load an object using an SQL <literal>SELECT ... FOR UPDATE</literal>, using a <literal>LockMode</literal>. See the API documentation for more information."
+msgstr "ì´ë¤ ì°ê´ë ì¸ì¤í´ì¤ë¤ì´ë í¬í¨ë ì½ë ì
ë¤ì ë¹ì ì´ ê·¸ ì°ê´ì ëí ì¼ì¤ì¼ì´ë ì¤íì¼ë¡ì <literal>lock</literal> ëë <literal>all</literal>ì ì§ì íëë¡ ê²°ì íì§ ìë í, <literal>FOR UPDATE</literal>ë¡ ì íëì§ ììì ë
¸í¸íë¼."
+
+#: index.docbook:192
+msgid "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]>"
+msgstr "<literal>refresh()</literal> ë©ìë를 ì¬ì©íì¬, ì무ëë íëì ê°ì²´ì 모ë ê·¸ê²ì ì½ë ì
ë¤ì ë¤ì ë¡ëìí¤ë ê²ì´ ê°ë¥íë¤. ë°ì´í°ë² ì´ì¤ í¸ë¦¬ê±°ë¤ì´ ê·¸ ê°ì²´ì íë¡í¼í°ë¤ ì¤ ì´ë¤ ê²ì ì´ê¸°í ìí¤ëë° ì¬ì©ë ë ì´ê²ì´ ì ì©íë¤."
+
+#: index.docbook:194
+msgid "Note that any associated instances or contained collections are <emphasis>not</emphasis> selected <literal>FOR UPDATE</literal>, unless you decide to specify <literal>lock</literal> or <literal>all</literal> as a cascade style for the association."
+msgstr ""
+ "<![CDATA[sess.save(cat);\n"
+ "sess.flush(); //force the SQL INSERT\n"
+ "sess.refresh(cat); //re-read the state (after the trigger executes)]]>"
+
+#: index.docbook:201
+msgid "It is possible to re-load an object and all its collections at any time, using the <literal>refresh()</literal> method. This is useful when database triggers are used to initialize some of the properties of the object."
+msgstr "ì¤ìí ì§ë¬¸ì´ ëê° ì´ ì§ì ìì ëíëë¤: Hibernateë ë°ì´í°ë² ì´ë¡ë¶í° ê·¸ê²ì ì¼ë§ë ë§ì´ ë¡ëìí¤ê³ ê·¸ë¦¬ê³ ì¼ë§ë ë§ì SQL <literal>SELECT</literal>ë¤ì´ ê·¸ê²ì ì¬ì©í ê²ì¸ê°? ì´ê²ì <emphasis>íì¹ ë°©ë</emphasis>ì ìì¡´íê³ <xref linkend=\"performance-fetching\"/>ì ì¤ëª
ëì´ ìë¤."
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[sess.save(cat);\n"
+ "sess.flush(); //force the SQL INSERT\n"
+ "sess.refresh(cat); //re-read the state (after the trigger executes)]]>"
+msgstr "ì§ìí기"
+
+#: index.docbook:209
+msgid "An important question usually appears at this point: How much does Hibernate load from the database and how many SQL <literal>SELECT</literal>s will it use? This depends on the <emphasis>fetching strategy</emphasis> and is explained in <xref linkend=\"performance-fetching\"/>."
+msgstr "ë§ì¼ ë¹ì ì´ ë¹ì ì´ ì°¾ê³ ìë ê°ì²´ë¤ì ëí ìë³ìë¤ì 모를 ê²½ì°, ë¹ì ì íëì ì§ì를 íìë¡ íë¤. Hibernateë ì¬ì©ì´ ì½ì§ë§ ê°ë ¥í ê°ì²´ ì§í¥ ì§ì ì¸ì´(HQL)를 ì§ìíë¤. íë¡ê·¸ë¨ ìì ì§ì ìì±ì ìí´, Hibernateë ì êµí Criteria ë° Example ì§ì í¹ì§(QBCì QBE)를 ì§ìíë¤. ë¹ì ì ëí ê°ì²´ë¤ë¡ì ê²°ê³¼ ì
ë³íì ìí ì íì ì¸ Hibernateì ì§ìì¼ë¡, ë¹ì ì ë°ì´í°ë² ì´ì¤ì native SQL ìì ë¹ì ì ì§ì를 ííí ìë ìë¤."
+
+#: index.docbook:219
+msgid "Querying"
+msgstr "ì§ìë¤ì ì¤íí기"
+
+#: index.docbook:221
+msgid "If you don't know the identifiers of the objects you are looking for, you need a query. Hibernate supports an easy-to-use but powerful object oriented query language (HQL). For programmatic query creation, Hibernate supports a sophisticated Criteria and Example query feature (QBC and QBE). You may also express your query in the native SQL of your database, with optional support from Hibernate for result set conversion into objects."
+msgstr "HQL ì§ìì native SQL ì§ìë <literal>org.hibernate.Query</literal>ì ì¸ì¤í´ì¤ë¡ ííëë¤. ì´ ì¸í°íì´ì¤ë íë¼ë¯¸í° ë°ì¸ë©, ê²°ê³¼ì
í¸ë¤ë§ì ìí, ê·¸ë¦¬ê³ ì¤ì ì§ìì ì¤íì ìí ë©ìëë¤ì ì ê³µíë¤. ë¹ì ì íì íì¬ <literal>Session</literal>ì ì¬ì©íì¬ íëì <literal>Query</literal>를 ì»ëë¤:"
+
+#: index.docbook:231
+msgid "Executing queries"
+msgstr ""
+ "<![CDATA[List cats = session.createQuery(\n"
+ " \"from Cat as cat where cat.birthdate < ?\")\n"
+ " .setDate(0, date)\n"
+ " .list();\n"
+ "\n"
+ "List mothers = session.createQuery(\n"
+ " \"select mother from Cat as cat join cat.mother as mother where cat.name = ?\")\n"
+ " .setString(0, name)\n"
+ " .list();\n"
+ "\n"
+ "List kittens = session.createQuery(\n"
+ " \"from Cat as cat where cat.mother = ?\")\n"
+ " .setEntity(0, pk)\n"
+ " .list();\n"
+ "\n"
+ "Cat mother = (Cat) session.createQuery(\n"
+ " \"select cat.mother from Cat as cat where cat = ?\")\n"
+ " .setEntity(0, izi)\n"
+ " .uniqueResult();]]\n"
+ "\n"
+ "Query mothersWithKittens = (Cat) session.createQuery(\n"
+ " \"select mother from Cat as mother left join fetch mother.kittens\");\n"
+ "Set uniqueMothers = new HashSet(mothersWithKittens.list());]]>"
+
+#: index.docbook:233
+msgid "HQL and native SQL queries are represented with an instance of <literal>org.hibernate.Query</literal>. This interface offers methods for parameter binding, result set handling, and for the execution of the actual query. You always obtain a <literal>Query</literal> using the current <literal>Session</literal>:"
+msgstr "íëì ì§ìë ëê° <literal>list()</literal>를 í¸ì¶íì¬ ì¤íëê³ , ì§ìì ê²°ê³¼ë ë©ëª¨ë¦¬ ë´ìì íëì ì½ë ì
ìì¼ë¡ ì ì²´ì ì¼ë¡ ë¡ëë ê²ì´ë¤. íëì ì§ìì ìí´ ê²ìë ìí°í° ì¸ì¤í´ì¤ë¤ì ìì(persistent) ìíì ìë¤. ë¹ì ì ì§ìê° íëì ê°ì²´ë¥¼ ì¤ì§ ë°íí ê²ìì ë¹ì ì´ ìê³ ìì ê²½ì°ì <literal>uniqueResult()</literal> ë©ìëë ë¨ì¶ì ì ê³µíë¤. ì½ë ì
ë¤ì ëí´ eager íì¹ì ì¬ì©íë ì§ìë¤ì ëê° (ê·¸ê²ë¤ì ì´ê¸°íë ì½ë ì
ë¤ì ê°ì§) ë£¨í¸ ê°ì²´ë¤ì ëí ì¤ë³µë¤ì ëê° ë°ííë¤. ë¹ì ì <literal>Set</literal>ì íµí´ ì´ë¤ ì¤ë³µë¤ì ê°ë¨íê² íí°ë§í ì ìë¤."
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[List cats = session.createQuery(\n"
+ " \"from Cat as cat where cat.birthdate < ?\")\n"
+ " .setDate(0, date)\n"
+ " .list();\n"
+ "\n"
+ "List mothers = session.createQuery(\n"
+ " \"select mother from Cat as cat join cat.mother as mother where cat.name = ?\")\n"
+ " .setString(0, name)\n"
+ " .list();\n"
+ "\n"
+ "List kittens = session.createQuery(\n"
+ " \"from Cat as cat where cat.mother = ?\")\n"
+ " .setEntity(0, pk)\n"
+ " .list();\n"
+ "\n"
+ "Cat mother = (Cat) session.createQuery(\n"
+ " \"select cat.mother from Cat as cat where cat = ?\")\n"
+ " .setEntity(0, izi)\n"
+ " .uniqueResult();]]\n"
+ "\n"
+ "Query mothersWithKittens = (Cat) session.createQuery(\n"
+ " \"select mother from Cat as mother left join fetch mother.kittens\");\n"
+ "Set uniqueMothers = new HashSet(mothersWithKittens.list());]]>"
+msgstr "ê²°ê³¼ë¤ì ë°ë³µí기"
+
+#: index.docbook:242
+msgid "A query is usually executed by invoking <literal>list()</literal>, the result of the query will be loaded completely into a collection in memory. Entity instances retrieved by a query are in persistent state. The <literal>uniqueResult()</literal> method offers a shortcut if you know your query will only return a single object. Note that queries that make use of eager fetching of collections usually return duplicates of the root objects (but with their collections initialized). You can filter these duplicates simply through a <literal>Set</literal>."
+msgstr "ì¢
ì¢
, ë¹ì ì <literal>iterate()</literal> ë©ìë를 ì¬ì©íì¬ ì§ì를 ì¤íí¨ì¼ë¡ì¨ ë ëì í¼í¬ë¨¼ì¤ë¥¼ ì±ì·¨íë ê²ì´ ê°ë¥í ì ìë¤. ì´ê²ì ì¤ì§ ëê° ì§ìì ìí´ ë°íëë ì¤ì ìí°í° ì¸ì¤í´ì¤ë¤ì´ ì´ë¯¸ ì¸ì
ë´ì ìê±°ë second-level ìºì ë´ì ìì ê²ìì ë¹ì ì´ ììíë ê²½ì°ì¼ ê²ì´ë¤. ë§ì¼ ê·¸ê²ë¤ì´ ì´ë¯¸ ìºìëì§ ììë¤ë©´, <literal>iterate()</literal>ë <literal>list()</literal> ë³´ë¤ ë ë릴 ê²ì´ê³ ê°ë¨í ì§ìì ëí´ ë§ì ë°ì´í°ë² ì´ì¤ ì ìë¤ì, ëê° ì¤ì§ ìë³ìë¤ì ë°ííë ì´ê¸° selectì ëí´ <emphasis>1</emphasis>ë²ì ì ìê³¼ ì¤ì ì¸ì¤í´ì¤ë¤ì ì´ê¸°í ìí¤ë ì¶ê°ì ì¸ selectë¤ì ëí´ <emphasis>n</emphasis> ë²ì ì ìì íìë¡ í ì ìë¤."
+
+#: index.docbook:254
+msgid "Iterating results"
+msgstr ""
+ "<![CDATA[// fetch ids\n"
+ "Iterator iter = sess.createQuery(\"from eg.Qux q order by q.likeliness\").iterate();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Qux qux = (Qux) iter.next(); // fetch the object\n"
+ " // something we couldnt express in the query\n"
+ " if ( qux.calculateComplicatedAlgorithm() ) {\n"
+ " // delete the current instance\n"
+ " iter.remove();\n"
+ " // dont need to process the rest\n"
+ " break;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:256
+msgid "Occasionally, you might be able to achieve better performance by executing the query using the <literal>iterate()</literal> method. This will only usually be the case if you expect that the actual entity instances returned by the query will already be in the session or second-level cache. If they are not already cached, <literal>iterate()</literal> will be slower than <literal>list()</literal> and might require many database hits for a simple query, usually <emphasis>1</emphasis> for the initial select which only returns identifiers, and <emphasis>n</emphasis> additional selects to initialize the actual instances."
+msgstr "ííë¤ì ë°ííë ì§ìë¤"
+
+#: index.docbook:268
+msgid ""
+ "<![CDATA[// fetch ids\n"
+ "Iterator iter = sess.createQuery(\"from eg.Qux q order by q.likeliness\").iterate();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Qux qux = (Qux) iter.next(); // fetch the object\n"
+ " // something we couldnt express in the query\n"
+ " if ( qux.calculateComplicatedAlgorithm() ) {\n"
+ " // delete the current instance\n"
+ " iter.remove();\n"
+ " // dont need to process the rest\n"
+ " break;\n"
+ " }\n"
+ "}]]>"
+msgstr "Hibernate ì§ìë¤ì ëëë¡ ê°ì²´ë¤ì ííë¤ì ë°ííê³ , ê·¸ ê²½ì°ì ê°ê°ì ííì ë°°ì´ë¡ì ë°íëë¤:"
+
+#: index.docbook:272
+msgid "Queries that return tuples"
+msgstr ""
+ "<![CDATA[Iterator kittensAndMothers = sess.createQuery(\n"
+ " \"select kitten, mother from Cat kitten join kitten.mother mother\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( kittensAndMothers.hasNext() ) {\n"
+ " Object[] tuple = (Object[]) kittensAndMothers.next();\n"
+ " Cat kitten = (Cat) tuple[0];
+\n"
+ " Cat mother = (Cat) tuple[1];
+\n"
+ " ....\n"
+ "}]]>"
+
+#: index.docbook:274
+msgid "Hibernate queries sometimes return tuples of objects, in which case each tuple is returned as an array:"
+msgstr "ì¤ì¹¼ë¼ ê²°ê³¼ë¤"
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Iterator kittensAndMothers = sess.createQuery(\n"
+ " \"select kitten, mother from Cat kitten join kitten.mother mother\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( kittensAndMothers.hasNext() ) {\n"
+ " Object[] tuple = (Object[]) kittensAndMothers.next();\n"
+ " Cat kitten = (Cat) tuple[0];\n"
+ " Cat mother = (Cat) tuple[1];\n"
+ " ....\n"
+ "}]]>"
+msgstr "ì§ìë¤ì <literal>select</literal> ì ë´ì íëì í´ëì¤ì ëí íëì íë¡í¼í°ë¥¼ ì§ì í ì ìë¤. ê·¸ê²ë¤ì ì¬ì§ì´ SQL ì§ê³ í¨ìë¤ì í¸ì¶í ìë ìë¤. íë¡í¼í°ë¤ì´ë aggregateë¤ì \"ì¤ì¹¼ë¼\" ê²°ê³¼ë¤(ê·¸ë¦¬ê³ ìì ìíì ìë ìí°í°ë¤ì´ ìë ê²ì¼)ë¡ ê°ì£¼ëë¤."
+
+#: index.docbook:284
+msgid "Scalar results"
+msgstr ""
+ "<![CDATA[Iterator results = sess.createQuery(\n"
+ " \"select cat.color, min(cat.birthdate), count(cat) from Cat cat \" +\n"
+ " \"group by cat.color\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( results.hasNext() ) {\n"
+ " Object[] row = (Object[]) results.next();\n"
+ " Color type = (Color) row[0];\n"
+ " Date oldest = (Date) row[1];\n"
+ " Integer count = (Integer) row[2];\n"
+ " .....\n"
+ "}]]>"
+
+#: index.docbook:286
+msgid "Queries may specify a property of a class in the <literal>select</literal> clause. They may even call SQL aggregate functions. Properties or aggregates are considered \"scalar\" results (and not entities in persistent state)."
+msgstr "ë°ì¸ë íë¼ë¯¸í°ë¤"
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[Iterator results = sess.createQuery(\n"
+ " \"select cat.color, min(cat.birthdate), count(cat) from Cat cat \" +\n"
+ " \"group by cat.color\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( results.hasNext() ) {\n"
+ " Object[] row = (Object[]) results.next();\n"
+ " Color type = (Color) row[0];\n"
+ " Date oldest = (Date) row[1];\n"
+ " Integer count = (Integer) row[2];\n"
+ " .....\n"
+ "}]]>"
+msgstr "<literal>Query</literal> ìì ë©ìëë¤ì ëª
ëª
ë íë¼ë¯¸í°ë¤ ëë JDBC-ì¤íì¼ì <literal>?</literal> íë¼ë¯¸í°ë¤ì ë°ì¸ë© ê°ë¤ì ì ê³µíë¤. <emphasis>JDBCìë ëì¡°ì ì¼ë¡, Hibernate ì«ì íë¼ë¯¸í°ë¤ì 0ìì ììëë¤.</emphasis> ëª
ëª
ë íë¼ë¯¸í°ë¤ì ì§ì 문ìì´ ììì <literal>:name</literal> íìì ìë³ìë¤ì´ë¤. ëª
ëª
ë íë¼ë¯¸í°ë¤ì ì¥ì ë¤ì ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:297
+msgid "Bind parameters"
+msgstr "ëª
ëª
ë íë¼ë¯¸í°ë¤ì ê·¸ê²ë¤ì´ ì§ì 문ìì´ ë´ì ë°ìíë ììì ê´ê³ìë¤"
+
+#: index.docbook:299
+msgid "Methods on <literal>Query</literal> are provided for binding values to named parameters or JDBC-style <literal>?</literal> parameters. <emphasis>Contrary to JDBC, Hibernate numbers parameters from zero.</emphasis> Named parameters are identifiers of the form <literal>:name</literal> in the query string. The advantages of named parameters are:"
+msgstr "ê·¸ê²ë¤ì ëì¼í ì§ì ë´ìì ì¬ë¬ ë² ë°ìí ì ìë¤"
+
+#: index.docbook:309
+msgid "named parameters are insensitive to the order they occur in the query string"
+msgstr "ê·¸ê²ì ì기-ì¤ëª
ì ì´ë¤"
+
+#: index.docbook:315
+msgid "they may occur multiple times in the same query"
+msgstr ""
+ "<![CDATA[//named parameter (preferred)\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = :name\");\n"
+ "q.setString(\"name\", \"Fritz\");\n"
+ "Iterator cats = q.iterate();]]>"
+
+#: index.docbook:320
+msgid "they are self-documenting"
+msgstr ""
+ "<![CDATA[//positional parameter\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = ?\");\n"
+ "q.setString(0, \"Izi\");\n"
+ "Iterator cats = q.iterate();]]>"
+
+#: index.docbook:326
+msgid ""
+ "<![CDATA[//named parameter (preferred)\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = :name\");\n"
+ "q.setString(\"name\", \"Fritz\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr ""
+ "<![CDATA[//named parameter list\n"
+ "List names = new ArrayList();\n"
+ "names.add(\"Izi\");\n"
+ "names.add(\"Fritz\");\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name in (:namesList)\");\n"
+ "q.setParameterList(\"namesList\", names);\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:328
+msgid ""
+ "<![CDATA[//positional parameter\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = ?\");\n"
+ "q.setString(0, \"Izi\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr "<title>쪽매ê¹</title>"
+
+#: index.docbook:330
+msgid ""
+ "<![CDATA[//named parameter list\n"
+ "List names = new ArrayList();\n"
+ "names.add(\"Izi\");\n"
+ "names.add(\"Fritz\");\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name in (:namesList)\");\n"
+ "q.setParameterList(\"namesList\", names);\n"
+ "List cats = q.list();]]>"
+msgstr "ë§ì¼ ë¹ì ì´ ë¹ì ì ê²°ê³¼ ì
ì ê²½ê³(ë¹ì ì´ ê²ìíê³ ì ìíë ìµë ê°ì ê·¸ë¦¬ê³ /ëë ë¹ì ì´ ê²ìíê³ ì ìíë 첫 ë²ì§¸ í)ì ì§ì í íìê° ìë¤ë©´ ë¹ì ì <literal>Query</literal> ì¸í°íì´ì¤ì ë©ìëë¤ì ì¬ì©í´ì¼ íë¤:"
+
+#: index.docbook:335
+msgid "Pagination"
+msgstr ""
+ "<![CDATA[Query q = sess.createQuery(\"from DomesticCat cat\");\n"
+ "q.setFirstResult(20);\n"
+ "q.setMaxResults(10);\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:337
+msgid "If you need to specify bounds upon your result set (the maximum number of rows you want to retrieve and / or the first row you want to retrieve) you should use methods of the <literal>Query</literal> interface:"
+msgstr "Hibernateë ì´ limit ì§ì를 ë¹ì ì DBMSì native SQLë¡ ë²ìíë ë°©ë²ì ìê³ ìë¤."
+
+#: index.docbook:343
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"from DomesticCat cat\");\n"
+ "q.setFirstResult(20);\n"
+ "q.setMaxResults(10);\n"
+ "List cats = q.list();]]>"
+msgstr "ì¤í¬ë¡¤ ê°ë¥í iteration"
+
+#: index.docbook:345
+msgid "Hibernate knows how to translate this limit query into the native SQL of your DBMS."
+msgstr "ë¹ì ì JDBC ëë¼ì´ë²ê° ì¤í¬ë¡¤ ê°ë¥í <literal>ResultSet</literal>ë¤ì ì§ìí ê²½ì°, <literal>Query</literal> ì¸í°íì´ì¤ë <literal>ScrollableResults</literal> ê°ì²´ë¥¼ ì»ëë° ì¬ì©ë ì ìê³ , ê·¸ê²ì ì§ì ê²°ê³¼ë¤ì ëí ì ì°í ë¤ë¹ê²ì´ì
ì íì©í´ì¤ë¤."
+
+#: index.docbook:353
+msgid "Scrollable iteration"
+msgstr ""
+ "<![CDATA[Query q = sess.createQuery(\"select cat.name, cat from DomesticCat cat \" +\n"
+ " \"order by cat.name\");\n"
+ "ScrollableResults cats = q.scroll();\n"
+ "if ( cats.first() ) {\n"
+ "\n"
+ " // find the first name on each page of an alphabetical list of cats by name\n"
+ " firstNamesOfPages = new ArrayList();\n"
+ " do {\n"
+ " String name = cats.getString(0);\n"
+ " firstNamesOfPages.add(name);\n"
+ " }\n"
+ " while ( cats.scroll(PAGE_SIZE) );\n"
+ "\n"
+ " // Now get the first page of cats\n"
+ " pageOfCats = new ArrayList();\n"
+ " cats.beforeFirst();\n"
+ " int i=0;\n"
+ " while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );\n"
+ "\n"
+ "}\n"
+ "cats.close()]]>"
+
+#: index.docbook:355
+msgid "If your JDBC driver supports scrollable <literal>ResultSet</literal>s, the <literal>Query</literal> interface may be used to obtain a <literal>ScrollableResults</literal> object, which allows flexible navigation of the query results."
+msgstr "ì´ë ¤ì§ ë°ì´í°ë² ì´ì¤ 커ë¥ì
(ê³¼ 커ì)ê° ì´ ê¸°ë¥ì íìí¨ì ë
¸í¸íê³ , ë§ì¼ ë¹ì ì´ ìª½ë§¤ê¹ ê¸°ë¥ì ìëìí¬ íìê° ìë¤ë©´ <literal>setMaxResult()</literal>/<literal>setFirstResult()</literal>를 ì¬ì©íë¼."
+
+#: index.docbook:362
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"select cat.name, cat from DomesticCat cat \" +\n"
+ " \"order by cat.name\");\n"
+ "ScrollableResults cats = q.scroll();\n"
+ "if ( cats.first() ) {\n"
+ "\n"
+ " // find the first name on each page of an alphabetical list of cats by name\n"
+ " firstNamesOfPages = new ArrayList();\n"
+ " do {\n"
+ " String name = cats.getString(0);\n"
+ " firstNamesOfPages.add(name);\n"
+ " }\n"
+ " while ( cats.scroll(PAGE_SIZE) );\n"
+ "\n"
+ " // Now get the first page of cats\n"
+ " pageOfCats = new ArrayList();\n"
+ " cats.beforeFirst();\n"
+ " int i=0;\n"
+ " while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );\n"
+ "\n"
+ "}\n"
+ "cats.close()]]>"
+msgstr "ëª
ëª
ë ì§ìë¤ì 구체í ìí¤ê¸°"
+
+#: index.docbook:364
+msgid "Note that an open database connection (and cursor) is required for this functionality, use <literal>setMaxResult()</literal>/<literal>setFirstResult()</literal> if you need offline pagination functionality."
+msgstr "ë¹ì ì ëí 매í 문ì ìì ëª
ëª
ë ì§ìë¤ì ì ìí ì ìë¤.(ë§ì¼ ë¹ì ì ì§ìê° ë§í¬ì
ì¼ë¡ì í´ìë ì ìë 문ìë¤ì í¬í¨í ê²½ì°ì <literal>CDATA</literal> ì¹ì
ì ì¬ì©íë ê²ì 기ìµíë¼))"
+
+#: index.docbook:373
+msgid "Externalizing named queries"
+msgstr ""
+ "<![CDATA[<query name=\"ByNameAndMaximumWeight\"><![CDATA[\n"
+ " from eg.DomesticCat as cat\n"
+ " where cat.name = ?\n"
+ " and cat.weight > ?\n"
+ "] ]></query>]]>"
+
+#: index.docbook:375
+msgid "You may also define named queries in the mapping document. (Remember to use a <literal>CDATA</literal> section if your query contains characters that could be interpreted as markup.)"
+msgstr "íë¼ë¯¸í° ë°ì¸ë©ê³¼ ì¤íì íë¡ê·¸ë¨ ìì¼ë¡ íí´ì§ë¤:"
+
+#: index.docbook:381
+msgid ""
+ "<![CDATA[<query name=\"ByNameAndMaximumWeight\"><![CDATA[\n"
+ " from eg.DomesticCat as cat\n"
+ " where cat.name = ?\n"
+ " and cat.weight > ?\n"
+ "] ]></query>]]>"
+msgstr ""
+ "<![CDATA[Query q = sess.getNamedQuery(\"ByNameAndMaximumWeight\");\n"
+ "q.setString(0, name);\n"
+ "q.setInt(1, minWeight);\n"
+ "List cats = q.list();]]>"
+
+#: index.docbook:383
+msgid "Parameter binding and executing is done programatically:"
+msgstr "ì¤ì íë¡ê·¸ë¨ ì½ëë ì¬ì©ëë ì§ì ì¸ì´ì ë
립ì ì´ê³ , ë¹ì ì ëí ë©íë°ì´í°ë¡ native SQL ì§ìë¤ì ì ìí ìë ìê±°ë ê·¸ê²ë¤ì 매í íì¼ë¤ ìì 기존 ì§ìë¤ì ìì¹ì§ìì¼ë¡ì¨ 기존 ì§ìë¤ì Hibernateë¡ ì´ì ìí¬ ìë ììì ë
¸í¸íë¼."
+
+#: index.docbook:387
+msgid ""
+ "<![CDATA[Query q = sess.getNamedQuery(\"ByNameAndMaximumWeight\");\n"
+ "q.setString(0, name);\n"
+ "q.setInt(1, minWeight);\n"
+ "List cats = q.list();]]>"
+msgstr "ëí <literal><hibernate-mapping></literal> ìì ë´ìì íëì ì§ì ì ì¸ì ê·¸ ì§ìì ëí ì ì ì ì¼ ì´ë¦ì íìë¡ íê³ , ë°ë©´ì <literal><class></literal> ìì ë´ììì ì§ì ì ì¸ì í´ëì¤ ì´ë¦ì¼ë¡ ìì§ëì´ë¦ì 첨ê°íì¬ ìëì ì¼ë¡ ì ì¼íê² ë§ë¤ì´ì§ë¤. ì를 ë¤ì´ <literal>eg.Cat.ByNameAndMaximumWeight</literal>."
+
+#: index.docbook:389
+msgid "Note that the actual program code is independent of the query language that is used, you may also define native SQL queries in metadata, or migrate existing queries to Hibernate by placing them in mapping files."
+msgstr "ì½ë ì
ë¤ì íí°ë§ í기"
+
+#: index.docbook:395
+msgid "Also note that a query declaration inside a <literal><hibernate-mapping></literal> element requires a global unique name for the query, while a query declaration inside a <literal><class></literal> element is made unique automatically by prepending the fully qualified name of the class, for example <literal>eg.Cat.ByNameAndMaximumWeight</literal>."
+msgstr "ì½ë ì
<emphasis>íí°</emphasis>ë ìì ì½ë ì
ëë ë°°ì´ì ì ì©ë ì ìë ì§ìì í¹ë³í íì
ì´ë¤. ì§ì 문ìì´ì íì¬ì ì½ë ì
ìì를 ì미íë <literal>this</literal>를 참조í ì ìë¤."
+
+#: index.docbook:408
+msgid "Filtering collections"
+msgstr ""
+ "<![CDATA[Collection blackKittens = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"where this.color = ?\")\n"
+ " .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )\n"
+ " .list()\n"
+ ");]]>"
+
+#: index.docbook:409
+msgid "A collection <emphasis>filter</emphasis> is a special type of query that may be applied to a persistent collection or array. The query string may refer to <literal>this</literal>, meaning the current collection element."
+msgstr "ë°íëë ì½ë ì
ì íëì bagì¼ë¡ ê°ì£¼ëê³ , ê·¸ê²ì 주ì´ì§ ì½ë ì
ì ëí ì¬ë³¸ì´ë¤. ìëì ì½ë ì
ì ë³ê²½ëì§ ìëë¤ (ì´ê²ì ì´ë¦ \"filter\"ì ì미ìë ì ë°ëì´ì§ë§, ììëë íìì ì¼ì¹ëë¤)."
+
+#: index.docbook:415
+msgid ""
+ "<![CDATA[Collection blackKittens = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"where this.color = ?\")\n"
+ " .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )\n"
+ " .list()\n"
+ ");]]>"
+msgstr "íí°ë¤ì <literal>from</literal> ì ì íìë¡ íì§ ììì ê´ì°°íë¼(íìí ê²½ì°ì íí°ë¤ì´ í ê°ì from ì ì ê°ì§ ì ììì§ë¼ë). íí°ë¤ì ì½ë ì
ììë¤ ìì²´ë¤ì ë°ííë ê²ì¼ë¡ íì ëì§ ìëë¤."
+
+#: index.docbook:417
+msgid "The returned collection is considered a bag, and it's a copy of the given collection. The original collection is not modified (this is contrary to the implication of the name \"filter\", but consistent with expected behavior)."
+msgstr ""
+ "<![CDATA[Collection blackKittenMates = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"select this.mate where this.color = eg.Color.BLACK.intValue\")\n"
+ " .list();]]>"
+
+#: index.docbook:423
+msgid "Observe that filters do not require a <literal>from</literal> clause (though they may have one if required). Filters are not limited to returning the collection elements themselves."
+msgstr "ì¬ì§ì´ íëì 공백ì íí° ì§ìë ì를 ë¤ì´ ê±°ëí ì½ë ì
ë´ì ìë ììë¤ì ë¶ë¶ì§í©ë¤ì ë¡ëìí¤ëë° ì ì©íë¤:"
+
+#: index.docbook:428
+msgid ""
+ "<![CDATA[Collection blackKittenMates = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"select this.mate where this.color = eg.Color.BLACK.intValue\")\n"
+ " .list();]]>"
+msgstr ""
+ "<![CDATA[Collection tenKittens = session.createFilter(\n"
+ " mother.getKittens(), \"\")\n"
+ " .setFirstResult(0).setMaxResults(10)\n"
+ " .list();]]>"
+
+#: index.docbook:430
+msgid "Even an empty filter query is useful, e.g. to load a subset of elements in a huge collection:"
+msgstr "Criteria ì§ìë¤"
+
+#: index.docbook:435
+msgid ""
+ "<![CDATA[Collection tenKittens = session.createFilter(\n"
+ " mother.getKittens(), \"\")\n"
+ " .setFirstResult(0).setMaxResults(10)\n"
+ " .list();]]>"
+msgstr "HQLì ê·¹í ê°ë ¥íì§ë§ ëªëª ê°ë°ìë¤ì ì§ì 문ìì´ë¤ì ë¹ëí기 ë³´ë¤, ê°ì²´ ì§í¥ API를 ì¬ì©íì¬ ëì ì¼ë¡ ì§ìë¤ì ë¹ëìí¤ë ê²ì ì í¸íë¤. Hibernateë ì´ë¤ ê²½ì°ë¤ì ìí ì§ê´ì ì¸ <literal>Criteria</literal> query API를 ì ê³µíë¤:"
+
+#: index.docbook:440
+msgid "Criteria queries"
+msgstr ""
+ "<![CDATA[Criteria crit = session.createCriteria(Cat.class);\n"
+ "crit.add( Restrictions.eq( \"color\", eg.Color.BLACK ) );\n"
+ "crit.setMaxResults(10);\n"
+ "List cats = crit.list();]]>"
+
+#: index.docbook:442
+msgid "HQL is extremely powerful but some developers prefer to build queries dynamically, using an object-oriented API, rather than building query strings. Hibernate provides an intuitive <literal>Criteria</literal> query API for these cases:"
+msgstr "<literal>Criteria</literal>ì ì°ê´ë <literal>Example</literal> API ë <xref linkend=\"querycriteria\"/>ìì ìì¸íê² ë
¼ìëë¤."
+
+#: index.docbook:448
+msgid ""
+ "<![CDATA[Criteria crit = session.createCriteria(Cat.class);\n"
+ "crit.add( Restrictions.eq( \"color\", eg.Color.BLACK ) );\n"
+ "crit.setMaxResults(10);\n"
+ "List cats = crit.list();]]>"
+msgstr "native SQLìì ì§ìë¤"
+
+#: index.docbook:450
+msgid "The <literal>Criteria</literal> and the associated <literal>Example</literal> API are discussed in more detail in <xref linkend=\"querycriteria\"/>."
+msgstr "ë¹ì ì <literal>createSQLQuery()</literal>를 ì¬ì©íì¬ SQL ìì íëì ì§ì를 ííí ì ìê³ , Hibernateë¡ íì¬ê¸ ê²°ê³¼ ì
ë¤ë¡ë¶í° ê°ì²´ë¤ë¡ì 매íì ì²ë¦¬íëë¡ í ìë ìë¤. ë¹ì ì ì무ëë <literal>session.connection()</literal>ì í¸ì¶í ì ìê³ ì§ì JDBC <literal>Connection</literal>ì ì¬ì©í ì ììì ë
¸í¸íë¼. ë§ì¼ ë¹ì ì´ Hibernate API를 ì¬ì©íê³ ì ì íí ê²½ì°ì , ë¹ì ì SQL aliasë¤ì ì¤ê´í¸ë¤ ìì í¬í¨ìì¼ì¼ íë¤:"
+
+#: index.docbook:458
+msgid "Queries in native SQL"
+msgstr ""
+ "<![CDATA[List cats = session.createSQLQuery(\"SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10\")
+\n"
+ " .addEntity(\"cat\", Cat.class)
+\n"
+ ".list();]]>"
+
+#: index.docbook:460
+msgid "You may express a query in SQL, using <literal>createSQLQuery()</literal> and let Hibernate take care of the mapping from result sets to objects. Note that you may at any time call <literal>session.connection()</literal> and use the JDBC <literal>Connection</literal> directly. If you chose to use the Hibernate API, you must enclose SQL aliases in braces:"
+msgstr ""
+ "<![CDATA[List cats = session.createSQLQuery(
+\n"
+ " \"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, \" +
+\n"
+ " \"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... \" +
+\n"
+ " \"FROM CAT {cat} WHERE ROWNUM<10\")
+\n"
+ " .addEntity(\"cat\", Cat.class)
+\n"
+ ".list()]]>"
+
+#: index.docbook:468
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\"SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list();]]>"
+msgstr "SQL ì§ìë¤ì Hibernate ì§ìë¤ì²ë¼ ëª
ëª
ë íë¼ë¯¸í°ë¤ê³¼ ìì¹ íë¼ë¯¸í°ë¤ì í¬í¨í ìë ìë¤. SQL ì§ìë¤ì ëí ì¶ê° ì ë³´ë <xref linkend=\"querysql\"/>ìì ì°¾ì ì ìë¤."
+
+#: index.docbook:470
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\n"
+ " \"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, \" +\n"
+ " \"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... \" +\n"
+ " \"FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list()]]>"
+msgstr "ìì ê°ì²´ë¤ì ë³ê²½í기"
+
+#: index.docbook:472
+msgid "SQL queries may contain named and positional parameters, just like Hibernate queries. More information about native SQL queries in Hibernate can be found in <xref linkend=\"querysql\"/>."
+msgstr "<emphasis>í¸ëìì
ìì ìì ì¸ì¤í´ì¤ë¤</emphasis> (ì를ë¤ë©´. <literal>Session</literal>ì ìí´ ë¡ëëê³ , ì ì¥ëê³ , ìì±ëê±°ë ì§ìë ê°ì²´ë¤)ì ì´í리ì¼ì´ì
ì ìí´ ì²ë¦¬ë ì ìê³ ìì ìíì ëí ììì ë³ê²½ë¤ì <literal>Session</literal>ì´ <emphasis>flushë </emphasis> ë ììí ë ê²ì´ë¤(ì´ ì¥ì ë· ë¶ë¶ìì ë
¼ìë¨). ë¹ì ì ë³ê²½ë¤ì ììí ìí¤ê¸° ìí´ (ë¤ë¥¸ ì©ë를 ê°ì§ <literal>update()</literal>ì ê°ì) í¹ë³í ë©ìë를 í¸ì¶í íìê° ìë¤. ë°ë¼ì ê°ì²´ì ìí를 ì
ë°ì´í¸ ìí¤ë ê°ì¥ ê°ë¨í ë°©ë²ì <literal>Session</literal>ì´ ì´ë ¤ ìë ëì, ê·¸ê²ì <literal>load()</literal>ìí¤ê³ ëì, ê·¸ê²ì ì§ì ì²ë¦¬íë ê²ì´ë¤:"
+
+#: index.docbook:483
+msgid "Modifying persistent objects"
+msgstr ""
+ "<![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );\n"
+ "cat.setName(\"PK\");\n"
+ "sess.flush(); // changes to cat are automatically detected and persisted]]>"
+
+#: index.docbook:485
+msgid "<emphasis>Transactional persistent instances</emphasis> (ie. objects loaded, saved, created or queried by the <literal>Session</literal>) may be manipulated by the application and any changes to persistent state will be persisted when the <literal>Session</literal> is <emphasis>flushed</emphasis> (discussed later in this chapter). There is no need to call a particular method (like <literal>update()</literal>, which has a different purpose) to make your modifications persistent. So the most straightforward way to update the state of an object is to <literal>load()</literal> it, and then manipulate it directly, while the <literal>Session</literal> is open:"
+msgstr "ëëë¡ ì´ íë¡ê·¸ëë° ëª¨íì ë¶ì¶©ë¶íë¤. ìëíë©´ ê·¸ê²ì ëì¼í ì¸ì
ë´ìì (ê°ì²´ë¥¼ ë¡ëìí¤ë) SQL <literal>SELECT</literal>ì (ê·¸ê²ì ì
ë°ì´í¸ë ìí를 ììí ìí¤ë) SQL <literal>UPDATE</literal> ìì를 íìë¡ í ê²ì´ê¸° ë문ì´ë¤. ê·¸ë¬ë¯ë¡ Hibernateë detached ì¸ì¤í´ì¤ë¤ì ì¬ì©íë ëìì ì¸ ì ê·¼ë²ì ì ê³µíë¤."
+
+#: index.docbook:496
+msgid ""
+ "<![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );\n"
+ "cat.setName(\"PK\");\n"
+ "sess.flush(); // changes to cat are automatically detected and persisted]]>"
+msgstr "Hibernateë <literal>UPDATE</literal> ë¬¸ì¥ ëë <literal>DELETE</literal> 문ì¥ì ì§ì ì ì¸ ì¤íì ìí ê·¸ê² ìì ì API를 ì ê³µíì§ ììì ë
¸í¸íë¼. Hibernateë íëì <emphasis>ìí ê´ë¦¬</emphasis> ìë¹ì¤ì´ê³ , ë¹ì ì ê·¸ê²ì ì¬ì©í <emphasis>문ì¥ë¤</emphasis>ì ìê°íì§ ë§ìì¼ íë¤. JDBCë SQL 문ì¥ë¤ì ì¤íìí¤ë ìì í APIì´ê³ , ë¹ì ì <literal>session.connection()</literal>ì í¸ì¶íì¬ ì무ëë í ê°ì JDBC <literal>Connection</literal>ì ì»ì ì ìë¤. ê²ë¤ê° ëë ì¤í¼ë ì´ì
ì ê°ë
ì ì¨ë¼ì¸ í¸ëìì
ì²ë¦¬-ì§í¥ì ì¸ ì´í리ì¼ì´ì
ë¤ì ìí ê°ì²´/ê´ê³í 매íê³¼ 충ëíë¤. íì§ë§ Hibernateì ì¥ë ë²ì ë¤ì í¹ë³í ëì©ëì ì¤í¼ë ì´ì
기ë¥ë¤ì ì ê³µí ìë ìë¤. ëªëª ê°ë¥í ë°°ì¹ ì¤í¼ë ì´ì
í¸ë¦ë¤ì ëí´ìë <xref linkend=\"batch\"/>ì ë³´ë¼."
+
+#: index.docbook:498
+msgid "Sometimes this programming model is inefficient since it would require both an SQL <literal>SELECT</literal> (to load an object) and an SQL <literal>UPDATE</literal> (to persist its updated state) in the same session. Therefore Hibernate offers an alternate approach, using detached instances."
+msgstr "detached ê°ì²´ë¤ì ë³ê²½ìí¤ê¸°"
+
+#: index.docbook:506
+msgid "Note that Hibernate does not offer its own API for direct execution of <literal>UPDATE</literal> or <literal>DELETE</literal> statements. Hibernate is a <emphasis>state management</emphasis> service, you don't have to think in <emphasis>statements</emphasis> to use it. JDBC is a perfect API for executing SQL statements, you can get a JDBC <literal>Connection</literal> at any time by calling <literal>session.connection()</literal>. Furthermore, the notion of mass operations conflicts with object/relational mapping for online transaction processing-oriented applications. Future versions of Hibernate may however provide special mass operation functions. See <xref linkend=\"batch\"/> for some possible batch operation tricks."
+msgstr "ë§ì ì´í리ì¼ì´ì
ë¤ì íëì í¸ëìì
ë´ìì íëì ê°ì²´ë¥¼ ê²ìíê³ , ì²ë¦¬ë¥¼ ìí UI ê³ì¸µì¼ë¡ ê·¸ê²ì ì ì¡íê³ , ê·¸ë° ë¤ì ìë¡ì´ í¸ëìì
ë´ìì ë³ê²½ë¤ì ì ì¥í íìê° ìë¤. ê³ ëì-ëìì± íê²½ìì ì´ë° ì¢
ë¥ì ì ê·¼ë²ì ì¬ì©íë ì´í리ì¼ì´ì
ë¤ì ëê° ìì
ì \"긴\" ë¨ì를 íì¤í 격리ìí¤ê¸° ìí´ ë²ì í ë ë°ì´í°ë¥¼ ì¬ì©íë¤."
+
+#: index.docbook:521
+msgid "Modifying detached objects"
+msgstr "Hibernateë <literal>Session.update()</literal> ë©ìë ëë <literal>Session.merge()</literal> ë©ìë를 ì¬ì©íì¬ detached ì¸ì¤í´ì¤ë¤ì ì¬ì²¨ë¶ë¥¼ ì ê³µí¨ì¼ë¡ì¨ ì´ ëª¨íì ì§ìíë¤:"
+
+#: index.docbook:523
+msgid "Many applications need to retrieve an object in one transaction, send it to the UI layer for manipulation, then save the changes in a new transaction. Applications that use this kind of approach in a high-concurrency environment usually use versioned data to ensure isolation for the \"long\" unit of work."
+msgstr ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catId);\n"
+ "Cat potentialMate = new Cat();\n"
+ "firstSession.save(potentialMate);\n"
+ "\n"
+ "// in a higher layer of the application\n"
+ "cat.setMate(potentialMate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.update(cat); // update cat\n"
+ "secondSession.update(mate); // update mate]]>"
+
+#: index.docbook:530
+msgid "Hibernate supports this model by providing for reattachment of detached instances using the <literal>Session.update()</literal> or <literal>Session.merge()</literal> methods:"
+msgstr "ë§ì¼ <literal>catId</literal> ìë³ì를 ê°ì§ <literal>Cat</literal>ì´ <literal>secondSession</literal>ì ìí´ ì´ë¯¸ ë¡ëëìì ê²½ì°ì ì´í리ì¼ì´ì
ì´ ê·¸ê²ì ë¤ì ì¬ì²¨ë¶íë ¤ê³ ìëí ë, ìì¸ìí©ì´ ëì ¸ì¡ì ê²ì´ë¤."
+
+#: index.docbook:536
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catId);\n"
+ "Cat potentialMate = new Cat();\n"
+ "firstSession.save(potentialMate);\n"
+ "\n"
+ "// in a higher layer of the application\n"
+ "cat.setMate(potentialMate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.update(cat); // update cat\n"
+ "secondSession.update(mate); // update mate]]>"
+msgstr "ë§ì¼ ê·¸ ì¸ì
ì´ ëì¼í ìë³ì를 ê°ì§ ìì ì¸ì¤í´ì¤ë¥¼ ì´ë¯¸ í¬í¨íì§ ììì ë¹ì ì´ íì íë ê²½ì°ìë <literal>update()</literal>를 ì¬ì©íê³ , ë§ì¼ ë¹ì ì´ ì¸ì
ì ìí를 ê³ ë ¤íì§ ììì±ë¡ ì무ëë ë¹ì ì ë³ê²½ì ë³í©ìí¤ê³ ì ìí ê²½ì°ìë <literal>merge()</literal>를 ì¬ì©íë¼. ë¬ë¦¬ ë§í´, ë¹ì ì detached ì¸ì¤í´ì¤ë¤ì ëí ì¬ì²¨ë¶ê° ì¤íëë 첫 ë²ì§¸ ì¤í¼ë ì´ì
ìì íì¤í í¨ì¼ë¡ì¨, <literal>update()</literal>ë ëê° ê° ë§ë¤ì´ì§ ì¸ì
ìì ë¹ì ì´ í¸ì¶íê² ë 첫 ë²ì§¸ ë©ìëì´ë¤."
+
+#: index.docbook:538
+msgid "If the <literal>Cat</literal> with identifier <literal>catId</literal> had already been loaded by <literal>secondSession</literal> when the application tried to reattach it, an exception would have been thrown."
+msgstr "ì´í리ì¼ì´ì
ì ë§ì¼ ê·¸ê²ì´ detached ì¸ì¤í´ì¤ë¤ì ìíê° ëí ì
ë°ì´í¸ ëë ê²ì ìí ê²½ì°ì<emphasis>ë§</emphasis> 주ì´ì§ detached ì¸ì¤í´ì¤ë¡ë¶í° ëë¬ ê°ë¥í detached ì¸ì¤í´ì¤ë¤ì ê°ë³ì ì¼ë¡<literal>update()</literal> ìí¬ ê²ì´ë¤. ì´ê²ì ë¬¼ë¡ <emphasis>transitive persistence(ì ì´ ìì)</emphasis>ì ì¬ì©íì¬ ìëí ë ì ìê³ , <xref linkend=\"objectstate-transitive\"/>를 ë³´ë¼."
+
+#: index.docbook:544
+msgid "Use <literal>update()</literal> if you are sure that the session does not contain an already persistent instance with the same identifier, and <literal>merge()</literal> if you want to merge your modifications at any time without consideration of the state of the session. In other words, <literal>update()</literal> is usually the first method you would call in a fresh session, ensuring that reattachment of your detached instances is the first operation that is executed."
+msgstr "<literal>lock()</literal> ë©ìëë ëí íëì ê°ì²´ë¥¼ ìë¡ì´ ì¸ì
ì ëí´ ë¤ì ì°ê´ìí¤ëê²ì ì´í리ì¼ì´ì
ìê² íì©í´ì¤ë¤. íì§ë§ detached ì¸ì¤í´ì¤ë ë³ê²½ëì§ ììì¼ íë¤!"
+
+#: index.docbook:553
+msgid "The application should individually <literal>update()</literal> detached instances reachable from the given detached instance if and <emphasis>only</emphasis> if it wants their state also updated. This can be automated of course, using <emphasis>transitive persistence</emphasis>, see <xref linkend=\"objectstate-transitive\"/>."
+msgstr ""
+ "<![CDATA[//just reassociate:\n"
+ "sess.lock(fritz, LockMode.NONE);\n"
+ "//do a version check, then reassociate:\n"
+ "sess.lock(izi, LockMode.READ);\n"
+ "//do a version check, using SELECT ... FOR UPDATE, then reassociate:\n"
+ "sess.lock(pk, LockMode.UPGRADE);]]>"
+
+#: index.docbook:560
+msgid "The <literal>lock()</literal> method also allows an application to reassociate an object with a new session. However, the detached instance has to be unmodified!"
+msgstr "<literal>lock()</literal>ì´ ì¬ë¬ê°ì§ <literal>LockMode</literal>ë¤ì ì¬ì©ë ì ììì ë
¸í¸íê³ , ìì¸í ê²ì API 문ìì í¸ëìì
ì²ë¦¬ì ê´í ì¥ì ë³´ë¼. ì¬ì²¨ë¶ë <literal>lock()</literal>ì ëí ì ì¼í ì°ììë ìëë¤."
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[//just reassociate:\n"
+ "sess.lock(fritz, LockMode.NONE);\n"
+ "//do a version check, then reassociate:\n"
+ "sess.lock(izi, LockMode.READ);\n"
+ "//do a version check, using SELECT ... FOR UPDATE, then reassociate:\n"
+ "sess.lock(pk, LockMode.UPGRADE);]]>"
+msgstr "긴 ìì
ë¨ìì ëí ë¤ë¥¸ 모íë¤ì <xref linkend=\"transactions-optimistic\"/>ìì ë
¼ìëë¤."
+
+#: index.docbook:567
+msgid "Note that <literal>lock()</literal> can be used with various <literal>LockMode</literal>s, see the API documentation and the chapter on transaction handling for more information. Reattachment is not the only usecase for <literal>lock()</literal>."
+msgstr "ìëì ì¸ ìí ê²ì¶"
+
+#: index.docbook:574
+msgid "Other models for long units of work are discussed in <xref linkend=\"transactions-optimistic\"/>."
+msgstr "Hibernate ì¬ì©ìë¤ì ìë¡ì´ ìë³ì를 ìì±ìì¼ì transient ì¸ì¤í´ì¤ë¥¼ ì ì¥íê±°ë ê·¸ê²ì íì¬ ìë³ìì ì°ê´ë detached ì¸ì¤í´ì¤ë¤ì ì
ë°ì´í¸/ì¬ì²¨ë¶ ìí¤ë ì¼ë°ì ì¸ ì©ëì ë©ìë를 ìì²íë¤. <literal>saveOrUpdate()</literal> ë©ìëë ì´ ê¸°ë¥ì 구ííë¤."
+
+#: index.docbook:581
+msgid "Automatic state detection"
+msgstr ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catID);\n"
+ "\n"
+ "// in a higher tier of the application\n"
+ "Cat mate = new Cat();\n"
+ "cat.setMate(mate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.saveOrUpdate(cat); // update existing state (cat has a non-null id)\n"
+ "secondSession.saveOrUpdate(mate); // save the new instance (mate has a null id)]]>"
+
+#: index.docbook:583
+msgid "Hibernate users have requested a general purpose method that either saves a transient instance by generating a new identifier or updates/reattaches the detached instances associated with its current identifier. The <literal>saveOrUpdate()</literal> method implements this functionality."
+msgstr "<literal>saveOrUpdate()</literal>ì ì¬ì© ìì ì ì미ë ì´ì¬ìë¤ìê²ë í¼ëì¤ë¬ì ë³´ì¸ë¤. 먼ì , íëì ì¸ì
ìì ì¨ ì¸ì¤í´ì¤ë¥¼ ë ë¤ë¥¸ ìë¡ì´ ì¸ì
ë´ìì ì¬ì©íë ¤ê³ ìëíì§ ìë í, ë¹ì ì <literal>update()</literal>, <literal>saveOrUpdate()</literal>, ëë <literal>merge()</literal>를 ì¬ì©í íìë ìì ê²ì´ë¤. ëªëª ì ì²´ ì´í리ì¼ì´ì
ë¤ì ì´ë¤ ë©ìëë¤ ì¤ ì´ë ê²ë ê²°ì½ ì¬ì©íì§ ìì ê²ì´ë¤."
+
+#: index.docbook:590
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catID);\n"
+ "\n"
+ "// in a higher tier of the application\n"
+ "Cat mate = new Cat();\n"
+ "cat.setMate(mate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.saveOrUpdate(cat); // update existing state (cat has a non-null id)\n"
+ "secondSession.saveOrUpdate(mate); // save the new instance (mate has a null id)]]>"
+msgstr "ëê° <literal>update()</literal> ëë <literal>saveOrUpdate()</literal>ë ë¤ì ìë리ì¤ìì ì¬ì©ëë¤:"
+
+#: index.docbook:592
+msgid "The usage and semantics of <literal>saveOrUpdate()</literal> seems to be confusing for new users. Firstly, so long as you are not trying to use instances from one session in another new session, you should not need to use <literal>update()</literal>, <literal>saveOrUpdate()</literal>, or <literal>merge()</literal>. Some whole applications will never use either of these methods."
+msgstr "ì´í리ì¼ì´ì
ì´ ì²« ë²ì§¸ ì¸ì
ë´ì ê°ì²´ë¥¼ ë¡ëìí¨ë¤"
+
+#: index.docbook:600
+msgid "Usually <literal>update()</literal> or <literal>saveOrUpdate()</literal> are used in the following scenario:"
+msgstr "ê°ì²´ê° UI í°ì´ë¡ ì ë¬ëë¤"
+
+#: index.docbook:607
+msgid "the application loads an object in the first session"
+msgstr "ëªëª ë³ê²½ë¤ì´ ê·¸ ê°ì²´ì íí´ì§ë¤"
+
+#: index.docbook:612
+msgid "the object is passed up to the UI tier"
+msgstr "ê°ì²´ê° ë¹ì§ëì¤ ë¡ì§ í°ì´ë¡ ì ë¬ëë¤"
+
+#: index.docbook:617
+msgid "some modifications are made to the object"
+msgstr "ì´í리ì¼ì´ì
ì ë ë²ì§¸ ì¸ì
ìì <literal>update()</literal>를 í¸ì¶í¨ì¼ë¡ì¨ ì´ë¤ ë³ê²½ë¤ì ììí ìí¨ë¤"
+
+#: index.docbook:622
+msgid "the object is passed back down to the business logic tier"
+msgstr "<literal>saveOrUpdate()</literal>ë ë¤ìì ííë¤:"
+
+#: index.docbook:627
+msgid "the application persists these modifications by calling <literal>update()</literal> in a second session"
+msgstr "ë§ì¼ ê°ì²´ê° ì´ ì¸ì
ë´ìì ì´ë¯¸ ììí ëì´ ìì ê²½ì°, ì무ê²ë ííì§ ìëë¤"
+
+#: index.docbook:634
+msgid "<literal>saveOrUpdate()</literal> does the following:"
+msgstr "ë§ì¼ ê·¸ ì¸ì
ê³¼ ì°ê´ë ë ë¤ë¥¸ ê°ì²´ê° ëì¼í ìë³ì를 ê°ì§ ê²½ì°, ìì¸ìí©ì ëì§ë¤"
+
+#: index.docbook:640
+msgid "if the object is already persistent in this session, do nothing"
+msgstr "ë§ì¼ ê·¸ ê°ì²´ê° ìë³ì íë¡í¼í°ë¥¼ ê°ì§ ìì ê²½ì°, ê·¸ê²ì <literal>save()</literal> ìí¨ë¤"
+
+#: index.docbook:645
+msgid "if another object associated with the session has the same identifier, throw an exception"
+msgstr "ë§ì¼ ê°ì²´ì ìë³ìê° ìë¡ì´ ì´ê¸°í ë ê°ì²´ì í ë¹ë ê°ì ê°ì§ ê²½ì°, ê·¸ê²ì <literal>save()</literal> ìí¨ë¤"
+
+#: index.docbook:651
+msgid "if the object has no identifier property, <literal>save()</literal> it"
+msgstr "ë§ì¼ ê°ì²´ê° (<literal><version></literal> ëë <literal><timestamp></literal>ì ìí´) ë²ì í ëê³ , version íë¡í¼í° ê°ì´ ìë¡ì´ ì´ê¸°í ë ê°ì²´ì í ë¹ë ê²ê³¼ ëì¼í ê°ì¼ ê²½ì°, ê·¸ê²ì <literal>save()</literal> ìí¨ë¤"
+
+#: index.docbook:656
+msgid "if the object's identifier has the value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr "ê·¸ ë°ì ê²½ì° ê·¸ ê°ì²´ë¥¼ <literal>update()</literal> ìí¨ë¤"
+
+#: index.docbook:662
+msgid "if the object is versioned (by a <literal><version></literal> or <literal><timestamp></literal>), and the version property value is the same value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr "ê·¸ë¦¬ê³ <literal>merge()</literal>ë ë§¤ì° ë¤ë¥´ë¤:"
+
+#: index.docbook:670
+msgid "otherwise <literal>update()</literal> the object"
+msgstr "ë§ì¼ ì¸ì
ê³¼ íì¬ ì°ê´ë ëì¼í ìë³ì를 ê°ì§ ìì ì¸ì¤í´ì¤ê° ì¡´ì¬í ê²½ì°, 주ì´ì§ ê°ì²´ì ìí를 ìì ì¸ì¤í´ì¤ ìì¼ë¡ ë³µì¬íë¤"
+
+#: index.docbook:676
+msgid "and <literal>merge()</literal> is very different:"
+msgstr "ë§ì¼ ì¸ì
ê³¼ íì¬ ì°ê´ë ìì ì¸ì¤í´ì¤ê° ì¡´ì¬íì§ ìì ê²½ì°, ë°ì´í°ë² ì´ì¤ë¡ë¶í° ê·¸ê²ì ë¡ëìí¤ë ¤ê³ ìëíê±°ë ìë¡ì´ ìì ì¸ì¤í´ì¤ë¥¼ ìì±ìí¤ë ¤ê³ ìëíë¤"
+
+#: index.docbook:682
+msgid "if there is a persistent instance with the same identifier currently associated with the session, copy the state of the given object onto the persistent instance"
+msgstr "ìì ì¸ì¤í´ì¤ê° ë°íëë¤"
+
+#: index.docbook:689
+msgid "if there is no persistent instance currently associated with the session, try to load it from the database, or create a new persistent instance"
+msgstr "주ì´ì§ ì¸ì¤í´ì¤ë ì¸ì
ê³¼ ì°ê´ëì§ ìê³ , ê·¸ê²ì detached ìíì 머무른ë¤"
+
+#: index.docbook:695
+msgid "the persistent instance is returned"
+msgstr "ìì ê°ì²´ë¤ì ìì í기"
+
+#: index.docbook:700
+msgid "the given instance does not become associated with the session, it remains detached"
+msgstr "<literal>Session.delete()</literal>ë ë°ì´í°ë² ì´ì¤ë¡ë¶í° ê°ì²´ì ìí를 ì ê±°í ê²ì´ë¤. ë¬¼ë¡ ë¹ì ì ì´í리ì¼ì´ì
ì ì¬ì í detached ê°ì²´ì ëí 참조를 ìì í ê²ì´ë¤. ìì ì¸ì¤í´ì¤ë¥¼ transientë¡ ë§ë¤ ë <literal>delete()</literal>를 ìê°íë ê²ì´ ìµìì´ë¤."
+
+#: index.docbook:710
+msgid "Deleting persistent objects"
+msgstr "<![CDATA[sess.delete(cat);]]>"
+
+#: index.docbook:712
+msgid "<literal>Session.delete()</literal> will remove an object's state from the database. Of course, your application might still hold a reference to a deleted object. It's best to think of <literal>delete()</literal> as making a persistent instance transient."
+msgstr "ë¹ì ì foreign í¤ ì»¨ì¤í¸ë ì¸í¸ ìë°°ë¤ì ëí ìíì± ìì´ ë¹ì ì´ ì¢ìíë ì´ë¤ ììë¡ ê°ì²´ë¤ì ìì í ìë ìë¤. ì못ë ììë¡ ê°ì²´ë¤ì ìì í¨ì¼ë¡ì¨ foreign í¤ ì»¬ë¼ì ëí <literal>NOT NULL</literal> 컨ì¤í¸ë ì¸í¸ë¥¼ ìë°°í ê°ë¥ì±ì´ ì¬ì í ì¡´ì¬íë¤. ì를 ë¤ì´, ë¹ì ì´ ë¶ëª¨ë¥¼ ìì íì§ë§, ê·¸ ììë¤ì ìì íë ê²ì ìì ê²½ì°."
+
+#: index.docbook:719
+msgid "<![CDATA[sess.delete(cat);]]>"
+msgstr "ë ê°ì ë¤ë¥¸ ë°ì´í°ì ì¥ìë¤ ì¬ì´ì ê°ì²´ë¤ì ë³µì í기"
+
+#: index.docbook:721
+msgid "You may delete objects in any order you like, without risk of foreign key constraint violations. It is still possible to violate a <literal>NOT NULL</literal> constraint on a foreign key column by deleting objects in the wrong order, e.g. if you delete the parent, but forget to delete the children."
+msgstr "ìì ì¸ì¤í´ì¤ë¤ì ê·¸ëí를 ì·¨íê³ ìë³ì ê°ë¤ì ë¤ì ìì±ìí¤ì§ ìê³ ì ê·¸ê²ë¤ì ë¤ë¥¸ ì ì¥ì ìì ììí ìí¤ë ê²ì ê°ë¥íëë¡ ë§ëë ê²ì´ ì¢
ì¢
ì ì©íë¤."
+
+#: index.docbook:732
+msgid "Replicating object between two different datastores"
+msgstr ""
+ "<![CDATA[//retrieve a cat from one database\n"
+ "Session session1 = factory1.openSession();\n"
+ "Transaction tx1 = session1.beginTransaction();\n"
+ "Cat cat = session1.get(Cat.class, catId);\n"
+ "tx1.commit();\n"
+ "session1.close();\n"
+ "\n"
+ "//reconcile with a second database\n"
+ "Session session2 = factory2.openSession();\n"
+ "Transaction tx2 = session2.beginTransaction();\n"
+ "session2.replicate(cat, ReplicationMode.LATEST_VERSION);\n"
+ "tx2.commit();\n"
+ "session2.close();]]>"
+
+#: index.docbook:734
+msgid "It is occasionally useful to be able to take a graph of persistent instances and make them persistent in a different datastore, without regenerating identifier values."
+msgstr "<literal>ReplicationMode</literal>ë <literal>replicate()</literal>ê° ë°ì´í°ë² ì´ì¤ ë´ì ìë 기존ì íë¤ê³¼ì 충ëì ì²ë¦¬íê²ë ë°©ë²ì ê²°ì íë¤."
+
+#: index.docbook:740
+msgid ""
+ "<![CDATA[//retrieve a cat from one database\n"
+ "Session session1 = factory1.openSession();\n"
+ "Transaction tx1 = session1.beginTransaction();\n"
+ "Cat cat = session1.get(Cat.class, catId);\n"
+ "tx1.commit();\n"
+ "session1.close();\n"
+ "\n"
+ "//reconcile with a second database\n"
+ "Session session2 = factory2.openSession();\n"
+ "Transaction tx2 = session2.beginTransaction();\n"
+ "session2.replicate(cat, ReplicationMode.LATEST_VERSION);\n"
+ "tx2.commit();\n"
+ "session2.close();]]>"
+msgstr "<literal>ReplicationMode.IGNORE</literal> - ëì¼í ìë³ì를 ê°ì§ 기존 ë°ì´í°ë² ì´ì¤ íì´ ì¡´ì¬í ê²½ì°ì ê·¸ ê°ì²´ë¥¼ 무ìíë¤"
+
+#: index.docbook:742
+msgid "The <literal>ReplicationMode</literal> determines how <literal>replicate()</literal> will deal with conflicts with existing rows in the database."
+msgstr "<literal>ReplicationMode.OVERWRITE</literal> - ëì¼í ìë³ì를 ê°ì§ ì´ë¤ 기존ì ë°ì´í°ë² ì´ì¤ íì ë®ì´ ì´ë¤"
+
+#: index.docbook:749
+msgid "<literal>ReplicationMode.IGNORE</literal> - ignore the object when there is an existing database row with the same identifier"
+msgstr "<literal>ReplicationMode.EXCEPTION</literal> - ë§ì¼ ëì¼í ìë³ì를 ê°ì§ 기존 ë°ì´í°ë² ì´ì¤ íì´ ì¡´ì¬í ê²½ì°ì ìì¸ìí©ì ëì§ë¤"
+
+#: index.docbook:755
+msgid "<literal>ReplicationMode.OVERWRITE</literal> - overwrite any existing database row with the same identifier"
+msgstr "<literal>ReplicationMode.LATEST_VERSION</literal> - íì ë²ì ë²í¸ê° ê°ì²´ì ë²ì ë²í¸ ë³´ë¤ ì´ì ì ê²ì´ë©´ ë®ì´ì°ê³ , ê·¸ ë°ì ê²½ì°ì ê·¸ ê°ì²´ë¥¼ 무ìíë¤"
+
+#: index.docbook:761
+msgid "<literal>ReplicationMode.EXCEPTION</literal> - throw an exception if there is an existing database row with the same identifier"
+msgstr "ì´ í¹ì§ì ì°ììë¤ì ë¤ë¥¸ ë°ì´í°ë² ì´ì¤ ì¸ì¤í´ì¤ë¤ ìì¼ë¡ ì
ë ¥ë ë°ì´í° ì¼ì¹ìí¤ê¸°, ì í ì
ê·¸ë ì´ë ëìì ìì¤í
êµ¬ì± ì ë³´ ì
ë°ì´í¸ í기, non-ACID í¸ëìì
ë¤ ëìì íí´ì§ ë³ê²½ë¤ì 롤백ìí¤ê¸° ë±ì í¬í¨íë¤."
+
+#: index.docbook:767
+msgid "<literal>ReplicationMode.LATEST_VERSION</literal> - overwrite the row if its version number is earlier than the version number of the object, or ignore the object otherwise"
+msgstr "Sessionì flush ìí¤ê¸°"
+
+#: index.docbook:775
+msgid "Usecases for this feature include reconciling data entered into different database instances, upgrading system configuration information during product upgrades, rolling back changes made during non-ACID transactions and more."
+msgstr "ìê°ì´ ì§ë¨ì ë°ë¼ <literal>Session</literal>ì JDBC 커ë¥ì
ì ìíì ë©ëª¨ë¦¬ ë´ì ë³´ê´ë ê°ì²´ë¤ì ìí를 ë기í ìí¤ëë° íìí SQL 문ì¥ë¤ì ì¤íìí¬ ê²ì´ë¤. ì´ íë¡ì¸ì¤ <emphasis>flush</emphasis>ë ë¤ì ìì ë¤ìì ëí´í¸ë¡ ë°ìíë¤"
+
+#: index.docbook:784
+msgid "Flushing the Session"
+msgstr "ëªëª ì§ìë¤ì´ ì¤íë기 ì ì"
+
+#: index.docbook:786
+msgid "From time to time the <literal>Session</literal> will execute the SQL statements needed to synchronize the JDBC connection's state with the state of objects held in memory. This process, <emphasis>flush</emphasis>, occurs by default at the following points"
+msgstr "<literal>org.hibernate.Transaction.commit()</literal> ìì ìì"
+
+#: index.docbook:795
+msgid "before some query executions"
+msgstr "<literal>Session.flush()</literal> ìì ìì"
+
+#: index.docbook:800
+msgid "from <literal>org.hibernate.Transaction.commit()</literal>"
+msgstr "SQL 문ì¥ë¤ì´ ë¤ì ììë¡ ì¤í ëª
ë ¹ì´ ë´ë ¤ì§ë¤"
+
+#: index.docbook:805
+msgid "from <literal>Session.flush()</literal>"
+msgstr "ëìíë ê°ì²´ë¤ì´ <literal>Session.save()</literal>를 ì¬ì©íì¬ ì ì¥ëìë ê²ê³¼ ê°ì ììë¡, 모ë ìí°í° ì½ì
ë¤"
+
+#: index.docbook:811
+msgid "The SQL statements are issued in the following order"
+msgstr "모ë ìí°í° ì
ë°ì´í¸ë¤"
+
+#: index.docbook:817
+msgid "all entity insertions, in the same order the corresponding objects were saved using <literal>Session.save()</literal>"
+msgstr "모ë ì½ë ì
ìì ë¤"
+
+#: index.docbook:823
+msgid "all entity updates"
+msgstr "모ë ì½ë ì
ìì ìì ë¤, ì
ë°ì´í¸ë¤ ê·¸ë¦¬ê³ ì½ì
ë¤"
+
+#: index.docbook:828
+msgid "all collection deletions"
+msgstr "모ë ì½ë ì
ì½ì
ë¤"
+
+#: index.docbook:833
+msgid "all collection element deletions, updates and insertions"
+msgstr "ëìíë ê°ì²´ë¤ì´ <literal>Session.delete()</literal>를 ì¬ì©íì¬ ìì ëìë ê²ê³¼ ê°ì ììë¡ ëª¨ë ìí°í° ìì ë¤."
+
+#: index.docbook:838
+msgid "all collection insertions"
+msgstr "(íê°ì§ ìì¸ë ê°ì²´ë¤ì´ ì ì¥ë ë <literal>native</literal> ID ìì±ì ì¬ì©íë ê°ì²´ë¤ì´ insert ëë ì ì´ë¤.)"
+
+#: index.docbook:843
+msgid "all entity deletions, in the same order the corresponding objects were deleted using <literal>Session.delete()</literal>"
+msgstr "ë¹ì ì´ ëª
ìì ì¼ë¡ <literal>flush()</literal> ìí¬ ë를 ì ì¸íë©´, <literal>Session</literal>ì´ JDBC í¸ì¶ë¤ì ì¤íìí¤ë <emphasis>ìì </emphasis>, ê·¸ê²ë¤ì´ ì¤íëë <emphasis>ìì</emphasis>ë§ì ì ëì ì¼ë¡ ë³´ì¥íì§ë ìëë¤. íì§ë§ Hibernateë <literal>Query.list(..)</literal>ê° ì¤í¨ì±ì´ ìë ë°ì´í°ë¥¼ ê²°ì½ ë°ííì§ ìì ê²ìì ë³´ì¥íê±°ë; ê·¸ê²ë¤ì´ ì못ë ë°ì´í°ë ë°ííì§ ìì ê²ìì ë³´ì¥íë¤."
+
+#: index.docbook:850
+msgid "(An exception is that objects using <literal>native</literal> ID generation are inserted when they are saved.)"
+msgstr "flushê° ë무 ì주 ë°ìíì§ ìëë¡ ëí´í¸ íì를 ë³ê²½íë ê²ì´ ê°ë¥íë¤. <literal>FlushMode</literal> í´ëì¤ë ì¸ ê°ì ë¤ë¥¸ 모ëë¤ì ì ìíë¤: ì¤ì§ ì»¤ë° ì(ê·¸ë¦¬ê³ Hibernate <literal>Transaction</literal> APIê° ì¬ì©ë ëìë§) flush 모ë, ì¤ëª
ë 루í´ì ì¬ì©íë ìëì ì¸ flush 모ë, ëë <literal>flush()</literal>ê° ëª
ìì ì¼ë¡ í¸ì¶ëì§ ìë í flush ìí¤ì§ ìë 모ë. ë§ì§ë§ 모ëë ì¤ë ëì ì¤íëë ìì
ë¨ìì ëí´ ì ì©íê³ , ì¬ê¸°ì <literal>Session</literal>ì ì´ë ¤ì§ì±ë¡ ì ì§ëê³ ì¤ë ìê° ëì ì°ê²°ì´ í´ì ë ì±ë¡ ì ì§ëë¤. (<xref linkend=\"transactions-optimistic-longsession\"/>를 ë³´ë¼)."
+
+#: index.docbook:855
+msgid "Except when you explicity <literal>flush()</literal>, there are absolutely no guarantees about <emphasis>when</emphasis> the <literal>Session</literal> executes the JDBC calls, only the <emphasis>order</emphasis> in which they are executed. However, Hibernate does guarantee that the <literal>Query.list(..)</literal> will never return stale data; nor will they return the wrong data."
+msgstr ""
+ "<![CDATA[sess = sf.openSession();\n"
+ "Transaction tx = sess.beginTransaction();\n"
+ "sess.setFlushMode(FlushMode.COMMIT); // allow queries to return stale state\n"
+ "\n"
+ "Cat izi = (Cat) sess.load(Cat.class, id);\n"
+ "izi.setName(iznizi);\n"
+ "\n"
+ "// might return stale data\n"
+ "sess.find(\"from Cat as cat left outer join cat.kittens kitten\");\n"
+ "\n"
+ "// change to izi is not flushed!\n"
+ "...\n"
+ "tx.commit(); // flush occurs\n"
+ "sess.close();]]>"
+
+#: index.docbook:863
+msgid "It is possible to change the default behavior so that flush occurs less frequently. The <literal>FlushMode</literal> class defines three different modes: only flush at commit time (and only when the Hibernate <literal>Transaction</literal> API is used), flush automatically using the explained routine, or never flush unless <literal>flush()</literal> is called explicitly. The last mode is useful for long running units of work, where a <literal>Session</literal> is kept open and disconnected for a long time (see <xref linkend=\"transactions-optimistic-longsession\"/>)."
+msgstr "flush ëìì, íëì ìì¸ìí©ì´ ë°ìí ìë ìë¤(ì를 ë¤ë©´. ë§ì¼ DML ì¤í¼ë ì´ì
ì´ ì»¨ì¤í¸ë ì¸í¸ë¥¼ ìë°í ê²½ì°). ìì¸ìí©ë¤ì ì²ë¦¬íë ê²ì Hibernatemì í¸ëìì
í¹ì§ì ê´í ì´ë¤ ì´í´ë¥¼ ìë°íë©°, ì°ë¦¬ë <xref linkend=\"transactions\"/>ìì ê·¸ê²ì ë
¼ìíë¤."
+
+#: index.docbook:873
+msgid ""
+ "<![CDATA[sess = sf.openSession();\n"
+ "Transaction tx = sess.beginTransaction();\n"
+ "sess.setFlushMode(FlushMode.COMMIT); // allow queries to return stale state\n"
+ "\n"
+ "Cat izi = (Cat) sess.load(Cat.class, id);\n"
+ "izi.setName(iznizi);\n"
+ "\n"
+ "// might return stale data\n"
+ "sess.find(\"from Cat as cat left outer join cat.kittens kitten\");\n"
+ "\n"
+ "// change to izi is not flushed!\n"
+ "...\n"
+ "tx.commit(); // flush occurs\n"
+ "sess.close();]]>"
+msgstr "Transitive persistence(ì ì´ ìì)"
+
+#: index.docbook:875
+msgid "During flush, an exception might occur (e.g. if a DML operation violates a constraint). Since handling exceptions involves some understanding of Hibernate's transactional behavior, we discuss it in <xref linkend=\"transactions\"/>."
+msgstr "í¹í ë¹ì ì´ ì°ê´ë ê°ì²´ë¤ì ê·¸ëí를 ë¤ë£° ê²½ì°ì, í¹í ê°ë³ ê°ì²´ë¤ì ì ì¥íê³ , ìì íê±°ë, ì¬ì²¨ë¶ìí¤ë ê²ì´ 꽤 ë²ê±°ë¡ë¤. ê³µíµë ê²½ì°ë íëì ë¶ëª¨/ìì ê´ê³ì´ë¤. ë¤ì ìì 를 ê²í íì:"
+
+#: index.docbook:884
+msgid "Transitive persistence"
+msgstr "ë§ì¼ ë¶ëª¨/ìì ê´ê³ìì ììë¤ì´ ê°(value) íì
(ì를 ë¤ë©´. 주ìë¤ ëë 문ìì´ë¤ì ê°ì§ íëì ì½ë ì
)ì¼ ê²½ì°, ê·¸ê²ë¤ì ìëª
주기ë ë¶ëª¨ì ìì¡´í ê²ì´ê³ ìí ë³ê²½ë¤ì ëí´ í¸ë¦¬í \"ì¼ì¤ì¼ì´ë©\"ì ë ì´ìì ì¡ì
ì´ íìíì§ ìì ê²ì´ë¤. ë§ì¼ ë¶ëª¨ê° ì ì¥ë ë, ê°(value)-íì
ì ìì ê°ì²´ë¤ë ë§ì°¬ê°ì§ë¡ ì ì¥ëê³ , ë¶ëª¨ê° ìì ë ë, ììë¤ì´ ìì ë ê²ì´ë¤. ì´ê²ì ì¬ì§ì´ ì½ë ì
ì¼ë¡ë¶í° íëì ììì ì ê±°íë ê·¸ë° ì¤í¼ë ì´ì
ë¤ì ëí´ìë ëìíë¤; Hibernateë ì´ê²ì ê²ì¶íê³ , ê°(value)-íì
ì ê°ì²´ë¤ì 참조를 ê³µì í ì ìì¼ë¯ë¡, ë°ì´í°ë² ì´ì¤ë¡ë¶í° ê·¸ ììì ìì ìí¨ë¤."
+
+#: index.docbook:886
+msgid "It is quite cumbersome to save, delete, or reattach individual objects, especially if you deal with a graph of associated objects. A common case is a parent/child relationship. Consider the following example:"
+msgstr "ì´ì ê°(value) íì
ì´ ìë, ìí°í°ë¤ì¸ ë¶ëª¨ì ìì ê°ì²´ë¤ì ê°ì§ ëì¼í ìë리ì¤ë¥¼ ê²í íì(ì를 ë¤ë©´. ì¹´í
ê³ ë¦¬ë¤ê³¼ ìì´í
ë¤, ëë ë¶ëª¨ ê³ ìì´ë ìì ê³ ìì´). ìí°í°ë¤ì ê·¸ê²ë¤ ìì ì ìëª
주기를 ê°ê³ , ê³µì ë 참조ë¤ì ì§ìíê³ (ë°ë¼ì ì½ë ì
ì¼ë¡ë¶í° íëì ìí°í°ë¥¼ ì ê±°íë ê²ì ê·¸ê²ì´ ìì ë ì ììì ì미íì§ ìëë¤), ê·¸ë¦¬ê³ ëí´í¸ë¡ íëì ìí°í°ë¡ë¶í° ì´ë¤ ë¤ë¥¸ ì°ê´ë ìí°í°ë¤ë¡ì ìíì ì¼ì¤ì¼ì´ë©ì ì¡´ì¬íì§ ìëë¤. Hibernateë ëí´í¸ë¡ <emphasis>ëë¬ê°ë¥ì±ì ìí ììì±(persistence by reachability)</emphasis>ì 구ííì§ ìëë¤."
+
+#: index.docbook:892
+msgid "If the children in a parent/child relationship would be value typed (e.g. a collection of addresses or strings), their life cycle would depend on the parent and no further action would be required for convenient \"cascading\" of state changes. When the parent is saved, the value-typed child objects are saved as well, when the parent is deleted, the children will be deleted, etc. This even works for operations such as the removal of a child from the collection; Hibernate will detect this and, since value-typed objects can't have shared references, delete the child from the database."
+msgstr "- <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal>를 í¬í¨íë- Hibernate ì¸ì
ì ëí ê°ê°ì 기본 ì¤í¼ë ì´ì
ì ëí´ì íëì ëìíë ì¼ì¤ì¼ì´ë© ì¤íì¼ì´ ì¡´ì¬íë¤. ì¼ì¤ì¼ì´ë ì¤íì¼ë¤ ê°ê°ì <literal>create, merge, save-update, delete, lock, refresh, evict, replicate</literal>ë¡ ëª
ëª
ëë¤. ë§ì¼ ë¹ì ì´ íëì ì¤í¼ë ì´ì
ì´ íëì ì°ê´ì ë°ë¼ ì¼ì¤ì¼ì´ë©ëë ê²ì ìí ê²½ì°, ë¹ì ì 매í 문ì ë´ì ê·¸ê²ì ì§ìí´ì¼ íë¤. ì를 ë¤ë©´:"
+
+#: index.docbook:903
+msgid "Now consider the same scenario with parent and child objects being entities, not value-types (e.g. categories and items, or parent and child cats). Entities have their own life cycle, support shared references (so removing an entity from the collection does not mean it can be deleted), and there is by default no cascading of state from one entity to any other associated entities. Hibernate does not implement <emphasis>persistence by reachability</emphasis> by default."
+msgstr "<![CDATA[<one-to-one name=\"person\" cascade=\"persist\"/>]]>"
+
+#: index.docbook:912
+msgid "For each basic operation of the Hibernate session - including <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal> - there is a corresponding cascade style. Respectively, the cascade styles are named <literal>create, merge, save-update, delete, lock, refresh, evict, replicate</literal>. If you want an operation to be cascaded along an association, you must indicate that in the mapping document. For example:"
+msgstr "ì¼ì¤ì¼ì´ë© ì¤íì¼ë¤ì´ ê²°í©ë ìë ìë¤:"
+
+#: index.docbook:921
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist\"/>]]>"
+msgstr "<![CDATA[<one-to-one name=\"person\" cascade=\"persist,delete,lock\"/>]]>"
+
+#: index.docbook:923
+msgid "Cascade styles my be combined:"
+msgstr "ë¹ì ì <emphasis>모ë </emphasis> ì¤í¼ë ì´ì
ë¤ì´ ê·¸ ì°ê´ì ë°ë¼ ì¼ì¤ì¼ì´ë ëì´ì¼ í¨ì ì§ì íëë° <literal>cascade=\"all\"</literal>ì ì¬ì©í ìë ìë¤. ëí´í¸<literal>cascade=\"none\"</literal>ì ì¤í¼ë ì´ì
ë¤ì´ ì¼ì¤ì¼ì´ë ëì§ ìì ê²ìì ì§ì íë¤."
+
+#: index.docbook:927
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist,delete,lock\"/>]]>"
+msgstr "í¹ì í ì¼ì¤ì¼ì´ë ì¤íì¼ì¸, <literal>delete-orphan</literal>ì ì¤ì§ one-to-many ì°ê´ë¤ìë§ ì ì©ëê³ , <literal>delete()</literal> ì¤í¼ë ì´ì
ì´ ê·¸ ì°ê´ì¼ë¡ë¶í° ì ê±°ëë ììì ìì ê°ì²´ì ì ì©ëì´ì¼ í¨ì ëíë¸ë¤."
+
+#: index.docbook:929
+msgid "You may even use <literal>cascade=\"all\"</literal> to specify that <emphasis>all</emphasis> operations should be cascaded along the association. The default <literal>cascade=\"none\"</literal> specifies that no operations are to be cascaded."
+msgstr "ê¶ì¥ì¬íë¤ :"
+
+#: index.docbook:935
+msgid "A special cascade style, <literal>delete-orphan</literal>, applies only to one-to-many associations, and indicates that the <literal>delete()</literal> operation should be applied to any child object that is removed from the association."
+msgstr "íëì <literal><many-to-one></literal> ëë <literal><many-to-many></literal> ì°ê´ì ëí´ ì¼ì¤ì¼ì´ë를 ê°ë¥íê² íë ê²ì ëê° ìë¯¸ê° ìë¤. ì¼ì¤ì¼ì´ëë <literal><one-to-one></literal> ì°ê´ê³¼ <literal><one-to-many></literal> ì°ê´ì ëí´ ì¢
ì¢
ì ì©íë¤."
+
+#: index.docbook:942
+msgid "Recommendations:"
+msgstr "ë§ì¼ ìì ê°ì²´ì ìëª
ì´ ê·¸ ë¶ëª¨ ê°ì²´ì ìëª
ì 묶ì¬ì ¸ ìì ê²½ì°, <literal>cascade=\"all,delete-orphan\"</literal>ì ì§ì í¨ì¼ë¡ì¨ ê·¸ê²ì <emphasis>ìëª
주기 ê°ì²´</emphasis>ë¡ ë§ë¤ì´ë¼."
+
+#: index.docbook:948
+msgid "It doesn't usually make sense to enable cascade on a <literal><many-to-one></literal> or <literal><many-to-many></literal> association. Cascade is often useful for <literal><one-to-one></literal> and <literal><one-to-many></literal> associations."
+msgstr "ê·¸ ë°ì ê²½ì°, ë¹ì ì ì¼ì¤ì¼ì´ë를 ì í íìë¡ íì§ ìì ì ìë¤. ê·¸ë¬ë ë§ì¼ ë¹ì ì´ ëì¼í í¸ëìì
ë´ìì ë¶ëª¨ì ììì ëí´ ì주 í¨ê» ìì
íê² ë ê²ì´ë¼ ìê°ëê³ , ë¹ì ì¤ì¤ë¡ íì´í íë ê²ì ì ì½íê³ ì ìí ê²½ì°, <literal>cascade=\"persist,merge,save-update\"</literal>를 ì¬ì©íë ê²ì ê³ ë ¤íë¼."
+
+#: index.docbook:956
+msgid "If the child object's lifespan is bounded by the lifespan of the parent object, make it a <emphasis>life cycle object</emphasis> by specifying <literal>cascade=\"all,delete-orphan\"</literal>."
+msgstr "<literal>cascade=\"all\"</literal>ì ê°ì§ (ë¨ì¼ ê° ì°ê´ì´ë íëì ì½ë ì
ì´ë ) íëì ì°ê´ì 매íìí¤ë ê²ì ê·¸ ì°ê´ì ë¶ëª¨ì ì ì¥/ì
ë°ì´í¸/ìì ê° ìì ëë ììë¤ì ì ì¥/ì
ë°ì´í¸/ìì ë¡ ê·ê²°ëë <emphasis>ë¶ëª¨/ìì</emphasis> ì¤íì¼ì ê´ê³ë¡ ë§í¬íë¤."
+
+#: index.docbook:963
+msgid "Otherwise, you might not need cascade at all. But if you think that you will often be working with the parent and children together in the same transaction, and you want to save yourself some typing, consider using <literal>cascade=\"persist,merge,save-update\"</literal>."
+msgstr "ê²ë¤ê°, íëì ìì ë¶ëª¨ë¡ë¶í° íëì ììì ëí ë¨ìí 참조ë ììì ì ì¥/ì
ë°ì´í¸ë¡ ê·ê²°ë ê²ì´ë¤. íì§ë§ ì´ ë©íí¬ë ë¶ìì íë¤. ê·¸ê²ì ë¶ëª¨ì ìí´ ì°¸ì¡° í´ì ëë ììì <literal>cascade=\"delete-orphan\"</literal>ì¼ë¡ 매íë íëì <literal><one-to-many></literal> ì°ê´ì ê²½ì°ë¥¼ ì ì¸íë©´, ìëì ì¼ë¡ ìì ëì§ <emphasis>ìëë¤</emphasis>. íëì ë¶ëª¨/ìì ê´ê³ì ëí ì¼ì¤ì¼ì´ë© ì¤í¼ë ì´ì
ì ì íí ì미ë ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:971
+msgid "Mapping an association (either a single valued association, or a collection) with <literal>cascade=\"all\"</literal> marks the association as a <emphasis>parent/child</emphasis> style relationship where save/update/delete of the parent results in save/update/delete of the child or children."
+msgstr "ë§ì¼ ë¶ëª¨ê° <literal>persist()</literal>ì ì ë¬ë ê²½ì°, 모ë ììë¤ì´ <literal>persist()</literal>ì ì ë¬ëë¤"
+
+#: index.docbook:977
+msgid "Futhermore, a mere reference to a child from a persistent parent will result in save/update of the child. This metaphor is incomplete, however. A child which becomes unreferenced by its parent is <emphasis>not</emphasis> automatically deleted, except in the case of a <literal><one-to-many></literal> association mapped with <literal>cascade=\"delete-orphan\"</literal>. The precise semantics of cascading operations for a parent/child relationship are as follows:"
+msgstr "ë§ì¼ ë¶ëª¨ê° <literal>merge()</literal>ì ì ë¬ë ê²½ì°, 모ë ììë¤ì´ <literal>merge()</literal>ì ì ë¬ëë¤"
+
+#: index.docbook:988
+msgid "If a parent is passed to <literal>persist()</literal>, all children are passed to <literal>persist()</literal>"
+msgstr "ë§ì¼ ë¶ëª¨ê° <literal>save()</literal>, <literal>update()</literal> ëë <literal>saveOrUpdate()</literal>ì ì ë¬ë ê²½ì°, 모ë ììë¤ì´ <literal>saveOrUpdate()</literal>ì ì ë¬ëë¤"
+
+#: index.docbook:994
+msgid "If a parent is passed to <literal>merge()</literal>, all children are passed to <literal>merge()</literal>"
+msgstr "ë§ì¼ transient ëë detached ììì´ ìì ë¶ëª¨ì ìí´ ì°¸ì¡°ë ê²½ì°, ê·¸ê²ì <literal>saveOrUpdate()</literal>ì ì ë¬ëë¤"
+
+#: index.docbook:1000
+msgid "If a parent is passed to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal>, all children are passed to <literal>saveOrUpdate()</literal>"
+msgstr "ë§ì¼ ë¶ëª¨ê° ìì ë ê²½ì°, 모ë ììë¤ì´ <literal>delete()</literal>ì ì ë¬ëë¤"
+
+#: index.docbook:1006
+msgid "If a transient or detached child becomes referenced by a persistent parent, it is passed to <literal>saveOrUpdate()</literal>"
+msgstr "ë§ì¼ ììì´ ìì ë¶ëª¨ì ìí´ ì°¸ì¡° í´ì ë ê²½ì°, <literal>cascade=\"delete-orphan\"</literal>ì´ ìë í, <emphasis>í¹ë³í ì´ë¤ ê²ë ë°ìíì§ ìëë¤</emphasis> - ì´í리ì¼ì´ì
ì íìí ê²½ì°ì ììì ëª
ìì ì¼ë¡ ìì í´ì¼ íë¤ -, <literal>cascade=\"delete-orphan\"</literal>ì¸ ê²½ì°ì \"orphaned(ê³ ì)\"ì¸ ê²½ì° ììì´ ìì ëë¤."
+
+#: index.docbook:1012
+msgid "If a parent is deleted, all children are passed to <literal>delete()</literal>"
+msgstr "ë§ì§ë§ì¼ë¡ ì¤í¼ë ì´ì
ë¤ì ì¼ì¤ì¼ì´ë©ì´ <emphasis>í¸ì¶ ìì </emphasis>ìì ëë <emphasis>flush ìì </emphasis>ìì ê°ì²´ ê·¸ëíì ì ì©ë ì ììì ë
¸í¸íë¼. ì´ì© ê°ë¥í ê²½ì°ì 모ë ì¤í¼ë ì´ì
ë¤ì ê·¸ ì¤í¼ë ì´ì
ì´ ì¤íë ë ëë¬ ê°ë¥í ì°ê´ë ìí°í°ë¤ì ëí´ ì¼ì¤ì¼ì´ë ëë¤. íì§ë§ <literal>save-upate</literal>ì <literal>delete-orphan</literal>ì <literal>Session</literal>ì flush ëìì ëë¬ ê°ë¥í 모ë ì°ê´ë ìí°í°ë¤ì ëí´ ì´íì (transitive)ì´ë¤."
+
+#: index.docbook:1017
+msgid "If a child is dereferenced by a persistent parent, <emphasis>nothing special happens</emphasis> - the application should explicitly delete the child if necessary - unless <literal>cascade=\"delete-orphan\"</literal>, in which case the \"orphaned\" child is deleted."
+msgstr "ë©íë°ì´í° ì¬ì©í기"
+
+#: index.docbook:1026
+msgid "Finally, note that cascading of operations can be applied to an object graph at <emphasis>call time</emphasis> or at <emphasis>flush time</emphasis>. All operations, if enabled, are cascaded to associated entities reachable when the operation is executed. However, <literal>save-upate</literal> and <literal>delete-orphan</literal> are transitive for all associated entities reachable during flush of the <literal>Session</literal>."
+msgstr "Hibernateë 모ë ìí°í°ì ê°(value) íì
ë¤ì ê°ì§ ë§¤ì° íë¶í ë©í-ë 벨 모íì íìë¡ íë¤. ìê°ì´ ì§ë¨ì ë°ë¼, ì´ ëª¨íì ì´í리ì¼ì´ì
ê·¸ ìì²´ì ë§¤ì° ì ì©íë¤. ì를 ë¤ì´, ì´í리ì¼ì´ì
ì ì´ë ê°ì²´ë¤ì´ ë³µì¬ëì´ì¼ íëì§(ì를 ë¤ë©´ ê°ë³ì ì¸ ê°(value) íì
ë¤) ê·¸ë¦¬ê³ ì´ë ê²ì´ ë³µì¬ëì§ ë§ìì¼ íëì§(ì를 ë¤ë©´, ë¶ë³ì value íì
ë¤ê³¼ ê°ë¥í ì°ê´ë ìí°í°ë¤)를 ì¸ì§íë \"ì¤ë§í¸\" deep-copy ìê³ ë¦¬ì¦ì 구ííëë° Hibernateì ë©íë°ì´í°ë¥¼ ì¬ì©í ìë ìë¤."
+
+#: index.docbook:1038
+msgid "Using metadata"
+msgstr "Hibernateë <literal>ClassMetadata</literal> ì¸í°íì´ì¤ì <literal>CollectionMetadata</literal> ì¸í°íì´ì¤ ê·¸ë¦¬ê³ <literal>Type</literal> ê³ì¸µêµ¬ì¡°ë¥¼ íµí´ ë©íë°ì´í°ë¥¼ ë
¸ì¶ìí¨ë¤. ë©íë°ì´í° ì¸í°íì´ì¤ë¤ì ì¸ì¤í´ì¤ë¤ì <literal>SessionFactory</literal>ë¡ë¶í° ì»ì´ì§ ìë ìë¤."
+
+#: index.docbook:1040
+msgid "Hibernate requires a very rich meta-level model of all entity and value types. From time to time, this model is very useful to the application itself. For example, the application might use Hibernate's metadata to implement a \"smart\" deep-copy algorithm that understands which objects should be copied (eg. mutable value types) and which should not (eg. immutable value types and, possibly, associated entities)."
+msgstr ""
+ "<![CDATA[Cat fritz = ......;\n"
+ "ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);\n"
+ "\n"
+ "Object[] propertyValues = catMeta.getPropertyValues(fritz);\n"
+ "String[] propertyNames = catMeta.getPropertyNames();\n"
+ "Type[] propertyTypes = catMeta.getPropertyTypes();\n"
+ "\n"
+ "// get a Map of all properties which are not collections or associations\n"
+ "Map namedValues = new HashMap();\n"
+ "for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {\n"
+ " namedValues.put( propertyNames[i], propertyValues[i] );\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:1047
+msgid "Hibernate exposes metadata via the <literal>ClassMetadata</literal> and <literal>CollectionMetadata</literal> interfaces and the <literal>Type</literal> hierarchy. Instances of the metadata interfaces may be obtained from the <literal>SessionFactory</literal>."
+msgstr ""
+
+#: index.docbook:1054
+msgid ""
+ "<![CDATA[Cat fritz = ......;\n"
+ "ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);\n"
+ "\n"
+ "Object[] propertyValues = catMeta.getPropertyValues(fritz);\n"
+ "String[] propertyNames = catMeta.getPropertyNames();\n"
+ "Type[] propertyTypes = catMeta.getPropertyTypes();\n"
+ "\n"
+ "// get a Map of all properties which are not collections or associations\n"
+ "Map namedValues = new HashMap();\n"
+ "for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {\n"
+ " namedValues.put( propertyNames[i], propertyValues[i] );\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/toolset_guide.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/toolset_guide.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/toolset_guide.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,744 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Toolset Guide"
+msgstr "ë구ì
ìë´"
+
+#: index.docbook:7
+msgid "Roundtrip engineering with Hibernate is possible using a set of Eclipse plugins, commandline tools, as well as Ant tasks."
+msgstr "Hibernateì ëí ë¼ì´ëí¸ë¦½ ìì§ëì´ë§ì Eclipse íë¬ê·¸ì¸ ì¸í¸, ëª
ë ¹ë¼ì¸ ë구ë¤, ë¿ë§ ìëë¼ Ant íì¤í¬ë¤ì ì¬ì©íì¬ ê°ë¥íë¤."
+
+#: index.docbook:12
+msgid "The <emphasis>Hibernate Tools</emphasis> currently include plugins for the Eclipse IDE as well as Ant tasks for reverse engineering of existing databases:"
+msgstr "<emphasis>Hibernate ë구ë¤</emphasis>ì íì¬ ê¸°ì¡´ ë°ì´í°ë² ì´ì¤ë¤ì ëí 리ë²ì¤ ìì§ëì´ë§ì ìí´ Ant íì¤í¬ë¤ ë¿ë§ ìëë¼ Eclipse IDEì© íë¬ê·¸ì¸ë¤ì í¬í¨íê³ ìë¤:"
+
+#: index.docbook:18
+msgid "<emphasis>Mapping Editor:</emphasis> An editor for Hibernate XML mapping files, supporting auto-completion and syntax highlighting. It also supports semantic auto-completion for class names and property/field names, making it much more versatile than a normal XML editor."
+msgstr "<emphasis>매í í¸ì§ê¸°:</emphasis> ìë ìì± ê¸°ë¥ê³¼ 구문 ê°ì¡°ë¥¼ ì§ìíë Hibernate XML 매í íì¼ë¤ì ëí í¸ì§ê¸°. ê·¸ê²ì ëí íµìì XML í¸ì§ê¸° ë³´ë¤ í¨ì¬ ë ìµíµì± ìê² ë§ë¤ì´ì í´ëì¤ ì´ë¦ë¤ê³¼ íë¡í¼í°/íë ì´ë¦ë¤ì ëí ìë¯¸ë¡ ì ìë ìì± ê¸°ë¥ì ì§ìíë¤."
+
+#: index.docbook:23
+msgid "<emphasis>Console:</emphasis> The console is a new view in Eclipse. In addition to a tree overview of your console configurations, you also get an interactive view of your persistent classes and their relationships. The console allows you to execute HQL queries against your database and browse the result directly in Eclipse."
+msgstr "<emphasis>ì½ì:</emphasis> ì½ìì Eclipseìì ìë¡ì´ ë·°ì´ë¤. ë¹ì ì ì½ì 구ì±ë¤ì ëí tree overviewì ë§ë¶ì¬, ë¹ì ì ëí ë¹ì ì ìì í´ëì¤ë¤ê³¼ ê·¸ê²ë¤ì ê´ê³ë¤ì ëí ìí¸ìì© ë·°ë¥¼ ì»ëë¤. ì½ìì ë¹ì ì ë°ì´í°ë² ì´ì¤ì ëí´ HQL ì§ìë¤ì ì¤ííê³ ê·¸ 결과를 Eclipse ë´ìì ì§ì ë¸ë¼ì°ì§ íëë¡ ë¹ì ìê² íì©í´ì¤ë¤."
+
+#: index.docbook:30
+msgid "<emphasis>Development Wizards:</emphasis> Several wizards are provided with the Hibernate Eclipse tools; you can use a wizard to quickly generate Hibernate configuration (cfg.xml) files, or you may even completely reverse engineer an existing database schema into POJO source files and Hibernate mapping files. The reverse engineering wizard supports customizable templates."
+msgstr "<emphasis>ê°ë° ë§ë²ì¬ë¤:</emphasis> ëªëª ë§ë²ì¬ë¤ì´ Hibernate Eclipse ë구ë¤ì ì ê³µëë¤; ë¹ì ì Hibernate êµ¬ì± (cfg.xml) íì¼ë¤ì ë¹ ë¥´ê² ìì±ìí¤ëë° ë§ë²ì¬ë¥¼ ì¬ì©íê±°ë, ì¬ì§ì´ ë¹ì ì 기존 ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ë¥¼ POJO ìì¤ íì¼ë¤ê³¼ Hibernate 매í íì¼ë¤ë¡ ìì íê² ë¦¬ë²ì¤ ìì§ëì´ë§í ìë ìë¤. 리ë²ì¤ ìì§ëì´ë§ ë§ë²ì¬ë ë§ì¶¤ ê°ë¥í í
í릿ë¤ì ì ê³µíë¤."
+
+#: index.docbook:38
+msgid "Ant Tasks:"
+msgstr "Ant íì¤í¬ë¤:"
+
+#: index.docbook:43
+msgid "Please refer to the <emphasis>Hibernate Tools</emphasis> package and it's documentation for more information."
+msgstr "ì¶ê° ì ë³´ë <emphasis>Hibernate Tools</emphasis> í¨í¤ì§ì ê·¸ê²ì 문ì를 참조í길 ë°ëë¤."
+
+#: index.docbook:48
+msgid "However, the Hibernate main package comes bundled with an integrated tool (it can even be used from \"inside\" Hibernate on-the-fly): <emphasis>SchemaExport</emphasis> aka <literal>hbm2ddl</literal>."
+msgstr "íì§ë§ Hibernate ë©ì¸ í¨í¤ì§ë íµí© ë구ì ë²ë¤í ëì´ ìë¤(ê·¸ê²ì ì¬ì§ì´ íë¼ì´ ììì Hibernate \"ë´ìì\" ì¬ì©ë ì ìë¤): <emphasis>SchemaExport</emphasis> ë³ì¹ì <literal>hbm2ddl</literal>."
+
+#: index.docbook:55
+msgid "Automatic schema generation"
+msgstr "ìëì ì¸ ì¤í¤ë§ ìì±"
+
+#: index.docbook:57
+msgid "DDL may be generated from your mapping files by a Hibernate utility. The generated schema includes referential integrity constraints (primary and foreign keys) for entity and collection tables. Tables and sequences are also created for mapped identifier generators."
+msgstr "DDLì Hibernate ì í¸ë¦¬í°ì ìí´ ë¹ì ì 매í íì¼ë¤ë¡ë¶í° ìì±ë ì ìë¤. ìì±ë ì¤í¤ë§ë ìí°í° í
ì´ë¸ê³¼ ì½ë ì
í
ì´ë¸ì ëí 참조 ë¬´ê²°ì± ì»¨ì¤í¸ë ì¸í¸ë¤(íë¼ì´ë¨¸ë¦¬ í¤ì foreign í¤ë¤)ì í¬í¨íë¤. í
ì´ë¸ë¤ê³¼ ìíì¤ë¤ì ëí íì¹ë ìë³ì ìì±ê¸°ë¤ì ëí´ ìì±ëë¤."
+
+#: index.docbook:64
+msgid "You <emphasis>must</emphasis> specify a SQL <literal>Dialect</literal> via the <literal>hibernate.dialect</literal> property when using this tool, as DDL is highly vendor specific."
+msgstr "DDLì´ ë§¤ì° ë²¤ëì í¹ì íë¯ë¡, ì´ ë구를 ì¬ì©í ë ë¹ì ì <literal>hibernate.dialect</literal> íë¡í¼í°ë¥¼ íµí´ í ê°ì SQL <literal>Dialect</literal>를 ì§ì <emphasis>í´ì¼ íë¤</emphasis>."
+
+#: index.docbook:70
+msgid "First, customize your mapping files to improve the generated schema."
+msgstr "먼ì ìì±ë ì¤í¤ë§ë¥¼ ê°ì ìí¤ê¸° ìí´ ë¹ì ì 매í íì¼ë¤ì ë§ì¶¤í ìì¼ë¼."
+
+#: index.docbook:75
+msgid "Customizing the schema"
+msgstr "ì¤í¤ë§ ë§ì¶¤í ìí¤ê¸°"
+
+#: index.docbook:77
+msgid "Many Hibernate mapping elements define optional attributes named <literal>length</literal>, <literal>precision</literal> and <literal>scale</literal>. You may set the length, precision and scale of a column with this attribute."
+msgstr "ë§ì Hibernate 매í ììë¤ì <literal>length</literal>ë¡ ëª
ëª
ë ìµì
ìì±ì ì ìíë¤. ë¹ì ì ì´ ìì±ì¼ë¡ 컬ë¼ì 길ì´ë¥¼ ì¤ì í ì ìë¤.(ëë numeric/decimal ë°ì´í° íì
ë¤, ë°°ì ëì ëí´ ). ë§ì Hibernate ë§¤ì¹ ììë¤ì <literal>length</literal>, <literal>precision</literal> ê·¸ë¦¬ê³ <literal>scale</literal>ë¡ ëª
ëª
ë ìµì
ìì±ë¤ì ì ìíê³ ìë¤. ë¹ì ì ì´ ìì±ì¼ë¡ì 컬ë¼ì´ 길ì´, ì ë°ë, í¬ê¸°ë¥¼ ì¤ì í ì ìë¤."
+
+#: index.docbook:84
+msgid "<![CDATA[<property name=\"zip\" length=\"5\"/>]]>"
+msgstr "<![CDATA[<property name=\"zip\" length=\"5\"/>]]>"
+
+#: index.docbook:85
+msgid "<![CDATA[<property name=\"balance\" precision=\"12\" scale=\"2\"/>]]>"
+msgstr "<![CDATA[<property name=\"balance\" precision=\"12\" scale=\"2\"/>]]>"
+
+#: index.docbook:87
+msgid "Some tags also accept a <literal>not-null</literal> attribute (for generating a <literal>NOT NULL</literal> constraint on table columns) and a <literal>unique</literal> attribute (for generating <literal>UNIQUE</literal> constraint on table columns)."
+msgstr "ëªëª íê·¸ë¤ì ëí (í
ì´ë¸ 컬ë¼ë¤ì ëí <literal>NOT NULL</literal> 컨ì¤í¸ë ì¸í¸ë¥¼ ìì±ìí¤ë) <literal>not-null</literal> ìì±ê³¼ (í
ì´ë¸ 컬ë¼ë¤ì ëí <literal>UNIQUE</literal> 컨ì¤í¸ë ì¸í¸ë¥¼ ìì±ìí¤ë) <literal>unique</literal> ìì±ì ìì©íë¤."
+
+#: index.docbook:93
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" not-null=\"true\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" not-null=\"true\"/>]]>"
+
+#: index.docbook:95
+msgid "<![CDATA[<element column=\"serialNumber\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+msgstr "<![CDATA[<element column=\"serialNumber\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+
+#: index.docbook:97
+msgid "A <literal>unique-key</literal> attribute may be used to group columns in a single unique key constraint. Currently, the specified value of the <literal>unique-key</literal> attribute is <emphasis>not</emphasis> used to name the constraint in the generated DDL, only to group the columns in the mapping file."
+msgstr "<literal>unique-key</literal> ìì±ì íëì ì ì¼ í¤ ì»¨ì¤í¸ë ì¸í¸ë¡ 컬ë¼ë¤ì 그룹ì§ì°ëë° ì¬ì©ë ìë ìë¤. íì¬ <literal>unique-key</literal> ìì±ì ì§ì ë ê°ì ì°ì¶ë DDLë´ìì 컨ì¤í¸ë ì¸í¸ë¥¼ ëª
ëª
íëë° ì¬ì©ëì§ <emphasis>ìê³ </emphasis>, ì¤ì§ 매í íì¼ ë´ìì 컬ë¼ë¤ì 그룹 ì§ì°ëë° ì¬ì©ëë¤."
+
+#: index.docbook:105
+msgid ""
+ "<![CDATA[<many-to-one name=\"org\" column=\"orgId\" unique-key=\"OrgEmployeeId\"/>\n"
+ "<property name=\"employeeId\" unique-key=\"OrgEmployee\"/>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"org\" column=\"orgId\" unique-key=\"OrgEmployeeId\"/>\n"
+ "<property name=\"employeeId\" unique-key=\"OrgEmployee\"/>]]>"
+
+#: index.docbook:107
+msgid "An <literal>index</literal> attribute specifies the name of an index that will be created using the mapped column or columns. Multiple columns may be grouped into the same index, simply by specifying the same index name."
+msgstr "<literal>index</literal> ìì±ì 매íë ì»¬ë¼ ëë 컬ë¼ë¤ì ì¬ì©íì¬ ìì±ë ì¸ë±ì¤ì ì´ë¦ì ì§ì íë¤. ê°ë¨íê² ëì¼í ì¸ë±ì¤ ì´ë¦ì ì§ì í¨ì¼ë¡ì¨ ì¬ë¬ 컬ë¼ë¤ì´ ëì¼í ì¸ë±ì¤ ë´ë¡ 그룹ì§ìì§ ìë ìë¤."
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[<property name=\"lastName\" index=\"CustName\"/>\n"
+ "<property name=\"firstName\" index=\"CustName\"/>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"lastName\" index=\"CustName\"/>\n"
+ "<property name=\"firstName\" index=\"CustName\"/>]]>"
+
+#: index.docbook:115
+msgid "A <literal>foreign-key</literal> attribute may be used to override the name of any generated foreign key constraint."
+msgstr "<literal>foreign-key</literal> ìì±ì ììì ì°ì¶ë foreign í¤ ì»¨ì¤í¸ë ì¸í¸ì ì´ë¦ì ì¤ë²ë¼ì´ë ìí¤ëë° ì¬ì©ë ì ë ìë¤."
+
+#: index.docbook:120
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" foreign-key=\"FKFooBar\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" foreign-key=\"FKFooBar\"/>]]>"
+
+#: index.docbook:122
+msgid "Many mapping elements also accept a child <literal><column></literal> element. This is particularly useful for mapping multi-column types:"
+msgstr "ë§ì 매í ììë¤ì ëí íëì ìì <literal><column></literal> ìì를 íì©íë¤. ì´ê²ì í¹í ë¤ì¤ ì»¬ë¼ íì
ë¤ì 매ííëë° ì ì©íë¤:"
+
+#: index.docbook:127
+msgid ""
+ "<![CDATA[<property name=\"name\" type=\"my.customtypes.Name\"/>\n"
+ " <column name=\"last\" not-null=\"true\" index=\"bar_idx\" length=\"30\"/>\n"
+ " <column name=\"first\" not-null=\"true\" index=\"bar_idx\" length=\"20\"/>\n"
+ " <column name=\"initial\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"name\" type=\"my.customtypes.Name\"/>\n"
+ " <column name=\"last\" not-null=\"true\" index=\"bar_idx\" length=\"30\"/>\n"
+ " <column name=\"first\" not-null=\"true\" index=\"bar_idx\" length=\"20\"/>\n"
+ " <column name=\"initial\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:129
+msgid "The <literal>default</literal> attribute lets you specify a default value for a column (you should assign the same value to the mapped property before saving a new instance of the mapped class)."
+msgstr "ë¤ë¥¸ ë°©ë²ì¼ë¡, ì´ë¤ ììë¤ì ëí ìì <literal><column></literal> ìì를 ìì©íë¤. ì´ê²ì ë¤ì¤ ì»¬ë¼ íì
ë¤ì í¹í ì ì©íë¤: <literal>default</literal> ìì±ì ë¹ì ì¼ë¡ íì¬ê¸ íëì 컬ë¼ì ëí ëí´í¸ ê°ì ì¤ì íëë¡ íë¤(ë¹ì ì 매íë í´ëì¤ì ìë¡ì´ ì¸ì¤í´ì¤ë¥¼ ì ì¥í기 ì ì 매íë íë¡í¼í°ì ëì¼í ê°ì í ë¹íê² ë ê²ì´ë¤)."
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<property name=\"credits\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"credits\" default=\"10\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"credits\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"credits\" default=\"10\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:137
+msgid ""
+ "<![CDATA[<version name=\"version\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"version\" default=\"0\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<version name=\"version\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"version\" default=\"0\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:139
+msgid "The <literal>sql-type</literal> attribute allows the user to override the default mapping of a Hibernate type to SQL datatype."
+msgstr "<literal>sql-type</literal> ìì±ì SQL ë°ì´í°íì
ì ëí Hibernate íì
ì ëí´í¸ 매íì ì¤ë²ë¼ì´ë ìí¤ë ê²ì ì¬ì©ììê² íì©í´ì¤ë¤."
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<property name=\"balance\" type=\"float\">\n"
+ " <column name=\"balance\" sql-type=\"decimal(13,3)\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"balance\" type=\"float\">\n"
+ " <column name=\"balance\" sql-type=\"decimal(13,3)\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:146
+msgid "The <literal>check</literal> attribute allows you to specify a check constraint."
+msgstr "<literal>check</literal> ìì±ì check 컨ì¤í¸ë ì¸í¸ë¥¼ ì§ì íë ê²ì ë¹ì ìê² íì©í´ì¤ë¤."
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">\n"
+ " ...\n"
+ " <property name=\"bar\" type=\"float\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">\n"
+ " ...\n"
+ " <property name=\"bar\" type=\"float\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:156
+msgid "Summary"
+msgstr "<title>ìì½</title>"
+
+#: index.docbook:163
+msgid "Attribute"
+msgstr "<entry>ìì±</entry>"
+
+#: index.docbook:164
+msgid "Values"
+msgstr "<entry>ê°ë¤</entry>"
+
+#: index.docbook:165
+msgid "Interpretation"
+msgstr "<entry>í´ì</entry>"
+
+#: index.docbook:170
+msgid "length"
+msgstr "length"
+
+#: index.docbook:171, index.docbook:176, index.docbook:181
+msgid "number"
+msgstr "number"
+
+#: index.docbook:172
+msgid "column length"
+msgstr "ì»¬ë¼ ê¸¸ì´"
+
+#: index.docbook:175
+msgid "precision"
+msgstr "precision"
+
+#: index.docbook:177
+msgid "column decimal precision"
+msgstr "ì»¬ë¼ decimal ì ë°ë"
+
+#: index.docbook:180
+msgid "scale"
+msgstr "scale"
+
+#: index.docbook:182
+msgid "column decimal scale"
+msgstr "ì»¬ë¼ decimal í¬ê¸°"
+
+#: index.docbook:185
+msgid "not-null"
+msgstr "not-null"
+
+#: index.docbook:186, index.docbook:191
+msgid "true|false"
+msgstr "true|false"
+
+#: index.docbook:187
+msgid "specfies that the column should be non-nullable"
+msgstr "컬ë¼ì´ nullì´ ìëì´ì¼ í¨ì ì§ì íë¤"
+
+#: index.docbook:190
+msgid "unique"
+msgstr "unique"
+
+#: index.docbook:192
+msgid "specifies that the column should have a unique constraint"
+msgstr "컬ë¼ì´ íëì ì ì¼ ì»¨ì¤í¸ë ì¸í¸ë¥¼ ê°ì ¸ì¼í¨ì ì§ì íë¤"
+
+#: index.docbook:195
+msgid "index"
+msgstr "index"
+
+#: index.docbook:196
+msgid "index_name"
+msgstr "index_name"
+
+#: index.docbook:197
+msgid "specifies the name of a (multi-column) index"
+msgstr "(ë¤ì¤-컬ë¼) ì¸ë±ì¤ì ì´ë¦ì ì§ì íë¤"
+
+#: index.docbook:200
+msgid "unique-key"
+msgstr "unique-key"
+
+#: index.docbook:201
+msgid "unique_key_name"
+msgstr "unique_key_name"
+
+#: index.docbook:202
+msgid "specifies the name of a multi-column unique constraint"
+msgstr "ë¤ì¤-ì»¬ë¼ ì ì¼ ì»¨ì¤í¸ë ì¸í¸ì ì´ë¦ì ì§ì íë¤"
+
+#: index.docbook:205
+msgid "foreign-key"
+msgstr "foreign-key"
+
+#: index.docbook:206
+msgid "foreign_key_name"
+msgstr "foreign_key_name"
+
+#: index.docbook:207
+msgid "specifies the name of the foreign key constraint generated for an association, for a <literal><one-to-one></literal>, <literal><many-to-one></literal>, <literal><key></literal>, or <literal><many-to-many></literal> mapping element. Note that <literal>inverse=\"true\"</literal> sides will not be considered by <literal>SchemaExport</literal>."
+msgstr "íëì ì°ê´ì ëí´, <literal><one-to-one></literal>, <literal><many-to-one></literal>, <literal><key></literal>, ëë <literal><many-to-many></literal> 매í ììì ëí´ foreign key 컨ì¤í¸ë ì¸í¸ì ì´ë¦ì ì§ì íë¤.<literal>inverse=\"true\"</literal> 측ë¤ì <literal>SchemaExport</literal>ì ìí´ ê³ ë ¤ëì§ ìì ê²ìì ë
¸í¸íë¼."
+
+#: index.docbook:217
+msgid "sql-type"
+msgstr "sql-type"
+
+#: index.docbook:218
+msgid "SQL column type"
+msgstr "SQL column type"
+
+#: index.docbook:219
+msgid "overrides the default column type (attribute of <literal><column></literal> element only)"
+msgstr "ëí´í¸ ì»¬ë¼ íì
ì ì¤ë²ë¼ì´ë ìí¨ë¤ (<literal><column></literal> ììì ìì±ìë§)"
+
+#: index.docbook:225
+msgid "default"
+msgstr "default"
+
+#: index.docbook:226, index.docbook:233
+msgid "SQL expression"
+msgstr "SQL expression"
+
+#: index.docbook:227
+msgid "specify a default value for the column"
+msgstr "컬ë¼ì ëí ëí´í¸ ê°ì ì§ì íë¤"
+
+#: index.docbook:232
+msgid "check"
+msgstr "check"
+
+#: index.docbook:234
+msgid "create an SQL check constraint on either column or table"
+msgstr "ì»¬ë¼ ëë í
ì´ë¸ì ëí SQL check 컨ì¤í¸ë ì¸í¸ë¥¼ ìì±ìí¨ë¤"
+
+#: index.docbook:242
+msgid "The <literal><comment></literal> element allows you to specify comments for the generated schema."
+msgstr "<literal><comment></literal> ììë ìì±ë ì¤í¤ë§ì ëí 주ìë¤ì ì§ì íë ê²ì ë¹ì ìê² íì©í´ì¤ë¤."
+
+#: index.docbook:247
+msgid ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">\n"
+ " <comment>Current customers only</comment>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">\n"
+ " <comment>Current customers only</comment>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[<property name=\"balance\">\n"
+ " <column name=\"bal\">\n"
+ " <comment>Balance in USD</comment>\n"
+ " </column>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"balance\">\n"
+ " <column name=\"bal\">\n"
+ " <comment>Balance in USD</comment>\n"
+ " </column>\n"
+ "</property>]]>"
+
+#: index.docbook:251
+msgid "This results in a <literal>comment on table</literal> or <literal>comment on column</literal> statement in the generated DDL (where supported)."
+msgstr "ì´ê²ì (ì§ìëë ê²½ì°) ìì±ë DDLìì <literal>comment on table</literal> ëë <literal>comment on column</literal> 문ì¥ì¼ë¡ ê·ê²°ëë¤."
+
+#: index.docbook:260
+msgid "Running the tool"
+msgstr "ë구 ì¤íí기"
+
+#: index.docbook:262
+msgid "The <literal>SchemaExport</literal> tool writes a DDL script to standard out and/or executes the DDL statements."
+msgstr "<literal>SchemaExport</literal> ë구ë DDL ì¤í¬ë¦½í¸ë¥¼ íì¤ ì¶ë ¥ì¼ë¡ ê¸°ë¡ íê³ /íê±°ë DDL 문ì¥ë¤ì ì¤íìí¨ë¤."
+
+#: index.docbook:267
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>options mapping_files</emphasis>"
+
+#: index.docbook:273
+msgid "<literal>SchemaExport</literal> Command Line Options"
+msgstr "<literal>SchemaExport</literal> ëª
ë ¹ ë¼ì¸ ìµì
ë¤"
+
+#: index.docbook:279, index.docbook:429, index.docbook:498
+msgid "Option"
+msgstr "<entry>ìµì
</entry>"
+
+#: index.docbook:280, index.docbook:367, index.docbook:430, index.docbook:499
+msgid "Description"
+msgstr "<entry>ì¤ëª
</entry>"
+
+#: index.docbook:285, index.docbook:435
+msgid "--quiet"
+msgstr "--quiet"
+
+#: index.docbook:286, index.docbook:436
+msgid "don't output the script to stdout"
+msgstr "ì¤í¬ë¦½í¸ë¥¼ íì¤ì¶ë ¥ì¼ë¡ ì¶ë ¥íì§ ìëë¤"
+
+#: index.docbook:289
+msgid "--drop"
+msgstr "--drop"
+
+#: index.docbook:290
+msgid "only drop the tables"
+msgstr "ì¤ì§ í
ì´ë¸ë¤ì ëë¡ìí¨ë¤"
+
+#: index.docbook:293
+msgid "--create"
+msgstr "--create"
+
+#: index.docbook:294
+msgid "only create the tables"
+msgstr "ì¤ì§ í
ì´ë¸ë¤ì ìì±ìí¨ë¤"
+
+#: index.docbook:297, index.docbook:439
+msgid "--text"
+msgstr "--text"
+
+#: index.docbook:298
+msgid "don't export to the database"
+msgstr "ë°ì´í°ë² ì´ì¤ë¡ ë´ë³´ë´ê¸° íì§ ìëë¤"
+
+#: index.docbook:301
+msgid "--output=my_schema.ddl"
+msgstr "--output=my_schema.ddl"
+
+#: index.docbook:302
+msgid "output the ddl script to a file"
+msgstr "ddl ì¤í¬ë¦½í¸ë¥¼ íì¼ë¡ ì¶ë ¥íë¤"
+
+#: index.docbook:305, index.docbook:443, index.docbook:504
+msgid "--naming=eg.MyNamingStrategy"
+msgstr "--naming=eg.MyNamingStrategy"
+
+#: index.docbook:306, index.docbook:444, index.docbook:505
+msgid "select a <literal>NamingStrategy</literal>"
+msgstr "íëì <literal>NamingStrategy</literal>를 ì ííë¤"
+
+#: index.docbook:309, index.docbook:451, index.docbook:512
+msgid "--config=hibernate.cfg.xml"
+msgstr "--config=hibernate.cfg.xml"
+
+#: index.docbook:310
+msgid "read Hibernate configuration from an XML file"
+msgstr "XML íì¼ë¡ë¶í° Hibernate 구ì±ì ì½ì´ë¤ì¸ë¤"
+
+#: index.docbook:313, index.docbook:447, index.docbook:508
+msgid "--properties=hibernate.properties"
+msgstr "--properties=hibernate.properties"
+
+#: index.docbook:314, index.docbook:448, index.docbook:509
+msgid "read database properties from a file"
+msgstr "íì¼ë¡ë¶í° ë°ì´í°ë² ì´ì¤ íë¡í¼í°ë¤ì ì½ì´ë¤ì¸ë¤"
+
+#: index.docbook:317
+msgid "--format"
+msgstr "--format"
+
+#: index.docbook:318
+msgid "format the generated SQL nicely in the script"
+msgstr "ìì±ë SQLì ì¤í¬ë¦½í¸ ë´ì ì¢ê² íìì§ì´ë¤"
+
+#: index.docbook:321
+msgid "--delimiter=;"
+msgstr "--delimiter=;"
+
+#: index.docbook:322
+msgid "set an end of line delimiter for the script"
+msgstr "ì¤í¬ë¦½í¸ë¥¼ ìí ë¼ì¸ ê²½ê³ì ëì ì¤ì íë¤"
+
+#: index.docbook:328
+msgid "You may even embed <literal>SchemaExport</literal> in your application:"
+msgstr "ë¹ì ì ë¹ì ì ì´í리ì¼ì´ì
ë´ì <literal>SchemaExport</literal>를 ì½ì
ìí¬ ìë ìë¤:"
+
+#: index.docbook:332
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+
+#: index.docbook:337
+msgid "Properties"
+msgstr "íë¡í¼í°ë¤"
+
+#: index.docbook:339
+msgid "Database properties may be specified"
+msgstr "ë°ì´í°ë² ì´ì¤ íë¡í¼í°ë¤ì ë¤ìê³¼ ê°ì´ ì§ì ë ì ìë¤"
+
+#: index.docbook:345
+msgid "as system properties with <literal>-D</literal><emphasis><property></emphasis>"
+msgstr "<literal>-D</literal><emphasis><property></emphasis>를 ê°ì§ ìì¤í
íë¡í¼í°ë¡ì"
+
+#: index.docbook:348
+msgid "in <literal>hibernate.properties</literal>"
+msgstr "<literal>hibernate.properties</literal> ë´ìì"
+
+#: index.docbook:351
+msgid "in a named properties file with <literal>--properties</literal>"
+msgstr "<literal>--properties</literal>를 ê°ì§ ëª
ëª
ë íë¡í¼í°ë¤ ë´ìì"
+
+#: index.docbook:355
+msgid "The needed properties are:"
+msgstr "íìí íë¡í¼í°ë¤ì ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:360
+msgid "SchemaExport Connection Properties"
+msgstr "SchemaExport 커ë¥ì
íë¡í¼í°ë¤"
+
+#: index.docbook:366
+msgid "Property Name"
+msgstr "íë¡í¼í° ì´ë¦"
+
+#: index.docbook:372
+msgid "hibernate.connection.driver_class"
+msgstr "hibernate.connection.driver_class"
+
+#: index.docbook:373
+msgid "jdbc driver class"
+msgstr "jdbc ëë¼ì´ë² í´ëì¤"
+
+#: index.docbook:376
+msgid "hibernate.connection.url"
+msgstr "hibernate.connection.url"
+
+#: index.docbook:377
+msgid "jdbc url"
+msgstr "jdbc url"
+
+#: index.docbook:380
+msgid "hibernate.connection.username"
+msgstr "hibernate.connection.username"
+
+#: index.docbook:381
+msgid "database user"
+msgstr "ë°ì´í°ë² ì´ì¤ ì¬ì©ì"
+
+#: index.docbook:384
+msgid "hibernate.connection.password"
+msgstr "hibernate.connection.password"
+
+#: index.docbook:385
+msgid "user password"
+msgstr "ì¬ì©ì í¨ì¤ìë"
+
+#: index.docbook:388
+msgid "hibernate.dialect"
+msgstr "hibernate.dialect"
+
+#: index.docbook:389
+msgid "dialect"
+msgstr "dialect"
+
+#: index.docbook:398
+msgid "Using Ant"
+msgstr "Ant ì¬ì©í기"
+
+#: index.docbook:400
+msgid "You can call <literal>SchemaExport</literal> from your Ant build script:"
+msgstr "ë¹ì ì ë¹ì ì Ant ë¹ë ì¤í¬ë¦½í¸ìì <literal>SchemaExport</literal>를 í¸ì¶í ì ìë¤:"
+
+#: index.docbook:404
+msgid ""
+ "<![CDATA[<target name=\"schemaexport\">\n"
+ " <taskdef name=\"schemaexport\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaexport\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\"\n"
+ " text=\"no\"\n"
+ " drop=\"no\"\n"
+ " delimiter=\";\"\n"
+ " output=\"schema-export.sql\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaexport>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"schemaexport\">\n"
+ " <taskdef name=\"schemaexport\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaexport\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\"\n"
+ " text=\"no\"\n"
+ " drop=\"no\"\n"
+ " delimiter=\";\"\n"
+ " output=\"schema-export.sql\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaexport>\n"
+ "</target>]]>"
+
+#: index.docbook:409
+msgid "Incremental schema updates"
+msgstr "ì ì¦íë ì¤í¤ë§ ì
ë°ì´í¸ë¤"
+
+#: index.docbook:411
+msgid "The <literal>SchemaUpdate</literal> tool will update an existing schema with \"incremental\" changes. Note that <literal>SchemaUpdate</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers."
+msgstr "<literal>SchemaUpdate</literal> ë구ë \"ì ì¦íë\" ë³ê²½ë¤ì ê°ì§ 기존 ì¤í¤ë§ë¥¼ ë³ê²½ìí¬ ê²ì´ë¤. <literal>SchemaUpdate</literal>ë JDBC ë©íë°ì´í° APIì 무ê²ê² ìì¡´íì¬ì, ê·¸ê²ì 모ë JDBC ëë¼ì´ë²ë¤ì ëìíì§ ìì ê²ìì 주목íë¼."
+
+#: index.docbook:417
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>options mapping_files</emphasis>"
+
+#: index.docbook:423
+msgid "<literal>SchemaUpdate</literal> Command Line Options"
+msgstr "<literal>SchemaUpdate</literal> ëª
ë ¹ ë¼ì¸ ìµì
ë¤"
+
+#: index.docbook:440
+msgid "don't export the script to the database"
+msgstr "ì¤í¬ë¦½í¸ë¥¼ ë°ì´í°ë² ì´ì¤ë¡ ë´ë³´ë´ê¸° íì§ ìëë¤"
+
+#: index.docbook:452, index.docbook:513
+msgid "specify a <literal>.cfg.xml</literal> file"
+msgstr "<literal>.cfg.xml</literal> íì¼ì ì§ì íë¤"
+
+#: index.docbook:458
+msgid "You may embed <literal>SchemaUpdate</literal> in your application:"
+msgstr "ë¹ì ì ë¹ì ì ì´í리ì¼ì´ì
ë´ì <literal>SchemaUpdate</literal>를 ì½ì
ìí¬ ì ìë¤:"
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+
+#: index.docbook:467
+msgid "Using Ant for incremental schema updates"
+msgstr "ì ì¦íë ì¤í¤ë§ ì
ë°ì´í¸ë¤ì Ant ì¬ì©í기"
+
+#: index.docbook:469
+msgid "You can call <literal>SchemaUpdate</literal> from the Ant script:"
+msgstr "ë¹ì ì Ant ì¤í¬ë¦½í¸ìì<literal>SchemaUpdate</literal>를 í¸ì¶í ì ìë¤:"
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[<target name=\"schemaupdate\">\n"
+ " <taskdef name=\"schemaupdate\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaupdate\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaupdate>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"schemaupdate\">\n"
+ " <taskdef name=\"schemaupdate\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaupdate\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaupdate>\n"
+ "</target>]]>"
+
+#: index.docbook:478
+msgid "Schema validation"
+msgstr "ì¤í¤ë§ ì í¨ì± ê²ì¬"
+
+#: index.docbook:480
+msgid "The <literal>SchemaValidator</literal> tool will validate that the existing database schema \"matches\" your mapping documents. Note that <literal>SchemaValidator</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers. This tool is extremely useful for testing."
+msgstr "<literal>SchemaValidator</literal> ë구ë 기존ì ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ê° ë¹ì ì 매í 문ìë¤ê³¼ \"ì¼ì¹íëì§\"를 ì í¨ì± ê²ì¬í ê²ì´ë¤. <literal>SchemaValidator</literal>ê° JDBC ë©íë°ì´í° APIì 무ê²ê² ìì¡´íë¯ë¡ ê·¸ê²ì 모ë JDBC ëë¼ì´ë²ë¤ì ëí´ ëìíì§ ìì ê²ì´ë¤. ì´ ë구ë í
ì¤í
ì ê·¹í ì ì©íë¤."
+
+#: index.docbook:486
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaValidator</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaValidator</literal> <emphasis>options mapping_files</emphasis>"
+
+#: index.docbook:492
+msgid "<literal>SchemaValidator</literal> Command Line Options"
+msgstr "<literal>SchemaValidator</literal> ëª
ë ¹ ë¼ì¸ ìµì
ë¤"
+
+#: index.docbook:519
+msgid "You may embed <literal>SchemaValidator</literal> in your application:"
+msgstr "ë¹ì ì ë¹ì ì ì´í리ì¼ì´ì
ë´ì <literal>SchemaValidator</literal>ì ì½ì
ìí¬ ì ë ìë¤:"
+
+#: index.docbook:523
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaValidator(cfg).validate();]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaValidator(cfg).validate();]]>"
+
+#: index.docbook:528
+msgid "Using Ant for schema validation"
+msgstr "ì¤í¤ë§ ì í¨ì± ê²ì¬ë¥¼ ìí´ Ant ì¬ì©í기"
+
+#: index.docbook:530
+msgid "You can call <literal>SchemaValidator</literal> from the Ant script:"
+msgstr "ë¹ì ì Ant ì¤í¬ë¦½í¸ìì <literal>SchemaValidator</literal>를 í¸ì¶í ì ìë¤:"
+
+#: index.docbook:534
+msgid ""
+ "<![CDATA[<target name=\"schemavalidate\">\n"
+ " <taskdef name=\"schemavalidator\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaValidatorTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemavalidator\n"
+ " properties=\"hibernate.properties\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemavalidator>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"schemavalidate\">\n"
+ " <taskdef name=\"schemavalidator\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaValidatorTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemavalidator\n"
+ " properties=\"hibernate.properties\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemavalidator>\n"
+ "</target>]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/transactions.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/transactions.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/transactions.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,790 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Transactions And Concurrency"
+msgstr "í¸ëìì
ë¤ê³¼ ëìì±"
+
+#: index.docbook:7
+msgid "The most important point about Hibernate and concurrency control is that it is very easy to understand. Hibernate directly uses JDBC connections and JTA resources without adding any additional locking behavior. We highly recommend you spend some time with the JDBC, ANSI, and transaction isolation specification of your database management system."
+msgstr "Hibernateì ëìì± ì ì´ì ëí ê°ì¥ ì¤ìí ì ì ì´í´íê¸°ê° ë§¤ì° ì½ë¤ë ì ì´ë¤. Hibernateë ì´ë¤ ì¶ê°ì ì¸ ì ê¸ íì ìì´ JDBC 커ë¥ì
ë¤ê³¼ JTA 리ìì¤ë¤ì ì§ì ì¬ì©íë¤. ì°ë¦¬ë ë¹ì ì ë°ì´í°ë² ì´ì¤ ê´ë¦¬ ìì¤í
ì JDBC, ANSI, ê·¸ë¦¬ê³ í¸ëìì
격리 ëª
ì¸ì ì½ê°ì ìê°ì í ì í ê²ì ë§¤ì° ê¶ì¥íë¤."
+
+#: index.docbook:14
+msgid "Hibernate does not lock objects in memory. Your application can expect the behavior as defined by the isolation level of your database transactions. Note that thanks to the <literal>Session</literal>, which is also a transaction-scoped cache, Hibernate provides repeatable reads for lookup by identifier and entity queries (not reporting queries that return scalar values)."
+msgstr "Hibernateë ë©ëª¨ë¦¬ ë´ìì ê°ì²´ë¤ì ì ê·¸ì§ ìëë¤. ë¹ì ì ì´í리ì¼ì´ì
ì 격리 ë 벨ì ìí´ ì ìë ëë¡ íì를 기ëí ì ìë¤. ëí transaction-ììì ìºìì¸ <literal>Session</literal> ëë¶ì, Hibernateë (ì¤ì¹¼ë¼ ê°ë¤ì ë°ííë ì§ìë¤ì ë³´ê³ íì§ ìë) ìë³ìì ìí°í° ì§ìë¤ì ìí 룩ì
ì ìí´ ë°ë³µ ê°ë¥í ì½ê¸°ë¥¼ ì ê³µíë¤."
+
+#: index.docbook:22
+msgid "In addition to versioning for automatic optimistic concurrency control, Hibernate also offers a (minor) API for pessimistic locking of rows, using the <literal>SELECT FOR UPDATE</literal> syntax. Optimistic concurrency control and this API are discussed later in this chapter."
+msgstr "ìëì ì¸ optimistic ëìì± ì ì´ë¥¼ ìí ë²ì íì ë§ë¶ì¬, Hibernateë ëí <literal>SELECT FOR UPDATE</literal> 구문ì ì¬ì©íì¬ íë¤ì ëí pessimistic ì ê¸ì ìí íëì (ë§ì´ë)API를 ì ê³µíë¤. optimistic ëìì± ì ì´ì ì´ APIë ì´ ì¥ì ë·ë¶ë¶ìì ë
¼ìëë¤."
+
+#: index.docbook:29
+msgid "We start the discussion of concurrency control in Hibernate with the granularity of <literal>Configuration</literal>, <literal>SessionFactory</literal>, and <literal>Session</literal>, as well as database transactions and long conversations."
+msgstr "ì°ë¦¬ë <literal>Configuration</literal>, <literal>SessionFactory</literal>, <literal>Session</literal>, ìê°±ì´ë¥¼ ê°ì§ Hibernateììì ëìì± ì ì´ ë¿ë§ ìëë¼ ë°ì´í°ë² ì´ì¤ í¸ëìì
ê³¼ ì¥ê¸°ê°ì ê±¸ì¹ (ì»´í¨í°ìì)ëíë¤ì ëí ë
¼ì를 ììíë¤."
+
+#: index.docbook:36
+msgid "Session and transaction scopes"
+msgstr "ì¸ì
ììê³¼ í¸ëìì
ìì"
+
+#: index.docbook:38
+msgid "A <literal>SessionFactory</literal> 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</literal> instance."
+msgstr "<literal>SessionFactory</literal>ë 모ë ì´í리ì¼ì´ì
ì°ë ëë¤ì ìí´ ê³µì ëëë¡ ê³ ìë ìì±ì ë¹ì©ì´ ëë, ì°ë ëìì (threadsafe) ê°ì²´ì´ë¤. ê·¸ê²ì ëê° ì´í리ì¼ì´ì
ìì ìì <literal>Configuration</literal> ì¸ì¤í´ì¤ë¡ë¶í° íë² ìì±ëë¤."
+
+#: index.docbook:44
+msgid "A <literal>Session</literal> is an inexpensive, non-threadsafe object that should be used once, for a single request, a conversation, single unit of work, and then discarded. A <literal>Session</literal> will not obtain a JDBC <literal>Connection</literal> (or a <literal>Datasource</literal>) unless it is needed, hence consume no resources until used."
+msgstr "<literal>Session</literal>ì íëì ìì², íëì ëí , íëì ìì
ë¨ì를 ìí´ íë²ë§ ì¬ì©ëê³ ëì í기ë ìì ì¸, ë¹ì©ì´ ë¤ì§ ìë, ì°ë ë ìì íì§ ìì ê°ì²´ì´ë¤. <literal>Session</literal>ì 커ë¥ì
ì´ íìíì§ ìì¼ë©´ íëì JDBC <literal>Connection</literal>(ëë <literal>Datasource</literal>)를 ì»ì§ ìì ê²ì´ë¯ë¡, ì¬ì©ë ëê¹ì§ 리ìì¤ë¤ì ìë¹íì§ ìëë¤."
+
+#: index.docbook:52
+msgid "To complete this picture you also have to think about database transactions. A database transaction has to be as short as possible, to reduce lock contention in the database. Long database transactions will prevent your application from scaling to highly concurrent load. Hence, it is almost never good design to hold a database transaction open during user think time, until the unit of work is complete."
+msgstr "ì´ ê·¸ë¦¼ì ìì±í기 ìí´ ë¹ì ì ëí ë°ì´í°ë² ì´ì¤ í¸ëì¬ì
ë¤ì ëí´ ìê°í´ì¼ íë¤. ë°ì´í°ë² ì´ì¤ í¸ëìì
ì ë°ì´í°ë² ì´ì¤ìì ì ê¸ ë¤í¼ì ì¤ì´ê¸° ìí´ ê°ë¥í 짧ìì¼ íë¤. 긴 ë°ì´í°ë² ì´ì¤ í¸ëìì
ë¤ì ë¹ì ì ì´í리ì¼ì´ì
ì´ ê³ ëì ëìì± ë¡ëë¡ì ê°ì©ì±ì ëì´ë ê²ì ë°©í´í ê²ì´ë¤. ê·¸ë¬ë¯ë¡ ì¬ì©ìê° ìê°íë ìê° ëì ë¨ì ìì
ì´ ìë£ë ëê¹ì§ ë°ì´í°ë² ì´ì¤ í¸ëìì
ì ì´ë ¤ì§ì±ë¡ ìì íë ê²ì ëê° ê²°ì½ ì¢ì ì¤ê³ë ìëë¤."
+
+#: index.docbook:61
+msgid "What is the scope of a unit of work? Can a single Hibernate <literal>Session</literal> span several database transactions or is this a one-to-one relationship of scopes? When should you open and close a <literal>Session</literal> and how do you demarcate the database transaction boundaries?"
+msgstr "íëì ìì
ë¨ìì ììì 무ìì¸ê°? íëì Hibernate <literal>Session</literal>ì ëªëª ë°ì´í°ë² ì´ì¤ í¸ëìì
ë¤ì ê±¸ì¹ ì ìëê° ëë ì´ê²ì ììë¤ì one-to-one ê´ê³ì¸ê°? ë¹ì ì ì¸ì <literal>Session</literal>ì ì´ê³ ë«ëê° ê·¸ë¦¬ê³ ë¹ì ì ë°ì´í°ë² ì´ì¤ í¸ëìì
ê²½ê³ë¤ì ì´ë»ê² íì íëê°?"
+
+#: index.docbook:69
+msgid "Unit of work"
+msgstr "ìì
ë¨ì"
+
+#: index.docbook:71
+msgid "First, don't use the <emphasis>session-per-operation</emphasis> antipattern, that is, don't open and close a <literal>Session</literal> for every simple database call in a single thread! Of course, 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. (Note that this also means that auto-commit after every single SQL statement is useless in an application, this mode is intended for ad-hoc SQL console work. Hibernate disables, or expects the application server to do so, auto-commit mode immediately.) Database transactions are never optional, all communication with a database has to occur inside a transaction, no matter if you read or write data. As explained, 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 much more maintainable and extensible."
+msgstr "첫ë²ì§¸ë¡, <emphasis>session-per-operation</emphasis> anti-í¨í´ì ì¬ì©íì§ ë§ë¼. ì¦, ë¨ì¼ ì°ë ë ë´ìì 모ë ê°ë¨í ë°ì´í°ë² ì´ì¤ í¸ì¶ì ëí´ <literal>Session</literal>ì ì´ê³ ë«ì§ ë§ë¼! ë¬¼ë¡ ê°ì ê²ì´ ë°ì´í°ë² ì´ì¤ í¸ëìì
ë¤ì ëí´ìë ì°¸ì´ë¤. ì´í리ì¼ì´ì
ë´ì ë°ì´í°ë² ì´ì¤ í¸ì¶ë¤ì ê³íë ìì를ì¬ì©íì¬ íí´ì§ë©°, ê·¸ê²ë¤ì ìì ìì
ë¨ì ìì¼ë¡ 그룹ì§ìì§ë¤. (ì´ê²ì ëí 모ë íëì SQL ë¬¸ì¥ ë¤ì auto-commit(ìë-커ë°)ì´ ì´í리ì¼ì´ì
ë´ìì 무ì©ì§ë¬¼ìì ì미íê³ , ì´ ëª¨ëê° SQL ì½ì ìì
ì ëëë¡ ê³ ìëììì ë
¸í¸íë¼. Hibernateë ì미íê³ , ì´ ëª¨ëë Hibernateë ì¦ì ìë-ì»¤ë° ëª¨ë를 ì¬ì© ë¶ê°ë¥íê² íê±°ë, ì´í리ì¼ì´ì
ìë²ê° ê·¸ë ê² ííê³ , ì¦ì ìë-커ë°ìí¤ë ê²ì ì¬ì©ë¶ê°ë¥íê² íê±°ë ,ê·¸ë ê² ííë ê²ì 기ëíë!
¤.) ë°ì´í°ë² ì´ì¤ í¸ëìì
ë¤ì ê²°ì½ ìµì
ì´ ìëë©°, íëì ë°ì´í°ë² ì´ì¤ìì 모ë íµì ì ë¹ì ì´ ë°ì´í°ë¥¼ ì½ë ì°ë¨ê°ì ìê´ìì´ íëì í¸ëìì
ë´ìì ë°ìí´ì¼ íë¤. ì¤ëª
íìë¯ì´, ë°ì´í° ì½ê¸°ë¥¼ ìí auto-commit í¹ì§ì í¼í´ì¼ í ê²ì´ë©°, ë§ì ìì í¸ëìì
ë¤ì íëì ëª
ë£íê² ì ìë ìì
ë¨ìë³´ë¤ ë ì¢ê² ìíë ê² ê°ì§ ìë¤. íìê° ëí í¨ì¬ ë ì ì§ê°ë¥íê³ íì¥ì ì´ë¤."
+
+#: index.docbook:87
+msgid "The most common pattern in a multi-user client/server application is <emphasis>session-per-request</emphasis>. In this model, a request from the client is send to the server (where the Hibernate persistence layer runs), a new Hibernate <literal>Session</literal> is opened, and all database operations are executed in this unit of work. Once the work has been completed (and the response for the client has been prepared), the session is flushed and closed. You would also use a single database transaction to serve the clients request, starting and committing it when you open and close the <literal>Session</literal>. The relationship between the two is one-to-one and this model is a perfect fit for many applications."
+msgstr "ë¤ì¤ ì¬ì©ì í´ë¼ì´ì¸í¸/ìë² ì´í리ì¼ì´ì
ìì ê°ì¥ ê³µíµë í¨í´ì <emphasis>session-per-request</emphasis>ì´ë¤. ì´ ëª¨íìì, í´ë¼ì´ì¸í¸ë¡ë¶í°ì ìì²ì (Hibernate ìì ê³ì¸µì´ ì¤íëë) ìë²ë¡ ì ì¡ëê³ , ìë¡ì´ Hibernate <literal>Session</literal>ì´ ì´ë ¤ì§ê³ , 모ë ë°ì´í°ë² ì´ì¤ ì¤í¼ë ì´ì
ë¤ì´ ì´ ìì
ë¨ì ë´ìì ì¤íëë¤. ì¼ë¨ ê·¸ ìì
ì´ ìë£ëìë¤ë©´(ê·¸ë¦¬ê³ í´ë¼ì´ì¸í¸ì ëí ìëµì´ ì¤ë¹ëìë¤ë©´), ê·¸ ì¸ì
ì flush ëê³ ë«íì§ë¤. ë¹ì ì ëí ë¹ì ì´ <literal>Session</literal>ì ì´ê³ ë«ì ë ê·¸ê²ì ììíê³ ì»¤ë°ìì¼ì í´ë¼ì´ì¸í¸ ìì²ì ìë¹ì¤íëë° í ê°ì ë°ì´í°ë² ì´ì¤ í¸ëìì
ì ì¬ì©íê² ë ê²ì´ë¤. ë ì¬ì´ì ê´ê³ë ì¼ëì¼ ëìì´ê³ ì´ ëª¨íì ë§ì ì´í리ì¼ì´ì
ë¤ìì ìì íê² ì í©íë¤."
+
+#: index.docbook:99
+msgid "The challenge lies in the implementation. Hibernate provides built-in management of the \"current session\" to simplify this pattern. All you have to do is start a transaction when a server request has to be processed, and end the transaction before the response is send to the client. You can do this in any way you like, common solutions are <literal>ServletFilter</literal>, 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 decide to use programmatic transaction demarcation, prefer the Hibernate <literal>Transaction</literal> API shown later in this chapter, for ease of use and code portability."
+msgstr "ëì ë 구íì ëì¬ìë¤: Hibernateë ì´ í¨í´ì ë¨ìí ìí¤ê¸° ìí´ \"íì¬ ì¸ì
\"ì ê´í 미리 ë¹ëë ê´ë¦¬ë¥¼ ì ê³µíë¤. ë¹ì ì´ íí´ì¼í 모ë ê²ì ìë² ìì²ì´ ì²ë¦¬ëì´ì¼ í ë í¸ëìì
ì ììíê³ , ê·¸ ìëµì´ í´ë¼ì´ì¸í¸ë¡ ì ì¡ë기 ì ì í¸ëìì
ì ëë´ë ê²ì´ë¤. ë¹ì ì ë¹ì ì´ ì¢ìíë ììì ë°©ë²ì¼ë¡ ì´ê²ì íí ì ìì¼ë©°, ê³µíµë í´ê²°ì±
ë¤ì ìë¹ì¤ ë©ìëë¤ ìì 첨ë¨, ëë íëì íë½ì/ì¸í°ì
ì
컨í
ì´ë를 ê°ì§ APO ì¸í°ì
í°ì¸, <literal>ServletFilter</literal>ì´ë¤. íëì EJB 컨í
ì´ëë CMTì ê²½ì°ì ì ì¸ì ì¼ë¡ EJB session beans ìì í¸ëìì
ê²½ê³êµ¬ë¶ê³¼ ê°ì ëì ëì¡° 측면ë¤ì 구ííë íì¤ ë°©ë²ì´ë¤. ë§ì¼ ë¹ì ì´ íë¡ê·¸ë¨ ìì í¸ëìì
ê²½ê³êµ¬ë¶ì ì¬ì©íê³ ì ê²°ì íë¤ë©´, ì¬ì©ì ì©ì´ì±ê³¼ ì½ë ì´ìì±ì ìí´ ì´ ì¥ì ë· !
ë¶ë¶ìì ë³´ì¬ì§ Hibernate <literal>Transaction</literal>ì ì í¸íë¼."
+
+#: index.docbook:112
+msgid "Your application code can access a \"current session\" to process the request by simply calling <literal>sessionFactory.getCurrentSession()</literal> anywhere and as often as needed. You will always get a <literal>Session</literal> 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</literal>ì íì ì»ê² ë ê²ì´ë¤. ì´ê²ì resource-local íê²½ ëë JTA íê²½ì ëí´ êµ¬ì±ëì´ì¼ íë©°, <xref linkend=\"architecture-current-session\"/>ì ë³´ë¼."
+
+#: index.docbook:120
+msgid "Sometimes it is convenient to extend the scope of a <literal>Session</literal> 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 complete is easy to do if you implement your own interceptor. However, it is not easily doable if you rely on EJBs with container-managed transactions, as 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 around this <emphasis>Open Session in View</emphasis> pattern."
+msgstr "ëëë¡ \"ë·°ê° ë ëë§ë ëê¹ì§\" íëì <literal>Session</literal> ê³¼ ë°ì´í°ë² ì´ì¤ í¸ëìì
ì ììì íì¥ìí¤ë ê²ì´ í¸ë¦¬íë¤. ì´ê²ì ìì²ì´ ì²ë¦¬ë íì íëì ë³ëì ë ëë§ ë¨ê³ë¥¼ íì©íë ìë¸ë¦¿ ì´í리ì¼ì´ì
ë¤ìì í¹í ì ì©íë¤. ë·° ë ëë§ì´ ìë£ë ëê¹ì§ ë°ì´í°ë² ì´ì¤ í¸ëìì
ì íì¥íë ê²ì ë¹ì ì´ ë¹ì ìì ì ì¸í°ì
í°ë¥¼ 구ííë ê²½ì°ì ííê¸°ê° ì½ë¤. íì§ë§ ë§ì¼ ë¹ì ì´ ì»¨í
ì´ëì ìí´ ê´ë¦¬ëë í¸ëìì
ë¤ì ê°ì§ EJBë¤ì ìì¡´í ê²½ì°ì, íëì EJB ë©ìëê° ë°íë ë ììì ë·° ë ëë§ì´ ììë ì ì기 ì ì íëì í¸ëìì
ì´ ìë£ë기 ë문ì, ííë ê²ì´ ì½ì§ ìë¤. ì´ <emphasis>Open Session in View</emphasis> í¨í´ì ëë¬ì¼ íë¤ê³¼ ìì ë¤ì Hibernate ì¹ ì¬ì´í¸ì í¬ë¼ì ë³´ë¼."
+
+#: index.docbook:135
+msgid "Long conversations"
+msgstr "ì¥ê¸°ê°ì ëí"
+
+#: index.docbook:137
+msgid "The session-per-request pattern is not the only useful concept you can use to design units of work. Many business processes require a whole series of interactions with the user interleaved with database accesses. In web and enterprise applications it is not acceptable for a database transaction to span a user interaction. Consider the following example:"
+msgstr "session-per-request í¨í´ì ë¹ì ì´ ìì
ë¨ìë¤ì ì¤ê³íëë° ì¬ì©í ì ìë ì ì¼í ì ì©í ê°ë
ì´ ìëë¤. ë§ì ë¹ì§ëì¤ íë¡ì¸ì¤ë¤ì ë°ì´í°ë² ì´ì¤ ì ê·¼ë¤ì ì¤ì¬íë ì¬ì©ì ì¬ì´ì ì ì²´ ì¼ë ¨ì ìí¸ìì©ë¤ì íìë¡ íë¤. ì¹ê³¼ ìí°íë¼ì´ì¦ ì´í리ì¼ì´ì
ìì ì¬ì©ì ìí¸ìì©ì 걸ì¹ë ê²ì ë°ì´í°ë² ì´ì¤ í¸ëìì
ì íì©ëì§ ìëë¤. ë¤ì ìì 를 ê²í íì:"
+
+#: index.docbook:147
+msgid "The first screen of a dialog opens, the data seen by the user has been loaded in a particular <literal>Session</literal> and database transaction. The user is free to modify the objects."
+msgstr "ëíììì 첫 ë²ì§¸ íë©´ì´ ì´ë¦¬ê³ , ì¬ì©ììê² ë³´ì¬ì§ ë°ì´í°ë í¹ì <literal>Session</literal>ê³¼ ë°ì´í°ë² ì´ì¤ í¸ëìì
ìì ë¡ëëìë¤. ì¬ì©ìê° ê°ì²´ë¤ì ë³ê²½ìí¤ë ê²ì´ ìì ë¡ë¤."
+
+#: index.docbook:154
+msgid "The user clicks \"Save\" after 5 minutes and expects his modifications to be made persistent; he also expects that he was the only person editing this information and that no conflicting modification can occur."
+msgstr "ì¬ì©ìë 5ë¶ íì \"ì ì¥\"ì í´ë¦íê³ ê·¸ì ë³ê²½ë¤ì´ ììí ë기를 기ëíë¤; ê·¸ë ëí ê·¸ê° ì´ ì 보를 í¸ì§íë ì ì¼í ê°ì¸ì´ê³ ë³ê²½ 충ëì´ ë°ìíì§ ì기를 기ëíë¤."
+
+#: index.docbook:162
+msgid "We call this unit of work, from the point of view of the user, a long running <emphasis>conversation</emphasis> (or <emphasis>application transaction</emphasis>). There are many ways how you can implement this in your application."
+msgstr "ì°ë¦¬ë ì¬ì©ìì ê´ì ìì, ì´ê²ì ìì
ë¨ì, ì¥ê¸°ê° ì¤íëë <emphasis>ëí</emphasis> (ëë <emphasis>ì´í리ì¼ì´ì
í¸ëìì
</emphasis>)ì´ë¼ê³ ëª
ëª
íë¤. ë¹ì ì´ ë¹ì ì ì´í리ì¼ì´ì
ìì ì´ê²ì ì´ë»ê² 구íí ì ìë ë§ì ë°©ë²ë¤ì´ ì¡´ì¬íë¤."
+
+#: index.docbook:168
+msgid "A first naive implementation might keep the <literal>Session</literal> 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 of course an anti-pattern, since lock contention would not allow the application to scale with the number of concurrent users."
+msgstr "첫 ë²ì§¸ naive 구íì ëìì± ë³ê²½ì ë°©ì§íê³ , 격리ì atomicity(ìì ë¨ìì±)ì ë³´ì¥í기 ìí´ ë°ì´í°ë² ì´ì¤ì ìí´ ìì ë ì ê¸ì¼ë¡ ì¬ì©ìê° ìê°íëëì <literal>Session</literal>ê³¼ ë°ì´í°ë² ì´ì¤ í¸ëìì
ì ì ì§í ìë ìë¤. ì´ê²ì ë¬¼ë¡ anti-í¨í´ì´ë¤. ìëíë©´ ì ê¸ ë¤í¼ì ì´í리ì¼ì´ì
ì´ ëì ì¬ì©ìë¤ì ê°ì© ì«ì를 ëì´ë ê²ì íì©íì§ ìì ê²ì´ê¸° ë문ì´ë¤."
+
+#: index.docbook:176
+msgid "Clearly, we have to use several database transactions to implement the converastion. 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 (e.g. in a wizard-style dialog spanning several request/response cycles). This is easier to implement than it might sound, especially if you use Hibernate's features:"
+msgstr "ëª
ë£íê², ì°ë¦¬ë ëí(<emphasis>ì´í리ì¼ì´ì
í¸ëìì
</emphasis>)를 구ííëë° ëªëª ë°ì´í°ë² ì´ì¤ í¸ëìì
ë¤ì ì¬ì©í´ì¼ íë¤. ì´ ê²½ì°ì, ë¹ì§ëì¤ íë¡ì¸ì¤ë¤ì 격리를 ì ì§íë ê²ì ì´í리ì¼ì´ì
í°ì´ì ë¶ë¶ì ì¸ ì±
ìì´ ëë¤. ë¨ì¼ ëíë ëê° ì¬ë¬ ê°ì ë°ì´í°ë² ì´ì¤ í¸ëìì
ë¤ì 걸ì¹ë¤. ê·¸ê²ì ì´ë¤ ë°ì´í°ë² ì´ì¤ í¸ëìì
ë¤ ì¤ ì¤ì§ í ê°(ë§ì§ë§ í¸ëìì
)ê° ì
ë°ì´í¸ë ë°ì´í°ë¥¼ ì ì¥íê³ , 모ë ë¤ë¥¸ í¸ëìì
ë¤ì´ ë¨ìí ë°ì´í°ë¥¼ ì½ë (ì를 ë¤ë©´, ëªëª ìì²/ìëµ ì£¼ê¸°ì 걸ì¹ë ë§ë²ì¬ ì¤íì¼ì ëí ìììì) ê²½ì°ìë§ ììë¨ìê° ë ê²ì´ë¤. í¹í ë¹ì ì´ Hibernateì í¹ì§ë¤ì ì¬ì©í ê²½ì°ì , ì´ê²ì ë¤ë¦¬ë ê²ë³´ë¤ 구ííê¸°ê° ë ì½ë¤:"
+
+#: index.docbook:189
+msgid "<emphasis>Automatic Versioning</emphasis> - Hibernate can do automatic optimistic concurrency control for you, it can automatically detect if a concurrent modification occured during user think time. Usually we only check at the end of the conversation."
+msgstr "<emphasis>ìëì ì¸ ë²ì í</emphasis> - Hibernateë ë¹ì ì ìí´ ìëì ì¸ optimistic ëìì± ì ì´ë¥¼ íí ì ìê³ , ê·¸ê²ì ì¬ì©ìê° ìê°íë ìê° ëì ëìì ì¸ ë³ê²½ì´ ë°ìíëì§ë¥¼ ìëì ì¼ë¡ ê²ì¶í ì ìë¤. ëê° ì°ë¦¬ë ì¤ì§ ëíì ëìì ì²´í¬íë¤."
+
+#: index.docbook:197
+msgid "<emphasis>Detached Objects</emphasis> - If you decide to use the already discussed <emphasis>session-per-request</emphasis> pattern, all loaded instances will be in 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</emphasis>. Automatic versioning is used to isolate concurrent modifications."
+msgstr "<emphasis>Detached ê°ì²´ë¤</emphasis> - ë§ì¼ ë¹ì ì´ ì´ë¯¸ ë
¼ìë <emphasis>session-per-request</emphasis> í¨í´ì ì¬ì©íê³ ì ê²°ì íë ê²½ì°, 모ë ë¡ëë ì¸ì¤í´ì¤ë¤ì ì¬ì©ìê° ìê°íë ìê° ëì detached ìíì ìì ê²ì´ë¤. Hibernateë ê·¸ ê°ì²´ë¤ì ì¬ì²¨ë¶ìí¤ê³ ë³ê²½ë¤ì ììí ìí¤ë ê²ì íì©í´ì£¼ë©°, ê·¸ í¨í´ì <emphasis>session-per-request-with-detached-objects(detached-ê°ì²´ë¤ì ê°ì§ ìì² ë¹ ì¸ì
)</emphasis>ì¼ë¡ ëª
ëª
ëë¤. ìëì ì¸ ë²ì íë ëìì± ë³ê²½ë¤ì 격리ìí¤ëë° ì¬ì©ëë¤."
+
+#: index.docbook:207
+msgid "<emphasis>Extended (or Long) Session</emphasis> - The Hibernate <literal>Session</literal> may 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</literal> is usually not allowed to be flushed automatically, but explicitely."
+msgstr "<emphasis>íì¥ë (ëë Long) Session</emphasis> - Hibernate <emphasis>Session</emphasis>ì ë°ì´í°ë² ì´ì¤ í¸ëìì
ì´ ì»¤ë°ë íì 기본 JDBC 커ë¥ì
ì´ ì°ê²° í´ì ë ìë ìê³ , ìë¡ì´ í´ë¼ì´ì¸í¸ ìì²ì´ ë°ìí ë ë¤ì ì°ê²°ë ì ìë¤. ì´ í¨í´ì <emphasis>session-per-conversation(ëí ë¹ ì¸ì
)</emphasis>ì¼ë¡ ìë ¤ì ¸ ìê³ ì¬ì²¨ë¶ë¥¼ ë¶íìíê² ë§ë ë¤. ìëì ì¸ ë²ì íë ëìì± ë³ê²½ë¤ì 격리ìí¤ëë° ì¬ì©ëê³ <literal>Session</literal>ì ìëì ì¼ë¡ flushëë ê²ì´ íì©ëì§ ìì§ë§ ëª
ìì ì¼ë¡ flushëë ê²ì íì©ëë¤."
+
+#: index.docbook:220
+msgid "Both <emphasis>session-per-request-with-detached-objects</emphasis> and <emphasis>session-per-conversation</emphasis> have advantages and disadvantages, we discuss them later in this chapter in the context of optimistic concurrency control."
+msgstr "<emphasis>session-per-request-with-detached-objects</emphasis>ê³¼ <emphasis>session-per-conversation</emphasis> ììë ì¥ì ë¤ê³¼ ë¨ì ë¤ì ê°ëë°, ì°ë¦¬ë ì´ ì¥ì ë· ë¶ë¶ìì optimistic ëìì± ì ì´ ë¨ë½ìì ê·¸ê²ë¤ì ë
¼ìíë¤."
+
+#: index.docbook:229
+msgid "Considering object identity"
+msgstr "ê°ì²´ identity ê³ ë ¤í기"
+
+#: index.docbook:231
+msgid "An application may concurrently access the same persistent state in two different <literal>Session</literal>s. However, an instance of a persistent class is never shared between two <literal>Session</literal> instances. Hence there are two different notions of identity:"
+msgstr "ì´í리ì¼ì´ì
ì ë ê°ì ë¤ë¥¸ <literal>Session</literal>ë¤ ë´ì ìë ëì¼í ìì ìíì ëìì ì ê·¼í ìë ìë¤. íì§ë§ ìì í´ëì¤ì ì¸ì¤í´ì¤ë ë ê°ì <literal>Session</literal> ì¸ì¤í´ì¤ë¤ ì¬ì´ì ê²°ì½ ê³µì ëì§ ìëë¤. ê·¸ë¬ë¯ë¡ identityì ëí ë ê°ì ë¤ë¥¸ ê°ë
ë¤ì´ ì¡´ì¬íë¤:"
+
+#: index.docbook:240
+msgid "Database Identity"
+msgstr "ë°ì´í°ë² ì´ì¤ Identity"
+
+#: index.docbook:243
+msgid "foo.getId().equals( bar.getId() )"
+msgstr "foo.getId().equals( bar.getId() )"
+
+#: index.docbook:248
+msgid "JVM Identity"
+msgstr "JVM Identity"
+
+#: index.docbook:251
+msgid "foo==bar"
+msgstr "foo==bar"
+
+#: index.docbook:257
+msgid "Then for objects attached to a <emphasis>particular</emphasis> <literal>Session</literal> (i.e. in the scope of a <literal>Session</literal>) the two notions are equivalent, and JVM identity for database identity is guaranteed by Hibernate. However, 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 (automatic versioning) at flush/commit time, using an optimistic approach."
+msgstr "ê·¸ë (ì를 ë¤ì´ <literal>Session</literal> ìììì) <emphasis>í¹ì </emphasis> <literal>Session</literal>ì 첨ë¶ë ê°ì²´ë¤ì ê²½ì° ë ê°ì ê°ë
ë¤ì ëë±í ê²ì´ê³ , ë°ì´í°ë² ì´ì¤ identityì ëí JVM identityê° Hibernateì ìí´ ë³´ì¥ëë¤. íì§ë§, ì´í리ì¼ì´ì
ì´ ë ê°ì ë¤ë¥¸ ì¸ì
ë¤ìì \"ëì¼í\" (ìì identity) ë¹ì§ëì¤ ê°ì²´ì ëìì ì ê·¼íë ëì, ë ê°ì ì¸ì¤í´ì¤ë¤ì ì¤ì ë¡ \"ë¤ë¥´ë¤\"(JVM identity). 충ëë¤ì flush/ì»¤ë° ìì (ìëì ì¸ ë²ì í)를 ì¬ì©íì¬, optimistic ì ê·¼ë²ì ì¬ì©íì¬ í´ê²°ëë¤."
+
+#: index.docbook:266
+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 only doesn't need expensive locking or other means of synchronization. The application never needs to synchronize on any business object, as long as it sticks to a single thread per <literal>Session</literal>. Within a <literal>Session</literal> the application may safely use <literal>==</literal> to compare objects."
+msgstr "ì´ ì ê·¼ë²ì Hibernateì ë°ì´í°ë² ì´ì¤ê° ëìì±ì ëí´ ê±±ì íì§ ìëë¡ í´ì¤ë¤; ê·¸ê²ì ëí ìµìì scalability를 ì ê³µíë¤. ìëíë©´ ë¨ì¼ ì°ë ë-ìì
ë¨ì ë´ìì identity ë³´ì¥ì ë¨ì§ ë¹ì©ì´ ëë ì ê¸ì´ë ë¤ë¥¸ ë기í ìë¨ë¤ì íìë¡ íì§ ì기 ë문ì´ë¤. ì´í리ì¼ì´ì
ì ê·¸ê²ì´ <literal>Session</literal> ë¹ ë¨ì¼ ì°ë ë를 ê°ì íë í, ì´ë¤ ë¹ì§ëì¤ ê°ì²´ì ëí´ ê²°ì½ ë기í ìí¬ íìê° ìë¤. íëì <literal>Session</literal> ë´ìì ì´í리ì¼ì´ì
ì ê°ì²´ë¤ì ë¹êµíëë° <literal>==</literal>를 ìì íê² ì¬ì©í ìê° ìë¤."
+
+#: index.docbook:275
+msgid "However, an application that uses <literal>==</literal> outside of a <literal>Session</literal>, might see unexpected results. This might occur even in some unexpected places, for example, if you put two detached instances into the same <literal>Set</literal>. Both might have the same database identity (i.e. they represent the same row), but JVM identity is by definition not guaranteed for instances in detached state. The developer has to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods in persistent classes and implement his own notion of object equality. There is one caveat: Never use the database identifier to implement equality, use a business key, 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</literal>, changing the hashcode breaks the contract of t!
he <literal>Set</literal>. Attributes for business keys don't 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</literal>. See the Hibernate website for a more thorough discussion of this issue. Also note that this is not a Hibernate issue, but simply how Java object identity and equality has to be implemented."
+msgstr "íì§ë§, íëì <literal>Session</literal> ì¸ë¶ìì <literal>==</literal>를 ì¬ì©íë ì´í리ì¼ì´ì
ì ìê¸°ì¹ ìì ê²°ê³¼ë¤ì ë³´ê² ë ìë ìë¤. ì´ê²ì ì´ë¤ ìê¸°ì¹ ìì ì¥ìë¤ìì, ì를 ë¤ì´ ë¹ì ì´ ë ê°ì detached ì¸ì¤í´ì¤ë¤ì ëì¼í <literal>Set</literal> ë´ì ì§ì´ë£ì ê²½ì°ì ë°ìí ìë ìë¤. ë ë¤ ëì¼í ë°ì´í°ë² ì´ì¤ identity를 ê°ì§ ì ìì§ë§ (ì를 ë¤ì´ ê·¸ê²ë¤ì ëì¼í íì íííë¤), JVM identityë ì ì ì detached ìíì ìë ì¸ì¤í´ì¤ë¤ì ë³´ì¥íì§ ìëë¤. ê°ë°ìë ìì í´ëì¤ë¤ë´ì <literal>equals()</literal> ë©ìëì <literal>hashCode()</literal> ë©ìë를 ì¤ë²ë¼ì´ë ìì¼ì¼ íê³ ê°ì²´ equalityì ëí ê·¸ ìì ì ê°ë
ì 구íí´ì¼ íë¤. íëì ê²½ê³ ê° ì¡´ì¬íë¤: equality를 구ííëë° ë°ì´í°ë² ì´ì¤ identifier를 ê²°ì½ ì¬ì©íì§ ë§ê³ , íëì ë¹ì§ëì¤ í!
¤, ì ì¼í, ëê° ë¶ë³ì¸ ìì±ë¤ì ì¡°í©ì ì¬ì©íë¼. ë°ì´í°ë² ì´ì¤ ìë³ìë ë§ì¼ transient ê°ì²´ê° ììíëë ê²½ì°ì ë³ê²½ë ê²ì´ë¤. ë§ì¼ transient ì¸ì¤í´ì¤ê°(ëê° detached ì¸ì¤í´ì¤ë¤ê³¼ í¨ê») <literal>Set</literal> ë´ì ë³´ê´ëë ê²½ì°ì, hashcode ë³ê²½ì <literal>Set</literal>ì ê³ì½ì í기ìí¨ë¤. ë¹ì§ëì¤ í¤ë¤ì ëí ìì±ë¤ì ë°ì´í°ë² ì´ì¤ íë¼ì´ë¨¸ë¦¬ í¤ë¤ ë§í¼ ìì ì ì´ì´ìë ìëë©°, ë¹ì ì ì¤ì§ ê°ì²´ë¤ì´ ëì¼í <literal>Set</literal> ë´ì ìë íìì ìì ì±ì ë³´ì¥í´ì¼ë§ íë¤. ì´ ìì ì ê´í ë
¼ìì ëí ë ë§ì ê²ì Hibernate ì¹ ì¬ì´í¸ë¥¼ ë³´ë¼. ëí ì´ê²ì´ Hibernate ìì ì´ ìëë©°, ë¨ì§ ìë° ê°ì²´ identityì equalityê° êµ¬íëì´ì¼ íë ë°©ë²ìì ë
¸í¸íë¼."
+
+#: index.docbook:296
+msgid "Common issues"
+msgstr "ê³µíµë ìì ë¤"
+
+#: index.docbook:298
+msgid "Never use the anti-patterns <emphasis>session-per-user-session</emphasis> or <emphasis>session-per-application</emphasis> (of course, there are rare exceptions to this rule). Note that some of the following issues might also appear with the recommended patterns, make sure you understand the implications before making a design decision:"
+msgstr "ìí°-í¨í´ë¤ <emphasis>session-per-user-session</emphasis> ëë <emphasis>session-per-application</emphasis>ì ê²°ì½ ì¬ì©íì§ ë§ë¼(ë¬¼ë¡ ì´ ê·ì¹ì ëí ë문 ìì¸ìí©ë¤ì´ ì¡´ì¬íë¤). ë¤ì ìì ë¤ ì¤ ëªëªì´ ëí ê¶ì¥ëë í¨í´ë¤ë¡ ëíë ì ììì ë
¸í¸íê³ , ë¹ì ì´ ì¤ê³ ê²°ì ì ë´ë¦¬ê¸° ì ì ë´í¬ë ì미ë¤ì íì¤í ì´í´íë¼:"
+
+#: index.docbook:307
+msgid "A <literal>Session</literal> is not thread-safe. Things which are supposed to work concurrently, like HTTP requests, session beans, or Swing workers, will cause race conditions if a <literal>Session</literal> instance would be shared. If you keep your Hibernate <literal>Session</literal> in your <literal>HttpSession</literal> (discussed later), you should consider synchronizing access to your Http session. Otherwise, a user that clicks reload fast enough may use the same <literal>Session</literal> in two concurrently running threads."
+msgstr "<literal>Session</literal>ì ì°ë ë-ìì íì§ ìë¤. HTTP ìì²ë¤, ì¸ì
ë¹ì¦, ëë Swing workerë¤ì²ë¼ ëìì ìì
íë ê²ì¼ë¡ ê°ì ëë ê²ë¤ì íëì <literal>Session</literal> ì¸ì¤í´ì¤ê° ê³µì ë ê²½ì°ì ê²½ì ì¡°ê±´ë¤ì ë°ììí¬ ê²ì´ë¤. ë§ì¼ ë¹ì ì´ ë¹ì ì <literal>HttpSession</literal> ë´ì Hibernate <literal>Session</literal>ì ì ì§ìí¤ë ê²½ì°(ëì¤ì ë
¼ìë¨), ë¹ì ì ë¹ì ì Http ì¸ì
ì ëí ì ê·¼ì ë기í ìí¤ë ê²ì ê³ ë ¤í´ì¼ íë¤. ê·¸ ë°ì ê²½ì°, 충ë¶í ë¹ ë¥´ê² reload를 í´ë¦íë ì¬ì©ìë ë ê°ì ëìì ì¼ë¡ ì¤íëë ì°ë ëë¤ ë´ìì ëì¼í <literal>Session</literal>ì ì¬ì©í ìë ìë¤."
+
+#: index.docbook:318
+msgid "An exception thrown by Hibernate means you have to rollback your database transaction and close the <literal>Session</literal> immediately (discussed later in more detail). If your <literal>Session</literal> is bound to the application, you have to stop the application. Rolling back the database transaction doesn't put your business objects back into the state they were at the start of the transaction. This means the database state and the business objects do get out of sync. Usually this is not a problem, because exceptions are not recoverable and you have to start over after rollback anyway."
+msgstr "Hibernateì ìí´ ëì ¸ì§ ìì¸ìí©ì ë¹ì ì´ ë¹ì ì ë°ì´í°ë² ì´ì¤ í¸ëìì
ì 롤백 ìí¤ê³ ì¦ì <literal>Session</literal>ì ë«ìì¼ í¨ì ì미íë¤(ëì¤ì ìì¸í ë
¼ìë¨). ë§ì¼ ë¹ì ì <literal>Session</literal>ì´ ì´í리ì¼ì´ì
ì ë°ì¸ë ëì´ ìë ê²½ì°, ë¹ì ì ì´í리ì¼ì´ì
ì ì¤ì§ìì¼ì¼ íë¤. ë°ì´í°ë² ì´ì¤ í¸ëìì
롤백ì ë¹ì ì ë¹ì§ëì¤ ê°ì²´ë¤ì ê·¸ê²ë¤ì´ í¸ëìì
ì ìì ìì 머물ë ë ìíë¡ ëë리ì§ë ìëë¤. ì´ê²ì ë°ì´í°ë² ì´ì¤ ìíì ë¹ì§ëì¤ ê°ì²´ë¤ì´ ë기í를 ë²ì´ë¨ì ì미íë¤. ëê° ì´ê²ì 문ì ê° ìëë¤. ìëíë©´ ìì¸ìí©ë¤ì íë³µê°ë¥í ê²ì´ ìëê³ ë¹ì ì´ ì´ë»ê²ë 롤백 íì ììí´ì¼ í기 ë문ì´ë¤."
+
+#: index.docbook:330
+msgid "The <literal>Session</literal> caches every object that is in persistent state (watched and checked for dirty state by Hibernate). This means it grows endlessly until you get an OutOfMemoryException, if you keep it open for a long time or simply load too much data. One solution for this is to call <literal>clear()</literal> and <literal>evict()</literal> to manage the <literal>Session</literal> cache, but you most likely should consider a Stored Procedure if you need mass data operations. Some solutions are shown in <xref linkend=\"batch\"/>. Keeping a <literal>Session</literal> open for the duration of a user session also means a high probability of stale data."
+msgstr "<literal>Session</literal>ì (Hibernateì ìí´ dirty ìíë¡ ê´ì°°ëìê±°ë ì²´í¬ë) ìì ìíì ìë 모ë ê°ì²´ë¥¼ ìºì ìí¨ë¤. ì´ê²ì ë¹ì ì´ ì¤ë ìê° ëì <literal>Session</literal>ì ì´ì´ë ì±ë¡ ì ì§íê±°ë ë¨ìíê² ë무 ë§ì ë°ì´í°ë¥¼ ë¡ëìí¬ ê²½ì°ì, ë¹ì ì´ OutOfMemoryExceptionì ì»ê¸° ì ê¹ì§, ê·¸ê²ì´ ëìì´ ì±ì¥íë¤ë ì ì ì미íë¤. ì´ê²ì ëí íëì í´ê²°ì±
ì <literal>Session</literal> ìºì를 ê´ë¦¬í기 ìí´ <literal>clear()</literal>ì <literal>evict()</literal>를 í¸ì¶íë ê²ì´ì§ë§, ë¹ì ì´ ëì©ë ë°ì´í° ì¤í¼ë ì´ì
ë¤ì íìë¡ íë ê²½ì°ì ë¹ì ì ëê° ë´ì¥ íë¡ìì 를 ê³ ë ¤í´ì¼ í ê²ì´ë¤. ëªëª í´ê²°ì±
ë¤ì´ <xref linkend=\"batch\"/>ì ë³´ì¬ì ¸ ìë¤. ì¬ì©ì ì¸ì
ëìì <literal>Session</literal>ì ì´ë ¤ì§ ì±ë¡ ì ì§íë ê²ì ëí ì¤í¨ì±ì´ ë¨ì´ì§ ë°ì´í°ì ëí ë!
ì íë¥ ì ì미íë¤."
+
+#: index.docbook:348
+msgid "Database transaction demarcation"
+msgstr "ë°ì´í°ë² ì´ì¤ í¸ëìì
ê²½ê³ ì¤ì "
+
+#: index.docbook:350
+msgid "Datatabase (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 "ë°ì´í°ë² ì´ì¤ (ëë ìì¤í
) í¸ëìì
ê²½ê³ë¤ì íì íìì ì´ë¤. ë°ì´í°ë² ì´ì¤ìì íµì ì ë°ì´í°ë² ì´ì¤ í¸ëìì
ì ì¸ë¶ìì ë°ìí ì ìë¤(ì´ê²ì ìë-ì»¤ë° ëª¨ëë¡ ì¬ì©ëë ë§ì ê°ë°ìë¤ìê²ë í¼ëì¤ë¬ì ë³´ì¸ë¤). íì ì¬ì§ì´ ì½ê¸° ì ì© ì¤í¼ë ì´ì
ë¤ì ëí´ìë ëª
ë£í í¸ëìì
ê²½ê³ë¤ì ì¬ì©íë¼. ë¹ì ì 격리 ë 벨과 ë°ì´í°ë² ì´ì¤ ê°ì©ì±ë¤ì ë°ë¼, ì´ê²ì íìíì§ ìì ì ìì§ë§, ë§ì¼ ë¹ì ì´ íì í¸ëìì
ë¤ì ëª
ìì ì¼ë¡ ê²½ê³ ì¤ì í ê²½ì°ìë íê°íë ê²°ì ë¤ì´ ì¡´ì¬íì§ ìëë¤. íì¤í, íëì ë°ì´í°ë² ì´ì¤ í¸ëìì
ì ì¬ì§ì´ ë°ì´í° ì½ê¸°ì¡°ì°¨ë ë§ì ìì í¸ëìì
ë¤ì ê²½ì°ë³´ë¤ë ë ì¢ê² ìíë ê²ì´ë¤."
+
+#: index.docbook:360
+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, in other words, begin, commit, or rollback database transactions himself. 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)ì ì ê³µíë¤. ê·¸ë íë¡ê·¸ë¨ ìì í¸ëìì
ê²½ê³ ì¤ì ì ë ì´ì íìíì§ ìë¤."
+
+#: index.docbook:370
+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 you'd use programmatic transaction demaracation. Hibernate offers a wrapper API called <literal>Transaction</literal> 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</literal>ì´ë¼ ëª
ëª
ëë wrapper API 를 ì ê³µíë¤. ì´ APIë ì¤ì ë¡ ìµì
ì´ì§ë§ ì°ë¦¬ë ë¹ì ì´ CMT session bean ìì ìì§ ìë í ê·¸ê²ì ì¬ì©ì ê°ë ¥íê² ê¶ì¥íë¤."
+
+#: index.docbook:379
+msgid "Usually, ending a <literal>Session</literal> involves four distinct phases:"
+msgstr "ëê° <literal>Session</literal> ì¢
ë£ë ë¤ ê°ì 구ë¶ëë ë¨ê³ë¤ì ìë°íë¤:"
+
+#: index.docbook:385
+msgid "flush the session"
+msgstr "ì¸ì
ì flush ìí¨ë¤"
+
+#: index.docbook:390
+msgid "commit the transaction"
+msgstr "í¸ëìì
ì ì»¤ë° ìí¨ë¤"
+
+#: index.docbook:395
+msgid "close the session"
+msgstr "ì¸ì
ì ë«ëë¤"
+
+#: index.docbook:400
+msgid "handle exceptions"
+msgstr "ìì¸ìí©ë¤ì ì²ë¦¬íë¤"
+
+#: index.docbook:406
+msgid "Flushing the session has been discussed earlier, we'll now have a closer look at transaction demarcation and exception handling in both managed- and non-managed environments."
+msgstr "ì¸ì
ì flush ìí¤ë ê²ì ìì ë
¼ìëìê³ , ì°ë¦¬ë ì´ì ê´ë¦¬ëë í경과 ê´ë¦¬ëì§ ìë íê²½ ìììì í¸ëìì
ê²½ê³ ì¤ì ê³¼ ìì¸ìí©ì ë ìì¸í ì´í´ë³¼ ê²ì´ë¤."
+
+#: index.docbook:413
+msgid "Non-managed environment"
+msgstr "ê´ë¦¬ëì§ ìë íê²½"
+
+#: index.docbook:415
+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 ì²ë¦¬ ê´ì©êµ¬ë ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:422
+msgid ""
+ "<![CDATA[// Non-managed environment idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[// Non-managed environment idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+
+#: index.docbook:424
+msgid "You don't have to <literal>flush()</literal> the <literal>Session</literal> explicitly - the call to <literal>commit()</literal> automatically triggers the synchronization (depending upon the <xref linkend=\"objectstate-flushing\"/>FlushMode for the session. A call to <literal>close()</literal> marks the end of a session. The main implication of <literal>close()</literal> is that the JDBC connection will be relinquished by the session. This Java code is portable and runs in both non-managed and JTA environments."
+msgstr "ë¹ì ì <literal>Session</literal>ì ëª
ìì ì¼ë¡ <literal>flush()</literal> íì§ ë§ìì¼ íë¤ - <literal>commit()</literal>ì ëí í¸ì¶ì (ê·¸ ì¸ì
ì ëí <xref linkend=\"objectstate-flushing\"/>FlushModeì ë°ë¼)ìëì ì¼ë¡ ë기í를 í¸ë¦¬ê±°ìí¨ë¤. <literal>close()</literal>ì ëí í¸ì¶ì ì¸ì
ì ëì ë§í¬íë¤. <literal>close()</literal>ì 주ë 구íì JDBC 커ë¥ì
ì´ ê·¸ ì¸ì
ì ìí´ í¬ê¸°ë ê²ì´ë¼ë ì ì´ë¤. ì´ Java ì½ëë ê´ë¦¬ëì§ ìë í경과 JTA íê²½ ìììì ì´ìì±ì´ ìê³ ì¤íëë¤."
+
+#: index.docbook:433
+msgid "A much more flexible solution is Hibernate's built-in \"current session\" context management, as described earlier:"
+msgstr "ë³´ë¤ ë ì ì°í í´ê²°ì±
ì ìì ì¤ëª
íë¯ì´ Hibernateì 미리 ë¹ëëì´ ìë \"íì¬ ì¸ì
\" 컨í
ì¤í¸ ê´ë¦¬ì´ë¤:"
+
+#: index.docbook:438
+msgid ""
+ "<![CDATA[// Non-managed environment idiom with getCurrentSession()\n"
+ "try {\n"
+ " factory.getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " factory.getCurrentSession().getTransaction().commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " factory.getCurrentSession().getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[// Non-managed environment idiom with getCurrentSession()\n"
+ "try {\n"
+ " factory.getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " factory.getCurrentSession().getTransaction().commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " factory.getCurrentSession().getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+
+#: index.docbook:440
+msgid "You will very likely never 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</literal> (and usually can only clean up and exit) are in different layers. The current context management by Hibernate can significantly simplify this design, as all you need is access to a <literal>SessionFactory</literal>. Exception handling is discussed later in this chapter."
+msgstr "ë¹ì ì íµìì ì´í리ì¼ì´ì
ìì ë¹ì§ëì¤ ì½ë ìì ì´ ê´ì©êµ¬ë¥¼ ê²°ì½ ë³´ì§ ìì ê²ì´ë¤; ì¹ëª
ì ì¸(ìì¤í
) ìì¸ìí©ë¤ì íì \"ìë¨\"ìì ì¡íì¼ íë¤. ë¬ë¦¬ ë§í´, (ìì ê³ì¸µìì) Hibernate í¸ì¶ë¤ì ì¤íìí¤ë ì½ëì <literal>RuntimeException</literal>ì ì²ë¦¬í(ê³ ëê° ì¤ì§ ì ê±°íê³ ë¹ ì ¸ëê° ì ìë) ì½ëë ë¤ë¥¸ ê³ì¸µë¤ ìì ìë¤. Hibernateì ìí íì¬ ì»¨í
ì¤í¸ ê´ë¦¬ë ì´ ì¤ê³ë¥¼ í격íê² ë¨ìíìì¼ì, ë¹ì ì´ íìë¡ íë 모ë ê²ì <literal>SessionFactory</literal>ì ëí ì ê·¼ì´ë¤.ìì¸ìí© ì²ë¦¬ë ì´ ì¥ì ë·ë¶ë¶ìì ë
¼ìëë¤."
+
+#: index.docbook:450
+msgid "Note that you should select <literal>org.hibernate.transaction.JDBCTransactionFactory</literal> (which is the default), and for the second example <literal>\"thread\"</literal> as your <literal>hibernate.current_session_context_class</literal>."
+msgstr "ë¹ì ì (ëí´í¸ì¸) <literal>org.hibernate.transaction.JDBCTransactionFactory</literal>를 ì íí´ì¼ íê³ , ëë²ì§¸ ìì ì ê²½ì° ë¹ì ì <literal>hibernate.current_session_context_class</literal>를 ì íí´ì¼ í¨ì ë
¸í¸íë¼."
+
+#: index.docbook:459
+msgid "Using JTA"
+msgstr "JTA ì¬ì©í기"
+
+#: index.docbook:461
+msgid "If your persistence layer runs in an application server (e.g. 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 íµí©ì ìí ë ê°ì ë°©ëë¤ì ì ê³µíë¤."
+
+#: index.docbook:468
+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</literal> API. So, the transaction management code is identical to the non-managed environment."
+msgstr "ë§ì¼ ë¹ì ì´ bean-managed transactions(BMT)를 ì¬ì©í ê²½ì° Hibernateë ë¹ì ì´ <literal>Transaction</literal> API를 ì¬ì©í ê²½ì°ì BMT í¸ëìì
ì ììíê³ ì¢
ë£íëë¡ ì´í리ì¼ì´ì
ìë²ìê² ìë ¤ì¤ ê²ì´ë¤. ë°ë¼ì í¸ëìì
ê´ë¦¬ ì½ëë non-managed í경과 ëì¼íë¤."
+
+#: index.docbook:474
+msgid ""
+ "<![CDATA[// BMT idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[// BMT idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+
+#: index.docbook:476
+msgid "If you want to use a transaction-bound <literal>Session</literal>, that is, the <literal>getCurrentSession()</literal> functionality for easy context propagation, you will have to use the JTA <literal>UserTransaction</literal> API directly:"
+msgstr "ë§ì¼ ë¹ì ì´ í¸ëìì
ì ë¬¶ì¸ <literal>Session</literal>, ì¦ ì¬ì´ 컨í
ì¤í¸ ë³´ê¸ì ìí <literal>getCurrentSession()</literal> 기ë¥ì ì¬ì©íê³ ì ìí ê²½ì°, ë¹ì ì JTA <literal>UserTransaction</literal> API를 ì§ì ì¬ì©í´ì¼ í ê²ì´ë¤:"
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[// BMT idiom with getCurrentSession()\n"
+ "try {\n"
+ " UserTransaction tx = (UserTransaction)new InitialContext()\n"
+ " .lookup(\"java:comp/UserTransaction\");\n"
+ "\n"
+ " tx.begin();\n"
+ "\n"
+ " // Do some work on Session bound to transaction\n"
+ " factory.getCurrentSession().load(...);\n"
+ " factory.getCurrentSession().persist(...);\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[// BMT idiom with getCurrentSession()\n"
+ "try {\n"
+ " UserTransaction tx = (UserTransaction)new InitialContext()\n"
+ " .lookup(\"java:comp/UserTransaction\");\n"
+ "\n"
+ " tx.begin();\n"
+ "\n"
+ " // Do some work on Session bound to transaction\n"
+ " factory.getCurrentSession().load(...);\n"
+ " factory.getCurrentSession().persist(...);\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+
+#: index.docbook:484
+msgid "With CMT, transaction demarcation is done in session bean deployment descriptors, not programatically, hence, the code is reduced to:"
+msgstr "CMTì ê²½ì°, í¸ëìì
ê´í [ê²½ê³ ì¤ì ]ì íë¡ê·¸ë¨ ìì´ ìë, session bean ë°°ì¹ ëì¤í¬ë¦½í°ë¤ ììì íí´ì§ë¤. ê·¸ë¬ë¯ë¡ ì½ëë ë¤ìì¼ë¡ ê°ìëë¤:"
+
+#: index.docbook:489
+msgid ""
+ "<![CDATA[// CMT idiom\n"
+ " Session sess = factory.getCurrentSession();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "]]>"
+msgstr ""
+ "<![CDATA[// CMT idiom\n"
+ " Session sess = factory.getCurrentSession();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "]]>"
+
+#: index.docbook:491
+msgid "In a CMT/EJB even rollback happens automatically, since an unhandled <literal>RuntimeException</literal> thrown by a session bean method tells the container to set the global transaction to rollback. <emphasis>This means you do not need to use the Hibernate <literal>Transaction</literal> API at all with BMT or CMT, and you get automatic propagation of the \"current\" Session bound to the transaction.</emphasis>"
+msgstr "ìëíë©´ íëì ì¸ì
ë¹ ë©ìëì ìí´ ëì ¸ì§ ì²ë¦¬ëì§ ìì <literal>RuntimeException</literal>ì´ ê¸ë¡ë² í¸ëìì
ì rollbackì¼ë¡ ì¤ì íëë¡ ì»¨í
ì´ëìê² ìë ¤ì£¼ê¸° ë문ì, CMT/EJBììì¡°ì°¨ 롤백ì ìëì ì¼ë¡ ë°ìëë¤. <emphasis>ì´ê²ì ë¹ì ì´ BMT ì´ë CMTì´ë 모ëìì Hibernate <literal>Transaction</literal> API를 ì¬ì©í íìê° ìì¼ë©°, ë¹ì ì ê·¸ í¸ëìì
ì ë¬¶ì¸ \"íì¬\" Sessionì ìëì ì¸ ë³´ê¸(propagation)ì ì»ê² ë¨ì ì미íë¤.</emphasis>"
+
+#: index.docbook:499
+msgid "Note that you should 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, when you configure Hibernate's transaction factory. Remember to also set <literal>hibernate.transaction.manager_lookup_class</literal>. Furthermore, make sure that your <literal>hibernate.current_session_context_class</literal> is either unset (backwards compatiblity), or set to <literal>\"jta\"</literal>."
+msgstr "ë¹ì ì´ Hibernateì í¸ëìì
í©í 리를 구ì±í ë, ë¹ì ì´ JTA를 ì§ì ì¬ì©í ê²½ì°(BMT) ë¹ì ì <literal>org.hibernate.transaction.JTATransactionFactory</literal>를 ì íí´ì¼íê³ , CMT session beanììë <literal>org.hibernate.transaction.CMTTransactionFactory</literal>를 ì íí´ì¼ í¨ì ë
¸í¸íë¼. ëí <literal>org.hibernate.transaction.manager_lookup_class</literal>를 ì¤ì íë ê²ì ì¼ëì ëë¼. ê²ë¤ê° ë°ëì ë¹ì ì <literal>hibernate.current_session_context_class</literal>ì´ ì¤ì ëì§ ìëë¡ íê±°ë(ìí¸íì±), ëë <literal>\"jta\"</literal>ë¡ ì¤ì ëëë¡ íë¼."
+
+#: index.docbook:508
+msgid "The <literal>getCurrentSession()</literal> operation has one downside in a JTA environment. There is one caveat to the use of <literal>after_statement</literal> connection release mode, which is then used by default. Due to a silly limitation of the JTA spec, it is not possible for Hibernate to automatically clean up any unclosed <literal>ScrollableResults</literal> or <literal>Iterator</literal> instances returned by <literal>scroll()</literal> or <literal>iterate()</literal>. You <emphasis>must</emphasis> release the underlying database cursor by calling <literal>ScrollableResults.close()</literal> or <literal>Hibernate.close(Iterator)</literal> explicity from a <literal>finally</literal> block. (Of course, most applications can easily avoid using <literal>scroll()</literal> or <literal>iterate()</literal> at all from the JTA or CMT code.)"
+msgstr "<literal>getCurrentSession()</literal> ì¤í¼ë ì´ì
ë¤ì JTA íê²½ìì í ê°ì§ ë¨ì ì ê°ê³ ìë¤. ëí´í¸ë¡ ì¬ì©ëë, <literal>after_statement</literal> 커ë¥ì
í´ì 모ë ì¬ì©ì ëí íëì ë³´ë¥ íµë³´ê° ì¡´ì¬íë¤. JTA ëª
ì¸ìì ì´ë¦¬ìì ì íì¼ë¡ ì¸í´, Hibernateê° <literal>scroll()</literal> ëë <literal>iterate()</literal>ì ìí´ ë°íëë ììì ë«íì§ì§ ìì <literal>ScrollableResults</literal> ëë <literal>Iterator</literal> ì¸ì¤í´ì¤ë¤ì ìëì ì¼ë¡ ì ê±°íë ê²ì´ ë¶ê°ë¥íë¤. ë¹ì ì <literal>finally</literal> ë¸ë¡ ë´ìì ëª
ìì ì¼ë¡ <literal>ScrollableResults.close()</literal> ëë <literal>Hibernate.close(Iterator)</literal>를 í¸ì¶íì¬ ê¸°ë³¸ ë°ì´í°ë² ì´ì¤ 커ì를 í´ì <emphasis>ìì¼ì¼ íë¤</emphasis>.(ë¬¼ë¡ ëë¶ë¶ì ì´í리ì¼ì´ì
ë¤ì JTA ëë CMT ì½ëìì <literal>scroll()</literal>ì´ë <literal>iterate()</litera!
l>를 ì¬ì©íë ê²ì ì½ê² í¼í ì ìë¤.)"
+
+#: index.docbook:524
+msgid "Exception handling"
+msgstr "ìì¸ìí© ì²ë¦¬"
+
+#: index.docbook:526
+msgid "If the <literal>Session</literal> throws an exception (including any <literal>SQLException</literal>), you should immediately rollback the database transaction, call <literal>Session.close()</literal> and discard the <literal>Session</literal> instance. Certain methods of <literal>Session</literal> will <emphasis>not</emphasis> leave the session in a consistent state. No exception thrown by Hibernate can be treated as recoverable. Ensure that the <literal>Session</literal> will be closed by calling <literal>close()</literal> in a <literal>finally</literal> block."
+msgstr "ë§ì¼<literal>Session</literal>ì´ (ì´ë¤ <literal>SQLException</literal>ì í¬í¨íë) ìì¸ìí©ì ëì§ ê²½ì°, ë¹ì ì ë°ì´í°ë² ì´ì¤ í¸ëìì
ì ì¦ì 롤백ìí¤ê³ , <literal>Session.close()</literal>를 í¸ì¶íê³ <literal>Session</literal> ì¸ì¤í´ì¤ë¥¼ í기ìì¼ì¼íë¤. <literal>Session</literal>ì ì´ë¤ ë©ìëë¤ì ê·¸ ì¸ì
ì ì¼ê´ë ìíë¡ ë¨ê²¨ëì§ <emphasis>ìì</emphasis> ê²ì´ë¤. Hibernateì ìí´ ëì ¸ì§ ìì¸ìí©ì 복구ê°ë¥í ê²ì¼ë¡ ì·¨ê¸ë ì ìë¤. ê·¸ <literal>Session</literal>ì´ <literal>finally</literal> ë¸ë¡ ë´ìì <literal>close()</literal>를 í¸ì¶íì¬ ë«íì§ëë¡ íì¤í íë¼."
+
+#: index.docbook:537
+msgid "The <literal>HibernateException</literal>, which wraps most of the errors that can occur in a Hibernate persistence layer, is an unchecked exception (it wasn't in older versions of Hibernate). In our opinion, we shouldn't 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 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 which are not a <literal>HibernateException</literal>. These are, again, not recoverable and appropriate action should be taken."
+msgstr "Hibernate ìì ê³ì¸µìì ë°ìí ì ìë ëë¶ë¶ì ì¤ë¥ë¤ì í¬ì¥íë, <literal>HibernateException</literal>ì ì²´í¬ëì§ ìì ìì¸ìí©ì´ë¤(ê·¸ê²ì Hibernateì ì´ì ë²ì ìë ììë¤). ì°ë¦¬ì ì견ì¼ë¡, ì°ë¦¬ë ë®ì ê³ì¸µìì 복구ë¶ê°ë¥í ìì¸ìí©ì ë¶ì¡ëë¡ ì´í리ì¼ì´ì
ê°ë°ììê² ê°ì íì§ ìì ê²ì´ë¤. ëë¶ë¶ì ìì¤í
ë¤ìì, ì²´í¬ëì§ ìì ì¹ëª
ì ì¸ ìì¸ìí©ë¤ì (ì를 ë¤ì´, ë ëì ê³ì¸µìì) ë©ìë í¸ì¶ ì¤íì 첫 ë²ì§¸ íë ìë¤ ì¤ íë ììì ì²ë¦¬ëê³ , í ê°ì ì¤ë¥ ë©ìì§ê° ì´í리ì¼ì´ì
ì¬ì©ììê² íìëë¤(ëë ì´ë¤ ë¤ë¥¸ ì ì í ì¡ì
ì´ ì·¨í´ì§ë¤). Hibernateë ëí <literal>HibernateException</literal>ì´ ìë, ë¤ë¥¸ ì²´í¬ëì§ ìì ìì¸ìí©ë¤ì ëì§ ìë ììì ë
¸í¸íë¼. ë¤ì ì´ê²ë¤ì 복구ê°ë¥íì§ ìê³ ì ì í ì¡ì
ì´ ì·¨í´ì ¸ì¼ íë¤."
+
+#: index.docbook:549
+msgid "Hibernate wraps <literal>SQLException</literal>s thrown while interacting with the database in a <literal>JDBCException</literal>. In fact, Hibernate will attempt to convert the eexception into a more meningful subclass of <literal>JDBCException</literal>. The underlying <literal>SQLException</literal> is always available via <literal>JDBCException.getCause()</literal>. Hibernate converts the <literal>SQLException</literal> into an appropriate <literal>JDBCException</literal> subclass using the <literal>SQLExceptionConverter</literal> attached to the <literal>SessionFactory</literal>. By default, the <literal>SQLExceptionConverter</literal> is defined by the configured dialect; however, it is also possible to plug in a custom implementation (see the javadocs for the <literal>SQLExceptionConverterFactory</literal> class for details). The standard <literal>JDBCException</literal> subtypes are:"
+msgstr "Hibernateë ë°ì´í°ë² ì´ì¤ì ìí¸ìì©íë ëìì ëì ¸ì§ <literal>SQLException</literal>ë¤ì íëì <literal>JDBCException</literal> ìì í¬ì¥íë¤. ì¬ì¤, Hibernateë ê·¸ ìì¸ìí©ì <literal>JDBCException</literal>ì ë³´ë¤ ì미ìë ìë¸í´ëì¤ë¡ ë³ííë ¤ê³ ìëí ê²ì´ë¤. 기본 <literal>SQLException</literal>ì <literal>JDBCException.getCause()</literal>를 íµí´ íì ì´ì© ê°ë¥íë¤. Hibernateë<literal>SessionFactory</literal>ì 첨ë¶ë <literal>SQLExceptionConverter</literal>를 ì¬ì©íì¬ <literal>SQLException</literal>ì ì ë¹í íëì <literal>JDBCException</literal> ìë¸í´ëì¤ë¡ ë³íìí¨ë¤. ëí´í¸ë¡ <literal>SQLExceptionConverter</literal>ë 구ì±ë dialectì ìí´ ì ìëë¤; íì§ë§ ë§ì¶¤ 구í ìì íë¬ê·¸ì¸ ìí¤ë ê²ì´ ëí ê°ë¥íë¤(ìì¸í ê²ì <literal>SQLExceptionConverterFactory</literal> í´ëì¤ì ê´í javadocs를 ë³´ë¼). í!
ì¤ <literal>JDBCException</literal> ìë¸íì
ì ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:565
+msgid "<literal>JDBCConnectionException</literal> - indicates an error with the underlying JDBC communication."
+msgstr "<literal>JDBCConnectionException</literal> - 기본 JDBC íµì ì ëí ì¤ë¥ë¥¼ ëíë¸ë¤."
+
+#: index.docbook:571
+msgid "<literal>SQLGrammarException</literal> - indicates a grammar or syntax problem with the issued SQL."
+msgstr "<literal>SQLGrammarException</literal> - ì겨ë SQLì ëí ë¬¸ë² ëë 구문 문ì ì ì ëíë¸ë¤."
+
+#: index.docbook:577
+msgid "<literal>ConstraintViolationException</literal> - indicates some form of integrity constraint violation."
+msgstr "<literal>ConstraintViolationException</literal> - ë¬´ê²°ì± ì ì½ ìë°ì ê´í ì´ë¤ íìì ëíë¸ë¤."
+
+#: index.docbook:583
+msgid "<literal>LockAcquisitionException</literal> - indicates an error acquiring a lock level necessary to perform the requested operation."
+msgstr "<literal>LockAcquisitionException</literal> - ìì²ë ì¤í¼ë ì´ì
ì ì¤ííëë° íìì ì¸ ì ê¸ ë 벨ì íëíë ì¤ë¥ë¥¼ ëíë¸ë¤."
+
+#: index.docbook:589
+msgid "<literal>GenericJDBCException</literal> - a generic exception which did not fall into any of the other categories."
+msgstr "<literal>GenericJDBCException</literal> - ë¤ë¥¸ ì¹´í
ê³ ë¦¬ë¤ ì¤ ì´ë¤ ê²ì¼ë¡ ë¶ë¥ëì§ ììë ì¼ë°ì ì¸ ìì¸ìí©."
+
+#: index.docbook:599
+msgid "Transaction timeout"
+msgstr "í¸ëìì
íììì"
+
+#: index.docbook:601
+msgid "One extremely 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 functioanlity is abstracted by the Hibernate <literal>Transaction</literal> object."
+msgstr "ê´ë¦¬ëì§ ìë ì½ëì ëí´ìë ê²°ì½ ì ê³µëì§ ìë EJBì ê°ì´ ê´ë¦¬ëë íê²½ì ìí´ ì ê³µëë í ê°ì§ ê·¹í ì¤ìí í¹ì§ì í¸ëìì
íìììì´ë¤. í¸ëìì
íìììì ì¬ì©ììê² ìëµì ë°ííì§ ìë ëìì 무ë¡í íëì ííë í¸ëìì
ì´ ììë¤ì 무íì 묶ì´ë ì ììì ë³´ì¦í´ì¤ë¤. ê´ë¦¬ëë (JTA) íê²½ ì¸ë¶ìì, Hibernateë ì´ ê¸°ë¥ì ì¨ì íê² ì ê³µí ì ìë¤. íì§ë§ Hibernateë ë°ì´í°ë² ì´ì¤ ë 벨 ë°ëë½ë¤ê³¼ ê±°ëí ê²°ê³¼ ì
ë¤ì ê°ì§ ì§ìë¤ì´ ì ìë íìììì ìí´ ì ì½ëë ê²ì ë³´ì¥í¨ì¼ë¡ì¨ ìµìí ë°ì´í° ì ê·¼ ì¤í¼ë ì´ì
ë¤ì ì ì´í ì ìë¤. ê´ë¦¬ëë íê²½ìì, Hibernateë í¸ëìì
íìììì JTAìê² ìììí¬ ì ìë¤. ì´ ê¸°ë¥ì Hibernate <literal>Transaction</literal> ê°ì²´ì ìí´ ì¶ìí ëë¤."
+
+#: index.docbook:614
+msgid ""
+ "<![CDATA[\n"
+ "Session sess = factory.openSession();\n"
+ "try {\n"
+ " //set transaction timeout to 3 seconds\n"
+ " sess.getTransaction().setTimeout(3);\n"
+ " sess.getTransaction().begin();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " sess.getTransaction().commit()\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " sess.getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "Session sess = factory.openSession();\n"
+ "try {\n"
+ " //set transaction timeout to 3 seconds\n"
+ " sess.getTransaction().setTimeout(3);\n"
+ " sess.getTransaction().begin();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " sess.getTransaction().commit()\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " sess.getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+
+#: index.docbook:616
+msgid "Note that <literal>setTimeout()</literal> may not be called in a CMT bean, where transaction timeouts must be defined declaratively."
+msgstr "<literal>setTimeout()</literal>ì CMT bean ë´ìì í¸ì¶ë리 ì ììì ë
¸í¸íë¼. ì¬ê¸°ì í¸ëìì
íìììë¤ì ì ì¸ì ì¼ë¡ ì ìëì´ì¼ íë¤."
+
+#: index.docbook:626
+msgid "Optimistic concurrency control"
+msgstr "Optimistic ëìì± ì ì´"
+
+#: index.docbook:628
+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 for three possible approaches to writing application code that uses optimistic concurrency. The use cases we show 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 ëìì±ì ì¬ì©íë ì´í리ì¼ì´ì
ì½ë ìì±ì ì¸ ê°ì§ ê°ë¥í ì ê·¼ë²ë¤ì ì ê³µíë¤. ì°ë¦¬ê° ë³´ì¬ì£¼ë ì°ììë¤ì ì¥ìê°ì ëíì ìí© ìì ìì§ë§, ë²ì ì²´í¹ ëí ë¨ì¼ ë°ì´í°ë² ì´ì¤ í¸ëìì
ë¤ìì ì
ë°ì´í¸ ìì¤ì ë°©ì§íë ì´ì ì ê°ê³ ìë¤."
+
+#: index.docbook:639
+msgid "Application version checking"
+msgstr "ì´í리ì¼ì´ì
ë²ì ì²´í¹"
+
+#: index.docbook:641
+msgid "In an implementation without much help from Hibernate, each interaction with the database occurs in a new <literal>Session</literal> and the developer is responsible for reloading all persistent instances from the database before manipulating them. This approach forces the application 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</literal> ë´ìì ì¼ì´ëê³ , ê°ë°ìë ìì ì¸ì¤í´ì¤ë¤ì ì²ë¦¬í기 ì ì ë°ì´í°ë² ì´ì¤ë¡ë¶í° 모ë ìì ì¸ì¤í´ì¤ë¤ì ë¤ì ë¡ëìí¬ ì±
ìì´ ìë¤. ì´ ì ê·¼ë²ì ëí í¸ëìì
ì íì¤í 격리ìí¤ê¸° ìí´ ê·¸ê² ìì ì ë²ì ì²´í¹ì ìííëë¡ ì´í리ì¼ì´ì
ìê² ê°ì ìí¨ë¤."
+
+#: index.docbook:650
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "\n"
+ "int oldVersion = foo.getVersion();\n"
+ "session.load( foo, foo.getKey() ); // load the current state\n"
+ "if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "\n"
+ "int oldVersion = foo.getVersion();\n"
+ "session.load( foo, foo.getKey() ); // load the current state\n"
+ "if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "t.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:652
+msgid "The <literal>version</literal> property is mapped using <literal><version></literal>, and Hibernate will automatically increment it during flush if the entity is dirty."
+msgstr "version íë¡í¼í°ë <literal><version></literal>ì ì¬ì©íì¬ ë§¤íëê³ , Hibernateë ë§ì¼ ìí°í°ê° dirtyì¼ ê²½ì° flush ëìì ê·¸ê²ì ìëì ì¼ë¡ ì¦ê°ìí¬ ê²ì´ë¤."
+
+#: index.docbook:658
+msgid "Of course, if you are operating in a low-data-concurrency environment and don't require version checking, you may use this approach and just skip the version check. In that case, <emphasis>last commit wins</emphasis> will be the default strategy for your long conversations. Keep in mind 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>ë§ì§ë§ì ì»¤ë° ì±ê³µ</emphasis>ì ë¹ì ì ì¥ìê°ì ëíì ëí ëí´í¸ ë°©ëê° ë ê²ì´ë¤. ì´ê²ì´ ì´í리ì¼ì´ì
ì ì¬ì©ìë¤ì í¼ëìí¬ ì ììì ì¼ëì ëë¼. ìëíë©´ ì¬ì©ìë¤ì ì¤ë¥ ë©ìì§ë¤ ëë 충ë ë³ê²½ë¤ì ë³í©ìí¬ ê¸°í ìì´ ì
ë°ì´í¸ë¤ ìì¤ì 겪ì ìë ì기 ë문ì´ë¤."
+
+#: index.docbook:667
+msgid "Clearly, manual version checking is only feasible in very trivial circumstances and not practical for most applications. Often not only single instances, but complete graphs of modified ojects have to be checked. Hibernate offers automatic version checking with either an extended <literal>Session</literal> or detached instances as the design paradigm."
+msgstr "ëª
ë£íê² ììì
ë²ì ì²´í¹ì ë§¤ì° ì¬ìí íê²½ë¤ììë ê³µí¬ì ì´ê³ ëë¶ë¶ì ì´í리ì¼ì´ì
ë¤ì ëí´ ì¤ì ì ì´ì§ ìë¤. íí ë¨ì¼ ì¸ì¤í´ì¤ ë¿ë§ ìëë¼ ë³ê²½ë ê°ì²´ë¤ì ì ì²´ ê·¸ëíë¤ì´ ì²´í¬ëì´ì¼ íë¤. Hibernateë ì¤ê³ í¨ë¬ë¤ìì¼ë¡ì íëì íì¥ë <literal>Session</literal> ëë detached ì¸ì¤í´ì¤ë¤ì ëí´ ìëì ì¸ ë²ì ì²´í¹ì ì ê³µíë¤."
+
+#: index.docbook:678
+msgid "Extended session and automatic versioning"
+msgstr "íì¥ë ì¸ì
ê³¼ ìëì ì¸ ë²ì í"
+
+#: index.docbook:680
+msgid "A single <literal>Session</literal> instance and its persistent instances are used for the whole conversation, known as <emphasis>session-per-conversation</emphasis>. Hibernate checks instance versions at flush time, throwing an exception if concurrent modification is detected. It's 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</literal> ì¸ì¤í´ì¤ì ê·¸ê²ì ìì ì¸ì¤í´ì¤ë¤ì ì ì²´ ì´í리ì¼ì´ì
í¸ëìì
ì ì¬ì©ëë¤. Hibernateë flush í ë ì¸ì¤í´ì¤ ë²ì ë¤ì ì²´í¬íê³ ë§ì¼ ëìì± ë³ê²½ì´ ê²ì¶ë ê²½ì°ì ìì¸ìí©ì ëì§ë¤. ì´ ìì¸ìí©ì ì¡ìë´ê³ ì²ë¦¬íë ê²ì ê°ë°ìì 몫ì´ë¤(ê³µíµë ìµì
ë¤ì ë³ê²½ë¤ì ë³í©ìí¤ê±°ë ëë ì¸ëª¨ê° ìì§ ìì ë°ì´í°ë¡ ë¹ì§ëì¤ íë¡ì¸ì¤ë¥¼ ë¤ì ììíë 기í를 ì¬ì©ììê² ì£¼ë ê²ì´ë¤). íëì <literal>Session</literal> ì¸ì¤í´ì¤ì ê·¸ê²ì ìì ì¸ì¤í´ì¤ë¤ì <emphasis>session-per-conversation</emphasis>ë¡ ìë ¤ì§ ì ì²´ ëíì ì¬ì©ëë¤. Hibernateë flush ìì ìì ì¸ì¤í´ì¤ ë²ì ë¤ì ì²´í¬íë©°, ë§ì¼ ëìì ì¸ ë³ê²½ì´ ê²ì¶ë ê²½ì°ì íëì ìì¸ìí©ì ëì§ë¤. ì´ ìì¸ìí©ì í¬ì°©íê³ ì²ë¦¬íë ê²ì ê°ë°ìì 몫ì´ë¤(ê³µíµë ì!
µì
ë¤ì ì¬ì©ìê° ë³ê²½ë¤ì ë³í©íê±°ë ìì¤ëì§ ìì ë°ì´í°ë¥¼ ê°ì§ê³ ë¹ì§ëì¤ ëí를 ì¬ììíë 기íì´ë¤)."
+
+#: index.docbook:689
+msgid "The <literal>Session</literal> 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 need not concern itself with version checking or with reattaching detached instances, nor does it have to reload instances in every database transaction."
+msgstr "<literal>Session</literal>ì ì¬ì©ì ìí¸ìì©ì 기ë¤ë¦´ ë ì´ë¤ 기본 JDBC 커ë¥ì
ì¼ë¡ë¶í° ì°ê²°í´ì ëë¤. ì´ ì ê·¼ë²ì ë°ì´í°ë² ì´ì¤ ì ê·¼ì ê´ì ìì ë³´ë©´ ê°ì¥ í¨ì¨ì ì´ë¤. ì´í리ì¼ì´ì
ì ë²ì ì²´í¹ ëë detached ì¸ì¤í´ì¤ë¤ì ì¬ì²¨ë¶íë ê²ì ê·¸ ìì²´ ê´ê³í íìê° ìê±°ë ê·¸ê²ì 모ë ë°ì´í°ë² ì´ì¤ í¸ëìì
ìì ì¸ì¤í´ì¤ë¤ì ë¤ì ë¡ëìí¬ íìê° ìë¤."
+
+#: index.docbook:697
+msgid ""
+ "<![CDATA[// foo is an instance loaded earlier by the old session\n"
+ "Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction\n"
+ "\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "session.flush(); // Only for last transaction in conversation\n"
+ "t.commit(); // Also return JDBC connection\n"
+ "session.close(); // Only for last transaction in conversation]]>"
+msgstr ""
+ "<![CDATA[// foo is an instance loaded earlier by the old session\n"
+ "Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction\n"
+ "\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "session.flush(); // Only for last transaction in conversation\n"
+ "t.commit(); // Also return JDBC connection\n"
+ "session.close(); // Only for last transaction in conversation]]>"
+
+#: index.docbook:698
+msgid "The <literal>foo</literal> object still knows which <literal>Session</literal> 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 aren't updating, you may call <literal>Session.lock()</literal> with <literal>LockMode.READ</literal> on any objects that might have been updated by another transaction. You don't need to lock any data that you <emphasis>are</emphasis> updating. Usually you would set <literal>FlushMode.MANUAL</literal> on an extended <literal>Session</literal>, so that only the last database transaction cycle is allowed to actually persist all modifications made in this conversation. Hence, only this last database transaction would include the <literal>flush()</literal> operation, and then also <literal>close()!
</literal> the session to end the conversation."
+msgstr "<literal>foo</literal> ê°ì²´ë ê·¸ê²ì´ ë¡ëëìë <literal>Session</literal>ì´ ì´ë ê²ì¸ì§ë¥¼ ì¬ì í ìê³ ìë¤. ì´ì ì¸ì
ììì íëì ìë¡ì´ ë°ì´í°ë² ì´ì¤ í¸ëìì
ì ììíë ê²ì íëì ìë¡ì´ 커ë¥ì
ì íëíê³ ê·¸ ì¸ì
ì ìë¹íë¤. ë°ì´í°ë² ì´ì¤ í¸ëìì
ì 커ë°(íì½)ìí¤ë ê²ì ê·¸ JDBC 커ë¥ì
ì¼ë¡ë¶í° íëì ì¸ì
ì ì°ê²°í´ì ìí¤ê³ ê·¸ 커ë¥ì
ì í(pool)ë¡ ë°íìí¬ ê²ì´ë¤. ì¬ì°ê²° íì, ë¹ì ì´ ì
ë°ì´í¸íê³ ìì§ ìì ë°ì´í°ì ëí ë²ì ì²´í¬ë¥¼ ê°ì ìí¤ê¸° ìí´ì, ë¹ì ì ë ë¤ë¥¸ í¸ëìì
ì ìí´ ì
ë°ì´í¸ëìì ìë ìë ììì ê°ì²´ë¤ì ëí´ <literal>LockMode.READ</literal>ë¡ì <literal>Session.lock()</literal>ì í¸ì¶í ìë ìë¤. ë¹ì ì ë¹ì ì´ ì
ë°ì´í¸ ì¤ì¸ ììì ë°ì´í°ë¥¼ ì ê¸í íìê° ìë¤. ëê° ë¹ì ì ë§ì§ë§ ë°ì´í°ë² ì´ì¤ í¸ëì!
ì
주기ë§ì´ ì´ ëí ë´ìì íí´ì§ 모ë ë³ê²½ë¤ì ì¤ì ë¡ ììíìí¤ë ê²ì´ íì©ëëë¡ í기 ìí´, íëì íì¥ë <literal>Session</literal>ì ëí´ <literal>FlushMode.MANUAL</literal>를 ì¤ì í ê²ì´ë¤. ê·¸ë¬ë¯ë¡ ì¤ì§ ì´ ë§ì§ë§ ë°ì´í°ë² ì´ì¤ í¸ëìì
ë§ì´ <literal>flush()</literal> ì¤í¼ë ì´ì
ì í¬í¨í ê²ì´ê³ , ëí ëí를 ì¢
ë£ìí¤ê¸° ìí´ ì¸ì
ì <literal>close()</literal>í ê²ì´ë¤."
+
+#: index.docbook:713
+msgid "This pattern is problematic if the <literal>Session</literal> is too big to be stored during user think time, e.g. an <literal>HttpSession</literal> should be kept as small as possible. As the <literal>Session</literal> is also the (mandatory) first-level cache and contains all loaded objects, we can probably use this strategy only for a few request/response cycles. You should use a <literal>Session</literal> only for a single conversation, as it will soon also have stale data."
+msgstr "ë§ì¼ ì¬ì©ìê° ìê°íëìê° ëì <literal>Session</literal>ì´ ì ì¥ë기ì ë무 í° ê²½ì° ì´ í¨í´ì 문ì ì±ì´ ìë¤. ì를 ë¤ì´ <literal>HttpSession</literal>ì ê°ë¥í ìì ê²ì¼ë¡ ì ì§ëì´ì¼ íë¤. ëí <literal>Session</literal>ì (íìì) 첫 ë²ì§¸ ë 벨 ìºìì´ê³ 모ë ë¡ëë ê°ì²´ë¤ì í¬í¨í기 ë문ì, ì°ë¦¬ë ìë§ ì ì ìì²/ìëµ ì£¼ê¸°ë¤ì ëí´ìë§ ì´ ë°©ë를 ì¬ì©í ì ìë¤. ë¹ì ì íëì ëíì ëí´ìë§ íëì <literal>Session</literal>ì ì¬ì©í´ì¼ íë¤. ìëíë©´ ê·¸ê²ì ëí 곧 ì¤ìë ë°ì´í°ê° ë ê²ì´ê¸° ë문ì´ë¤."
+
+#: index.docbook:723
+msgid "(Note that earlier Hibernate versions required explicit disconnection and reconnection of a <literal>Session</literal>. These methods are deprecated, as beginning and ending a transaction has the same effect.)"
+msgstr "(ì´ê¸°ì Hibernate ë²ì ë¤ì <literal>Session</literal>ì ëí ëª
ìì ì¸ ì°ê²°í´ì ì ì¬ì°ê²°ì íìë¡ íìì ë
¸í¸íë¼. í¸ëìì
ì ììíê³ ëë´ë ê²ì´ ëì¼í í¨ê³¼ë¥¼ ê°ì§ë¯ë¡, ì´ë¤ ë°©ë²ë¤ì ì§ë¶íê² ëìë¤.)"
+
+#: index.docbook:729
+msgid "Also note that you should keep the disconnected <literal>Session</literal> close to the persistence layer. In other words, use an EJB stateful session bean to hold the <literal>Session</literal> in a three-tier environment, and don't transfer it to the web layer (or even serialize it to a separate tier) to store it in the <literal>HttpSession</literal>."
+msgstr "ëí ë¹ì ì ìì ê³ì¸µì ëí´ ì°ê²°í´ì ë <literal>Session</literal>ì ë«íì§ì±ë¡ ì ì§í´ì¼í¨ì ë
¸í¸íë¼. ë¬ ë¦¬ë§í´, íëì 3-tier íê²½ìì <literal>Session</literal>ì ìì íëë° EJB stateful session beanì ì¬ì©íê³ , <literal>HttpSession</literal> ë´ì ê·¸ê²ì ì ì¥í기 ìí´ ê·¸ê²ì ì¹ ê³ì¸µì ì ì¡íì§ ë§ë¼ (ëë ê·¸ê²ì ë³ëì í°ì´ì ì§ë ¬í ìí¤ì§ë ë§ë¼)."
+
+#: index.docbook:737
+msgid "The extended session pattern, or <emphasis>session-per-conversation</emphasis>, is more difficult to implement with automatic current session context management. You need to supply your own implementation of the <literal>CurrentSessionContext</literal> for this, see the Hibernate Wiki for examples."
+msgstr "íì¥ë ì¸ì
í¨í´, ëë <emphasis>session-per-conversation</emphasis>ì ìëì ì¸ íì¬ ì¸ì
컨í
ì¤í¸ ê´ë¦¬ì ëí´ êµ¬ííê¸°ê° ë ì´ë µë¤. ë¹ì ì ì´ë¥¼ ìí´ ë¹ì ìì ì <literal>CurrentSessionContext</literal> 구íì ê³µê¸í íìê° ìì¼ë©°, ìì ë¤ì Hibernate Wiki를 ë³´ë¼."
+
+#: index.docbook:747
+msgid "Detached objects and automatic versioning"
+msgstr "Detached ê°ì²´ë¤ê³¼ ìëì ì¸ ë²ì í"
+
+#: index.docbook:749
+msgid "Each interaction with the persistent store occurs in a new <literal>Session</literal>. However, the same persistent instances are reused for each interaction with the database. The application manipulates the state of detached instances originally loaded in another <literal>Session</literal> and then reattaches them using <literal>Session.update()</literal>, <literal>Session.saveOrUpdate()</literal>, or <literal>Session.merge()</literal>."
+msgstr "ìì ì ì¥ìì ëí ê°ê°ì ìí¸ìì©ì ìë¡ì´ <literal>Session</literal>ìì ì¼ì´ëë¤. íì§ë§ ëì¼í ìì ì¸ì¤í´ì¤ë¤ì ë°ì´í°ë² ì´ì¤ìì ê°ê°ì ìí¸ìì©ì ì¬ì¬ì©ëë¤. ì´í리ì¼ì´ì
ì ìë ë¡ëëìë detached ì¸ì¤í´ì¤ë¤ì ìí를 ë ë¤ë¥¸ <literal>Session</literal> ë´ìì ì²ë¦¬íê³ ëì <literal>Session.update()</literal>, <literal>Session.saveOrUpdate()</literal>, <literal>Session.merge()</literal>를 ì¬ì©íì¬ ê·¸ê²ë¤ì ë¤ì 첨ë¶ìí¨ë¤."
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "foo.setProperty(\"bar\");\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "session.saveOrUpdate(foo); // Use merge() if \"foo\" might have been loaded already\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "foo.setProperty(\"bar\");\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "session.saveOrUpdate(foo); // Use merge() if \"foo\" might have been loaded already\n"
+ "t.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:759
+msgid "Again, Hibernate will check instance versions during flush, throwing an exception if conflicting updates occured."
+msgstr "ë¤ì, Hibernateë flush ëìì ì¸ì¤í´ì¤ ë²ì ë¤ì ì²´í¬í ê²ì´ê³ ì
ë°ì´í¸ 충ëì´ ë°ìí ê²½ì°ì ìì¸ìí©ì ëì§ ê²ì´ë¤."
+
+#: index.docbook:764
+msgid "You may also call <literal>lock()</literal> instead of <literal>update()</literal> and use <literal>LockMode.READ</literal> (performing a version check, bypassing all caches) if you are sure that the object has not been modified."
+msgstr "ë¹ì ì ëí <literal>update()</literal>ëì ì <literal>lock()</literal>ì í¸ì¶í ìë ìê³ ë§ì¼ ê·¸ ê°ì²´ê° ë³ê²½ëì§ ìììì ë¹ì ì´ íì íë ê²½ì°ì (ë²ì ì²´í¹ì ìííê³ ëª¨ë ìºìë¤ì 무ìíë) <literal>LockMode.READ</literal>를 ì¬ì©í ì ìë¤."
+
+#: index.docbook:773
+msgid "Customizing automatic versioning"
+msgstr "ìëì ì¸ ë²ì í를 ë§ì¶¤í ìí¤ê¸°"
+
+#: index.docbook:775
+msgid "You may disable Hibernate's automatic version increment for particular properties and collections by setting the <literal>optimistic-lock</literal> mapping attribute to <literal>false</literal>. Hibernate will then no longer increment versions if the property is dirty."
+msgstr "ë¹ì ì <literal>optimistic-lock</literal> 매í ìì±ì <literal>false</literal>ë¡ ì¤ì í¨ì¼ë¡ì¨ í¹ì íë¡í¼í°ë¤ê³¼ ì½ë ì
ë¤ì ëí Hibernateì ìëì ì¸ ë²ì ì¦ê°ë¥¼ ë¶ê°ë¥íëë¡ í ìë ìë¤. ê·¸ë Hibernateë ê·¸ íë¡í¼í°ê° dirty ì¼ ê²½ì°ì ë ì´ì ë²ì ì ì¦ê°ìí¤ì§ ìì ê²ì´ë¤."
+
+#: index.docbook:782
+msgid "Legacy database schemas are often static and can't be modified. Or, other applications might also access the same database and don't know how to handle version numbers or even timestamps. In both cases, versioning can't rely on a particular column in a table. To force a version check without a version or timestamp property mapping, with a comparison of the state of all fields in a row, turn on <literal>optimistic-lock=\"all\"</literal> in the <literal><class></literal> mapping. Note that this concepetually only works if Hibernate can compare the old and new state, i.e. if you use a single long <literal>Session</literal> and not session-per-request-with-detached-objects."
+msgstr "리거ì ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ë¤ì ì주 staticì´ê³ ë³ê²½ë ì ìë¤. ëë ë¤ë¥¸ ì´í리ì¼ì´ì
ë¤ì ëí ëì¼í ë°ì´í°ë² ì´ì¤ì ì ê·¼íê³ ë²ì ë²í¸ë¤ ëë ì¬ì§ì´ timestampë¤ì ì²ë¦¬íë ë°©ë²ì 모를 ìë ìë¤. ë ê²½ì°ë¤ìì, ë²ì íë í
ì´ë¸ ë´ì í¹ì 컬ë¼ì ìì§í ì ìë¤. version ëë timestamp íë¡í¼í° 매í ìì´ í ë´ì 모ë íëë¤ì ëí ìí를 ë¹êµíì¬ ë²ì ì²´í¬ë¥¼ ê°ì ìí¤ê¸° ìí´ì, <literal><class></literal> 매í ìì <literal>optimistic-lock=\"all\"</literal>ì íìíë¼. ë§ì¼ Hibernateê° ì´ì ìíì ìë¡ì´ ìí를 ë¹êµí ì ìì ê²½ì°ì, ì를 ë¤ë©´ ë¹ì ì´ íëì 긴 <literal>Session</literal>ì ì¬ì©íê³ session-per-request-with-detached-objectsì ì¬ì©íì§ ìì ê²½ì° ì´ê²ì ê°ë
ì ì¼ë¡ë§ ëìí¨ì ë
¸í¸íë¼."
+
+#: index.docbook:793
+msgid "Sometimes concurrent modification can be permitted as long as the changes that have been made don't overlap. If you set <literal>optimistic-lock=\"dirty\"</literal> when mapping the <literal><class></literal>, Hibernate will only compare dirty fields during flush."
+msgstr "ëëë¡ íí´ì¡ë ë³ê²½ë¤ì´ ì¤ì²©ëì§ ìë í ëìì ì¸ ë³ê²½ì´ íì©ë ì ìë¤. ë§ì¼ <literal><class></literal>를 매íí ë ë¹ì ì´ <literal>optimistic-lock=\"dirty\"</literal>를 ì¤ì íë©´, Hibernateë flush ëìì dirty íëë¤ì ë¹êµë§ í ê²ì´ë¤."
+
+#: index.docbook:799
+msgid "In both cases, with dedicated version/timestamp columns or with full/dirty field comparison, Hibernate uses a single <literal>UPDATE</literal> statement (with an appropriate <literal>WHERE</literal> clause) per entity to execute the version check and update the information. If you use transitive persistence to cascade reattachment to associated entities, Hibernate might execute uneccessary updates. This is usually not a problem, but <emphasis>on update</emphasis> 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\"</literal> in the <literal><class></literal> mapping, forcing Hibernate to <literal>SELECT</literal> the instance to ensure that changes did actually occur, before updating the row."
+msgstr "ë ê²½ì°ë¤ìì, ì ì© version/timestamp 컬ë¼ì ê²½ì° ëë full/dirty íë ë¹êµì ê²½ì°, Hibernateë ë²ì ì²´í¬ë¥¼ ì¤ííê³ ì 보를 ì
ë°ì´í¸íëë° ìí°í° ë¹ (ì ì í <literal>WHERE</literal> ì ì ê°ì§) í ê°ì<literal>UPDATE</literal> 문ì¥ì ì¬ì©íë¤. ë§ì¼ ë¹ì ì´ ì°ê´ë ìí°í°ë¤ì ëí ì¬ì²¨ë¶ë¥¼ ì¼ì¤ì¼ì´ë íëë° transitive ììì ì¬ì©í ê²½ì°, Hibernateë ë¶íìíê² ì
ë°ì´í¸ë¤ì ì¤íí ìë ìë¤. ì´ê²ì ëê° ë¬¸ì ê° ìëì§ë§, ì¬ì§ì´ ë³ê²½ë¤ì´ detached ì¸ì¤í´ì¤ë¤ì ëí´ íí´ì§ì§ ììì ëìë ë°ì´í°ë² ì´ì¤ ë´ìì <emphasis>on update</emphasis> í¸ë¦¬ê±°ë¤ì´ ì¤íë ìë ìë¤. ê·¸ íì ì
ë°ì´í¸í기 ì ì ë³ê²½ë¤ì´ ì¤ì ë¡ ì¼ì´ë¬ìì íì¸í기 ìí´ ì¸ì¤í´ì¤ë¥¼ <literal>SELECT</literal>íë ê²ì Hibernateìê² ê°ì ìí¤ë, <literal><class></literal> 매í ìì <literal>!
select-before-update=\"true\"</literal>를 ì¤ì í¨ì¼ë¡ì¨ ë¹ì ì ì´ í¹ì§ì ë§ì¶¤í ìí¬ ì ìë¤."
+
+#: index.docbook:817
+msgid "Pessimistic Locking"
+msgstr "Pessimistic ì ê¸"
+
+#: index.docbook:819
+msgid "It is not intended that users spend much time worring about locking strategies. Its 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 sometimes wish to obtain exclusive pessimistic locks, or re-obtain locks at the start of a new transaction."
+msgstr "ì¬ì©ìë¤ì ì ê¸ ë°©ëì ëí´ ê±±ì íëë° ë§ì ìê°ì í ì ííë ¤ê³ ìê°íì§ ìëë¤. ëê° JDBC 커ë¥ì
ë¤ì ëí 격리 ë 벨ì ì§ì íë ê²ì¼ë¡ 충ë¶íê³ ê·¸ë° ë¤ì ë¨ìí ë°ì´í°ë² ì´ì¤ë¡ íì¬ê¸ 모ë ìì
ì ííëë¡ íë¤. íì§ë§ ì§ì¼ë³´í ì¬ì©ìë¤ì ëëë¡ ë°°íì ì¸ pessimistic ì ê¸ë¤ì ì»ê±°ë ëë ìë¡ì´ í¸ëìì
ì ìì ìì ì ê¸ë¤ì ë¤ì ì»ê³ ì ìí ìë ìë¤."
+
+#: index.docbook:826
+msgid "Hibernate will always use the locking mechanism of the database, never lock objects in memory!"
+msgstr "Hibernateë ê²°ì½ ë©ëª¨ë¦¬ ë´ì ìë ê°ì²´ë¤ì´ ìë, ë°ì´í°ë² ì´ì¤ì ì ê¸ ë©ì»¤ëì¦ì íì ì¬ì©í ê²ì´ë¤!"
+
+#: index.docbook:831
+msgid "The <literal>LockMode</literal> class defines the different lock levels that may be acquired by Hibernate. A lock is obtained by the following mechanisms:"
+msgstr "<literal>LockMode</literal> í´ëì¤ë Hibernateì ìí´ íëë ì ìë ë¤ë¥¸ ì ê¸ ë 벨ë¤ì ì ìíë¤. ì ê¸ì ë¤ì ë©ì»¤ëì¦ë¤ì ìí´ ì»ì´ì§ë¤:"
+
+#: index.docbook:838
+msgid "<literal>LockMode.WRITE</literal> is acquired automatically when Hibernate updates or inserts a row."
+msgstr "<literal>LockMode.WRITE</literal>ë Hibernateê° í íì ì
ë°ì´í¸ íê±°ë insert í ë ìëì ì¼ë¡ íëëë¤."
+
+#: index.docbook:844
+msgid "<literal>LockMode.UPGRADE</literal> may be acquired upon explicit user request using <literal>SELECT ... FOR UPDATE</literal> on databases which support that syntax."
+msgstr "<literal>LockMode.UPGRADE</literal>ë <literal>SELECT ... FOR UPDATE</literal> 구문ì ì§ìíë ë°ì´í°ë² ì´ì¤ ììì <literal>SELECT ... FOR UPDATE</literal>를 ì¬ì©íì¬ ëª
ìì ì¸ ì¬ì©ì ìì² ììì ì»ì´ì§ ì ìë¤."
+
+#: index.docbook:850
+msgid "<literal>LockMode.UPGRADE_NOWAIT</literal> may be acquired upon explicit user request using a <literal>SELECT ... FOR UPDATE NOWAIT</literal> under Oracle."
+msgstr "<literal>LockMode.UPGRADE_NOWAIT</literal>ë ì¤ë¼í´ìì <literal>SELECT ... FOR UPDATE NOWAIT</literal>를 ì¬ì©íì¬ ëª
ìì ì¸ ì¬ì©ì ìì² ììì ì»ì´ì§ ìë ìë¤."
+
+#: index.docbook:856
+msgid "<literal>LockMode.READ</literal> is acquired automatically when Hibernate reads data under Repeatable Read or Serializable isolation level. May be re-acquired by explicit user request."
+msgstr "<literal>LockMode.READ</literal>ë Hibernateê° ë°ë³µ ê°ë¥í ì½ê¸°(Repeatable Read) ëë Serialization 격리 ë 벨ìì ë°ì´í°ë¥¼ ì½ì´ë¤ì¼ ë ìëì ì¼ë¡ ì»ì´ì§ ìë ìë¤. ëª
ìì ì¸ ì¬ì©ì ìì²ì ìí´ ë¤ì ì»ì´ì§ ìë ìë¤."
+
+#: index.docbook:863
+msgid "<literal>LockMode.NONE</literal> represents the absence of a lock. All objects switch to this lock mode at the end of a <literal>Transaction</literal>. Objects associated with the session via a call to <literal>update()</literal> or <literal>saveOrUpdate()</literal> also start out in this lock mode."
+msgstr "<literal>LockMode.NONE</literal>ì ì ê¸ì´ ììì ëíë¸ë¤. 모ë ê°ì²´ë¤ì <literal>Transaction</literal>ì ëìì ì´ ì ê¸ ëª¨ëë¡ ì íëë¤. <literal>update()</literal> ëë <literal>saveOrUpdate()</literal>ì ëí í¸ì¶ì íµí´ ì¸ì
ê³¼ ì°ê´ë ê°ì²´ë¤ì´ ëí ì´ ì ê¸ ëª¨ëë¡ ììëë¤."
+
+#: index.docbook:872
+msgid "The \"explicit user request\" is expressed in one of the following ways:"
+msgstr "\"ëª
ìì ì¸ ì¬ì©ì ìì²\"ì ë¤ì ë°©ë²ë¤ ì¤ íëë¡ ííëë¤:"
+
+#: index.docbook:878
+msgid "A call to <literal>Session.load()</literal>, specifying a <literal>LockMode</literal>."
+msgstr "<literal>LockMode</literal>를 ì§ì í <literal>Session.load()</literal>ì ëí í¸ì¶."
+
+#: index.docbook:883
+msgid "A call to <literal>Session.lock()</literal>."
+msgstr "<literal>Session.lock()</literal>ì ëí í¸ì¶."
+
+#: index.docbook:888
+msgid "A call to <literal>Query.setLockMode()</literal>."
+msgstr "<literal>Query.setLockMode()</literal>ì ëí í¸ì¶."
+
+#: index.docbook:894
+msgid "If <literal>Session.load()</literal> is called with <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, and the requested object was not yet loaded by the session, the object is loaded using <literal>SELECT ... FOR UPDATE</literal>. If <literal>load()</literal> is called for an object that is already loaded with a less restrictive lock than the one requested, Hibernate calls <literal>lock()</literal> for that object."
+msgstr "ë§ì¼ <literal>Session.load()</literal>ê° <literal>UPGRADE</literal> ëë <literal>UPGRADE_NOWAIT</literal> 모ëë¡ í¸ì¶ëê³ ,ìì²ë ê°ì²´ê° ìì§ ì´ ì¸ì
ì ìí´ ë¡ëëì§ ììë¤ë©´, ê·¸ ê°ì²´ë <literal>SELECT ... FOR UPDATE</literal>를 ì¬ì©íì¬ ë¡ëëë¤. ë§ì¼ ìì²ë ê²ì´ ìë ë¤ì ì íì ì¸ ì ê¸ì¼ë¡ ì´ë¯¸ ë¡ëëì´ ìë ê°ì²´ì ëí´ <literal>load()</literal>ê° í¸ì¶ë ê²½ì°, Hibernateë ê·¸ ê°ì²´ì ëí´ <literal>lock()</literal>ì í¸ì¶íë¤."
+
+#: index.docbook:903
+msgid "<literal>Session.lock()</literal> performs a version number check if the specified lock mode is <literal>READ</literal>, <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>. (In the case of <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, <literal>SELECT ... FOR UPDATE</literal> is used.)"
+msgstr "ë§ì¼ ì§ì ë ì ê¸ ëª¨ëê° <literal>READ</literal>, <literal>UPGRADE</literal> ëë <literal>UPGRADE_NOWAIT</literal> ì¼ ê²½ì°ì <literal>Session.lock()</literal>ì ë²ì ë²í¸ ì²´í¬ë¥¼ ìííë¤. (<literal>UPGRADE</literal> ëë <literal>UPGRADE_NOWAIT</literal> ì¸ ê²½ì°ì, <literal>SELECT ... FOR UPDATE</literal>ê° ì¬ì©ëë¤.)"
+
+#: index.docbook:910
+msgid "If the database does not support the requested lock mode, Hibernate will use an appropriate alternate mode (instead of throwing an exception). This ensures that applications will be portable."
+msgstr "ë§ì¼ ë°ì´í°ë² ì´ì¤ê° ìì²ë ì ê¸ ëª¨ë를 ì§ìíì§ ìì ê²½ì°, (ìì¸ìí©ì ëì§ë ëì ì) Hibernateë ì ì í ëì²´ 모ë를 ì¬ì©í ê²ì´ë¤. ì´ê²ì ì´í리ì¼ì´ì
ì´ ì´ì ê°ë¥í ê²ìì íì¤í í´ì¤ë¤."
+
+#: index.docbook:919
+msgid "Connection Release Modes"
+msgstr "ì°ê²° í´ì 모ëë¤"
+
+#: index.docbook:921
+msgid "The legacy (2.x) behavior of Hibernate in regards to JDBC connection management was that a <literal>Session</literal> would obtain a connection when it was first needed and then hold unto that connection until the session was closed. Hibernate 3.x introduced the notion of connection release modes to tell a session how to handle its JDBC connections. Note that the following discussion is pertinent only to connections provided through a configured <literal>ConnectionProvider</literal>; 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</literal>:"
+msgstr "JDBC 커ë¥ì
ê´ë¦¬ì ê´í Hibernateì 리거ì(2.x) í¹ì§ì ê·¸ê²ì´ ì²ìì¼ë¡ íìë¡ íì ë íëì <literal>Session</literal>ì´ íëì 커ë¥ì
ì íëí ê²ì´ê³ , ê·¸ë° ë¤ì ê·¸ 커ë¥ì
ì ê·¸ ì¸ì
ì´ ë«íì§ëê¹ì§ ë³´ê´ëë¤ë ê²ì´ìë¤. Hibernate 3.xë ì¸ì
ìê² ê·¸ê²ì JDBC 커ë¥ì
ë¤ì ì²ë¦¬íë ë°©ë²ì ìë ¤ì£¼ê¸° ìí´ ì°ê²° í´ì 모ëë¤ì ê´í ê°ë
ì ëì
íë¤. ë¤ì ë
¼ìë 구ì±ë <literal>ConnectionProvider</literal>를 íµí´ ì ê³µëë 커ë¥ì
ë¤ì ëí´ìë§ ì ì íë¤ë ì ì ë
¸í¸íë¼; ì¬ì©ìê° ì ê³µíë 커ë¥ì
ë¤ì <literal>org.hibernate.ConnectionReleaseMode</literal>ì ì´ê±°ë ê°ë¤ì ìí´ ìë³ëë¤:"
+
+#: index.docbook:935
+msgid "<literal>ON_CLOSE</literal> - is essentially the legacy behavior described above. The Hibernate session obatins a connection when it first needs to perform some JDBC access and holds unto that connection until the session is closed."
+msgstr "<literal>ON_CLOSE</literal> - ë 본ì§ì ì¼ë¡ ìì ì¤ëª
ë 리거ì í¹ì§ì´ë¤. Hibernate ì¸ì
ì ê·¸ê²ì´ ì´ë¤ JDBC ì ê·¼ì ìííê³ ì¸ì
ì´ ë«íì§ ëê¹ì§ ê·¸ 커ë¥ì
ì ë³´ê´í íìê° ìì ë íëì 커ë¥ì
ì íëíë¤."
+
+#: index.docbook:942
+msgid "<literal>AFTER_TRANSACTION</literal> - says to release connections after a <literal>org.hibernate.Transaction</literal> has completed."
+msgstr "<literal>AFTER_TRANSACTION</literal> - ì íëì <literal>org.hibernate.Transaction</literal>ì´ ìë£ë íì ì°ê²°ë¤ì í´ì íë¼ê³ ë§íë¤."
+
+#: index.docbook:948
+msgid "<literal>AFTER_STATEMENT</literal> (also referred to as aggressive release) - says to release connections after each and 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</literal>."
+msgstr "<literal>AFTER_STATEMENT</literal> (ëí ì ê·¹ì ì¸ í´ì ë¼ê³ ì¸ê¸ë¨) - ë ê°ê°ì 모ë ë¬¸ì¥ ì¤í íì 커ë¥ì
ë¤ì í´ì íë¼ê³ ë§íë¤. ì´ ì ê·¹ì ì¸ í´ì ë ê·¸ 문ì¥ì´ 주ì´ì§ ì¸ì
ê³¼ ì°ê´ë 리ìì¤ë¤ì ì´ë ¤ì§ì±ë¡ ë¨ê²¨ë ê²½ì°ìë ê±´ëë°ê²(skip) ëë¤; íì¬ ì´ê²ì´ ì¼ì´ëë ì ì¼í ìí©ì <literal>org.hibernate.ScrollableResults</literal>ì ì¬ì©ì íµí´ìì´ë¤."
+
+#: index.docbook:958
+msgid "The configuration parameter <literal>hibernate.connection.release_mode</literal> is used to specify which release mode to use. The possible values:"
+msgstr "ì¬ì©í í´ì 모ë를 ì§ì í기 ìí´ êµ¬ì± íë¼ë¯¸í° <literal>hibernate.connection.release_mode</literal>ê° ì¬ì©ëë¤. ê°ë¥í ê°ë¤ì ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:965
+msgid "<literal>auto</literal> (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. It is rarely a good idea to 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</literal> (ëí´í¸) - ì´ ì íì <literal>org.hibernate.transaction.TransactionFactory.getDefaultReleaseMode()</literal> ë©ìëì ìí´ ë°íë í´ì 모ëë¡ ìììí¨ë¤. JTATransactionFactoryì¸ ê²½ì°, ì´ê²ì ConnectionReleaseMode.AFTER_STATEMENT를 ë°ííë¤; JDBCTransactionFactoryì¸ ê²½ì°, ì´ê²ì ConnectionReleaseMode.AFTER_TRANSACTIONì ë°ííë¤. ì´ ì¤ì ì ê°ì´ ì¬ì©ì ì½ë ë´ì ë²ê·¸ë¤ ê·¸ë¦¬ê³ /ëë ì í¨íì§ ìì ê°ì ë¤ì ê°ë¦¬í¤ë ê²½í¥ì´ ììì¼ë¡ ì¸í´ ì´ ëí´í¸ í¹ì§ì ì¤í¨ë¡ ë³ê²½íë ê²ì ê±°ì ì¢ì ìê°ì´ ìëë¤."
+
+#: index.docbook:975
+msgid "<literal>on_close</literal> - says to use ConnectionReleaseMode.ON_CLOSE. This setting is left for backwards compatibility, but its use is highly discouraged."
+msgstr "<literal>on_close</literal> - ë ConnectionReleaseMode.ON_CLOSE를 ì¬ì©íë¼ê³ ë§íë¤. ì´ ì¤ì ì ìí¸íì±ì ìí´ ë¨ê²¨ì¡ì§ë§, ê·¸ê²ì ì¬ì©ì ë§¤ì° ê¶ì¥ëì§ ìëë¤."
+
+#: index.docbook:981
+msgid "<literal>after_transaction</literal> - says to use 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</literal> - ì ConnectionReleaseMode.AFTER_TRANSACTIONì ì¬ì©íë¼ê³ ë§íë¤. ì´ ì¤ì ì JTA íê²½ë¤ìì ì¬ì©ëì§ ìì ê²ì´ë¤. ëí ConnectionReleaseMode.AFTER_TRANSACTIONì¸ ê²½ì°ì ë§ì¼ ì¸ì
ì´ auto-commit 모ëì ìëë¡ ê³ ë ¤ë ê²½ì°, 커ë¥ì
ë¤ì ë§ì¹ í´ì 모ëê° AFTER_STATEMENTì¸ ê²ì²ë¼ í´ì ë ê²ìì ëí ë
¸í¸íë¼."
+
+#: index.docbook:989
+msgid "<literal>after_statement</literal> - says to use ConnectionReleaseMode.AFTER_STATEMENT. Additionally, the configured <literal>ConnectionProvider</literal> is consulted to see if it supports this setting (<literal>supportsAggressiveRelease()</literal>). 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 we make a call into <literal>ConnectionProvider.getConnection()</literal> or in auto-commit environments where it does not matter whether we get back the same connection."
+msgstr "<literal>after_statement</literal> - ë ConnectionReleaseMode.AFTER_STATEMENT를 ì¬ì©íë¼ê³ ë§íë¤. ì¶ê°ì ì¼ë¡ 구ì±ë <literal>ConnectionProvider</literal>ë ê·¸ê²ì´ ì´ ì¤ì (<literal>supportsAggressiveRelease()</literal>)ì ì§ìíëì§ ì¬ë¶ë¥¼ ì기 ìí´ ì°¸ê³ ëë¤. ë§ì¼ ì§ìíì§ ìì ê²½ì°, í´ì 모ëë ConnectionReleaseMode.AFTER_TRANSACTIONì¼ë¡ ì¬ì¤ì ëë¤. ì´ ì¤ì ì ì°ë¦¬ê° <literal>ConnectionProvider.getConnection()</literal>ì í¸ì¶í ëë§ë¤ ì°ë¦¬ê° ëì¼í 기본 JDBC 커ë¥ì
ì ë¤ì íìë¡ í ì ìë íê²½ë¤ìì ëë ì°ë¦¬ê° ëì¼í 커ë¥ì
ì ì»ë ê²ì ìê´ìë auto-commit íê²½ìì ì¤ì§ ìì íë¤."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/tutorial.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/tutorial.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/tutorial.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1894 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:7
+msgid "Introduction to Hibernate"
+msgstr "Hibernate ê°ì"
+
+#: index.docbook:10
+msgid "Preface"
+msgstr "<title>머리ë§</title>"
+
+#: index.docbook:12
+msgid "This chapter is an introductory tutorial for new users of Hibernate. We start with a simple command line application using an in-memory database and develop it in easy to understand steps."
+msgstr "ì´ ì¥ì Hibernate ì´ì¬ì를 ìí ê°ë¡ ì ì¸ íí 리ì¼ì´ë¤. ì°ë¦¬ë ë©ëª¨ë¦¬-ë´ ë°ì´í°ë² ì´ì¤ë¥¼ ì¬ì©íë ê°ë¨í ëª
ë ¹ ë¼ì¸ ì´í리ì¼ì´ì
ì¼ë¡ ììíê³ ë¨ê³ë¤ì ì´í´íëë¡ ì½ê² ê·¸ê²ì ê°ë°íë¤."
+
+#: index.docbook:18
+msgid "This tutorial is intended for new users of Hibernate but requires Java and SQL knowledge. It is based on a tutorial by Michael Gloegl, the third-party libraries we name are for JDK 1.4 and 5.0. You might need others for JDK 1.3."
+msgstr "ì´ íí 리ì¼ì Hibernate ì ê· ì¬ì©ìë¤ì ìëíê³ ìì§ë§ Javaì SQL ì§ìì íìë¡ íë¤. ê·¸ê²ì Michael Gloeglì´ ìì±í íí 리ì¼ì 기ì´íë©°, ì°ë¦¬ê° ëª
ëª
íë ì 3ì ë¼ì´ë¸ë¬ë¦¬ë¤ì JDK 1.4ì 5.0 ë²ì ì©ì´ë¤. ë¹ì ì JDK1.3ì ëí´ ë¤ë¥¸ ë¼ì´ë¸ë¬ë¦¬ë¤ì íìë¡ í ìë ìë¤."
+
+#: index.docbook:24
+msgid "The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr "íí 리ì¼ì© ìì¤ë <literal>doc/reference/tutorial/</literal> ëë í 리 ë´ì ìë ë°°í¬ë³¸ ë´ì í¬í¨ëì´ ìë¤."
+
+#: index.docbook:32
+msgid "Part 1 - The first Hibernate Application"
+msgstr "íí¸ 1 - 첫 ë²ì§¸ Hibernate ì´í리ì¼ì´ì
"
+
+#: index.docbook:34
+msgid "First, we'll create a simple console-based Hibernate application. We use an Java database (HSQL DB), so we do not have to install any database server."
+msgstr "먼ì , ì°ë¦¬ë í ê°ì ê°ë¨í ì½ì-ê¸°ë° Hibernate ì´í리ì¼ì´ì
ì ìì±ìí¬ ê²ì´ë¤. ì°ë¦¬ë ë©ëª¨ë¦¬-ë´ ë°ì´í°ë² ì´ì¤(HSQL DB)를 ì¬ì©íë¯ë¡, ì°ë¦¬ë ì´ë¤ ë°ì´í°ë² ì´ì¤ ìë²ë¥¼ ì¤ì¹íì§ ììë ëë¤."
+
+#: index.docbook:39
+msgid "Let's assume we need a small database application that can store events we want to attend, and information about the hosts of these events."
+msgstr "ì°ë¦¬ê° ì°ë¦¬ê° ìë°íê³ ì ìíë ì´ë²¤í¸ë¤ì ì ì¥í ì ìë ìì ë°ì´í°ë² ì´ì¤ ì´í리ì¼ì´ì
ê³¼ ì´ë¤ ì´ë²¤í¸ë¤ì í¸ì¤í¸ë¤ì ëí ì 보를 íìë¡ íë¤ê³ ê°ì íì."
+
+#: index.docbook:44
+msgid "The first thing we do, is set up our development directory and put all the Java libraries we need into it. Download the Hibernate distribution from the Hibernate website. Extract the package and place all required libraries found in <literal>/lib</literal> into into the <literal>/lib</literal> directory of your new development working directory. It should look like this:"
+msgstr "ì°ë¦¬ê° íí 첫 ë²ì§¸ ê²ì ì°ë¦¬ì ê°ë° ëë í 리를 ì¤ì íê³ , ì°ë¦¬ê° íìë¡ íë 모ë Java ë¼ì´ë¸ë¬ë¦¬ë¤ì ê·¸ê² ìì ì§ì´ ë£ë ê²ì´ë¤. Hibernate ì¹ ì¬ì´í¸ë¡ë¶í° Hibernate ë°°í¬ë³¸ì ë´ë ¤ ë°ìë¼. í¨í¤ì§ë¥¼ ì¶ì¶í´ë´ê³ <literal>/lib</literal> ììì ë°ê²¬ëë 모ë íìí ë¼ì´ë¸ë¬ë¦¬ë¤ì ë¹ì ì ìë¡ì´ ê°ë° ìì
ëë í 리ì <literal>/lib</literal> ëë í 리 ìì ìì¹ì§ìë¼. ê·¸ê²ì ë¤ìê³¼ ê°ì ê²ì´ë¤:"
+
+#: index.docbook:52
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " antlr.jar\n"
+ " cglib.jar\n"
+ " asm.jar\n"
+ " asm-attrs.jars\n"
+ " commons-collections.jar\n"
+ " commons-logging.jar\n"
+ " hibernate3.jar\n"
+ " jta.jar\n"
+ " dom4j.jar\n"
+ " log4j.jar ]]>"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " antlr.jar\n"
+ " cglib.jar\n"
+ " asm.jar\n"
+ " asm-attrs.jars\n"
+ " commons-collections.jar\n"
+ " commons-logging.jar\n"
+ " hibernate3.jar\n"
+ " jta.jar\n"
+ " dom4j.jar\n"
+ " log4j.jar ]]>"
+
+#: index.docbook:54
+msgid "This is the minimum set of required libraries (note that we also copied hibernate3.jar, the main archive) for Hibernate <emphasis>at the time of writing</emphasis>. The Hibernate release you are using might require more or less libraries. See the <literal>README.txt</literal> file in the <literal>lib/</literal> directory of the Hibernate distribution for more information about required and optional third-party libraries. (Actually, Log4j is not required but preferred by many developers.)"
+msgstr "ì´ê²ì <emphasis>ê¸ì ìì± ìì ìì</emphasis> Hibernateì íìì ì¸ ìµìíì ì¸í¸ì´ë¤(ì°ë¦¬ë ëí ë©ì¸ ìì¹´ì´ë¸ì¸ hibernate3.jar를 ë³µì¬íìì ë
¸í¸íë¼). ë¹ì ì´ ì¬ì© ì¤ì¸ Hibernate ë°°í¬ë³¸ì´ ë ë§ê±°ë ë³´ë¤ ì ì ë¼ì´ë¸ë¬ë¦¬ë¤ì íìë¡ í ìë ìë¤. íì ë¼ì´ë¸ë¬ë¦¬ë¤ê³¼ ì íì ì¸ ì 3ì ë¼ì´ë¸ë¬ë¦¬ë¤ì ëí ì¶ê° ì ë³´ë Hibernate ë°°í¬ë³¸ì <literal>lib/</literal> ëë í 리 ë´ì ìë <literal>README.txt</literal> íì¼ì ë³´ë¼. (ì¤ì ë¡, Log4jë íìë ìëì§ë§ ë§ì ê°ë°ìë¤ì ìí´ ì í¸ëë¤.)"
+
+#: index.docbook:63
+msgid "Next we create a class that represents the event we want to store in database."
+msgstr "ë¤ìì¼ë¡ ì°ë¦¬ë ì°ë¦¬ê° ë°ì´í°ë² ì´ì¤ ìì ì ì¥ìí¤ê³ ì ìíë ì´ë²¤í¸ë¥¼ íííë í ê°ì í´ëì¤ë¥¼ ìì±ìí¨ë¤."
+
+#: index.docbook:68
+msgid "The first class"
+msgstr "첫 ë²ì§¸ í´ëì¤"
+
+#: index.docbook:70
+msgid "Our first persistent class is a simple JavaBean class with some properties:"
+msgstr "ì°ë¦¬ì 첫 ë²ì§¸ ìì í´ëì¤ë ëªëª íë¡í¼í°ë¤ì ê°ì§ ê°ë¨í ìë°ë¹ì¦ í´ëì¤ì´ë¤:"
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Event {\n"
+ " private Long id;\n"
+ "\n"
+ " private String title;\n"
+ " private Date date;\n"
+ "\n"
+ " public Event() {}\n"
+ "\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public Date getDate() {\n"
+ " return date;\n"
+ " }\n"
+ "\n"
+ " public void setDate(Date date) {\n"
+ " this.date = date;\n"
+ " }\n"
+ "\n"
+ " public String getTitle() {\n"
+ " return title;\n"
+ " }\n"
+ "\n"
+ " public void setTitle(String title) {\n"
+ " this.title = title;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Event {\n"
+ " private Long id;\n"
+ "\n"
+ " private String title;\n"
+ " private Date date;\n"
+ "\n"
+ " public Event() {}\n"
+ "\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public Date getDate() {\n"
+ " return date;\n"
+ " }\n"
+ "\n"
+ " public void setDate(Date date) {\n"
+ " this.date = date;\n"
+ " }\n"
+ "\n"
+ " public String getTitle() {\n"
+ " return title;\n"
+ " }\n"
+ "\n"
+ " public void setTitle(String title) {\n"
+ " this.title = title;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:76
+msgid "You can see that this class uses standard JavaBean naming conventions for property getter and setter methods, as well as private visibility for the fields. This is a recommended design - but not required. Hibernate can also access fields directly, the benefit of accessor methods is robustness for refactoring. The no-argument constructor is required to instantiate an object of this class through reflection."
+msgstr "ë¹ì ì ì´ í´ëì¤ê° íë¡í¼í° getterì setter ë©ìëë¤ì ëí íì¤ ìë°ë¹ì¦ ëª
ëª
ë²ë¤ ë¿ë§ ìëë¼ íëë¤ì ëí private ê°ìì±ì ì¬ì©íê³ ììì ì ì ìë¤. ì´ê²ì ê¶ì¥ëë ì¤ê³ì´ì§ë§, íìì ì´ì§ë ìë¤. Hibernateë ëí íëë¤ì ì§ì ì ê·¼í ì ìì¼ë©°, accessor ë©ìëë¤ì ì´ì ì ê°ê±´í 리í©í ë§ì´ë¤. ìê·ë¨¼í¸ ìë ìì±ìë reflectionì íµí´ ì´ í´ëì¤ì ê°ì²´ë¥¼ ì´ê¸°í ìí¬ íìê° ìë¤."
+
+#: index.docbook:84
+msgid "The <literal>id</literal> property holds a unique identifier value for a particular event. All persistent entity classes (there are less important dependent classes as well) will need such an identifier property if we want to use the full feature set of Hibernate. In fact, most applications (esp. web applications) need to distinguish objects by identifier, so you should consider this a feature rather than a limitation. However, we usually don't manipulate the identity of an object, hence the setter method should be private. Only Hibernate will assign identifiers when an object is saved. You can see that Hibernate can access public, private, and protected accessor methods, as well as (public, private, protected) fields directly. The choice is up to you and you can match it to fit your application design."
+msgstr "<literal>id</literal> íë¡í¼í°ë í¹ë³í ì´ë²¤í¸ë¥¼ ìí ì ì¼ ìë³ì를 ìì íë¤. 모ë ìì ìí°í° í´ëì¤ë¤ (ë³´ë¤ ë ì¤ìí ì¢
ì í´ëì¤ë¤ë ì¡´ì¬íë¤)ì ì°ë¦¬ê° Hibernateì ì ì²´ í¹ì§ ì§í©ì ì¬ì©íê³ ì ìí ê²½ì°ì ê·¸ë° ìë³ì íë¡í¼í°ë¥¼ íìë¡ í ê²ì´ë¤. ì¬ì¤ ëë¶ë¶ì ì´í리ì¼ì´ì
ë¤(í¹í ì¹ ì´í리ì¼ì´ì
ë¤)ì ìë³ìì ìí´ ê°ì²´ë¤ì 구ë¶ì§ì íìê° ìì´ì, ë¹ì ì ì´ê²ì ì´ë¤ ì ì½ì ì´ë¼ê¸° ë³´ë¤ë íëì í¹ì§ì¼ë¡ ê°ì£¼í ê²ì´ë¤. íì§ë§ ì°ë¦¬ë ëê° ê°ì²´ì íë±(identity)를 ì²ë¦¬íì§ ìì¼ë¯ë¡, setter ë©ìëë privateì´ì´ì¼ íë¤. ê°ì²´ê° ì ì¥ë ë, Hibernateë ë¨ì§ ìë³ìë¤ì í ë¹í ê²ì´ë¤. ë¹ì ì Hibernateê° public, private, protected ì ê·¼ì ë©ìëë¤ ë¿ë§ ìëë¼ (public, private, protected) íëë¤ìë ì§ì ì ê·¼í ì ììì ì ì ìë¤. ì!
íì ë¹ì ìê² ë¬ë ¤ ìì¼ë©°, ë¹ì ì ë¹ì ì ì´í리ì¼ì´ì
ì¤ê³ì ì í©íëë¡ ê·¸ê²ì ë¶í©ìí¬ ì ìë¤."
+
+#: index.docbook:96
+msgid "The no-argument constructor is a requirement for all persistent classes; Hibernate has to create objects for you, using Java Reflection. The constructor can be private, however, package visibility is required for runtime proxy generation and efficient data retrieval without bytecode instrumentation."
+msgstr "ìê·ë¨¼í¸ ìë ìì±ìë 모ë ìì í´ëì¤ë¤ì ëí íìì¡°ê±´ì´ë¤; Hibernateë ë¹ì ì ìí´ Java Reflectionì ì¬ì©íì¬ ê°ì²´ë¤ì ìì±ìì¼ì¼ íë¤. íì§ë§ ìì±ìë private ì¼ ì ìê³ , í¨í¤ì§ ê°ìì±ì ë°íì íë½ì ìì±ê³¼ ë°ì´í¸ì½ë ë°©í¸ ìë í¨ì¨ì ì¸ ë°ì´í° ê²ìì íìíë¤."
+
+#: index.docbook:103
+msgid "Place this Java source file in a directory called <literal>src</literal> in the development folder, and in its correct package. The directory should now look like this:"
+msgstr "ì´ Java ìì¤ íì¼ì ê°ë° í´ë ë´ì <literal>src</literal>ë¡ ëª
ëª
ë ëë í 리 ìì ìë ìì¹ì§ìë¼. ì´ì ê·¸ ëë í 리ë ë¤ìê³¼ ê°ì ê²ì´ë¤:"
+
+#: index.docbook:108
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java]]>"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java]]>"
+
+#: index.docbook:110
+msgid "In the next step, we tell Hibernate about this persistent class."
+msgstr "ë¤ì ë¨ê³ìì, ì°ë¦¬ë Hiberanteìê² ì´ ìì í´ëì¤ì ëí´ ìë ¤ ì¤ë¤."
+
+#: index.docbook:117
+msgid "The mapping file"
+msgstr "The mapping file"
+
+#: index.docbook:119
+msgid "Hibernate needs to know how to load and store objects of the persistent class. This is where the Hibernate mapping file comes into play. The mapping file tells Hibernate what table in the database it has to access, and what columns in that table it should use."
+msgstr "Hibernateë ìì í¬ëì¤ë¤ì ëí ê°ì²´ë¤ì ë¡ëìí¤ê³ ì ì¥ìí¤ë ë°©ë²ì ì íìê° ìë¤. ì´ê³³ì Hibernate 매í íì¼ì´ ìí ì ííë ê³³ì´ë¤. 매í íì¼ì Hibernateê° ì ê·¼í´ì¼ íë ë°ì´í°ë² ì´ì¤ ë´ì í
ì´ë¸ì´ 무ìì¸ì§, ê·¸ë¦¬ê³ ê·¸ê²ì´ ì¬ì©í´ì¼ íë ê·¸ í
ì´ë¸ ë´ì 컬ë¼ë¤ì´ 무ìì¸ì§ë¥¼ Hibernateìê² ìë ¤ì¤ë¤."
+
+#: index.docbook:126
+msgid "The basic structure of a mapping file looks like this:"
+msgstr "매í íì¼ì 기본 구조ë ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "[...]\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "[...]\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:132
+msgid "Note that the Hibernate DTD is very sophisticated. You can use it for auto-completion of XML mapping elements and attributes in your editor or IDE. You also should open up the DTD file in your text editor - it's the easiest way to get an overview of all elements and attributes and to see the defaults, as well as some comments. Note that Hibernate will not load the DTD file from the web, but first look it up from the classpath of the application. The DTD file is included in <literal>hibernate3.jar</literal> as well as in the <literal>src/</literal> directory of the Hibernate distribution."
+msgstr "Hibernate DTDë ë§¤ì° ì êµíë¤. ë¹ì ì ë¹ì ì í¸ì§ê¸° ëë IDE ë´ìì XML 매í ììë¤ê³¼ ìì±ë¤ì ëí ìë ìì± ê¸°ë¥ì ìí´ ê·¸ê²ì ì¬ì©í ì ìë¤. ë¹ì ì ëí ë¹ì ì í
ì¤í¸ í¸ì§ê¸° ë´ì DTD íì¼ì ì´ ì ìì ê²ì´ë¤ - ê·¸ê²ì 모ë ììë¤ê³¼ ìì±ë¤ì ëí ì ì²´ìì ì»ê³ ëí´í¸ë¤ ë¿ë§ ìëë¼ ëªëª 주ìë¤ì ë³´ë ê°ì¥ ìì¬ì´ ë°©ë²ì´ë¤. Hibernateë ì¹ì¼ë¡ë¶í° DTD íì¼ì ë¡ëìí¤ì§ ìì§ë§, 먼ì ì´í리ì¼ì´ì
ì classpath ê²½ë¡ë¡ë¶í° ê·¸ê²ì 먼ì 룩ì
í ê²ìì ë
¸í¸íë¼. DTD íì¼ì <literal>hibernate3.jar</literal> ìì í¬í¨ëì´ ìì ë¿ë§ ìëë¼ Hibernate ë°°í¬ë³¸ì <literal>src/</literal> ëë í 리 ìì í¬í¨ëì´ ìë¤."
+
+#: index.docbook:143
+msgid "We will omit the DTD declaration in future examples to shorten the code. It is of course not optional."
+msgstr "ì°ë¦¬ë ì½ë를 ê°ëµí ìí¤ê¸° ìí´ ì¥ëì ìì ìì DTD ì ì¸ì ìëµí ê²ì´ë¤. ê·¸ê²ì ë¬¼ë¡ ìµì
ì´ ìëë¤."
+
+#: index.docbook:148
+msgid "Between the two <literal>hibernate-mapping</literal> tags, include a <literal>class</literal> element. All persistent entity classes (again, there might be dependent classes later on, which are not first-class entities) need such a mapping, to a table in the SQL database:"
+msgstr "ë ê°ì <literal>hibernate-mapping</literal> íê·¸ë¤ ì¬ì´ì <literal>class</literal> ìì를 í¬í¨ìì¼ë¼. 모ë ìì ìí°í° í´ëì¤ë¤(ë¤ìê¸ ì¢
ì í´ëì¤ë¤ì¼ ì ìê³ , ê·¸ê²ì 첫ë²ì§¸-ê¸ì ìí°í°ë¤ì´ ìëë¤)ì SQL ë°ì´í°ë² ì´ì¤ ë´ì í
ì´ë¸ì ëí ê·¸ë° ë§¤íì íìë¡ íë¤:"
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:157
+msgid "So far we told Hibernate how to persist and load object of class <literal>Event</literal> to the table <literal>EVENTS</literal>, each instance represented by a row in that table. Now we continue with a mapping of the unique identifier property to the tables primary key. In addition, as we don't want to care about handling this identifier, we configure Hibernate's identifier generation strategy for a surrogate primary key column:"
+msgstr "ì§ê¸ê¹ì§ ì°ë¦¬ë ê·¸ í
ì´ë¸ ë´ì ìë í íì ìí´ ííë ê°ê°ì ì¸ì¤í´ì¤ì¸, í´ëì¤ì ê°ì²´ë¥¼ ììí ìí¤ê³ ë¡ëìí¤ë ë°©ë²ì Hibernateìê² ìë ¤ì£¼ìë¤. ì´ì ì°ë¦°ë í
ì´ë¸ íë¼ì´ë¨¸ë¦¬ í¤ì ëí ì ì¼ ìë³ì íë¡í¼í° 매íì ê³ì ííë¤. ê²ë¤ê° ì°ë¦¬ë ì´ ìë³ì를 ì²ë¦¬íë ê²ì 주ì를 기ì¸ì´ê³ ì ìíì§ ìì¼ë¯ë¡, ì°ë¦¬ë ëì© í¤ íë¼ì´ë¨¸ë¦¬ í¤ ì»¬ë¼ì ëí Hibernateì ìë³ì ìì± ë°©ë를 구ì±íë¤:"
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:167
+msgid "The <literal>id</literal> element is the declaration of the identifer property, <literal>name=\"id\"</literal> declares the name of the Java property - Hibernate will use the getter and setter methods to access the property. The column attribute tells Hibernate which column of the <literal>EVENTS</literal> table we use for this primary key. The nested <literal>generator</literal> element specifies the identifier generation strategy, in this case we used <literal>native</literal>, which picks the best strategy depending on the configured database (dialect). Hibernate supports database generated, globally unique, as well as application assigned identifiers (or any strategy you have written an extension for)."
+msgstr "<literal>id</literal> ììë ìë³ì íë¡í¼í°ì ì ì¸ì´ê³ , <literal>name=\"id\"</literal>ë Java íë¡í¼í°ì ì´ë¦ì ì ì¸íë¤ - Hibernateë ê·¸ íë¡í¼í°ì ì ê·¼íëë° getter ë° setter ë©ìëë¤ì ì¬ì©í ê²ì´ë¤. column ìì±ì ì°ë¦¬ê° <literal>EVENTS</literal> í
ì´ë¸ì ì´ë 컬ë¼ì ì´ íë¼ì´ë¨¸ë¦¬ í¤ë¡ ì¬ì©íëì§ë¥¼ Hibernateìê² ìë ¤ì¤ë¤. ë´í¬ë <literal>generator</literal> ììë ìë³ì ìì± ë°©ë를 ì§ì íë©°, ì´ ê²½ì°ì ì°ë¦¬ë <literal>increment</literal>를 ì¬ì©íê³ , ê·¸ê²ì ëê° í
ì¤í
(ê³¼ íí 리ì¼ë¤)ì ì ì©í ë§¤ì° ê°ë¨í ë©ëª¨ë¦¬-ë´ ì«ì ì¦ê° ë°©ë²ì´ë¤. Hibernateë ëí ì ìì ì¼ë¡ ì ì¼í ë°ì´í°ë² ì´ì¤ì ìí´ ìì±ë ìë³ì ë¿ë§ ìëë¼ ì´í리ì¼ì´ì
ì ìí´ í ë¹ë ìë³ì(ëë ë¹ì ì´ íì¥ì¼ë¡ ìì±í ì´ë¤ ë°©ë)를 ì§ìíë¤."
+
+#: index.docbook:180
+msgid "Finally we include declarations for the persistent properties of the class in the mapping file. By default, no properties of the class are considered persistent:"
+msgstr "ë§ì§ë§ì¼ë¡ ì°ë¦¬ë 매í íì¼ ììì í´ëì¤ì ìì íë¡í¼í°ë¤ì ëí ì ì¸ë¤ì í¬í¨íë¤. ëí´í¸ë¡, í´ëì¤ì íë¡í¼í°ë¤ì ììì ì¸ ê²ì¼ë¡ ê°ì£¼ëì§ ìëë¤:"
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\" type=\"timestamp\" column=\"EVENT_DATE\"/>\n"
+ " <property name=\"title\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\" type=\"timestamp\" column=\"EVENT_DATE\"/>\n"
+ " <property name=\"title\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:188
+msgid "Just as with the <literal>id</literal> element, the <literal>name</literal> attribute of the <literal>property</literal> element tells Hibernate which getter and setter methods to use. So, in this case, Hibernate will look for <literal>getDate()/setDate()</literal>, as well as <literal>getTitle()/setTitle()</literal>."
+msgstr "<literal>id</literal> ììì ê²½ì°ì²ë¼, <literal>property</literal> ììì <literal>name</literal> ìì±ì ì¬ì©í getter ë° setter ë©ìëë¤ì´ ì´ë ê²ì¸ì§ë¥¼ Hibernateìê² ìë ¤ì¤ë¤. ë°ë¼ì ì´ ê²½ì°ì Hibernateë <literal>getDate()/setDate()</literal> ë¿ë§ ìëë¼ <literal>getTitle()/setTitle()</literal>ì ì°¾ê² ë ê²ì´ë¤."
+
+#: index.docbook:195
+msgid "Why does the <literal>date</literal> property mapping include the <literal>column</literal> attribute, but the <literal>title</literal> doesn't? Without the <literal>column</literal> attribute Hibernate by default uses the property name as the column name. This works fine for <literal>title</literal>. However, <literal>date</literal> is a reserved keyword in most database, so we better map it to a different name."
+msgstr "<literal>date</literal> íë¡í¼í° 매íì <literal>column</literal> ìì±ì í¬í¨íëë°, ì <literal>title</literal>ì <literal>column</literal> ìì±ì í¬í¨íì§ ìëê°? <literal>column</literal> ìì±ì´ ìì ê²½ì° Hibernateë ëí´í¸ë¡ ì»¬ë¼ ì´ë¦ì¼ë¡ì íë¡í¼í° ì´ë¦ì ì¬ì©íë¤. ì´ê²ì ì ëí´ ì ëìíë¤. íì§ë§ <literal>date</literal>ë ëë¶ë¶ì ë°ì´í°ë² ì´ì¤ìì ìì½ë í¤ìëì´ì´ì, ì°ë¦¬ë ê·¸ê²ì ë¤ë¥¸ ì´ë¦ì¼ë¡ ë ì¢ê² 매í ìí¨ë¤."
+
+#: index.docbook:204
+msgid "The next interesting thing is that the <literal>title</literal> mapping also lacks a <literal>type</literal> attribute. The types we declare and use in the mapping files are not, as you might expect, Java data types. They are also not SQL database types. These types are so called <emphasis>Hibernate mapping types</emphasis>, converters which can translate from Java to SQL data types and vice versa. Again, Hibernate will try to determine the correct conversion and mapping type itself if the <literal>type</literal> attribute is not present in the mapping. In some cases this automatic detection (using Reflection on the Java class) might not have the default you expect or need. This is the case with the <literal>date</literal> property. Hibernate can't know if the property (which is of <literal>java.util.Date</literal>) should map to a SQL <literal>date</literal>, <literal>timestamp</literal>, or <literal>time</literal> column. We preserve full date and time information !
by mapping the property with a <literal>timestamp</literal> converter."
+msgstr "ë¤ì í¥ë¯¸ë¡ì´ ì ì <literal>title</literal> 매í ëí <literal>type</literal> ìì±ì ê°ì§ ìëë¤. ì°ë¦¬ê° 매ííì¼ë¤ ììì ì ì¸íê³ ì¬ì©íë íì
ë¤ì ë¹ì ì´ ììíë Java ë°ì´í° íì
ë¤ì´ ìëë¤. ê·¸ê²ë¤ì ëí SQL ë°ì´í°ë² ì´ì¤ íì
ë¤ë ìëë¤. ì´ë¤ íì
ë¤ì ì´ë¥¸ë° <emphasis>Hibernate 매í íì
ë¤</emphasis>, ì¦ Java íì
ë¤ë¡ë¶í° SQL íì
ë¤ë¡ ë³íë ì ìê³ ë°ëë¡ SQL íì
ë¤ë¡ë¶í° Java íì
ë¤ë¡ 매íë ì ìë 컨ë²í°ë¤ì´ë¤. ë¤ìë§í´, <literal>type</literal> ìì±ì´ 매í ìì ì¡´ì¬íì§ ìì ê²½ì° Hibernateë ì íí ë³í ë° ë§¤í íì
ê·¸ ì체를 ê²°ì íë ¤ê³ ìëí ê²ì´ë¤. ëªëª ê²½ì°ë¤ìì (Java í´ëì¤ì ëí Reflectionì ì¬ì©íë) ì´ ìëì ì¸ ê²ì¶ì ë¹ì ì´ ììíê±°ë íìë¡ íë ëí´í¸ë¥¼ ê°ì§ ìì ìë ìë¤. ì´ê²ì <literal>date</literal> íë¡í¼í!
°ë¥¼ ê°ì§ ê²½ì°ì´ë¤. Hibernateë ê·¸ íë¡í¼í°ê° SQL <literal>date</literal> 컬ë¼, <literal>timestamp</literal> ì»¬ë¼ ëë <literal>time</literal> ì»¬ë¼ ì¤ ì´ë ê²ì¼ë¡ 매íëì´ì¼ íëì§ë¥¼ ì ìê° ìë¤. ì°ë¦¬ë <literal>timestamp</literal> 컨ë²í°ë¥¼ ê°ì§ íë¡í¼í°ë¥¼ 매íí¨ì¼ë¡ì¨ ì ì²´ ë ì§ì ìê° ì 보를 ë³´ì¡´íê³ ì¶ë¤ê³ ì ì¸íë¤."
+
+#: index.docbook:220
+msgid "This mapping file should be saved as <literal>Event.hbm.xml</literal>, right in the directory next to the <literal>Event</literal> Java class source file. The naming of mapping files can be arbitrary, however the <literal>hbm.xml</literal> suffix is a convention in the Hibernate developer community. The directory structure should now look like this:"
+msgstr "ë¤ì 매í íì¼ì <literal>Event</literal> Java í´ëì¤ ìì¤ íì¼ê³¼ ê°ì ëë í 리 ìì <literal>Event.hbm.xml</literal>ë¡ì ì ì¥ë ê²ì´ë¤. 매í íì¼ë¤ì ëí ë¤ì´ë°ì ììì ì¼ ì ìì§ë§, ì ë¯¸ì¬ <literal>hbm.xml</literal>ì Hibernate ê°ë°ì ê³µëì²´ ë´ìì 컨벤ì
ì´ ëìë¤. ëë í 리 구조ë ì´ì ë¤ìê³¼ ê°ì ê²ì´ë¤:"
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml]]>"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml]]>"
+
+#: index.docbook:230
+msgid "We continue with the main configuration of Hibernate."
+msgstr "ì°ë¦¬ë Hibernateì ë©ì¸ 구ì±ì ê³ì ííë¤."
+
+#: index.docbook:237
+msgid "Hibernate configuration"
+msgstr "Hibernate 구ì±"
+
+#: index.docbook:239
+msgid "We now have a persistent class and its mapping file in place. It is time to configure Hibernate. Before we do this, we will need a database. HSQL DB, a java-based SQL DBMS, can be downloaded from the HSQL DB website(http://hsqldb.org/). Actually, you only need the <literal>hsqldb.jar</literal> from this download. Place this file in the <literal>lib/</literal> directory of the development folder."
+msgstr "ì°ë¦¬ë ì´ì ì ì í ê³³ì í ê°ì ìì í´ëì¤ì ê·¸ê²ì 매í íì¼ì ê°ê³ ìë¤. Hibernate를 구ì±í ì°¨ë¡ì´ë¤. ì°ë¦¬ê° ì´ê²ì íí기 ì ì, ì°ë¦¬ë ë°ì´í°ë² ì´ì¤ë¥¼ íìë¡ í ê²ì´ë¤. ìë° ê¸°ë°ì ë©ëª¨ë¦¬-ë´ SQL DBMSì¸ HSQL DBë HSQL DB ì¹ ì¬ì´í¸ìì ë´ë ¤ë°ì ì ìë¤. ì¤ì ë¡, ë¹ì ì ì´ ë¤ì´ë¡ëìì ì¤ì§ <literal>hsqldb.jar</literal> ë§ì íìë¡ íë¤. ê°ë° í´ëì <literal>lib/</literal> ëë í 리 ìì ì´ íì¼ì ìì¹ì§ìë¼."
+
+#: index.docbook:247
+msgid "Create a directory called <literal>data</literal> in the root of the development directory - this is where HSQL DB will store its data files. Now start the database by running <literal>java -classpath ../lib/hsqldb.jar org.hsqldb.Server</literal> in this data directory. You can see it start up and bind to a TCP/IP socket, this is where our application will connect later. If you want to start with a fresh database during this tutorial, shutdown HSQL DB (press <literal>CTRL + C</literal> in the window), delete all files in the <literal>data/</literal> directory, and start HSQL DB again."
+msgstr "ê°ë° ëë í 리ì 루í¸ì <literal>data</literal>ë¡ ëª
ëª
ë ëë í 리를 ìì±ìì¼ë¼ - ì´ ëë í 리ë HSQL DBê° ê·¸ê²ì ë°ì´í° íì¼ë¤ì ì ì¥íê² ë ì¥ìì´ë¤. ì´ì ì´ ë°ì´í° ëë í 리ìì <literal>java -classpath ../lib/hsqldb.jar org.hsqldb.Server</literal>를 ì¤íìì¼ì ë°ì´í°ë² ì´ì¤ë¥¼ ìììì¼ë¼. ë¹ì ì ê·¸ê²ì´ ììëê³ ì´ê²ì ì°ë¦¬ì ì´í리ì¼ì´ì
ì´ ëì¤ì ì°ê²°íê² ë ì¥ìì¸, íëì TCP/IP ìì¼ì ë°ì¸ë ëë ê²ì ë³¼ ì ìë¤. ë§ì¼ ì´ íí ë¦¬ì¼ ëìì ë¹ì ì´ ì ë°ì´í°ë² ì´ì¤ë¡ ììíê³ ì ìí ê²½ì°, HSQL DB를 ì
§ë¤ì´ìí¤ê³ (ì¼ëì°ìì <literal>CTRL + C</literal>를 ëë¬ë¼), <literal>data/</literal> ëë í 리 ë´ì ìë 모ë íì¼ë¤ì ìì íê³ ë¤ì HSQL DB를 ììíë¼."
+
+#: index.docbook:257
+msgid "Hibernate is the layer in your application which connects to this database, so it needs connection information. The connections are made through a JDBC connection pool, which we also have to configure. The Hibernate distribution contains several open source JDBC connection pooling tools, but will use the Hibernate built-in connection pool for this tutorial. Note that you have to copy the required library into your classpath and use different connection pooling settings if you want to use a production-quality third party JDBC pooling software."
+msgstr "Hibernateë ë¹ì ì ì´í리ì¼ì´ì
ë´ìì ì´ ë°ì´í°ë² ì´ì¤ì ì°ê²°íë ê³ì¸µì´ê³ , ë°ë¼ì ê·¸ê²ì 커ë¥ì
ì 보를 íìë¡ íë¤. 커ë¥ì
ë¤ì ë§ì°¬ê°ì§ë¡ 구ì±ëì´ì¼ íë íëì JDBC 커ë¥ì
íì íµí´ íí´ì§ë¤. Hibernate ë°°í¬ë³¸ì ëªëª ì¤í ìì¤ JDBC 커ë¥ì
íë§ ë구ë¤ì í¬í¨íê³ ìì§ë§, ì´ íí 리ì¼ììë Hibernateì ìí´ ë¯¸ë¦¬ ë¹ëë 커ë¥ì
íë§ì ì¬ì©í ê²ì´ë¤. ë¹ì ì´ íì ë¼ì´ë¸ë¬ë¦¬ë¥¼ ë¹ì ì classpath ìì ë³µì¬í´ì¼ íê³ ë§ì¼ ë¹ì ì´ ì í-í¹ì§ì ì 3ì JDBC íë§ ìíí¸ì¨ì´ë¥¼ ì¬ì©íê³ ì ìí ê²½ì°ìë ë¤ë¥¸ 커ë¥ì
íë§ ì¤ì ë¤ì ì¬ì©í´ì¼ í¨ì ë
¸í¸íë¼."
+
+#: index.docbook:267
+msgid "For Hibernate's configuration, we can use a simple <literal>hibernate.properties</literal> file, a slightly more sophisticated <literal>hibernate.cfg.xml</literal> file, or even complete programmatic setup. Most users prefer the XML configuration file:"
+msgstr "Hibernateì 구ì±ì ìí´, ì°ë¦¬ë í ê°ì ê°ë¨í <literal>hibernate.properties</literal> íì¼, í ê°ì ì½ê° ë ì¸ë ¨ë <literal>hibernate.cfg.xml</literal> íì¼, ëë ì¬ì§ì´ ìì í íë¡ê·¸ë¨ ìì ì¤ì ì ì¬ì©í ì ìë¤. ëë¶ë¶ì ì¬ì©ìë¤ì XMl êµ¬ì± íì¼ì ì í¸íë¤:"
+
+#: index.docbook:273
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <!-- Database connection settings -->\n"
+ " <property name=\"connection.driver_class\">org.hsqldb.jdbcDriver</property>\n"
+ " <property name=\"connection.url\">jdbc:hsqldb:hsql://localhost</property>\n"
+ " <property name=\"connection.username\">sa</property>\n"
+ " <property name=\"connection.password\"></property>\n"
+ "\n"
+ " <!-- JDBC connection pool (use the built-in) -->\n"
+ " <property name=\"connection.pool_size\">1</property>\n"
+ "\n"
+ " <!-- SQL dialect -->\n"
+ " <property name=\"dialect\">org.hibernate.dialect.HSQLDialect</property>\n"
+ "\n"
+ " <!-- Enable Hibernate's automatic session context management -->\n"
+ " <property name=\"current_session_context_class\">thread</property>\n"
+ "\n"
+ " <!-- Disable the second-level cache -->\n"
+ " <property name=\"cache.provider_class\">org.hibernate.cache.NoCacheProvider</property>\n"
+ "\n"
+ " <!-- Echo all executed SQL to stdout -->\n"
+ " <property name=\"show_sql\">true</property>\n"
+ "\n"
+ " <!-- Drop and re-create the database schema on startup -->\n"
+ " <property name=\"hbm2ddl.auto\">create</property>\n"
+ "\n"
+ " <mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <!-- Database connection settings -->\n"
+ " <property name=\"connection.driver_class\">org.hsqldb.jdbcDriver</property>\n"
+ " <property name=\"connection.url\">jdbc:hsqldb:hsql://localhost</property>\n"
+ " <property name=\"connection.username\">sa</property>\n"
+ " <property name=\"connection.password\"></property>\n"
+ "\n"
+ " <!-- JDBC connection pool (use the built-in) -->\n"
+ " <property name=\"connection.pool_size\">1</property>\n"
+ "\n"
+ " <!-- SQL dialect -->\n"
+ " <property name=\"dialect\">org.hibernate.dialect.HSQLDialect</property>\n"
+ "\n"
+ " <!-- Enable Hibernate's automatic session context management -->\n"
+ " <property name=\"current_session_context_class\">thread</property>\n"
+ "\n"
+ " <!-- Disable the second-level cache -->\n"
+ " <property name=\"cache.provider_class\">org.hibernate.cache.NoCacheProvider</property>\n"
+ "\n"
+ " <!-- Echo all executed SQL to stdout -->\n"
+ " <property name=\"show_sql\">true</property>\n"
+ "\n"
+ " <!-- Drop and re-create the database schema on startup -->\n"
+ " <property name=\"hbm2ddl.auto\">create</property>\n"
+ "\n"
+ " <mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+
+#: index.docbook:275
+msgid "Note that this XML configuration uses a different DTD. We configure Hibernate's <literal>SessionFactory</literal> - a global factory responsible for a particular database. If you have several databases, use several <literal><session-factory></literal> configurations, usually in several configuration files (for easier startup)."
+msgstr "ì´ XML 구ì±ì´ ë¤ë¥¸ DTD를 ì¬ì©í¨ì ë
¸í¸íë¼. ì°ë¦¬ë Hibernateì <literal>SessionFactory</literal> -í¹ì ë°ì´í°ë² ì´ì¤ì ëí´ ì±
ìì´ ìë ì ì í©í 리-를 구ì±íë¤. ë§ì¼ ë¹ì ì´ ì¬ë¬ ë°ì´í°ë² ì´ì¤ë¤ì ê°ê³ ìë¤ë©´, (ë³´ë¤ ì¬ì´ ììì ìí´) ëª ê°ì êµ¬ì± íì¼ë¤ ìì ì¬ë¬ ê°ì <literal><session-factory></literal> 구ì±ë¤ì ì¬ì©íë¼."
+
+#: index.docbook:283
+msgid "The first four <literal>property</literal> elements contain the necessary configuration for the JDBC connection. The dialect <literal>property</literal> element specifies the particular SQL variant Hibernate generates. Hibernate's automatic session management for persistence contexts will come in handy as you will soon see. The <literal>hbm2ddl.auto</literal> option turns on automatic generation of database schemas - directly into the database. This can of course also be turned off (by removing the config option) or redirected to a file with the help of the <literal>SchemaExport</literal> Ant task. Finally, we add the mapping file(s) for persistent classes to the configuration."
+msgstr "ì²ì ë¤ ê°ì <literal>property</literal> ììë¤ì JDBC 커ë¥ì
ì ìí íì 구ì±ì í¬í¨íë¤. dialect <literal>property</literal> ììë Hibernateê° ë°ììí¤ë í¹ë³í SQL ì´í(ç°å½¢)ì ì§ì íë¤. <literal>hbm2ddl.auto</literal> ìµì
ì -ì§ì ë°ì´í°ë² ì´ì¤ ìì¼ë¡- ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ì ìëì ì¸ ìì±ì íì±í ìí¨ë¤. ë¬¼ë¡ ì´ê²ì (config ìµì
ì ì ê±°í¨ì¼ë¡ì¨) ë¹íì±í ìí¬ ì ìê±°ë <literal>SchemaExport</literal> Ant íì¤í¬ì ëìì¼ë¡ íì¼ë¡ 리ë¤ì´ë í¸ ë ì ìë¤. ë§ì§ë§ì¼ë¡ ì°ë¦¬ë ìì í´ëì¤ë¤ì ìí 매í íì¼(ë¤)ì ì¶ê°ìí¨ë¤."
+
+#: index.docbook:296
+msgid "Copy this file into the source directory, so it will end up in the root of the classpath. Hibernate automatically looks for a file called <literal>hibernate.cfg.xml</literal> in the root of the classpath, on startup."
+msgstr "ì´ íì¼ì ìì¤ ëë í 리 ìì¼ë¡ ë³µì¬íê³ , ë°ë¼ì ê·¸ê²ì classpathì 루í¸ìì ëë ê²ì´ë¤. Hibernateë ìì ìì classpathì 루í¸ìì <literal>hibernate.cfg.xml</literal>ë¡ ëª
ëª
ë íì¼ì ìëì ì¼ë¡ ì°¾ëë¤."
+
+#: index.docbook:305
+msgid "Building with Ant"
+msgstr "Antë¡ ë¹ëí기"
+
+#: index.docbook:307
+msgid "We'll now build the tutorial with Ant. You will need to have Ant installed - get it from the <ulink url=\"http://ant.apache.org/bindownload.cgi\">Ant download page</ulink>. How to install Ant will not be covered here. Please refer to the <ulink url=\"http://ant.apache.org/manual/index.html\">Ant manual</ulink>. After you have installed Ant, we can start to create the buildfile. It will be called <literal>build.xml</literal> and placed directly in the development directory."
+msgstr "ì°ë¦¬ë ì´ì Antë¡ íí 리ì¼ì ë¹ëí ê²ì´ë¤. ë¹ì ì Ant를 ì¤ì¹í íìê° ìì ê²ì´ë¤ - <ulink url=\"http://ant.apache.org/bindownload.cgi\">Ant ë´ë ¤ë°ê¸° íì´ì§</ulink>ìì Ant를 ì»ì´ë¼. Ant를 ì¤ì¹íë ë°©ë²ì ì¬ê¸°ì ë¤ë£¨ì§ ìì ê²ì´ë¤. <ulink url=\"http://ant.apache.org/manual/index.html\">Ant 매ë´ì¼</ulink>ì 참조í길 ë°ëë¤. ë¹ì ì´ Ant를 ì¤ì¹í íì, ì°ë¦¬ë ë¹ëíì¼ ìì±ì ììí ì ìë¤. ê·¸ê²ì <literal>build.xml</literal>ë¡ ëª
ëª
ëê³ ê°ë° ëë í 리 ìì ì§ì ìì¹ë ê²ì´ë¤."
+
+#: index.docbook:316
+msgid "A basic build file looks like this:"
+msgstr "기본 ë¹ë íì¼ì ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:320
+msgid ""
+ "<![CDATA[<project name=\"hibernate-tutorial\" default=\"compile\">\n"
+ "\n"
+ " <property name=\"sourcedir\" value=\"${basedir}/src\"/>\n"
+ " <property name=\"targetdir\" value=\"${basedir}/bin\"/>\n"
+ " <property name=\"librarydir\" value=\"${basedir}/lib\"/>\n"
+ "\n"
+ " <path id=\"libraries\">\n"
+ " <fileset dir=\"${librarydir}\">\n"
+ " <include name=\"*.jar\"/>\n"
+ " </fileset>\n"
+ " </path>\n"
+ "\n"
+ " <target name=\"clean\">\n"
+ " <delete dir=\"${targetdir}\"/>\n"
+ " <mkdir dir=\"${targetdir}\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"compile\" depends=\"clean, copy-resources\">\n"
+ " <javac srcdir=\"${sourcedir}\"\n"
+ " destdir=\"${targetdir}\"\n"
+ " classpathref=\"libraries\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"copy-resources\">\n"
+ " <copy todir=\"${targetdir}\">\n"
+ " <fileset dir=\"${sourcedir}\">\n"
+ " <exclude name=\"**/*.java\"/>\n"
+ " </fileset>\n"
+ " </copy>\n"
+ " </target>\n"
+ "\n"
+ "</project>]]>"
+msgstr ""
+ "<![CDATA[<project name=\"hibernate-tutorial\" default=\"compile\">\n"
+ "\n"
+ " <property name=\"sourcedir\" value=\"${basedir}/src\"/>\n"
+ " <property name=\"targetdir\" value=\"${basedir}/bin\"/>\n"
+ " <property name=\"librarydir\" value=\"${basedir}/lib\"/>\n"
+ "\n"
+ " <path id=\"libraries\">\n"
+ " <fileset dir=\"${librarydir}\">\n"
+ " <include name=\"*.jar\"/>\n"
+ " </fileset>\n"
+ " </path>\n"
+ "\n"
+ " <target name=\"clean\">\n"
+ " <delete dir=\"${targetdir}\"/>\n"
+ " <mkdir dir=\"${targetdir}\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"compile\" depends=\"clean, copy-resources\">\n"
+ " <javac srcdir=\"${sourcedir}\"\n"
+ " destdir=\"${targetdir}\"\n"
+ " classpathref=\"libraries\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"copy-resources\">\n"
+ " <copy todir=\"${targetdir}\">\n"
+ " <fileset dir=\"${sourcedir}\">\n"
+ " <exclude name=\"**/*.java\"/>\n"
+ " </fileset>\n"
+ " </copy>\n"
+ " </target>\n"
+ "\n"
+ "</project>]]>"
+
+#: index.docbook:322
+msgid "This will tell Ant to add all files in the lib directory ending with <literal>.jar</literal> to the classpath used for compilation. It will also copy all non-Java source files to the target directory, e.g. configuration and Hibernate mapping files. If you now run Ant, you should get this output:"
+msgstr "ì´ê²ì <literal>.jar</literal>ë¡ ëëë lib ëë í 리 ë´ì ìë 모ë íì¼ë¤ì ì»´íì¼ì ì¬ì©ëë classpathì ì¶ê°íëë¡ Antìê² ìë ¤ì¤ ê²ì´ë¤. ê·¸ê²ì ëí 모ë ë¹-Java ìì¤ íì¼ë¤ì ëì ëë í ë¦¬ë¡ ë³µì¬í ê²ì´ë¤. ì를 ë¤ë©´, êµ¬ì± ë° Hibernate 매í íì¼ë¤. ë§ì¼ ë¹ì ì´ Ant를 ì´ì ì¤íí ê²½ì°, ë¹ì ì ë¤ì ì¶ë ¥ì ì»ê² ë ê²ì´ë¤:"
+
+#: index.docbook:329
+msgid ""
+ "<![CDATA[C:\\hibernateTutorial\\>ant\n"
+ "Buildfile: build.xml\n"
+ "\n"
+ "copy-resources:\n"
+ " [copy] Copying 2 files to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "compile:\n"
+ " [javac] Compiling 1 source file to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "BUILD SUCCESSFUL\n"
+ "Total time: 1 second ]]>"
+msgstr ""
+ "<![CDATA[C:\\hibernateTutorial\\>ant\n"
+ "Buildfile: build.xml\n"
+ "\n"
+ "copy-resources:\n"
+ " [copy] Copying 2 files to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "compile:\n"
+ " [javac] Compiling 1 source file to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "BUILD SUCCESSFUL\n"
+ "Total time: 1 second ]]>"
+
+#: index.docbook:334
+msgid "Startup and helpers"
+msgstr "ììê³¼ helperë¤"
+
+#: index.docbook:336
+msgid "It's time to load and store some <literal>Event</literal> objects, but first we have to complete the setup with some infrastructure code. We have to startup Hibernate. This startup includes building a global <literal>SessionFactory</literal> object and to store it somewhere for easy access in application code. A <literal>SessionFactory</literal> can open up new <literal>Session</literal>'s. A <literal>Session</literal> represents a single-threaded unit of work, the <literal>SessionFactory</literal> is a thread-safe global object, instantiated once."
+msgstr "ëªëª <literal>Event</literal> ê°ì²´ë¤ì ë¡ëìí¤ê³ ì ì¥í ì°¨ë¡ì´ì§ë§, 먼ì ì°ë¦¬ë ì´ë¤ ì¸íë¼ì¤í¸ëì² ì½ëë¡ ì¤ì ì ìë£í´ì¼ íë¤. ì°ë¦¬ë Hibernate를 ììí´ì¼ íë¤. ì´ ììì ì ì <literal>SessionFactory</literal> ê°ì²´ë¥¼ ë¹ëíê³ ì´í리ì¼ì´ì
ë´ìì ì©ì´í ì ê·¼ì ìí´ ê·¸ê²ì ì´ë¤ ê³³ì ì ì¥íë ê²ì í¬í¨íë¤. <literal>SessionFactory</literal>ë ìë¡ì´ <literal>Session</literal>ë¤ì ì´ ì ìë¤. <literal>Session</literal>ì ìì
ì ë¨ì¼-ì°ë ë ë¨ì를 íííë©°, <literal>SessionFactory</literal>ë íë² ì´ê¸°í ëë íëì thread-safe ì ì ê°ì²´ì´ë¤."
+
+#: index.docbook:346
+msgid "We'll create a <literal>HibernateUtil</literal> helper class which takes care of startup and makes accessing a <literal>SessionFactory</literal> convenient. Let's have a look at the implementation:"
+msgstr "ì°ë¦¬ë ììì ì²ë¦¬íê³ <literal>Session</literal> ì²ë¦¬ë¥¼ í¸ë¦¬íê² í´ì£¼ë <literal>HibernateUtil</literal> helper í´ëì¤ë¥¼ ìì±ìí¬ ê²ì´ë¤. ì´ë¥¸ë° <emphasis>ThreadLocal Session</emphasis> í¨í´ì´ ì¬ê¸°ì ì ì©íë©°, ì°ë¦¬ë íì¬ì ìì
ë¨ì를 íì¬ì ì°ë ëì ì°ê´ì§ì ì ì§íë¤. 구íì ì´í´ë³´ì:"
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[package util;\n"
+ "\n"
+ "import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ "\n"
+ " private static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Create the SessionFactory from hibernate.cfg.xml\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " System.err.println(\"Initial SessionFactory creation failed.\" + ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static SessionFactory getSessionFactory() {\n"
+ " return sessionFactory;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package util;\n"
+ "\n"
+ "import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ "\n"
+ " private static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Create the SessionFactory from hibernate.cfg.xml\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " System.err.println(\"Initial SessionFactory creation failed.\" + ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static SessionFactory getSessionFactory() {\n"
+ " return sessionFactory;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:354
+msgid "This class does not only produce the global <literal>SessionFactory</literal> in its static initializer (called once by the JVM when the class is loaded), but also hides the fact that it uses a static singleton. It might as well lookup the <literal>SessionFactory</literal> from JNDI in an application server."
+msgstr "ì´ í´ëì¤ë (í´ëì¤ê° ë¡ëë ë JVMì ìí´ íë² í¸ì¶ëë) ê·¸ê²ì static ì´ê¸°ì ë´ì ì ì <literal>SessionFactory</literal>를 ì°ì¶í ë¿ë§ ìëë¼ ëí íì¬ ì°ë ëì ëí <literal>Session</literal>ì ìì íë <literal>ThreadLocal</literal> ë³ì를 ê°ëë¤. ë¹ì ì´ <literal>HibernateUtil.getCurrentSession()</literal>ì í¸ì¶íë ìì ìë 문ì ê° ìì¼ë©°, ê·¸ê²ì íì ëì¼ ì°ë ë ë´ì ëì¼í Hibernate ìì
ë¨ì를 ë°íí ê²ì´ë¤. <literal>HibernateUtil.closeSession()</literal>ì ëí í¸ì¶ì ì°ë ëì íì¬ ì°ê´ëì´ ìë ìì
ë¨ì를 ì¢
ë£ìí¨ë¤."
+
+#: index.docbook:361
+msgid "If you give the <literal>SessionFactory</literal> a name in your configuration file, Hibernate will in fact try to bind it to JNDI after it has been built. To avoid this code completely you could also use JMX deployment and let the JMX-capable container instantiate and bind a <literal>HibernateService</literal> to JNDI. These advanced options are discussed in the Hibernate reference documentation."
+msgstr "ë¹ì ì´ ì´ helper를 ì¬ì©í기 ì ì thread-local ë³ìë¤ì ëí Java ê°ë
ì íì¤í ì´í´íëë¡ íë¼. ë³´ë¤ ê°ë ¥í <literal>HibernateUtil</literal> helperë http://caveatemptor.hibernate.org/ì ìë <literal>CaveatEmptor</literal> ë¿ë§ ìëë¼ \"Java Persistence with Hibernate\" ì±
ìì ì°¾ì ì ìë¤. ë¹ì ì´ J2EE ì´í리ì¼ì´ì
ìë² ë´ì Hibernate를 ë°°ì¹í ê²½ì°ì ì´ í´ëì¤ë íìì ì´ì§ ìë¤: íëì <literal>Session</literal>ì íì¬ì JTA í¸ëìì
ì ìëì ì¼ë¡ ë°ì¸ë ë ê²ì´ê³ ë¹ì ì JNDI를 íµí´ <literal>SessionFactory</literal>를 룩ì
í ì ìë¤. ë§ì¼ ë¹ì ì´ JBoss AS를 ì¬ì©í ê²½ì°, Hibernateë ê´ë¦¬ëë ìì¤í
ìë¹ì¤ë¡ì ë°°ì¹ë ì ìê³ <literal>SessionFactory</literal>를 JNDI ì´ë¦ì ìëì ì¼ë¡ ë°ì¸ëìí¬ ì ìì ê²ì´ë¤."
+
+#: index.docbook:370
+msgid "Place <literal>HibernateUtil.java</literal> in the development source directory, in a package next to <literal>events</literal>:"
+msgstr "ê°ë° ìì¤ ëë í 리 ìì <literal>HibernateUtil.java</literal> 를 ìì¹ì§ì°ê³ , ë¤ìì¼ë¡ <literal>Event.java</literal>를 ìì¹ì§ìë¼:"
+
+#: index.docbook:375
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml\n"
+ " +util\n"
+ " HibernateUtil.java\n"
+ " hibernate.cfg.xml\n"
+ "+data\n"
+ "build.xml]]>"
+msgstr ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml\n"
+ " +util\n"
+ " HibernateUtil.java\n"
+ " hibernate.cfg.xml\n"
+ "+data\n"
+ "build.xml]]>"
+
+#: index.docbook:377
+msgid "This should again compile without problems. We finally need to configure a logging system - Hibernate uses commons logging and leaves you the choice between Log4j and JDK 1.4 logging. Most developers prefer Log4j: copy <literal>log4j.properties</literal> from the Hibernate distribution (it's in the <literal>etc/</literal> directory) to your <literal>src</literal> directory, next to <literal>hibernate.cfg.xml</literal>. Have a look at the example configuration and change the settings if you like to have more verbose output. By default, only Hibernate startup message are shown on stdout."
+msgstr "ì´ê²ì 문ì ìì´ ë¤ì ì»´íì¼ ë ê²ì´ë¤. ì°ë¦¬ë ë§ì§ë§ì¼ë¡ ë¡ê¹
ìì¤í
ì 구ì±í íìê° ìë¤ - Hibernateë commons logging를 ì¬ì©íê³ Log4jì JDK 1.4 ì¬ì´ì ì íì ë¹ì ì 몫ì¼ë¡ ë¨ê²¨ëë¤. ëë¶ë¶ì ê°ë°ìë¤ì Log4j를 ì í¸íë¤: Hibernate ë°°í¬ë³¸ì ìë <literal>log4j.properties</literal>(ì´ê²ì ëë í 리 <literal>etc/</literal> ë´ì ìë¤)를 <literal>src</literal> ëë í ë¦¬ë¡ ë³µì¬íê³ , ë¤ìì¼ë¡ <literal>hibernate.cfg.xml</literal>ì ë³µì¬íë¼. ìì 구ì±ì ì´í´ë³´ê³ ë¹ì ì´ ë ë§ì verbose ì¶ë ¥ì ìí ê²½ì°ì ì¤ì ë¤ì ë³ê²½íë¼. ëí´í¸ë¡ Hibernate ìì ë©ìì§ë stdout ìì ë³´ì¬ì§ë¤."
+
+#: index.docbook:387
+msgid "The tutorial infrastructure is complete - and we are ready to do some real work with Hibernate."
+msgstr "íí ë¦¬ì¼ ì¸íë¼ì¤í¸ëì²ë ìì íë¤ - ê·¸ë¦¬ê³ ì°ë¦¬ë Hibernateë¡ ì´ë¤ ì¤ì ìì
ì íí ì¤ë¹ê° ëì´ ìë¤."
+
+#: index.docbook:395
+msgid "Loading and storing objects"
+msgstr "ê°ì²´ ë¡ë©ê³¼ ê°ì²´ ì ì¥"
+
+#: index.docbook:397
+msgid "Finally, we can use Hibernate to load and store objects. We write an <literal>EventManager</literal> class with a <literal>main()</literal> method:"
+msgstr "ë§ì§ë§ì¼ë¡ ì°ë¦¬ë ê°ì²´ë¤ì ë¡ëìí¤ê³ ì ì¥íëë° Hibernate를 ì¬ì©í ì ìë¤. ì°ë¦¬ë í ê°ì <literal>main()</literal> ë©ìë를 ê°ì§ í ê°ì <literal>EventManager</literal> í´ëì¤ë¥¼ ìì±íë¤:"
+
+#: index.docbook:402
+msgid ""
+ "<![CDATA[package events;\n"
+ "import org.hibernate.Session;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "import util.HibernateUtil;\n"
+ "\n"
+ "public class EventManager {\n"
+ "\n"
+ " public static void main(String[] args) {\n"
+ " EventManager mgr = new EventManager();\n"
+ "\n"
+ " if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " }\n"
+ "\n"
+ " HibernateUtil.getSessionFactory().close();\n"
+ " }\n"
+ "\n"
+ " private void createAndStoreEvent(String title, Date theDate) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " session.save(theEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package events;\n"
+ "import org.hibernate.Session;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "import util.HibernateUtil;\n"
+ "\n"
+ "public class EventManager {\n"
+ "\n"
+ " public static void main(String[] args) {\n"
+ " EventManager mgr = new EventManager();\n"
+ "\n"
+ " if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " }\n"
+ "\n"
+ " HibernateUtil.getSessionFactory().close();\n"
+ " }\n"
+ "\n"
+ " private void createAndStoreEvent(String title, Date theDate) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " session.save(theEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:404
+msgid "We create a new <literal>Event</literal> object, and hand it over to Hibernate. Hibernate now takes care of the SQL and executes <literal>INSERT</literal>s on the database. Let's have a look at the <literal>Session</literal> and <literal>Transaction</literal>-handling code before we run this."
+msgstr "ì°ë¦¬ë í ê°ì ìë¡ì´ <literal>Event</literal> ê°ì²´ë¥¼ ìì±ìí¤ê³ , ê·¸ê²ì Hibernateìê² ê±´ë¤ì¤ë¤. Hibernateë ì´ì SQLì ì²ë¦¬íê³ ë°ì´í°ë² ì´ì¤ ììì <literal>INSERT</literal>ë¤ì ì¤íìí¨ë¤. -ì°ë¦¬ê° ì´ê²ì ì¤íí기 ì ì ì½ë를 ì²ë¦¬íë- <literal>Session</literal>ê³¼ <literal>Transaction</literal>ì ì´í´ë³´ì."
+
+#: index.docbook:411
+msgid "A <literal>Session</literal> is a single unit of work. For now we'll keep things simple and assume a one-to-one granularity between a Hibernate <literal>Session</literal> and a database transaction. To shield our code from the actual underlying transaction system (in this case plain JDBC, but it could also run with JTA) we use the <literal>Transaction</literal> API that is available on the Hibernate <literal>Session</literal>."
+msgstr "<literal>Session</literal>ì í ê°ì ìì
ë¨ìì´ë¤. ì§ê¸ë¶í° ì°ë¦¬ë ë¨ì¨í¨ì ì ì§í ê²ì´ê³ Hibernate <literal>Session</literal>ê³¼ ë°ì´í°ë² ì´ì¤ í¸ëìì
ì¬ì´ì ì¼-ë-ì¼ ê³¼ë¦½í(granularity)ì ê°ì í ê²ì´ë¤. ì¤ì ê¸°ë° í¸ëìì
ìì¤í
ì¼ë¡ë¶í° ì°ë¦¬ì ìì¤ë¥¼ ìíìí¤ê¸° ìí´(ì´ ê²½ì° íµìì JDBCì´ì§ë§, ê·¸ê²ì ëí JTAìë ì¤íëë¤) ì°ë¦¬ë Hibernate <literal>Session</literal> ììì ì´ì© ê°ë¥í <literal>Transaction</literal> API를 ì¬ì©íë¤."
+
+#: index.docbook:419
+msgid "What does <literal>sessionFactory.getCurrentSession()</literal> do? First, you can call it as many times and anywhere you like, once you get hold of your <literal>SessionFactory</literal> (easy thanks to <literal>HibernateUtil</literal>). The <literal>getCurrentSession()</literal> method always returns the \"current\" unit of work. Remember that we switched the configuration option for this mechanism to \"thread\" in <literal>hibernate.cfg.xml</literal>? Hence, the current unit of work is bound to the current Java thread that executes our application. However, this is not the full picture, you also have to consider scope, when a unit of work begins and when it ends."
+msgstr "<literal>sessionFactory.getCurrentSession()</literal>ì 무ìì ííëê°? 먼ì ë¹ì ì ë¹ì ì´ (<literal>HibernateUtil</literal> ëë¶ì ì½ê²) <literal>SessionFactory</literal>ì ë¹ì ì´ ìì íê³ ìë¤ë©´, ìíë ë§í¼ ì´ëìë ì¬ë¬ë² ê·¸ê²ì í¸ì¶í ì ìë¤. <literal>getCurrentSession()</literal> ë©ìëë íì \"íì¬ì\" ìì
ë¨ì를 ë°ííë¤. ì°ë¦¬ê° <literal>hibernate.cfg.xml</literal> ë´ìì ì´ ë§¤ì»¤ëì¦ì ëí êµ¬ì± ìµì
ì \"thread\"ë¡ ì íìì¼°ìì 기ìµíëê°? ê·¸ë¬ë¯ë¡ ìì
ì íì¬ ë¨ìë ì°ë¦¬ì ì´í리ì¼ì´ì
ì ì¤íìí¤ë íì¬ ìë° ì°ë ëì ë¬¶ì¬ ìë¤. íì§ë§ ì´ê²ì ì ì²´ ê·¸ë¦¼ì´ ìëë©°, ë¹ì ì ëí scope(ìì), ìì
ë¨ìê° ììë ëì ìì
ë¨ìê° ì¢
ë£ë ë를 ê³ ë ¤í´ì¼ íë¤."
+
+#: index.docbook:430
+msgid "A <literal>Session</literal> begins when it is first needed, when the first call to <literal>getCurrentSession()</literal> is made. It is then bound by Hibernate to the current thread. When the transaction ends, either through commit or rollback, Hibernate automatically unbinds the <literal>Session</literal> from the thread and closes it for you. If you call <literal>getCurrentSession()</literal> again, you get a new <literal>Session</literal> and can start a new unit of work. This <emphasis>thread-bound</emphasis> programming model is the most popular way of using Hibernate, as it allows flexible layering of your code (transaction demarcation code can be separated from data access code, we'll do this later in this tutorial)."
+msgstr "<literal>Session</literal>ì ê·¸ê²ì´ ì²ìì¼ë¡ íìë¡ ëê³ <literal>getCurrentSession()</literal>ì ëí 첫 ë²ì§¸ í¸ì¶ì´ ì´ë£¨ì´ì§ ë ììëë¤. ê·¸ë ê·¸ê²ì Hibernateì ìí´ íì¬ì ì°ë ëì ë°ì¸ë ëë¤. 커ë°ëë 롤백ëë ê°ì í¸ëìì
ì´ ì¢
ë£ëê³ , Hibernateê° ìëì ì¼ë¡ ê·¸ ì°ë ëë¡ë¶í° <literal>Session</literal>ì ë°ì¸ë í´ì ìí¤ê³ ë¹ì ì ìí´ ì¸ì
ì ë«ëë¤. ë§ì¼ ë¹ì ì´ <literal>getCurrentSession()</literal>ì ë¤ì í¸ì¶íë¤ë©´, ë¹ì ì ìë¡ì´ <literal>Session</literal>ì ì»ê³ ìë¡ì´ ìì
ë¨ì를 ììí ì ìë¤. ì´ <emphasis>thread-bound</emphasis> íë¡ê·¸ëë° ëª¨íì Hibernate를 ì¬ì©íë ê°ì¥ ëì¤ì ì¸ ë°©ë²ì´ë¤. ìëíë©´ ê·¸ê²ì ë¹ì ì ì½ë를 ì ì°íê² ê³ì¸µíìí¤ë ê²ì íì©í´ì£¼ê¸° ë문ì´ë¤(í¸ëìì
ê²½ê³ ë¶í ì½ëë ë°ì´í¸ ì ê·¼ ì½ëì 구ë³ì§ìì§ ì ìëë°, ì°ë!
¦¬ë ì´ íí 리ì¼ì ë·ë¶ë¶ìì ì´ê²ì ë¤ë£° ê²ì´ë¤.)."
+
+#: index.docbook:441
+msgid "Related to the unit of work scope, should the Hibernate <literal>Session</literal> be used to execute one or several database operations? The above example uses one <literal>Session</literal> for one operation. This is pure coincidence, the example is just not complex enough to show any other approach. The scope of a Hibernate <literal>Session</literal> is flexible but you should never design your application to use a new Hibernate <literal>Session</literal> for <emphasis>every</emphasis> database operation. So even if you see it a few more times in the following (very trivial) examples, consider <emphasis>session-per-operation</emphasis> an anti-pattern. A real (web) application is shown later in this tutorial."
+msgstr "ìì
ììì ë¨ìì ê´ë ¨íì¬, Hibernate <literal>Session</literal>ì íë ëë ì¬ë¬ ê°ì ë°ì´í°ë² ì´ì¤ ì¤í¼ë ì´ì
ë¤ì ì¤íìí¤ëë° ì¬ì©ë ì ìëê°? ìì ìì ë íëì ì¤í¼ë ì´ì
ì í ê°ì <literal>Session</literal>ì ì¬ì©íê³ ìë¤. ì´ê²ì ìì§í ì¼ì¹ì´ë©°, ìì ë ì´ë¤ ë¤ë¥¸ ì ê·¼ë²ì ë³´ì¬ì£¼ê¸°ìë 충ë¶í ë³µì¡íì§ ìë¤. Hibernate <literal>Session</literal>ì scope(ìì)ì ì ì°íì§ë§ ë¹ì ì ê²°ì½ <emphasis>모ë </emphasis> ë°ì´í°ë² ì´ì¤ ì¤í¼ë ì´ì
ê°ê°ì ëí´ ìë¡ì´ Hibernate <literal>Session</literal>ì ì¬ì©íëë¡ ë¹ì ì ì´í리ì¼ì´ì
ì ì¤ê³í ì ìë¤. ë°ë¼ì ì¬ì§ì´ ë¹ì ì´ ë¤ìì (ë§¤ì° ì¬ìí) ìì ë¤ìì ì¬ë¬ ë² ê·¸ê²ì ë³¼ ì ììì§ë¼ë <emphasis>session-per-operation</emphasis>ì íëì ìí°-í¨í´ì¼ë¡ ê°ì£¼íë¼. ì¤ì (ì¹) ì´í리ì¼ì´ì
ì ì´ íí 리ì¼ì ë!
·ë¶ë¶ì ë³´ì¬ì§ë¤."
+
+#: index.docbook:452
+msgid "Have a look at <xref linkend=\"transactions\"/> for more information about transaction handling and demarcation. We also skipped any error handling and rollback in the previous example."
+msgstr "í¸ëìì
í¸ë¤ë§ê³¼ ê²½ê³êµ¬ë¶ì ëí ì¶ê° ì ë³´ë <xref linkend=\"transactions\"/>ì ì´í´ë³´ë¼. ì°ë¦¬ë ëí ìì ìì ìì ììì ì¤ë¥ ì²ë¦¬ì 롤백ì ìëµíë¤."
+
+#: index.docbook:458
+msgid "To run this first routine we have to add a callable target to the Ant build file:"
+msgstr "ì´ ì²« ë²ì§¸ 루í´ì ì¤íí기 ìí´ì ì°ë¦¬ë í¸ì¶ ê°ë¥í ëìì Ant ë¹ë íì¼ì ì¶ê°í´ì¼ íë¤:"
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[<target name=\"run\" depends=\"compile\">\n"
+ " <java fork=\"true\" classname=\"events.EventManager\" classpathref=\"libraries\">\n"
+ " <classpath path=\"${targetdir}\"/>\n"
+ " <arg value=\"${action}\"/>\n"
+ " </java>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"run\" depends=\"compile\">\n"
+ " <java fork=\"true\" classname=\"events.EventManager\" classpathref=\"libraries\">\n"
+ " <classpath path=\"${targetdir}\"/>\n"
+ " <arg value=\"${action}\"/>\n"
+ " </java>\n"
+ "</target>]]>"
+
+#: index.docbook:464
+msgid "The value of the <literal>action</literal> argument is set on the command line when calling the target:"
+msgstr "<literal>action</literal> ìê·ë¨¼í¸ì ê°ì ëìì í¸ì¶í ë ëª
ë ¹ ë¼ì¸ ììì ì¤ì ëë¤:"
+
+#: index.docbook:469
+msgid "<![CDATA[C:\\hibernateTutorial\\>ant run -Daction=store]]>"
+msgstr "<![CDATA[C:\\hibernateTutorial\\>ant run -Daction=store]]>"
+
+#: index.docbook:471
+msgid "You should see, after compilation, Hibernate starting up and, depending on your configuration, lots of log output. At the end you will find the following line:"
+msgstr "ì»´íì¼, 구ì±ì ë°ë¥¸ Hibernate ìì íì, ë¹ì ì ë§ì ë¡ê·¸ ì¶ë ¥ì ë³´ê² ë ê²ì´ë¤. ëìì ë¹ì ì ë¤ì ë¼ì¸ì ë°ê²¬í ê²ì´ë¤:"
+
+#: index.docbook:476
+msgid "<![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]>"
+msgstr "<![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]>"
+
+#: index.docbook:478
+msgid "This is the <literal>INSERT</literal> executed by Hibernate, the question marks represent JDBC bind parameters. To see the values bound as arguments, or to reduce the verbosity of the log, check your <literal>log4j.properties</literal>."
+msgstr "ì´ê²ì Hibernateì ìí´ ì¤íë <literal>INSERT</literal>ì´ê³ , 물ìí 기í¸ë JDBC ë°ì¸ë íë¼ë¯¸í°ë¤ì ëíë¸ë¤. ìê·ë¨¼í¸ë¡ì ë°ì¸ë ë ê°ë¤ì ë³´ê±°ë ì¥í©í ë¡ê·¸ë¥¼ ì¤ì´ë ¤ë©´ ë¹ì ì <literal>log4j.properties</literal>를 ì²´í¬íë¼."
+
+#: index.docbook:484
+msgid "Now we'd like to list stored events as well, so we add an option to the main method:"
+msgstr "ì´ì ì°ë¦¬ë ë§ì°¬ê°ì§ë¡ ì ì¥ë ì´ë²¤í¸ë¤ì ì´ê±°íê³ ì ìíë©°, ì°ë¦¬ë main ë©ìëì í ê°ì ìµì
ì ì¶ê°íë¤:"
+
+#: index.docbook:488
+msgid ""
+ "<![CDATA[if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ "}\n"
+ "else if (args[0].equals(\"list\")) {\n"
+ " List events = mgr.listEvents();\n"
+ " for (int i = 0; i < events.size(); i++) {\n"
+ " Event theEvent = (Event) events.get(i);\n"
+ " System.out.println(\"Event: \" + theEvent.getTitle() +\n"
+ " \" Time: \" + theEvent.getDate());\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ "}\n"
+ "else if (args[0].equals(\"list\")) {\n"
+ " List events = mgr.listEvents();\n"
+ " for (int i = 0; i < events.size(); i++) {\n"
+ " Event theEvent = (Event) events.get(i);\n"
+ " System.out.println(\"Event: \" + theEvent.getTitle() +\n"
+ " \" Time: \" + theEvent.getDate());\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:490
+msgid "We also add a new <literal>listEvents() method</literal>:"
+msgstr "ì°ë¦¬ë ëí ìë¡ì´ <literal>listEvents() method</literal> ë©ìë를 ì¶ê° ìí¨ë¤:"
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[private List listEvents() {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " List result = session.createQuery(\"from Event\").list();\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " return result;\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private List listEvents() {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " List result = session.createQuery(\"from Event\").list();\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " return result;\n"
+ "}]]>"
+
+#: index.docbook:496
+msgid "What we do here is use an HQL (Hibernate Query Language) query to load all existing <literal>Event</literal> objects from the database. Hibernate will generate the appropriate SQL, send it to the database and populate <literal>Event</literal> objects with the data. You can create more complex queries with HQL, of course."
+msgstr "ì¬ê¸°ì ì°ë¦¬ê° íí ê²ì ë°ì´í°ë² ì´ì¤ë¡ë¶í° 모ë ì¡´ì¬íë <literal>Event</literal> ê°ì²´ë¤ì ë¡ëìí¤ê¸° ìí´ HQL (Hibernate Query Language) ì§ì를 ì¬ì©íë ê²ì´ë¤. Hibernateë ì ì í SQLì ìì±ìí¬ ê²ì´ê³ , ê·¸ê²ì ë°ì´í°ë² ì´ì¤ë¡ ì ì¡íê³ ë°ì´í°ë¥¼ <literal>Event</literal> ê°ì²´ë¤ì 거주ìí¬ ê²ì´ë¤. ë¹ì ì ë¬¼ë¡ HQLë¡ì ë³´ë¤ ë³µì¡í ì§ìë¤ì ìì±ìí¬ ì ìë¤."
+
+#: index.docbook:503
+msgid "Now, to execute and test all of this, follow these steps:"
+msgstr "ì´ì ì´ ëª¨ë ê²ì ì¤ííê³ í
ì¤í¸í기 ìí´, ë¤ì ë¨ê³ë¤ì ë°ë¥´ë¼:"
+
+#: index.docbook:509
+msgid "Run <literal>ant run -Daction=store</literal> to store something into the database and, of course, to generate the database schema before through hbm2ddl."
+msgstr "ë°ì´í°ë² ì´ì¤ ìì¼ë¡ ì´ë¤ ê²ì ì ì¥íê³ ë¬¼ë¡ ìì hbm2ddlì íµí´ ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ë¥¼ ì°ì¶ìí¤ê¸° ìí´ <literal>ant run -Daction=store</literal>를 ì¤ííë¼."
+
+#: index.docbook:515
+msgid "Now disable hbm2ddl by commenting out the property in your <literal>hibernate.cfg.xml</literal> file. Usually you only leave it turned on in continous unit testing, but another run of hbm2ddl would <emphasis>drop</emphasis> everything you have stored - the <literal>create</literal> configuration setting actually translates into \"drop all tables from the schema, then re-create all tables, when the SessionFactory is build\"."
+msgstr "ì´ì ë¹ì ì <literal>hibernate.cfg.xml</literal> íì¼ ììì ê·¸ íë¡í¼í°ë¥¼ 주ìì²ë¦¬í¨ì¼ë¡ì¨ hbm2ddlì ì¬ì©ë¶ê°ë¥íê² íë¼. ëê° ë¹ì ì ì§ìëë ë¨ì í
ì¤í
ììë ê·¸ê²ì ì¬ì© ê°ë¥íê² ë´ë²ë ¤ëì´ë ëì§ë§, ë ë¤ë¥¸ hbm2ddlì ì¤íì ë¹ì ì´ ì ì¥íë 모ë ê²ì <emphasis>drop</emphasis>ìí¬ ê²ì´ë¤ - <literal>create</literal> êµ¬ì± ì¤ì ì ì¤ì ë¡ \"ì¤í¤ë§ë¡ë¶í° 모ë í
ì´ë¸ë¤ì ëë¡ìí¤ê³ ëì, SessionFactoryê° ë¹ëë ë 모ë í
ì´ë¸ë¤ì ë¤ì ìì±ìí¤ë ê²\"ì¼ë¡ ë³íëë¤."
+
+#: index.docbook:525
+msgid "If you now call Ant with <literal>-Daction=list</literal>, you should see the events you have stored so far. You can of course also call the <literal>store</literal> action a few times more."
+msgstr "ë§ì¼ ë¹ì ì´ ì§ê¸ <literal>-Daction=list</literal>ë¡ Ant를 í¸ì¶í ê²½ì°, ë¹ì ì ë¹ì ì´ ì§ê¸ê¹ì§ ì ì¥íë ì´ë²¤í¸ë¤ì ë³´ê² ë ê²ì´ë¤. ë¬¼ë¡ ë¹ì ì ëí ì¬ë¬ ë² <literal>store</literal> ì¡ì
ì í¸ì¶í ì ìë¤."
+
+#: index.docbook:531
+msgid "Note: Most new Hibernate users fail at this point and we see questions about <emphasis>Table not found</emphasis> error messages regularly. However, if you follow the steps outlined above you will not have this problem, as hbm2ddl creates the database schema on the first run, and subsequent application restarts will use this schema. If you change the mapping and/or database schema, you have to re-enable hbm2ddl once again."
+msgstr "ë
¸í¸ : ëë¶ë¶ì Hibernate ì¬ì©ìë¤ì ì´ ì§ì ìì ì¤í¨íê³ ì°ë¦¬ë ì 기ì ì¼ë¡ <emphasis>Table not found</emphasis> ì¤ë¥ ë©ìì§ë¤ì ê´í ì§ë¬¸ì ë°ëë¤. íì§ë§ ë§ì¼ ë¹ì ì´ ìì ì¡°ëª
ë ë¨ê²ë¤ì ë°ë¥¼ ê²½ì° ë¹ì ì ì´ ë¬¸ì 를 ê²ªì§ ìì ê²ì´ê³ , hbm2ddlì´ ì²ì ì¤í ìì ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ë¥¼ ìì±ìí¤ë¯ë¡, ì°¨íì ì´í리ì¼ì´ì
ì¬ììì ì´ ì¤í¤ë§ë¥¼ ì¬ì©í ê²ì´ë¤. ë§ì¼ ë¹ì ì´ ë§¤í ê·¸ë¦¬ê³ /ëë ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ë¥¼ ë³ê²½í ê²½ì°ì, ë¹ì ì ë¤ì íë² ë hbm2ddlì ì´ì© ê°ë¥íëë¡ í´ì¼ íë¤."
+
+#: index.docbook:544
+msgid "Part 2 - Mapping associations"
+msgstr "íí¸ 2 - ì°ê´ë¤ì 매íí기"
+
+#: index.docbook:546
+msgid "We mapped a persistent entity class to a table. Let's build on this and add some class associations. First we'll add people to our application, and store a list of events they participate in."
+msgstr "ì°ë¦¬ë í ê°ì ìì ìí°í° í´ëì¤ë¥¼ í ê°ì í
ì´ë¸ë¡ 매ííë¤. ì´ê² ììì ë¹ëíê³ ëªëª í´ëì¤ ì°ê´ë¤ì ì¶ê°ìí¤ì. 먼ì ì°ë¦¬ë ì°ë¦¬ì ì´í리ì¼ì´ì
ì ì¬ëë¤ì ì¶ê°íê³ ê·¸ë¤ì´ ì°¸ì¬íë ì´ë²¤í¸ë¤ì 목ë¡ì ì ì¥í ê²ì´ë¤."
+
+#: index.docbook:552
+msgid "Mapping the Person class"
+msgstr "Person í´ëì¤ ë§¤íí기"
+
+#: index.docbook:554
+msgid "The first cut of the <literal>Person</literal> class is simple:"
+msgstr "í´ëì¤ì 첫 ë²ì§¸ ì¥ë©´ì ê°ë¨íë¤:"
+
+#: index.docbook:558
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "public class Person {\n"
+ "\n"
+ " private Long id;\n"
+ " private int age;\n"
+ " private String firstname;\n"
+ " private String lastname;\n"
+ "\n"
+ " public Person() {}\n"
+ "\n"
+ " // Accessor methods for all properties, private setter for 'id'\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "public class Person {\n"
+ "\n"
+ " private Long id;\n"
+ " private int age;\n"
+ " private String firstname;\n"
+ " private String lastname;\n"
+ "\n"
+ " public Person() {}\n"
+ "\n"
+ " // Accessor methods for all properties, private setter for 'id'\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:560
+msgid "Create a new mapping file called <literal>Person.hbm.xml</literal> (don't forget the DTD reference at the top):"
+msgstr "<literal>Person.hbm.xml</literal>ë¡ ëª
ëª
ëë ìë¡ì´ 매í íì¼ì ìì±ìì¼ë¼ (맨ìì DTD 참조를 ìì§ë§ë¼):"
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+
+#: index.docbook:567
+msgid "Finally, add the new mapping to Hibernate's configuration:"
+msgstr "ë§ì§ë§ì¼ë¡ ìë¡ì´ 매íì Hibernateì 구ì±ì ì¶ê°íë¼:"
+
+#: index.docbook:571
+msgid ""
+ "<![CDATA[<mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "<mapping resource=\"events/Person.hbm.xml\"/>]]>"
+msgstr ""
+ "<![CDATA[<mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "<mapping resource=\"events/Person.hbm.xml\"/>]]>"
+
+#: index.docbook:573
+msgid "We'll now create an association between these two entities. Obviously, persons can participate in events, and events have participants. The design questions we have to deal with are: directionality, multiplicity, and collection behavior."
+msgstr "ì´ì ì°ë¦¬ë ì´ë¤ ë ê°ì ìí°í°ë¤ ì¬ì´ì í ê°ì ì°ê´ì ìì±ìí¬ ê²ì´ë¤. ëª
ë°±íê², ê°ì¸ë¤ì ì´ë²¤í¸ë¤ì ì°¸ì¬í ì ìê³ , ì´ë²¤í¸ë¤ì ì°¸ì¬ìë¤ì ê°ëë¤. ì°ë¦¬ê° ë¤ë£¨ì´ì¼ íë ì¤ê³ ì§ë¬¸ë¤ì ë¤ìê³¼ ê°ë¤ : ë°©í¥ì±(directionality), ë¤ì¤ì±(multiplicity), ê·¸ë¦¬ê³ ì½ë ì
í¹ì§."
+
+#: index.docbook:583
+msgid "A unidirectional Set-based association"
+msgstr "ë¨ë°©í¥ Set-기ë°ì ì°ê´"
+
+#: index.docbook:585
+msgid "We'll add a collection of events to the <literal>Person</literal> class. That way we can easily navigate to the events for a particular person, without executing an explicit query - by calling <literal>aPerson.getEvents()</literal>. We use a Java collection, a <literal>Set</literal>, because the collection will not contain duplicate elements and the ordering is not relevant for us."
+msgstr "ì°ë¦¬ë <literal>Person</literal> í´ëì¤ì ì´ë²¤í¸ë¤ì ê°ì§ í ê°ì ì½ë ì
ì ì¶ê°í ê²ì´ë¤. ê·¸ ë°©ë²ì¼ë¡ ì°ë¦¬ë ëª
ìì ì¸ ì§ì-<literal>aPerson.getEvents()</literal>를 í¸ì¶í¨ì¼ë¡ì¨-를 ì¤íìí¤ì§ ìê³ ì í¹ì ê°ì¸ì ëí ì´ë²¤í¸ë¤ì ì½ê² ë¤ë¹ê²ì´í¸í ì ìë¤. ì°ë¦¬ë íëì Java ì½ë ì
, íëì <literal>Set</literal>를 ì¬ì©íë¤. ìëíë©´ ê·¸ ì½ë ì
ì ì¤ë³µ ììë¤ì í¬í¨í기 ìì ê²ì´ê³ ê·¸ ììê° ì°ë¦¬ì ê´ë ¨ëì´ ìì§ ì기 ë문ì´ë¤."
+
+#: index.docbook:592
+msgid "We need a unidirectional, many-valued associations, implemented with a <literal>Set</literal>. Let's write the code for this in the Java classes and then map it:"
+msgstr "ì°ë¦¬ë íëì <literal>Set</literal>ì¼ë¡ 구íë, íëì ë¨ë°©í¥, ë¤ì¤ê° ì°ê´ë¤ì íìë¡ íë¤. Java í´ëì¤ë¤ ë´ì ì´ë¥¼ ìí ì½ë를 ìì±íê³ ê·¸ë° ë¤ì ê·¸ê²ì 매íìí¤ì:"
+
+#: index.docbook:597
+msgid ""
+ "<![CDATA[public class Person {\n"
+ "\n"
+ " private Set events = new HashSet();\n"
+ "\n"
+ " public Set getEvents() {\n"
+ " return events;\n"
+ " }\n"
+ "\n"
+ " public void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[public class Person {\n"
+ "\n"
+ " private Set events = new HashSet();\n"
+ "\n"
+ " public Set getEvents() {\n"
+ " return events;\n"
+ " }\n"
+ "\n"
+ " public void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:599
+msgid "Before we map this association, think about the other side. Clearly, we could just keep this unidirectional. Or, we could create another collection on the <literal>Event</literal>, if we want to be able to navigate it bi-directional, i.e. <literal>anEvent.getParticipants()</literal>. This is not necessary, from a functional perspective. You could always execute an explicit query to retrieve the participants for a particular event. This is a design choice left to you, but what is clear from this discussion is the multiplicity of the association: \"many\" valued on both sides, we call this a <emphasis>many-to-many</emphasis> association. Hence, we use Hibernate's many-to-many mapping:"
+msgstr "ì°ë¦¬ê° ì´ ì°ê´ì 매íí기 ì ì, ë¤ë¥¸ 측ì ëí´ ìê°íë¼. ëª
ë°±íê² ì°ë¦¬ë ì´ê²ì ë¨ì§ ë¨ë°©í¥ì¼ë¡ ì ì§ìí¬ ì ìë¤. ëë ì°ë¦¬ê° ê·¸ê²ì ìë°©í¥ì¼ë¡ ë¤ë¹ê²ì´í¸íë ê²-ì를 ë¤ì´ <literal>anEvent.getParticipants()</literal>-ì´ ê°ë¥íëë¡ ìí ê²½ì°ì, <literal>Event</literal>측 ìì ë ë¤ë¥¸ ì½ë ì
ì ìì±ìí¬ ì ìë¤. ì´ê²ì ë¹ì ìê² ë¨ê²¨ì§ ì¤ê³ ì íì´ì§ë§, ì´ ë
¼ììì ëª
ë£í ì ì ì°ê´ì ë¤ì¤ì±ì´ë¤: ì 측 ììì \"ë¤ì¤\" ê°ì ê°ë ê²½ì°, ì°ë¦¬ë ì´ê²ì <emphasis>many-to-many</emphasis> ì°ê´ì´ë¼ê³ ëª
ëª
íë¤. ê·¸ë¬ë¯ë¡ ì°ë¦¬ë Hibernateì many-to-many 매íì ì¬ì©íë¤:"
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ "\n"
+ " <set name=\"events\" table=\"PERSON_EVENT\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <many-to-many column=\"EVENT_ID\" class=\"events.Event\"/>\n"
+ " </set>\n"
+ "\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ "\n"
+ " <set name=\"events\" table=\"PERSON_EVENT\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <many-to-many column=\"EVENT_ID\" class=\"events.Event\"/>\n"
+ " </set>\n"
+ "\n"
+ "</class>]]>"
+
+#: index.docbook:612
+msgid "Hibernate supports all kinds of collection mappings, a <literal><set></literal> being most common. For a many-to-many association (or <emphasis>n:m</emphasis> entity relationship), an association table is needed. Each row in this table represents a link between a person and an event. The table name is configured with the <literal>table</literal> attribute of the <literal>set</literal> element. The identifier column name in the association, for the person's side, is defined with the <literal><key></literal> element, the column name for the event's side with the <literal>column</literal> attribute of the <literal><many-to-many></literal>. You also have to tell Hibernate the class of the objects in your collection (correct: the class on the other side of the collection of references)."
+msgstr "Hibernateë 모ë ì¢
ë¥ì ì½ë ì
매íë¤, ê°ì¥ ê³µíµì ì¸ <literal><set></literal>ì ì§ìíë¤. many-to-many ì°ê´ (ëë <emphasis>n:m</emphasis> ìí°í° ê´ê³)ì ê²½ì°, í ê°ì ì°ê´ í
ì´ë¸ì´ íìíë¤. ì´ í
ì´ë¸ ë´ì ìë ê°ê°ì íì í ëª
ì ê°ì¸ê³¼ í ê°ì ì´ë²¤í¸ ì¬ì´ì ë§í¬ë¥¼ íííë¤. í
ì´ë¸ ì´ë¦ì <literal>set</literal> ììì <literal>table</literal> ìì±ì¼ë¡ 구ì±ëë¤. ì°ê´ ë´ì ìë³ì ì»¬ë¼ ì´ë¦ì ê°ì¸ 측ì ëí´ <literal><key></literal> ììë¡ ì ìëê³ ì´ë²¤í¸ 측ì ëí ì»¬ë¼ ì´ë¦ì <literal><many-to-many></literal>ì <literal>column</literal> ìì±ì¼ë¡ ì ìëë¤. ë¹ì ì ëí ë¹ì ì ì½ë ì
ë´ì ìë ê°ì²´ë¤ì í´ëì¤(ì ííê² : 참조ë¤ì ê°ì§ ì½ë ì
ì ë¤ë¥¸ 측 ìì ìë í´ëì¤)를 Hibernateìê² ìë ¤ì£¼ì´ì¼ íë¤."
+
+#: index.docbook:624
+msgid "The database schema for this mapping is therefore:"
+msgstr "ë°ë¼ì ì´ ë§¤íì ìí ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ë ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:628
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | |\n"
+ " |_____________| |__________________| | PERSON |\n"
+ " | | | | |_____________|\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | |\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE |\n"
+ " |_____________| | FIRSTNAME |\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | |\n"
+ " |_____________| |__________________| | PERSON |\n"
+ " | | | | |_____________|\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | |\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE |\n"
+ " |_____________| | FIRSTNAME |\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+
+#: index.docbook:633
+msgid "Working the association"
+msgstr "ì°ê´ë¤ì ìì
í기"
+
+#: index.docbook:635
+msgid "Let's bring some people and events together in a new method in <literal>EventManager</literal>:"
+msgstr "<literal>EventManager</literal> ìì ìë í ê°ì ìë¡ì´ ë©ìë ë´ì ëªëª ì¬ëë¤ê³¼ ì´ë²¤í¸ë¤ì í¨ê» ê°ì ¸ì¤ì:"
+
+#: index.docbook:639
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+
+#: index.docbook:641
+msgid "After loading a <literal>Person</literal> and an <literal>Event</literal>, simply modify the collection using the normal collection methods. As you can see, there is no explicit call to <literal>update()</literal> or <literal>save()</literal>, Hibernate automatically detects that the collection has been modified and needs to be updated. This is called <emphasis>automatic dirty checking</emphasis>, and you can also try it by modifying the name or the date property of any of your objects. As long as they are in <emphasis>persistent</emphasis> state, that is, bound to a particular Hibernate <literal>Session</literal> (i.e. they have been just loaded or saved in a unit of work), Hibernate monitors any changes and executes SQL in a write-behind fashion. The process of synchronizing the memory state with the database, usually only at the end of a unit of work, is called <emphasis>flushing</emphasis>. In our code, the unit of work ends with a commit (or rollback) of the dat!
abase transaction - as defined by the <literal>thread</literal> configuration option for the <literal>CurrentSessionContext</literal> class."
+msgstr "<literal>Person</literal>ê³¼ <literal>Event</literal>를 ë¡ëìí¨ íì, ì ê· ì½ë ì
ë©ìëë¤ì ì¬ì©íì¬ ì½ë ì
ì ê°ë¨íê² ë³ê²½íë¼. ë¹ì ì´ ì ì ìë¯ì´, <literal>update()</literal> ëë <literal>save()</literal>ì ëí ëª
ìì ì¸ í¸ì¶ì´ ì¡´ì¬íì§ ìê³ , ë³ê²½ëìê³ ì ì¥í íìê° ìë ì½ë ì
ì Hibernateê° ìëì ì¼ë¡ ê²ì¶í´ë¸ë¤. ì´ê²ì <emphasis>ìëì ì¸ dirty ì²´í¹</emphasis>ì´ë¼ ë¶ë ¤ì§ë©°, ë¹ì ì ëí ë¹ì ì ììì ê°ì²´ë¤ì ëí name ëë date íë¡í¼í°ë¥¼ ë³ê²½í¨ì¼ë¡ì¨ ê·¸ê²ì ìëí ì ìë¤. ê·¸ê²ë¤ì´ <emphasis>ìì(persistent)</emphasis> ìíì ìë ëì, ì¦ í¹ì Hibernate <literal>Session</literal>ì ë°ì¸ëëì´ ìë ëì(ì를 ë¤ë©´. ê·¸ê²ë¤ì ìì
ë¨ì ìì ë°©ê¸ ë¡ëëìê±°ë ì ì¥ëìë¤), Hibernateë ììì ë³ê²½ë¤ì 모ëí°ë§íê³ ì°ê¸° ì´ë©´ì ííë¡ SQLì ì¤íìí!
¨ë¤. ë©ëª¨ë¦¬ ìí를 ë°ì´í°ë² ì´ì¤ì ë기í ìí¤ë ê³¼ì ì ëê° ì¤ì§ ìì
ë¨ìì ëììì´ê³ , <emphasis>flushing</emphasis>ì´ë¼ ëª
ëª
ëë¤. ì°ë¦¬ì ì½ëìì, ìì
ë¨ìë <literal>CurrentSessionContext</literal> í´ëì¤ì ëí <literal>thread</literal> êµ¬ì± ìµì
ì ìí´ ì ìë ëë¡ - ë°ì´í°ë² ì´ì¤ í¸ëìì
ì 커ë°(ëë 롤백)ì¼ë¡ ëì´ëë¤."
+
+#: index.docbook:656
+msgid "You might of course load person and event in different units of work. Or you modify an object outside of a <literal>Session</literal>, when it is not in persistent state (if it was persistent before, we call this state <emphasis>detached</emphasis>). You can even modify a collection when it is detached:"
+msgstr "ë¬¼ë¡ ë¹ì ì ë¤ë¥¸ ìì
ë¨ì ìì ê°ì¸ê³¼ ì´ë²¤í¸ë¥¼ ë¡ëìí¬ ì ë ìë¤. ëë ë¹ì ì íëì ê°ì²´ê·¸ ìì ìíì ìì§ ìì ë <literal>Session</literal>ì ì¸ë¶ìì ê°ì²´ë¥¼ ë³ê²½ìí¬ ìë ìë¤(ë§ì¼ ê°ì²´ê° ì´ì ì ììí ëìë¤ë©´, ì°ë¦¬ë ì´ ìí를 <emphasis>detached</emphasis>ë¼ê³ ë¶ë¥¸ë¤). (ë§¤ì° ì¬ì¤ì ì´ì§ ìì) ì½ë ë´ìì ì´ê²ì ë¤ìê³¼ ê°ì ì ìë¤:"
+
+#: index.docbook:663
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session\n"
+ " .createQuery(\"select p from Person p left join fetch p.events where p.id = :pid\")\n"
+ " .setParameter(\"pid\", personId)\n"
+ " .uniqueResult(); // Eager fetch the collection so we can use it detached\n"
+ "\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " // End of first unit of work\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent); // aPerson (and its collection) is detached\n"
+ "\n"
+ " // Begin second unit of work\n"
+ "\n"
+ " Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session2.beginTransaction();\n"
+ "\n"
+ " session2.update(aPerson); // Reattachment of aPerson\n"
+ "\n"
+ " session2.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session\n"
+ " .createQuery(\"select p from Person p left join fetch p.events where p.id = :pid\")\n"
+ " .setParameter(\"pid\", personId)\n"
+ " .uniqueResult(); // Eager fetch the collection so we can use it detached\n"
+ "\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " // End of first unit of work\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent); // aPerson (and its collection) is detached\n"
+ "\n"
+ " // Begin second unit of work\n"
+ "\n"
+ " Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session2.beginTransaction();\n"
+ "\n"
+ " session2.update(aPerson); // Reattachment of aPerson\n"
+ "\n"
+ " session2.getTransaction().commit();\n"
+ "}]]>"
+
+#: index.docbook:665
+msgid "The call to <literal>update</literal> makes a detached object persistent again, you could say it binds it to a new unit of work, so any modifications you made to it while detached can be saved to the database. This includes any modifications (additions/deletions) you made to a collection of that entity object."
+msgstr "<literal>update</literal>ì ëí í¸ì¶ì í ê°ì detached ê°ì²´ë¥¼ ë¤ì ììí ìí¤ê³ , ë¹ì ì ê·¸ê²ì´ ìë¡ì´ ìì
ë¨ìì ë°ì¸ëëë¤ê³ ë§í ì ìê³ , ë°ë¼ì detached ëìì ë¹ì ì´ ê·¸ê²ì ëí´ íí ììì ë³ê²½ë¤ì´ ë°ì´í°ë² ì´ì¤ì ì ì¥ë ì ìë¤. ì´ê²ì ë¹ì ì´ ê·¸ ìí°í° ê°ì²´ì ì½ë ì
ì ëí´ ííë ììì ë³ê²½ë¤(ì¶ê°/ìì )를 í¬í¨íë¤."
+
+#: index.docbook:672
+msgid "Well, this is not much use in our current situation, but it's an important concept you can design into your own application. For now, complete this exercise by adding a new action to the <literal>EventManager</literal>'s main method and call it from the command line. If you need the identifiers of a person and an event - the <literal>save()</literal> method returns it (you might have to modify some of the previous methods to return that identifier):"
+msgstr "ë¬¼ë¡ , ì°ë¦¬ì íì¬ ìí©ìì ì´ê²ì ë§ì´ ì¬ì©ëì§ ìì§ë§, ê·¸ê²ì ë¹ì ì´ ë¹ì ìì ì ì´í리ì¼ì´ì
ë´ë¡ ì¤ê³í ì ìë ì¤ìí ê°ë
ì´ë¤. ì§ê¸ <literal>EventManager</literal>ì main ë©ìëì í ê°ì ìë¡ì´ ì¡ì
ì ì¶ê°íê³ ëª
ë ¹ ë¼ì¸ìì ê·¸ê²ì í¸ì¶íì¬ ì´ ì°ìµì ìë£íë¼. ë§ì¼ ë¹ì ì´ íëª
ì ê°ì¸ê³¼ í ê°ì ì´ë²¤í¸ì ëí ìë³ìë¤ì íìë¡ í ê²½ì° - <literal>save()</literal> ë©ìëê° ê·¸ê²ì ë°íìí¨ë¤(ë¹ì ì ê·¸ ìë³ì를 ë°íìí¤ë ìì ë©ìëë¤ ì¤ ëªëªì ë³ê²½ìì¼ì¼ í ê²ì´ë¤):"
+
+#: index.docbook:680
+msgid ""
+ "<![CDATA[else if (args[0].equals(\"addpersontoevent\")) {\n"
+ " Long eventId = mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " Long personId = mgr.createAndStorePerson(\"Foo\", \"Bar\");\n"
+ " mgr.addPersonToEvent(personId, eventId);\n"
+ " System.out.println(\"Added person \" + personId + \" to event \" + eventId);\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[else if (args[0].equals(\"addpersontoevent\")) {\n"
+ " Long eventId = mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " Long personId = mgr.createAndStorePerson(\"Foo\", \"Bar\");\n"
+ " mgr.addPersonToEvent(personId, eventId);\n"
+ " System.out.println(\"Added person \" + personId + \" to event \" + eventId);\n"
+ "}]]>"
+
+#: index.docbook:682
+msgid "This was an example of an association between two equally important classes, two entities. As mentioned earlier, there are other classes and types in a typical model, usually \"less important\". Some you have already seen, like an <literal>int</literal> or a <literal>String</literal>. We call these classes <emphasis>value types</emphasis>, and their instances <emphasis>depend</emphasis> on a particular entity. Instances of these types don't have their own identity, nor are they shared between entities (two persons don't reference the same <literal>firstname</literal> object, even if they have the same first name). Of course, value types can not only be found in the JDK (in fact, in a Hibernate application all JDK classes are considered value types), but you can also write dependent classes yourself, <literal>Address</literal> or <literal>MonetaryAmount</literal>, for example."
+msgstr "ì´ê²ì ë ê°ì ëë±íê² ì¤ìí í´ëì¤ë¤, ë ê°ì ìí°í°ë¤ ì¬ì´ìì í ê°ì ì°ê´ì ê´í ìì ìë¤. ìì ì¸ê¸íë¯ì´, ì íì ì¸ ëª¨í ë´ìë ë¤ë¥¸ í´ëì¤ë¤ê³¼ íì´ë¤ì´ ì¡´ì¬íëë°, ëê° \"ë ì¤ìíë¤\". ë¹ì ì ì´ë¯¸ <literal>int</literal> ëë <literal>String</literal>ê³¼ ê°ì ì´ë¤ ê²ì ì´ë¯¸ ë³´ìë¤. ì°ë¦¬ë ì´ë¤ í´ëì¤ë¤ì <emphasis>ê° íì
ë¤(value types)</emphasis>ì´ë¼ ëª
ëª
íê³ , ê·¸ë¤ ì¸ì¤í´ì¤ë¤ì í¹ì ìí°í°ì <emphasis>ìì¡´íë¤(depend)</emphasis>. ì´ë¤ íì
ë¤ì ê°ì§ ì¸ì¤í´ì¤ë¤ì ê·¸ê²ë¤ ìì ì ìë³ì±(identity)를 ê°ì§ ìê±°ë, ê·¸ê²ë¤ì ìí°í°ë¤ ì¬ì´ìì ê³µì ëì§ë ìëë¤(ëê°ì personë¤ì ì¬ì§ì´ ê·¸ê²ë¤ì´ ê°ì 첫 ë²ì§¸ ì´ë¦ì ê°ë ê²½ì°ìë ëì¼í <literal>firstname</literal>ì 참조íì§ ìëë¤ ). ë¬¼ë¡ ê° íì
ë¤ì JDK ë´ìì ë°ê²¬ë ë¿ë§ ìëë¼(ì¬!
ì¤, Hibernate ì´í리ì¼ì´ì
ìì 모ë JDK í´ëì¤ë¤ì ê° íì
ë¤ë¡ ê°ì£¼ëë¤), ë¹ì ì ëí ë¹ì ì¤ì¤ë¡ ì¢
ì í´ëì¤ë¤, ì를 ë¤ë©´ <literal>Address</literal> ëë <literal>MonetaryAmount</literal>ì ìì±í ì ìë¤."
+
+#: index.docbook:695
+msgid "You can also design a collection of value types. This is conceptually very different from a collection of references to other entities, but looks almost the same in Java."
+msgstr "ë¹ì ì ëí ê° íì
ë¤ì ì¤ê³í ì ìë¤. ì´ê²ì ë¤ë¥¸ ìí°í°ë¤ì ëí 참조ë¤ì ê°ì§ ì½ë ì
ê³¼ë ê°ë
ì ì¼ë¡ ë§¤ì° ë¤ë¥´ì§ë§, Javaììë ëê° ëì¼í ê²ì¼ë¡ ë³´ì¬ì§ë¤."
+
+#: index.docbook:703
+msgid "Collection of values"
+msgstr "ê°ë¤ì ê°ì§ ì½ë ì
"
+
+#: index.docbook:705
+msgid "We add a collection of value typed objects to the <literal>Person</literal> entity. We want to store email addresses, so the type we use is <literal>String</literal>, and the collection is again a <literal>Set</literal>:"
+msgstr "ì°ë¦¬ë ê° íì
ì ê°ì²´ë¤ì ê°ì§ í ê°ì ì½ë ì
ì <literal>Person</literal> ìí°í°ì ì¶ê°ìí¨ë¤. ì°ë¦¬ë email 주ì를 ì ì¥íê³ ì ìíë¯ë¡, ì°ë¦¬ê° ì¬ì©íë íì
ì <literal>String</literal>ì´ê³ , ê·¸ ì½ë ì
ì ë¤ì í ê°ì <literal>Set</literal>ì´ë¤:"
+
+#: index.docbook:710
+msgid ""
+ "<![CDATA[private Set emailAddresses = new HashSet();\n"
+ "\n"
+ "public Set getEmailAddresses() {\n"
+ " return emailAddresses;\n"
+ "}\n"
+ "\n"
+ "public void setEmailAddresses(Set emailAddresses) {\n"
+ " this.emailAddresses = emailAddresses;\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private Set emailAddresses = new HashSet();\n"
+ "\n"
+ "public Set getEmailAddresses() {\n"
+ " return emailAddresses;\n"
+ "}\n"
+ "\n"
+ "public void setEmailAddresses(Set emailAddresses) {\n"
+ " this.emailAddresses = emailAddresses;\n"
+ "}]]>"
+
+#: index.docbook:712
+msgid "The mapping of this <literal>Set</literal>:"
+msgstr "ì´ <literal>Set</literal>ì ëí 매íì ë¤ìê³¼ ê°ë¤:"
+
+#: index.docbook:716
+msgid ""
+ "<![CDATA[<set name=\"emailAddresses\" table=\"PERSON_EMAIL_ADDR\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <element type=\"string\" column=\"EMAIL_ADDR\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"emailAddresses\" table=\"PERSON_EMAIL_ADDR\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <element type=\"string\" column=\"EMAIL_ADDR\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:718
+msgid "The difference compared with the earlier mapping is the <literal>element</literal> part, which tells Hibernate that the collection does not contain references to another entity, but a collection of elements of type <literal>String</literal> (the lowercase name tells you it's a Hibernate mapping type/converter). Once again, the <literal>table</literal> attribute of the <literal>set</literal> element determines the table name for the collection. The <literal>key</literal> element defines the foreign-key column name in the collection table. The <literal>column</literal> attribute in the <literal>element</literal> element defines the column name where the <literal>String</literal> values will actually be stored."
+msgstr "ìì 매íê³¼ ë¹êµí ì°¨ì´ì ì <literal>element</literal> ë¶ë¶ì¸ë°, ê·¸ê²ì ê·¸ ì½ë ì
ì´ ë ë¤ë¥¸ ìí°í°ì ëí 참조ë¤ì í¬í¨íì§ ìì ê²ì´ì§ë§ <literal>String</literal>(ì문ì ì´ë¦ì ê·¸ê²ì´ Hibernate 매í íì
/ë³íììì ë¹ì ìê² ë§í´ì¤ë¤) íì
ì ììë¤ì ê°ì§ í ê°ì ì½ë ì
ì í¬í¨í ê²ìì Hibernateìê² ìë ¤ì¤ë¤. ì¼ë¨ ë¤ì <literal>set</literal> ììì <literal>table</literal> ìì±ì ê·¸ ì½ë ì
ì ëí í
ì´ë¸ ì´ë¦ì ê²°ì íë¤. <literal>key</literal> ììë ì½ë ì
í
ì´ë¸ ë´ìì foreign-key ì»¬ë¼ ì´ë¦ì ì ìíë¤. <literal>element</literal> ìì ë´ì ìë <literal>column</literal> ìì±ì <literal>String</literal> ê°ë¤ì´ ì¤ì ë¡ ì ì¥ë ì»¬ë¼ ì´ë¦ì ì ìíë¤."
+
+#: index.docbook:728
+msgid "Have a look at the updated schema:"
+msgstr "ì
ë°ì´í¸ë ì¤í¤ë§ë¥¼ ì´í´ë³´ë¼:"
+
+#: index.docbook:732
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | | ___________________\n"
+ " |_____________| |__________________| | PERSON | | |\n"
+ " | | | | |_____________| | PERSON_EMAIL_ADDR |\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | | |___________________|\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE | | *EMAIL_ADDR |\n"
+ " |_____________| | FIRSTNAME | |___________________|\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | | ___________________\n"
+ " |_____________| |__________________| | PERSON | | |\n"
+ " | | | | |_____________| | PERSON_EMAIL_ADDR |\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | | |___________________|\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE | | *EMAIL_ADDR |\n"
+ " |_____________| | FIRSTNAME | |___________________|\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+
+#: index.docbook:734
+msgid "You can see that the primary key of the collection table is in fact a composite key, using both columns. This also implies that there can't be duplicate email addresses per person, which is exactly the semantics we need for a set in Java."
+msgstr "ë¹ì ì ì½ë ì
í
ì´ë¸ì íë¼ì´ë¨¸ë¦¬ í¤ê° ì¬ì¤ì ë 컬ë¼ë¤ì ì¬ì©íë í ê°ì í©ì± í¤(composite key)ìì ì ì ìë¤. ì´ê²ì ëí ê°ì¸ì ëí´ email 주ìê° ì¤ë³µë ì ììì ì미íë©°, ê·¸ê²ì ì ííê² ì°ë¦¬ê° Javaìì setì íìë¡ íë ìë¯¸ë¡ ì´ë¤."
+
+#: index.docbook:740
+msgid "You can now try and add elements to this collection, just like we did before by linking persons and events. It's the same code in Java:"
+msgstr "ë§ì¹ ê°ì¸ë¤ê³¼ ì´ë²¤í¸ë¤ì ë§í¬ìì¼ì ì´ì ì ì°ë¦¬ê° ííë ê²ì²ë¼ ì´ì ë¹ì ì ììë¤ì ìëíê³ ì´ ì½ë ì
ì ì¶ê°í ì ìë¤. ê·¸ê²ì Javaìì ëì¼í ì½ëì´ë¤."
+
+#: index.docbook:745
+msgid ""
+ "<![CDATA[private void addEmailToPerson(Long personId, String emailAddress) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ "\n"
+ " // The getEmailAddresses() might trigger a lazy load of the collection\n"
+ " aPerson.getEmailAddresses().add(emailAddress);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private void addEmailToPerson(Long personId, String emailAddress) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ "\n"
+ " // The getEmailAddresses() might trigger a lazy load of the collection\n"
+ " aPerson.getEmailAddresses().add(emailAddress);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+
+#: index.docbook:747
+msgid "This time we didnt' use a <emphasis>fetch</emphasis> query to initialize the collection. Hence, the call to its getter method will trigger an additional select to initialize it, so we can add an element to it. Monitor the SQL log and try to optimize this with an eager fetch."
+msgstr "ì§ê¸ ì°ë¦¬ë ì½ë ì
ì ì´ê¸°í ìí¤ëë° <emphasis>fetch</emphasis> ì§ì를 ì¬ì©íì§ ììë¤. ê·¸ë¬ë¯ë¡ ì½ë ì
ì getter ë©ìëì ëí í¸ì¶ì ì½ë ì
ì ì´ê¸°í ìí¤ê¸° ìí´ ì¶ê°ì ì¸ select를 í¸ë¦¬ê±° ìí¬ ê²ì´ì´ì, ì°ë¦¬ë ê·¸ê²ì ìì를 ì¶ê°ìí¬ ì ìë¤. SQL ë¡ê·¸ë¥¼ ê´ì°°íê³ ì´ê²ì eager fetchë¡ ìµì í ìí¤ë ¤ê³ ìëíë¼."
+
+#: index.docbook:757
+msgid "Bi-directional associations"
+msgstr "Bi-directional associations"
+
+#: index.docbook:759
+msgid "Next we are going to map a bi-directional association - making the association between person and event work from both sides in Java. Of course, the database schema doesn't change, we still have many-to-many multiplicity. A relational database is more flexible than a network programming language, so it doesn't need anything like a navigation direction - data can be viewed and retrieved in any possible way."
+msgstr "ë¤ìì¼ë¡ ì°ë¦¬ë ìë°©í¥ ì°ê´ì 매íìí¬ ìì ì´ë¤-ê°ì¸ê³¼ ì´ë²¤í¸ ì¬ì´ì ì°ê´ì ë§ëë ê²ì Javaìì ì 측ë¤ìì ëìíë¤. ë¬¼ë¡ ë°ì´í°ë² ì´ì¤ ì¤í¤ë§ë ë³ê²½ëì§ ìê³ , ì°ë¦¬ë ì¬ì í many-to-many ë¤ì¤ì±ì ê°ëë¤. ê´ê³í ë°ì´í°ë² ì´ì¤ë ë¤í¸ì íë¡ê·¸ëë° ì¸ì´ ë³´ë¤ í¨ì¬ ë ì ì°íì¬ì, ê·¸ê²ì ë¤ë¹ê²ì´ì
ë°©í¥ê³¼ ê°ì ì´ë¤ ê²ì íìë¡ íì§ ìëë¤ - ë°ì´í°ë ì´ë¤ ê°ë¥í ë°ì
ã
ì¼ë¡ ë³´ì¬ì§ ì ìê³ ê²ìë ì ìë¤."
+
+#: index.docbook:767
+msgid "First, add a collection of participants to the <literal>Event</literal> Event class:"
+msgstr "먼ì , ì°¸ì¬ìë¤ì ê°ì§ í ê°ì ì½ë ì
ì <literal>Event</literal> Event í´ëì¤ì ì¶ê°ìì¼ë¼:"
+
+#: index.docbook:771
+msgid ""
+ "<![CDATA[private Set participants = new HashSet();\n"
+ "\n"
+ "public Set getParticipants() {\n"
+ " return participants;\n"
+ "}\n"
+ "\n"
+ "public void setParticipants(Set participants) {\n"
+ " this.participants = participants;\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private Set participants = new HashSet();\n"
+ "\n"
+ "public Set getParticipants() {\n"
+ " return participants;\n"
+ "}\n"
+ "\n"
+ "public void setParticipants(Set participants) {\n"
+ " this.participants = participants;\n"
+ "}]]>"
+
+#: index.docbook:773
+msgid "Now map this side of the association too, in <literal>Event.hbm.xml</literal>."
+msgstr "ì´ì <literal>Event.hbm.xml</literal> ë´ì ì°ê´ì ì´ ìª½ë 매ííë¼."
+
+#: index.docbook:777
+msgid ""
+ "<![CDATA[<set name=\"participants\" table=\"PERSON_EVENT\" inverse=\"true\">\n"
+ " <key column=\"EVENT_ID\"/>\n"
+ " <many-to-many column=\"PERSON_ID\" class=\"events.Person\"/>\n"
+ "</set>]]>"
+msgstr ""
+ "<![CDATA[<set name=\"participants\" table=\"PERSON_EVENT\" inverse=\"true\">\n"
+ " <key column=\"EVENT_ID\"/>\n"
+ " <many-to-many column=\"PERSON_ID\" class=\"events.Person\"/>\n"
+ "</set>]]>"
+
+#: index.docbook:779
+msgid "As you see, these are normal <literal>set</literal> mappings in both mapping documents. Notice that the column names in <literal>key</literal> and <literal>many-to-many</literal> are swapped in both mapping documents. The most important addition here is the <literal>inverse=\"true\"</literal> attribute in the <literal>set</literal> element of the <literal>Event</literal>'s collection mapping."
+msgstr "ë¹ì ì´ ë³¼ ì ìë¯ì´, ì´ê²ë¤ì ë 매í 문ìë¤ ë´ìì ì ê· <literal>set</literal> 매íë¤ì´ë¤. <literal>key</literal>ì <literal>many-to-many</literal>ìì ì»¬ë¼ ì´ë¦ë¤ì ë 매í 문ìë¤ìì ë°ëì´ì§ë¤. ì¬ê¸°ì ê°ì¥ ì¤ìí ë¶ê°ë¬¼ì <literal>Event</literal>ì ì½ë ì
매íì ê´í <literal>set</literal> ìì ë´ì ìë <literal>inverse=\"true\"</literal> ìì±ì´ë¤."
+
+#: index.docbook:787
+msgid "What this means is that Hibernate should take the other side - the <literal>Person</literal> class - when it needs to find out information about the link between the two. This will be a lot easier to understand once you see how the bi-directional link between our two entities is created ."
+msgstr "ì´ê²ì´ ì미íë ë°ë Hibernateê° ë ì¬ì´ì ë§í¬ì ëí ì 보를 ì íìê° ìì ë ë¤ë¥¸ 측-<literal>Person</literal> í´ëì¤-를 ì·¨í ê²ì´ë¼ë ì ì´ë¤. ì¼ë¨ ë¹ì ì´ ì°ë¦¬ì ë ìí°í°ë¤ ì¬ì´ì ìë°©í¥ ë§í¬ê° ìì±ëë ë°©ë²ì ìë¤ë©´ ì´ê²ì ì´í´íê¸°ê° í¨ì¬ ë ì¬ì¸ ê²ì´ë¤."
+
+#: index.docbook:796
+msgid "Working bi-directional links"
+msgstr "ìë°©í¥ ë§í¬ë¤ì ìì
í기"
+
+#: index.docbook:798
+msgid "First, keep in mind that Hibernate does not affect normal Java semantics. How did we create a link between a <literal>Person</literal> and an <literal>Event</literal> in the unidirectional example? We added an instance of <literal>Event</literal> to the collection of event references, of an instance of <literal>Person</literal>. So, obviously, if we want to make this link working bi-directional, we have to do the same on the other side - adding a <literal>Person</literal> reference to the collection in an <literal>Event</literal>. This \"setting the link on both sides\" is absolutely necessary and you should never forget doing it."
+msgstr "첫 ë²ì§¸ë¡ Hibernateê° ì ê· Java ìë¯¸ë¡ ì ìí¥ì ì£¼ì§ ììì ì¼ëì ëë¼. ì°ë¦¬ë ë¨ë°©í¥ ìì ìì <literal>Person</literal>ê³¼ <literal>Event</literal> ì¬ì´ì ì´ë»ê² í ê°ì ë§í¬ë¥¼ ìì±ìì¼°ëê°? ì°ë¦¬ë <literal>Event</literal> íì
ì ì¸ì¤í´ì¤ë¥¼ <literal>Person</literal> íì
ì ì´ë²¤í¸ 참조ë¤ì ê°ì§ ì½ë ì
ì ì¶ê°ìì¼°ë¤. ë°ë¼ì ëª
ë°±íê² ì°ë¦¬ê° ì´ ë§í¬ë¥¼ ìë°©í¥ì¼ë¡ ëìíëë¡ ë§ë¤ê³ ì ìíë¤ë©´, ì°ë¦¬ë ë¤ë¥¸ 측 ììì -íëì <literal>Person</literal> 참조를 íëì <literal>Event</literal> ë´ì ìë ì½ë ì
ì ì¶ê°ìí´ì¼ë¡ì¨- ëì¼í ê²ì íí´ì¼ íë¤. ì´ \"ì 측 ìì ë§í¬ ì¤ì í기\"ë ì ëì ì¼ë¡ íìì ì´ê³ ë¹ì ì ê·¸ê²ì ííë ê²ì ê²°ì½ ìì§ ë§ìì¼ íë¤."
+
+#: index.docbook:808
+msgid "Many developers program defensive and create link management methods to correctly set both sides, e.g. in <literal>Person</literal>:"
+msgstr "ë§ì ê°ë°ìë¤ì ë°©ë¹ì±
ì íë¡ê·¸ë¨íê³ ì 측ë¤ì ì ííê² ì¤ì í기 ìí íëì ë§í¬ ê´ë¦¬ ë©ìëë¤ì ìì±ìí¨ë¤. ì를 ë¤ë©´ <literal>Person</literal>ìì :"
+
+#: index.docbook:813
+msgid ""
+ "<![CDATA[protected Set getEvents() {\n"
+ " return events;\n"
+ "}\n"
+ "\n"
+ "protected void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ "}\n"
+ "\n"
+ "public void addToEvent(Event event) {\n"
+ " this.getEvents().add(event);\n"
+ " event.getParticipants().add(this);\n"
+ "}\n"
+ "\n"
+ "public void removeFromEvent(Event event) {\n"
+ " this.getEvents().remove(event);\n"
+ " event.getParticipants().remove(this);\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[protected Set getEvents() {\n"
+ " return events;\n"
+ "}\n"
+ "\n"
+ "protected void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ "}\n"
+ "\n"
+ "public void addToEvent(Event event) {\n"
+ " this.getEvents().add(event);\n"
+ " event.getParticipants().add(this);\n"
+ "}\n"
+ "\n"
+ "public void removeFromEvent(Event event) {\n"
+ " this.getEvents().remove(event);\n"
+ " event.getParticipants().remove(this);\n"
+ "}]]>"
+
+#: index.docbook:815
+msgid "Notice that the get and set methods for the collection are now protected - this allows classes in the same package and subclasses to still access the methods, but prevents everybody else from messing with the collections directly (well, almost). You should probably do the same with the collection on the other side."
+msgstr "ì½ë ì
ì ëí get ë° set ë©ìëëì ì´ì protectedìì ì¸ì§íë¼ - ì´ê²ì ëì¼í í¨í¤ì§ ë´ì ìë í´ëì¤ë¤ê³¼ ìë¸í´ëì¤ë¤ì´ ê·¸ ë©ìëë¤ì ì ê·¼íë ê²ì íì©í´ì£¼ì§ë§, ê·¸ ë°ì 모ë ê²ë¤ì´ ê·¸ ì½ë ì
ë¤ì (ë¬¼ë¡ , ëê°) ì§ì ë§ì§ë ê²ì ê¸ì§ìí¨ë¤. ë¹ì ì ë¤ë¥¸ 측 ìì ìë ì½ë ì
ì ëí´ ëì¼í ê²ì íí ê²ì´ë¤."
+
+#: index.docbook:822
+msgid "What about the <literal>inverse</literal> mapping attribute? For you, and for Java, a bi-directional link is simply a matter of setting the references on both sides correctly. Hibernate however doesn't have enough information to correctly arrange SQL <literal>INSERT</literal> and <literal>UPDATE</literal> statements (to avoid constraint violations), and needs some help to handle bi-directional associations properly. Making one side of the association <literal>inverse</literal> tells Hibernate to basically ignore it, to consider it a <emphasis>mirror</emphasis> of the other side. That's all that is necessary for Hibernate to work out all of the issues when transformation a directional navigation model to a SQL database schema. The rules you have to remember are straightforward: All bi-directional associations need one side as <literal>inverse</literal>. In a one-to-many association it has to be the many-side, in many-to-many association you can pick either side, there!
is no difference."
+msgstr "<literal>inverse</literal> 매í ìì±ì 무ìì¸ê°? ë¹ì ì ê²½ì°, ê·¸ë¦¬ê³ Javaì ê²½ì°, í ê°ì ìë°©í¥ ë§í¬ë ë¨ìí ì 측ë¤ì ëí 참조ë¤ì ì ííê² ì¤ì íë 문ì ì´ë¤. íì§ë§ Hibernateë (컨ì¤í¸ë ì¸í¸ ì배를 í¼í기 ìí´ì) SQL <literal>INSERT</literal> 문ì¥ê³¼ <literal>UPDATE</literal> 문ì¥ì ì ííê² ë§ë ¨í기ì 충ë¶í ì 보를 ê°ê³ ìì§ ìì¼ë©°, ìë°©í¥ ì°ê´ë¤ì ì¬ë°ë¥´ê² ì²ë¦¬í기 ìí´ ì´ë¤ ëìì íìë¡ íë¤. ì°ê´ì í 측ì <literal>inverse</literal>ë¡ ë§ëë ê²ì 기본ì ì¼ë¡ ê·¸ê²ì 무ìíê³ ê·¸ê²ì ë¤ë¥¸ 측ì <emphasis>ê±°ì¸(mirror)</emphasis>ë¡ ê°ì£¼íëë¡ Hibernateìê² ìë ¤ì¤ë¤. ê·¸ê²ì Hibernateê° íëì ë°©í¥ì± ë¤ë¹ê²ì´ì
모íì í ê°ì SQL ì¤í¤ë§ë¡ ë³íìí¬ ë 모ë ìì ë¤ì ì í´ê²°íëë° íìì ì¸ ëª¨ë ê²ì´ë¤. ë¹ì ì´ ì¼ëì ëì´ì¼ íë ê·ì¹ë¤ì!
ê°ë¨íë¤ : 모ë ìë°©í¥ ì°ê´ë¤ì í ìª½ì´ <literal>inverse</literal>ì¼ íìê° ìë¤. one-to-many ì°ê´ìì ê·¸ê²ì many-측ì´ì´ì¼ íê³ , many-to-many ì°ê´ìì ë¹ì ì ì´ë 측ì´ë ì íí ì ìì¼ë©° ì°¨ì´ì ì ìë¤."
+
+#: index.docbook:837
+msgid "Let's turn this into a small web application."
+msgstr "Let's turn this into a small web application."
+
+#: index.docbook:844
+msgid "Part 3 - The EventManager web application"
+msgstr "íí¸ 3 - EventManager ì¹ ì´í리ì¼ì´ì
"
+
+#: index.docbook:846
+msgid "A Hibernate web application uses <literal>Session</literal> and <literal>Transaction</literal> almost like a standalone application. However, some common patterns are useful. We now write an <literal>EventManagerServlet</literal>. This servlet can list all events stored in the database, and it provides an HTML form to enter new events."
+msgstr "Hibernate ì¹ ì´í리ì¼ì´ì
ì ëë¶ë¶ì ì¤í ëì¼ë¡ ì´í리ì¼ì´ì
ê³¼ ê°ì´ <literal>Session</literal>ê³¼ <literal>Transaction</literal>ì ì¬ì©íë¤. íì§ë§ ëªëª ê³µíµ í¨í´ë¤ì´ ì ì©íë¤. ì°ë¦¬ë ì´ì <literal>EventManagerServlet</literal>를 ìì±íë¤. ì´ ìë¸ë¦¿ì ë°ì´í°ë² ì´ì¤ ë´ì ì ì¥ë 모ë ì´ë²¤í¸ë¤ì ëì´í ì ìê³ , ê·¸ê²ì ìë¡ì´ ì´ë²¤í¸ë¤ì ì
ë ¥í기 ìí HTML formì ì ê³µíë¤."
+
+#: index.docbook:854
+msgid "Writing the basic servlet"
+msgstr "기본 ìë¸ë¦¿ ìì±í기"
+
+#: index.docbook:856
+msgid "Create a new class in your source directory, in the <literal>events</literal> package:"
+msgstr "ë¤ì ì¥ìì ì°ë¦¬ë Hibernate를 Tomcat ë° WebWorkì íµí©ìí¨ë¤. <literal>EventManager</literal>ë ì°ë¦¬ì ì±ì¥íë ì´í리ì¼ì´ì
ì ëì´ì ê°ë¹íì§ ëª»íë¤. ë¹ì ì ìì¤ ëë í 리ìì <literal>events</literal> í¨í¤ì§ ë´ì ìë¡ì´ í´ëì¤ë¥¼ ìì±ìì¼ë¼:"
+
+#: index.docbook:861
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "// Imports\n"
+ "\n"
+ "public class EventManagerServlet extends HttpServlet {\n"
+ "\n"
+ " // Servlet code\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "// Imports\n"
+ "\n"
+ "public class EventManagerServlet extends HttpServlet {\n"
+ "\n"
+ " // Servlet code\n"
+ "}]]>"
+
+#: index.docbook:863
+msgid "The servlet handles HTTP <literal>GET</literal> requests only, hence, the method we implement is <literal>doGet()</literal>:"
+msgstr "ìë¸ë¦¿ì HTTP <literal>GET</literal> ìì²ë¤ ë§ì ì²ë¦¬íë¯ë¡, ì°ë¦¬ê° 구ííë ë©ìëë <literal>doGet()</literal>ì´ë¤:"
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[protected void doGet(HttpServletRequest request,\n"
+ " HttpServletResponse response)\n"
+ " throws ServletException, IOException {\n"
+ "\n"
+ " SimpleDateFormat dateFormatter = new SimpleDateFormat(\"dd.MM.yyyy\");\n"
+ "\n"
+ " try {\n"
+ " // Begin unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // Process request and render page...\n"
+ "\n"
+ " // End unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().commit();\n"
+ "\n"
+ " } catch (Exception ex) {\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().rollback();\n"
+ " throw new ServletException(ex);\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[protected void doGet(HttpServletRequest request,\n"
+ " HttpServletResponse response)\n"
+ " throws ServletException, IOException {\n"
+ "\n"
+ " SimpleDateFormat dateFormatter = new SimpleDateFormat(\"dd.MM.yyyy\");\n"
+ "\n"
+ " try {\n"
+ " // Begin unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // Process request and render page...\n"
+ "\n"
+ " // End unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().commit();\n"
+ "\n"
+ " } catch (Exception ex) {\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().rollback();\n"
+ " throw new ServletException(ex);\n"
+ " }\n"
+ "\n"
+ "}]]>"
+
+#: index.docbook:870
+msgid "The pattern we are applying here is called <emphasis>session-per-request</emphasis>. When a request hits the servlet, a new Hibernate <literal>Session</literal> is opened through the first call to <literal>getCurrentSession()</literal> on the <literal>SessionFactory</literal>. Then a database transaction is started—all data access as to occur inside a transaction, no matter if data is read or written (we don't use the auto-commit mode in applications)."
+msgstr "ì°ë¦¬ê° ì¬ê¸°ì ì ì©íë í¨í´ì <emphasis>session-per-request</emphasis>ì´ë¤. íëì ìì²ì´ ìë¸ë¦¿ì ëë¬í ë, íëì ìë¡ì´ Hibernate <literal>Session</literal>ì´ <literal>SessionFactory</literal> ìì <literal>getCurrentSession()</literal>ì ëí 첫ë²ì§¸ í¸ì¶ì íµí´ ì´ë¦°ë¤. ê·¸ë íëì ë°ì´í°ë² ì´ì¤ í¸ëìì
ì´ ììëê³ , 모ë ë°ì´í° ì ê·¼ì´ íëì í¸ëìì
ë´ìì ë°ìíë í, ë°ì´í°ê° ì½íì§ê±°ë 기ë¡ëëë° ë¬¸ì ê° ìë¤(ì°ë¦¬ë ì´í리ì¼ì´ì
ë¤ ë´ìì auto-commit 모ë를 ì¬ì©íì§ ìëë¤)."
+
+#: index.docbook:879
+msgid "Do <emphasis>not</emphasis> use a new Hibernate <literal>Session</literal> for every database operation. Use one Hibernate <literal>Session</literal> that is scoped to the whole request. Use <literal>getCurrentSession()</literal>, so that it is automatically bound to the current Java thread."
+msgstr "모ë ë°ì´í°ë² ì´ì¤ ì¤í¼ë ì´ì
ê°ê°ì ëí´ ìë¡ì´ Hibernate <literal>Session</literal>ì ì¬ì©íì§ <emphasis>ë§ë¼</emphasis>. ì ì²´ ìì²ì ëí´ ììì§ìì§ í ê°ì Hibernate <literal>Session</literal>ì ì¬ì©íë¼. ê·¸ê²ì´ ìëì ì¼ë¡ íì¬ì ìë° ì°ë ëì ë°ì¸ëëëë¡ <literal>getCurrentSession()</literal>ì ì¬ì©íë¼."
+
+#: index.docbook:886
+msgid "Next, the possible actions of the request are processed and the response HTML is rendered. We'll get to that part soon."
+msgstr "ë¤ìì¼ë¡, ìì²ì ê°ë¥í ì¡ì
ë¤ì´ ì²ë¦¬ëê³ ìëµ HTMLì´ ë ëë§ëë¤. ì°ë¦¬ë ê³§ì¥ ê·¸ë¶ë¶ì¼ë¡ ê° ê²ì´ë¤."
+
+#: index.docbook:891
+msgid "Finally, the unit of work ends when processing and rendering is complete. If any problem occured during processing or rendering, an exception will be thrown and the database transaction rolled back. This completes the <literal>session-per-request</literal> pattern. Instead of the transaction demarcation code in every servlet you could also write a servlet filter. See the Hibernate website and Wiki for more information about this pattern, called <emphasis>Open Session in View</emphasis>—you'll need it as soon as you consider rendering your view in JSP, not in a servlet."
+msgstr "ë§ì§ë§ì¼ë¡, íë¡ì¸ì±ê³¼ ë ëë§ì´ ìë£ë ë ìì
ë¨ìê° ì¢
ë£ëë¤. ë§ì¼ ì´ë¤ 문ì ê° íë¡ì¸ì±ê³¼ ë ëë§ ëìì ë°ìë ê²½ì°, íëì ìì¸ìí©ì´ ëì ¸ì§ ê²ì´ê³ ë°ì´í°ë² ì´ì¤ í¸ëìì
ì 롤백ë ê²ì´ë¤. ì´ê²ì <literal>session-per-request</literal>ì ìë£ìí¨ë¤. 모ë ìë¸ë¦¿ ë´ì ìë í¸ëìì
구í ì½ë ëì ì ë¹ì ì ëí ìë¸ë¦¿ íí°ë¥¼ ì¬ì©í ì ìë¤. <emphasis>Open Session in View</emphasis>ë¡ ëª
ëª
ëë ì´ í¨í´ì ëí ì¶ê° ì ë³´ë Hibernate ì¹ ì¬ì´í¸ì ìí¤ë¥¼ ë³´ë¼. ë¹ì ì ìë¸ë¦¿ ë´ììê° ìë JSP ë´ì ë¹ì ì 뷰를 ë ëë§íë ê²ì ê³ ë ¤í ë ê·¸ê²ì íìë¡ í ê²ì´ë¤."
+
+#: index.docbook:905
+msgid "Processing and rendering"
+msgstr "íë¡ì¸ì±ê³¼ ë ëë§"
+
+#: index.docbook:907
+msgid "Let's implement the processing of the request and rendering of the page."
+msgstr "ìì²ì ì²ë¦¬ì íì´ì§ì ë ëë§ì 구ííì."
+
+#: index.docbook:911
+msgid ""
+ "<![CDATA[// Write HTML header\n"
+ "PrintWriter out = response.getWriter();\n"
+ "out.println(\"<html><head><title>Event Manager</title></head><body>\");\n"
+ "\n"
+ "// Handle actions\n"
+ "if ( \"store\".equals(request.getParameter(\"action\")) ) {\n"
+ "\n"
+ " String eventTitle = request.getParameter(\"eventTitle\");\n"
+ " String eventDate = request.getParameter(\"eventDate\");\n"
+ "\n"
+ " if ( \"\".equals(eventTitle) || \"\".equals(eventDate) ) {\n"
+ " out.println(\"<b><i>Please enter event title and date.</i></b>\");\n"
+ " } else {\n"
+ " createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));\n"
+ " out.println(\"<b><i>Added event.</i></b>\");\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "// Print page\n"
+ "printEventForm(out);\n"
+ "listEvents(out, dateFormatter);\n"
+ "\n"
+ "// Write HTML footer\n"
+ "out.println(\"</body></html>\");\n"
+ "out.flush();\n"
+ "out.close();]]>"
+msgstr ""
+ "<![CDATA[// Write HTML header\n"
+ "PrintWriter out = response.getWriter();\n"
+ "out.println(\"<html><head><title>Event Manager</title></head><body>\");\n"
+ "\n"
+ "// Handle actions\n"
+ "if ( \"store\".equals(request.getParameter(\"action\")) ) {\n"
+ "\n"
+ " String eventTitle = request.getParameter(\"eventTitle\");\n"
+ " String eventDate = request.getParameter(\"eventDate\");\n"
+ "\n"
+ " if ( \"\".equals(eventTitle) || \"\".equals(eventDate) ) {\n"
+ " out.println(\"<b><i>Please enter event title and date.</i></b>\");\n"
+ " } else {\n"
+ " createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));\n"
+ " out.println(\"<b><i>Added event.</i></b>\");\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "// Print page\n"
+ "printEventForm(out);\n"
+ "listEvents(out, dateFormatter);\n"
+ "\n"
+ "// Write HTML footer\n"
+ "out.println(\"</body></html>\");\n"
+ "out.flush();\n"
+ "out.close();]]>"
+
+#: index.docbook:913
+msgid "Granted, this coding style with a mix of Java and HTML would not scale in a more complex application—keep in mind that we are only illustrating basic Hibernate concepts in this tutorial. The code prints an HTML header and a footer. Inside this page, an HTML form for event entry and a list of all events in the database are printed. The first method is trivial and only outputs HTML:"
+msgstr "Javaì HTMLì´ í¼í©ë ì´ ì½ë©ì´ ë³´ë¤ ë³µì¡í ì´í리ì¼ì´ì
ìì 기ì¤ì´ ë ì ìë¤ í ì§ë¼ë, ì°ë¦¬ë ë¨ì§ ì´ íí ë¦¬ì¼ ë´ìì 기본 Hibernate ê°ë
ë¤ì ì¤ëª
íê³ ììì ì¼ëì ëë¼. ì½ëë íëì HTML í¤ëì íëì footer를 í린í¸íë¤. ì´ íì´ì§ ë´ì ì´ë²¤í¸ ìí¸ë¦¬ë¥¼ ìí íëì HTML formê³¼ ë°ì´í°ë² ì´ì¤ ë´ì ìë 모ë ì´ë²¤í¸ë¤ì 목ë¡ì´ í린í¸ëë¤. 첫 ë²ì§¸ ë©ìëë ìíì ì´ê³ ì¤ì§ HTMLì ì¶ë ¥íë¤:"
+
+#: index.docbook:922
+msgid ""
+ "<![CDATA[private void printEventForm(PrintWriter out) {\n"
+ " out.println(\"<h2>Add new event:</h2>\");\n"
+ " out.println(\"<form>\");\n"
+ " out.println(\"Title: <input name='eventTitle' length='50'/><br/>\");\n"
+ " out.println(\"Date (e.g. 24.12.2009): <input name='eventDate' length='10'/><br/>\");\n"
+ " out.println(\"<input type='submit' name='action' value='store'/>\");\n"
+ " out.println(\"</form>\");\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private void printEventForm(PrintWriter out) {\n"
+ " out.println(\"<h2>Add new event:</h2>\");\n"
+ " out.println(\"<form>\");\n"
+ " out.println(\"Title: <input name='eventTitle' length='50'/><br/>\");\n"
+ " out.println(\"Date (e.g. 24.12.2009): <input name='eventDate' length='10'/><br/>\");\n"
+ " out.println(\"<input type='submit' name='action' value='store'/>\");\n"
+ " out.println(\"</form>\");\n"
+ "}]]>"
+
+#: index.docbook:924
+msgid "The <literal>listEvents()</literal> method uses the Hibernate <literal>Session</literal> bound to the current thread to execute a query:"
+msgstr "<literal>listEvents()</literal> ë©ìëë íëì ì§ì를 ì¤íí기 ìí´ì íì¬ì ì°ë ëì ê²°í©ë Hibernate <literal>Session</literal>ì ì¬ì©íë¤:"
+
+#: index.docbook:930
+msgid ""
+ "<![CDATA[private void listEvents(PrintWriter out, SimpleDateFormat dateFormatter) {\n"
+ "\n"
+ " List result = HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().createCriteria(Event.class).list();\n"
+ " if (result.size() > 0) {\n"
+ " out.println(\"<h2>Events in database:</h2>\");\n"
+ " out.println(\"<table border='1'>\");\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<th>Event title</th>\");\n"
+ " out.println(\"<th>Event date</th>\");\n"
+ " out.println(\"</tr>\");\n"
+ " for (Iterator it = result.iterator(); it.hasNext();) {\n"
+ " Event event = (Event) it.next();\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<td>\" + event.getTitle() + \"</td>\");\n"
+ " out.println(\"<td>\" + dateFormatter.format(event.getDate()) + \"</td>\");\n"
+ " out.println(\"</tr>\");\n"
+ " }\n"
+ " out.println(\"</table>\");\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[private void listEvents(PrintWriter out, SimpleDateFormat dateFormatter) {\n"
+ "\n"
+ " List result = HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().createCriteria(Event.class).list();\n"
+ " if (result.size() > 0) {\n"
+ " out.println(\"<h2>Events in database:</h2>\");\n"
+ " out.println(\"<table border='1'>\");\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<th>Event title</th>\");\n"
+ " out.println(\"<th>Event date</th>\");\n"
+ " out.println(\"</tr>\");\n"
+ " for (Iterator it = result.iterator(); it.hasNext();) {\n"
+ " Event event = (Event) it.next();\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<td>\" + event.getTitle() + \"</td>\");\n"
+ " out.println(\"<td>\" + dateFormatter.format(event.getDate()) + \"</td>\");\n"
+ " out.println(\"</tr>\");\n"
+ " }\n"
+ " out.println(\"</table>\");\n"
+ " }\n"
+ "}]]>"
+
+#: index.docbook:932
+msgid "Finally, the <literal>store</literal> action is dispatched to the <literal>createAndStoreEvent()</literal> method, which also uses the <literal>Session</literal> of the current thread:"
+msgstr "ë§ì§ë§ì¼ë¡, <literal>store</literal> ì¡ì
ì <literal>createAndStoreEvent()</literal> ë©ìëë¡ ëì¤í¨ì¹ëë¤. ê·¸ê²ì íì¬ ì°ë ëì <literal>Session</literal>ì ì¬ì©íë¤:"
+
+#: index.docbook:938
+msgid ""
+ "<![CDATA[protected void createAndStoreEvent(String title, Date theDate) {\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().save(theEvent);\n"
+ "}]]>"
+msgstr ""
+ "<![CDATA[protected void createAndStoreEvent(String title, Date theDate) {\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().save(theEvent);\n"
+ "}]]>"
+
+#: index.docbook:940
+msgid "That's it, the servlet is complete. A request to the servlet will be processed in a single <literal>Session</literal> and <literal>Transaction</literal>. As earlier in the standalone application, Hibernate can automatically bind these ojects to the current thread of execution. This gives you the freedom to layer your code and access the <literal>SessionFactory</literal> in any way you like. Usually you'd use a more sophisticated design and move the data access code into data access objects (the DAO pattern). See the Hibernate Wiki for more examples."
+msgstr "ì¦ ìë¸ë¦¿ì´ ìì±ëë¤. ìë¸ë¦¿ì ëí ìì²ì íëì ë¨ì¼ <literal>Session</literal>ê³¼ <literal>Transaction</literal> ë´ìì ì²ë¦¬ë ê²ì´ë¤. ì´ì ì²ë¼ ì¤í ëì¼ë¡ ì´í리ì¼ì´ì
ìì, Hibernateë ì´ë¤ ê°ì²´ë¤ì ì¤í ì¤ì¸ íì¬ ì°ë ëì ìëì ì¼ë¡ ë°ì¸ëìí¬ ì ìë¤. ì´ê²ì ë¹ì ì ì½ë를 ê³ì¸µí ìí¤ê³ ë¹ì ì´ ì¢ìíë ììì ë°©ë²ì¼ë¡ <literal>SessionFactory</literal>ì ì ê·¼íë ìì 를 ë¹ì ìê² ë¶ì¬íë¤. ëê° ë¹ì ì ë³´ë¤ ì¸ë ¨ë ì¤ê³ë¥¼ ì¬ì©í ê²ì´ê³ ë°ì´í° ì ê·¼ ì½ë를 ë°ì´í° ì ê·¼ ê°ì²´ë¤ ë´ë¡ ì´ëìí¬ ê²ì´ë¤(DAO í¨í´). ì¶ê° ìì ë¤ì Hibernate ìí¤ë¥¼ ë³´ë¼."
+
+#: index.docbook:954
+msgid "Deploying and testing"
+msgstr "ë°°ì¹í기 ê·¸ë¦¬ê³ í
ì¤í¸í기"
+
+#: index.docbook:956
+msgid "To deploy this application you have to create a web archive, a WAR. Add the following Ant target to your <literal>build.xml</literal>:"
+msgstr "ì´ ì´í리ì¼ì´ì
ì ë°°ì¹í기 ìí´ì ë¹ì ì íëì ì¹ ìì¹´ì´ë¸, WAR를 ìì±ìì¼ì¼ íë¤. ë¤ì Ant targetì ë¹ì ì <literal>build.xml</literal> ë´ì ì¶ê°íë¼:"
+
+#: index.docbook:961
+msgid ""
+ "<![CDATA[<target name=\"war\" depends=\"compile\">\n"
+ " <war destfile=\"hibernate-tutorial.war\" webxml=\"web.xml\">\n"
+ " <lib dir=\"${librarydir}\">\n"
+ " <exclude name=\"jsdk*.jar\"/>\n"
+ " </lib>\n"
+ "\n"
+ " <classes dir=\"${targetdir}\"/>\n"
+ " </war>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"war\" depends=\"compile\">\n"
+ " <war destfile=\"hibernate-tutorial.war\" webxml=\"web.xml\">\n"
+ " <lib dir=\"${librarydir}\">\n"
+ " <exclude name=\"jsdk*.jar\"/>\n"
+ " </lib>\n"
+ "\n"
+ " <classes dir=\"${targetdir}\"/>\n"
+ " </war>\n"
+ "</target>]]>"
+
+#: index.docbook:963
+msgid "This target creates a file called <literal>hibernate-tutorial.war</literal> in your project directory. It packages all libraries and the <literal>web.xml</literal> descriptor, which is expected in the base directory of your project:"
+msgstr "ì´ targetì ë¹ì ì íë¡ì í¸ ëë í 리 ë´ì <literal>hibernate-tutorial.war</literal>ë¡ ëª
ëª
ë íëì íì¼ì ìì±ìí¨ë¤. ê·¸ê²ì ë¹ì ì íë¡ì í¸ì 기본 ëë í 리 ë´ì 기ëëë 모ë ë¼ì´ë¸ë¬ë¦¬ë¤ê³¼ <literal>web.xml</literal> ëì¤í¬ë¦½í°ë¥¼ í¨í¤ì§íë¤:"
+
+#: index.docbook:969
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<web-app version=\"2.4\"\n"
+ " xmlns=\"http://java.sun.com/xml/ns/j2ee\"\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ " xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">\n"
+ "\n"
+ " <servlet>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <servlet-class>events.EventManagerServlet</servlet-class>\n"
+ " </servlet>\n"
+ "\n"
+ " <servlet-mapping>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <url-pattern>/eventmanager</url-pattern>\n"
+ " </servlet-mapping>\n"
+ "</web-app>]]>"
+msgstr ""
+ "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<web-app version=\"2.4\"\n"
+ " xmlns=\"http://java.sun.com/xml/ns/j2ee\"\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ " xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">\n"
+ "\n"
+ " <servlet>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <servlet-class>events.EventManagerServlet</servlet-class>\n"
+ " </servlet>\n"
+ "\n"
+ " <servlet-mapping>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <url-pattern>/eventmanager</url-pattern>\n"
+ " </servlet-mapping>\n"
+ "</web-app>]]>"
+
+#: index.docbook:971
+msgid "Before you compile and deploy the web application, note that an additional library is required: <literal>jsdk.jar</literal>. This is the Java servlet development kit, if you don't have this library already, get it from the Sun website and copy it to your library directory. However, it will be only used for compliation and excluded from the WAR package."
+msgstr "ë¹ì ì´ ì¹ ì´í리ì¼ì´ì
ì ì»´íì¼íê³ ë°°ì¹í기 ì ì, íëì ë¶ê°ì ì¸ ë¼ì´ë¸ë¬ë¦¬ê° íìí¨ì ë
¸í¸íë¼: <literal>jsdk.jar</literal>. ë¹ì ì´ ì´ë¯¸ ì´ ë¼ì´ë¸ë¬ë¦¬ë¥¼ ê°ê³ ìì§ ìì ê²½ì°, ì´ê²ì Java servlet development kitì´ë©°, Sun ì¹ ì¬ì´í¸ë¡ë¶í° ê·¸ê²ì ì»ì´ì ê·¸ê²ì ë¹ì ì ë¼ì´ë¸ë¬ë¦¬ ëë í 리ì ë³µì¬íë¼. íì§ë§ ê·¸ê²ì ì¤ì§ ì»´íì¼ ììë§ ì¬ì©ë ê²ì´ê³ WAR í¨í¤ì§ììë ì ì¸ëë¤."
+
+#: index.docbook:979
+msgid "To build and deploy call <literal>ant war</literal> in your project directory and copy the <literal>hibernate-tutorial.war</literal> file into your Tomcat <literal>webapp</literal> directory. If you don't have Tomcat installed, download it and follow the installation instructions. You don't have to change any Tomcat configuration to deploy this application though."
+msgstr "ë¹ëíê³ ë°°ì¹í기 ìí´ ë¹ì ì íë¡ì í¸ ëë í 리 ë´ìì <literal>ant war</literal>를 í¸ì¶íê³ <literal>hibernate-tutorial.war</literal> íì¼ì ë¹ì ì Tomcat <literal>webapp</literal> ëë í ë¦¬ë¡ ë³µì¬íë¼. ë§ì¼ ë¹ì ì´ Tomcatì ì¤ì¹íì§ ììë¤ë©´, ê·¸ê²ì ë´ë ¤ë°ì ì¤ì¹ ì§ì¹¨ë¤ì ë°ë¥´ë¼. ë¹ì ì ì´ ì´í리ì¼ì´ì
ì ë°°ì¹í기 ìí´ ììì Tomcat 구ì±ì ë³ê²½íì§ ììì¼ íë¤."
+
+#: index.docbook:987
+msgid "Once deployed and Tomcat is running, access the application at <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal>. Make sure you watch the Tomcat log to see Hibernate initialize when the first request hits your servlet (the static initializer in <literal>HibernateUtil</literal> is called) and to get the detailed output if any exceptions occurs."
+msgstr "ì¼ë¨ ë°°ì¹íê³ Tomcatì´ ì¤íì¤ì´ë©´, <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal>ë¡ ì´í리ì¼ì´ì
ì ì ê·¼íë¼. 첫 ë²ì§¸ ìì²ì´ ë¹ì ì ìë¸ë¦¿ì ëë¬í ë Hibernateê° ì´ê¸°í(<literal>HibernateUtil</literal> ë´ì ìë static initializerê° í¸ì¶ëë¤) ëë ê²ì 보기 ìí´ ê·¸ë¦¬ê³ ë§ì¼ ì´ë¤ ìì¸ìí©ë¤ì´ ë°ìí ê²½ì° ìì¸í ì¶ë ¥ì ì»ê¸° ìí´ì Tomcat ë¡ê·¸ë¥¼ ì§ì¼ë³´ëë¡ íë¼."
+
+#: index.docbook:1000
+msgid "Summary"
+msgstr "<title>ìì½</title>"
+
+#: index.docbook:1002
+msgid "This tutorial covered the basics of writing a simple standalone Hibernate application and a small web application."
+msgstr "ì´ íí 리ì¼ì ê°ë¨í ì¤í ëì¼ë¡ Hibernate ì´í리ì¼ì´ì
ê³¼ íëì ìì ì¹ ì´í리ì¼ì´ì
ì ìì±íë 기ì´ë¥¼ ë¤ë£¨ìë¤."
+
+#: index.docbook:1007
+msgid "If you already feel confident with Hibernate, continue browsing through the reference documentation table of contents for topics you find interesting - most asked are transactional processing (<xref linkend=\"transactions\"/>), fetch performance (<xref linkend=\"performance\"/>), or the usage of the API (<xref linkend=\"objectstate\"/>) and the query features (<xref linkend=\"objectstate-querying\"/>)."
+msgstr "ë§ì¼ ë¹ì ì´ ì´ë¯¸ Hibernateì ìì ì´ ìë¤ê³ ëëë¤ë©´, ë¹ì ì´ í¥ë¯¸ë¥¼ ì°¾ë 주ì ë¤ì ëí 참조 문ì 목차를 ê³ì ë¸ë¼ì°ì§íë¼ - ê°ì¥ ë§ì´ ìì²ëë ê²ì í¸ëìì
ì²ë¦¬(<xref linkend=\"transactions\"/>), íì¹ í¼í¬ë¨¼ì¤(<xref linkend=\"performance\"/>), ëë API ì¬ì©ë²(<xref linkend=\"objectstate\"/>), ê·¸ë¦¬ê³ ì§ì í¹ì§ë¤(<xref linkend=\"objectstate-querying\"/>)ì´ë¤."
+
+#: index.docbook:1015
+msgid "Don't forget to check the Hibernate website for more (specialized) tutorials."
+msgstr "ë ë§ì(í¹íë) íí 리ì¼ë¤ì ëí´ìë Hibernate ì¹ ì¬ì´í¸ë¥¼ ì²´í¬íë ê²ì ìì§ ë§ë¼."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/content/xml.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/content/xml.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/content/xml.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,420 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "XML Mapping"
+msgstr "XML 매í"
+
+#: index.docbook:7
+msgid "Note that this is an experimental feature in Hibernate 3.0 and is under extremely active development."
+msgstr "ì´ê²ì Hibernate3.0ìì ì¤íì ì¸ í¹ì§ì´ê³ ë§¤ì° íëì ì¼ë¡ ê°ë° ì¤ì ììì ë
¸í¸íë¼."
+
+#: index.docbook:13
+msgid "Working with XML data"
+msgstr "XML ë°ì´í°ë¡ ìì
í기"
+
+#: index.docbook:15
+msgid "Hibernate lets you work with persistent XML data in much the same way you work with persistent POJOs. A parsed XML tree can be thought of as just another way to represent the relational data at the object level, instead of POJOs."
+msgstr "Hibernateë ë¹ì ì´ ìì POJOë¤ë¡ ìì
íë ê²ê³¼ ì주 ëì¼í ë°©ë²ì¼ë¡ ìì XML ë°ì´í°ì ìì
íëë¡ í´ì¤ë¤. íì±ë XML í¸ë¦¬ë ë¨ì§ ê°ì²´ ë 벨ìì ê´ê³í ë°ì´í°ë¥¼ ëíë´ë ë ë¤ë¥¸ ë°©ë²ì¼ë¡ ê°ì£¼ë ì ìë¤. íëì íì±ë XML í¸ë¦¬ë POJOë¤ ëì , ê°ì²´ ë 벨ìì ê´ê³í ë°ì´í°ë¥¼ íííë ë¨ì§ ë ë¤ë¥¸ ë°©ë²ì¼ë¡ ê°ì£¼ë ì ìë¤."
+
+#: index.docbook:22
+msgid "Hibernate supports dom4j as API for manipulating XML trees. You can write queries that retrieve dom4j trees from the database and have any modification you make to the tree automatically synchronized to the database. You can even take an XML document, parse it using dom4j, and write it to the database with any of Hibernate's basic operations: <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> (merging is not yet supported)."
+msgstr "Hibernateë XML í¸ë¦¬ë¤ì ì²ë¦¬íë APIë¡ì dom4j를 ì§ìíë¤. ë¹ì ì ë°ì´í°ë² ì´ì¤ë¡ë¶í° dom4j í¸ë¦¬ë¤ì ê²ìíê³ ë¹ì ì´ ê·¸ í¸ë¦¬ë¥¼ ë°ì´í°ë² ì´ì¤ì ìëì ì¼ë¡ ë기íìí¤ê¸° ìí´ ì´ë¤ ë³ê²½ì ííëë¡ íë ì§ìë¤ì ìì±í ì ìë¤. ë¹ì ì ì¬ì§ì´ XML 문ì를 ì·¨íê³ , dom4j를 ì¬ì©íì¬ ê·¸ê²ì íì±íê³ , Hibernateì ë¤ì 기본ì ì¸ ì¤í¼ë ì´ì
ë¤ ì¤ ì´ë¤ ê²ì¼ë¡ì ê·¸ê²ì ë°ì´í°ë² ì´ì¤ì ì ì¥ìí¬ ì ìë¤: <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal>(merging(ë³í©)ì ìì§ ì§ìëì§ ìëë¤)."
+
+#: index.docbook:32
+msgid "This feature has many applications including data import/export, externalization of entity data via JMS or SOAP and XSLT-based reporting."
+msgstr "ì´ í¹ì§ì ë°ì´í° ê°ì ¸ì¤ê¸°/ë´ë³´ë´ê¸°,JMS ëë SOAP ê·¸ë¦¬ê³ XSLT-기ë°ì ë í¬í
ì íµí ìí°í° ë°ì´í°ì 구체í를 í¬í¨íë ë§ì ì´í리ì¼ì´ì
ë¤ì ê°ëë¤."
+
+#: index.docbook:37
+msgid "A single mapping may be used to simultaneously map properties of a class and nodes of an XML document to the database, or, if there is no class to map, it may be used to map just the XML."
+msgstr "íëì 매íì í´ëì¤ë¤ì íë¡í¼í°ë¤ê³¼ XML 문ìì ë
¸ëë¤ì ë°ì´í°ë² ì´ì¤ë¡ ëìì 매íìí¤ëë° ì¬ì©ë ì ìê±°ë, ë§ì¼ 매íí í´ëì¤ê° ì¡´ì¬íì§ ìì ê²½ì°, ê·¸ê²ì ë¨ì§ XMLì 매íìí¤ëë° ì¬ì©ë ìë ìë¤."
+
+#: index.docbook:44
+msgid "Specifying XML and class mapping together"
+msgstr "XMLê³¼ í´ëì¤ ë§¤íì í¨ê» ì§ì í기"
+
+#: index.docbook:46
+msgid "Here is an example of mapping a POJO and XML simultaneously:"
+msgstr "ë¤ìì POJOì XMLì ëìì 매íìí¤ë ìì ì´ë¤ :"
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<class name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"accountId\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <many-to-one name=\"customer\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"accountId\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <many-to-one name=\"customer\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:54
+msgid "Specifying only an XML mapping"
+msgstr "XML 매íë§ì ì§ì í기"
+
+#: index.docbook:56
+msgid "Here is an example where there is no POJO class:"
+msgstr "ë¤ìì POJO í´ëì¤ê° ì¡´ì¬íì§ ìë ìì ì´ë¤:"
+
+#: index.docbook:60
+msgid ""
+ "<![CDATA[<class entity-name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\" \n"
+ " type=\"string\"/>\n"
+ " \n"
+ " <many-to-one name=\"customerId\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\" \n"
+ " entity-name=\"Customer\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\" \n"
+ " type=\"big_decimal\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class entity-name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\" \n"
+ " type=\"string\"/>\n"
+ " \n"
+ " <many-to-one name=\"customerId\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\" \n"
+ " entity-name=\"Customer\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\" \n"
+ " type=\"big_decimal\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:62
+msgid "This mapping allows you to access the data as a dom4j tree, or as a graph of property name/value pairs (java <literal>Map</literal>s). The property names are purely logical constructs that may be referred to in HQL queries."
+msgstr "ì´ ë§¤íì dom4j í¸ë¦¬ë¡ì ëë íë¡í¼í° name/value ìë¤(java <literal>Map</literal>ë¤)ì ê·¸ëíë¡ì ë°ì´í°ì ì ê·¼íë ê²ì ë¹ì ìê² íì©í´ì¤ë¤. íë¡í¼í° ì´ë¦ë¤ì HQL ì§ìë¤ ë´ìì 참조ë ìë ìë ììíê² ë
¼ë¦¬ì ì¸ êµ¬ì¡°ì²´ë¤ì´ë¤."
+
+#: index.docbook:73
+msgid "XML mapping metadata"
+msgstr "XML 매í ë©íë°ì´í°"
+
+#: index.docbook:75
+msgid "Many Hibernate mapping elements accept the <literal>node</literal> attribute. This let's you specify the name of an XML attribute or element that holds the property or entity data. The format of the <literal>node</literal> attribute must be one of the following:"
+msgstr "ë§ì Hibernate 매í ììë¤ì <literal>node</literal> ìì±ì ìì©íë¤. ì´ê²ì ë¹ì ì´ íë¡í¼í° ëë ìí°í° ë°ì´í°ë¥¼ ìì íë XML ìì±ì´ë ììì ì´ë¦ì ì§ì íëë¡ íë¤. <literal>node</literal> ìì±ì í¬ë§·ì ë¤ì ì¤ íëì´ì´ì¼ íë¤:"
+
+#: index.docbook:84
+msgid "<literal>\"element-name\"</literal> - map to the named XML element"
+msgstr "<literal>\"element-name\"</literal> - ëª
ëª
ë XML ììë¡ ë§¤íìí¨ë¤"
+
+#: index.docbook:87
+msgid "<literal>\"@attribute-name\"</literal> - map to the named XML attribute"
+msgstr "<literal>\"@attribute-name\"</literal> - ëª
ëª
ë XML ìì±ì¼ë¡ 매íìí¨ë¤"
+
+#: index.docbook:90
+msgid "<literal>\".\"</literal> - map to the parent element"
+msgstr "<literal>\".\"</literal> - ë¶ëª¨ ììë¡ ë§¤í ìí¨ë¤"
+
+#: index.docbook:93
+msgid "<literal>\"element-name/@attribute-name\"</literal> - map to the named attribute of the named element"
+msgstr "<literal>\"element-name/@attribute-name\"</literal> - ëª
ëª
ë ììì ëª
ëª
ë ìì±ì¼ë¡ 매íìí¨ë¤"
+
+#: index.docbook:100
+msgid "For collections and single valued associations, there is an additional <literal>embed-xml</literal> attribute. If <literal>embed-xml=\"true\"</literal>, the default, the XML tree for the associated entity (or collection of value type) will be embedded directly in the XML tree for the entity that owns the association. Otherwise, if <literal>embed-xml=\"false\"</literal>, then only the referenced identifier value will appear in the XML for single point associations and collections will simply not appear at all."
+msgstr "ì½ë ì
ë¤ê³¼ ë¨ì¼ ê° ì½ë ì
ë¤ì ê²½ì°, ì¶ê°ì ì¸ <literal>embed-xml</literal> ìì±ì´ ì¡´ì¬íë¤. ë§ì¼ <literal>embed-xml=\"true\"</literal> ì¼ ê²½ì°, ì°ê´ë ìí°í°(ëë value íì
ì ê°ì§ ì½ë ì
)ì ëí ëí´í¸ XML í¸ë¦¬ë ê·¸ ì°ê´ì ìì íë ìí°í°ì ëí XML í¸ë¦¬ ìì ì§ì ì½ì
ë ê²ì´ë¤. ê·¸ ë°ì ê²½ì° <literal>embed-xml=\"false\"</literal> ì¼ ê²½ì°, 참조ë ìë³ì ê° ë§ì´ ë¨ì¼ í¬ì¸í¸ ì°ê´ë¤ì ëí´ ëíë ê²ì´ê³ ì½ë ì
ë¤ì ë¨ìí ì í ëíëì§ ìì ê²ì´ë¤."
+
+#: index.docbook:110
+msgid "You should be careful not to leave <literal>embed-xml=\"true\"</literal> for too many associations, since XML does not deal well with circularity!"
+msgstr "ë¹ì ì ë무 ë§ì ì°ê´ë¤ì ëí´ <literal>embed-xml=\"true\"</literal>ë¡ ë¨ê²¨ëì§ ë§ëë¡ ì£¼ìí´ì¼ íë¤. ìëíë©´ XMLì´ ìíì ì¼ë¡ ì ì²ë¦¬íì§ ëª»í기 ë문ì´ë¤!"
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Customer\" \n"
+ " table=\"CUSTOMER\" \n"
+ " node=\"customer\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"CUST_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <map name=\"accounts\" \n"
+ " node=\".\" \n"
+ " embed-xml=\"true\">\n"
+ " <key column=\"CUSTOMER_ID\" \n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"SHORT_DESC\" \n"
+ " node=\"@short-desc\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many entity-name=\"Account\"\n"
+ " embed-xml=\"false\" \n"
+ " node=\"account\"/>\n"
+ " </map>\n"
+ " \n"
+ " <component name=\"name\" \n"
+ " node=\"name\">\n"
+ " <property name=\"firstName\" \n"
+ " node=\"first-name\"/>\n"
+ " <property name=\"initial\" \n"
+ " node=\"initial\"/>\n"
+ " <property name=\"lastName\" \n"
+ " node=\"last-name\"/>\n"
+ " </component>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\" \n"
+ " table=\"CUSTOMER\" \n"
+ " node=\"customer\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"CUST_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <map name=\"accounts\" \n"
+ " node=\".\" \n"
+ " embed-xml=\"true\">\n"
+ " <key column=\"CUSTOMER_ID\" \n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"SHORT_DESC\" \n"
+ " node=\"@short-desc\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many entity-name=\"Account\"\n"
+ " embed-xml=\"false\" \n"
+ " node=\"account\"/>\n"
+ " </map>\n"
+ " \n"
+ " <component name=\"name\" \n"
+ " node=\"name\">\n"
+ " <property name=\"firstName\" \n"
+ " node=\"first-name\"/>\n"
+ " <property name=\"initial\" \n"
+ " node=\"initial\"/>\n"
+ " <property name=\"lastName\" \n"
+ " node=\"last-name\"/>\n"
+ " </component>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+
+#: index.docbook:117
+msgid "in this case, we have decided to embed the collection of account ids, but not the actual account data. The following HQL query:"
+msgstr "ì´ ê²½ì°ì, ì°ë¦¬ë ì¤ì account ë°ì´í°ê° ìë, account idë¤ì ê°ì§ ì½ë ì
ì ì½ì
ìí¤ê¸°ë¡ ê²°ì íë¤. ë¤ì HQL ì§ì:"
+
+#: index.docbook:122
+msgid "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
+msgstr "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
+
+#: index.docbook:124
+msgid "Would return datasets such as this:"
+msgstr "ë ë¤ìê³¼ ê°ì ë°ì´í°ì
ë¤ì ë°íí ê²ì´ë¤:"
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account short-desc=\"Savings\">987632567</account>\n"
+ " <account short-desc=\"Credit Card\">985612323</account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account short-desc=\"Savings\">987632567</account>\n"
+ " <account short-desc=\"Credit Card\">985612323</account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+
+#: index.docbook:130
+msgid "If you set <literal>embed-xml=\"true\"</literal> on the <literal><one-to-many></literal> mapping, the data might look more like this:"
+msgstr "ë§ì¼ ë¹ì ì´ <literal><one-to-many></literal> 매íì ëí´ <literal>embed-xml=\"true\"</literal>를 ì¤ì í ê²½ì°, ë°ì´í°ë ë¤ìê³¼ ê°ì´ ë³´ì¼ ìë ìë¤:"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account id=\"987632567\" short-desc=\"Savings\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>100.29</balance>\n"
+ " </account>\n"
+ " <account id=\"985612323\" short-desc=\"Credit Card\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>-2370.34</balance>\n"
+ " </account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account id=\"987632567\" short-desc=\"Savings\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>100.29</balance>\n"
+ " </account>\n"
+ " <account id=\"985612323\" short-desc=\"Credit Card\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>-2370.34</balance>\n"
+ " </account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+
+#: index.docbook:141
+msgid "Manipulating XML data"
+msgstr "XML ë°ì´í° ì²ë¦¬í기"
+
+#: index.docbook:143
+msgid "Let's rearead and update XML documents in the application. We do this by obtaining a dom4j session:"
+msgstr "ì°ë¦¬ì ì´í리ì¼ì´ì
ë´ìì XML 문ìë¤ì ë¤ì ì½ì´ë¤ì´ê³ ì
ë°ì´í¸ ìí¤ì. ì°ë¦¬ë dom4j ì¸ì
ì ì»ì´ì ì´ê²ì ííë¤:"
+
+#: index.docbook:148
+msgid ""
+ "<![CDATA[Document doc = ....;\n"
+ " \n"
+ "Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "List results = dom4jSession\n"
+ " .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")\n"
+ " .list();\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " //add the customer data to the XML document\n"
+ " Element customer = (Element) results.get(i);\n"
+ " doc.add(customer);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Document doc = ....;\n"
+ " \n"
+ "Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "List results = dom4jSession\n"
+ " .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")\n"
+ " .list();\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " //add the customer data to the XML document\n"
+ " Element customer = (Element) results.get(i);\n"
+ " doc.getRootElement().add(customer);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " Element customer = (Element) results.get(i);\n"
+ " //change the customer name in the XML and database\n"
+ " Element name = customer.element(\"name\");\n"
+ " name.element(\"first-name\").setText(firstName);\n"
+ " name.element(\"initial\").setText(initial);\n"
+ " name.element(\"last-name\").setText(lastName);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+ "<![CDATA[Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " Element customer = (Element) results.get(i);\n"
+ " //change the customer name in the XML and database\n"
+ " Element name = customer.element(\"name\");\n"
+ " name.element(\"first-name\").setText(firstName);\n"
+ " name.element(\"initial\").setText(initial);\n"
+ " name.element(\"last-name\").setText(lastName);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+
+#: index.docbook:152
+msgid "It is extremely useful to combine this feature with Hibernate's <literal>replicate()</literal> operation to implement XML-based data import/export."
+msgstr "XML 기ë°ì ë°ì´í° ê°ì ¸ì¤ê¸°/ë´ë³´ë´ê¸°ë¥¼ 구ííëë° ì´ í¹ì§ê³¼ Hibernateì <literal>replicate()</literal> ì¤í¼ë ì´ì
ì ê²°í©ìí¤ë ê²ì´ ë§¤ì° ì ì©íë¤."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/ko-KR/legal_notice.po
===================================================================
--- core/trunk/documentation/manual/translations/ko-KR/legal_notice.po (rev 0)
+++ core/trunk/documentation/manual/translations/ko-KR/legal_notice.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,48 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Legal Notice"
+msgstr "Legal Notice"
+
+#: index.docbook:22
+msgid "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+msgstr "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+
+#: index.docbook:31
+msgid "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+msgstr "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+
+#: index.docbook:34
+msgid "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+msgstr "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+
+#: index.docbook:37
+msgid "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+msgstr "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+
+#: index.docbook:40
+msgid "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+msgstr "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+
+#: index.docbook:43
+msgid "All other trademarks referenced herein are the property of their respective owners."
+msgstr "All other trademarks referenced herein are the property of their respective owners."
+
+#: index.docbook:46
+msgid "The GPG fingerprint of the security at redhat.com key is:"
+msgstr "The GPG fingerprint of the security at redhat.com key is:"
+
+#: index.docbook:49
+msgid "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+msgstr "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/Hibernate_Reference.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/Hibernate_Reference.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/Hibernate_Reference.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,24 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:26
+msgid "HIBERNATE - Relational Persistence for Idiomatic Java"
+msgstr "HIBERNATE - Relational Persistence for Idiomatic Java"
+
+#: index.docbook:27
+msgid "Hibernate Reference Documentation"
+msgstr "Documentação da Referência do Hibernate"
+
+#: index.docbook:41
+msgid "©rightHolder;"
+msgstr "©rightHolder;"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/architecture.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/architecture.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/architecture.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,216 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Architecture"
+msgstr "Arquitetura"
+
+#: index.docbook:24
+msgid "Overview"
+msgstr "Visão Geral"
+
+#: index.docbook:26
+msgid "A (very) high-level view of the Hibernate architecture:"
+msgstr "Uma visão bem ampla da arquitetura do Hibernate:"
+
+#: index.docbook:39
+msgid "This diagram shows Hibernate using the database and configuration data to provide persistence services (and persistent objects) to the application."
+msgstr "Esse diagrama mostra o Hibernate usando o banco de dados e a configuração de dados para prover persistência de serviços (e persistência de objetos) para o aplicativo."
+
+#: index.docbook:44
+msgid "We would like to show a more detailed view of the runtime architecture. Unfortunately, Hibernate is flexible and supports several approaches. We will show the two extremes. The \"lite\" architecture has the application provide its own JDBC connections and manage its own transactions. This approach uses a minimal subset of Hibernate's APIs:"
+msgstr "Nós gostarÃamos de mostrar uma visão mais detalhada da arquitetura em execução. Infelizmente, o Hibernate é muito flexÃvel e suporta várias aproximações. Nós iremos mostrar os dois extremos. Na arquitetura mais simples o aplicativo fornece suas próprias conexões JDBC e gerencia suas transações. Esta abordagem usa o mÃnimo de subconjuntos das APIs do Hibernate:"
+
+#: index.docbook:61
+msgid "The \"full cream\" architecture abstracts the application away from the underlying JDBC/JTA APIs and lets Hibernate take care of the details."
+msgstr "A arquitetura \"completa\" abstrai a aplicação de ter de lidar diretamente com JDBC/JTA e APIs e deixa o Hibernate tomar conta dos detalhes."
+
+#: index.docbook:75
+msgid "Heres some definitions of the objects in the diagrams:"
+msgstr "Algumas definições dos objetos do diagrama:"
+
+#: index.docbook:80
+msgid "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+msgstr "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+
+#: index.docbook:82
+msgid "A threadsafe (immutable) cache of compiled mappings for a single database. A factory for <literal>Session</literal> and a client of <literal>ConnectionProvider</literal>. Might hold an optional (second-level) cache of data that is reusable between transactions, at a process- or cluster-level."
+msgstr "Um cache threadsafe (imutáveis) composto de identidades compiladas para um único banco de dados. Uma fabrica para <literal>Session</literal> e um cliente de <literal>ConnectionProvider</literal>. Pode conter um cachê opcional de dados (segundo nÃvel) reutilizáveis entre transações, no nÃvel de processo- ou cluster."
+
+#: index.docbook:92
+msgid "Session (<literal>org.hibernate.Session</literal>)"
+msgstr "Session (<literal>org.hibernate.Session</literal>)"
+
+#: index.docbook:94
+msgid "A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC connection. Factory for <literal>Transaction</literal>. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier."
+msgstr "Objeto single-threaded, de vida curta, representando uma conversação entre o aplicativo e o armazenamento persistente. Cria uma camada sobre uma conexão JDBC. à uma fabrica de <literal>Transaction</literal>. Possui um cachê obrigatório (primeiro nÃvel) de objetos persistentes, usado para navegação no gráficos de objetos e pesquisa de objetos pelo identificador."
+
+#: index.docbook:104
+msgid "Persistent objects and collections"
+msgstr "Objetos persistentes e coleções"
+
+#: index.docbook:106
+msgid "Short-lived, single threaded objects containing persistent state and business function. These might be ordinary JavaBeans/POJOs, the only special thing about them is that they are currently associated with (exactly one) <literal>Session</literal>. As soon as the <literal>Session</literal> is closed, they will be detached and free to use in any application layer (e.g. directly as data transfer objects to and from presentation)."
+msgstr "Objetos, de vida curta, single threaded contendo estado persistente e função de negócios. Esses podem ser JavaBeans/POJOs, onde única coisa especial sobre eles é que são associados a (exatamente uma) <literal>Session</literal>. Quando a <literal>Session</literal> é fechada, eles são separados e liberados para serem usados dentro de qualquer camada da aplicacao (Ex. diretamente como data transfer objects de e para a camada de apresentação)"
+
+#: index.docbook:117
+msgid "Transient and detached objects and collections"
+msgstr "Objetos e coleções desatachados e transientes"
+
+#: index.docbook:119
+msgid "Instances of persistent classes that are not currently associated with a <literal>Session</literal>. They may have been instantiated by the application and not (yet) persisted or they may have been instantiated by a closed <literal>Session</literal>."
+msgstr "Instâncias de classes persistentes que ainda não estão associadas a uma <literal>Session</literal>. Eles podem ter sido instanciados pela aplicação e não persistido (ainda) ou eles foram instanciados por uma <literal>Session</literal> que foi encerrada."
+
+#: index.docbook:128
+msgid "Transaction (<literal>org.hibernate.Transaction</literal>)"
+msgstr "Transaction (<literal>org.hibernate.Transaction</literal>)"
+
+#: index.docbook:130
+msgid "(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. Abstracts application from underlying JDBC, JTA or CORBA transaction. A <literal>Session</literal> might span several <literal>Transaction</literal>s in some cases. However, transaction demarcation, either using the underlying API or <literal>Transaction</literal>, is never optional!"
+msgstr "(Opcional) Objeto de vida curta, single threaded, usado pela aplicação para especificar unidades atômicas de trabalho. Abstrai o aplicativo de lidar diretamente com transações JDBC, JTA ou CORBA. Uma <literal>Session</literal> pode, em alguns casos, iniciar várias <literal>Transaction</literal>s. Entretanto, a demarcação da transação, mesmo utilizando API ou Transaction subjacentes, nunca é opcional!"
+
+#: index.docbook:141
+msgid "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+msgstr "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+
+#: index.docbook:143
+msgid "(Optional) A factory for (and pool of) JDBC connections. Abstracts application from underlying <literal>Datasource</literal> or <literal>DriverManager</literal>. Not exposed to application, but can be extended/implemented by the developer."
+msgstr "(Opcional) Uma fábrica de (e combinações de) conexões JDBC. Abstrai a aplicação de lidar diretamente com <literal>Datasource</literal> ou <literal>DriverManager</literal>. Não exposto para a aplicação, mas pode ser implementado ou estendido pelo programador."
+
+#: index.docbook:151
+msgid "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+msgstr "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+
+#: index.docbook:153
+msgid "(Optional) A factory for <literal>Transaction</literal> instances. Not exposed to the application, but can be extended/implemented by the developer."
+msgstr "(Opcional) Uma fábrica para instâncias de <literal>Transaction</literal>. Não exposta a aplicação, mas pode ser extendida/implementada pelo programador."
+
+#: index.docbook:160
+msgid "Extension Interfaces"
+msgstr "Extension Interfaces"
+
+#: index.docbook:162
+msgid "Hibernate offers many optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details."
+msgstr "O Hibernate oferece várias opções de interfaces estendidas que você pode implementar para customizar sua camada persistente. Veja a documentação da API para maiores detalhes."
+
+#: index.docbook:171
+msgid "Given a \"lite\" architecture, the application bypasses the <literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or <literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly."
+msgstr "Dada uma arquitetura simples, o aplicativo passa pelas APIs <literal>Transaction</literal>/<literal>TransactionFactory</literal> e/ou <literal>ConnectionProvider</literal> para se comunicar diretamente com a transação JTA ou JDBC."
+
+#: index.docbook:179
+msgid "Instance states"
+msgstr "Estados de instância"
+
+#: index.docbook:180
+msgid "An instance of a persistent classes may be in one of three different states, which are defined with respect to a <emphasis>persistence context</emphasis>. The Hibernate <literal>Session</literal> object is the persistence context:"
+msgstr "Uma instância de classes persistentes pode estar em um dos três diferentes estados, que são definidos respeitando um <emphasis>contexto persistente</emphasis>. O objeto <literal>Session</literal> do Hibernate é o contexto persistente:"
+
+#: index.docbook:188
+msgid "transient"
+msgstr "transiente"
+
+#: index.docbook:190
+msgid "The instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value)."
+msgstr "A instância não é, e nunca foi associada com nenhum contexto persistente. Não possui uma identidade persistente (valor de chave primária)."
+
+#: index.docbook:198
+msgid "persistent"
+msgstr "persistente"
+
+#: index.docbook:200
+msgid "The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, Hibernate <emphasis>guarantees</emphasis> that persistent identity is equivalent to Java identity (in-memory location of the object)."
+msgstr "A instância está atualmente associada a um contexto persistente. Possui uma identidade persistente (valor de chave primária) e, talvez, correspondente a um registro no banco de dados. Para um contexto persistente em particular, o Hibernate <emphasis>guarantees</emphasis> que a identidade persistente é equivalente a identidade Java (na localização em memória do objeto)."
+
+#: index.docbook:212
+msgid "detached"
+msgstr "desatachado"
+
+#: index.docbook:214
+msgid "The instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corrsponding row in the database. For detached instances, Hibernate makes no guarantees about the relationship between persistent identity and Java identity."
+msgstr "A instância foi associada com um contexto persistente, porém este contexto foi fechado, ou a instância foi serializada por outro processo. Possui uma identidade persistente, e, talvez, correspondenta a um registro no banco de dados. Para instâncias desatachadas, o Hibernate não garante o relacionamento entre identidade persistente e identidade Java."
+
+#: index.docbook:229
+msgid "JMX Integration"
+msgstr "Integração JMX"
+
+#: index.docbook:231
+msgid "JMX is the J2EE standard for management of Java components. Hibernate may be managed via a JMX standard service. We provide an MBean implementation in the distribution, <literal>org.hibernate.jmx.HibernateService</literal>."
+msgstr "JMX é padrão J2EE para manipulação de componentes Java. O Hibernate pode ser manipulado por um serviço JMX padrão. Nós fornecemos uma implementação do MBean na distribuição, <literal>org.hibernate.jmx.HibernateService</literal>."
+
+#: index.docbook:237
+msgid "For an example how to deploy Hibernate as a JMX service on the JBoss Application Server, please see the JBoss User Guide. On JBoss AS, you also get these benefits if you deploy using JMX:"
+msgstr "Para um exemplo de como instalar o Hibernate como um serviço JMX em um servidor de aplicativo JBoss, por favor, consulte o manual do usuário do JBoss. No JBoss As, você poderá ver os benefÃcios de de se fazer o deploy usando JMX:"
+
+#: index.docbook:245
+msgid "<emphasis>Session Management:</emphasis> The Hibernate <literal>Session</literal>'s life cycle can be automatically bound to the scope of a JTA transaction. This means you no longer have to manually open and close the <literal>Session</literal>, this becomes the job of a JBoss EJB interceptor. You also don't have to worry about transaction demarcation in your code anymore (unless you'd like to write a portable persistence layer of course, use the optional Hibernate <literal>Transaction</literal> API for this). You call the <literal>HibernateContext</literal> to access a <literal>Session</literal>."
+msgstr "<emphasis>Session Management:</emphasis> O ciclo de vida de uma <literal>Session</literal> do Hibernate pode ser automaticamente conectada a um escopo de transação JTA. Isso significa que você não precisará mais abrir e fechar manualmente uma <literal>Session</literal>, isso se torna trabalho para um interceptor EJB do JBoss . Você também não precisa se preocupar, nunca mais, com demarcação de transação em seu código (a não ser que você prefira escrever uma camada persistente portável, para isso, use a API opcional do Hibernate <literal>Transaction</literal>). Você deve chamar <literal>HibernateContext</literal> para acessar uma <literal>Session</literal>."
+
+#: index.docbook:257
+msgid "<emphasis>HAR deployment:</emphasis> Usually you deploy the Hibernate JMX service using a JBoss service deployment descriptor (in an EAR and/or SAR file), it supports all the usual configuration options of a Hibernate <literal>SessionFactory</literal>. However, you still have to name all your mapping files in the deployment descriptor. If you decide to use the optional HAR deployment, JBoss will automatically detect all mapping files in your HAR file."
+msgstr "<emphasis>HAR deployment:</emphasis>: Normalmente você faz o deploy de um serviço JMX do Hibernate usando um serviço descritor de deploy do JBoss (em um EAR e/ou arquivo SAR), que suporta todas as configurações usuais de uma <literal>SessionFactory</literal> do Hibernate. Entretanto, você ainda precisa nomear todos os seus arquivos de mapeamento no descritor de deploração. Se você decidir usar o deploy opcional HAR, o JBoss irá automaticamente detectar todos os seus arquivos de mapeamento no seu arquivo HAR."
+
+#: index.docbook:268
+msgid "Consult the JBoss AS user guide for more information about these options."
+msgstr "Consulte o manual do usuário do JBoss AS, para obter maiores informações sobre essas opções."
+
+#: index.docbook:272
+msgid "Another feature available as a JMX service are runtime Hibernate statistics. See <xref linkend=\"configuration-optional-statistics\"/>."
+msgstr "Another feature available as a JMX service are runtime Hibernate statistics. See <xref linkend=\"configuration-optional-statistics\"/>. Outra opção disponÃvel como um serviço JMX são as estatÃsticas de execução do Hibernate. Veja a <xref linkend=\"configuration-optional-statistics\"/>."
+
+#: index.docbook:279
+msgid "JCA Support"
+msgstr "Suporte JCA"
+
+#: index.docbook:280
+msgid "Hibernate may also be configured as a JCA connector. Please see the website for more details. Please note that Hibernate JCA support is still considered experimental."
+msgstr "Hibernate may also be configured as a JCA connector. Please see the website for more details. Please note that Hibernate JCA support is still considered experimental. O Hibernate pode também ser configurado como um conector JCA. Por favor, visite o website para maiores detalhes. Entretanto, note que o suporte JCA do Hibernate ainda é considerado experimental."
+
+#: index.docbook:287
+msgid "Contextual Sessions"
+msgstr "Sessões contextuais"
+
+#: index.docbook:288
+msgid "Most applications using Hibernate need some form of \"contextual\" sessions, where a given session is in effect throughout the scope of a given context. However, across applications the definition of what constitutes a context is typically different; and different contexts define different scopes to the notion of current. Applications using Hibernate prior to version 3.0 tended to utilize either home-grown <literal>ThreadLocal</literal>-based contextual sessions, helper classes such as <literal>HibernateUtil</literal>, or utilized third-party frameworks (such as Spring or Pico) which provided proxy/interception-based contextual sessions."
+msgstr "Muitas aplicações que usam o Hibernate necessita de algum tipo de sessão \"contextual\", onde uma sessão dada é na verdade um escopo de um contexto. Entretanto, através de aplicações a definição sobre um contexto é geralmente diferente; e contextos diferentes definem escopos diferentes. Aplicações usando versões anteriores ao Hibernate 3.0 tendem a utilizar tanto sessões contextuais baseadas em <literal>ThreadLocal</literal>, classes utilitárias como <literal>HibernateUtil</literal>, ou utilizar frameworks de terceiros(como Spring ou Pico) que provê sessões contextuais baseadas em proxy."
+
+#: index.docbook:297
+msgid "Starting with version 3.0.1, Hibernate added the <literal>SessionFactory.getCurrentSession()</literal> method. Initially, this assumed usage of <literal>JTA</literal> transactions, where the <literal>JTA</literal> transaction defined both the scope and context of a current session. The Hibernate team maintains that, given the maturity of the numerous stand-alone <literal>JTA TransactionManager</literal> implementations out there, most (if not all) applications should be using <literal>JTA</literal> transaction management whether or not they are deployed into a <literal>J2EE</literal> container. Based on that, the <literal>JTA</literal>-based contextual sessions is all you should ever need to use."
+msgstr "A partir da versão 3.0.1, o Hibernate adicionou o método <literal>SessionFactory.getCurrentSession()</literal>. Inicialmente, este assume o uso de transações <literal>JTA</literal>, onde a transação <literal>JTA</literal> define tanto o escopo quanto o contexto de uma sessão atual. O time do Hibernate mantém este recurso, desenvolvendo as diversas implementações do <literal>JTA TransactionManager</literal>, a maioria (se não todos) aplicativos deveria utilizar o gerenciador de transações <literal>JTA</literal> sendo ou não instalados dentro de um container <literal>J2EE</literal>. Baseado neste recurso, você deveria sempre utilizar sessões contextuais baseadas em <literal>JTA</literal>."
+
+#: index.docbook:307
+msgid "However, as of version 3.1, the processing behind <literal>SessionFactory.getCurrentSession()</literal> is now pluggable. To that end, a new extension interface (<literal>org.hibernate.context.CurrentSessionContext</literal>) and a new configuration parameter (<literal>hibernate.current_session_context_class</literal>) have been added to allow pluggability of the scope and context of defining current sessions."
+msgstr "Entretanto, na versão 3.1, o processo por trás do método <literal>SessionFactory.getCurrentSession()</literal> é agora plugavel. Com isso, uma nova interface (<literal>org.hibernate.context.CurrentSessionContext</literal>) e um novo parâmetro de configuração (<literal>hibernate.current_session_context_class</literal>) foram adicionados para possibilitar a compatibilidade do contexto e do escopo na definição de sessões correntes."
+
+#: index.docbook:314
+msgid "See the Javadocs for the <literal>org.hibernate.context.CurrentSessionContext</literal> interface for a detailed discussion of its contract. It defines a single method, <literal>currentSession()</literal>, by which the implementation is responsible for tracking the current contextual session. Out-of-the-box, Hibernate comes with three implementations of this interface."
+msgstr "De uma olhada em Javadocs sobre a interface <literal>org.hibernate.context.CurrentSessionContext</literal> para uma discussão detalhada. Ela define um método único, <literal>currentSession()</literal>, com o qual a implementação é responsável por rastrear a sessão contextual corrente. Por fora do \"encapsulamento\", o Hibernate possui duas implementações dessa interface."
+
+#: index.docbook:324
+msgid "<literal>org.hibernate.context.JTASessionContext</literal> - current sessions are tracked and scoped by a <literal>JTA</literal> transaction. The processing here is exactly the same as in the older JTA-only approach. See the Javadocs for details."
+msgstr "<literal>org.hibernate.context.JTASessionContext</literal> - As sessões correntes são rastreadas e recebem um escopo por uma transação <literal>JTA</literal>. O processamento aqui é exatamente igual ao antigo processo JTA. Consulte em Javadocs para maiores detalhes."
+
+#: index.docbook:332
+msgid "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - current sessions are tracked by thread of execution. Again, see the Javadocs for details."
+msgstr "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - As sessões correntes são rastreadas por uma thread de execução. Novamente, consulte em Javadocs para maiores detalhes."
+
+#: index.docbook:338
+msgid "<literal>org.hibernate.context.ManagedSessionContext</literal> - current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a <literal>Session</literal> instance with static methods on this class, it does never open, flush, or close a <literal>Session</literal>."
+msgstr "<literal>org.hibernate.context.ManagedSessionContext</literal> - current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a <literal>Session</literal> instance with static methods on this class, it does never open, flush, or close a <literal>Session</literal>."
+
+#: index.docbook:347
+msgid "The first two implementations provide a \"one session - one database transaction\" programming model, also known and used as <emphasis>session-per-request</emphasis>. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programatic transaction demarcation in plain JSE without JTA, you are adviced to use the Hibernate <literal>Transaction</literal> API to hide the underlying transaction system from your code. If you use JTA, use the JTA interfaces to demarcate transactions. If you execute in an EJB container that supports CMT, transaction boundaries are defined declaratively and you don't need any transaction or session demarcation operations in your code. Refer to <xref linkend=\"transactions\"/> for more information and code examples."
+msgstr "As duas primeiras implementações usam o modelo de programação \"uma sessão â uma transação do banco de dados\", também conhecida e usado como <emphasis>sessão por requisição</emphasis>. O começo e o fim de uma sessão Hibernate é definida pela duração da transação do banco de dados. Se você usa demarcação programática de transação (por exemplo. em J2SE puro ou com JTA /UserTransaction/BMT), você é recomendado a usar a API Hibernate <literal>Transaction</literal> para esconder a base do sistema de transação do seu código. Se você executa em um container EJB que suporta CMT, os limites das transações são definidas declarativamente e você não necessita de qualquer transação ou operação de demarcação de sessão no seu código. Consulte o <xref linkend=\"transactions\"/> para mais informações exemplos de código."
+
+#: index.docbook:359
+msgid "The <literal>hibernate.current_session_context_class</literal> configuration parameter defines which <literal>org.hibernate.context.CurrentSessionContext</literal> implementation should be used. Note that for backwards compatibility, if this config param is not set but a <literal>org.hibernate.transaction.TransactionManagerLookup</literal> is configured, Hibernate will use the <literal>org.hibernate.context.JTASessionContext</literal>. Typically, the value of this parameter would just name the implementation class to use; for the three out-of-the-box implementations, however, there are three corresponding short names, \"jta\", \"thread\", and \"managed\"."
+msgstr "O parâmetro de configuração <literal>hibernate.current_session_context_class</literal> define que a implementação <literal>org.hibernate.context.CurrentSessionContext</literal> deve ser usada. Note que para compatibilidade anterior, se este parâmetro de configuração não é determinado mas um <literal>org.hibernate.transaction.TransactionManagerLookup</literal> é configurado, Hibernate usará o <literal>org.hibernate.context.JTASessionContext</literal>. Tipicamente, o valor deste parâmetro nomearia apenas a classe de implementação para usar; para as duas implementações out-of-the-box, entretanto, há três pequenos nomes correspondentes, \"jta\", \"thread\", and \"managed\"."
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/association_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/association_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/association_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,608 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:6
+msgid "Association Mappings"
+msgstr ""
+
+#: index.docbook:9
+msgid "Introduction"
+msgstr ""
+
+#: index.docbook:11
+msgid "Association mappings are the often most difficult thing to get right. In this section we'll go through the canonical cases one by one, starting with unidirectional mappings, and then considering the bidirectional cases. We'll use <literal>Person</literal> and <literal>Address</literal> in all the examples."
+msgstr ""
+
+#: index.docbook:19
+msgid "We'll classify associations by whether or not they map to an intervening join table, and by multiplicity."
+msgstr ""
+
+#: index.docbook:24
+msgid "Nullable foreign keys are not considered good practice in traditional data modelling, so all our examples use not null foreign keys. This is not a requirement of Hibernate, and the mappings will all work if you drop the nullability constraints."
+msgstr ""
+
+#: index.docbook:34
+msgid "Unidirectional associations"
+msgstr ""
+
+#: index.docbook:37, index.docbook:108
+msgid "many to one"
+msgstr ""
+
+#: index.docbook:39
+msgid "A <emphasis>unidirectional many-to-one association</emphasis> is the most common kind of unidirectional association."
+msgstr ""
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:45, index.docbook:161
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:50, index.docbook:121, index.docbook:185, index.docbook:225
+msgid "one to one"
+msgstr ""
+
+#: index.docbook:52
+msgid "A <emphasis>unidirectional one-to-one association on a foreign key</emphasis> is almost identical. The only difference is the column unique constraint."
+msgstr ""
+
+#: index.docbook:57
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:58, index.docbook:193
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:60
+msgid "A <emphasis>unidirectional one-to-one association on a primary key</emphasis> usually uses a special id generator. (Notice that we've reversed the direction of the association in this example.)"
+msgstr ""
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:67, index.docbook:201
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( personId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:72, index.docbook:94
+msgid "one to many"
+msgstr ""
+
+#: index.docbook:74
+msgid "A <emphasis>unidirectional one-to-many association on a foreign key</emphasis> is a very unusual case, and is not really recommended."
+msgstr ""
+
+#: index.docbook:79
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\">\n"
+ " <key column=\"personId\" \n"
+ " not-null=\"true\"/>\n"
+ " <one-to-many class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:80
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key, personId bigint not null )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:82
+msgid "We think it's better to use a join table for this kind of association."
+msgstr ""
+
+#: index.docbook:91
+msgid "Unidirectional associations with join tables"
+msgstr ""
+
+#: index.docbook:96
+msgid "A <emphasis>unidirectional one-to-many association on a join table</emphasis> is much preferred. Notice that by specifying <literal>unique=\"true\"</literal>, we have changed the multiplicity from many-to-many to one-to-many."
+msgstr ""
+
+#: index.docbook:102
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:103
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:110
+msgid "A <emphasis>unidirectional many-to-one association on a join table</emphasis> is quite common when the association is optional."
+msgstr ""
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:116
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:123
+msgid "A <emphasis>unidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr ""
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:129, index.docbook:233
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:134, index.docbook:238
+msgid "many to many"
+msgstr ""
+
+#: index.docbook:136
+msgid "Finally, we have a <emphasis>unidirectional many-to-many association</emphasis>."
+msgstr ""
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:141, index.docbook:246
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:148
+msgid "Bidirectional associations"
+msgstr ""
+
+#: index.docbook:151, index.docbook:211
+msgid "one to many / many to one"
+msgstr ""
+
+#: index.docbook:153
+msgid "A <emphasis>bidirectional many-to-one association</emphasis> is the most common kind of association. (This is the standard parent/child relationship.)"
+msgstr ""
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:163
+msgid "If you use a <literal>List</literal> (or other indexed collection) you need to set the <literal>key</literal> column of the foreign key to <literal>not null</literal>, and let Hibernate manage the association from the collections side to maintain the index of each element (making the other side virtually inverse by setting <literal>update=\"false\"</literal> and <literal>insert=\"false\"</literal>):"
+msgstr ""
+
+#: index.docbook:171
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <list name=\"people\">\n"
+ " <key column=\"addressId\" not-null=\"true\"/>\n"
+ " <list-index column=\"peopleIdx\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </list>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:173
+msgid "It is important that you define <literal>not-null=\"true\"</literal> on the <literal><key></literal> element of the collection mapping if the underlying foreign key column is <literal>NOT NULL</literal>. Don't only declare <literal>not-null=\"true\"</literal> on a possible nested <literal><column></literal> element, but on the <literal><key></literal> element."
+msgstr ""
+
+#: index.docbook:187
+msgid "A <emphasis>bidirectional one-to-one association on a foreign key</emphasis> is quite common."
+msgstr ""
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " property-ref=\"address\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:195
+msgid "A <emphasis>bidirectional one-to-one association on a primary key</emphasis> uses the special id generator."
+msgstr ""
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"address\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:208
+msgid "Bidirectional associations with join tables"
+msgstr ""
+
+#: index.docbook:213
+msgid "A <emphasis>bidirectional one-to-many association on a join table</emphasis>. Note that the <literal>inverse=\"true\"</literal> can go on either end of the association, on the collection, or on the join."
+msgstr ""
+
+#: index.docbook:219
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" \n"
+ " table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " inverse=\"true\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\"\n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:227
+msgid "A <emphasis>bidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr ""
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\"\n"
+ " inverse=\"true\">\n"
+ " <key column=\"addressId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:240
+msgid "Finally, we have a <emphasis>bidirectional many-to-many association</emphasis>."
+msgstr ""
+
+#: index.docbook:244
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\" table=\"PersonAddress\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-many column=\"personId\"\n"
+ " class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:253
+msgid "More complex association mappings"
+msgstr ""
+
+#: index.docbook:255
+msgid "More complex association joins are <emphasis>extremely</emphasis> rare. Hibernate makes it possible to handle more complex situations using SQL fragments embedded in the mapping document. For example, if a table with historical account information data defines <literal>accountNumber</literal>, <literal>effectiveEndDate</literal> and <literal>effectiveStartDate</literal>columns, mapped as follows:"
+msgstr ""
+
+#: index.docbook:264
+msgid ""
+ "<![CDATA[<properties name=\"currentAccountKey\">\n"
+ " <property name=\"accountNumber\" type=\"string\" not-null=\"true\"/>\n"
+ " <property name=\"currentAccount\" type=\"boolean\">\n"
+ " <formula>case when effectiveEndDate is null then 1 else 0 end</formula>\n"
+ " </property>\n"
+ "</properties>\n"
+ "<property name=\"effectiveEndDate\" type=\"date\"/>\n"
+ "<property name=\"effectiveStateDate\" type=\"date\" not-null=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:266
+msgid "Then we can map an association to the <emphasis>current</emphasis> instance (the one with null <literal>effectiveEndDate</literal>) using:"
+msgstr ""
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<many-to-one name=\"currentAccountInfo\" \n"
+ " property-ref=\"currentAccountKey\"\n"
+ " class=\"AccountInfo\">\n"
+ " <column name=\"accountNumber\"/>\n"
+ " <formula>'1'</formula>\n"
+ "</many-to-one>]]>"
+msgstr ""
+
+#: index.docbook:273
+msgid "In a more complex example, imagine that the association between <literal>Employee</literal> and <literal>Organization</literal> is maintained in an <literal>Employment</literal> table full of historical employment data. Then an association to the employee's <emphasis>most recent</emphasis> employer (the one with the most recent <literal>startDate</literal>) might be mapped this way:"
+msgstr ""
+
+#: index.docbook:281
+msgid ""
+ "<![CDATA[<join>\n"
+ " <key column=\"employeeId\"/>\n"
+ " <subselect>\n"
+ " select employeeId, orgId \n"
+ " from Employments \n"
+ " group by orgId \n"
+ " having startDate = max(startDate)\n"
+ " </subselect>\n"
+ " <many-to-one name=\"mostRecentEmployer\" \n"
+ " class=\"Organization\" \n"
+ " column=\"orgId\"/>\n"
+ "</join>]]>"
+msgstr ""
+
+#: index.docbook:283
+msgid "You can get quite creative with this functionality, but it is usually more practical to handle these kinds of cases using HQL or a criteria query."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/basic_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/basic_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/basic_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,2459 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Basic O/R Mapping"
+msgstr ""
+
+#: index.docbook:8
+msgid "Mapping declaration"
+msgstr ""
+
+#: index.docbook:10
+msgid "Object/relational mappings are usually defined in an XML document. The mapping document is designed to be readable and hand-editable. The mapping language is Java-centric, meaning that mappings are constructed around persistent class declarations, not table declarations."
+msgstr ""
+
+#: index.docbook:17
+msgid "Note that, even though many Hibernate users choose to write the XML by hand, a number of tools exist to generate the mapping document, including XDoclet, Middlegen and AndroMDA."
+msgstr ""
+
+#: index.docbook:23
+msgid "Lets kick off with an example mapping:"
+msgstr ""
+
+#: index.docbook:27
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\"\n"
+ " table=\"cats\"\n"
+ " discriminator-value=\"C\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "\n"
+ " <discriminator column=\"subclass\"\n"
+ " type=\"character\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " <property name=\"birthdate\"\n"
+ " type=\"date\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"color\"\n"
+ " type=\"eg.types.ColorUserType\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"sex\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"litterId\"\n"
+ " column=\"litterId\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <many-to-one name=\"mother\"\n"
+ " column=\"mother_id\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <set name=\"kittens\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"litter_id\">\n"
+ " <key column=\"mother_id\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"DomesticCat\"\n"
+ " discriminator-value=\"D\">\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:29
+msgid "We will now discuss the content of the mapping document. We will only describe the document elements and attributes that are used by Hibernate at runtime. The mapping document also contains some extra optional attributes and elements that affect the database schemas exported by the schema export tool. (For example the <literal> not-null</literal> attribute.)"
+msgstr ""
+
+#: index.docbook:40
+msgid "Doctype"
+msgstr ""
+
+#: index.docbook:42
+msgid "All XML mappings should declare the doctype shown. The actual DTD may be found at the URL above, in the directory <literal>hibernate-x.x.x/src/org/hibernate </literal> or in <literal>hibernate3.jar</literal>. Hibernate will always look for the DTD in its classpath first. If you experience lookups of the DTD using an Internet connection, check your DTD declaration against the contents of your claspath."
+msgstr ""
+
+#: index.docbook:52
+msgid "EntityResolver"
+msgstr ""
+
+#: index.docbook:53
+msgid "As mentioned previously, Hibernate will first attempt to resolve DTDs in its classpath. The manner in which it does this is by registering a custom <literal>org.xml.sax.EntityResolver</literal> implementation with the SAXReader it uses to read in the xml files. This custom <literal>EntityResolver</literal> recognizes two different systemId namespaces."
+msgstr ""
+
+#: index.docbook:61
+msgid "a <literal>hibernate namespace</literal> is recognized whenever the resolver encounteres a systemId starting with <literal>http://hibernate.sourceforge.net/</literal>; the resolver attempts to resolve these entities via the classlaoder which loaded the Hibernate classes."
+msgstr ""
+
+#: index.docbook:70
+msgid "a <literal>user namespace</literal> is recognized whenever the resolver encounteres a systemId using a <literal>classpath://</literal> URL protocol; the resolver will attempt to resolve these entities via (1) the current thread context classloader and (2) the classloader which loaded the Hibernate classes."
+msgstr ""
+
+#: index.docbook:79
+msgid "An example of utilizing user namespacing:"
+msgstr ""
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\" [\n"
+ " <!ENTITY types SYSTEM \"classpath://your/domain/types.xml\">\n"
+ "]>\n"
+ "\n"
+ "<hibernate-mapping package=\"your.domain\">\n"
+ " <class name=\"MyEntity\">\n"
+ " <id name=\"id\" type=\"my-custom-id-type\">\n"
+ " ...\n"
+ " </id>\n"
+ " <class>\n"
+ " &types;\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:83
+msgid "Where <literal>types.xml</literal> is a resource in the <literal>your.domain</literal> package and contains a custom <xref linkend=\"mapping-types-custom\"/>typedef."
+msgstr ""
+
+#: index.docbook:91
+msgid "hibernate-mapping"
+msgstr ""
+
+#: index.docbook:93
+msgid "This element has several optional attributes. The <literal>schema</literal> and <literal>catalog</literal> attributes specify that tables referred to in this mapping belong to the named schema and/or catalog. If specified, tablenames will be qualified by the given schema and catalog names. If missing, tablenames will be unqualified. The <literal>default-cascade</literal> attribute specifies what cascade style should be assumed for properties and collections which do not specify a <literal>cascade</literal> attribute. The <literal>auto-import</literal> attribute lets us use unqualified class names in the query language, by default."
+msgstr ""
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[<hibernate-mapping\n"
+ " schema=\"schemaName\"\n"
+ " catalog=\"catalogName\"\n"
+ " default-cascade=\"cascade_style\"\n"
+ " default-access=\"field|property|ClassName\"\n"
+ " default-lazy=\"true|false\"\n"
+ " auto-import=\"true|false\"\n"
+ " package=\"package.name\"\n"
+ " />]]>"
+msgstr ""
+
+#: index.docbook:117
+msgid "<literal>schema</literal> (optional): The name of a database schema."
+msgstr ""
+
+#: index.docbook:122
+msgid "<literal>catalog</literal> (optional): The name of a database catalog."
+msgstr ""
+
+#: index.docbook:127
+msgid "<literal>default-cascade</literal> (optional - defaults to <literal>none</literal>): A default cascade style."
+msgstr ""
+
+#: index.docbook:133
+msgid "<literal>default-access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing all properties. Can be a custom implementation of <literal>PropertyAccessor</literal>."
+msgstr ""
+
+#: index.docbook:140
+msgid "<literal>default-lazy</literal> (optional - defaults to <literal>true</literal>): The default value for unspecifed <literal>lazy</literal> attributes of class and collection mappings."
+msgstr ""
+
+#: index.docbook:147
+msgid "<literal>auto-import</literal> (optional - defaults to <literal>true</literal>): Specifies whether we can use unqualified class names (of classes in this mapping) in the query language."
+msgstr ""
+
+#: index.docbook:154
+msgid "<literal>package</literal> (optional): Specifies a package prefix to assume for unqualified class names in the mapping document."
+msgstr ""
+
+#: index.docbook:162
+msgid "If you have two persistent classes with the same (unqualified) name, you should set <literal>auto-import=\"false\"</literal>. Hibernate will throw an exception if you attempt to assign two classes to the same \"imported\" name."
+msgstr ""
+
+#: index.docbook:168
+msgid "Note that the <literal>hibernate-mapping</literal> element allows you to nest several persistent <literal><class></literal> mappings, as shown above. It is however good practice (and expected by some tools) to map only a single persistent class (or a single class hierarchy) in one mapping file and name it after the persistent superclass, e.g. <literal>Cat.hbm.xml</literal>, <literal>Dog.hbm.xml</literal>, or if using inheritance, <literal>Animal.hbm.xml</literal>."
+msgstr ""
+
+#: index.docbook:181
+msgid "<title>class</title>"
+msgstr ""
+
+#: index.docbook:183
+msgid "You may declare a persistent class using the <literal>class</literal> element:"
+msgstr ""
+
+#: index.docbook:211
+msgid ""
+ "<![CDATA[<class\n"
+ " name=\"ClassName\"\n"
+ " table=\"tableName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " mutable=\"true|false\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " select-before-update=\"true|false\"\n"
+ " polymorphism=\"implicit|explicit\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " persister=\"PersisterClass\"\n"
+ " batch-size=\"N\"\n"
+ " optimistic-lock=\"none|version|dirty|all\"\n"
+ " lazy=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " check=\"arbitrary sql check condition\"\n"
+ " rowid=\"rowid\"\n"
+ " subselect=\"SQL expression\"\n"
+ " abstract=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:214
+msgid "<literal>name</literal> (optional): The fully qualified Java class name of the persistent class (or interface). If this attribute is missing, it is assumed that the mapping is for a non-POJO entity."
+msgstr ""
+
+#: index.docbook:221
+msgid "<literal>table</literal> (optional - defaults to the unqualified class name): The name of its database table."
+msgstr ""
+
+#: index.docbook:227
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses, used for polymorphic behaviour. Acceptable values include <literal>null</literal> and <literal>not null</literal>."
+msgstr ""
+
+#: index.docbook:234
+msgid "<literal>mutable</literal> (optional, defaults to <literal>true</literal>): Specifies that instances of the class are (not) mutable."
+msgstr ""
+
+#: index.docbook:240, index.docbook:2204
+msgid "<literal>schema</literal> (optional): Override the schema name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr ""
+
+#: index.docbook:246, index.docbook:2210
+msgid "<literal>catalog</literal> (optional): Override the catalog name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr ""
+
+#: index.docbook:252
+msgid "<literal>proxy</literal> (optional): Specifies an interface to use for lazy initializing proxies. You may specify the name of the class itself."
+msgstr ""
+
+#: index.docbook:258
+msgid "<literal>dynamic-update</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>UPDATE</literal> SQL should be generated at runtime and contain only those columns whose values have changed."
+msgstr ""
+
+#: index.docbook:265
+msgid "<literal>dynamic-insert</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>INSERT</literal> SQL should be generated at runtime and contain only the columns whose values are not null."
+msgstr ""
+
+#: index.docbook:272
+msgid "<literal>select-before-update</literal> (optional, defaults to <literal>false</literal>): Specifies that Hibernate should <emphasis>never</emphasis> perform an SQL <literal>UPDATE</literal> unless it is certain that an object is actually modified. In certain cases (actually, only when a transient object has been associated with a new session using <literal>update()</literal>), this means that Hibernate will perform an extra SQL <literal>SELECT</literal> to determine if an <literal>UPDATE</literal> is actually required."
+msgstr ""
+
+#: index.docbook:282
+msgid "<literal>polymorphism</literal> (optional, defaults to <literal>implicit</literal>): Determines whether implicit or explicit query polymorphism is used."
+msgstr ""
+
+#: index.docbook:288
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving objects of this class"
+msgstr ""
+
+#: index.docbook:294
+msgid "<literal>persister</literal> (optional): Specifies a custom <literal>ClassPersister</literal>."
+msgstr ""
+
+#: index.docbook:299
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for fetching instances of this class by identifier."
+msgstr ""
+
+#: index.docbook:305
+msgid "<literal>optimistic-lock</literal> (optional, defaults to <literal>version</literal>): Determines the optimistic locking strategy."
+msgstr ""
+
+#: index.docbook:311
+msgid "<literal>lazy</literal> (optional): Lazy fetching may be completely disabled by setting <literal>lazy=\"false\"</literal>."
+msgstr ""
+
+#: index.docbook:317
+msgid "<literal>entity-name</literal> (optional, defaults to the class name): Hibernate3 allows a class to be mapped multiple times (to different tables, potentially), and allows entity mappings that are represented by Maps or XML at the Java level. In these cases, you should provide an explicit arbitrary name for the entity. See <xref linkend=\"persistent-classes-dynamicmodels\"/> and <xref linkend=\"xml\"/> for more information."
+msgstr ""
+
+#: index.docbook:327
+msgid "<literal>check</literal> (optional): A SQL expression used to generate a multi-row <emphasis>check</emphasis> constraint for automatic schema generation."
+msgstr ""
+
+#: index.docbook:333
+msgid "<literal>rowid</literal> (optional): Hibernate can use so called ROWIDs on databases which support. E.g. on Oracle, Hibernate can use the <literal>rowid</literal> extra column for fast updates if you set this option to <literal>rowid</literal>. A ROWID is an implementation detail and represents the physical location of a stored tuple."
+msgstr ""
+
+#: index.docbook:341
+msgid "<literal>subselect</literal> (optional): Maps an immutable and read-only entity to a database subselect. Useful if you want to have a view instead of a base table, but don't. See below for more information."
+msgstr ""
+
+#: index.docbook:348
+msgid "<literal>abstract</literal> (optional): Used to mark abstract superclasses in <literal><union-subclass></literal> hierarchies."
+msgstr ""
+
+#: index.docbook:356
+msgid "It is perfectly acceptable for the named persistent class to be an interface. You would then declare implementing classes of that interface using the <literal><subclass></literal> element. You may persist any <emphasis>static</emphasis> inner class. You should specify the class name using the standard form ie. <literal>eg.Foo$Bar</literal>."
+msgstr ""
+
+#: index.docbook:363
+msgid "Immutable classes, <literal>mutable=\"false\"</literal>, may not be updated or deleted by the application. This allows Hibernate to make some minor performance optimizations."
+msgstr ""
+
+#: index.docbook:368
+msgid "The optional <literal>proxy</literal> attribute enables lazy initialization of persistent instances of the class. Hibernate will initially return CGLIB proxies which implement the named interface. The actual persistent object will be loaded when a method of the proxy is invoked. See \"Initializing collections and proxies\" below."
+msgstr ""
+
+#: index.docbook:375
+msgid "<emphasis>Implicit</emphasis> polymorphism means that instances of the class will be returned by a query that names any superclass or implemented interface or the class and that instances of any subclass of the class will be returned by a query that names the class itself. <emphasis>Explicit</emphasis> polymorphism means that class instances will be returned only by queries that explicitly name that class and that queries that name the class will return only instances of subclasses mapped inside this <literal><class></literal> declaration as a <literal><subclass></literal> or <literal><joined-subclass></literal>. For most purposes the default, <literal>polymorphism=\"implicit\"</literal>, is appropriate. Explicit polymorphism is useful when two different classes are mapped to the same table (this allows a \"lightweight\" class that contains a subset of the table columns)."
+msgstr ""
+
+#: index.docbook:387
+msgid "The <literal>persister</literal> attribute lets you customize the persistence strategy used for the class. You may, for example, specify your own subclass of <literal>org.hibernate.persister.EntityPersister</literal> or you might even provide a completely new implementation of the interface <literal>org.hibernate.persister.ClassPersister</literal> that implements persistence via, for example, stored procedure calls, serialization to flat files or LDAP. See <literal>org.hibernate.test.CustomPersister</literal> for a simple example (of \"persistence\" to a <literal>Hashtable</literal>)."
+msgstr ""
+
+#: index.docbook:398
+msgid "Note that the <literal>dynamic-update</literal> and <literal>dynamic-insert</literal> settings are not inherited by subclasses and so may also be specified on the <literal><subclass></literal> or <literal><joined-subclass></literal> elements. These settings may increase performance in some cases, but might actually decrease performance in others. Use judiciously."
+msgstr ""
+
+#: index.docbook:406
+msgid "Use of <literal>select-before-update</literal> will usually decrease performance. It is very useful to prevent a database update trigger being called unnecessarily if you reattach a graph of detached instances to a <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:412
+msgid "If you enable <literal>dynamic-update</literal>, you will have a choice of optimistic locking strategies:"
+msgstr ""
+
+#: index.docbook:418
+msgid "<literal>version</literal> check the version/timestamp columns"
+msgstr ""
+
+#: index.docbook:423
+msgid "<literal>all</literal> check all columns"
+msgstr ""
+
+#: index.docbook:428
+msgid "<literal>dirty</literal> check the changed columns, allowing some concurrent updates"
+msgstr ""
+
+#: index.docbook:433
+msgid "<literal>none</literal> do not use optimistic locking"
+msgstr ""
+
+#: index.docbook:438
+msgid "We <emphasis>very</emphasis> strongly recommend that you use version/timestamp columns for optimistic locking with Hibernate. This is the optimal strategy with respect to performance and is the only strategy that correctly handles modifications made to detached instances (ie. when <literal>Session.merge()</literal> is used)."
+msgstr ""
+
+#: index.docbook:445
+msgid "There is no difference between a view and a base table for a Hibernate mapping, as expected this is transparent at the database level (note that some DBMS don't support views properly, especially with updates). Sometimes you want to use a view, but can't create one in the database (ie. with a legacy schema). In this case, you can map an immutable and read-only entity to a given SQL subselect expression:"
+msgstr ""
+
+#: index.docbook:453
+msgid ""
+ "<![CDATA[<class name=\"Summary\">\n"
+ " <subselect>\n"
+ " select item.name, max(bid.amount), count(*)\n"
+ " from item\n"
+ " join bid on bid.item_id = item.id\n"
+ " group by item.name\n"
+ " </subselect>\n"
+ " <synchronize table=\"item\"/>\n"
+ " <synchronize table=\"bid\"/>\n"
+ " <id name=\"name\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:455
+msgid "Declare the tables to synchronize this entity with, ensuring that auto-flush happens correctly, and that queries against the derived entity do not return stale data. The <literal><subselect></literal> is available as both as an attribute and a nested mapping element."
+msgstr ""
+
+#: index.docbook:465
+msgid "<title>id</title>"
+msgstr ""
+
+#: index.docbook:467
+msgid "Mapped classes <emphasis>must</emphasis> declare the primary key column of the database table. Most classes will also have a JavaBeans-style property holding the unique identifier of an instance. The <literal><id></literal> element defines the mapping from that property to the primary key column."
+msgstr ""
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[<id\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " column=\"column_name\"\n"
+ " unsaved-value=\"null|any|none|undefined|id_value\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "\n"
+ " <generator class=\"generatorClass\"/>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:485
+msgid "<literal>name</literal> (optional): The name of the identifier property."
+msgstr ""
+
+#: index.docbook:490
+msgid "<literal>type</literal> (optional): A name that indicates the Hibernate type."
+msgstr ""
+
+#: index.docbook:495
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the primary key column."
+msgstr ""
+
+#: index.docbook:501
+msgid "<literal>unsaved-value</literal> (optional - defaults to a \"sensible\" value): An identifier property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session."
+msgstr ""
+
+#: index.docbook:509, index.docbook:1017, index.docbook:1156, index.docbook:1238, index.docbook:1345, index.docbook:1534, index.docbook:1708, index.docbook:1878, index.docbook:2457
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the property value."
+msgstr ""
+
+#: index.docbook:517
+msgid "If the <literal>name</literal> attribute is missing, it is assumed that the class has no identifier property."
+msgstr ""
+
+#: index.docbook:522
+msgid "The <literal>unsaved-value</literal> attribute is almost never needed in Hibernate3."
+msgstr ""
+
+#: index.docbook:526
+msgid "There is an alternative <literal><composite-id></literal> declaration to allow access to legacy data with composite keys. We strongly discourage its use for anything else."
+msgstr ""
+
+#: index.docbook:532
+msgid "Generator"
+msgstr ""
+
+#: index.docbook:534
+msgid "The optional <literal><generator></literal> child element names a Java class used to generate unique identifiers for instances of the persistent class. If any parameters are required to configure or initialize the generator instance, they are passed using the <literal><param></literal> element."
+msgstr ""
+
+#: index.docbook:541
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"org.hibernate.id.TableHiLoGenerator\">\n"
+ " <param name=\"table\">uid_table</param>\n"
+ " <param name=\"column\">next_hi_value_column</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:543
+msgid "All generators implement the interface <literal>org.hibernate.id.IdentifierGenerator</literal>. This is a very simple interface; some applications may choose to provide their own specialized implementations. However, Hibernate provides a range of built-in implementations. There are shortcut names for the built-in generators:"
+msgstr ""
+
+#: index.docbook:551
+msgid "increment"
+msgstr ""
+
+#: index.docbook:553
+msgid "generates identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal> that are unique only when no other process is inserting data into the same table. <emphasis>Do not use in a cluster.</emphasis>"
+msgstr ""
+
+#: index.docbook:562
+msgid "identity"
+msgstr ""
+
+#: index.docbook:564
+msgid "supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>."
+msgstr ""
+
+#: index.docbook:572
+msgid "sequence"
+msgstr ""
+
+#: index.docbook:574
+msgid "uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>"
+msgstr ""
+
+#: index.docbook:582
+msgid "hilo"
+msgstr ""
+
+#: index.docbook:584
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a table and column (by default <literal>hibernate_unique_key</literal> and <literal>next_hi</literal> respectively) as a source of hi values. The hi/lo algorithm generates identifiers that are unique only for a particular database."
+msgstr ""
+
+#: index.docbook:594
+msgid "seqhilo"
+msgstr ""
+
+#: index.docbook:596
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a named database sequence."
+msgstr ""
+
+#: index.docbook:604
+msgid "uuid"
+msgstr ""
+
+#: index.docbook:606
+msgid "uses a 128-bit UUID algorithm to generate identifiers of type string, unique within a network (the IP address is used). The UUID is encoded as a string of hexadecimal digits of length 32."
+msgstr ""
+
+#: index.docbook:614
+msgid "guid"
+msgstr ""
+
+#: index.docbook:616
+msgid "uses a database-generated GUID string on MS SQL Server and MySQL."
+msgstr ""
+
+#: index.docbook:622
+msgid "native"
+msgstr ""
+
+#: index.docbook:624
+msgid "picks <literal>identity</literal>, <literal>sequence</literal> or <literal>hilo</literal> depending upon the capabilities of the underlying database."
+msgstr ""
+
+#: index.docbook:632
+msgid "assigned"
+msgstr ""
+
+#: index.docbook:634
+msgid "lets the application to assign an identifier to the object before <literal>save()</literal> is called. This is the default strategy if no <literal><generator></literal> element is specified."
+msgstr ""
+
+#: index.docbook:642
+msgid "select"
+msgstr ""
+
+#: index.docbook:644
+msgid "retrieves a primary key assigned by a database trigger by selecting the row by some unique key and retrieving the primary key value."
+msgstr ""
+
+#: index.docbook:651
+msgid "foreign"
+msgstr ""
+
+#: index.docbook:653
+msgid "uses the identifier of another associated object. Usually used in conjunction with a <literal><one-to-one></literal> primary key association."
+msgstr ""
+
+#: index.docbook:660
+msgid "sequence-identity"
+msgstr ""
+
+#: index.docbook:662
+msgid "a specialized sequence generation strategy which utilizes a database sequence for the actual value generation, but combines this with JDBC3 getGeneratedKeys to actually return the generated identifier value as part of the insert statement execution. This strategy is only known to be supported on Oracle 10g drivers targetted for JDK 1.4. Note comments on these insert statements are disabled due to a bug in the Oracle drivers."
+msgstr ""
+
+#: index.docbook:679
+msgid "Hi/lo algorithm"
+msgstr ""
+
+#: index.docbook:680
+msgid "The <literal>hilo</literal> and <literal>seqhilo</literal> generators provide two alternate implementations of the hi/lo algorithm, a favorite approach to identifier generation. The first implementation requires a \"special\" database table to hold the next available \"hi\" value. The second uses an Oracle-style sequence (where supported)."
+msgstr ""
+
+#: index.docbook:687
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"hilo\">\n"
+ " <param name=\"table\">hi_value</param>\n"
+ " <param name=\"column\">next_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"seqhilo\">\n"
+ " <param name=\"sequence\">hi_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:691
+msgid "Unfortunately, you can't use <literal>hilo</literal> when supplying your own <literal>Connection</literal> to Hibernate. When Hibernate is using an application server datasource to obtain connections enlisted with JTA, you must properly configure the <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr ""
+
+#: index.docbook:700
+msgid "UUID algorithm"
+msgstr ""
+
+#: index.docbook:701
+msgid "The UUID contains: IP address, startup time of the JVM (accurate to a quarter second), system time and a counter value (unique within the JVM). It's not possible to obtain a MAC address or memory address from Java code, so this is the best we can do without using JNI."
+msgstr ""
+
+#: index.docbook:710
+msgid "Identity columns and sequences"
+msgstr ""
+
+#: index.docbook:711
+msgid "For databases which support identity columns (DB2, MySQL, Sybase, MS SQL), you may use <literal>identity</literal> key generation. For databases that support sequences (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) you may use <literal>sequence</literal> style key generation. Both these strategies require two SQL queries to insert a new object."
+msgstr ""
+
+#: index.docbook:719
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">person_id_sequence</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:721
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0\">\n"
+ " <generator class=\"identity\"/>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:723
+msgid "For cross-platform development, the <literal>native</literal> strategy will choose from the <literal>identity</literal>, <literal>sequence</literal> and <literal>hilo</literal> strategies, dependant upon the capabilities of the underlying database."
+msgstr ""
+
+#: index.docbook:732
+msgid "Assigned identifiers"
+msgstr ""
+
+#: index.docbook:733
+msgid "If you want the application to assign identifiers (as opposed to having Hibernate generate them), you may use the <literal>assigned</literal> generator. This special generator will use the identifier value already assigned to the object's identifier property. This generator is used when the primary key is a natural key instead of a surrogate key. This is the default behavior if you do no specify a <literal><generator></literal> element."
+msgstr ""
+
+#: index.docbook:742
+msgid "Choosing the <literal>assigned</literal> generator makes Hibernate use <literal>unsaved-value=\"undefined\"</literal>, forcing Hibernate to go to the database to determine if an instance is transient or detached, unless there is a version or timestamp property, or you define <literal>Interceptor.isUnsaved()</literal>."
+msgstr ""
+
+#: index.docbook:752
+msgid "Primary keys assigned by triggers"
+msgstr ""
+
+#: index.docbook:753
+msgid "For legacy schemas only (Hibernate does not generate DDL with triggers)."
+msgstr ""
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"select\">\n"
+ " <param name=\"key\">socialSecurityNumber</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:759
+msgid "In the above example, there is a unique valued property named <literal>socialSecurityNumber</literal> defined by the class, as a natural key, and a surrogate key named <literal>person_id</literal> whose value is generated by a trigger."
+msgstr ""
+
+#: index.docbook:771
+msgid "Enhanced identifier generators"
+msgstr ""
+
+#: index.docbook:773
+msgid "Starting with release 3.2.3, there are 2 new generators which represent a re-thinking of 2 different aspects of identifier generation. The first aspect is database portability; the second is optimization (not having to query the database for every request for a new identifier value). These two new generators are intended to take the place of some of the named generators described above (starting in 3.3.x); however, they are included in the current releases and can be referenced by FQN."
+msgstr ""
+
+#: index.docbook:781
+msgid "The first of these new generators is <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> which is intended firstly as a replacement for the <literal>sequence</literal> generator and secondly as a better portability generator than <literal>native</literal> (because <literal>native</literal> (generally) chooses between <literal>identity</literal> and <literal>sequence</literal> which have largely different semantics which can cause subtle isssues in applications eyeing portability). <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> however achieves portability in a different manner. It chooses between using a table or a sequence in the database to store its incrementing values depending on the capabilities of the dialect being used. The difference between this and <literal>native</literal> is that table-based and sequence-based storage have the same exact semantic (in fact sequences are exactly what Hibernate tries to emmulate with its!
table-based generators). This generator has a number of configuration parameters:"
+msgstr ""
+
+#: index.docbook:795
+msgid "<literal>sequence_name</literal> (optional, defaults to <literal>hibernate_sequence</literal>): The name of the sequence (or table) to be used."
+msgstr ""
+
+#: index.docbook:801
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the sequence/table. In sequence creation terms, this is analogous to the clause typical named \"STARTS WITH\"."
+msgstr ""
+
+#: index.docbook:808
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the sequence/table should differ. In sequence creation terms, this is analogous to the clause typical named \"INCREMENT BY\"."
+msgstr ""
+
+#: index.docbook:815
+msgid "<literal>force_table_use</literal> (optional, defaults to <literal>false</literal>): Should we force the use of a table as the backing structure even though the dialect might support sequence?"
+msgstr ""
+
+#: index.docbook:822
+msgid "<literal>value_column</literal> (optional, defaults to <literal>next_val</literal>): Only relevant for table structures! The name of the column on the table which is used to hold the value."
+msgstr ""
+
+#: index.docbook:829
+msgid "<literal>optimizer</literal> (optional, defaults to <literal>none</literal>): See"
+msgstr ""
+
+#: index.docbook:836
+msgid "The second of these new generators is <literal>org.hibernate.id.enhanced.TableGenerator</literal> which is intended firstly as a replacement for the <literal>table</literal> generator (although it actually functions much more like <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal>) and secondly as a re-implementation of <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal> utilizing the notion of pluggable optimiziers. Essentially this generator defines a table capable of holding a number of different increment values simultaneously by using multiple distinctly keyed rows. This generator has a number of configuration parameters:"
+msgstr ""
+
+#: index.docbook:846
+msgid "<literal>table_name</literal> (optional, defaults to <literal>hibernate_sequences</literal>): The name of the table to be used."
+msgstr ""
+
+#: index.docbook:852
+msgid "<literal>value_column_name</literal> (optional, defaults to <literal>next_val</literal>): The name of the column on the table which is used to hold the value."
+msgstr ""
+
+#: index.docbook:858
+msgid "<literal>segment_column_name</literal> (optional, defaults to <literal>sequence_name</literal>): The name of the column on the table which is used to hold the \"segement key\". This is the value which distinctly identifies which increment value to use."
+msgstr ""
+
+#: index.docbook:865
+msgid "<literal>segment_value</literal> (optional, defaults to <literal>default</literal>): The \"segment key\" value for the segment from which we want to pull increment values for this generator."
+msgstr ""
+
+#: index.docbook:872
+msgid "<literal>segment_value_length</literal> (optional, defaults to <literal>255</literal>): Used for schema generation; the column size to create this segment key column."
+msgstr ""
+
+#: index.docbook:878
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the table."
+msgstr ""
+
+#: index.docbook:884
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the table should differ."
+msgstr ""
+
+#: index.docbook:890
+msgid "<literal>optimizer</literal> (optional, defaults to <literal></literal>): See"
+msgstr ""
+
+#: index.docbook:900
+msgid "Identifier generator optimization"
+msgstr ""
+
+#: index.docbook:901
+msgid "For identifier generators which store values in the database, it is inefficient for them to hit the database on each and every call to generate a new identifier value. Instead, you'd ideally want to group a bunch of them in memory and only hit the database when you have exhausted your in-memory value group. This is the role of the pluggable optimizers. Currently only the two enhanced generators (<xref linkend=\"mapping-declaration-id-enhanced\"/> support this notion."
+msgstr ""
+
+#: index.docbook:909
+msgid "<literal>none</literal> (generally this is the default if no optimizer was specified): This says to not perform any optimizations, and hit the database each and every request."
+msgstr ""
+
+#: index.docbook:915
+msgid "<literal>hilo</literal>: applies a hi/lo algorithm around the database retrieved values. The values from the database for this optimizer are expected to be sequential. The values retrieved from the database structure for this optimizer indicates the \"group number\"; the <literal>increment_size</literal> is multiplied by that value in memory to define a group \"hi value\"."
+msgstr ""
+
+#: index.docbook:924
+msgid "<literal>pooled</literal>: like was discussed for <literal>hilo</literal>, this optimizers attempts to minimize the number of hits to the database. Here, however, we simply store the starting value for the \"next group\" into the database structure rather than a sequential value in combination with an in-memory grouping algorithm. <literal>increment_size</literal> here refers to the values coming from the database."
+msgstr ""
+
+#: index.docbook:937
+msgid "composite-id"
+msgstr ""
+
+#: index.docbook:939
+msgid ""
+ "<![CDATA[<composite-id\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " mapped=\"true|false\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|.\"\n"
+ "\n"
+ " <key-property name=\"propertyName\" type=\"typename\" column=\"column_name\"/>\n"
+ " <key-many-to-one name=\"propertyName class=\"ClassName\" column=\"column_name\"/>\n"
+ " ......\n"
+ "</composite-id>]]>"
+msgstr ""
+
+#: index.docbook:941
+msgid "For a table with a composite key, you may map multiple properties of the class as identifier properties. The <literal><composite-id></literal> element accepts <literal><key-property></literal> property mappings and <literal><key-many-to-one></literal> mappings as child elements."
+msgstr ""
+
+#: index.docbook:948
+msgid ""
+ "<![CDATA[<composite-id>\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr ""
+
+#: index.docbook:950
+msgid "Your persistent class <emphasis>must</emphasis> override <literal>equals()</literal> and <literal>hashCode()</literal> to implement composite identifier equality. It must also implements <literal>Serializable</literal>."
+msgstr ""
+
+#: index.docbook:956
+msgid "Unfortunately, this approach to composite identifiers means that a persistent object is its own identifier. There is no convenient \"handle\" other than the object itself. You must instantiate an instance of the persistent class itself and populate its identifier properties before you can <literal>load()</literal> the persistent state associated with a composite key. We call this approach an <emphasis>embedded</emphasis> composite identifier, and discourage it for serious applications."
+msgstr ""
+
+#: index.docbook:965
+msgid "A second approach is what we call a <emphasis>mapped</emphasis> composite identifier, where the identifier properties named inside the <literal><composite-id></literal> element are duplicated on both the persistent class and a separate identifier class."
+msgstr ""
+
+#: index.docbook:971
+msgid ""
+ "<![CDATA[<composite-id class=\"MedicareId\" mapped=\"true\">\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr ""
+
+#: index.docbook:973
+msgid "In this example, both the composite identifier class, <literal>MedicareId</literal>, and the entity class itself have properties named <literal>medicareNumber</literal> and <literal>dependent</literal>. The identifier class must override <literal>equals()</literal> and <literal>hashCode()</literal> and implement. <literal>Serializable</literal>. The disadvantage of this approach is quite obvious—code duplication."
+msgstr ""
+
+#: index.docbook:982
+msgid "The following attributes are used to specify a mapped composite identifier:"
+msgstr ""
+
+#: index.docbook:988
+msgid "<literal>mapped</literal> (optional, defaults to <literal>false</literal>): indicates that a mapped composite identifier is used, and that the contained property mappings refer to both the entity class and the composite identifier class."
+msgstr ""
+
+#: index.docbook:996
+msgid "<literal>class</literal> (optional, but required for a mapped composite identifier): The class used as a composite identifier."
+msgstr ""
+
+#: index.docbook:1003
+msgid "We will describe a third, even more convenient approach where the composite identifier is implemented as a component class in <xref linkend=\"components-compositeid\"/>. The attributes described below apply only to this alternative approach:"
+msgstr ""
+
+#: index.docbook:1011
+msgid "<literal>name</literal> (optional, required for this approach): A property of component type that holds the composite identifier (see chapter 9)."
+msgstr ""
+
+#: index.docbook:1023
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The component class used as a composite identifier (see next section)."
+msgstr ""
+
+#: index.docbook:1030
+msgid "This third approach, an <emphasis>identifier component</emphasis> is the one we recommend for almost all applications."
+msgstr ""
+
+#: index.docbook:1038
+msgid "discriminator"
+msgstr ""
+
+#: index.docbook:1040
+msgid "The <literal><discriminator></literal> element is required for polymorphic persistence using the table-per-class-hierarchy mapping strategy and declares a discriminator column of the table. The discriminator column contains marker values that tell the persistence layer what subclass to instantiate for a particular row. A restricted set of types may be used: <literal>string</literal>, <literal>character</literal>, <literal>integer</literal>, <literal>byte</literal>, <literal>short</literal>, <literal>boolean</literal>, <literal>yes_no</literal>, <literal>true_false</literal>."
+msgstr ""
+
+#: index.docbook:1058
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " column=\"discriminator_column\"\n"
+ " type=\"discriminator_type\"\n"
+ " force=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary sql expression\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1061
+msgid "<literal>column</literal> (optional - defaults to <literal>class</literal>) the name of the discriminator column."
+msgstr ""
+
+#: index.docbook:1067
+msgid "<literal>type</literal> (optional - defaults to <literal>string</literal>) a name that indicates the Hibernate type"
+msgstr ""
+
+#: index.docbook:1073
+msgid "<literal>force</literal> (optional - defaults to <literal>false</literal>) \"force\" Hibernate to specify allowed discriminator values even when retrieving all instances of the root class."
+msgstr ""
+
+#: index.docbook:1080
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>) set this to <literal>false</literal> if your discriminator column is also part of a mapped composite identifier. (Tells Hibernate to not include the column in SQL <literal>INSERT</literal>s.)"
+msgstr ""
+
+#: index.docbook:1088
+msgid "<literal>formula</literal> (optional) an arbitrary SQL expression that is executed when a type has to be evaluated. Allows content-based discrimination."
+msgstr ""
+
+#: index.docbook:1096
+msgid "Actual values of the discriminator column are specified by the <literal>discriminator-value</literal> attribute of the <literal><class></literal> and <literal><subclass></literal> elements."
+msgstr ""
+
+#: index.docbook:1102
+msgid "The <literal>force</literal> attribute is (only) useful if the table contains rows with \"extra\" discriminator values that are not mapped to a persistent class. This will not usually be the case."
+msgstr ""
+
+#: index.docbook:1108
+msgid "Using the <literal>formula</literal> attribute you can declare an arbitrary SQL expression that will be used to evaluate the type of a row:"
+msgstr ""
+
+#: index.docbook:1113
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"\n"
+ " type=\"integer\"/>]]>"
+msgstr ""
+
+#: index.docbook:1118
+msgid "version (optional)"
+msgstr ""
+
+#: index.docbook:1120
+msgid "The <literal><version></literal> element is optional and indicates that the table contains versioned data. This is particularly useful if you plan to use <emphasis>long transactions</emphasis> (see below)."
+msgstr ""
+
+#: index.docbook:1136
+msgid ""
+ "<![CDATA[<version\n"
+ " column=\"version_column\"\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|negative|undefined\"\n"
+ " generated=\"never|always\"\n"
+ " insert=\"true|false\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1139
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the column holding the version number."
+msgstr ""
+
+#: index.docbook:1145
+msgid "<literal>name</literal>: The name of a property of the persistent class."
+msgstr ""
+
+#: index.docbook:1150
+msgid "<literal>type</literal> (optional - defaults to <literal>integer</literal>): The type of the version number."
+msgstr ""
+
+#: index.docbook:1162
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>undefined</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr ""
+
+#: index.docbook:1171
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this version property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr ""
+
+#: index.docbook:1178
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>): Specifies whether the version column should be included in SQL insert statements. May be set to <literal>false</literal> if and only if the database column is defined with a default value of <literal>0</literal>."
+msgstr ""
+
+#: index.docbook:1188
+msgid "Version numbers may be of Hibernate type <literal>long</literal>, <literal>integer</literal>, <literal>short</literal>, <literal>timestamp</literal> or <literal>calendar</literal>."
+msgstr ""
+
+#: index.docbook:1193
+msgid "A version or timestamp property should never be null for a detached instance, so Hibernate will detect any instance with a null version or timestamp as transient, no matter what other <literal>unsaved-value</literal> strategies are specified. <emphasis>Declaring a nullable version or timestamp property is an easy way to avoid any problems with transitive reattachment in Hibernate, especially useful for people using assigned identifiers or composite keys!</emphasis>"
+msgstr ""
+
+#: index.docbook:1204
+msgid "timestamp (optional)"
+msgstr ""
+
+#: index.docbook:1206
+msgid "The optional <literal><timestamp></literal> element indicates that the table contains timestamped data. This is intended as an alternative to versioning. Timestamps are by nature a less safe implementation of optimistic locking. However, sometimes the application might use the timestamps in other ways."
+msgstr ""
+
+#: index.docbook:1222
+msgid ""
+ "<![CDATA[<timestamp\n"
+ " column=\"timestamp_column\"\n"
+ " name=\"propertyName\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|undefined\"\n"
+ " source=\"vm|db\"\n"
+ " generated=\"never|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1225
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of a column holding the timestamp."
+msgstr ""
+
+#: index.docbook:1231
+msgid "<literal>name</literal>: The name of a JavaBeans style property of Java type <literal>Date</literal> or <literal>Timestamp</literal> of the persistent class."
+msgstr ""
+
+#: index.docbook:1244
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>null</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr ""
+
+#: index.docbook:1253
+msgid "<literal>source</literal> (optional - defaults to <literal>vm</literal>): From where should Hibernate retrieve the timestamp value? From the database, or from the current JVM? Database-based timestamps incur an overhead because Hibernate must hit the database in order to determine the \"next value\", but will be safer for use in clustered environments. Note also, that not all <literal>Dialect</literal>s are known to support retrieving of the database's current timestamp, while others might be unsafe for usage in locking due to lack of precision (Oracle 8 for example)."
+msgstr ""
+
+#: index.docbook:1265
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this timestamp property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr ""
+
+#: index.docbook:1274
+msgid "Note that <literal><timestamp></literal> is equivalent to <literal><version type=\"timestamp\"></literal>. And <literal><timestamp source=\"db\"></literal> is equivalent to <literal><version type=\"dbtimestamp\"></literal>"
+msgstr ""
+
+#: index.docbook:1284
+msgid "property"
+msgstr ""
+
+#: index.docbook:1286
+msgid "The <literal><property></literal> element declares a persistent, JavaBean style property of the class."
+msgstr ""
+
+#: index.docbook:1308
+msgid ""
+ "<![CDATA[<property\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " type=\"typename\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " generated=\"never|insert|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1311
+msgid "<literal>name</literal>: the name of the property, with an initial lowercase letter."
+msgstr ""
+
+#: index.docbook:1317
+msgid "<literal>column</literal> (optional - defaults to the property name): the name of the mapped database table column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr ""
+
+#: index.docbook:1324
+msgid "<literal>type</literal> (optional): a name that indicates the Hibernate type."
+msgstr ""
+
+#: index.docbook:1329
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) : specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" property whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr ""
+
+#: index.docbook:1338
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> property. Computed properties do not have a column mapping of their own."
+msgstr ""
+
+#: index.docbook:1351
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr ""
+
+#: index.docbook:1358
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the columns. Also, allow this to be the target of a <literal>property-ref</literal>."
+msgstr ""
+
+#: index.docbook:1365
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the columns."
+msgstr ""
+
+#: index.docbook:1371
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr ""
+
+#: index.docbook:1379
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr ""
+
+#: index.docbook:1388
+msgid "<emphasis>typename</emphasis> could be:"
+msgstr ""
+
+#: index.docbook:1394
+msgid "The name of a Hibernate basic type (eg. <literal>integer, string, character, date, timestamp, float, binary, serializable, object, blob</literal>)."
+msgstr ""
+
+#: index.docbook:1400
+msgid "The name of a Java class with a default basic type (eg. <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal>)."
+msgstr ""
+
+#: index.docbook:1406
+msgid "The name of a serializable Java class."
+msgstr ""
+
+#: index.docbook:1411
+msgid "The class name of a custom type (eg. <literal>com.illflow.type.MyCustomType</literal>)."
+msgstr ""
+
+#: index.docbook:1417
+msgid "If you do not specify a type, Hibernate will use reflection upon the named property to take a guess at the correct Hibernate type. Hibernate will try to interpret the name of the return class of the property getter using rules 2, 3, 4 in that order. However, this is not always enough. In certain cases you will still need the <literal>type</literal> attribute. (For example, to distinguish between <literal>Hibernate.DATE</literal> and <literal>Hibernate.TIMESTAMP</literal>, or to specify a custom type.)"
+msgstr ""
+
+#: index.docbook:1427
+msgid "The <literal>access</literal> attribute lets you control how Hibernate will access the property at runtime. By default, Hibernate will call the property get/set pair. If you specify <literal>access=\"field\"</literal>, Hibernate will bypass the get/set pair and access the field directly, using reflection. You may specify your own strategy for property access by naming a class that implements the interface <literal>org.hibernate.property.PropertyAccessor</literal>."
+msgstr ""
+
+#: index.docbook:1436
+msgid "An especially powerful feature are derived properties. These properties are by definition read-only, the property value is computed at load time. You declare the computation as a SQL expression, this translates to a <literal>SELECT</literal> clause subquery in the SQL query that loads an instance:"
+msgstr ""
+
+#: index.docbook:1443
+msgid ""
+ "<![CDATA[\n"
+ "<property name=\"totalPrice\"\n"
+ " formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p\n"
+ " WHERE li.productId = p.productId\n"
+ " AND li.customerId = customerId\n"
+ " AND li.orderNumber = orderNumber )\"/>]]>"
+msgstr ""
+
+#: index.docbook:1445
+msgid "Note that you can reference the entities own table by not declaring an alias on a particular column (<literal>customerId</literal> in the given example). Also note that you can use the nested <literal><formula></literal> mapping element if you don't like to use the attribute."
+msgstr ""
+
+#: index.docbook:1455
+msgid "many-to-one"
+msgstr ""
+
+#: index.docbook:1457
+msgid "An ordinary association to another persistent class is declared using a <literal>many-to-one</literal> element. The relational model is a many-to-one association: a foreign key in one table is referencing the primary key column(s) of the target table."
+msgstr ""
+
+#: index.docbook:1485
+msgid ""
+ "<![CDATA[<many-to-one\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " fetch=\"join|select\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1488, index.docbook:1669, index.docbook:1855
+msgid "<literal>name</literal>: The name of the property."
+msgstr ""
+
+#: index.docbook:1493, index.docbook:2284
+msgid "<literal>column</literal> (optional): The name of the foreign key column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr ""
+
+#: index.docbook:1500, index.docbook:1674
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the associated class."
+msgstr ""
+
+#: index.docbook:1506
+msgid "<literal>cascade</literal> (optional): Specifies which operations should be cascaded from the parent object to the associated object."
+msgstr ""
+
+#: index.docbook:1512, index.docbook:1695
+msgid "<literal>fetch</literal> (optional - defaults to <literal>select</literal>): Chooses between outer-join fetching or sequential select fetching."
+msgstr ""
+
+#: index.docbook:1518
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" association whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr ""
+
+#: index.docbook:1527
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class is used."
+msgstr ""
+
+#: index.docbook:1540
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. Also, allow this to be the target of a <literal>property-ref</literal>. This makes the association multiplicity effectively one to one."
+msgstr ""
+
+#: index.docbook:1548
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the foreign key columns."
+msgstr ""
+
+#: index.docbook:1554
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, dertermines if a version increment should occur when this property is dirty."
+msgstr ""
+
+#: index.docbook:1562
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched."
+msgstr ""
+
+#: index.docbook:1572
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr ""
+
+#: index.docbook:1579, index.docbook:1733
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class."
+msgstr ""
+
+#: index.docbook:1585
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> foreign key."
+msgstr ""
+
+#: index.docbook:1592
+msgid "Setting a value of the <literal>cascade</literal> attribute to any meaningful value other than <literal>none</literal> will propagate certain operations to the associated object. The meaningful values are the names of Hibernate's basic operations, <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal>, as well as the special values <literal>delete-orphan</literal> and <literal>all</literal> and comma-separated combinations of operation names, for example, <literal>cascade=\"persist,merge,evict\"</literal> or <literal>cascade=\"all,delete-orphan\"</literal>. See <xref linkend=\"objectstate-transitive\"/> for a full explanation. Note that single valued associations (many-to-one and one-to-one associations) do not support orphan delete."
+msgstr ""
+
+#: index.docbook:1605
+msgid "A typical <literal>many-to-one</literal> declaration looks as simple as this:"
+msgstr ""
+
+#: index.docbook:1609
+msgid "<![CDATA[<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>]]>"
+msgstr ""
+
+#: index.docbook:1611
+msgid "The <literal>property-ref</literal> attribute should only be used for mapping legacy data where a foreign key refers to a unique key of the associated table other than the primary key. This is an ugly relational model. For example, suppose the <literal>Product</literal> class had a unique serial number, that is not the primary key. (The <literal>unique</literal> attribute controls Hibernate's DDL generation with the SchemaExport tool.)"
+msgstr ""
+
+#: index.docbook:1620
+msgid "<![CDATA[<property name=\"serialNumber\" unique=\"true\" type=\"string\" column=\"SERIAL_NUMBER\"/>]]>"
+msgstr ""
+
+#: index.docbook:1622
+msgid "Then the mapping for <literal>OrderItem</literal> might use:"
+msgstr ""
+
+#: index.docbook:1626
+msgid "<![CDATA[<many-to-one name=\"product\" property-ref=\"serialNumber\" column=\"PRODUCT_SERIAL_NUMBER\"/>]]>"
+msgstr ""
+
+#: index.docbook:1628
+msgid "This is certainly not encouraged, however."
+msgstr ""
+
+#: index.docbook:1632
+msgid "If the referenced unique key comprises multiple properties of the associated entity, you should map the referenced properties inside a named <literal><properties></literal> element."
+msgstr ""
+
+#: index.docbook:1637
+msgid "If the referenced unique key is the property of a component, you may specify a property path:"
+msgstr ""
+
+#: index.docbook:1641
+msgid "<![CDATA[<many-to-one name=\"owner\" property-ref=\"identity.ssn\" column=\"OWNER_SSN\"/>]]>"
+msgstr ""
+
+#: index.docbook:1646
+msgid "one-to-one"
+msgstr ""
+
+#: index.docbook:1648
+msgid "A one-to-one association to another persistent class is declared using a <literal>one-to-one</literal> element."
+msgstr ""
+
+#: index.docbook:1666
+msgid ""
+ "<![CDATA[<one-to-one\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " constrained=\"true|false\"\n"
+ " fetch=\"join|select\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " formula=\"any SQL expression\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1680
+msgid "<literal>cascade</literal> (optional) specifies which operations should be cascaded from the parent object to the associated object."
+msgstr ""
+
+#: index.docbook:1686
+msgid "<literal>constrained</literal> (optional) specifies that a foreign key constraint on the primary key of the mapped table references the table of the associated class. This option affects the order in which <literal>save()</literal> and <literal>delete()</literal> are cascaded, and determines whether the association may be proxied (it is also used by the schema export tool)."
+msgstr ""
+
+#: index.docbook:1701
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to the primary key of this class. If not specified, the primary key of the associated class is used."
+msgstr ""
+
+#: index.docbook:1714
+msgid "<literal>formula</literal> (optional): Almost all one to one associations map to the primary key of the owning entity. In the rare case that this is not the case, you may specify a some other column, columns or expression to join on using an SQL formula. (See <literal>org.hibernate.test.onetooneformula</literal> for an example.)"
+msgstr ""
+
+#: index.docbook:1722
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched. <emphasis>Note that if <literal>constrained=\"false\"</literal>, proxying is impossible and Hibernate will eager fetch the association!</emphasis>"
+msgstr ""
+
+#: index.docbook:1740
+msgid "There are two varieties of one-to-one association:"
+msgstr ""
+
+#: index.docbook:1744
+msgid "primary key associations"
+msgstr ""
+
+#: index.docbook:1747
+msgid "unique foreign key associations"
+msgstr ""
+
+#: index.docbook:1752
+msgid "Primary key associations don't need an extra table column; if two rows are related by the association then the two table rows share the same primary key value. So if you want two objects to be related by a primary key association, you must make sure that they are assigned the same identifier value!"
+msgstr ""
+
+#: index.docbook:1759
+msgid "For a primary key association, add the following mappings to <literal>Employee</literal> and <literal>Person</literal>, respectively."
+msgstr ""
+
+#: index.docbook:1764
+msgid "<![CDATA[<one-to-one name=\"person\" class=\"Person\"/>]]>"
+msgstr ""
+
+#: index.docbook:1765
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:1767
+msgid "Now we must ensure that the primary keys of related rows in the PERSON and EMPLOYEE tables are equal. We use a special Hibernate identifier generation strategy called <literal>foreign</literal>:"
+msgstr ""
+
+#: index.docbook:1773
+msgid ""
+ "<![CDATA[<class name=\"person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">employee</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " ...\n"
+ " <one-to-one name=\"employee\"\n"
+ " class=\"Employee\"\n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:1775
+msgid "A newly saved instance of <literal>Person</literal> is then assigned the same primary key value as the <literal>Employee</literal> instance refered with the <literal>employee</literal> property of that <literal>Person</literal>."
+msgstr ""
+
+#: index.docbook:1781
+msgid "Alternatively, a foreign key with a unique constraint, from <literal>Employee</literal> to <literal>Person</literal>, may be expressed as:"
+msgstr ""
+
+#: index.docbook:1786
+msgid "<![CDATA[<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" unique=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:1788
+msgid "And this association may be made bidirectional by adding the following to the <literal>Person</literal> mapping:"
+msgstr ""
+
+#: index.docbook:1793
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" property-ref=\"person\"/>]]>"
+msgstr ""
+
+#: index.docbook:1798
+msgid "natural-id"
+msgstr ""
+
+#: index.docbook:1800
+msgid ""
+ "<![CDATA[<natural-id mutable=\"true|false\"/>\n"
+ " <property ... />\n"
+ " <many-to-one ... />\n"
+ " ......\n"
+ "</natural-id>]]>"
+msgstr ""
+
+#: index.docbook:1802
+msgid "Even though we recommend the use of surrogate keys as primary keys, you should still try to identify natural keys for all entities. A natural key is a property or combination of properties that is unique and non-null. If it is also immutable, even better. Map the properties of the natural key inside the <literal><natural-id></literal> element. Hibernate will generate the necessary unique key and nullability constraints, and your mapping will be more self-documenting."
+msgstr ""
+
+#: index.docbook:1811
+msgid "We strongly recommend that you implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the natural key properties of the entity."
+msgstr ""
+
+#: index.docbook:1816
+msgid "This mapping is not intended for use with entities with natural primary keys."
+msgstr ""
+
+#: index.docbook:1822
+msgid "<literal>mutable</literal> (optional, defaults to <literal>false</literal>): By default, natural identifier properties as assumed to be immutable (constant)."
+msgstr ""
+
+#: index.docbook:1832
+msgid "component, dynamic-component"
+msgstr ""
+
+#: index.docbook:1834
+msgid "The <literal><component></literal> element maps properties of a child object to columns of the table of a parent class. Components may, in turn, declare their own properties, components or collections. See \"Components\" below."
+msgstr ""
+
+#: index.docbook:1852
+msgid ""
+ "<![CDATA[<component\n"
+ " name=\"propertyName\"\n"
+ " class=\"className\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</component>]]>"
+msgstr ""
+
+#: index.docbook:1860
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the component (child) class."
+msgstr ""
+
+#: index.docbook:1866, index.docbook:1955
+msgid "<literal>insert</literal>: Do the mapped columns appear in SQL <literal>INSERT</literal>s?"
+msgstr ""
+
+#: index.docbook:1872, index.docbook:1961
+msgid "<literal>update</literal>: Do the mapped columns appear in SQL <literal>UPDATE</literal>s?"
+msgstr ""
+
+#: index.docbook:1884
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this component should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr ""
+
+#: index.docbook:1891
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this component do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr ""
+
+#: index.docbook:1899, index.docbook:1975
+msgid "<literal>unique</literal> (optional - defaults to <literal>false</literal>): Specifies that a unique constraint exists upon all mapped columns of the component."
+msgstr ""
+
+#: index.docbook:1908
+msgid "The child <literal><property></literal> tags map properties of the child class to table columns."
+msgstr ""
+
+#: index.docbook:1913
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr ""
+
+#: index.docbook:1919
+msgid "The <literal><dynamic-component></literal> element allows a <literal>Map</literal> to be mapped as a component, where the property names refer to keys of the map, see <xref linkend=\"components-dynamic\"/>."
+msgstr ""
+
+#: index.docbook:1928
+msgid "properties"
+msgstr ""
+
+#: index.docbook:1930
+msgid "The <literal><properties></literal> element allows the definition of a named, logical grouping of properties of a class. The most important use of the construct is that it allows a combination of properties to be the target of a <literal>property-ref</literal>. It is also a convenient way to define a multi-column unique constraint."
+msgstr ""
+
+#: index.docbook:1946
+msgid ""
+ "<![CDATA[<properties\n"
+ " name=\"logicalName\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</properties>]]>"
+msgstr ""
+
+#: index.docbook:1949
+msgid "<literal>name</literal>: The logical name of the grouping - <emphasis>not</emphasis> an actual property name."
+msgstr ""
+
+#: index.docbook:1967
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to these properties do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when these properties are dirty."
+msgstr ""
+
+#: index.docbook:1984
+msgid "For example, if we have the following <literal><properties></literal> mapping:"
+msgstr ""
+
+#: index.docbook:1988
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"personNumber\"/>\n"
+ " ...\n"
+ " <properties name=\"name\"\n"
+ " unique=\"true\" update=\"false\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </properties>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:1990
+msgid "Then we might have some legacy data association which refers to this unique key of the <literal>Person</literal> table, instead of to the primary key:"
+msgstr ""
+
+#: index.docbook:1995
+msgid ""
+ "<![CDATA[<many-to-one name=\"person\"\n"
+ " class=\"Person\" property-ref=\"name\">\n"
+ " <column name=\"firstName\"/>\n"
+ " <column name=\"initial\"/>\n"
+ " <column name=\"lastName\"/>\n"
+ "</many-to-one>]]>"
+msgstr ""
+
+#: index.docbook:1997
+msgid "We don't recommend the use of this kind of thing outside the context of mapping legacy data."
+msgstr ""
+
+#: index.docbook:2005
+msgid "subclass"
+msgstr ""
+
+#: index.docbook:2007
+msgid "Finally, polymorphic persistence requires the declaration of each subclass of the root persistent class. For the table-per-class-hierarchy mapping strategy, the <literal><subclass></literal> declaration is used."
+msgstr ""
+
+#: index.docbook:2020
+msgid ""
+ "<![CDATA[<subclass\n"
+ " name=\"ClassName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " extends=\"SuperclassName\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</subclass>]]>"
+msgstr ""
+
+#: index.docbook:2023, index.docbook:2081, index.docbook:2144
+msgid "<literal>name</literal>: The fully qualified class name of the subclass."
+msgstr ""
+
+#: index.docbook:2028
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses."
+msgstr ""
+
+#: index.docbook:2034, index.docbook:2091, index.docbook:2154
+msgid "<literal>proxy</literal> (optional): Specifies a class or interface to use for lazy initializing proxies."
+msgstr ""
+
+#: index.docbook:2040, index.docbook:2097, index.docbook:2160
+msgid "<literal>lazy</literal> (optional, defaults to <literal>true</literal>): Setting <literal>lazy=\"false\"</literal> disables the use of lazy fetching."
+msgstr ""
+
+#: index.docbook:2048
+msgid "Each subclass should declare its own persistent properties and subclasses. <literal><version></literal> and <literal><id></literal> properties are assumed to be inherited from the root class. Each subclass in a heirarchy must define a unique <literal>discriminator-value</literal>. If none is specified, the fully qualified Java class name is used."
+msgstr ""
+
+#: index.docbook:2056, index.docbook:2114, index.docbook:2172
+msgid "For information about inheritance mappings, see <xref linkend=\"inheritance\"/>."
+msgstr ""
+
+#: index.docbook:2063
+msgid "joined-subclass"
+msgstr ""
+
+#: index.docbook:2065
+msgid "Alternatively, each subclass may be mapped to its own table (table-per-subclass mapping strategy). Inherited state is retrieved by joining with the table of the superclass. We use the <literal><joined-subclass></literal> element."
+msgstr ""
+
+#: index.docbook:2078
+msgid ""
+ "<![CDATA[<joined-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <key .... >\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</joined-subclass>]]>"
+msgstr ""
+
+#: index.docbook:2086, index.docbook:2149
+msgid "<literal>table</literal>: The name of the subclass table."
+msgstr ""
+
+#: index.docbook:2105
+msgid "No discriminator column is required for this mapping strategy. Each subclass must, however, declare a table column holding the object identifier using the <literal><key></literal> element. The mapping at the start of the chapter would be re-written as:"
+msgstr ""
+
+#: index.docbook:2112
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" table=\"CATS\">\n"
+ " <id name=\"id\" column=\"uid\" type=\"long\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " <property name=\"birthdate\" type=\"date\"/>\n"
+ " <property name=\"color\" not-null=\"true\"/>\n"
+ " <property name=\"sex\" not-null=\"true\"/>\n"
+ " <property name=\"weight\"/>\n"
+ " <many-to-one name=\"mate\"/>\n"
+ " <set name=\"kittens\">\n"
+ " <key column=\"MOTHER\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ " <joined-subclass name=\"DomesticCat\" table=\"DOMESTIC_CATS\">\n"
+ " <key column=\"CAT\"/>\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </joined-subclass>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"eg.Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2121
+msgid "union-subclass"
+msgstr ""
+
+#: index.docbook:2123
+msgid "A third option is to map only the concrete classes of an inheritance hierarchy to tables, (the table-per-concrete-class strategy) where each table defines all persistent state of the class, including inherited state. In Hibernate, it is not absolutely necessary to explicitly map such inheritance hierarchies. You can simply map each class with a separate <literal><class></literal> declaration. However, if you wish use polymorphic associations (e.g. an association to the superclass of your hierarchy), you need to use the <literal><union-subclass></literal> mapping."
+msgstr ""
+
+#: index.docbook:2141
+msgid ""
+ "<![CDATA[<union-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " abstract=\"true|false\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</union-subclass>]]>"
+msgstr ""
+
+#: index.docbook:2168
+msgid "No discriminator column or key column is required for this mapping strategy."
+msgstr ""
+
+#: index.docbook:2179
+msgid "join"
+msgstr ""
+
+#: index.docbook:2181
+msgid "Using the <literal><join></literal> element, it is possible to map properties of one class to several tables, when there's a 1-to-1 relationship between the tables."
+msgstr ""
+
+#: index.docbook:2195
+msgid ""
+ "<![CDATA[<join\n"
+ " table=\"tablename\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " fetch=\"join|select\"\n"
+ " inverse=\"true|false\"\n"
+ " optional=\"true|false\">\n"
+ "\n"
+ " <key ... />\n"
+ "\n"
+ " <property ... />\n"
+ " ...\n"
+ "</join>]]>"
+msgstr ""
+
+#: index.docbook:2199
+msgid "<literal>table</literal>: The name of the joined table."
+msgstr ""
+
+#: index.docbook:2216
+msgid "<literal>fetch</literal> (optional - defaults to <literal>join</literal>): If set to <literal>join</literal>, the default, Hibernate will use an inner join to retrieve a <literal><join></literal> defined by a class or its superclasses and an outer join for a <literal><join></literal> defined by a subclass. If set to <literal>select</literal> then Hibernate will use a sequential select for a <literal><join></literal> defined on a subclass, which will be issued only if a row turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a <literal><join></literal> defined by the class and its superclasses."
+msgstr ""
+
+#: index.docbook:2229
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will not try to insert or update the properties defined by this join."
+msgstr ""
+
+#: index.docbook:2236
+msgid "<literal>optional</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will insert a row only if the properties defined by this join are non-null and will always use an outer join to retrieve the properties."
+msgstr ""
+
+#: index.docbook:2245
+msgid "For example, the address information for a person can be mapped to a separate table (while preserving value type semantics for all properties):"
+msgstr ""
+
+#: index.docbook:2250
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " table=\"PERSON\">\n"
+ "\n"
+ " <id name=\"id\" column=\"PERSON_ID\">...</id>\n"
+ "\n"
+ " <join table=\"ADDRESS\">\n"
+ " <key column=\"ADDRESS_ID\"/>\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </join>\n"
+ " ...]]>"
+msgstr ""
+
+#: index.docbook:2252
+msgid "This feature is often only useful for legacy data models, we recommend fewer tables than classes and a fine-grained domain model. However, it is useful for switching between inheritance mapping strategies in a single hierarchy, as explained later."
+msgstr ""
+
+#: index.docbook:2262
+msgid "<title>key</title>"
+msgstr ""
+
+#: index.docbook:2264
+msgid "We've seen the <literal><key></literal> element crop up a few times now. It appears anywhere the parent mapping element defines a join to a new table, and defines the foreign key in the joined table, that references the primary key of the original table."
+msgstr ""
+
+#: index.docbook:2280
+msgid ""
+ "<![CDATA[<key\n"
+ " column=\"columnname\"\n"
+ " on-delete=\"noaction|cascade\"\n"
+ " property-ref=\"propertyName\"\n"
+ " not-null=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:2291
+msgid "<literal>on-delete</literal> (optional, defaults to <literal>noaction</literal>): Specifies whether the foreign key constraint has database-level cascade delete enabled."
+msgstr ""
+
+#: index.docbook:2298
+msgid "<literal>property-ref</literal> (optional): Specifies that the foreign key refers to columns that are not the primary key of the orginal table. (Provided for legacy data.)"
+msgstr ""
+
+#: index.docbook:2305
+msgid "<literal>not-null</literal> (optional): Specifies that the foreign key columns are not nullable (this is implied whenever the foreign key is also part of the primary key)."
+msgstr ""
+
+#: index.docbook:2312
+msgid "<literal>update</literal> (optional): Specifies that the foreign key should never be updated (this is implied whenever the foreign key is also part of the primary key)."
+msgstr ""
+
+#: index.docbook:2319
+msgid "<literal>unique</literal> (optional): Specifies that the foreign key should have a unique constraint (this is implied whenever the foreign key is also the primary key)."
+msgstr ""
+
+#: index.docbook:2327
+msgid "We recommend that for systems where delete performance is important, all keys should be defined <literal>on-delete=\"cascade\"</literal>, and Hibernate will use a database-level <literal>ON CASCADE DELETE</literal> constraint, instead of many individual <literal>DELETE</literal> statements. Be aware that this feature bypasses Hibernate's usual optimistic locking strategy for versioned data."
+msgstr ""
+
+#: index.docbook:2335
+msgid "The <literal>not-null</literal> and <literal>update</literal> attributes are useful when mapping a unidirectional one to many association. If you map a unidirectional one to many to a non-nullable foreign key, you <emphasis>must</emphasis> declare the key column using <literal><key not-null=\"true\"></literal>."
+msgstr ""
+
+#: index.docbook:2345
+msgid "column and formula elements"
+msgstr ""
+
+#: index.docbook:2346
+msgid "Any mapping element which accepts a <literal>column</literal> attribute will alternatively accept a <literal><column></literal> subelement. Likewise, <literal><formula></literal> is an alternative to the <literal>formula</literal> attribute."
+msgstr ""
+
+#: index.docbook:2352
+msgid ""
+ "<![CDATA[<column\n"
+ " name=\"column_name\"\n"
+ " length=\"N\"\n"
+ " precision=\"N\"\n"
+ " scale=\"N\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " unique-key=\"multicolumn_unique_key_name\"\n"
+ " index=\"index_name\"\n"
+ " sql-type=\"sql_type_name\"\n"
+ " check=\"SQL expression\"\n"
+ " default=\"SQL expression\"/>]]>"
+msgstr ""
+
+#: index.docbook:2354
+msgid "<![CDATA[<formula>SQL expression</formula>]]>"
+msgstr ""
+
+#: index.docbook:2356
+msgid "<literal>column</literal> and <literal>formula</literal> attributes may even be combined within the same property or association mapping to express, for example, exotic join conditions."
+msgstr ""
+
+#: index.docbook:2362
+msgid ""
+ "<![CDATA[<many-to-one name=\"homeAddress\" class=\"Address\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"person_id\" not-null=\"true\" length=\"10\"/>\n"
+ " <formula>'MAILING'</formula>\n"
+ "</many-to-one>]]>"
+msgstr ""
+
+#: index.docbook:2367
+msgid "import"
+msgstr ""
+
+#: index.docbook:2369
+msgid "Suppose your application has two persistent classes with the same name, and you don't want to specify the fully qualified (package) name in Hibernate queries. Classes may be \"imported\" explicitly, rather than relying upon <literal>auto-import=\"true\"</literal>. You may even import classes and interfaces that are not explicitly mapped."
+msgstr ""
+
+#: index.docbook:2376
+msgid "<![CDATA[<import class=\"java.lang.Object\" rename=\"Universe\"/>]]>"
+msgstr ""
+
+#: index.docbook:2383
+msgid ""
+ "<![CDATA[<import\n"
+ " class=\"ClassName\"\n"
+ " rename=\"ShortName\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:2386
+msgid "<literal>class</literal>: The fully qualified class name of of any Java class."
+msgstr ""
+
+#: index.docbook:2391
+msgid "<literal>rename</literal> (optional - defaults to the unqualified class name): A name that may be used in the query language."
+msgstr ""
+
+#: index.docbook:2402
+msgid "<title>any</title>"
+msgstr ""
+
+#: index.docbook:2404
+msgid "There is one further type of property mapping. The <literal><any></literal> mapping element defines a polymorphic association to classes from multiple tables. This type of mapping always requires more than one column. The first column holds the type of the associated entity. The remaining columns hold the identifier. It is impossible to specify a foreign key constraint for this kind of association, so this is most certainly not meant as the usual way of mapping (polymorphic) associations. You should use this only in very special cases (eg. audit logs, user session data, etc)."
+msgstr ""
+
+#: index.docbook:2414
+msgid "The <literal>meta-type</literal> attribute lets the application specify a custom type that maps database column values to persistent classes which have identifier properties of the type specified by <literal>id-type</literal>. You must specify the mapping from values of the meta-type to class names."
+msgstr ""
+
+#: index.docbook:2421
+msgid ""
+ "<![CDATA[<any name=\"being\" id-type=\"long\" meta-type=\"string\">\n"
+ " <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>\n"
+ " <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>\n"
+ " <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>\n"
+ " <column name=\"table_name\"/>\n"
+ " <column name=\"id\"/>\n"
+ "</any>]]>"
+msgstr ""
+
+#: index.docbook:2432
+msgid ""
+ "<![CDATA[<any\n"
+ " name=\"propertyName\"\n"
+ " id-type=\"idtypename\"\n"
+ " meta-type=\"metatypename\"\n"
+ " cascade=\"cascade_style\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ ">\n"
+ " <meta-value ... />\n"
+ " <meta-value ... />\n"
+ " .....\n"
+ " <column .... />\n"
+ " <column .... />\n"
+ " .....\n"
+ "</any>]]>"
+msgstr ""
+
+#: index.docbook:2435
+msgid "<literal>name</literal>: the property name."
+msgstr ""
+
+#: index.docbook:2440
+msgid "<literal>id-type</literal>: the identifier type."
+msgstr ""
+
+#: index.docbook:2445
+msgid "<literal>meta-type</literal> (optional - defaults to <literal>string</literal>): Any type that is allowed for a discriminator mapping."
+msgstr ""
+
+#: index.docbook:2451
+msgid "<literal>cascade</literal> (optional- defaults to <literal>none</literal>): the cascade style."
+msgstr ""
+
+#: index.docbook:2463
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, define if a version increment should occur if this property is dirty."
+msgstr ""
+
+#: index.docbook:2478
+msgid "Hibernate Types"
+msgstr ""
+
+#: index.docbook:2481
+msgid "Entities and values"
+msgstr ""
+
+#: index.docbook:2483
+msgid "To understand the behaviour of various Java language-level objects with respect to the persistence service, we need to classify them into two groups:"
+msgstr ""
+
+#: index.docbook:2488
+msgid "An <emphasis>entity</emphasis> exists independently of any other objects holding references to the entity. Contrast this with the usual Java model where an unreferenced object is garbage collected. Entities must be explicitly saved and deleted (except that saves and deletions may be <emphasis>cascaded</emphasis> from a parent entity to its children). This is different from the ODMG model of object persistence by reachablity - and corresponds more closely to how application objects are usually used in large systems. Entities support circular and shared references. They may also be versioned."
+msgstr ""
+
+#: index.docbook:2499
+msgid "An entity's persistent state consists of references to other entities and instances of <emphasis>value</emphasis> types. Values are primitives, collections (not what's inside a collection), components and certain immutable objects. Unlike entities, values (in particular collections and components) <emphasis>are</emphasis> persisted and deleted by reachability. Since value objects (and primitives) are persisted and deleted along with their containing entity they may not be independently versioned. Values have no independent identity, so they cannot be shared by two entities or collections."
+msgstr ""
+
+#: index.docbook:2510
+msgid "Up until now, we've been using the term \"persistent class\" to refer to entities. We will continue to do that. Strictly speaking, however, not all user-defined classes with persistent state are entities. A <emphasis>component</emphasis> is a user defined class with value semantics. A Java property of type <literal>java.lang.String</literal> also has value semantics. Given this definition, we can say that all types (classes) provided by the JDK have value type semantics in Java, while user-defined types may be mapped with entity or value type semantics. This decision is up to the application developer. A good hint for an entity class in a domain model are shared references to a single instance of that class, while composition or aggregation usually translates to a value type."
+msgstr ""
+
+#: index.docbook:2524
+msgid "We'll revisit both concepts throughout the documentation."
+msgstr ""
+
+#: index.docbook:2528
+msgid "The challenge is to map the Java type system (and the developers' definition of entities and value types) to the SQL/database type system. The bridge between both systems is provided by Hibernate: for entities we use <literal><class></literal>, <literal><subclass></literal> and so on. For value types we use <literal><property></literal>, <literal><component></literal>, etc, usually with a <literal>type</literal> attribute. The value of this attribute is the name of a Hibernate <emphasis>mapping type</emphasis>. Hibernate provides many mappings (for standard JDK value types) out of the box. You can write your own mapping types and implement your custom conversion strategies as well, as you'll see later."
+msgstr ""
+
+#: index.docbook:2541
+msgid "All built-in Hibernate types except collections support null semantics."
+msgstr ""
+
+#: index.docbook:2548
+msgid "Basic value types"
+msgstr ""
+
+#: index.docbook:2550
+msgid "The built-in <emphasis>basic mapping types</emphasis> may be roughly categorized into"
+msgstr ""
+
+#: index.docbook:2555
+msgid "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+msgstr ""
+
+#: index.docbook:2558
+msgid "Type mappings from Java primitives or wrapper classes to appropriate (vendor-specific) SQL column types. <literal>boolean, yes_no</literal> and <literal>true_false</literal> are all alternative encodings for a Java <literal>boolean</literal> or <literal>java.lang.Boolean</literal>."
+msgstr ""
+
+#: index.docbook:2567
+msgid "string"
+msgstr ""
+
+#: index.docbook:2569
+msgid "A type mapping from <literal>java.lang.String</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>)."
+msgstr ""
+
+#: index.docbook:2576
+msgid "date, time, timestamp"
+msgstr ""
+
+#: index.docbook:2578
+msgid "Type mappings from <literal>java.util.Date</literal> and its subclasses to SQL types <literal>DATE</literal>, <literal>TIME</literal> and <literal>TIMESTAMP</literal> (or equivalent)."
+msgstr ""
+
+#: index.docbook:2586
+msgid "calendar, calendar_date"
+msgstr ""
+
+#: index.docbook:2588
+msgid "Type mappings from <literal>java.util.Calendar</literal> to SQL types <literal>TIMESTAMP</literal> and <literal>DATE</literal> (or equivalent)."
+msgstr ""
+
+#: index.docbook:2596
+msgid "big_decimal, big_integer"
+msgstr ""
+
+#: index.docbook:2598
+msgid "Type mappings from <literal>java.math.BigDecimal</literal> and <literal>java.math.BigInteger</literal> to <literal>NUMERIC</literal> (or Oracle <literal>NUMBER</literal>)."
+msgstr ""
+
+#: index.docbook:2606
+msgid "locale, timezone, currency"
+msgstr ""
+
+#: index.docbook:2608
+msgid "Type mappings from <literal>java.util.Locale</literal>, <literal>java.util.TimeZone</literal> and <literal>java.util.Currency</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). Instances of <literal>Locale</literal> and <literal>Currency</literal> are mapped to their ISO codes. Instances of <literal>TimeZone</literal> are mapped to their <literal>ID</literal>."
+msgstr ""
+
+#: index.docbook:2620
+msgid "<literal>class</literal>"
+msgstr ""
+
+#: index.docbook:2622
+msgid "A type mapping from <literal>java.lang.Class</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). A <literal>Class</literal> is mapped to its fully qualified name."
+msgstr ""
+
+#: index.docbook:2630
+msgid "binary"
+msgstr ""
+
+#: index.docbook:2632
+msgid "Maps byte arrays to an appropriate SQL binary type."
+msgstr ""
+
+#: index.docbook:2638
+msgid "text"
+msgstr ""
+
+#: index.docbook:2640
+msgid "Maps long Java strings to a SQL <literal>CLOB</literal> or <literal>TEXT</literal> type."
+msgstr ""
+
+#: index.docbook:2647
+msgid "serializable"
+msgstr ""
+
+#: index.docbook:2649
+msgid "Maps serializable Java types to an appropriate SQL binary type. You may also indicate the Hibernate type <literal>serializable</literal> with the name of a serializable Java class or interface that does not default to a basic type."
+msgstr ""
+
+#: index.docbook:2658
+msgid "clob, blob"
+msgstr ""
+
+#: index.docbook:2660
+msgid "Type mappings for the JDBC classes <literal>java.sql.Clob</literal> and <literal>java.sql.Blob</literal>. These types may be inconvenient for some applications, since the blob or clob object may not be reused outside of a transaction. (Furthermore, driver support is patchy and inconsistent.)"
+msgstr ""
+
+#: index.docbook:2670
+msgid "imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary"
+msgstr ""
+
+#: index.docbook:2674
+msgid "Type mappings for what are usually considered mutable Java types, where Hibernate makes certain optimizations appropriate only for immutable Java types, and the application treats the object as immutable. For example, you should not call <literal>Date.setTime()</literal> for an instance mapped as <literal>imm_timestamp</literal>. To change the value of the property, and have that change made persistent, the application must assign a new (nonidentical) object to the property."
+msgstr ""
+
+#: index.docbook:2689
+msgid "Unique identifiers of entities and collections may be of any basic type except <literal>binary</literal>, <literal>blob</literal> and <literal>clob</literal>. (Composite identifiers are also allowed, see below.)"
+msgstr ""
+
+#: index.docbook:2695
+msgid "The basic value types have corresponding <literal>Type</literal> constants defined on <literal>org.hibernate.Hibernate</literal>. For example, <literal>Hibernate.STRING</literal> represents the <literal>string</literal> type."
+msgstr ""
+
+#: index.docbook:2704
+msgid "Custom value types"
+msgstr ""
+
+#: index.docbook:2706
+msgid "It is relatively easy for developers to create their own value types. For example, you might want to persist properties of type <literal>java.lang.BigInteger</literal> to <literal>VARCHAR</literal> columns. Hibernate does not provide a built-in type for this. But custom types are not limited to mapping a property (or collection element) to a single table column. So, for example, you might have a Java property <literal>getName()</literal>/<literal>setName()</literal> of type <literal>java.lang.String</literal> that is persisted to the columns <literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal>."
+msgstr ""
+
+#: index.docbook:2717
+msgid "To implement a custom type, implement either <literal>org.hibernate.UserType</literal> or <literal>org.hibernate.CompositeUserType</literal> and declare properties using the fully qualified classname of the type. Check out <literal>org.hibernate.test.DoubleStringType</literal> to see the kind of things that are possible."
+msgstr ""
+
+#: index.docbook:2725
+msgid ""
+ "<![CDATA[<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType\">\n"
+ " <column name=\"first_string\"/>\n"
+ " <column name=\"second_string\"/>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:2727
+msgid "Notice the use of <literal><column></literal> tags to map a property to multiple columns."
+msgstr ""
+
+#: index.docbook:2732
+msgid "The <literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>, <literal>UserCollectionType</literal>, and <literal>UserVersionType</literal> interfaces provide support for more specialized uses."
+msgstr ""
+
+#: index.docbook:2738
+msgid "You may even supply parameters to a <literal>UserType</literal> in the mapping file. To do this, your <literal>UserType</literal> must implement the <literal>org.hibernate.usertype.ParameterizedType</literal> interface. To supply parameters to your custom type, you can use the <literal><type></literal> element in your mapping files."
+msgstr ""
+
+#: index.docbook:2746
+msgid ""
+ "<![CDATA[<property name=\"priority\">\n"
+ " <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
+ " <param name=\"default\">0</param>\n"
+ " </type>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:2748
+msgid "The <literal>UserType</literal> can now retrieve the value for the parameter named <literal>default</literal> from the <literal>Properties</literal> object passed to it."
+msgstr ""
+
+#: index.docbook:2753
+msgid "If you use a certain <literal>UserType</literal> very often, it may be useful to define a shorter name for it. You can do this using the <literal><typedef></literal> element. Typedefs assign a name to a custom type, and may also contain a list of default parameter values if the type is parameterized."
+msgstr ""
+
+#: index.docbook:2760
+msgid ""
+ "<![CDATA[<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name=\"default_zero\">\n"
+ " <param name=\"default\">0</param>\n"
+ "</typedef>]]>"
+msgstr ""
+
+#: index.docbook:2762
+msgid "<![CDATA[<property name=\"priority\" type=\"default_zero\"/>]]>"
+msgstr ""
+
+#: index.docbook:2764
+msgid "It is also possible to override the parameters supplied in a typedef on a case-by-case basis by using type parameters on the property mapping."
+msgstr ""
+
+#: index.docbook:2769
+msgid "Even though Hibernate's rich range of built-in types and support for components means you will very rarely <emphasis>need</emphasis> to use a custom type, it is nevertheless considered good form to use custom types for (non-entity) classes that occur frequently in your application. For example, a <literal>MonetaryAmount</literal> class is a good candidate for a <literal>CompositeUserType</literal>, even though it could easily be mapped as a component. One motivation for this is abstraction. With a custom type, your mapping documents would be future-proofed against possible changes in your way of representing monetary values."
+msgstr ""
+
+#: index.docbook:2785
+msgid "Mapping a class more than once"
+msgstr ""
+
+#: index.docbook:2786
+msgid "It is possible to provide more than one mapping for a particular persistent class. In this case you must specify an <emphasis>entity name</emphasis> do disambiguate between instances of the two mapped entities. (By default, the entity name is the same as the class name.) Hibernate lets you specify the entity name when working with persistent objects, when writing queries, or when mapping associations to the named entity."
+msgstr ""
+
+#: index.docbook:2794
+msgid ""
+ "<![CDATA[<class name=\"Contract\" table=\"Contracts\"\n"
+ " entity-name=\"CurrentContract\">\n"
+ " ...\n"
+ " <set name=\"history\" inverse=\"true\"\n"
+ " order-by=\"effectiveEndDate desc\">\n"
+ " <key column=\"currentContractId\"/>\n"
+ " <one-to-many entity-name=\"HistoricalContract\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Contract\" table=\"ContractHistory\"\n"
+ " entity-name=\"HistoricalContract\">\n"
+ " ...\n"
+ " <many-to-one name=\"currentContract\"\n"
+ " column=\"currentContractId\"\n"
+ " entity-name=\"CurrentContract\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:2796
+msgid "Notice how associations are now specified using <literal>entity-name</literal> instead of <literal>class</literal>."
+msgstr ""
+
+#: index.docbook:2804
+msgid "SQL quoted identifiers"
+msgstr ""
+
+#: index.docbook:2805
+msgid "You may force Hibernate to quote an identifier in the generated SQL by enclosing the table or column name in backticks in the mapping document. Hibernate will use the correct quotation style for the SQL <literal>Dialect</literal> (usually double quotes, but brackets for SQL Server and backticks for MySQL)."
+msgstr ""
+
+#: index.docbook:2812
+msgid ""
+ "<![CDATA[<class name=\"LineItem\" table=\"`Line Item`\">\n"
+ " <id name=\"id\" column=\"`Item Id`\"/><generator class=\"assigned\"/></id>\n"
+ " <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:2818
+msgid "Metadata alternatives"
+msgstr ""
+
+#: index.docbook:2820
+msgid "XML isn't for everyone, and so there are some alternative ways to define O/R mapping metadata in Hibernate."
+msgstr ""
+
+#: index.docbook:2825
+msgid "Using XDoclet markup"
+msgstr ""
+
+#: index.docbook:2827
+msgid "Many Hibernate users prefer to embed mapping information directly in sourcecode using XDoclet <literal>@hibernate.tags</literal>. We will not cover this approach in this document, since strictly it is considered part of XDoclet. However, we include the following example of the <literal>Cat</literal> class with XDoclet mappings."
+msgstr ""
+
+#: index.docbook:2834
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "/**\n"
+ " * @hibernate.class\n"
+ " * table=\"CATS\"\n"
+ " */\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ " private Date birthdate;\n"
+ " private Cat mother;\n"
+ " private Set kittens\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " /*\n"
+ " * @hibernate.id\n"
+ " * generator-class=\"native\"\n"
+ " * column=\"CAT_ID\"\n"
+ " */\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.many-to-one\n"
+ " * column=\"PARENT_ID\"\n"
+ " */\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"BIRTH_DATE\"\n"
+ " */\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"WEIGHT\"\n"
+ " */\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"COLOR\"\n"
+ " * not-null=\"true\"\n"
+ " */\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.set\n"
+ " * inverse=\"true\"\n"
+ " * order-by=\"BIRTH_DATE\"\n"
+ " * @hibernate.collection-key\n"
+ " * column=\"PARENT_ID\"\n"
+ " * @hibernate.collection-one-to-many\n"
+ " */\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"SEX\"\n"
+ " * not-null=\"true\"\n"
+ " * update=\"false\"\n"
+ " */\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2836
+msgid "See the Hibernate web site for more examples of XDoclet and Hibernate."
+msgstr ""
+
+#: index.docbook:2843
+msgid "Using JDK 5.0 Annotations"
+msgstr ""
+
+#: index.docbook:2845
+msgid "JDK 5.0 introduced XDoclet-style annotations at the language level, type-safe and checked at compile time. This mechnism is more powerful than XDoclet annotations and better supported by tools and IDEs. IntelliJ IDEA, for example, supports auto-completion and syntax highlighting of JDK 5.0 annotations. The new revision of the EJB specification (JSR-220) uses JDK 5.0 annotations as the primary metadata mechanism for entity beans. Hibernate3 implements the <literal>EntityManager</literal> of JSR-220 (the persistence API), support for mapping metadata is available via the <emphasis>Hibernate Annotations</emphasis> package, as a separate download. Both EJB3 (JSR-220) and Hibernate3 metadata is supported."
+msgstr ""
+
+#: index.docbook:2856
+msgid "This is an example of a POJO class annotated as an EJB entity bean:"
+msgstr ""
+
+#: index.docbook:2860
+msgid ""
+ "<![CDATA[@Entity(access = AccessType.FIELD)\n"
+ "public class Customer implements Serializable {\n"
+ "\n"
+ " @Id;\n"
+ " Long id;\n"
+ "\n"
+ " String firstName;\n"
+ " String lastName;\n"
+ " Date birthday;\n"
+ "\n"
+ " @Transient\n"
+ " Integer age;\n"
+ "\n"
+ " @Embedded\n"
+ " private Address homeAddress;\n"
+ "\n"
+ " @OneToMany(cascade=CascadeType.ALL)\n"
+ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
+ " Set<Order> orders;\n"
+ "\n"
+ " // Getter/setter and business methods\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2862
+msgid "Note that support for JDK 5.0 Annotations (and JSR-220) is still work in progress and not completed. Please refer to the Hibernate Annotations module for more details."
+msgstr ""
+
+#: index.docbook:2871
+msgid "Generated Properties"
+msgstr ""
+
+#: index.docbook:2872
+msgid "Generated properties are properties which have their values generated by the database. Typically, Hibernate applications needed to <literal>refresh</literal> objects which contain any properties for which the database was generating values. Marking properties as generated, however, lets the application delegate this responsibility to Hibernate. Essentially, whenever Hibernate issues an SQL INSERT or UPDATE for an entity which has defined generated properties, it immediately issues a select afterwards to retrieve the generated values."
+msgstr ""
+
+#: index.docbook:2881
+msgid "Properties marked as generated must additionally be non-insertable and non-updateable. Only <xref linkend=\"mapping-declaration-version\"/>versions, <xref linkend=\"mapping-declaration-timestamp\"/>timestamps, and <xref linkend=\"mapping-declaration-property\"/>simple properties can be marked as generated."
+msgstr ""
+
+#: index.docbook:2888
+msgid "<literal>never</literal> (the default) - means that the given property value is not generated within the database."
+msgstr ""
+
+#: index.docbook:2892
+msgid "<literal>insert</literal> - states that the given property value is generated on insert, but is not regenerated on subsequent updates. Things like created-date would fall into this category. Note that even thought <xref linkend=\"mapping-declaration-version\"/>version and <xref linkend=\"mapping-declaration-timestamp\"/>timestamp properties can be marked as generated, this option is not available there..."
+msgstr ""
+
+#: index.docbook:2900
+msgid "<literal>always</literal> - states that the property value is generated both on insert and on update."
+msgstr ""
+
+#: index.docbook:2907
+msgid "Auxiliary Database Objects"
+msgstr ""
+
+#: index.docbook:2908
+msgid "Allows CREATE and DROP of arbitrary database objects, in conjunction with Hibernate's schema evolution tools, to provide the ability to fully define a user schema within the Hibernate mapping files. Although designed specifically for creating and dropping things like triggers or stored procedures, really any SQL command that can be run via a <literal>java.sql.Statement.execute()</literal> method is valid here (ALTERs, INSERTS, etc). There are essentially two modes for defining auxiliary database objects..."
+msgstr ""
+
+#: index.docbook:2917
+msgid "The first mode is to explicitly list the CREATE and DROP commands out in the mapping file:"
+msgstr ""
+
+#: index.docbook:2921
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <create>CREATE TRIGGER my_trigger ...</create>\n"
+ " <drop>DROP TRIGGER my_trigger</drop>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2922
+msgid "The second mode is to supply a custom class which knows how to construct the CREATE and DROP commands. This custom class must implement the <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> interface."
+msgstr ""
+
+#: index.docbook:2927
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2928
+msgid "Additionally, these database objects can be optionally scoped such that they only apply when certain dialects are used."
+msgstr ""
+
+#: index.docbook:2932
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.Oracle9Dialect\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.OracleDialect\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/batch.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/batch.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/batch.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,281 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Batch processing"
+msgstr ""
+
+#: index.docbook:7
+msgid "A naive approach to inserting 100 000 rows in the database using Hibernate might look like this:"
+msgstr ""
+
+#: index.docbook:12
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ "}\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:14
+msgid "This would fall over with an <literal>OutOfMemoryException</literal> somewhere around the 50 000th row. That's because Hibernate caches all the newly inserted <literal>Customer</literal> instances in the session-level cache."
+msgstr ""
+
+#: index.docbook:20
+msgid "In this chapter we'll show you how to avoid this problem. First, however, if you are doing batch processing, it is absolutely critical that you enable the use of JDBC batching, if you intend to achieve reasonable performance. Set the JDBC batch size to a reasonable number (say, 10-50):"
+msgstr ""
+
+#: index.docbook:27
+msgid "<![CDATA[hibernate.jdbc.batch_size 20]]>"
+msgstr ""
+
+#: index.docbook:29
+msgid "Note that Hibernate disables insert batching at the JDBC level transparently if you use an <literal>identiy</literal> identifier generator."
+msgstr ""
+
+#: index.docbook:34
+msgid "You also might like to do this kind of work in a process where interaction with the second-level cache is completely disabled:"
+msgstr ""
+
+#: index.docbook:39
+msgid "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
+msgstr ""
+
+#: index.docbook:41
+msgid "However, this is not absolutely necessary, since we can explicitly set the <literal>CacheMode</literal> to disable interaction with the second-level cache."
+msgstr ""
+
+#: index.docbook:47
+msgid "Batch inserts"
+msgstr ""
+
+#: index.docbook:49
+msgid "When making new objects persistent, you must <literal>flush()</literal> and then <literal>clear()</literal> the session regularly, to control the size of the first-level cache."
+msgstr ""
+
+#: index.docbook:55
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ " if ( i % 20 == 0 ) { //20, same as the JDBC batch size\n"
+ " //flush a batch of inserts and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:60
+msgid "Batch updates"
+msgstr ""
+
+#: index.docbook:62
+msgid "For retrieving and updating data the same ideas apply. In addition, you need to use <literal>scroll()</literal> to take advantage of server-side cursors for queries that return many rows of data."
+msgstr ""
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .setCacheMode(CacheMode.IGNORE)\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "int count=0;\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " if ( ++count % 20 == 0 ) {\n"
+ " //flush a batch of updates and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:73
+msgid "The StatelessSession interface"
+msgstr ""
+
+#: index.docbook:74
+msgid "Alternatively, Hibernate provides a command-oriented API that may be used for streaming data to and from the database in the form of detached objects. A <literal>StatelessSession</literal> has no persistence context associated with it and does not provide many of the higher-level life cycle semantics. In particular, a stateless session does not implement a first-level cache nor interact with any second-level or query cache. It does not implement transactional write-behind or automatic dirty checking. Operations performed using a stateless session do not ever cascade to associated instances. Collections are ignored by a stateless session. Operations performed via a stateless session bypass Hibernate's event model and interceptors. Stateless sessions are vulnerable to data aliasing effects, due to the lack of a first-level cache. A stateless session is a lower-level abstraction, much closer to the underlying JDBC."
+msgstr ""
+
+#: index.docbook:89
+msgid ""
+ "<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " session.update(customer);\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:91
+msgid "Note that in this code example, the <literal>Customer</literal> instances returned by the query are immediately detached. They are never associated with any persistence context."
+msgstr ""
+
+#: index.docbook:97
+msgid "The <literal>insert(), update()</literal> and <literal>delete()</literal> operations defined by the <literal>StatelessSession</literal> interface are considered to be direct database row-level operations, which result in immediate execution of a SQL <literal>INSERT, UPDATE</literal> or <literal>DELETE</literal> respectively. Thus, they have very different semantics to the <literal>save(), saveOrUpdate()</literal> and <literal>delete()</literal> operations defined by the <literal>Session</literal> interface."
+msgstr ""
+
+#: index.docbook:110
+msgid "DML-style operations"
+msgstr ""
+
+#: index.docbook:112
+msgid "As already discussed, automatic and transparent object/relational mapping is concerned with the management of object state. This implies that the object state is available in memory, hence manipulating (using the SQL <literal>Data Manipulation Language</literal> (DML) statements: <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>) data directly in the database will not affect in-memory state. However, Hibernate provides methods for bulk SQL-style DML statement execution which are performed through the Hibernate Query Language (<xref linkend=\"queryhql\"/>HQL)."
+msgstr ""
+
+#: index.docbook:122
+msgid "The pseudo-syntax for <literal>UPDATE</literal> and <literal>DELETE</literal> statements is: <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?</literal>. Some points to note:"
+msgstr ""
+
+#: index.docbook:130
+msgid "In the from-clause, the FROM keyword is optional"
+msgstr ""
+
+#: index.docbook:135
+msgid "There can only be a single entity named in the from-clause; it can optionally be aliased. If the entity name is aliased, then any property references must be qualified using that alias; if the entity name is not aliased, then it is illegal for any property references to be qualified."
+msgstr ""
+
+#: index.docbook:143
+msgid "No <xref linkend=\"queryhql-joins-forms\"/>joins (either implicit or explicit) can be specified in a bulk HQL query. Sub-queries may be used in the where-clause; the subqueries, themselves, may contain joins."
+msgstr ""
+
+#: index.docbook:150
+msgid "The where-clause is also optional."
+msgstr ""
+
+#: index.docbook:156
+msgid "As an example, to execute an HQL <literal>UPDATE</literal>, use the <literal>Query.executeUpdate()</literal> method (the method is named for those familiar with JDBC's <literal>PreparedStatement.executeUpdate()</literal>):"
+msgstr ""
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";\n"
+ "// or String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:164
+msgid "HQL <literal>UPDATE</literal> statements, by default do not effect the <xref linkend=\"mapping-declaration-version\"/>version or the <xref linkend=\"mapping-declaration-timestamp\"/>timestamp property values for the affected entities; this is in keeping with the EJB3 specification. However, you can force Hibernate to properly reset the <literal>version</literal> or <literal>timestamp</literal> property values through the use of a <literal>versioned update</literal>. This is achieved by adding the <literal>VERSIONED</literal> keyword after the <literal>UPDATE</literal> keyword."
+msgstr ""
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "String hqlVersionedUpdate = \"update versioned Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:176
+msgid "Note that custom version types (<literal>org.hibernate.usertype.UserVersionType</literal>) are not allowed in conjunction with a <literal>update versioned</literal> statement."
+msgstr ""
+
+#: index.docbook:181
+msgid "To execute an HQL <literal>DELETE</literal>, use the same <literal>Query.executeUpdate()</literal> method:"
+msgstr ""
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlDelete = \"delete Customer c where c.name = :oldName\";\n"
+ "// or String hqlDelete = \"delete Customer where name = :oldName\";\n"
+ "int deletedEntities = s.createQuery( hqlDelete )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:188
+msgid "The <literal>int</literal> value returned by the <literal>Query.executeUpdate()</literal> method indicate the number of entities effected by the operation. Consider this may or may not correlate to the number of rows effected in the database. An HQL bulk operation might result in multiple actual SQL statements being executed, for joined-subclass, for example. The returned number indicates the number of actual entities affected by the statement. Going back to the example of joined-subclass, a delete against one of the subclasses may actually result in deletes against not just the table to which that subclass is mapped, but also the \"root\" table and potentially joined-subclass tables further down the inheritence hierarchy."
+msgstr ""
+
+#: index.docbook:199
+msgid "The pseudo-syntax for <literal>INSERT</literal> statements is: <literal>INSERT INTO EntityName properties_list select_statement</literal>. Some points to note:"
+msgstr ""
+
+#: index.docbook:207
+msgid "Only the INSERT INTO ... SELECT ... form is supported; not the INSERT INTO ... VALUES ... form."
+msgstr ""
+
+#: index.docbook:210
+msgid "The properties_list is analogous to the <literal>column speficiation</literal> in the SQL <literal>INSERT</literal> statement. For entities involved in mapped inheritence, only properties directly defined on that given class-level can be used in the properties_list. Superclass properties are not allowed; and subclass properties do not make sense. In other words, <literal>INSERT</literal> statements are inherently non-polymorphic."
+msgstr ""
+
+#: index.docbook:220
+msgid "select_statement can be any valid HQL select query, with the caveat that the return types must match the types expected by the insert. Currently, this is checked during query compilation rather than allowing the check to relegate to the database. Note however that this might cause problems between Hibernate <literal>Type</literal>s which are <emphasis>equivalent</emphasis> as opposed to <emphasis>equal</emphasis>. This might cause issues with mismatches between a property defined as a <literal>org.hibernate.type.DateType</literal> and a property defined as a <literal>org.hibernate.type.TimestampType</literal>, even though the database might not make a distinction or might be able to handle the conversion."
+msgstr ""
+
+#: index.docbook:232
+msgid "For the id property, the insert statement gives you two options. You can either explicitly specify the id property in the properties_list (in which case its value is taken from the corresponding select expression) or omit it from the properties_list (in which case a generated value is used). This later option is only available when using id generators that operate in the database; attempting to use this option with any \"in memory\" type generators will cause an exception during parsing. Note that for the purposes of this discussion, in-database generators are considered to be <literal>org.hibernate.id.SequenceGenerator</literal> (and its subclasses) and any implementors of <literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>. The most notable exception here is <literal>org.hibernate.id.TableHiLoGenerator</literal>, which cannot be used because it does not expose a selectable way to get its values."
+msgstr ""
+
+#: index.docbook:247
+msgid "For properties mapped as either <literal>version</literal> or <literal>timestamp</literal>, the insert statement gives you two options. You can either specify the property in the properties_list (in which case its value is taken from the corresponding select expressions) or omit it from the properties_list (in which case the <literal>seed value</literal> defined by the <literal>org.hibernate.type.VersionType</literal> is used)."
+msgstr ""
+
+#: index.docbook:257
+msgid "An example HQL <literal>INSERT</literal> statement execution:"
+msgstr ""
+
+#: index.docbook:261
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";\n"
+ "int createdEntities = s.createQuery( hqlInsert )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/best_practices.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/best_practices.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/best_practices.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,168 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Best Practices"
+msgstr ""
+
+#: index.docbook:9
+msgid "Write fine-grained classes and map them using <literal><component></literal>."
+msgstr ""
+
+#: index.docbook:11
+msgid "Use an <literal>Address</literal> class to encapsulate <literal>street</literal>, <literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>. This encourages code reuse and simplifies refactoring."
+msgstr ""
+
+#: index.docbook:19
+msgid "Declare identifier properties on persistent classes."
+msgstr ""
+
+#: index.docbook:21
+msgid "Hibernate makes identifier properties optional. There are all sorts of reasons why you should use them. We recommend that identifiers be 'synthetic' (generated, with no business meaning)."
+msgstr ""
+
+#: index.docbook:29
+msgid "Identify natural keys."
+msgstr ""
+
+#: index.docbook:31
+msgid "Identify natural keys for all entities, and map them using <literal><natural-id></literal>. Implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the properties that make up the natural key."
+msgstr ""
+
+#: index.docbook:39
+msgid "Place each class mapping in its own file."
+msgstr ""
+
+#: index.docbook:41
+msgid "Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</literal> in the file <literal>com/eg/Foo.hbm.xml</literal>. This makes particularly good sense in a team environment."
+msgstr ""
+
+#: index.docbook:49
+msgid "Load mappings as resources."
+msgstr ""
+
+#: index.docbook:51
+msgid "Deploy the mappings along with the classes they map."
+msgstr ""
+
+#: index.docbook:57
+msgid "Consider externalising query strings."
+msgstr ""
+
+#: index.docbook:59
+msgid "This is a good practice if your queries call non-ANSI-standard SQL functions. Externalising the query strings to mapping files will make the application more portable."
+msgstr ""
+
+#: index.docbook:67
+msgid "Use bind variables."
+msgstr ""
+
+#: index.docbook:69
+msgid "As in JDBC, always replace non-constant values by \"?\". Never use string manipulation to bind a non-constant value in a query! Even better, consider using named parameters in queries."
+msgstr ""
+
+#: index.docbook:77
+msgid "Don't manage your own JDBC connections."
+msgstr ""
+
+#: index.docbook:79
+msgid "Hibernate lets the application manage JDBC connections. This approach should be considered a last-resort. If you can't use the built-in connections providers, consider providing your own implementation of <literal>org.hibernate.connection.ConnectionProvider</literal>."
+msgstr ""
+
+#: index.docbook:87
+msgid "Consider using a custom type."
+msgstr ""
+
+#: index.docbook:89
+msgid "Suppose you have a Java type, say from some library, that needs to be persisted but doesn't provide the accessors needed to map it as a component. You should consider implementing <literal>org.hibernate.UserType</literal>. This approach frees the application code from implementing transformations to / from a Hibernate type."
+msgstr ""
+
+#: index.docbook:98
+msgid "Use hand-coded JDBC in bottlenecks."
+msgstr ""
+
+#: index.docbook:100
+msgid "In performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. But please, wait until you <emphasis>know</emphasis> something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If you need to use direct JDBC, it might be worth opening a Hibernate <literal>Session</literal> and using that JDBC connection. That way you can still use the same transaction strategy and underlying connection provider."
+msgstr ""
+
+#: index.docbook:110
+msgid "Understand <literal>Session</literal> flushing."
+msgstr ""
+
+#: index.docbook:112
+msgid "From time to time the Session synchronizes its persistent state with the database. Performance will be affected if this process occurs too often. You may sometimes minimize unnecessary flushing by disabling automatic flushing or even by changing the order of queries and other operations within a particular transaction."
+msgstr ""
+
+#: index.docbook:121
+msgid "In a three tiered architecture, consider using detached objects."
+msgstr ""
+
+#: index.docbook:123
+msgid "When using a servlet / session bean architecture, you could pass persistent objects loaded in the session bean to and from the servlet / JSP layer. Use a new session to service each request. Use <literal>Session.merge()</literal> or <literal>Session.saveOrUpdate()</literal> to synchronize objects with the database."
+msgstr ""
+
+#: index.docbook:132
+msgid "In a two tiered architecture, consider using long persistence contexts."
+msgstr ""
+
+#: index.docbook:134
+msgid "Database Transactions have to be as short as possible for best scalability. However, it is often neccessary to implement long running <emphasis>application transactions</emphasis>, a single unit-of-work from the point of view of a user. An application transaction might span several client request/response cycles. It is common to use detached objects to implement application transactions. An alternative, extremely appropriate in two tiered architecture, is to maintain a single open persistence contact (session) for the whole life cycle of the application transaction and simply disconnect from the JDBC connection at the end of each request and reconnect at the beginning of the subsequent request. Never share a single session across more than one application transaction, or you will be working with stale data."
+msgstr ""
+
+#: index.docbook:148
+msgid "Don't treat exceptions as recoverable."
+msgstr ""
+
+#: index.docbook:150
+msgid "This is more of a necessary practice than a \"best\" practice. When an exception occurs, roll back the <literal>Transaction</literal> and close the <literal>Session</literal>. If you don't, Hibernate can't guarantee that in-memory state accurately represents persistent state. As a special case of this, do not use <literal>Session.load()</literal> to determine if an instance with the given identifier exists on the database; use <literal>Session.get()</literal> or a query instead."
+msgstr ""
+
+#: index.docbook:160
+msgid "Prefer lazy fetching for associations."
+msgstr ""
+
+#: index.docbook:162
+msgid "Use eager fetching sparingly. Use proxies and lazy collections for most associations to classes that are not likely to be completely held in the second-level cache. For associations to cached classes, where there is an a extremely high probability of a cache hit, explicitly disable eager fetching using <literal>lazy=\"false\"</literal>. When an join fetching is appropriate to a particular use case, use a query with a <literal>left join fetch</literal>."
+msgstr ""
+
+#: index.docbook:172
+msgid "Use the <emphasis>open session in view</emphasis> pattern, or a disciplined <emphasis>assembly phase</emphasis> to avoid problems with unfetched data."
+msgstr ""
+
+#: index.docbook:177
+msgid "Hibernate frees the developer from writing tedious <emphasis>Data Transfer Objects</emphasis> (DTO). In a traditional EJB architecture, DTOs serve dual purposes: first, they work around the problem that entity beans are not serializable; second, they implicitly define an assembly phase where all data to be used by the view is fetched and marshalled into the DTOs before returning control to the presentation tier. Hibernate eliminates the first purpose. However, you will still need an assembly phase (think of your business methods as having a strict contract with the presentation tier about what data is available in the detached objects) unless you are prepared to hold the persistence context (the session) open across the view rendering process. This is not a limitation of Hibernate! It is a fundamental requirement of safe transactional data access."
+msgstr ""
+
+#: index.docbook:191
+msgid "Consider abstracting your business logic from Hibernate."
+msgstr ""
+
+#: index.docbook:193
+msgid "Hide (Hibernate) data-access code behind an interface. Combine the <emphasis>DAO</emphasis> and <emphasis>Thread Local Session</emphasis> patterns. You can even have some classes persisted by handcoded JDBC, associated to Hibernate via a <literal>UserType</literal>. (This advice is intended for \"sufficiently large\" applications; it is not appropriate for an application with five tables!)"
+msgstr ""
+
+#: index.docbook:203
+msgid "Don't use exotic association mappings."
+msgstr ""
+
+#: index.docbook:205
+msgid "Good usecases for a real many-to-many associations are rare. Most of the time you need additional information stored in the \"link table\". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, we think that most associations are one-to-many and many-to-one, you should be careful when using any other association style and ask yourself if it is really neccessary."
+msgstr ""
+
+#: index.docbook:215
+msgid "Prefer bidirectional associations."
+msgstr ""
+
+#: index.docbook:217
+msgid "Unidirectional associations are more difficult to query. In a large application, almost all associations must be navigable in both directions in queries."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/collection_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/collection_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/collection_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,919 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Collection Mapping"
+msgstr ""
+
+#: index.docbook:8
+msgid "Persistent collections"
+msgstr ""
+
+#: index.docbook:10
+msgid "Hibernate requires that persistent collection-valued fields be declared as an interface type, for example:"
+msgstr ""
+
+#: index.docbook:15
+msgid ""
+ "<![CDATA[public class Product {\n"
+ " private String serialNumber;\n"
+ " private Set parts = new HashSet();\n"
+ " \n"
+ " public Set getParts() { return parts; }\n"
+ " void setParts(Set parts) { this.parts = parts; }\n"
+ " public String getSerialNumber() { return serialNumber; }\n"
+ " void setSerialNumber(String sn) { serialNumber = sn; }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:17
+msgid "The actual interface might be <literal>java.util.Set</literal>, <literal>java.util.Collection</literal>, <literal>java.util.List</literal>, <literal>java.util.Map</literal>, <literal>java.util.SortedSet</literal>, <literal>java.util.SortedMap</literal> or ... anything you like! (Where \"anything you like\" means you will have to write an implementation of <literal>org.hibernate.usertype.UserCollectionType</literal>.)"
+msgstr ""
+
+#: index.docbook:26
+msgid "Notice how we initialized the instance variable with an instance of <literal>HashSet</literal>. This is the best way to initialize collection valued properties of newly instantiated (non-persistent) instances. When you make the instance persistent - by calling <literal>persist()</literal>, for example - Hibernate will actually replace the <literal>HashSet</literal> with an instance of Hibernate's own implementation of <literal>Set</literal>. Watch out for errors like this:"
+msgstr ""
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "Cat kitten = new DomesticCat();\n"
+ "....\n"
+ "Set kittens = new HashSet();\n"
+ "kittens.add(kitten);\n"
+ "cat.setKittens(kittens);\n"
+ "session.persist(cat);\n"
+ "kittens = cat.getKittens(); // Okay, kittens collection is a Set\n"
+ "(HashSet) cat.getKittens(); // Error!]]>"
+msgstr ""
+
+#: index.docbook:38
+msgid "The persistent collections injected by Hibernate behave like <literal>HashMap</literal>, <literal>HashSet</literal>, <literal>TreeMap</literal>, <literal>TreeSet</literal> or <literal>ArrayList</literal>, depending upon the interface type."
+msgstr ""
+
+#: index.docbook:45
+msgid "Collections instances have the usual behavior of value types. They are automatically persisted when referenced by a persistent object and automatically deleted when unreferenced. If a collection is passed from one persistent object to another, its elements might be moved from one table to another. Two entities may not share a reference to the same collection instance. Due to the underlying relational model, collection-valued properties do not support null value semantics; Hibernate does not distinguish between a null collection reference and an empty collection."
+msgstr ""
+
+#: index.docbook:56
+msgid "You shouldn't have to worry much about any of this. Use persistent collections the same way you use ordinary Java collections. Just make sure you understand the semantics of bidirectional associations (discussed later)."
+msgstr ""
+
+#: index.docbook:65
+msgid "Collection mappings"
+msgstr ""
+
+#: index.docbook:67
+msgid "The Hibernate mapping element used for mapping a collection depends upon the type of the interface. For example, a <literal><set></literal> element is used for mapping properties of type <literal>Set</literal>."
+msgstr ""
+
+#: index.docbook:73
+msgid ""
+ "<![CDATA[<class name=\"Product\">\n"
+ " <id name=\"serialNumber\" column=\"productSerialNumber\"/>\n"
+ " <set name=\"parts\">\n"
+ " <key column=\"productSerialNumber\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:75
+msgid "Apart from <literal><set></literal>, there is also <literal><list></literal>, <literal><map></literal>, <literal><bag></literal>, <literal><array></literal> and <literal><primitive-array></literal> mapping elements. The <literal><map></literal> element is representative:"
+msgstr ""
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<map\n"
+ " name=\"propertyName\"\n"
+ " table=\"table_name\"\n"
+ " schema=\"schema_name\"\n"
+ " lazy=\"true|extra|false\"\n"
+ " inverse=\"true|false\"\n"
+ " cascade=\"all|none|save-update|delete|all-delete-orphan|delete-orphan\"\n"
+ " sort=\"unsorted|natural|comparatorClass\"\n"
+ " order-by=\"column_name asc|desc\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " fetch=\"join|select|subselect\"\n"
+ " batch-size=\"N\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " mutable=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <key .... />\n"
+ " <map-key .... />\n"
+ " <element .... />\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:103
+msgid "<literal>name</literal> the collection property name"
+msgstr ""
+
+#: index.docbook:108
+msgid "<literal>table</literal> (optional - defaults to property name) the name of the collection table (not used for one-to-many associations)"
+msgstr ""
+
+#: index.docbook:114
+msgid "<literal>schema</literal> (optional) the name of a table schema to override the schema declared on the root element"
+msgstr ""
+
+#: index.docbook:120
+msgid "<literal>lazy</literal> (optional - defaults to <literal>true</literal>) may be used to disable lazy fetching and specify that the association is always eagerly fetched, or to enable \"extra-lazy\" fetching where most operations do not initialize the collection (suitable for very large collections)"
+msgstr ""
+
+#: index.docbook:129
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>) mark this collection as the \"inverse\" end of a bidirectional association"
+msgstr ""
+
+#: index.docbook:135
+msgid "<literal>cascade</literal> (optional - defaults to <literal>none</literal>) enable operations to cascade to child entities"
+msgstr ""
+
+#: index.docbook:141
+msgid "<literal>sort</literal> (optional) specify a sorted collection with <literal>natural</literal> sort order, or a given comparator class"
+msgstr ""
+
+#: index.docbook:147
+msgid "<literal>order-by</literal> (optional, JDK1.4 only) specify a table column (or columns) that define the iteration order of the <literal>Map</literal>, <literal>Set</literal> or bag, together with an optional <literal>asc</literal> or <literal>desc</literal>"
+msgstr ""
+
+#: index.docbook:154
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving or removing the collection (useful if the collection should contain only a subset of the available data)"
+msgstr ""
+
+#: index.docbook:161
+msgid "<literal>fetch</literal> (optional, defaults to <literal>select</literal>) Choose between outer-join fetching, fetching by sequential select, and fetching by sequential subselect."
+msgstr ""
+
+#: index.docbook:168
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for lazily fetching instances of this collection."
+msgstr ""
+
+#: index.docbook:174
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the collection property value."
+msgstr ""
+
+#: index.docbook:180
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Species that changes to the state of the collection results in increment of the owning entity's version. (For one to many associations, it is often reasonable to disable this setting.)"
+msgstr ""
+
+#: index.docbook:188
+msgid "<literal>mutable</literal> (optional - defaults to <literal>true</literal>): A value of <literal>false</literal> specifies that the elements of the collection never change (a minor performance optimization in some cases)."
+msgstr ""
+
+#: index.docbook:198
+msgid "Collection foreign keys"
+msgstr ""
+
+#: index.docbook:200
+msgid "Collection instances are distinguished in the database by the foreign key of the entity that owns the collection. This foreign key is referred to as the <emphasis>collection key column</emphasis> (or columns) of the collection table. The collection key column is mapped by the <literal><key></literal> element."
+msgstr ""
+
+#: index.docbook:208
+msgid "There may be a nullability constraint on the foreign key column. For most collections, this is implied. For unidirectional one to many associations, the foreign key column is nullable by default, so you might need to specify <literal>not-null=\"true\"</literal>."
+msgstr ""
+
+#: index.docbook:215
+msgid "<![CDATA[<key column=\"productSerialNumber\" not-null=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:217
+msgid "The foreign key constraint may use <literal>ON DELETE CASCADE</literal>."
+msgstr ""
+
+#: index.docbook:221
+msgid "<![CDATA[<key column=\"productSerialNumber\" on-delete=\"cascade\"/>]]>"
+msgstr ""
+
+#: index.docbook:223
+msgid "See the previous chapter for a full definition of the <literal><key></literal> element."
+msgstr ""
+
+#: index.docbook:231
+msgid "Collection elements"
+msgstr ""
+
+#: index.docbook:233
+msgid "Collections may contain almost any other Hibernate type, including all basic types, custom types, components, and of course, references to other entities. This is an important distinction: an object in a collection might be handled with \"value\" semantics (its life cycle fully depends on the collection owner) or it might be a reference to another entity, with its own life cycle. In the latter case, only the \"link\" between the two objects is considered to be state held by the collection."
+msgstr ""
+
+#: index.docbook:242
+msgid "The contained type is referred to as the <emphasis>collection element type</emphasis>. Collection elements are mapped by <literal><element></literal> or <literal><composite-element></literal>, or in the case of entity references, with <literal><one-to-many></literal> or <literal><many-to-many></literal>. The first two map elements with value semantics, the next two are used to map entity associations."
+msgstr ""
+
+#: index.docbook:254
+msgid "Indexed collections"
+msgstr ""
+
+#: index.docbook:256
+msgid "All collection mappings, except those with set and bag semantics, need an <emphasis>index column</emphasis> in the collection table - a column that maps to an array index, or <literal>List</literal> index, or <literal>Map</literal> key. The index of a <literal>Map</literal> may be of any basic type, mapped with <literal><map-key></literal>, it may be an entity reference mapped with <literal><map-key-many-to-many></literal>, or it may be a composite type, mapped with <literal><composite-map-key></literal>. The index of an array or list is always of type <literal>integer</literal> and is mapped using the <literal><list-index></literal> element. The mapped column contains sequential integers (numbered from zero, by default)."
+msgstr ""
+
+#: index.docbook:267
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"index1\" coords=\"2 45\"/> <area id=\"index2\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<list-index \n"
+ " column=\"column_name\"\n"
+ " base=\"0|1|...\"/>]]></programlisting> <calloutlist> <callout arearefs=\"index1\"> <para> <literal>column_name</literal> (required): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"index1\"> <para> <literal>base</literal> (optional, defaults to <literal>0</literal>): The value of the index column that corresponds to the first element of the list or array. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"mapkey1\" coords=\"2 45\"/> <area id=\"mapkey2\" coords=\"3 45\"/> <area id=\"mapkey3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key \n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"type_name\"\n"
+ " node=\"@attribute-name\"\n"
+ " length=\"N\"/>]]></programlisting> <calloutlist> <callout arearefs=\"mapkey1\"> <para> <literal>column</literal> (optional): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"mapkey2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the key of the map. </para> </callout> <callout arearefs=\"mapkey3\"> <para> <literal>type</literal> (reguired): The type of the map keys. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"indexmanytomany1\" coords=\"2 45\"/> <area id=\"indexmanytomany2\" coords=\"3 45\"/> <area id=\"indexmanytomany3\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<map-key-many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"indexmanytomany1\"> <para> <literal>column</literal> (optional): The name of the foreign key column for the collection index values. </para> </callout> <callout arearefs=\"indexmanytomany2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the foreign key of the map key. </para> </callout> <callout arearefs=\"indexmanytomany3\"> <para> <literal>class</literal> (required): The entity class used as the map key. </para> </callout> </calloutlist> </programlistingco>"
+msgstr ""
+
+#: index.docbook:348
+msgid "If your table doesn't have an index column, and you still wish to use <literal>List</literal> as the property type, you should map the property as a Hibernate <emphasis><bag></emphasis>. A bag does not retain its order when it is retrieved from the database, but it may be optionally sorted or ordered."
+msgstr ""
+
+#: index.docbook:357
+msgid "There are quite a range of mappings that can be generated for collections, covering many common relational models. We suggest you experiment with the schema generation tool to get a feeling for how various mapping declarations translate to database tables."
+msgstr ""
+
+#: index.docbook:364
+msgid "Collections of values and many-to-many associations"
+msgstr ""
+
+#: index.docbook:366
+msgid "Any collection of values or many-to-many association requires a dedicated <emphasis>collection table</emphasis> with a foreign key column or columns, <emphasis>collection element column</emphasis> or columns and possibly an index column or columns."
+msgstr ""
+
+#: index.docbook:373
+msgid "For a collection of values, we use the <literal><element></literal> tag."
+msgstr ""
+
+#: index.docbook:375
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"element1b\" coords=\"2 50\"/> <area id=\"element2b\" coords=\"3 50\"/> <area id=\"element3b\" coords=\"4 50\"/> </areaspec> <programlisting><![CDATA[<element\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"typename\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"element1b\"> <para> <literal>column</literal> (optional): The name of the column holding the collection element values. </para> </callout> <callout arearefs=\"element2b\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element. </para> </callout> <callout arearefs=\"element3b\"> <para> <literal>type</literal> (required): The type of the collection element. </para> </callout> </calloutlist> </programlistingco> <para> A <emphasis>many-to-many association</emphasis> is specified using the <literal><many-to-many></literal> element. </para> <programlistingco> <areaspec> <area id=\"manytomany1\" coords=\"2 60\"/> <area id=\"manytomany2\" coords=\"3 60\"/> <area id=\"manytomany3\" coords=\"4 60\"/> <area id=\"manytomany4\" coords=\"5 60\"/> <area id=\"manytomany5\" coords=\"6 60\"/> <area id=\"manytomany6\" coords=\"7 60\"/> <area id=\"manytomany7\" coords=\"8 60\"/> <area id=\!
"manytomany8\" coords=\"9 60\"/> </areaspec> <programlisting><![CDATA[<many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ " fetch=\"select|join\"\n"
+ " unique=\"true|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]></programlisting> <calloutlist> <callout arearefs=\"manytomany1\"> <para> <literal>column</literal> (optional): The name of the element foreign key column. </para> </callout> <callout arearefs=\"manytomany2\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element foreign key value. </para> </callout> <callout arearefs=\"manytomany3\"> <para> <literal>class</literal> (required): The name of the associated class. </para> </callout> <callout arearefs=\"manytomany4\"> <para> <literal>fetch</literal> (optional - defaults to <literal>join</literal>): enables outer-join or sequential select fetching for this association. This is a special case; for full eager fetching (in a single <literal>SELECT</literal>) of an entity and its many-to-many relationships to other entities, you would enable <literal>join</literal> fetching not only of the collection itself, but also with this attribute on the <literal><many-to-many></literal!
> nested element. </para> </callout> <callout arearefs=\"manytomany5\"> <para> <literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. This makes the association multiplicity effectively one to many. </para> </callout> <callout arearefs=\"manytomany6\"> <para> <literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association. </para> </callout> <callout arearefs=\"manytomany7\"> <para> <literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>. </para> </callout> <callout arearefs=\"manytomany8\"> <para> <literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class !
is used. </para> </callout> </calloutlist> </programlistingco>"
+msgstr ""
+
+#: index.docbook:480
+msgid "Some examples, first, a set of strings:"
+msgstr ""
+
+#: index.docbook:484
+msgid ""
+ "<![CDATA[<set name=\"names\" table=\"person_names\">\n"
+ " <key column=\"person_id\"/>\n"
+ " <element column=\"person_name\" type=\"string\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:486
+msgid "A bag containing integers (with an iteration order determined by the <literal>order-by</literal> attribute):"
+msgstr ""
+
+#: index.docbook:491
+msgid ""
+ "<![CDATA[<bag name=\"sizes\" \n"
+ " table=\"item_sizes\" \n"
+ " order-by=\"size asc\">\n"
+ " <key column=\"item_id\"/>\n"
+ " <element column=\"size\" type=\"integer\"/>\n"
+ "</bag>]]>"
+msgstr ""
+
+#: index.docbook:493
+msgid "An array of entities - in this case, a many to many association:"
+msgstr ""
+
+#: index.docbook:497
+msgid ""
+ "<![CDATA[<array name=\"addresses\" \n"
+ " table=\"PersonAddress\" \n"
+ " cascade=\"persist\">\n"
+ " <key column=\"personId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <many-to-many column=\"addressId\" class=\"Address\"/>\n"
+ "</array>]]>"
+msgstr ""
+
+#: index.docbook:499
+msgid "A map from string indices to dates:"
+msgstr ""
+
+#: index.docbook:503
+msgid ""
+ "<![CDATA[<map name=\"holidays\" \n"
+ " table=\"holidays\" \n"
+ " schema=\"dbo\" \n"
+ " order-by=\"hol_name asc\">\n"
+ " <key column=\"id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:505
+msgid "A list of components (discussed in the next chapter):"
+msgstr ""
+
+#: index.docbook:509
+msgid ""
+ "<![CDATA[<list name=\"carComponents\" \n"
+ " table=\"CarComponents\">\n"
+ " <key column=\"carId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <composite-element class=\"CarComponent\">\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"type\"/>\n"
+ " <property name=\"serialNumber\" column=\"serialNum\"/>\n"
+ " </composite-element>\n"
+ "</list>]]>"
+msgstr ""
+
+#: index.docbook:514
+msgid "One-to-many associations"
+msgstr ""
+
+#: index.docbook:516
+msgid "A <emphasis>one to many association</emphasis> links the tables of two classes via a foreign key, with no intervening collection table. This mapping loses certain semantics of normal Java collections:"
+msgstr ""
+
+#: index.docbook:524
+msgid "An instance of the contained entity class may not belong to more than one instance of the collection"
+msgstr ""
+
+#: index.docbook:530
+msgid "An instance of the contained entity class may not appear at more than one value of the collection index"
+msgstr ""
+
+#: index.docbook:537
+msgid "An association from <literal>Product</literal> to <literal>Part</literal> requires existence of a foreign key column and possibly an index column to the <literal>Part</literal> table. A <literal><one-to-many></literal> tag indicates that this is a one to many association."
+msgstr ""
+
+#: index.docbook:550
+msgid ""
+ "<![CDATA[<one-to-many \n"
+ " class=\"ClassName\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]>"
+msgstr ""
+
+#: index.docbook:553
+msgid "<literal>class</literal> (required): The name of the associated class."
+msgstr ""
+
+#: index.docbook:558
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how cached identifiers that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr ""
+
+#: index.docbook:565
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>."
+msgstr ""
+
+#: index.docbook:573
+msgid "Notice that the <literal><one-to-many></literal> element does not need to declare any columns. Nor is it necessary to specify the <literal>table</literal> name anywhere."
+msgstr ""
+
+#: index.docbook:579
+msgid "<emphasis>Very important note:</emphasis> If the foreign key column of a <literal><one-to-many></literal> association is declared <literal>NOT NULL</literal>, you must declare the <literal><key></literal> mapping <literal>not-null=\"true\"</literal> or <emphasis>use a bidirectional association</emphasis> with the collection mapping marked <literal>inverse=\"true\"</literal>. See the discussion of bidirectional associations later in this chapter."
+msgstr ""
+
+#: index.docbook:588
+msgid "This example shows a map of <literal>Part</literal> entities by name (where <literal>partName</literal> is a persistent property of <literal>Part</literal>). Notice the use of a formula-based index."
+msgstr ""
+
+#: index.docbook:594
+msgid ""
+ "<![CDATA[<map name=\"parts\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"productId\" not-null=\"true\"/>\n"
+ " <map-key formula=\"partName\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:600
+msgid "Advanced collection mappings"
+msgstr ""
+
+#: index.docbook:603
+msgid "Sorted collections"
+msgstr ""
+
+#: index.docbook:605
+msgid "Hibernate supports collections implementing <literal>java.util.SortedMap</literal> and <literal>java.util.SortedSet</literal>. You must specify a comparator in the mapping file:"
+msgstr ""
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<set name=\"aliases\" \n"
+ " table=\"person_aliases\" \n"
+ " sort=\"natural\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" sort=\"my.custom.HolidayComparator\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:612
+msgid "Allowed values of the <literal>sort</literal> attribute are <literal>unsorted</literal>, <literal>natural</literal> and the name of a class implementing <literal>java.util.Comparator</literal>."
+msgstr ""
+
+#: index.docbook:618
+msgid "Sorted collections actually behave like <literal>java.util.TreeSet</literal> or <literal>java.util.TreeMap</literal>."
+msgstr ""
+
+#: index.docbook:623
+msgid "If you want the database itself to order the collection elements use the <literal>order-by</literal> attribute of <literal>set</literal>, <literal>bag</literal> or <literal>map</literal> mappings. This solution is only available under JDK 1.4 or higher (it is implemented using <literal>LinkedHashSet</literal> or <literal>LinkedHashMap</literal>). This performs the ordering in the SQL query, not in memory."
+msgstr ""
+
+#: index.docbook:632
+msgid ""
+ "<![CDATA[<set name=\"aliases\" table=\"person_aliases\" order-by=\"lower(name) asc\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" order-by=\"hol_date, hol_name\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:634
+msgid "Note that the value of the <literal>order-by</literal> attribute is an SQL ordering, not a HQL ordering!"
+msgstr ""
+
+#: index.docbook:639
+msgid "Associations may even be sorted by some arbitrary criteria at runtime using a collection <literal>filter()</literal>."
+msgstr ""
+
+#: index.docbook:644
+msgid "<![CDATA[sortedUsers = s.createFilter( group.getUsers(), \"order by this.name\" ).list();]]>"
+msgstr ""
+
+#: index.docbook:649
+msgid "Bidirectional associations"
+msgstr ""
+
+#: index.docbook:651
+msgid "A <emphasis>bidirectional association</emphasis> allows navigation from both \"ends\" of the association. Two kinds of bidirectional association are supported:"
+msgstr ""
+
+#: index.docbook:658
+msgid "one-to-many"
+msgstr ""
+
+#: index.docbook:660
+msgid "set or bag valued at one end, single-valued at the other"
+msgstr ""
+
+#: index.docbook:666
+msgid "many-to-many"
+msgstr ""
+
+#: index.docbook:668
+msgid "set or bag valued at both ends"
+msgstr ""
+
+#: index.docbook:677
+msgid "You may specify a bidirectional many-to-many association simply by mapping two many-to-many associations to the same database table and declaring one end as <emphasis>inverse</emphasis> (which one is your choice, but it can not be an indexed collection)."
+msgstr ""
+
+#: index.docbook:684
+msgid "Here's an example of a bidirectional many-to-many association; each category can have many items and each item can be in many categories:"
+msgstr ""
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<class name=\"Category\">\n"
+ " <id name=\"id\" column=\"CATEGORY_ID\"/>\n"
+ " ...\n"
+ " <bag name=\"items\" table=\"CATEGORY_ITEM\">\n"
+ " <key column=\"CATEGORY_ID\"/>\n"
+ " <many-to-many class=\"Item\" column=\"ITEM_ID\"/>\n"
+ " </bag>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Item\">\n"
+ " <id name=\"id\" column=\"ITEM_ID\"/>\n"
+ " ...\n"
+ "\n"
+ " <!-- inverse end -->\n"
+ " <bag name=\"categories\" table=\"CATEGORY_ITEM\" inverse=\"true\">\n"
+ " <key column=\"ITEM_ID\"/>\n"
+ " <many-to-many class=\"Category\" column=\"CATEGORY_ID\"/>\n"
+ " </bag>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:691
+msgid "Changes made only to the inverse end of the association are <emphasis>not</emphasis> persisted. This means that Hibernate has two representations in memory for every bidirectional association, one link from A to B and another link from B to A. This is easier to understand if you think about the Java object model and how we create a many-to-many relationship in Java:"
+msgstr ""
+
+#: index.docbook:699
+msgid ""
+ "<![CDATA[\n"
+ "category.getItems().add(item); // The category now \"knows\" about the relationship\n"
+ "item.getCategories().add(category); // The item now \"knows\" about the relationship\n"
+ "\n"
+ "session.persist(item); // The relationship won't be saved!\n"
+ "session.persist(category); // The relationship will be saved]]>"
+msgstr ""
+
+#: index.docbook:701
+msgid "The non-inverse side is used to save the in-memory representation to the database."
+msgstr ""
+
+#: index.docbook:705
+msgid "You may define a bidirectional one-to-many association by mapping a one-to-many association to the same table column(s) as a many-to-one association and declaring the many-valued end <literal>inverse=\"true\"</literal>."
+msgstr ""
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:713
+msgid "Mapping one end of an association with <literal>inverse=\"true\"</literal> doesn't affect the operation of cascades, these are orthogonal concepts!"
+msgstr ""
+
+#: index.docbook:721
+msgid "Bidirectional associations with indexed collections"
+msgstr ""
+
+#: index.docbook:722
+msgid "A bidirectional association where one end is represented as a <literal><list></literal> or <literal><map></literal> requires special consideration. If there is a property of the child class which maps to the index column, no problem, we can continue using <literal>inverse=\"true\"</literal> on the collection mapping:"
+msgstr ""
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"/>\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:731
+msgid "But, if there is no such property on the child class, we can't think of the association as truly bidirectional (there is information available at one end of the association that is not available at the other end). In this case, we can't map the collection <literal>inverse=\"true\"</literal>. Instead, we could use the following mapping:"
+msgstr ""
+
+#: index.docbook:738
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\">\n"
+ " <key column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:740
+msgid "Note that in this mapping, the collection-valued end of the association is responsible for updates to the foreign key. TODO: Does this really result in some unnecessary update statements?"
+msgstr ""
+
+#: index.docbook:748
+msgid "Ternary associations"
+msgstr ""
+
+#: index.docbook:750
+msgid "There are three possible approaches to mapping a ternary association. One is to use a <literal>Map</literal> with an association as its index:"
+msgstr ""
+
+#: index.docbook:755
+msgid ""
+ "<![CDATA[<map name=\"contracts\">\n"
+ " <key column=\"employer_id\" not-null=\"true\"/>\n"
+ " <map-key-many-to-many column=\"employee_id\" class=\"Employee\"/>\n"
+ " <one-to-many class=\"Contract\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<map name=\"connections\">\n"
+ " <key column=\"incoming_node_id\"/>\n"
+ " <map-key-many-to-many column=\"outgoing_node_id\" class=\"Node\"/>\n"
+ " <many-to-many column=\"connection_id\" class=\"Connection\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:759
+msgid "A second approach is to simply remodel the association as an entity class. This is the approach we use most commonly."
+msgstr ""
+
+#: index.docbook:764
+msgid "A final alternative is to use composite elements, which we will discuss later."
+msgstr ""
+
+#: index.docbook:771
+msgid "Using an <idbag>"
+msgstr ""
+
+#: index.docbook:773
+msgid "If you've fully embraced our view that composite keys are a bad thing and that entities should have synthetic identifiers (surrogate keys), then you might find it a bit odd that the many to many associations and collections of values that we've shown so far all map to tables with composite keys! Now, this point is quite arguable; a pure association table doesn't seem to benefit much from a surrogate key (though a collection of composite values <emphasis>might</emphasis>). Nevertheless, Hibernate provides a feature that allows you to map many to many associations and collections of values to a table with a surrogate key."
+msgstr ""
+
+#: index.docbook:784
+msgid "The <literal><idbag></literal> element lets you map a <literal>List</literal> (or <literal>Collection</literal>) with bag semantics."
+msgstr ""
+
+#: index.docbook:789
+msgid ""
+ "<![CDATA[<idbag name=\"lovers\" table=\"LOVERS\">\n"
+ " <collection-id column=\"ID\" type=\"long\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </collection-id>\n"
+ " <key column=\"PERSON1\"/>\n"
+ " <many-to-many column=\"PERSON2\" class=\"Person\" fetch=\"join\"/>\n"
+ "</idbag>]]>"
+msgstr ""
+
+#: index.docbook:791
+msgid "As you can see, an <literal><idbag></literal> has a synthetic id generator, just like an entity class! A different surrogate key is assigned to each collection row. Hibernate does not provide any mechanism to discover the surrogate key value of a particular row, however."
+msgstr ""
+
+#: index.docbook:798
+msgid "Note that the update performance of an <literal><idbag></literal> is <emphasis>much</emphasis> better than a regular <literal><bag></literal>! Hibernate can locate individual rows efficiently and update or delete them individually, just like a list, map or set."
+msgstr ""
+
+#: index.docbook:805
+msgid "In the current implementation, the <literal>native</literal> identifier generation strategy is not supported for <literal><idbag></literal> collection identifiers."
+msgstr ""
+
+#: index.docbook:829
+msgid "Collection examples"
+msgstr ""
+
+#: index.docbook:831
+msgid "The previous sections are pretty confusing. So lets look at an example. This class:"
+msgstr ""
+
+#: index.docbook:836
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "\n"
+ "public class Parent {\n"
+ " private long id;\n"
+ " private Set children;\n"
+ "\n"
+ " public long getId() { return id; }\n"
+ " private void setId(long id) { this.id=id; }\n"
+ "\n"
+ " private Set getChildren() { return children; }\n"
+ " private void setChildren(Set children) { this.children=children; }\n"
+ "\n"
+ " ....\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:838
+msgid "has a collection of <literal>Child</literal> instances. If each child has at most one parent, the most natural mapping is a one-to-many association:"
+msgstr ""
+
+#: index.docbook:844
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:846
+msgid "This maps to the following table definitions:"
+msgstr ""
+
+#: index.docbook:850
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr ""
+
+#: index.docbook:852
+msgid "If the parent is <emphasis>required</emphasis>, use a bidirectional one-to-many association:"
+msgstr ""
+
+#: index.docbook:857
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <many-to-one name=\"parent\" class=\"Parent\" column=\"parent_id\" not-null=\"true\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:859
+msgid "Notice the <literal>NOT NULL</literal> constraint:"
+msgstr ""
+
+#: index.docbook:863
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null\n"
+ " primary key,\n"
+ " name varchar(255),\n"
+ " parent_id bigint not null )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr ""
+
+#: index.docbook:865
+msgid "Alternatively, if you absolutely insist that this association should be unidirectional, you can declare the <literal>NOT NULL</literal> constraint on the <literal><key></literal> mapping:"
+msgstr ""
+
+#: index.docbook:871
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:873
+msgid "On the other hand, if a child might have multiple parents, a many-to-many association is appropriate:"
+msgstr ""
+
+#: index.docbook:878
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" table=\"childset\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <many-to-many class=\"Child\" column=\"child_id\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:880
+msgid "Table definitions:"
+msgstr ""
+
+#: index.docbook:884
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255) )\n"
+ "create table childset ( parent_id bigint not null,\n"
+ " child_id bigint not null,\n"
+ " primary key ( parent_id, child_id ) )\n"
+ "alter table childset add constraint childsetfk0 (parent_id) references parent\n"
+ "alter table childset add constraint childsetfk1 (child_id) references child]]>"
+msgstr ""
+
+#: index.docbook:886
+msgid "For more examples and a complete walk-through a parent/child relationship mapping, see <xref linkend=\"example-parentchild\"/>."
+msgstr ""
+
+#: index.docbook:891
+msgid "Even more exotic association mappings are possible, we will catalog all possibilities in the next chapter."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/component_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/component_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/component_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,372 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Component Mapping"
+msgstr ""
+
+#: index.docbook:7
+msgid "The notion of a <emphasis>component</emphasis> is re-used in several different contexts, for different purposes, throughout Hibernate."
+msgstr ""
+
+#: index.docbook:13
+msgid "Dependent objects"
+msgstr ""
+
+#: index.docbook:15
+msgid "A component is a contained object that is persisted as a value type, not an entity reference. The term \"component\" refers to the object-oriented notion of composition (not to architecture-level components). For example, you might model a person like this:"
+msgstr ""
+
+#: index.docbook:21
+msgid ""
+ "<![CDATA[public class Person {\n"
+ " private java.util.Date birthday;\n"
+ " private Name name;\n"
+ " private String key;\n"
+ " public String getKey() {\n"
+ " return key;\n"
+ " }\n"
+ " private void setKey(String key) {\n"
+ " this.key=key;\n"
+ " }\n"
+ " public java.util.Date getBirthday() {\n"
+ " return birthday;\n"
+ " }\n"
+ " public void setBirthday(java.util.Date birthday) {\n"
+ " this.birthday = birthday;\n"
+ " }\n"
+ " public Name getName() {\n"
+ " return name;\n"
+ " }\n"
+ " public void setName(Name name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ " ......\n"
+ " ......\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:23
+msgid ""
+ "<![CDATA[public class Name {\n"
+ " char initial;\n"
+ " String first;\n"
+ " String last;\n"
+ " public String getFirst() {\n"
+ " return first;\n"
+ " }\n"
+ " void setFirst(String first) {\n"
+ " this.first = first;\n"
+ " }\n"
+ " public String getLast() {\n"
+ " return last;\n"
+ " }\n"
+ " void setLast(String last) {\n"
+ " this.last = last;\n"
+ " }\n"
+ " public char getInitial() {\n"
+ " return initial;\n"
+ " }\n"
+ " void setInitial(char initial) {\n"
+ " this.initial = initial;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:25
+msgid "Now <literal>Name</literal> may be persisted as a component of <literal>Person</literal>. Notice that <literal>Name</literal> defines getter and setter methods for its persistent properties, but doesn't need to declare any interfaces or identifier properties."
+msgstr ""
+
+#: index.docbook:32
+msgid "Our Hibernate mapping would look like:"
+msgstr ""
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\"> <!-- class attribute optional -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:38
+msgid "The person table would have the columns <literal>pid</literal>, <literal>birthday</literal>, <literal>initial</literal>, <literal>first</literal> and <literal>last</literal>."
+msgstr ""
+
+#: index.docbook:46
+msgid "Like all value types, components do not support shared references. In other words, two persons could have the same name, but the two person objects would contain two independent name ojects, only \"the same\" by value. The null value semantics of a component are <emphasis>ad hoc</emphasis>. When reloading the containing object, Hibernate will assume that if all component columns are null, then the entire component is null. This should be okay for most purposes."
+msgstr ""
+
+#: index.docbook:55
+msgid "The properties of a component may be of any Hibernate type (collections, many-to-one associations, other components, etc). Nested components should <emphasis>not</emphasis> be considered an exotic usage. Hibernate is intended to support a very fine-grained object model."
+msgstr ""
+
+#: index.docbook:62
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr ""
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\" unique=\"true\">\n"
+ " <parent name=\"namedPerson\"/> <!-- reference back to the Person -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:73
+msgid "Collections of dependent objects"
+msgstr ""
+
+#: index.docbook:75
+msgid "Collections of components are supported (eg. an array of type <literal>Name</literal>). Declare your component collection by replacing the <literal><element></literal> tag with a <literal><composite-element></literal> tag."
+msgstr ""
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<set name=\"someNames\" table=\"some_names\" lazy=\"true\">\n"
+ " <key column=\"id\"/>\n"
+ " <composite-element class=\"eg.Name\"> <!-- class attribute required -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </composite-element>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:84
+msgid "Note: if you define a <literal>Set</literal> of composite elements, it is very important to implement <literal>equals()</literal> and <literal>hashCode()</literal> correctly."
+msgstr ""
+
+#: index.docbook:90
+msgid "Composite elements may contain components but not collections. If your composite element itself contains components, use the <literal><nested-composite-element></literal> tag. This is a pretty exotic case - a collection of components which themselves have components. By this stage you should be asking yourself if a one-to-many association is more appropriate. Try remodelling the composite element as an entity - but note that even though the Java model is the same, the relational model and persistence semantics are still slightly different."
+msgstr ""
+
+#: index.docbook:102
+msgid "Please note that a composite element mapping doesn't support null-able properties if you're using a <literal><set></literal>. Hibernate has to use each columns value to identify a record when deleting objects (there is no separate primary key column in the composite element table), which is not possible with null values. You have to either use only not-null properties in a composite-element or choose a <literal><list></literal>, <literal><map></literal>, <literal><bag></literal> or <literal><idbag></literal>."
+msgstr ""
+
+#: index.docbook:113
+msgid "A special case of a composite element is a composite element with a nested <literal><many-to-one></literal> element. A mapping like this allows you to map extra columns of a many-to-many association table to the composite element class. The following is a many-to-many association from <literal>Order</literal> to <literal>Item</literal> where <literal>purchaseDate</literal>, <literal>price</literal> and <literal>quantity</literal> are properties of the association:"
+msgstr ""
+
+#: index.docbook:123
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.Purchase\">\n"
+ " <property name=\"purchaseDate\"/>\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/> <!-- class attribute is optional -->\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:125
+msgid "Of course, there can't be a reference to the purchae on the other side, for bidirectional association navigation. Remember that components are value types and don't allow shared references. A single <literal>Purchase</literal> can be in the set of an <literal>Order</literal>, but it can't be referenced by the <literal>Item</literal> at the same time."
+msgstr ""
+
+#: index.docbook:133
+msgid "Even ternary (or quaternary, etc) associations are possible:"
+msgstr ""
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.OrderLine\">\n"
+ " <many-to-one name=\"purchaseDetails class=\"eg.Purchase\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/>\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:137
+msgid "Composite elements may appear in queries using the same syntax as associations to other entities."
+msgstr ""
+
+#: index.docbook:145
+msgid "Components as Map indices"
+msgstr ""
+
+#: index.docbook:147
+msgid "The <literal><composite-map-key></literal> element lets you map a component class as the key of a <literal>Map</literal>. Make sure you override <literal>hashCode()</literal> and <literal>equals()</literal> correctly on the component class."
+msgstr ""
+
+#: index.docbook:156
+msgid "Components as composite identifiers"
+msgstr ""
+
+#: index.docbook:158
+msgid "You may use a component as an identifier of an entity class. Your component class must satisfy certain requirements:"
+msgstr ""
+
+#: index.docbook:165
+msgid "It must implement <literal>java.io.Serializable</literal>."
+msgstr ""
+
+#: index.docbook:170
+msgid "It must re-implement <literal>equals()</literal> and <literal>hashCode()</literal>, consistently with the database's notion of composite key equality."
+msgstr ""
+
+#: index.docbook:179
+msgid "Note: in Hibernate3, the second requirement is not an absolutely hard requirement of Hibernate. But do it anyway."
+msgstr ""
+
+#: index.docbook:183
+msgid "You can't use an <literal>IdentifierGenerator</literal> to generate composite keys. Instead the application must assign its own identifiers."
+msgstr ""
+
+#: index.docbook:188
+msgid "Use the <literal><composite-id></literal> tag (with nested <literal><key-property></literal> elements) in place of the usual <literal><id></literal> declaration. For example, the <literal>OrderLine</literal> class has a primary key that depends upon the (composite) primary key of <literal>Order</literal>."
+msgstr ""
+
+#: index.docbook:196
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " \n"
+ " <composite-id name=\"id\" class=\"OrderLineId\">\n"
+ " <key-property name=\"lineId\"/>\n"
+ " <key-property name=\"orderId\"/>\n"
+ " <key-property name=\"customerId\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"name\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\" class=\"Order\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-one>\n"
+ " ....\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:198
+msgid "Now, any foreign keys referencing the <literal>OrderLine</literal> table are also composite. You must declare this in your mappings for other classes. An association to <literal>OrderLine</literal> would be mapped like this:"
+msgstr ""
+
+#: index.docbook:204
+msgid ""
+ "<![CDATA[<many-to-one name=\"orderLine\" class=\"OrderLine\">\n"
+ "<!-- the \"class\" attribute is optional, as usual -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ "</many-to-one>]]>"
+msgstr ""
+
+#: index.docbook:206
+msgid "(Note that the <literal><column></literal> tag is an alternative to the <literal>column</literal> attribute everywhere.)"
+msgstr ""
+
+#: index.docbook:211
+msgid "A <literal>many-to-many</literal> association to <literal>OrderLine</literal> also uses the composite foreign key:"
+msgstr ""
+
+#: index.docbook:216
+msgid ""
+ "<![CDATA[<set name=\"undeliveredOrderLines\">\n"
+ " <key column name=\"warehouseId\"/>\n"
+ " <many-to-many class=\"OrderLine\">\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-many>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:218
+msgid "The collection of <literal>OrderLine</literal>s in <literal>Order</literal> would use:"
+msgstr ""
+
+#: index.docbook:223
+msgid ""
+ "<![CDATA[<set name=\"orderLines\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"OrderLine\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:225
+msgid "(The <literal><one-to-many></literal> element, as usual, declares no columns.)"
+msgstr ""
+
+#: index.docbook:229
+msgid "If <literal>OrderLine</literal> itself owns a collection, it also has a composite foreign key."
+msgstr ""
+
+#: index.docbook:234
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " ....\n"
+ " ....\n"
+ " <list name=\"deliveryAttempts\">\n"
+ " <key> <!-- a collection inherits the composite key type -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <list-index column=\"attemptId\" base=\"1\"/>\n"
+ " <composite-element class=\"DeliveryAttempt\">\n"
+ " ...\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:239
+msgid "Dynamic components"
+msgstr ""
+
+#: index.docbook:241
+msgid "You may even map a property of type <literal>Map</literal>:"
+msgstr ""
+
+#: index.docbook:245
+msgid ""
+ "<![CDATA[<dynamic-component name=\"userAttributes\">\n"
+ " <property name=\"foo\" column=\"FOO\" type=\"string\"/>\n"
+ " <property name=\"bar\" column=\"BAR\" type=\"integer\"/>\n"
+ " <many-to-one name=\"baz\" class=\"Baz\" column=\"BAZ_ID\"/>\n"
+ "</dynamic-component>]]>"
+msgstr ""
+
+#: index.docbook:247
+msgid "The semantics of a <literal><dynamic-component></literal> mapping are identical to <literal><component></literal>. The advantage of this kind of mapping is the ability to determine the actual properties of the bean at deployment time, just by editing the mapping document. Runtime manipulation of the mapping document is also possible, using a DOM parser. Even better, you can access (and change) Hibernate's configuration-time metamodel via the <literal>Configuration</literal> object."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/configuration.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/configuration.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/configuration.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1489 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Configuration"
+msgstr ""
+
+#: index.docbook:7
+msgid "Because Hibernate is designed to operate in many different environments, there are a large number of configuration parameters. Fortunately, most have sensible default values and Hibernate is distributed with an example <literal>hibernate.properties</literal> file in <literal>etc/</literal> that shows the various options. Just put the example file in your classpath and customize it."
+msgstr ""
+
+#: index.docbook:16
+msgid "Programmatic configuration"
+msgstr ""
+
+#: index.docbook:18
+msgid "An instance of <literal>org.hibernate.cfg.Configuration</literal> represents an entire set of mappings of an application's Java types to an SQL database. The <literal>Configuration</literal> is used to build an (immutable) <literal>SessionFactory</literal>. The mappings are compiled from various XML mapping files."
+msgstr ""
+
+#: index.docbook:26
+msgid "You may obtain a <literal>Configuration</literal> instance by instantiating it directly and specifying XML mapping documents. If the mapping files are in the classpath, use <literal>addResource()</literal>:"
+msgstr ""
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addResource(\"Item.hbm.xml\")\n"
+ " .addResource(\"Bid.hbm.xml\");]]>"
+msgstr ""
+
+#: index.docbook:34
+msgid "An alternative (sometimes better) way is to specify the mapped class, and let Hibernate find the mapping document for you:"
+msgstr ""
+
+#: index.docbook:39
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class);]]>"
+msgstr ""
+
+#: index.docbook:41
+msgid "Then Hibernate will look for mapping files named <literal>/org/hibernate/auction/Item.hbm.xml</literal> and <literal>/org/hibernate/auction/Bid.hbm.xml</literal> in the classpath. This approach eliminates any hardcoded filenames."
+msgstr ""
+
+#: index.docbook:48
+msgid "A <literal>Configuration</literal> also allows you to specify configuration properties:"
+msgstr ""
+
+#: index.docbook:53
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class)\n"
+ " .setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLInnoDBDialect\")\n"
+ " .setProperty(\"hibernate.connection.datasource\", \"java:comp/env/jdbc/test\")\n"
+ " .setProperty(\"hibernate.order_updates\", \"true\");]]>"
+msgstr ""
+
+#: index.docbook:55
+msgid "This is not the only way to pass configuration properties to Hibernate. The various options include:"
+msgstr ""
+
+#: index.docbook:62
+msgid "Pass an instance of <literal>java.util.Properties</literal> to <literal>Configuration.setProperties()</literal>."
+msgstr ""
+
+#: index.docbook:68
+msgid "Place <literal>hibernate.properties</literal> in a root directory of the classpath."
+msgstr ""
+
+#: index.docbook:74
+msgid "Set <literal>System</literal> properties using <literal>java -Dproperty=value</literal>."
+msgstr ""
+
+#: index.docbook:80
+msgid "Include <literal><property></literal> elements in <literal>hibernate.cfg.xml</literal> (discussed later)."
+msgstr ""
+
+#: index.docbook:87
+msgid "<literal>hibernate.properties</literal> is the easiest approach if you want to get started quickly."
+msgstr ""
+
+#: index.docbook:92
+msgid "The <literal>Configuration</literal> is intended as a startup-time object, to be discarded once a <literal>SessionFactory</literal> is created."
+msgstr ""
+
+#: index.docbook:100
+msgid "Obtaining a SessionFactory"
+msgstr ""
+
+#: index.docbook:102
+msgid "When all mappings have been parsed by the <literal>Configuration</literal>, the application must obtain a factory for <literal>Session</literal> instances. This factory is intended to be shared by all application threads:"
+msgstr ""
+
+#: index.docbook:108
+msgid "<![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]>"
+msgstr ""
+
+#: index.docbook:110
+msgid "Hibernate does allow your application to instantiate more than one <literal>SessionFactory</literal>. This is useful if you are using more than one database."
+msgstr ""
+
+#: index.docbook:119
+msgid "JDBC connections"
+msgstr ""
+
+#: index.docbook:121
+msgid "Usually, you want to have the <literal>SessionFactory</literal> create and pool JDBC connections for you. If you take this approach, opening a <literal>Session</literal> is as simple as:"
+msgstr ""
+
+#: index.docbook:127
+msgid "<![CDATA[Session session = sessions.openSession(); // open a new Session]]>"
+msgstr ""
+
+#: index.docbook:129
+msgid "As soon as you do something that requires access to the database, a JDBC connection will be obtained from the pool."
+msgstr ""
+
+#: index.docbook:134
+msgid "For this to work, we need to pass some JDBC connection properties to Hibernate. All Hibernate property names and semantics are defined on the class <literal>org.hibernate.cfg.Environment</literal>. We will now describe the most important settings for JDBC connection configuration."
+msgstr ""
+
+#: index.docbook:141
+msgid "Hibernate will obtain (and pool) connections using <literal>java.sql.DriverManager</literal> if you set the following properties:"
+msgstr ""
+
+#: index.docbook:147
+msgid "Hibernate JDBC Properties"
+msgstr ""
+
+#: index.docbook:153, index.docbook:241, index.docbook:338, index.docbook:529, index.docbook:725, index.docbook:832, index.docbook:920
+msgid "Property name"
+msgstr ""
+
+#: index.docbook:154, index.docbook:242, index.docbook:339, index.docbook:530, index.docbook:726, index.docbook:833, index.docbook:921
+msgid "Purpose"
+msgstr ""
+
+#: index.docbook:160
+msgid "hibernate.connection.driver_class"
+msgstr ""
+
+#: index.docbook:163
+msgid "JDBC driver class"
+msgstr ""
+
+#: index.docbook:168
+msgid "hibernate.connection.url"
+msgstr ""
+
+#: index.docbook:171
+msgid "JDBC URL"
+msgstr ""
+
+#: index.docbook:176, index.docbook:272
+msgid "hibernate.connection.username"
+msgstr ""
+
+#: index.docbook:179
+msgid "database user"
+msgstr ""
+
+#: index.docbook:184, index.docbook:280
+msgid "hibernate.connection.password"
+msgstr ""
+
+#: index.docbook:187
+msgid "database user password"
+msgstr ""
+
+#: index.docbook:192
+msgid "hibernate.connection.pool_size"
+msgstr ""
+
+#: index.docbook:195
+msgid "maximum number of pooled connections"
+msgstr ""
+
+#: index.docbook:202
+msgid "Hibernate's own connection pooling algorithm is however quite rudimentary. It is intended to help you get started and is <emphasis>not intended for use in a production system</emphasis> or even for performance testing. You should use a third party pool for best performance and stability. Just replace the <literal>hibernate.connection.pool_size</literal> property with connection pool specific settings. This will turn off Hibernate's internal pool. For example, you might like to use C3P0."
+msgstr ""
+
+#: index.docbook:212
+msgid "C3P0 is an open source JDBC connection pool distributed along with Hibernate in the <literal>lib</literal> directory. Hibernate will use its <literal>C3P0ConnectionProvider</literal> for connection pooling if you set <literal>hibernate.c3p0.*</literal> properties. If you'd like to use Proxool refer to the packaged <literal>hibernate.properties</literal> and the Hibernate web site for more information."
+msgstr ""
+
+#: index.docbook:221
+msgid "Here is an example <literal>hibernate.properties</literal> file for C3P0:"
+msgstr ""
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[hibernate.connection.driver_class = org.postgresql.Driver\n"
+ "hibernate.connection.url = jdbc:postgresql://localhost/mydatabase\n"
+ "hibernate.connection.username = myuser\n"
+ "hibernate.connection.password = secret\n"
+ "hibernate.c3p0.min_size=5\n"
+ "hibernate.c3p0.max_size=20\n"
+ "hibernate.c3p0.timeout=1800\n"
+ "hibernate.c3p0.max_statements=50\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+
+#: index.docbook:227
+msgid "For use inside an application server, you should almost always configure Hibernate to obtain connections from an application server <literal>Datasource</literal> registered in JNDI. You'll need to set at least one of the following properties:"
+msgstr ""
+
+#: index.docbook:235
+msgid "Hibernate Datasource Properties"
+msgstr ""
+
+#: index.docbook:248
+msgid "hibernate.connection.datasource"
+msgstr ""
+
+#: index.docbook:251
+msgid "datasource JNDI name"
+msgstr ""
+
+#: index.docbook:256
+msgid "hibernate.jndi.url"
+msgstr ""
+
+#: index.docbook:258
+msgid "<emphasis>URL of the JNDI provider</emphasis> (optional)"
+msgstr ""
+
+#: index.docbook:264
+msgid "hibernate.jndi.class"
+msgstr ""
+
+#: index.docbook:266
+msgid "<emphasis>class of the JNDI <literal>InitialContextFactory</literal></emphasis> (optional)"
+msgstr ""
+
+#: index.docbook:274
+msgid "<emphasis>database user</emphasis> (optional)"
+msgstr ""
+
+#: index.docbook:282
+msgid "<emphasis>database user password</emphasis> (optional)"
+msgstr ""
+
+#: index.docbook:290
+msgid "Here's an example <literal>hibernate.properties</literal> file for an application server provided JNDI datasource:"
+msgstr ""
+
+#: index.docbook:295
+msgid ""
+ "<![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test\n"
+ "hibernate.transaction.factory_class = \\\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ "hibernate.transaction.manager_lookup_class = \\\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+
+#: index.docbook:297
+msgid "JDBC connections obtained from a JNDI datasource will automatically participate in the container-managed transactions of the application server."
+msgstr ""
+
+#: index.docbook:302
+msgid "Arbitrary connection properties may be given by prepending \"<literal>hibernate.connection</literal>\" to the property name. For example, you may specify a <literal>charSet</literal> using <literal>hibernate.connection.charSet</literal>."
+msgstr ""
+
+#: index.docbook:308
+msgid "You may define your own plugin strategy for obtaining JDBC connections by implementing the interface <literal>org.hibernate.connection.ConnectionProvider</literal>. You may select a custom implementation by setting <literal>hibernate.connection.provider_class</literal>."
+msgstr ""
+
+#: index.docbook:317
+msgid "Optional configuration properties"
+msgstr ""
+
+#: index.docbook:319
+msgid "There are a number of other properties that control the behaviour of Hibernate at runtime. All are optional and have reasonable default values."
+msgstr ""
+
+#: index.docbook:324
+msgid "<emphasis>Warning: some of these properties are \"system-level\" only.</emphasis> System-level properties can be set only via <literal>java -Dproperty=value</literal> or <literal>hibernate.properties</literal>. They may <emphasis>not</emphasis> be set by the other techniques described above."
+msgstr ""
+
+#: index.docbook:332
+msgid "Hibernate Configuration Properties"
+msgstr ""
+
+#: index.docbook:345
+msgid "hibernate.dialect"
+msgstr ""
+
+#: index.docbook:347
+msgid "The classname of a Hibernate <literal>Dialect</literal> which allows Hibernate to generate SQL optimized for a particular relational database."
+msgstr ""
+
+#: index.docbook:351
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>full.classname.of.Dialect</literal>"
+msgstr ""
+
+#: index.docbook:359
+msgid "hibernate.show_sql"
+msgstr ""
+
+#: index.docbook:361
+msgid "Write all SQL statements to console. This is an alternative to setting the log category <literal>org.hibernate.SQL</literal> to <literal>debug</literal>."
+msgstr ""
+
+#: index.docbook:365, index.docbook:377, index.docbook:471, index.docbook:484, index.docbook:497, index.docbook:510, index.docbook:564, index.docbook:591, index.docbook:605, index.docbook:660, index.docbook:888, index.docbook:903, index.docbook:993
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true</literal> | <literal>false</literal>"
+msgstr ""
+
+#: index.docbook:373
+msgid "hibernate.format_sql"
+msgstr ""
+
+#: index.docbook:375
+msgid "Pretty print the SQL in the log and console."
+msgstr ""
+
+#: index.docbook:385
+msgid "hibernate.default_schema"
+msgstr ""
+
+#: index.docbook:387
+msgid "Qualify unqualified table names with the given schema/tablespace in generated SQL."
+msgstr ""
+
+#: index.docbook:390
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>SCHEMA_NAME</literal>"
+msgstr ""
+
+#: index.docbook:398
+msgid "hibernate.default_catalog"
+msgstr ""
+
+#: index.docbook:400
+msgid "Qualify unqualified table names with the given catalog in generated SQL."
+msgstr ""
+
+#: index.docbook:403
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>CATALOG_NAME</literal>"
+msgstr ""
+
+#: index.docbook:411
+msgid "hibernate.session_factory_name"
+msgstr ""
+
+#: index.docbook:413
+msgid "The <literal>SessionFactory</literal> will be automatically bound to this name in JNDI after it has been created."
+msgstr ""
+
+#: index.docbook:416, index.docbook:859
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jndi/composite/name</literal>"
+msgstr ""
+
+#: index.docbook:424
+msgid "hibernate.max_fetch_depth"
+msgstr ""
+
+#: index.docbook:426
+msgid "Set a maximum \"depth\" for the outer join fetch tree for single-ended associations (one-to-one, many-to-one). A <literal>0</literal> disables default outer join fetching."
+msgstr ""
+
+#: index.docbook:430
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>0</literal> and <literal>3</literal>"
+msgstr ""
+
+#: index.docbook:439
+msgid "hibernate.default_batch_fetch_size"
+msgstr ""
+
+#: index.docbook:441
+msgid "Set a default size for Hibernate batch fetching of associations."
+msgstr ""
+
+#: index.docbook:443
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values <literal>4</literal>, <literal>8</literal>, <literal>16</literal>"
+msgstr ""
+
+#: index.docbook:452
+msgid "hibernate.default_entity_mode"
+msgstr ""
+
+#: index.docbook:454
+msgid "Set a default mode for entity representation for all sessions opened from this <literal>SessionFactory</literal>"
+msgstr ""
+
+#: index.docbook:457
+msgid "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+msgstr ""
+
+#: index.docbook:465
+msgid "hibernate.order_updates"
+msgstr ""
+
+#: index.docbook:467
+msgid "Force Hibernate to order SQL updates by the primary key value of the items being updated. This will result in fewer transaction deadlocks in highly concurrent systems."
+msgstr ""
+
+#: index.docbook:479
+msgid "hibernate.generate_statistics"
+msgstr ""
+
+#: index.docbook:481
+msgid "If enabled, Hibernate will collect statistics useful for performance tuning."
+msgstr ""
+
+#: index.docbook:492
+msgid "hibernate.use_identifier_rollback"
+msgstr ""
+
+#: index.docbook:494
+msgid "If enabled, generated identifier properties will be reset to default values when objects are deleted."
+msgstr ""
+
+#: index.docbook:505
+msgid "hibernate.use_sql_comments"
+msgstr ""
+
+#: index.docbook:507
+msgid "If turned on, Hibernate will generate comments inside the SQL, for easier debugging, defaults to <literal>false</literal>."
+msgstr ""
+
+#: index.docbook:521
+msgid "Hibernate JDBC and Connection Properties"
+msgstr ""
+
+#: index.docbook:536
+msgid "hibernate.jdbc.fetch_size"
+msgstr ""
+
+#: index.docbook:538
+msgid "A non-zero value determines the JDBC fetch size (calls <literal>Statement.setFetchSize()</literal>)."
+msgstr ""
+
+#: index.docbook:545
+msgid "hibernate.jdbc.batch_size"
+msgstr ""
+
+#: index.docbook:547
+msgid "A non-zero value enables use of JDBC2 batch updates by Hibernate."
+msgstr ""
+
+#: index.docbook:549
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>5</literal> and <literal>30</literal>"
+msgstr ""
+
+#: index.docbook:557
+msgid "hibernate.jdbc.batch_versioned_data"
+msgstr ""
+
+#: index.docbook:559
+msgid "Set this property to <literal>true</literal> if your JDBC driver returns correct row counts from <literal>executeBatch()</literal> (it is usually safe to turn this option on). Hibernate will then use batched DML for automatically versioned data. Defaults to <literal>false</literal>."
+msgstr ""
+
+#: index.docbook:572
+msgid "hibernate.jdbc.factory_class"
+msgstr ""
+
+#: index.docbook:574
+msgid "Select a custom <literal>Batcher</literal>. Most applications will not need this configuration property."
+msgstr ""
+
+#: index.docbook:577
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.BatcherFactory</literal>"
+msgstr ""
+
+#: index.docbook:585
+msgid "hibernate.jdbc.use_scrollable_resultset"
+msgstr ""
+
+#: index.docbook:587
+msgid "Enables use of JDBC2 scrollable resultsets by Hibernate. This property is only necessary when using user supplied JDBC connections, Hibernate uses connection metadata otherwise."
+msgstr ""
+
+#: index.docbook:599
+msgid "hibernate.jdbc.use_streams_for_binary"
+msgstr ""
+
+#: index.docbook:601
+msgid "Use streams when writing/reading <literal>binary</literal> or <literal>serializable</literal> types to/from JDBC (system-level property)."
+msgstr ""
+
+#: index.docbook:613
+msgid "hibernate.jdbc.use_get_generated_keys"
+msgstr ""
+
+#: index.docbook:615
+msgid "Enable use of JDBC3 <literal>PreparedStatement.getGeneratedKeys()</literal> to retrieve natively generated keys after insert. Requires JDBC3+ driver and JRE1.4+, set to false if your driver has problems with the Hibernate identifier generators. By default, tries to determine the driver capabilities using connection metadata."
+msgstr ""
+
+#: index.docbook:621, index.docbook:751, index.docbook:763, index.docbook:777, index.docbook:815
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true|false</literal>"
+msgstr ""
+
+#: index.docbook:629
+msgid "hibernate.connection.provider_class"
+msgstr ""
+
+#: index.docbook:631
+msgid "The classname of a custom <literal>ConnectionProvider</literal> which provides JDBC connections to Hibernate."
+msgstr ""
+
+#: index.docbook:634
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.ConnectionProvider</literal>"
+msgstr ""
+
+#: index.docbook:642
+msgid "hibernate.connection.isolation"
+msgstr ""
+
+#: index.docbook:644
+msgid "Set the JDBC transaction isolation level. Check <literal>java.sql.Connection</literal> for meaningful values but note that most databases do not support all isolation levels."
+msgstr ""
+
+#: index.docbook:648
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>1, 2, 4, 8</literal>"
+msgstr ""
+
+#: index.docbook:656
+msgid "hibernate.connection.autocommit"
+msgstr ""
+
+#: index.docbook:658
+msgid "Enables autocommit for JDBC pooled connections (not recommended)."
+msgstr ""
+
+#: index.docbook:668
+msgid "hibernate.connection.release_mode"
+msgstr ""
+
+#: index.docbook:670
+msgid "Specify when Hibernate should release JDBC connections. By default, a JDBC connection is held until the session is explicitly closed or disconnected. For an application server JTA datasource, you should use <literal>after_statement</literal> to aggressively release connections after every JDBC call. For a non-JTA connection, it often makes sense to release the connection at the end of each transaction, by using <literal>after_transaction</literal>. <literal>auto</literal> will choose <literal>after_statement</literal> for the JTA and CMT transaction strategies and <literal>after_transaction</literal> for the JDBC transaction strategy."
+msgstr ""
+
+#: index.docbook:681
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>auto</literal> (default) | <literal>on_close</literal> | <literal>after_transaction</literal> | <literal>after_statement</literal>"
+msgstr ""
+
+#: index.docbook:686
+msgid "Note that this setting only affects <literal>Session</literal>s returned from <literal>SessionFactory.openSession</literal>. For <literal>Session</literal>s obtained through <literal>SessionFactory.getCurrentSession</literal>, the <literal>CurrentSessionContext</literal> implementation configured for use controls the connection release mode for those <literal>Session</literal>s. See"
+msgstr ""
+
+#: index.docbook:698
+msgid "hibernate.connection.<emphasis><propertyName></emphasis>"
+msgstr ""
+
+#: index.docbook:700
+msgid "Pass the JDBC property <literal>propertyName</literal> to <literal>DriverManager.getConnection()</literal>."
+msgstr ""
+
+#: index.docbook:707
+msgid "hibernate.jndi.<emphasis><propertyName></emphasis>"
+msgstr ""
+
+#: index.docbook:709
+msgid "Pass the property <literal>propertyName</literal> to the JNDI <literal>InitialContextFactory</literal>."
+msgstr ""
+
+#: index.docbook:719
+msgid "Hibernate Cache Properties"
+msgstr ""
+
+#: index.docbook:732
+msgid "hibernate.cache.provider_class"
+msgstr ""
+
+#: index.docbook:734
+msgid "The classname of a custom <literal>CacheProvider</literal>."
+msgstr ""
+
+#: index.docbook:736
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.CacheProvider</literal>"
+msgstr ""
+
+#: index.docbook:744
+msgid "hibernate.cache.use_minimal_puts"
+msgstr ""
+
+#: index.docbook:746
+msgid "Optimize second-level cache operation to minimize writes, at the cost of more frequent reads. This setting is most useful for clustered caches and, in Hibernate3, is enabled by default for clustered cache implementations."
+msgstr ""
+
+#: index.docbook:759
+msgid "hibernate.cache.use_query_cache"
+msgstr ""
+
+#: index.docbook:761
+msgid "Enable the query cache, individual queries still have to be set cachable."
+msgstr ""
+
+#: index.docbook:771
+msgid "hibernate.cache.use_second_level_cache"
+msgstr ""
+
+#: index.docbook:773
+msgid "May be used to completely disable the second level cache, which is enabled by default for classes which specify a <literal><cache></literal> mapping."
+msgstr ""
+
+#: index.docbook:785
+msgid "hibernate.cache.query_cache_factory"
+msgstr ""
+
+#: index.docbook:787
+msgid "The classname of a custom <literal>QueryCache</literal> interface, defaults to the built-in <literal>StandardQueryCache</literal>."
+msgstr ""
+
+#: index.docbook:790
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.QueryCache</literal>"
+msgstr ""
+
+#: index.docbook:798
+msgid "hibernate.cache.region_prefix"
+msgstr ""
+
+#: index.docbook:800
+msgid "A prefix to use for second-level cache region names."
+msgstr ""
+
+#: index.docbook:802
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>prefix</literal>"
+msgstr ""
+
+#: index.docbook:810
+msgid "hibernate.cache.use_structured_entries"
+msgstr ""
+
+#: index.docbook:812
+msgid "Forces Hibernate to store data in the second-level cache in a more human-friendly format."
+msgstr ""
+
+#: index.docbook:826
+msgid "Hibernate Transaction Properties"
+msgstr ""
+
+#: index.docbook:839
+msgid "hibernate.transaction.factory_class"
+msgstr ""
+
+#: index.docbook:841
+msgid "The classname of a <literal>TransactionFactory</literal> to use with Hibernate <literal>Transaction</literal> API (defaults to <literal>JDBCTransactionFactory</literal>)."
+msgstr ""
+
+#: index.docbook:845
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionFactory</literal>"
+msgstr ""
+
+#: index.docbook:853
+msgid "jta.UserTransaction"
+msgstr ""
+
+#: index.docbook:855
+msgid "A JNDI name used by <literal>JTATransactionFactory</literal> to obtain the JTA <literal>UserTransaction</literal> from the application server."
+msgstr ""
+
+#: index.docbook:867
+msgid "hibernate.transaction.manager_lookup_class"
+msgstr ""
+
+#: index.docbook:869
+msgid "The classname of a <literal>TransactionManagerLookup</literal> - required when JVM-level caching is enabled or when using hilo generator in a JTA environment."
+msgstr ""
+
+#: index.docbook:873
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionManagerLookup</literal>"
+msgstr ""
+
+#: index.docbook:881
+msgid "hibernate.transaction.flush_before_completion"
+msgstr ""
+
+#: index.docbook:883
+msgid "If enabled, the session will be automatically flushed during the before completion phase of the transaction. Built-in and automatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr ""
+
+#: index.docbook:896
+msgid "hibernate.transaction.auto_close_session"
+msgstr ""
+
+#: index.docbook:898
+msgid "If enabled, the session will be automatically closed during the after completion phase of the transaction. Built-in and utomatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr ""
+
+#: index.docbook:914
+msgid "Miscellaneous Properties"
+msgstr ""
+
+#: index.docbook:927
+msgid "hibernate.current_session_context_class"
+msgstr ""
+
+#: index.docbook:929
+msgid "Supply a (custom) strategy for the scoping of the \"current\" <literal>Session</literal>. See <xref linkend=\"architecture-current-session\"/> for more information about the built-in strategies."
+msgstr ""
+
+#: index.docbook:934
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jta</literal> | <literal>thread</literal> | <literal>managed</literal> | <literal>custom.Class</literal>"
+msgstr ""
+
+#: index.docbook:943
+msgid "hibernate.query.factory_class"
+msgstr ""
+
+#: index.docbook:945
+msgid "Chooses the HQL parser implementation."
+msgstr ""
+
+#: index.docbook:947
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>"
+msgstr ""
+
+#: index.docbook:956
+msgid "hibernate.query.substitutions"
+msgstr ""
+
+#: index.docbook:958
+msgid "Mapping from tokens in Hibernate queries to SQL tokens (tokens might be function or literal names, for example)."
+msgstr ""
+
+#: index.docbook:961
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>"
+msgstr ""
+
+#: index.docbook:969
+msgid "hibernate.hbm2ddl.auto"
+msgstr ""
+
+#: index.docbook:971
+msgid "Automatically validate or export schema DDL to the database when the <literal>SessionFactory</literal> is created. With <literal>create-drop</literal>, the database schema will be dropped when the <literal>SessionFactory</literal> is closed explicitly."
+msgstr ""
+
+#: index.docbook:977
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>validate</literal> | <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+msgstr ""
+
+#: index.docbook:986
+msgid "hibernate.cglib.use_reflection_optimizer"
+msgstr ""
+
+#: index.docbook:988
+msgid "Enables use of CGLIB instead of runtime reflection (System-level property). Reflection can sometimes be useful when troubleshooting, note that Hibernate always requires CGLIB even if you turn off the optimizer. You can not set this property in <literal>hibernate.cfg.xml</literal>."
+msgstr ""
+
+#: index.docbook:1004
+msgid "SQL Dialects"
+msgstr ""
+
+#: index.docbook:1006
+msgid "You should always set the <literal>hibernate.dialect</literal> property to the correct <literal>org.hibernate.dialect.Dialect</literal> subclass for your database. If you specify a dialect, Hibernate will use sensible defaults for some of the other properties listed above, saving you the effort of specifying them manually."
+msgstr ""
+
+#: index.docbook:1014
+msgid "Hibernate SQL Dialects (<literal>hibernate.dialect</literal>)"
+msgstr ""
+
+#: index.docbook:1022
+msgid "RDBMS"
+msgstr ""
+
+#: index.docbook:1023
+msgid "Dialect"
+msgstr ""
+
+#: index.docbook:1028
+msgid "<entry>DB2</entry>"
+msgstr ""
+
+#: index.docbook:1028
+msgid "org.hibernate.dialect.DB2Dialect"
+msgstr ""
+
+#: index.docbook:1031
+msgid "DB2 AS/400"
+msgstr ""
+
+#: index.docbook:1031
+msgid "org.hibernate.dialect.DB2400Dialect"
+msgstr ""
+
+#: index.docbook:1034
+msgid "DB2 OS390"
+msgstr ""
+
+#: index.docbook:1034
+msgid "org.hibernate.dialect.DB2390Dialect"
+msgstr ""
+
+#: index.docbook:1037
+msgid "PostgreSQL"
+msgstr ""
+
+#: index.docbook:1037
+msgid "org.hibernate.dialect.PostgreSQLDialect"
+msgstr ""
+
+#: index.docbook:1040
+msgid "MySQL"
+msgstr ""
+
+#: index.docbook:1040
+msgid "org.hibernate.dialect.MySQLDialect"
+msgstr ""
+
+#: index.docbook:1043
+msgid "MySQL with InnoDB"
+msgstr ""
+
+#: index.docbook:1043
+msgid "org.hibernate.dialect.MySQLInnoDBDialect"
+msgstr ""
+
+#: index.docbook:1046
+msgid "MySQL with MyISAM"
+msgstr ""
+
+#: index.docbook:1046
+msgid "org.hibernate.dialect.MySQLMyISAMDialect"
+msgstr ""
+
+#: index.docbook:1049
+msgid "Oracle (any version)"
+msgstr ""
+
+#: index.docbook:1049
+msgid "org.hibernate.dialect.OracleDialect"
+msgstr ""
+
+#: index.docbook:1052
+msgid "Oracle 9i/10g"
+msgstr ""
+
+#: index.docbook:1052
+msgid "org.hibernate.dialect.Oracle9Dialect"
+msgstr ""
+
+#: index.docbook:1055
+msgid "Sybase"
+msgstr ""
+
+#: index.docbook:1055
+msgid "org.hibernate.dialect.SybaseDialect"
+msgstr ""
+
+#: index.docbook:1058
+msgid "Sybase Anywhere"
+msgstr ""
+
+#: index.docbook:1058
+msgid "org.hibernate.dialect.SybaseAnywhereDialect"
+msgstr ""
+
+#: index.docbook:1061
+msgid "Microsoft SQL Server"
+msgstr ""
+
+#: index.docbook:1061
+msgid "org.hibernate.dialect.SQLServerDialect"
+msgstr ""
+
+#: index.docbook:1064
+msgid "SAP DB"
+msgstr ""
+
+#: index.docbook:1064
+msgid "org.hibernate.dialect.SAPDBDialect"
+msgstr ""
+
+#: index.docbook:1067
+msgid "Informix"
+msgstr ""
+
+#: index.docbook:1067
+msgid "org.hibernate.dialect.InformixDialect"
+msgstr ""
+
+#: index.docbook:1070
+msgid "HypersonicSQL"
+msgstr ""
+
+#: index.docbook:1070
+msgid "org.hibernate.dialect.HSQLDialect"
+msgstr ""
+
+#: index.docbook:1073
+msgid "Ingres"
+msgstr ""
+
+#: index.docbook:1073
+msgid "org.hibernate.dialect.IngresDialect"
+msgstr ""
+
+#: index.docbook:1076
+msgid "Progress"
+msgstr ""
+
+#: index.docbook:1076
+msgid "org.hibernate.dialect.ProgressDialect"
+msgstr ""
+
+#: index.docbook:1079
+msgid "Mckoi SQL"
+msgstr ""
+
+#: index.docbook:1079
+msgid "org.hibernate.dialect.MckoiDialect"
+msgstr ""
+
+#: index.docbook:1082
+msgid "Interbase"
+msgstr ""
+
+#: index.docbook:1082
+msgid "org.hibernate.dialect.InterbaseDialect"
+msgstr ""
+
+#: index.docbook:1085
+msgid "Pointbase"
+msgstr ""
+
+#: index.docbook:1085
+msgid "org.hibernate.dialect.PointbaseDialect"
+msgstr ""
+
+#: index.docbook:1088
+msgid "FrontBase"
+msgstr ""
+
+#: index.docbook:1088
+msgid "org.hibernate.dialect.FrontbaseDialect"
+msgstr ""
+
+#: index.docbook:1091
+msgid "Firebird"
+msgstr ""
+
+#: index.docbook:1091
+msgid "org.hibernate.dialect.FirebirdDialect"
+msgstr ""
+
+#: index.docbook:1100
+msgid "Outer Join Fetching"
+msgstr ""
+
+#: index.docbook:1102
+msgid "If your database supports ANSI, Oracle or Sybase style outer joins, <emphasis>outer join fetching</emphasis> will often increase performance by limiting the number of round trips to and from the database (at the cost of possibly more work performed by the database itself). Outer join fetching allows a whole graph of objects connected by many-to-one, one-to-many, many-to-many and one-to-one associations to be retrieved in a single SQL <literal>SELECT</literal>."
+msgstr ""
+
+#: index.docbook:1111
+msgid "Outer join fetching may be disabled <emphasis>globally</emphasis> by setting the property <literal>hibernate.max_fetch_depth</literal> to <literal>0</literal>. A setting of <literal>1</literal> or higher enables outer join fetching for one-to-one and many-to-one associations which have been mapped with <literal>fetch=\"join\"</literal>."
+msgstr ""
+
+#: index.docbook:1119
+msgid "See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr ""
+
+#: index.docbook:1126
+msgid "Binary Streams"
+msgstr ""
+
+#: index.docbook:1128
+msgid "Oracle limits the size of <literal>byte</literal> arrays that may be passed to/from its JDBC driver. If you wish to use large instances of <literal>binary</literal> or <literal>serializable</literal> type, you should enable <literal>hibernate.jdbc.use_streams_for_binary</literal>. <emphasis>This is a system-level setting only.</emphasis>"
+msgstr ""
+
+#: index.docbook:1139
+msgid "Second-level and query cache"
+msgstr ""
+
+#: index.docbook:1141
+msgid "The properties prefixed by <literal>hibernate.cache</literal> allow you to use a process or cluster scoped second-level cache system with Hibernate. See the <xref linkend=\"performance-cache\"/> for more details."
+msgstr ""
+
+#: index.docbook:1151
+msgid "Query Language Substitution"
+msgstr ""
+
+#: index.docbook:1153
+msgid "You may define new Hibernate query tokens using <literal>hibernate.query.substitutions</literal>. For example:"
+msgstr ""
+
+#: index.docbook:1158
+msgid "hibernate.query.substitutions true=1, false=0"
+msgstr ""
+
+#: index.docbook:1160
+msgid "would cause the tokens <literal>true</literal> and <literal>false</literal> to be translated to integer literals in the generated SQL."
+msgstr ""
+
+#: index.docbook:1165
+msgid "hibernate.query.substitutions toLowercase=LOWER"
+msgstr ""
+
+#: index.docbook:1167
+msgid "would allow you to rename the SQL <literal>LOWER</literal> function."
+msgstr ""
+
+#: index.docbook:1174
+msgid "Hibernate statistics"
+msgstr ""
+
+#: index.docbook:1176
+msgid "If you enable <literal>hibernate.generate_statistics</literal>, Hibernate will expose a number of metrics that are useful when tuning a running system via <literal>SessionFactory.getStatistics()</literal>. Hibernate can even be configured to expose these statistics via JMX. Read the Javadoc of the interfaces in <literal>org.hibernate.stats</literal> for more information."
+msgstr ""
+
+#: index.docbook:1188
+msgid "Logging"
+msgstr ""
+
+#: index.docbook:1190
+msgid "Hibernate logs various events using Apache commons-logging."
+msgstr ""
+
+#: index.docbook:1194
+msgid "The commons-logging service will direct output to either Apache Log4j (if you include <literal>log4j.jar</literal> in your classpath) or JDK1.4 logging (if running under JDK1.4 or above). You may download Log4j from <literal>http://jakarta.apache.org</literal>. To use Log4j you will need to place a <literal>log4j.properties</literal> file in your classpath, an example properties file is distributed with Hibernate in the <literal>src/</literal> directory."
+msgstr ""
+
+#: index.docbook:1204
+msgid "We strongly recommend that you familiarize yourself with Hibernate's log messages. A lot of work has been put into making the Hibernate log as detailed as possible, without making it unreadable. It is an essential troubleshooting device. The most interesting log categories are the following:"
+msgstr ""
+
+#: index.docbook:1213
+msgid "Hibernate Log Categories"
+msgstr ""
+
+#: index.docbook:1219
+msgid "Category"
+msgstr ""
+
+#: index.docbook:1220
+msgid "Function"
+msgstr ""
+
+#: index.docbook:1225
+msgid "org.hibernate.SQL"
+msgstr ""
+
+#: index.docbook:1226
+msgid "Log all SQL DML statements as they are executed"
+msgstr ""
+
+#: index.docbook:1229
+msgid "org.hibernate.type"
+msgstr ""
+
+#: index.docbook:1230
+msgid "Log all JDBC parameters"
+msgstr ""
+
+#: index.docbook:1233
+msgid "org.hibernate.tool.hbm2ddl"
+msgstr ""
+
+#: index.docbook:1234
+msgid "Log all SQL DDL statements as they are executed"
+msgstr ""
+
+#: index.docbook:1237
+msgid "org.hibernate.pretty"
+msgstr ""
+
+#: index.docbook:1238
+msgid "Log the state of all entities (max 20 entities) associated with the session at flush time"
+msgstr ""
+
+#: index.docbook:1244
+msgid "org.hibernate.cache"
+msgstr ""
+
+#: index.docbook:1245
+msgid "Log all second-level cache activity"
+msgstr ""
+
+#: index.docbook:1248
+msgid "org.hibernate.transaction"
+msgstr ""
+
+#: index.docbook:1249
+msgid "Log transaction related activity"
+msgstr ""
+
+#: index.docbook:1252
+msgid "org.hibernate.jdbc"
+msgstr ""
+
+#: index.docbook:1253
+msgid "Log all JDBC resource acquisition"
+msgstr ""
+
+#: index.docbook:1256
+msgid "org.hibernate.hql.ast.AST"
+msgstr ""
+
+#: index.docbook:1257
+msgid "Log HQL and SQL ASTs during query parsing"
+msgstr ""
+
+#: index.docbook:1262
+msgid "org.hibernate.secure"
+msgstr ""
+
+#: index.docbook:1263
+msgid "Log all JAAS authorization requests"
+msgstr ""
+
+#: index.docbook:1266
+msgid "org.hibernate"
+msgstr ""
+
+#: index.docbook:1267
+msgid "Log everything (a lot of information, but very useful for troubleshooting)"
+msgstr ""
+
+#: index.docbook:1276
+msgid "When developing applications with Hibernate, you should almost always work with <literal>debug</literal> enabled for the category <literal>org.hibernate.SQL</literal>, or, alternatively, the property <literal>hibernate.show_sql</literal> enabled."
+msgstr ""
+
+#: index.docbook:1286
+msgid "Implementing a <literal>NamingStrategy</literal>"
+msgstr ""
+
+#: index.docbook:1288
+msgid "The interface <literal>org.hibernate.cfg.NamingStrategy</literal> allows you to specify a \"naming standard\" for database objects and schema elements."
+msgstr ""
+
+#: index.docbook:1293
+msgid "You may provide rules for automatically generating database identifiers from Java identifiers or for processing \"logical\" column and table names given in the mapping file into \"physical\" table and column names. This feature helps reduce the verbosity of the mapping document, eliminating repetitive noise (<literal>TBL_</literal> prefixes, for example). The default strategy used by Hibernate is quite minimal."
+msgstr ""
+
+#: index.docbook:1302
+msgid "You may specify a different strategy by calling <literal>Configuration.setNamingStrategy()</literal> before adding mappings:"
+msgstr ""
+
+#: index.docbook:1307
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)\n"
+ " .addFile(\"Item.hbm.xml\")\n"
+ " .addFile(\"Bid.hbm.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr ""
+
+#: index.docbook:1309
+msgid "<literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> is a built-in strategy that might be a useful starting point for some applications."
+msgstr ""
+
+#: index.docbook:1317
+msgid "XML configuration file"
+msgstr ""
+
+#: index.docbook:1319
+msgid "An alternative approach to configuration is to specify a full configuration in a file named <literal>hibernate.cfg.xml</literal>. This file can be used as a replacement for the <literal>hibernate.properties</literal> file or, if both are present, to override properties."
+msgstr ""
+
+#: index.docbook:1326
+msgid "The XML configuration file is by default expected to be in the root o your <literal>CLASSPATH</literal>. Here is an example:"
+msgstr ""
+
+#: index.docbook:1331
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <!-- a SessionFactory instance listed as /jndi/name -->\n"
+ " <session-factory\n"
+ " name=\"java:hibernate/SessionFactory\">\n"
+ "\n"
+ " <!-- properties -->\n"
+ " <property name=\"connection.datasource\">java:/comp/env/jdbc/MyDB</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.MySQLDialect</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"transaction.factory_class\">\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ " </property>\n"
+ " <property name=\"jta.UserTransaction\">java:comp/UserTransaction</property>\n"
+ "\n"
+ " <!-- mapping files -->\n"
+ " <mapping resource=\"org/hibernate/auction/Item.hbm.xml\"/>\n"
+ " <mapping resource=\"org/hibernate/auction/Bid.hbm.xml\"/>\n"
+ "\n"
+ " <!-- cache settings -->\n"
+ " <class-cache class=\"org.hibernate.auction.Item\" usage=\"read-write\"/>\n"
+ " <class-cache class=\"org.hibernate.auction.Bid\" usage=\"read-only\"/>\n"
+ " <collection-cache collection=\"org.hibernate.auction.Item.bids\" usage=\"read-write\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+
+#: index.docbook:1333
+msgid "As you can see, the advantage of this approach is the externalization of the mapping file names to configuration. The <literal>hibernate.cfg.xml</literal> is also more convenient once you have to tune the Hibernate cache. Note that is your choice to use either <literal>hibernate.properties</literal> or <literal>hibernate.cfg.xml</literal>, both are equivalent, except for the above mentioned benefits of using the XML syntax."
+msgstr ""
+
+#: index.docbook:1342
+msgid "With the XML configuration, starting Hibernate is then as simple as"
+msgstr ""
+
+#: index.docbook:1346
+msgid "<![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]>"
+msgstr ""
+
+#: index.docbook:1348
+msgid "You can pick a different XML configuration file using"
+msgstr ""
+
+#: index.docbook:1352
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .configure(\"catdb.cfg.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr ""
+
+#: index.docbook:1357
+msgid "J2EE Application Server integration"
+msgstr ""
+
+#: index.docbook:1359
+msgid "Hibernate has the following integration points for J2EE infrastructure:"
+msgstr ""
+
+#: index.docbook:1365
+msgid "<emphasis>Container-managed datasources</emphasis>: Hibernate can use JDBC connections managed by the container and provided through JNDI. Usually, a JTA compatible <literal>TransactionManager</literal> and a <literal>ResourceManager</literal> take care of transaction management (CMT), esp. distributed transaction handling across several datasources. You may of course also demarcate transaction boundaries programmatically (BMT) or you might want to use the optional Hibernate <literal>Transaction</literal> API for this to keep your code portable."
+msgstr ""
+
+#: index.docbook:1380
+msgid "<emphasis>Automatic JNDI binding</emphasis>: Hibernate can bind its <literal>SessionFactory</literal> to JNDI after startup."
+msgstr ""
+
+#: index.docbook:1389
+msgid "<emphasis>JTA Session binding:</emphasis> The Hibernate <literal>Session</literal> may be automatically bound to the scope of JTA transactions. Simply lookup the <literal>SessionFactory</literal> from JNDI and get the current <literal>Session</literal>. Let Hibernate take care of flushing and closing the <literal>Session</literal> when your JTA transaction completes. Transaction demarcation is either declarative (CMT) or programmatic (BMT/UserTransaction)."
+msgstr ""
+
+#: index.docbook:1402
+msgid "<emphasis>JMX deployment:</emphasis> If you have a JMX capable application server (e.g. JBoss AS), you can chose to deploy Hibernate as a managed MBean. This saves you the one line startup code to build your <literal>SessionFactory</literal> from a <literal>Configuration</literal>. The container will startup your <literal>HibernateService</literal>, and ideally also take care of service dependencies (Datasource has to be available before Hibernate starts, etc)."
+msgstr ""
+
+#: index.docbook:1413
+msgid "Depending on your environment, you might have to set the configuration option <literal>hibernate.connection.aggressive_release</literal> to true if your application server shows \"connection containment\" exceptions."
+msgstr ""
+
+#: index.docbook:1420
+msgid "Transaction strategy configuration"
+msgstr ""
+
+#: index.docbook:1422
+msgid "The Hibernate <literal>Session</literal> API is independent of any transaction demarcation system in your architecture. If you let Hibernate use JDBC directly, through a connection pool, you may begin and end your transactions by calling the JDBC API. If you run in a J2EE application server, you might want to use bean-managed transactions and call the JTA API and <literal>UserTransaction</literal> when needed."
+msgstr ""
+
+#: index.docbook:1430
+msgid "To keep your code portable between these two (and other) environments we recommend the optional Hibernate <literal>Transaction</literal> API, which wraps and hides the underlying system. You have to specify a factory class for <literal>Transaction</literal> instances by setting the Hibernate configuration property <literal>hibernate.transaction.factory_class</literal>."
+msgstr ""
+
+#: index.docbook:1437
+msgid "There are three standard (built-in) choices:"
+msgstr ""
+
+#: index.docbook:1443
+msgid "org.hibernate.transaction.JDBCTransactionFactory"
+msgstr ""
+
+#: index.docbook:1445
+msgid "delegates to database (JDBC) transactions (default)"
+msgstr ""
+
+#: index.docbook:1449
+msgid "org.hibernate.transaction.JTATransactionFactory"
+msgstr ""
+
+#: index.docbook:1451
+msgid "delegates to container-managed transaction if an existing transaction is underway in this context (e.g. EJB session bean method), otherwise a new transaction is started and bean-managed transaction are used."
+msgstr ""
+
+#: index.docbook:1459
+msgid "org.hibernate.transaction.CMTTransactionFactory"
+msgstr ""
+
+#: index.docbook:1461
+msgid "delegates to container-managed JTA transactions"
+msgstr ""
+
+#: index.docbook:1466
+msgid "You may also define your own transaction strategies (for a CORBA transaction service, for example)."
+msgstr ""
+
+#: index.docbook:1471
+msgid "Some features in Hibernate (i.e. the second level cache, Contextual Sessions with JTA, etc.) require access to the JTA <literal>TransactionManager</literal> in a managed environment. In an application server you have to specify how Hibernate should obtain a reference to the <literal>TransactionManager</literal>, since J2EE does not standardize a single mechanism:"
+msgstr ""
+
+#: index.docbook:1479
+msgid "JTA TransactionManagers"
+msgstr ""
+
+#: index.docbook:1485
+msgid "Transaction Factory"
+msgstr ""
+
+#: index.docbook:1486
+msgid "Application Server"
+msgstr ""
+
+#: index.docbook:1491
+msgid "org.hibernate.transaction.JBossTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1492
+msgid "JBoss"
+msgstr ""
+
+#: index.docbook:1495
+msgid "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1496
+msgid "Weblogic"
+msgstr ""
+
+#: index.docbook:1499
+msgid "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1500
+msgid "WebSphere"
+msgstr ""
+
+#: index.docbook:1503
+msgid "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+msgstr ""
+
+#: index.docbook:1504
+msgid "WebSphere 6"
+msgstr ""
+
+#: index.docbook:1507
+msgid "org.hibernate.transaction.OrionTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1508
+msgid "Orion"
+msgstr ""
+
+#: index.docbook:1511
+msgid "org.hibernate.transaction.ResinTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1512
+msgid "Resin"
+msgstr ""
+
+#: index.docbook:1515
+msgid "org.hibernate.transaction.JOTMTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1516
+msgid "JOTM"
+msgstr ""
+
+#: index.docbook:1519
+msgid "org.hibernate.transaction.JOnASTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1520
+msgid "JOnAS"
+msgstr ""
+
+#: index.docbook:1523
+msgid "org.hibernate.transaction.JRun4TransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1524
+msgid "JRun4"
+msgstr ""
+
+#: index.docbook:1527
+msgid "org.hibernate.transaction.BESTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1528
+msgid "Borland ES"
+msgstr ""
+
+#: index.docbook:1537
+msgid "JNDI-bound <literal>SessionFactory</literal>"
+msgstr ""
+
+#: index.docbook:1539
+msgid "A JNDI bound Hibernate <literal>SessionFactory</literal> can simplify the lookup of the factory and the creation of new <literal>Session</literal>s. Note that this is not related to a JNDI bound <literal>Datasource</literal>, both simply use the same registry!"
+msgstr ""
+
+#: index.docbook:1546
+msgid "If you wish to have the <literal>SessionFactory</literal> bound to a JNDI namespace, specify a name (eg. <literal>java:hibernate/SessionFactory</literal>) using the property <literal>hibernate.session_factory_name</literal>. If this property is omitted, the <literal>SessionFactory</literal> will not be bound to JNDI. (This is especially useful in environments with a read-only JNDI default implementation, e.g. Tomcat.)"
+msgstr ""
+
+#: index.docbook:1554
+msgid "When binding the <literal>SessionFactory</literal> to JNDI, Hibernate will use the values of <literal>hibernate.jndi.url</literal>, <literal>hibernate.jndi.class</literal> to instantiate an initial context. If they are not specified, the default <literal>InitialContext</literal> will be used."
+msgstr ""
+
+#: index.docbook:1561
+msgid "Hibernate will automatically place the <literal>SessionFactory</literal> in JNDI after you call <literal>cfg.buildSessionFactory()</literal>. This means you will at least have this call in some startup code (or utility class) in your application, unless you use JMX deployment with the <literal>HibernateService</literal> (discussed later)."
+msgstr ""
+
+#: index.docbook:1568
+msgid "If you use a JNDI <literal>SessionFactory</literal>, an EJB or any other class may obtain the <literal>SessionFactory</literal> using a JNDI lookup."
+msgstr ""
+
+#: index.docbook:1573
+msgid "We recommend that you bind the <literal>SessionFactory</literal> to JNDI in a managed environment and use a <literal>static</literal> singleton otherwise. To shield your application code from these details, we also recommend to hide the actual lookup code for a <literal>SessionFactory</literal> in a helper class, such as <literal>HibernateUtil.getSessionFactory()</literal>. Note that such a class is also a convenient way to startup Hibernate—see chapter 1."
+msgstr ""
+
+#: index.docbook:1585
+msgid "Current Session context management with JTA"
+msgstr ""
+
+#: index.docbook:1587
+msgid "The easiest way to handle <literal>Session</literal>s and transactions is Hibernates automatic \"current\" <literal>Session</literal> management. See the discussion of <xref linkend=\"architecture-current-session\"/>current sessions. Using the <literal>\"jta\"</literal> session context, if there is no Hibernate <literal>Session</literal> associated with the current JTA transaction, one will be started and associated with that JTA transaction the first time you call <literal>sessionFactory.getCurrentSession()</literal>. The <literal>Session</literal>s retrieved via <literal>getCurrentSession()</literal> in <literal>\"jta\"</literal> context will be set to automatically flush before the transaction completes, close after the transaction completes, and aggressively release JDBC connections after each statement. This allows the <literal>Session</literal>s to be managed by the life cycle of the JTA transaction to which it is associated, keeping user code clean of such man!
agement concerns. Your code can either use JTA programmatically through <literal>UserTransaction</literal>, or (recommended for portable code) use the Hibernate <literal>Transaction</literal> API to set transaction boundaries. If you run in an EJB container, declarative transaction demarcation with CMT is preferred."
+msgstr ""
+
+#: index.docbook:1610
+msgid "JMX deployment"
+msgstr ""
+
+#: index.docbook:1612
+msgid "The line <literal>cfg.buildSessionFactory()</literal> still has to be executed somewhere to get a <literal>SessionFactory</literal> into JNDI. You can do this either in a <literal>static</literal> initializer block (like the one in <literal>HibernateUtil</literal>) or you deploy Hibernate as a <emphasis>managed service</emphasis>."
+msgstr ""
+
+#: index.docbook:1620
+msgid "Hibernate is distributed with <literal>org.hibernate.jmx.HibernateService</literal> for deployment on an application server with JMX capabilities, such as JBoss AS. The actual deployment and configuration is vendor specific. Here is an example <literal>jboss-service.xml</literal> for JBoss 4.0.x:"
+msgstr ""
+
+#: index.docbook:1627
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<server>\n"
+ "\n"
+ "<mbean code=\"org.hibernate.jmx.HibernateService\"\n"
+ " name=\"jboss.jca:service=HibernateFactory,name=HibernateFactory\">\n"
+ "\n"
+ " <!-- Required services -->\n"
+ " <depends>jboss.jca:service=RARDeployer</depends>\n"
+ " <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>\n"
+ "\n"
+ " <!-- Bind the Hibernate service to JNDI -->\n"
+ " <attribute name=\"JndiName\">java:/hibernate/SessionFactory</attribute>\n"
+ "\n"
+ " <!-- Datasource settings -->\n"
+ " <attribute name=\"Datasource\">java:HsqlDS</attribute>\n"
+ " <attribute name=\"Dialect\">org.hibernate.dialect.HSQLDialect</attribute>\n"
+ "\n"
+ " <!-- Transaction integration -->\n"
+ " <attribute name=\"TransactionStrategy\">\n"
+ " org.hibernate.transaction.JTATransactionFactory</attribute>\n"
+ " <attribute name=\"TransactionManagerLookupStrategy\">\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup</attribute>\n"
+ " <attribute name=\"FlushBeforeCompletionEnabled\">true</attribute>\n"
+ " <attribute name=\"AutoCloseSessionEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Fetching options -->\n"
+ " <attribute name=\"MaximumFetchDepth\">5</attribute>\n"
+ "\n"
+ " <!-- Second-level caching -->\n"
+ " <attribute name=\"SecondLevelCacheEnabled\">true</attribute>\n"
+ " <attribute name=\"CacheProviderClass\">org.hibernate.cache.EhCacheProvider</attribute>\n"
+ " <attribute name=\"QueryCacheEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Logging -->\n"
+ " <attribute name=\"ShowSqlEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <attribute name=\"MapResources\">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>\n"
+ "\n"
+ "</mbean>\n"
+ "\n"
+ "</server>]]>"
+msgstr ""
+
+#: index.docbook:1629
+msgid "This file is deployed in a directory called <literal>META-INF</literal> and packaged in a JAR file with the extension <literal>.sar</literal> (service archive). You also need to package Hibernate, its required third-party libraries, your compiled persistent classes, as well as your mapping files in the same archive. Your enterprise beans (usually session beans) may be kept in their own JAR file, but you may include this EJB JAR file in the main service archive to get a single (hot-)deployable unit. Consult the JBoss AS documentation for more information about JMX service and EJB deployment."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/events.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/events.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/events.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,245 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Interceptors and events"
+msgstr ""
+
+#: index.docbook:7
+msgid "It is often useful for the application to react to certain events that occur inside Hibernate. This allows implementation of certain kinds of generic functionality, and extension of Hibernate functionality."
+msgstr ""
+
+#: index.docbook:14
+msgid "Interceptors"
+msgstr ""
+
+#: index.docbook:16
+msgid "The <literal>Interceptor</literal> interface provides callbacks from the session to the application allowing the application to inspect and/or manipulate properties of a persistent object before it is saved, updated, deleted or loaded. One possible use for this is to track auditing information. For example, the following <literal>Interceptor</literal> automatically sets the <literal>createTimestamp</literal> when an <literal>Auditable</literal> is created and updates the <literal>lastUpdateTimestamp</literal> property when an <literal>Auditable</literal> is updated."
+msgstr ""
+
+#: index.docbook:27
+msgid "You may either implement <literal>Interceptor</literal> directly or (better) extend <literal>EmptyInterceptor</literal>."
+msgstr ""
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[package org.hibernate.test;\n"
+ "\n"
+ "import java.io.Serializable;\n"
+ "import java.util.Date;\n"
+ "import java.util.Iterator;\n"
+ "\n"
+ "import org.hibernate.EmptyInterceptor;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.type.Type;\n"
+ "\n"
+ "public class AuditInterceptor extends EmptyInterceptor {\n"
+ "\n"
+ " private int updates;\n"
+ " private int creates;\n"
+ " private int loads;\n"
+ "\n"
+ " public void onDelete(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " // do nothing\n"
+ " }\n"
+ "\n"
+ " public boolean onFlushDirty(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] currentState,\n"
+ " Object[] previousState,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " updates++;\n"
+ " for ( int i=0; i < propertyNames.length; i++ ) {\n"
+ " if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " currentState[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onLoad(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " loads++;\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onSave(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " creates++;\n"
+ " for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " state[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public void afterTransactionCompletion(Transaction tx) {\n"
+ " if ( tx.wasCommitted() ) {\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);\n"
+ " }\n"
+ " updates=0;\n"
+ " creates=0;\n"
+ " loads=0;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:34
+msgid "Interceptors come in two flavors: <literal>Session</literal>-scoped and <literal>SessionFactory</literal>-scoped."
+msgstr ""
+
+#: index.docbook:39
+msgid "A <literal>Session</literal>-scoped interceptor is specified when a session is opened using one of the overloaded SessionFactory.openSession() methods accepting an <literal>Interceptor</literal>."
+msgstr ""
+
+#: index.docbook:45
+msgid "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+msgstr ""
+
+#: index.docbook:47
+msgid "A <literal>SessionFactory</literal>-scoped interceptor is registered with the <literal>Configuration</literal> object prior to building the <literal>SessionFactory</literal>. In this case, the supplied interceptor will be applied to all sessions opened from that <literal>SessionFactory</literal>; this is true unless a session is opened explicitly specifying the interceptor to use. <literal>SessionFactory</literal>-scoped interceptors must be thread safe, taking care to not store session-specific state since multiple sessions will use this interceptor (potentially) concurrently."
+msgstr ""
+
+#: index.docbook:56
+msgid "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
+msgstr ""
+
+#: index.docbook:61
+msgid "Event system"
+msgstr ""
+
+#: index.docbook:63
+msgid "If you have to react to particular events in your persistence layer, you may also use the Hibernate3 <emphasis>event</emphasis> architecture. The event system can be used in addition or as a replacement for interceptors."
+msgstr ""
+
+#: index.docbook:69
+msgid "Essentially all of the methods of the <literal>Session</literal> interface correlate to an event. You have a <literal>LoadEvent</literal>, a <literal>FlushEvent</literal>, etc (consult the XML configuration-file DTD or the <literal>org.hibernate.event</literal> package for the full list of defined event types). When a request is made of one of these methods, the Hibernate <literal>Session</literal> generates an appropriate event and passes it to the configured event listeners for that type. Out-of-the-box, these listeners implement the same processing in which those methods always resulted. However, you are free to implement a customization of one of the listener interfaces (i.e., the <literal>LoadEvent</literal> is processed by the registered implemenation of the <literal>LoadEventListener</literal> interface), in which case their implementation would be responsible for processing any <literal>load()</literal> requests made of the <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:84
+msgid "The listeners should be considered effectively singletons; meaning, they are shared between requests, and thus should not save any state as instance variables."
+msgstr ""
+
+#: index.docbook:89
+msgid "A custom listener should implement the appropriate interface for the event it wants to process and/or extend one of the convenience base classes (or even the default event listeners used by Hibernate out-of-the-box as these are declared non-final for this purpose). Custom listeners can either be registered programmatically through the <literal>Configuration</literal> object, or specified in the Hibernate configuration XML (declarative configuration through the properties file is not supported). Here's an example of a custom load event listener:"
+msgstr ""
+
+#: index.docbook:99
+msgid ""
+ "<![CDATA[public class MyLoadListener implements LoadEventListener {\n"
+ " // this is the single method defined by the LoadEventListener interface\n"
+ " public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)\n"
+ " throws HibernateException {\n"
+ " if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {\n"
+ " throw MySecurityException(\"Unauthorized access\");\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:101
+msgid "You also need a configuration entry telling Hibernate to use the listener in addition to the default listener:"
+msgstr ""
+
+#: index.docbook:106
+msgid ""
+ "<![CDATA[<hibernate-configuration>\n"
+ " <session-factory>\n"
+ " ...\n"
+ " <event type=\"load\">\n"
+ " <listener class=\"com.eg.MyLoadListener\"/>\n"
+ " <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>\n"
+ " </event>\n"
+ " </session-factory>\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+
+#: index.docbook:108
+msgid "Instead, you may register it programmatically:"
+msgstr ""
+
+#: index.docbook:112
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration();\n"
+ "LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };\n"
+ "cfg.EventListeners().setLoadEventListeners(stack);]]>"
+msgstr ""
+
+#: index.docbook:114
+msgid "Listeners registered declaratively cannot share instances. If the same class name is used in multiple <literal><listener/></literal> elements, each reference will result in a separate instance of that class. If you need the capability to share listener instances between listener types you must use the programmatic registration approach."
+msgstr ""
+
+#: index.docbook:122
+msgid "Why implement an interface and define the specific type during configuration? Well, a listener implementation could implement multiple event listener interfaces. Having the type additionally defined during registration makes it easier to turn custom listeners on or off during configuration."
+msgstr ""
+
+#: index.docbook:132
+msgid "Hibernate declarative security"
+msgstr ""
+
+#: index.docbook:133
+msgid "Usually, declarative security in Hibernate applications is managed in a session facade layer. Now, Hibernate3 allows certain actions to be permissioned via JACC, and authorized via JAAS. This is optional functionality built on top of the event architecture."
+msgstr ""
+
+#: index.docbook:139
+msgid "First, you must configure the appropriate event listeners, to enable the use of JAAS authorization."
+msgstr ""
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>\n"
+ "<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>\n"
+ "<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>\n"
+ "<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
+msgstr ""
+
+#: index.docbook:146
+msgid "Note that <literal><listener type=\"...\" class=\"...\"/></literal> is just a shorthand for <literal><event type=\"...\"><listener class=\"...\"/></event></literal> when there is exactly one listener for a particular event type."
+msgstr ""
+
+#: index.docbook:152
+msgid "Next, still in <literal>hibernate.cfg.xml</literal>, bind the permissions to roles:"
+msgstr ""
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>\n"
+ "<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
+msgstr ""
+
+#: index.docbook:158
+msgid "The role names are the roles understood by your JACC provider."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/example_mappings.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/example_mappings.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/example_mappings.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,653 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Example: Various Mappings"
+msgstr ""
+
+#: index.docbook:22
+msgid "This chapters shows off some more complex association mappings."
+msgstr ""
+
+#: index.docbook:27
+msgid "Employer/Employee"
+msgstr ""
+
+#: index.docbook:29
+msgid "The following model of the relationship between <literal>Employer</literal> and <literal>Employee</literal> uses an actual entity class (<literal>Employment</literal>) to represent the association. This is done because there might be more than one period of employment for the same two parties. Components are used to model monetary values and employee names."
+msgstr ""
+
+#: index.docbook:46
+msgid "Heres a possible mapping document:"
+msgstr ""
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " \n"
+ " <class name=\"Employer\" table=\"employers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employer_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employment\" table=\"employment_periods\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employment_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"startDate\" column=\"start_date\"/>\n"
+ " <property name=\"endDate\" column=\"end_date\"/>\n"
+ "\n"
+ " <component name=\"hourlyRate\" class=\"MonetaryAmount\">\n"
+ " <property name=\"amount\">\n"
+ " <column name=\"hourly_rate\" sql-type=\"NUMERIC(12, 2)\"/>\n"
+ " </property>\n"
+ " <property name=\"currency\" length=\"12\"/>\n"
+ " </component>\n"
+ "\n"
+ " <many-to-one name=\"employer\" column=\"employer_id\" not-null=\"true\"/>\n"
+ " <many-to-one name=\"employee\" column=\"employee_id\" not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employee\" table=\"employees\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employee_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"taxfileNumber\"/>\n"
+ " <component name=\"name\" class=\"Name\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </component>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:52
+msgid "And heres the table schema generated by <literal>SchemaExport</literal>."
+msgstr ""
+
+#: index.docbook:56
+msgid ""
+ "<![CDATA[create table employers (\n"
+ " id BIGINT not null, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employment_periods (\n"
+ " id BIGINT not null,\n"
+ " hourly_rate NUMERIC(12, 2),\n"
+ " currency VARCHAR(12), \n"
+ " employee_id BIGINT not null, \n"
+ " employer_id BIGINT not null, \n"
+ " end_date TIMESTAMP, \n"
+ " start_date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employees (\n"
+ " id BIGINT not null, \n"
+ " firstName VARCHAR(255), \n"
+ " initial CHAR(1), \n"
+ " lastName VARCHAR(255), \n"
+ " taxfileNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK0 foreign key (employer_id) references employers\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK1 foreign key (employee_id) references employees\n"
+ "create sequence employee_id_seq\n"
+ "create sequence employment_id_seq\n"
+ "create sequence employer_id_seq]]>"
+msgstr ""
+
+#: index.docbook:61
+msgid "Author/Work"
+msgstr ""
+
+#: index.docbook:63
+msgid "Consider the following model of the relationships between <literal>Work</literal>, <literal>Author</literal> and <literal>Person</literal>. We represent the relationship between <literal>Work</literal> and <literal>Author</literal> as a many-to-many association. We choose to represent the relationship between <literal>Author</literal> and <literal>Person</literal> as one-to-one association. Another possibility would be to have <literal>Author</literal> extend <literal>Person</literal>."
+msgstr ""
+
+#: index.docbook:81
+msgid "The following mapping document correctly represents these relationships:"
+msgstr ""
+
+#: index.docbook:85
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Work\" table=\"works\" discriminator-value=\"W\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"type\" type=\"character\"/>\n"
+ "\n"
+ " <property name=\"title\"/>\n"
+ " <set name=\"authors\" table=\"author_work\">\n"
+ " <key column name=\"work_id\"/>\n"
+ " <many-to-many class=\"Author\" column name=\"author_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"Book\" discriminator-value=\"B\">\n"
+ " <property name=\"text\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " <subclass name=\"Song\" discriminator-value=\"S\">\n"
+ " <property name=\"tempo\"/>\n"
+ " <property name=\"genre\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Author\" table=\"authors\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <!-- The Author must have the same identifier as the Person -->\n"
+ " <generator class=\"assigned\"/> \n"
+ " </id>\n"
+ "\n"
+ " <property name=\"alias\"/>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "\n"
+ " <set name=\"works\" table=\"author_work\" inverse=\"true\">\n"
+ " <key column=\"author_id\"/>\n"
+ " <many-to-many class=\"Work\" column=\"work_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Person\" table=\"persons\">\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:87
+msgid "There are four tables in this mapping. <literal>works</literal>, <literal>authors</literal> and <literal>persons</literal> hold work, author and person data respectively. <literal>author_work</literal> is an association table linking authors to works. Heres the table schema, as generated by <literal>SchemaExport</literal>."
+msgstr ""
+
+#: index.docbook:95
+msgid ""
+ "<![CDATA[create table works (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " tempo FLOAT, \n"
+ " genre VARCHAR(255), \n"
+ " text INTEGER, \n"
+ " title VARCHAR(255), \n"
+ " type CHAR(1) not null, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table author_work (\n"
+ " author_id BIGINT not null, \n"
+ " work_id BIGINT not null, \n"
+ " primary key (work_id, author_id)\n"
+ ")\n"
+ "\n"
+ "create table authors (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " alias VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table persons (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table authors \n"
+ " add constraint authorsFK0 foreign key (id) references persons\n"
+ "alter table author_work \n"
+ " add constraint author_workFK0 foreign key (author_id) references authors\n"
+ "alter table author_work\n"
+ " add constraint author_workFK1 foreign key (work_id) references works]]>"
+msgstr ""
+
+#: index.docbook:100
+msgid "Customer/Order/Product"
+msgstr ""
+
+#: index.docbook:102
+msgid "Now consider a model of the relationships between <literal>Customer</literal>, <literal>Order</literal> and <literal>LineItem</literal> and <literal>Product</literal>. There is a one-to-many association between <literal>Customer</literal> and <literal>Order</literal>, but how should we represent <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal>? I've chosen to map <literal>LineItem</literal> as an association class representing the many-to-many association between <literal>Order</literal> and <literal>Product</literal>. In Hibernate, this is called a composite element."
+msgstr ""
+
+#: index.docbook:122
+msgid "The mapping document:"
+msgstr ""
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Customer\" table=\"customers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <set name=\"orders\" inverse=\"true\">\n"
+ " <key column=\"customer_id\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Order\" table=\"orders\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\"/>\n"
+ " <many-to-one name=\"customer\" column=\"customer_id\"/>\n"
+ " <list name=\"lineItems\" table=\"line_items\">\n"
+ " <key column=\"order_id\"/>\n"
+ " <list-index column=\"line_number\"/>\n"
+ " <composite-element class=\"LineItem\">\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"product\" column=\"product_id\"/>\n"
+ " </composite-element>\n"
+ " </list>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Product\" table=\"products\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"serialNumber\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:128
+msgid "<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> and <literal>products</literal> hold customer, order, order line item and product data respectively. <literal>line_items</literal> also acts as an association table linking orders with products."
+msgstr ""
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[create table customers (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table orders (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " customer_id BIGINT, \n"
+ " date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table line_items (\n"
+ " line_number INTEGER not null, \n"
+ " order_id BIGINT not null, \n"
+ " product_id BIGINT, \n"
+ " quantity INTEGER, \n"
+ " primary key (order_id, line_number)\n"
+ ")\n"
+ "\n"
+ "create table products (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " serialNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table orders \n"
+ " add constraint ordersFK0 foreign key (customer_id) references customers\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK0 foreign key (product_id) references products\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK1 foreign key (order_id) references orders]]>"
+msgstr ""
+
+#: index.docbook:140
+msgid "Miscellaneous example mappings"
+msgstr ""
+
+#: index.docbook:142
+msgid "These examples are all taken from the Hibernate test suite. You will find many other useful example mappings there. Look in the <literal>test</literal> folder of the Hibernate distribution."
+msgstr ""
+
+#: index.docbook:148
+msgid "TODO: put words around this stuff"
+msgstr ""
+
+#: index.docbook:151
+msgid "\"Typed\" one-to-one association"
+msgstr ""
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"name\"/>\n"
+ " <one-to-one name=\"address\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'HOME'</formula>\n"
+ " </one-to-one>\n"
+ " <one-to-one name=\"mailingAddress\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'MAILING'</formula>\n"
+ " </one-to-one>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\" batch-size=\"2\" \n"
+ " check=\"addressType in ('MAILING', 'HOME', 'BUSINESS')\">\n"
+ " <composite-id>\n"
+ " <key-many-to-one name=\"person\" \n"
+ " column=\"personName\"/>\n"
+ " <key-property name=\"type\" \n"
+ " column=\"addressType\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"street\" type=\"text\"/>\n"
+ " <property name=\"state\"/>\n"
+ " <property name=\"zip\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:156
+msgid "Composite key example"
+msgstr ""
+
+#: index.docbook:157
+msgid ""
+ "<![CDATA[<class name=\"Customer\">\n"
+ "\n"
+ " <id name=\"customerId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\" not-null=\"true\" length=\"100\"/>\n"
+ " <property name=\"address\" not-null=\"true\" length=\"200\"/>\n"
+ "\n"
+ " <list name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key column=\"customerId\"/>\n"
+ " <index column=\"orderNumber\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </list>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Order\" table=\"CustomerOrder\" lazy=\"true\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ " <synchronize table=\"Product\"/>\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"Order$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"orderDate\" \n"
+ " type=\"calendar_date\"\n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <property name=\"total\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity*p.price) \n"
+ " from LineItem li, Product p \n"
+ " where li.productId = p.productId \n"
+ " and li.customerId = customerId \n"
+ " and li.orderNumber = orderNumber )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ " <many-to-one name=\"customer\"\n"
+ " column=\"customerId\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <bag name=\"lineItems\"\n"
+ " fetch=\"join\" \n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key>\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"LineItem\"/>\n"
+ " </bag>\n"
+ " \n"
+ "</class>\n"
+ " \n"
+ "<class name=\"LineItem\">\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"LineItem$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " <key-property name=\"productId\" length=\"10\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"quantity\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\">\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </many-to-one>\n"
+ " \n"
+ " <many-to-one name=\"product\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"\n"
+ " column=\"productId\"/>\n"
+ " \n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Product\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ "\n"
+ " <id name=\"productId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"description\" \n"
+ " not-null=\"true\" \n"
+ " length=\"200\"/>\n"
+ " <property name=\"price\" length=\"3\"/>\n"
+ " <property name=\"numberAvailable\"/>\n"
+ " \n"
+ " <property name=\"numberOrdered\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity) \n"
+ " from LineItem li \n"
+ " where li.productId = productId )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:161
+msgid "Many-to-many with shared composite key attribute"
+msgstr ""
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[<class name=\"User\" table=\"`User`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <set name=\"groups\" table=\"UserGroup\">\n"
+ " <key>\n"
+ " <column name=\"userName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"Group\">\n"
+ " <column name=\"groupName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ " \n"
+ "<class name=\"Group\" table=\"`Group`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"description\"/>\n"
+ " <set name=\"users\" table=\"UserGroup\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"groupName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"User\">\n"
+ " <column name=\"userName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:166
+msgid "Content based discrimination"
+msgstr ""
+
+#: index.docbook:167
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " discriminator-value=\"P\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"person_id\" \n"
+ " unsaved-value=\"0\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " \n"
+ " \n"
+ " <discriminator \n"
+ " type=\"character\">\n"
+ " <formula>\n"
+ " case \n"
+ " when title is not null then 'E' \n"
+ " when salesperson is not null then 'C' \n"
+ " else 'P' \n"
+ " end\n"
+ " </formula>\n"
+ " </discriminator>\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"\n"
+ " length=\"80\"/>\n"
+ " \n"
+ " <property name=\"sex\" \n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ " \n"
+ " <component name=\"address\">\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </component>\n"
+ " \n"
+ " <subclass name=\"Employee\" \n"
+ " discriminator-value=\"E\">\n"
+ " <property name=\"title\"\n"
+ " length=\"20\"/>\n"
+ " <property name=\"salary\"/>\n"
+ " <many-to-one name=\"manager\"/>\n"
+ " </subclass>\n"
+ " \n"
+ " <subclass name=\"Customer\" \n"
+ " discriminator-value=\"C\">\n"
+ " <property name=\"comments\"/>\n"
+ " <many-to-one name=\"salesperson\"/>\n"
+ " </subclass>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:171
+msgid "Associations on alternate keys"
+msgstr ""
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"name\" length=\"100\"/>\n"
+ " \n"
+ " <one-to-one name=\"address\" \n"
+ " property-ref=\"person\"\n"
+ " cascade=\"all\"\n"
+ " fetch=\"join\"/>\n"
+ " \n"
+ " <set name=\"accounts\" \n"
+ " inverse=\"true\">\n"
+ " <key column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " <one-to-many class=\"Account\"/>\n"
+ " </set>\n"
+ " \n"
+ " <property name=\"userId\" length=\"8\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"address\" length=\"300\"/>\n"
+ " <property name=\"zip\" length=\"5\"/>\n"
+ " <property name=\"country\" length=\"25\"/>\n"
+ " <many-to-one name=\"person\" unique=\"true\" not-null=\"true\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Account\">\n"
+ " <id name=\"accountId\" length=\"32\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " \n"
+ " <many-to-one name=\"user\"\n"
+ " column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " \n"
+ " <property name=\"type\" not-null=\"true\"/>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/example_parentchild.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/example_parentchild.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/example_parentchild.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,287 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Parent/Child"
+msgstr ""
+
+#: index.docbook:7
+msgid "One of the very first things that new users try to do with Hibernate is to model a parent / child type relationship. There are two different approaches to this. For various reasons the most convenient approach, especially for new users, is to model both <literal>Parent</literal> and <literal>Child</literal> as entity classes with a <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a <literal><composite-element></literal>.) Now, it turns out that default semantics of a one to many association (in Hibernate) are much less close to the usual semantics of a parent / child relationship than those of a composite element mapping. We will explain how to use a <emphasis>bidirectional one to many association with cascades</emphasis> to model a parent / child relationship efficiently and elegantly. It's not at all difficult!"
+msgstr ""
+
+#: index.docbook:21
+msgid "A note about collections"
+msgstr ""
+
+#: index.docbook:23
+msgid "Hibernate collections are considered to be a logical part of their owning entity; never of the contained entities. This is a crucial distinction! It has the following consequences:"
+msgstr ""
+
+#: index.docbook:30
+msgid "When we remove / add an object from / to a collection, the version number of the collection owner is incremented."
+msgstr ""
+
+#: index.docbook:36
+msgid "If an object that was removed from a collection is an instance of a value type (eg, a composite element), that object will cease to be persistent and its state will be completely removed from the database. Likewise, adding a value type instance to the collection will cause its state to be immediately persistent."
+msgstr ""
+
+#: index.docbook:44
+msgid "On the other hand, if an entity is removed from a collection (a one-to-many or many-to-many association), it will not be deleted, by default. This behaviour is completely consistent - a change to the internal state of another entity should not cause the associated entity to vanish! Likewise, adding an entity to a collection does not cause that entity to become persistent, by default."
+msgstr ""
+
+#: index.docbook:54
+msgid "Instead, the default behaviour is that adding an entity to a collection merely creates a link between the two entities, while removing it removes the link. This is very appropriate for all sorts of cases. Where it is not appropriate at all is the case of a parent / child relationship, where the life of the child is bound to the life cycle of the parent."
+msgstr ""
+
+#: index.docbook:64
+msgid "Bidirectional one-to-many"
+msgstr ""
+
+#: index.docbook:66
+msgid "Suppose we start with a simple <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>."
+msgstr ""
+
+#: index.docbook:71
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:73
+msgid "If we were to execute the following code"
+msgstr ""
+
+#: index.docbook:77
+msgid ""
+ "<![CDATA[Parent p = .....;\n"
+ "Child c = new Child();\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:79
+msgid "Hibernate would issue two SQL statements:"
+msgstr ""
+
+#: index.docbook:85
+msgid "an <literal>INSERT</literal> to create the record for <literal>c</literal>"
+msgstr ""
+
+#: index.docbook:88
+msgid "an <literal>UPDATE</literal> to create the link from <literal>p</literal> to <literal>c</literal>"
+msgstr ""
+
+#: index.docbook:95
+msgid "This is not only inefficient, but also violates any <literal>NOT NULL</literal> constraint on the <literal>parent_id</literal> column. We can fix the nullability constraint violation by specifying <literal>not-null=\"true\"</literal> in the collection mapping:"
+msgstr ""
+
+#: index.docbook:101
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:103
+msgid "However, this is not the recommended solution."
+msgstr ""
+
+#: index.docbook:106
+msgid "The underlying cause of this behaviour is that the link (the foreign key <literal>parent_id</literal>) from <literal>p</literal> to <literal>c</literal> is not considered part of the state of the <literal>Child</literal> object and is therefore not created in the <literal>INSERT</literal>. So the solution is to make the link part of the <literal>Child</literal> mapping."
+msgstr ""
+
+#: index.docbook:113
+msgid "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:115
+msgid "(We also need to add the <literal>parent</literal> property to the <literal>Child</literal> class.)"
+msgstr ""
+
+#: index.docbook:119
+msgid "Now that the <literal>Child</literal> entity is managing the state of the link, we tell the collection not to update the link. We use the <literal>inverse</literal> attribute."
+msgstr ""
+
+#: index.docbook:124
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:126
+msgid "The following code would be used to add a new <literal>Child</literal>"
+msgstr ""
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:132
+msgid "And now, only one SQL <literal>INSERT</literal> would be issued!"
+msgstr ""
+
+#: index.docbook:136
+msgid "To tighten things up a bit, we could create an <literal>addChild()</literal> method of <literal>Parent</literal>."
+msgstr ""
+
+#: index.docbook:141
+msgid ""
+ "<![CDATA[public void addChild(Child c) {\n"
+ " c.setParent(this);\n"
+ " children.add(c);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:143
+msgid "Now, the code to add a <literal>Child</literal> looks like"
+msgstr ""
+
+#: index.docbook:147
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:152
+msgid "Cascading life cycle"
+msgstr ""
+
+#: index.docbook:154
+msgid "The explicit call to <literal>save()</literal> is still annoying. We will address this by using cascades."
+msgstr ""
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:161
+msgid "This simplifies the code above to"
+msgstr ""
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:167
+msgid "Similarly, we don't need to iterate over the children when saving or deleting a <literal>Parent</literal>. The following removes <literal>p</literal> and all its children from the database."
+msgstr ""
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "session.delete(p);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:174
+msgid "However, this code"
+msgstr ""
+
+#: index.docbook:178
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "c.setParent(null);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:180
+msgid "will not remove <literal>c</literal> from the database; it will ony remove the link to <literal>p</literal> (and cause a <literal>NOT NULL</literal> constraint violation, in this case). You need to explicitly <literal>delete()</literal> the <literal>Child</literal>."
+msgstr ""
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "session.delete(c);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:188
+msgid "Now, in our case, a <literal>Child</literal> can't really exist without its parent. So if we remove a <literal>Child</literal> from the collection, we really do want it to be deleted. For this, we must use <literal>cascade=\"all-delete-orphan\"</literal>."
+msgstr ""
+
+#: index.docbook:194
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:196
+msgid "Note: even though the collection mapping specifies <literal>inverse=\"true\"</literal>, cascades are still processed by iterating the collection elements. So if you require that an object be saved, deleted or updated by cascade, you must add it to the collection. It is not enough to simply call <literal>setParent()</literal>."
+msgstr ""
+
+#: index.docbook:206
+msgid "Cascades and <literal>unsaved-value</literal>"
+msgstr ""
+
+#: index.docbook:208
+msgid "Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</literal>, made some changes in a UI action and wish to persist these changes in a new session by calling <literal>update()</literal>. The <literal>Parent</literal> will contain a collection of childen and, since cascading update is enabled, Hibernate needs to know which children are newly instantiated and which represent existing rows in the database. Lets assume that both <literal>Parent</literal> and <literal>Child</literal> have genenerated identifier properties of type <literal>Long</literal>. Hibernate will use the identifier and version/timestamp property value to determine which of the children are new. (See <xref linkend=\"objectstate-saveorupdate\"/>.) <emphasis>In Hibernate3, it is no longer necessary to specify an <literal>unsaved-value</literal> explicitly.</emphasis>"
+msgstr ""
+
+#: index.docbook:220
+msgid "The following code will update <literal>parent</literal> and <literal>child</literal> and insert <literal>newChild</literal>."
+msgstr ""
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[//parent and child were both loaded in a previous session\n"
+ "parent.addChild(child);\n"
+ "Child newChild = new Child();\n"
+ "parent.addChild(newChild);\n"
+ "session.update(parent);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:227
+msgid "Well, that's all very well for the case of a generated identifier, but what about assigned identifiers and composite identifiers? This is more difficult, since Hibernate can't use the identifier property to distinguish between a newly instantiated object (with an identifier assigned by the user) and an object loaded in a previous session. In this case, Hibernate will either use the timestamp or version property, or will actually query the second-level cache or, worst case, the database, to see if the row exists."
+msgstr ""
+
+#: index.docbook:260
+msgid "Conclusion"
+msgstr ""
+
+#: index.docbook:262
+msgid "There is quite a bit to digest here and it might look confusing first time around. However, in practice, it all works out very nicely. Most Hibernate applications use the parent / child pattern in many places."
+msgstr ""
+
+#: index.docbook:267
+msgid "We mentioned an alternative in the first paragraph. None of the above issues exist in the case of <literal><composite-element></literal> mappings, which have exactly the semantics of a parent / child relationship. Unfortunately, there are two big limitations to composite element classes: composite elements may not own collections, and they should not be the child of any entity other than the unique parent."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/example_weblog.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/example_weblog.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/example_weblog.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,450 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Weblog Application"
+msgstr ""
+
+#: index.docbook:8
+msgid "Persistent Classes"
+msgstr ""
+
+#: index.docbook:10
+msgid "The persistent classes represent a weblog, and an item posted in a weblog. They are to be modelled as a standard parent/child relationship, but we will use an ordered bag, instead of a set."
+msgstr ""
+
+#: index.docbook:16
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.List;\n"
+ "\n"
+ "public class Blog {\n"
+ " private Long _id;\n"
+ " private String _name;\n"
+ " private List _items;\n"
+ "\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public List getItems() {\n"
+ " return _items;\n"
+ " }\n"
+ " public String getName() {\n"
+ " return _name;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setItems(List list) {\n"
+ " _items = list;\n"
+ " }\n"
+ " public void setName(String string) {\n"
+ " _name = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:18
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.text.DateFormat;\n"
+ "import java.util.Calendar;\n"
+ "\n"
+ "public class BlogItem {\n"
+ " private Long _id;\n"
+ " private Calendar _datetime;\n"
+ " private String _text;\n"
+ " private String _title;\n"
+ " private Blog _blog;\n"
+ "\n"
+ " public Blog getBlog() {\n"
+ " return _blog;\n"
+ " }\n"
+ " public Calendar getDatetime() {\n"
+ " return _datetime;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public String getText() {\n"
+ " return _text;\n"
+ " }\n"
+ " public String getTitle() {\n"
+ " return _title;\n"
+ " }\n"
+ " public void setBlog(Blog blog) {\n"
+ " _blog = blog;\n"
+ " }\n"
+ " public void setDatetime(Calendar calendar) {\n"
+ " _datetime = calendar;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setText(String string) {\n"
+ " _text = string;\n"
+ " }\n"
+ " public void setTitle(String string) {\n"
+ " _title = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:23
+msgid "Hibernate Mappings"
+msgstr ""
+
+#: index.docbook:25
+msgid "The XML mappings should now be quite straightforward."
+msgstr ""
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"Blog\"\n"
+ " table=\"BLOGS\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ "\n"
+ " <bag\n"
+ " name=\"items\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"DATE_TIME\"\n"
+ " cascade=\"all\">\n"
+ "\n"
+ " <key column=\"BLOG_ID\"/>\n"
+ " <one-to-many class=\"BlogItem\"/>\n"
+ "\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:31
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"BlogItem\"\n"
+ " table=\"BLOG_ITEMS\"\n"
+ " dynamic-update=\"true\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ITEM_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"title\"\n"
+ " column=\"TITLE\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"text\"\n"
+ " column=\"TEXT\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"datetime\"\n"
+ " column=\"DATE_TIME\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <many-to-one\n"
+ " name=\"blog\"\n"
+ " column=\"BLOG_ID\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:36
+msgid "Hibernate Code"
+msgstr ""
+
+#: index.docbook:38
+msgid "The following class demonstrates some of the kinds of things we can do with these classes, using Hibernate."
+msgstr ""
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.ArrayList;\n"
+ "import java.util.Calendar;\n"
+ "import java.util.Iterator;\n"
+ "import java.util.List;\n"
+ "\n"
+ "import org.hibernate.HibernateException;\n"
+ "import org.hibernate.Query;\n"
+ "import org.hibernate.Session;\n"
+ "import org.hibernate.SessionFactory;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.cfg.Configuration;\n"
+ "import org.hibernate.tool.hbm2ddl.SchemaExport;\n"
+ "\n"
+ "public class BlogMain {\n"
+ " \n"
+ " private SessionFactory _sessions;\n"
+ " \n"
+ " public void configure() throws HibernateException {\n"
+ " _sessions = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class)\n"
+ " .buildSessionFactory();\n"
+ " }\n"
+ " \n"
+ " public void exportTables() throws HibernateException {\n"
+ " Configuration cfg = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class);\n"
+ " new SchemaExport(cfg).create(true, true);\n"
+ " }\n"
+ " \n"
+ " public Blog createBlog(String name) throws HibernateException {\n"
+ " \n"
+ " Blog blog = new Blog();\n"
+ " blog.setName(name);\n"
+ " blog.setItems( new ArrayList() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.persist(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Blog blog, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setBlog(blog);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " blog.getItems().add(item);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Long blogid, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Blog blog = (Blog) session.load(Blog.class, blogid);\n"
+ " item.setBlog(blog);\n"
+ " blog.getItems().add(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(BlogItem item, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " item.setText(text);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(Long itemid, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);\n"
+ " item.setText(text);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public List listAllBlogNamesAndItemCounts(int max)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"select blog.id, blog.name, count(blogItem) \" +\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join blog.items as blogItem \" +\n"
+ " \"group by blog.name, blog.id \" +\n"
+ " \"order by max(blogItem.datetime)\"\n"
+ " );\n"
+ " q.setMaxResults(max);\n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ " \n"
+ " public Blog getBlogAndAllItems(Long blogid)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " Blog blog = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join fetch blog.items \" +\n"
+ " \"where blog.id = :blogid\"\n"
+ " );\n"
+ " q.setParameter(\"blogid\", blogid);\n"
+ " blog = (Blog) q.uniqueResult();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public List listBlogsAndRecentItems() throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"inner join blog.items as blogItem \" +\n"
+ " \"where blogItem.datetime > :minDate\"\n"
+ " );\n"
+ "\n"
+ " Calendar cal = Calendar.getInstance();\n"
+ " cal.roll(Calendar.MONTH, false);\n"
+ " q.setCalendar(\"minDate\", cal);\n"
+ " \n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/filters.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/filters.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/filters.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,149 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Filtering data"
+msgstr ""
+
+#: index.docbook:7
+msgid "Hibernate3 provides an innovative new approach to handling data with \"visibility\" rules. A <emphasis>Hibernate filter</emphasis> is a global, named, parameterized filter that may be enabled or disabled for a particular Hibernate session."
+msgstr ""
+
+#: index.docbook:14
+msgid "Hibernate filters"
+msgstr ""
+
+#: index.docbook:16
+msgid "Hibernate3 adds the ability to pre-define filter criteria and attach those filters at both a class and a collection level. A filter criteria is the ability to define a restriction clause very similiar to the existing \"where\" attribute available on the class and various collection elements. Except these filter conditions can be parameterized. The application can then make the decision at runtime whether given filters should be enabled and what their parameter values should be. Filters can be used like database views, but parameterized inside the application."
+msgstr ""
+
+#: index.docbook:26
+msgid "In order to use filters, they must first be defined and then attached to the appropriate mapping elements. To define a filter, use the <literal><filter-def/></literal> element within a <literal><hibernate-mapping/></literal> element:"
+msgstr ""
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\">\n"
+ " <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
+ "</filter-def>]]>"
+msgstr ""
+
+#: index.docbook:34
+msgid "Then, this filter can be attached to a class:"
+msgstr ""
+
+#: index.docbook:38
+msgid ""
+ "<![CDATA[<class name=\"myClass\" ...>\n"
+ " ...\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:40
+msgid "or, to a collection:"
+msgstr ""
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<set ...>\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:46
+msgid "or, even to both (or multiples of each) at the same time."
+msgstr ""
+
+#: index.docbook:50
+msgid "The methods on <literal>Session</literal> are: <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, and <literal>disableFilter(String filterName)</literal>. By default, filters are <emphasis>not</emphasis> enabled for a given session; they must be explcitly enabled through use of the <literal>Session.enabledFilter()</literal> method, which returns an instance of the <literal>Filter</literal> interface. Using the simple filter defined above, this would look like:"
+msgstr ""
+
+#: index.docbook:59
+msgid "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
+msgstr ""
+
+#: index.docbook:61
+msgid "Note that methods on the org.hibernate.Filter interface do allow the method-chaining common to much of Hibernate."
+msgstr ""
+
+#: index.docbook:65
+msgid "A full example, using temporal data with an effective record date pattern:"
+msgstr ""
+
+#: index.docbook:69
+msgid ""
+ "<![CDATA[<filter-def name=\"effectiveDate\">\n"
+ " <filter-param name=\"asOfDate\" type=\"date\"/>\n"
+ "</filter-def>\n"
+ "\n"
+ "<class name=\"Employee\" ...>\n"
+ "...\n"
+ " <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>\n"
+ " <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>\n"
+ " <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>\n"
+ "...\n"
+ " <!--\n"
+ " Note that this assumes non-terminal records have an eff_end_dt set to\n"
+ " a max db date for simplicity-sake\n"
+ " -->\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Department\" ...>\n"
+ "...\n"
+ " <set name=\"employees\" lazy=\"true\">\n"
+ " <key column=\"dept_id\"/>\n"
+ " <one-to-many class=\"Employee\"/>\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:71
+msgid "Then, in order to ensure that you always get back currently effective records, simply enable the filter on the session prior to retrieving employee data:"
+msgstr ""
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[Session session = ...;\n"
+ "session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());\n"
+ "List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")\n"
+ " .setLong(\"targetSalary\", new Long(1000000))\n"
+ " .list();\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:78
+msgid "In the HQL above, even though we only explicitly mentioned a salary constraint on the results, because of the enabled filter the query will return only currently active employees who have a salary greater than a million dollars."
+msgstr ""
+
+#: index.docbook:84
+msgid "Note: if you plan on using filters with outer joining (either through HQL or load fetching) be careful of the direction of the condition expression. Its safest to set this up for left outer joining; in general, place the parameter first followed by the column name(s) after the operator."
+msgstr ""
+
+#: index.docbook:91
+msgid "After being defined a filter might be attached to multiple entities and/or collections each with its own condition. That can be tedious when the conditions are the same each time. Thus <literal><filter-def/></literal> allows defining a default condition, either as an attribute or CDATA:"
+msgstr ""
+
+#: index.docbook:98
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\" condition=\"abc > xyz\">...</filter-def>\n"
+ "<filter-def name=\"myOtherFilter\">abc=xyz</filter-def>]]>"
+msgstr ""
+
+#: index.docbook:100
+msgid "This default condition will then be used whenever the filter is attached to something without specifying a condition. Note that this means you can give a specific condition as part of the attachment of the filter which overrides the default condition in that particular case."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/inheritance_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/inheritance_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/inheritance_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,477 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Inheritance Mapping"
+msgstr ""
+
+#: index.docbook:8
+msgid "The Three Strategies"
+msgstr ""
+
+#: index.docbook:10
+msgid "Hibernate supports the three basic inheritance mapping strategies:"
+msgstr ""
+
+#: index.docbook:16
+msgid "table per class hierarchy"
+msgstr ""
+
+#: index.docbook:21
+msgid "<para>table per subclass</para>"
+msgstr ""
+
+#: index.docbook:26
+msgid "table per concrete class"
+msgstr ""
+
+#: index.docbook:32
+msgid "In addition, Hibernate supports a fourth, slightly different kind of polymorphism:"
+msgstr ""
+
+#: index.docbook:39
+msgid "implicit polymorphism"
+msgstr ""
+
+#: index.docbook:45
+msgid "It is possible to use different mapping strategies for different branches of the same inheritance hierarchy, and then make use of implicit polymorphism to achieve polymorphism across the whole hierarchy. However, Hibernate does not support mixing <literal><subclass></literal>, and <literal><joined-subclass></literal> and <literal><union-subclass></literal> mappings under the same root <literal><class></literal> element. It is possible to mix together the table per hierarchy and table per subclass strategies, under the the same <literal><class></literal> element, by combining the <literal><subclass></literal> and <literal><join></literal> elements (see below)."
+msgstr ""
+
+#: index.docbook:59
+msgid "It is possible to define <literal>subclass</literal>, <literal>union-subclass</literal>, and <literal>joined-subclass</literal> mappings in separate mapping documents, directly beneath <literal>hibernate-mapping</literal>. This allows you to extend a class hierachy just by adding a new mapping file. You must specify an <literal>extends</literal> attribute in the subclass mapping, naming a previously mapped superclass. Note: Previously this feature made the ordering of the mapping documents important. Since Hibernate3, the ordering of mapping files does not matter when using the extends keyword. The ordering inside a single mapping file still needs to be defined as superclasses before subclasses."
+msgstr ""
+
+#: index.docbook:70
+msgid ""
+ "<![CDATA[\n"
+ " <hibernate-mapping>\n"
+ " <subclass name=\"DomesticCat\" extends=\"Cat\" discriminator-value=\"D\">\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </subclass>\n"
+ " </hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:74
+msgid "Table per class hierarchy"
+msgstr ""
+
+#: index.docbook:76
+msgid "Suppose we have an interface <literal>Payment</literal>, with implementors <literal>CreditCardPayment</literal>, <literal>CashPayment</literal>, <literal>ChequePayment</literal>. The table per hierarchy mapping would look like:"
+msgstr ""
+
+#: index.docbook:83
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:85
+msgid "Exactly one table is required. There is one big limitation of this mapping strategy: columns declared by the subclasses, such as <literal>CCTYPE</literal>, may not have <literal>NOT NULL</literal> constraints."
+msgstr ""
+
+#: index.docbook:94
+msgid "Table per subclass"
+msgstr ""
+
+#: index.docbook:96
+msgid "A table per subclass mapping would look like:"
+msgstr ""
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <joined-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:102
+msgid "Four tables are required. The three subclass tables have primary key associations to the superclass table (so the relational model is actually a one-to-one association)."
+msgstr ""
+
+#: index.docbook:111
+msgid "Table per subclass, using a discriminator"
+msgstr ""
+
+#: index.docbook:113
+msgid "Note that Hibernate's implementation of table per subclass requires no discriminator column. Other object/relational mappers use a different implementation of table per subclass which requires a type discriminator column in the superclass table. The approach taken by Hibernate is much more difficult to implement but arguably more correct from a relational point of view. If you would like to use a discriminator column with the table per subclass strategy, you may combine the use of <literal><subclass></literal> and <literal><join></literal>, as follow:"
+msgstr ""
+
+#: index.docbook:125
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " <join table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " <join table=\"CHEQUE_PAYMENT\" fetch=\"select\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:127
+msgid "The optional <literal>fetch=\"select\"</literal> declaration tells Hibernate not to fetch the <literal>ChequePayment</literal> subclass data using an outer join when querying the superclass."
+msgstr ""
+
+#: index.docbook:136
+msgid "Mixing table per class hierarchy with table per subclass"
+msgstr ""
+
+#: index.docbook:138
+msgid "You may even mix the table per hierarchy and table per subclass strategies using this approach:"
+msgstr ""
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:145
+msgid "For any of these mapping strategies, a polymorphic association to the root <literal>Payment</literal> class is mapped using <literal><many-to-one></literal>."
+msgstr ""
+
+#: index.docbook:151
+msgid "<![CDATA[<many-to-one name=\"payment\" column=\"PAYMENT_ID\" class=\"Payment\"/>]]>"
+msgstr ""
+
+#: index.docbook:156
+msgid "Table per concrete class"
+msgstr ""
+
+#: index.docbook:158
+msgid "There are two ways we could go about mapping the table per concrete class strategy. The first is to use <literal><union-subclass></literal>."
+msgstr ""
+
+#: index.docbook:163
+msgid ""
+ "<![CDATA[<class name=\"Payment\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <union-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:165
+msgid "Three tables are involved for the subclasses. Each table defines columns for all properties of the class, including inherited properties."
+msgstr ""
+
+#: index.docbook:170
+msgid "The limitation of this approach is that if a property is mapped on the superclass, the column name must be the same on all subclass tables. (We might relax this in a future release of Hibernate.) The identity generator strategy is not allowed in union subclass inheritance, indeed the primary key seed has to be shared accross all unioned subclasses of a hierarchy."
+msgstr ""
+
+#: index.docbook:179
+msgid "If your superclass is abstract, map it with <literal>abstract=\"true\"</literal>. Of course, if it is not abstract, an additional table (defaults to <literal>PAYMENT</literal> in the example above) is needed to hold instances of the superclass."
+msgstr ""
+
+#: index.docbook:189
+msgid "Table per concrete class, using implicit polymorphism"
+msgstr ""
+
+#: index.docbook:191
+msgid "An alternative approach is to make use of implicit polymorphism:"
+msgstr ""
+
+#: index.docbook:195
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CASH_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CHEQUE_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:197
+msgid "Notice that nowhere do we mention the <literal>Payment</literal> interface explicitly. Also notice that properties of <literal>Payment</literal> are mapped in each of the subclasses. If you want to avoid duplication, consider using XML entities (e.g. <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal> in the <literal>DOCTYPE</literal> declartion and <literal>&allproperties;</literal> in the mapping)."
+msgstr ""
+
+#: index.docbook:207
+msgid "The disadvantage of this approach is that Hibernate does not generate SQL <literal>UNION</literal>s when performing polymorphic queries."
+msgstr ""
+
+#: index.docbook:212
+msgid "For this mapping strategy, a polymorphic association to <literal>Payment</literal> is usually mapped using <literal><any></literal>."
+msgstr ""
+
+#: index.docbook:217
+msgid ""
+ "<![CDATA[<any name=\"payment\" meta-type=\"string\" id-type=\"long\">\n"
+ " <meta-value value=\"CREDIT\" class=\"CreditCardPayment\"/>\n"
+ " <meta-value value=\"CASH\" class=\"CashPayment\"/>\n"
+ " <meta-value value=\"CHEQUE\" class=\"ChequePayment\"/>\n"
+ " <column name=\"PAYMENT_CLASS\"/>\n"
+ " <column name=\"PAYMENT_ID\"/>\n"
+ "</any>]]>"
+msgstr ""
+
+#: index.docbook:222
+msgid "Mixing implicit polymorphism with other inheritance mappings"
+msgstr ""
+
+#: index.docbook:224
+msgid "There is one further thing to notice about this mapping. Since the subclasses are each mapped in their own <literal><class></literal> element (and since <literal>Payment</literal> is just an interface), each of the subclasses could easily be part of another inheritance hierarchy! (And you can still use polymorphic queries against the <literal>Payment</literal> interface.)"
+msgstr ""
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"CREDIT_CARD\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"MasterCardPayment\" discriminator-value=\"MDC\"/>\n"
+ " <subclass name=\"VisaPayment\" discriminator-value=\"VISA\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"NonelectronicTransaction\" table=\"NONELECTRONIC_TXN\">\n"
+ " <id name=\"id\" type=\"long\" column=\"TXN_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " ...\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:234
+msgid "Once again, we don't mention <literal>Payment</literal> explicitly. If we execute a query against the <literal>Payment</literal> interface - for example, <literal>from Payment</literal> - Hibernate automatically returns instances of <literal>CreditCardPayment</literal> (and its subclasses, since they also implement <literal>Payment</literal>), <literal>CashPayment</literal> and <literal>ChequePayment</literal> but not instances of <literal>NonelectronicTransaction</literal>."
+msgstr ""
+
+#: index.docbook:249
+msgid "Limitations"
+msgstr ""
+
+#: index.docbook:251
+msgid "There are certain limitations to the \"implicit polymorphism\" approach to the table per concrete-class mapping strategy. There are somewhat less restrictive limitations to <literal><union-subclass></literal> mappings."
+msgstr ""
+
+#: index.docbook:258
+msgid "The following table shows the limitations of table per concrete-class mappings, and of implicit polymorphism, in Hibernate."
+msgstr ""
+
+#: index.docbook:264
+msgid "Features of inheritance mappings"
+msgstr ""
+
+#: index.docbook:276
+msgid "Inheritance strategy"
+msgstr ""
+
+#: index.docbook:277
+msgid "Polymorphic many-to-one"
+msgstr ""
+
+#: index.docbook:278
+msgid "Polymorphic one-to-one"
+msgstr ""
+
+#: index.docbook:279
+msgid "Polymorphic one-to-many"
+msgstr ""
+
+#: index.docbook:280
+msgid "Polymorphic many-to-many"
+msgstr ""
+
+#: index.docbook:281
+msgid "Polymorphic <literal>load()/get()</literal>"
+msgstr ""
+
+#: index.docbook:282
+msgid "Polymorphic queries"
+msgstr ""
+
+#: index.docbook:283
+msgid "Polymorphic joins"
+msgstr ""
+
+#: index.docbook:284
+msgid "Outer join fetching"
+msgstr ""
+
+#: index.docbook:289
+msgid "table per class-hierarchy"
+msgstr ""
+
+#: index.docbook:290, index.docbook:301, index.docbook:312
+msgid "<many-to-one>"
+msgstr ""
+
+#: index.docbook:291, index.docbook:302, index.docbook:313
+msgid "<one-to-one>"
+msgstr ""
+
+#: index.docbook:292, index.docbook:303
+msgid "<one-to-many>"
+msgstr ""
+
+#: index.docbook:293, index.docbook:304, index.docbook:315
+msgid "<many-to-many>"
+msgstr ""
+
+#: index.docbook:294, index.docbook:305, index.docbook:316
+msgid "s.get(Payment.class, id)"
+msgstr ""
+
+#: index.docbook:295, index.docbook:306, index.docbook:317, index.docbook:328
+msgid "from Payment p"
+msgstr ""
+
+#: index.docbook:296, index.docbook:307, index.docbook:318
+msgid "from Order o join o.payment p"
+msgstr ""
+
+#: index.docbook:297, index.docbook:308, index.docbook:319
+msgid "supported"
+msgstr ""
+
+#: index.docbook:300
+msgid "<entry>table per subclass</entry>"
+msgstr ""
+
+#: index.docbook:311
+msgid "table per concrete-class (union-subclass)"
+msgstr ""
+
+#: index.docbook:314
+msgid "<literal><one-to-many></literal> (for <literal>inverse=\"true\"</literal> only)"
+msgstr ""
+
+#: index.docbook:322
+msgid "table per concrete class (implicit polymorphism)"
+msgstr ""
+
+#: index.docbook:323
+msgid "<any>"
+msgstr ""
+
+#: index.docbook:324, index.docbook:325, index.docbook:329, index.docbook:330
+msgid "not supported"
+msgstr ""
+
+#: index.docbook:326
+msgid "<many-to-any>"
+msgstr ""
+
+#: index.docbook:327
+msgid "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/performance.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/performance.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/performance.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1068 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Improving performance"
+msgstr ""
+
+#: index.docbook:8
+msgid "Fetching strategies"
+msgstr ""
+
+#: index.docbook:10
+msgid "A <emphasis>fetching strategy</emphasis> is the strategy Hibernate will use for retrieving associated objects if the application needs to navigate the association. Fetch strategies may be declared in the O/R mapping metadata, or over-ridden by a particular HQL or <literal>Criteria</literal> query."
+msgstr ""
+
+#: index.docbook:17
+msgid "Hibernate3 defines the following fetching strategies:"
+msgstr ""
+
+#: index.docbook:23
+msgid "<emphasis>Join fetching</emphasis> - Hibernate retrieves the associated instance or collection in the same <literal>SELECT</literal>, using an <literal>OUTER JOIN</literal>."
+msgstr ""
+
+#: index.docbook:30
+msgid "<emphasis>Select fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated entity or collection. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr ""
+
+#: index.docbook:39
+msgid "<emphasis>Subselect fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated collections for all entities retrieved in a previous query or fetch. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr ""
+
+#: index.docbook:48
+msgid "<emphasis>Batch fetching</emphasis> - an optimization strategy for select fetching - Hibernate retrieves a batch of entity instances or collections in a single <literal>SELECT</literal>, by specifying a list of primary keys or foreign keys."
+msgstr ""
+
+#: index.docbook:57
+msgid "Hibernate also distinguishes between:"
+msgstr ""
+
+#: index.docbook:63
+msgid "<emphasis>Immediate fetching</emphasis> - an association, collection or attribute is fetched immediately, when the owner is loaded."
+msgstr ""
+
+#: index.docbook:69
+msgid "<emphasis>Lazy collection fetching</emphasis> - a collection is fetched when the application invokes an operation upon that collection. (This is the default for collections.)"
+msgstr ""
+
+#: index.docbook:76
+msgid "<emphasis>\"Extra-lazy\" collection fetching</emphasis> - individual elements of the collection are accessed from the database as needed. Hibernate tries not to fetch the whole collection into memory unless absolutely needed (suitable for very large collections)"
+msgstr ""
+
+#: index.docbook:84
+msgid "<emphasis>Proxy fetching</emphasis> - a single-valued association is fetched when a method other than the identifier getter is invoked upon the associated object."
+msgstr ""
+
+#: index.docbook:91
+msgid "<emphasis>\"No-proxy\" fetching</emphasis> - a single-valued association is fetched when the instance variable is accessed. Compared to proxy fetching, this approach is less lazy (the association is fetched even when only the identifier is accessed) but more transparent, since no proxy is visible to the application. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr ""
+
+#: index.docbook:101
+msgid "<emphasis>Lazy attribute fetching</emphasis> - an attribute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr ""
+
+#: index.docbook:110
+msgid "We have two orthogonal notions here: <emphasis>when</emphasis> is the association fetched, and <emphasis>how</emphasis> is it fetched (what SQL is used). Don't confuse them! We use <literal>fetch</literal> to tune performance. We may use <literal>lazy</literal> to define a contract for what data is always available in any detached instance of a particular class."
+msgstr ""
+
+#: index.docbook:119
+msgid "Working with lazy associations"
+msgstr ""
+
+#: index.docbook:121
+msgid "By default, Hibernate3 uses lazy select fetching for collections and lazy proxy fetching for single-valued associations. These defaults make sense for almost all associations in almost all applications."
+msgstr ""
+
+#: index.docbook:127
+msgid "<emphasis>Note:</emphasis> if you set <literal>hibernate.default_batch_fetch_size</literal>, Hibernate will use the batch fetch optimization for lazy fetching (this optimization may also be enabled at a more granular level)."
+msgstr ""
+
+#: index.docbook:134
+msgid "However, lazy fetching poses one problem that you must be aware of. Access to a lazy association outside of the context of an open Hibernate session will result in an exception. For example:"
+msgstr ""
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[s = sessions.openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ " \n"
+ "User u = (User) s.createQuery(\"from User u where u.name=:userName\")\n"
+ " .setString(\"userName\", userName).uniqueResult();\n"
+ "Map permissions = u.getPermissions();\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();\n"
+ "\n"
+ "Integer accessLevel = (Integer) permissions.get(\"accounts\"); // Error!]]>"
+msgstr ""
+
+#: index.docbook:142
+msgid "Since the permissions collection was not initialized when the <literal>Session</literal> was closed, the collection will not be able to load its state. <emphasis>Hibernate does not support lazy initialization for detached objects</emphasis>. The fix is to move the code that reads from the collection to just before the transaction is committed."
+msgstr ""
+
+#: index.docbook:150
+msgid "Alternatively, we could use a non-lazy collection or association, by specifying <literal>lazy=\"false\"</literal> for the association mapping. However, it is intended that lazy initialization be used for almost all collections and associations. If you define too many non-lazy associations in your object model, Hibernate will end up needing to fetch the entire database into memory in every transaction!"
+msgstr ""
+
+#: index.docbook:159
+msgid "On the other hand, we often want to choose join fetching (which is non-lazy by nature) instead of select fetching in a particular transaction. We'll now see how to customize the fetching strategy. In Hibernate3, the mechanisms for choosing a fetch strategy are identical for single-valued associations and collections."
+msgstr ""
+
+#: index.docbook:170
+msgid "Tuning fetch strategies"
+msgstr ""
+
+#: index.docbook:172
+msgid "Select fetching (the default) is extremely vulnerable to N+1 selects problems, so we might want to enable join fetching in the mapping document:"
+msgstr ""
+
+#: index.docbook:177
+msgid ""
+ "<![CDATA[<set name=\"permissions\" \n"
+ " fetch=\"join\">\n"
+ " <key column=\"userId\"/>\n"
+ " <one-to-many class=\"Permission\"/>\n"
+ "</set]]>"
+msgstr ""
+
+#: index.docbook:179
+msgid "<![CDATA[<many-to-one name=\"mother\" class=\"Cat\" fetch=\"join\"/>]]>"
+msgstr ""
+
+#: index.docbook:181
+msgid "The <literal>fetch</literal> strategy defined in the mapping document affects:"
+msgstr ""
+
+#: index.docbook:187
+msgid "retrieval via <literal>get()</literal> or <literal>load()</literal>"
+msgstr ""
+
+#: index.docbook:192
+msgid "retrieval that happens implicitly when an association is navigated"
+msgstr ""
+
+#: index.docbook:197
+msgid "<literal>Criteria</literal> queries"
+msgstr ""
+
+#: index.docbook:202
+msgid "HQL queries if <literal>subselect</literal> fetching is used"
+msgstr ""
+
+#: index.docbook:208
+msgid "No matter what fetching strategy you use, the defined non-lazy graph is guaranteed to be loaded into memory. Note that this might result in several immediate selects being used to execute a particular HQL query."
+msgstr ""
+
+#: index.docbook:214
+msgid "Usually, we don't use the mapping document to customize fetching. Instead, we keep the default behavior, and override it for a particular transaction, using <literal>left join fetch</literal> in HQL. This tells Hibernate to fetch the association eagerly in the first select, using an outer join. In the <literal>Criteria</literal> query API, you would use <literal>setFetchMode(FetchMode.JOIN)</literal>."
+msgstr ""
+
+#: index.docbook:223
+msgid "If you ever feel like you wish you could change the fetching strategy used by <literal>get()</literal> or <literal>load()</literal>, simply use a <literal>Criteria</literal> query, for example:"
+msgstr ""
+
+#: index.docbook:229
+msgid ""
+ "<![CDATA[User user = (User) session.createCriteria(User.class)\n"
+ " .setFetchMode(\"permissions\", FetchMode.JOIN)\n"
+ " .add( Restrictions.idEq(userId) )\n"
+ " .uniqueResult();]]>"
+msgstr ""
+
+#: index.docbook:231
+msgid "(This is Hibernate's equivalent of what some ORM solutions call a \"fetch plan\".)"
+msgstr ""
+
+#: index.docbook:235
+msgid "A completely different way to avoid problems with N+1 selects is to use the second-level cache."
+msgstr ""
+
+#: index.docbook:243
+msgid "Single-ended association proxies"
+msgstr ""
+
+#: index.docbook:245
+msgid "Lazy fetching for collections is implemented using Hibernate's own implementation of persistent collections. However, a different mechanism is needed for lazy behavior in single-ended associations. The target entity of the association must be proxied. Hibernate implements lazy initializing proxies for persistent objects using runtime bytecode enhancement (via the excellent CGLIB library)."
+msgstr ""
+
+#: index.docbook:253
+msgid "By default, Hibernate3 generates proxies (at startup) for all persistent classes and uses them to enable lazy fetching of <literal>many-to-one</literal> and <literal>one-to-one</literal> associations."
+msgstr ""
+
+#: index.docbook:259
+msgid "The mapping file may declare an interface to use as the proxy interface for that class, with the <literal>proxy</literal> attribute. By default, Hibernate uses a subclass of the class. <emphasis>Note that the proxied class must implement a default constructor with at least package visibility. We recommend this constructor for all persistent classes!</emphasis>"
+msgstr ""
+
+#: index.docbook:266
+msgid "There are some gotchas to be aware of when extending this approach to polymorphic classes, eg."
+msgstr ""
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<class name=\"Cat\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:273
+msgid "Firstly, instances of <literal>Cat</literal> will never be castable to <literal>DomesticCat</literal>, even if the underlying instance is an instance of <literal>DomesticCat</literal>:"
+msgstr ""
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)\n"
+ "if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy\n"
+ " DomesticCat dc = (DomesticCat) cat; // Error!\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:281
+msgid "Secondly, it is possible to break proxy <literal>==</literal>."
+msgstr ""
+
+#: index.docbook:285
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy\n"
+ "DomesticCat dc = \n"
+ " (DomesticCat) session.load(DomesticCat.class, id); // acquire new DomesticCat proxy!\n"
+ "System.out.println(cat==dc); // false]]>"
+msgstr ""
+
+#: index.docbook:287
+msgid "However, the situation is not quite as bad as it looks. Even though we now have two references to different proxy objects, the underlying instance will still be the same object:"
+msgstr ""
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy\n"
+ "System.out.println( dc.getWeight() ); // 11.0]]>"
+msgstr ""
+
+#: index.docbook:294
+msgid "Third, you may not use a CGLIB proxy for a <literal>final</literal> class or a class with any <literal>final</literal> methods."
+msgstr ""
+
+#: index.docbook:299
+msgid "Finally, if your persistent object acquires any resources upon instantiation (eg. in initializers or default constructor), then those resources will also be acquired by the proxy. The proxy class is an actual subclass of the persistent class."
+msgstr ""
+
+#: index.docbook:305
+msgid "These problems are all due to fundamental limitations in Java's single inheritance model. If you wish to avoid these problems your persistent classes must each implement an interface that declares its business methods. You should specify these interfaces in the mapping file. eg."
+msgstr ""
+
+#: index.docbook:311
+msgid ""
+ "<![CDATA[<class name=\"CatImpl\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCatImpl\" proxy=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:313
+msgid "where <literal>CatImpl</literal> implements the interface <literal>Cat</literal> and <literal>DomesticCatImpl</literal> implements the interface <literal>DomesticCat</literal>. Then proxies for instances of <literal>Cat</literal> and <literal>DomesticCat</literal> may be returned by <literal>load()</literal> or <literal>iterate()</literal>. (Note that <literal>list()</literal> does not usually return proxies.)"
+msgstr ""
+
+#: index.docbook:321
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);\n"
+ "Iterator iter = session.createQuery(\"from CatImpl as cat where cat.name='fritz'\").iterate();\n"
+ "Cat fritz = (Cat) iter.next();]]>"
+msgstr ""
+
+#: index.docbook:323
+msgid "Relationships are also lazily initialized. This means you must declare any properties to be of type <literal>Cat</literal>, not <literal>CatImpl</literal>."
+msgstr ""
+
+#: index.docbook:328
+msgid "Certain operations do <emphasis>not</emphasis> require proxy initialization"
+msgstr ""
+
+#: index.docbook:334
+msgid "<literal>equals()</literal>, if the persistent class does not override <literal>equals()</literal>"
+msgstr ""
+
+#: index.docbook:340
+msgid "<literal>hashCode()</literal>, if the persistent class does not override <literal>hashCode()</literal>"
+msgstr ""
+
+#: index.docbook:346
+msgid "The identifier getter method"
+msgstr ""
+
+#: index.docbook:352
+msgid "Hibernate will detect persistent classes that override <literal>equals()</literal> or <literal>hashCode()</literal>."
+msgstr ""
+
+#: index.docbook:357
+msgid "By choosing <literal>lazy=\"no-proxy\"</literal> instead of the default <literal>lazy=\"proxy\"</literal>, we can avoid the problems associated with typecasting. However, we will require buildtime bytecode instrumentation, and all operations will result in immediate proxy initialization."
+msgstr ""
+
+#: index.docbook:367
+msgid "Initializing collections and proxies"
+msgstr ""
+
+#: index.docbook:369
+msgid "A <literal>LazyInitializationException</literal> will be thrown by Hibernate if an uninitialized collection or proxy is accessed outside of the scope of the <literal>Session</literal>, ie. when the entity owning the collection or having the reference to the proxy is in the detached state."
+msgstr ""
+
+#: index.docbook:375
+msgid "Sometimes we need to ensure that a proxy or collection is initialized before closing the <literal>Session</literal>. Of course, we can alway force initialization by calling <literal>cat.getSex()</literal> or <literal>cat.getKittens().size()</literal>, for example. But that is confusing to readers of the code and is not convenient for generic code."
+msgstr ""
+
+#: index.docbook:382
+msgid "The static methods <literal>Hibernate.initialize()</literal> and <literal>Hibernate.isInitialized()</literal> provide the application with a convenient way of working with lazily initialized collections or proxies. <literal>Hibernate.initialize(cat)</literal> will force the initialization of a proxy, <literal>cat</literal>, as long as its <literal>Session</literal> is still open. <literal>Hibernate.initialize( cat.getKittens() )</literal> has a similar effect for the collection of kittens."
+msgstr ""
+
+#: index.docbook:391
+msgid "Another option is to keep the <literal>Session</literal> open until all needed collections and proxies have been loaded. In some application architectures, particularly where the code that accesses data using Hibernate, and the code that uses it are in different application layers or different physical processes, it can be a problem to ensure that the <literal>Session</literal> is open when a collection is initialized. There are two basic ways to deal with this issue:"
+msgstr ""
+
+#: index.docbook:402
+msgid "In a web-based application, a servlet filter can be used to close the <literal>Session</literal> only at the very end of a user request, once the rendering of the view is complete (the <emphasis>Open Session in View</emphasis> pattern). Of course, this places heavy demands on the correctness of the exception handling of your application infrastructure. It is vitally important that the <literal>Session</literal> is closed and the transaction ended before returning to the user, even when an exception occurs during rendering of the view. See the Hibernate Wiki for examples of this \"Open Session in View\" pattern."
+msgstr ""
+
+#: index.docbook:415
+msgid "In an application with a separate business tier, the business logic must \"prepare\" all collections that will be needed by the web tier before returning. This means that the business tier should load all the data and return all the data already initialized to the presentation/web tier that is required for a particular use case. Usually, the application calls <literal>Hibernate.initialize()</literal> for each collection that will be needed in the web tier (this call must occur before the session is closed) or retrieves the collection eagerly using a Hibernate query with a <literal>FETCH</literal> clause or a <literal>FetchMode.JOIN</literal> in <literal>Criteria</literal>. This is usually easier if you adopt the <emphasis>Command</emphasis> pattern instead of a <emphasis>Session Facade</emphasis>."
+msgstr ""
+
+#: index.docbook:430
+msgid "You may also attach a previously loaded object to a new <literal>Session</literal> with <literal>merge()</literal> or <literal>lock()</literal> before accessing uninitialized collections (or other proxies). No, Hibernate does not, and certainly <emphasis>should</emphasis> not do this automatically, since it would introduce ad hoc transaction semantics!"
+msgstr ""
+
+#: index.docbook:440
+msgid "Sometimes you don't want to initialize a large collection, but still need some information about it (like its size) or a subset of the data."
+msgstr ""
+
+#: index.docbook:445
+msgid "You can use a collection filter to get the size of a collection without initializing it:"
+msgstr ""
+
+#: index.docbook:449
+msgid "<![CDATA[( (Integer) s.createFilter( collection, \"select count(*)\" ).list().get(0) ).intValue()]]>"
+msgstr ""
+
+#: index.docbook:451
+msgid "The <literal>createFilter()</literal> method is also used to efficiently retrieve subsets of a collection without needing to initialize the whole collection:"
+msgstr ""
+
+#: index.docbook:456
+msgid "<![CDATA[s.createFilter( lazyCollection, \"\").setFirstResult(0).setMaxResults(10).list();]]>"
+msgstr ""
+
+#: index.docbook:461
+msgid "Using batch fetching"
+msgstr ""
+
+#: index.docbook:463
+msgid "Hibernate can make efficient use of batch fetching, that is, Hibernate can load several uninitialized proxies if one proxy is accessed (or collections. Batch fetching is an optimization of the lazy select fetching strategy. There are two ways you can tune batch fetching: on the class and the collection level."
+msgstr ""
+
+#: index.docbook:469
+msgid "Batch fetching for classes/entities is easier to understand. Imagine you have the following situation at runtime: You have 25 <literal>Cat</literal> instances loaded in a <literal>Session</literal>, each <literal>Cat</literal> has a reference to its <literal>owner</literal>, a <literal>Person</literal>. The <literal>Person</literal> class is mapped with a proxy, <literal>lazy=\"true\"</literal>. If you now iterate through all cats and call <literal>getOwner()</literal> on each, Hibernate will by default execute 25 <literal>SELECT</literal> statements, to retrieve the proxied owners. You can tune this behavior by specifying a <literal>batch-size</literal> in the mapping of <literal>Person</literal>:"
+msgstr ""
+
+#: index.docbook:479
+msgid "<![CDATA[<class name=\"Person\" batch-size=\"10\">...</class>]]>"
+msgstr ""
+
+#: index.docbook:481
+msgid "Hibernate will now execute only three queries, the pattern is 10, 10, 5."
+msgstr ""
+
+#: index.docbook:485
+msgid "You may also enable batch fetching of collections. For example, if each <literal>Person</literal> has a lazy collection of <literal>Cat</literal>s, and 10 persons are currently loaded in the <literal>Sesssion</literal>, iterating through all persons will generate 10 <literal>SELECT</literal>s, one for every call to <literal>getCats()</literal>. If you enable batch fetching for the <literal>cats</literal> collection in the mapping of <literal>Person</literal>, Hibernate can pre-fetch collections:"
+msgstr ""
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <set name=\"cats\" batch-size=\"3\">\n"
+ " ...\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:496
+msgid "With a <literal>batch-size</literal> of 3, Hibernate will load 3, 3, 3, 1 collections in four <literal>SELECT</literal>s. Again, the value of the attribute depends on the expected number of uninitialized collections in a particular <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:502
+msgid "Batch fetching of collections is particularly useful if you have a nested tree of items, ie. the typical bill-of-materials pattern. (Although a <emphasis>nested set</emphasis> or a <emphasis>materialized path</emphasis> might be a better option for read-mostly trees.)"
+msgstr ""
+
+#: index.docbook:511
+msgid "Using subselect fetching"
+msgstr ""
+
+#: index.docbook:513
+msgid "If one lazy collection or single-valued proxy has to be fetched, Hibernate loads all of them, re-running the original query in a subselect. This works in the same way as batch-fetching, without the piecemeal loading."
+msgstr ""
+
+#: index.docbook:524
+msgid "Using lazy property fetching"
+msgstr ""
+
+#: index.docbook:526
+msgid "Hibernate3 supports the lazy fetching of individual properties. This optimization technique is also known as <emphasis>fetch groups</emphasis>. Please note that this is mostly a marketing feature, as in practice, optimizing row reads is much more important than optimization of column reads. However, only loading some properties of a class might be useful in extreme cases, when legacy tables have hundreds of columns and the data model can not be improved."
+msgstr ""
+
+#: index.docbook:535
+msgid "To enable lazy property loading, set the <literal>lazy</literal> attribute on your particular property mappings:"
+msgstr ""
+
+#: index.docbook:540
+msgid ""
+ "<![CDATA[<class name=\"Document\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\" length=\"50\"/>\n"
+ " <property name=\"summary\" not-null=\"true\" length=\"200\" lazy=\"true\"/>\n"
+ " <property name=\"text\" not-null=\"true\" length=\"2000\" lazy=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:542
+msgid "Lazy property loading requires buildtime bytecode instrumentation! If your persistent classes are not enhanced, Hibernate will silently ignore lazy property settings and fall back to immediate fetching."
+msgstr ""
+
+#: index.docbook:548
+msgid "For bytecode instrumentation, use the following Ant task:"
+msgstr ""
+
+#: index.docbook:552
+msgid ""
+ "<![CDATA[<target name=\"instrument\" depends=\"compile\">\n"
+ " <taskdef name=\"instrument\" classname=\"org.hibernate.tool.instrument.InstrumentTask\">\n"
+ " <classpath path=\"${jar.path}\"/>\n"
+ " <classpath path=\"${classes.dir}\"/>\n"
+ " <classpath refid=\"lib.class.path\"/>\n"
+ " </taskdef>\n"
+ "\n"
+ " <instrument verbose=\"true\">\n"
+ " <fileset dir=\"${testclasses.dir}/org/hibernate/auction/model\">\n"
+ " <include name=\"*.class\"/>\n"
+ " </fileset>\n"
+ " </instrument>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:554
+msgid "A different (better?) way to avoid unnecessary column reads, at least for read-only transactions is to use the projection features of HQL or Criteria queries. This avoids the need for buildtime bytecode processing and is certainly a prefered solution."
+msgstr ""
+
+#: index.docbook:561
+msgid "You may force the usual eager fetching of properties using <literal>fetch all properties</literal> in HQL."
+msgstr ""
+
+#: index.docbook:571
+msgid "The Second Level Cache"
+msgstr ""
+
+#: index.docbook:573
+msgid "A Hibernate <literal>Session</literal> is a transaction-level cache of persistent data. It is possible to configure a cluster or JVM-level (<literal>SessionFactory</literal>-level) cache on a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be careful. Caches are never aware of changes made to the persistent store by another application (though they may be configured to regularly expire cached data)."
+msgstr ""
+
+#: index.docbook:581
+msgid "You have the option to tell Hibernate which caching implementation to use by specifying the name of a class that implements <literal>org.hibernate.cache.CacheProvider</literal> using the property <literal>hibernate.cache.provider_class</literal>. 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."
+msgstr ""
+
+#: index.docbook:592
+msgid "Cache Providers"
+msgstr ""
+
+#: index.docbook:601, index.docbook:774
+msgid "Cache"
+msgstr ""
+
+#: index.docbook:602
+msgid "Provider class"
+msgstr ""
+
+#: index.docbook:603
+msgid "Type"
+msgstr ""
+
+#: index.docbook:604
+msgid "Cluster Safe"
+msgstr ""
+
+#: index.docbook:605
+msgid "Query Cache Supported"
+msgstr ""
+
+#: index.docbook:610, index.docbook:783
+msgid "Hashtable (not intended for production use)"
+msgstr ""
+
+#: index.docbook:611
+msgid "org.hibernate.cache.HashtableCacheProvider"
+msgstr ""
+
+#: index.docbook:612
+msgid "memory"
+msgstr ""
+
+#: index.docbook:614, index.docbook:621, index.docbook:628, index.docbook:784, index.docbook:785, index.docbook:786, index.docbook:791, index.docbook:792, index.docbook:793, index.docbook:798, index.docbook:799, index.docbook:800, index.docbook:805, index.docbook:806, index.docbook:812, index.docbook:815
+msgid "<entry>yes</entry>"
+msgstr ""
+
+#: index.docbook:617, index.docbook:790
+msgid "EHCache"
+msgstr ""
+
+#: index.docbook:618
+msgid "org.hibernate.cache.EhCacheProvider"
+msgstr ""
+
+#: index.docbook:619, index.docbook:626
+msgid "memory, disk"
+msgstr ""
+
+#: index.docbook:624, index.docbook:797
+msgid "OSCache"
+msgstr ""
+
+#: index.docbook:625
+msgid "org.hibernate.cache.OSCacheProvider"
+msgstr ""
+
+#: index.docbook:631, index.docbook:804
+msgid "SwarmCache"
+msgstr ""
+
+#: index.docbook:632
+msgid "org.hibernate.cache.SwarmCacheProvider"
+msgstr ""
+
+#: index.docbook:633
+msgid "clustered (ip multicast)"
+msgstr ""
+
+#: index.docbook:634
+msgid "yes (clustered invalidation)"
+msgstr ""
+
+#: index.docbook:638, index.docbook:811
+msgid "JBoss TreeCache"
+msgstr ""
+
+#: index.docbook:639
+msgid "org.hibernate.cache.TreeCacheProvider"
+msgstr ""
+
+#: index.docbook:640
+msgid "clustered (ip multicast), transactional"
+msgstr ""
+
+#: index.docbook:641
+msgid "yes (replication)"
+msgstr ""
+
+#: index.docbook:642
+msgid "yes (clock sync req.)"
+msgstr ""
+
+#: index.docbook:649
+msgid "Cache mappings"
+msgstr ""
+
+#: index.docbook:651
+msgid "The <literal><cache></literal> element of a class or collection mapping has the following form:"
+msgstr ""
+
+#: index.docbook:662
+msgid ""
+ "<![CDATA[<cache \n"
+ " usage=\"transactional|read-write|nonstrict-read-write|read-only\"\n"
+ " region=\"RegionName\"\n"
+ " include=\"all|non-lazy\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:665
+msgid "<literal>usage</literal> (required) specifies the caching strategy: <literal>transactional</literal>, <literal>read-write</literal>, <literal>nonstrict-read-write</literal> or <literal>read-only</literal>"
+msgstr ""
+
+#: index.docbook:674
+msgid "<literal>region</literal> (optional, defaults to the class or collection role name) specifies the name of the second level cache region"
+msgstr ""
+
+#: index.docbook:681
+msgid "<literal>include</literal> (optional, defaults to <literal>all</literal>) <literal>non-lazy</literal> specifies that properties of the entity mapped with <literal>lazy=\"true\"</literal> may not be cached when attribute-level lazy fetching is enabled"
+msgstr ""
+
+#: index.docbook:691
+msgid "Alternatively (preferrably?), you may specify <literal><class-cache></literal> and <literal><collection-cache></literal> elements in <literal>hibernate.cfg.xml</literal>."
+msgstr ""
+
+#: index.docbook:696
+msgid "The <literal>usage</literal> attribute specifies a <emphasis>cache concurrency strategy</emphasis>."
+msgstr ""
+
+#: index.docbook:703
+msgid "Strategy: read only"
+msgstr ""
+
+#: index.docbook:705
+msgid "If your application needs to read but never modify instances of a persistent class, a <literal>read-only</literal> cache may be used. This is the simplest and best performing strategy. It's even perfectly safe for use in a cluster."
+msgstr ""
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"eg.Immutable\" mutable=\"false\">\n"
+ " <cache usage=\"read-only\"/>\n"
+ " ....\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:717
+msgid "Strategy: read/write"
+msgstr ""
+
+#: index.docbook:719
+msgid "If the application needs to update data, a <literal>read-write</literal> cache might be appropriate. This cache strategy should never be used if serializable transaction isolation level is required. If the cache is used in a JTA environment, you must specify the property <literal>hibernate.transaction.manager_lookup_class</literal>, naming a strategy for obtaining the JTA <literal>TransactionManager</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called. If you wish to use this strategy in a cluster, you should ensure that the underlying cache implementation supports locking. The built-in cache providers do <emphasis>not</emphasis>."
+msgstr ""
+
+#: index.docbook:730
+msgid ""
+ "<![CDATA[<class name=\"eg.Cat\" .... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " <set name=\"kittens\" ... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:735
+msgid "Strategy: nonstrict read/write"
+msgstr ""
+
+#: index.docbook:737
+msgid "If the application only occasionally needs to update data (ie. if it is extremely unlikely that two transactions would try to update the same item simultaneously) and strict transaction isolation is not required, a <literal>nonstrict-read-write</literal> cache might be appropriate. If the cache is used in a JTA environment, you must specify <literal>hibernate.transaction.manager_lookup_class</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called."
+msgstr ""
+
+#: index.docbook:749
+msgid "Strategy: transactional"
+msgstr ""
+
+#: index.docbook:751
+msgid "The <literal>transactional</literal> cache strategy provides support for fully transactional cache providers such as JBoss TreeCache. Such a cache may only be used in a JTA environment and you must specify <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr ""
+
+#: index.docbook:759
+msgid "None of the cache providers support all of the cache concurrency strategies. The following table shows which providers are compatible with which concurrency strategies."
+msgstr ""
+
+#: index.docbook:765
+msgid "Cache Concurrency Strategy Support"
+msgstr ""
+
+#: index.docbook:775
+msgid "read-only"
+msgstr ""
+
+#: index.docbook:776
+msgid "nonstrict-read-write"
+msgstr ""
+
+#: index.docbook:777
+msgid "read-write"
+msgstr ""
+
+#: index.docbook:778
+msgid "transactional"
+msgstr ""
+
+#: index.docbook:824
+msgid "Managing the caches"
+msgstr ""
+
+#: index.docbook:826
+msgid "Whenever you pass an object to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal> and whenever you retrieve an object using <literal>load()</literal>, <literal>get()</literal>, <literal>list()</literal>, <literal>iterate()</literal> or <literal>scroll()</literal>, that object is added to the internal cache of the <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:833
+msgid "When <literal>flush()</literal> is subsequently called, the state of that object will be synchronized with the database. If you do not want this synchronization to occur or if you are processing a huge number of objects and need to manage memory efficiently, the <literal>evict()</literal> method may be used to remove the object and its collections from the first-level cache."
+msgstr ""
+
+#: index.docbook:841
+msgid ""
+ "<![CDATA[ScrollableResult cats = sess.createQuery(\"from Cat as cat\").scroll(); //a huge result set\n"
+ "while ( cats.next() ) {\n"
+ " Cat cat = (Cat) cats.get(0);\n"
+ " doSomethingWithACat(cat);\n"
+ " sess.evict(cat);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:843
+msgid "The <literal>Session</literal> also provides a <literal>contains()</literal> method to determine if an instance belongs to the session cache."
+msgstr ""
+
+#: index.docbook:848
+msgid "To completely evict all objects from the session cache, call <literal>Session.clear()</literal>"
+msgstr ""
+
+#: index.docbook:852
+msgid "For the second-level cache, there are methods defined on <literal>SessionFactory</literal> for evicting the cached state of an instance, entire class, collection instance or entire collection role."
+msgstr ""
+
+#: index.docbook:858
+msgid ""
+ "<![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat\n"
+ "sessionFactory.evict(Cat.class); //evict all Cats\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\", catId); //evict a particular collection of kittens\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\"); //evict all kitten collections]]>"
+msgstr ""
+
+#: index.docbook:860
+msgid "The <literal>CacheMode</literal> controls how a particular session interacts with the second-level cache."
+msgstr ""
+
+#: index.docbook:867
+msgid "<literal>CacheMode.NORMAL</literal> - read items from and write items to the second-level cache"
+msgstr ""
+
+#: index.docbook:872
+msgid "<literal>CacheMode.GET</literal> - read items from the second-level cache, but don't write to the second-level cache except when updating data"
+msgstr ""
+
+#: index.docbook:878
+msgid "<literal>CacheMode.PUT</literal> - write items to the second-level cache, but don't read from the second-level cache"
+msgstr ""
+
+#: index.docbook:884
+msgid "<literal>CacheMode.REFRESH</literal> - write items to the second-level cache, but don't read from the second-level cache, bypass the effect of <literal>hibernate.cache.use_minimal_puts</literal>, forcing a refresh of the second-level cache for all items read from the database"
+msgstr ""
+
+#: index.docbook:892
+msgid "To browse the contents of a second-level or query cache region, use the <literal>Statistics</literal> API:"
+msgstr ""
+
+#: index.docbook:897
+msgid ""
+ "<![CDATA[Map cacheEntries = sessionFactory.getStatistics()\n"
+ " .getSecondLevelCacheStatistics(regionName)\n"
+ " .getEntries();]]>"
+msgstr ""
+
+#: index.docbook:899
+msgid "You'll need to enable statistics, and, optionally, force Hibernate to keep the cache entries in a more human-understandable format:"
+msgstr ""
+
+#: index.docbook:904
+msgid ""
+ "<![CDATA[hibernate.generate_statistics true\n"
+ "hibernate.cache.use_structured_entries true]]>"
+msgstr ""
+
+#: index.docbook:909
+msgid "The Query Cache"
+msgstr ""
+
+#: index.docbook:911
+msgid "Query result sets may also be cached. This is only useful for queries that are run frequently with the same parameters. To use the query cache you must first enable it:"
+msgstr ""
+
+#: index.docbook:916
+msgid "<![CDATA[hibernate.cache.use_query_cache true]]>"
+msgstr ""
+
+#: index.docbook:918
+msgid "This setting causes the creation of two new cache regions - one holding cached query result sets (<literal>org.hibernate.cache.StandardQueryCache</literal>), the other holding timestamps of the most recent updates to queryable tables (<literal>org.hibernate.cache.UpdateTimestampsCache</literal>). Note that the query cache does not cache the state of the actual entities in the result set; it caches only identifier values and results of value type. So the query cache should always be used in conjunction with the second-level cache."
+msgstr ""
+
+#: index.docbook:928
+msgid "Most queries do not benefit from caching, so by default queries are not cached. To enable caching, call <literal>Query.setCacheable(true)</literal>. This call allows the query to look for existing cache results or add its results to the cache when it is executed."
+msgstr ""
+
+#: index.docbook:935
+msgid "If you require fine-grained control over query cache expiration policies, you may specify a named cache region for a particular query by calling <literal>Query.setCacheRegion()</literal>."
+msgstr ""
+
+#: index.docbook:941
+msgid ""
+ "<![CDATA[List blogs = sess.createQuery(\"from Blog blog where blog.blogger = :blogger\")\n"
+ " .setEntity(\"blogger\", blogger)\n"
+ " .setMaxResults(15)\n"
+ " .setCacheable(true)\n"
+ " .setCacheRegion(\"frontpages\")\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:943
+msgid "If the query should force a refresh of its query cache region, you should call <literal>Query.setCacheMode(CacheMode.REFRESH)</literal>. This is particularly useful in cases where underlying data may have been updated via a separate process (i.e., not modified through Hibernate) and allows the application to selectively refresh particular query result sets. This is a more efficient alternative to eviction of a query cache region via <literal>SessionFactory.evictQueries()</literal>."
+msgstr ""
+
+#: index.docbook:955
+msgid "Understanding Collection performance"
+msgstr ""
+
+#: index.docbook:957
+msgid "We've already spent quite some time talking about collections. In this section we will highlight a couple more issues about how collections behave at runtime."
+msgstr ""
+
+#: index.docbook:964
+msgid "Taxonomy"
+msgstr ""
+
+#: index.docbook:966
+msgid "Hibernate defines three basic kinds of collections:"
+msgstr ""
+
+#: index.docbook:970
+msgid "collections of values"
+msgstr ""
+
+#: index.docbook:973
+msgid "one to many associations"
+msgstr ""
+
+#: index.docbook:976
+msgid "many to many associations"
+msgstr ""
+
+#: index.docbook:980
+msgid "This classification distinguishes the various table and foreign key relationships but does not tell us quite everything we need to know about the relational model. To fully understand the relational structure and performance characteristics, we must also consider the structure of the primary key that is used by Hibernate to update or delete collection rows. This suggests the following classification:"
+msgstr ""
+
+#: index.docbook:991
+msgid "indexed collections"
+msgstr ""
+
+#: index.docbook:994
+msgid "sets"
+msgstr ""
+
+#: index.docbook:997
+msgid "bags"
+msgstr ""
+
+#: index.docbook:1001
+msgid "All indexed collections (maps, lists, arrays) have a primary key consisting of the <literal><key></literal> and <literal><index></literal> columns. In this case collection updates are usually extremely efficient - the primary key may be efficiently indexed and a particular row may be efficiently located when Hibernate tries to update or delete it."
+msgstr ""
+
+#: index.docbook:1009
+msgid "Sets have a primary key consisting of <literal><key></literal> and element columns. This may be less efficient for some types of collection element, particularly composite elements or large text or binary fields; the database may not be able to index a complex primary key as efficently. On the other hand, for one to many or many to many associations, particularly in the case of synthetic identifiers, it is likely to be just as efficient. (Side-note: if you want <literal>SchemaExport</literal> to actually create the primary key of a <literal><set></literal> for you, you must declare all columns as <literal>not-null=\"true\"</literal>.)"
+msgstr ""
+
+#: index.docbook:1020
+msgid "<literal><idbag></literal> mappings define a surrogate key, so they are always very efficient to update. In fact, they are the best case."
+msgstr ""
+
+#: index.docbook:1025
+msgid "Bags are the worst case. Since a bag permits duplicate element values and has no index column, no primary key may be defined. Hibernate has no way of distinguishing between duplicate rows. Hibernate resolves this problem by completely removing (in a single <literal>DELETE</literal>) and recreating the collection whenever it changes. This might be very inefficient."
+msgstr ""
+
+#: index.docbook:1033
+msgid "Note that for a one-to-many association, the \"primary key\" may not be the physical primary key of the database table - but even in this case, the above classification is still useful. (It still reflects how Hibernate \"locates\" individual rows of the collection.)"
+msgstr ""
+
+#: index.docbook:1043
+msgid "Lists, maps, idbags and sets are the most efficient collections to update"
+msgstr ""
+
+#: index.docbook:1045
+msgid "From the discussion above, it should be clear that indexed collections and (usually) sets allow the most efficient operation in terms of adding, removing and updating elements."
+msgstr ""
+
+#: index.docbook:1051
+msgid "There is, arguably, one more advantage that indexed collections have over sets for many to many associations or collections of values. Because of the structure of a <literal>Set</literal>, Hibernate doesn't ever <literal>UPDATE</literal> a row when an element is \"changed\". Changes to a <literal>Set</literal> always work via <literal>INSERT</literal> and <literal>DELETE</literal> (of individual rows). Once again, this consideration does not apply to one to many associations."
+msgstr ""
+
+#: index.docbook:1060
+msgid "After observing that arrays cannot be lazy, we would conclude that lists, maps and idbags are the most performant (non-inverse) collection types, with sets not far behind. Sets are expected to be the most common kind of collection in Hibernate applications. This is because the \"set\" semantics are most natural in the relational model."
+msgstr ""
+
+#: index.docbook:1068
+msgid "However, in well-designed Hibernate domain models, we usually see that most collections are in fact one-to-many associations with <literal>inverse=\"true\"</literal>. For these associations, the update is handled by the many-to-one end of the association, and so considerations of collection update performance simply do not apply."
+msgstr ""
+
+#: index.docbook:1078
+msgid "Bags and lists are the most efficient inverse collections"
+msgstr ""
+
+#: index.docbook:1080
+msgid "Just before you ditch bags forever, there is a particular case in which bags (and also lists) are much more performant than sets. For a collection with <literal>inverse=\"true\"</literal> (the standard bidirectional one-to-many relationship idiom, for example) we can add elements to a bag or list without needing to initialize (fetch) the bag elements! This is because <literal>Collection.add()</literal> or <literal>Collection.addAll()</literal> must always return true for a bag or <literal>List</literal> (unlike a <literal>Set</literal>). This can make the following common code much faster."
+msgstr ""
+
+#: index.docbook:1090
+msgid ""
+ "<![CDATA[Parent p = (Parent) sess.load(Parent.class, id);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c); //no need to fetch the collection!\n"
+ "sess.flush();]]>"
+msgstr ""
+
+#: index.docbook:1095
+msgid "One shot delete"
+msgstr ""
+
+#: index.docbook:1097
+msgid "Occasionally, deleting collection elements one by one can be extremely inefficient. Hibernate isn't completely stupid, so it knows not to do that in the case of an newly-empty collection (if you called <literal>list.clear()</literal>, for example). In this case, Hibernate will issue a single <literal>DELETE</literal> and we are done!"
+msgstr ""
+
+#: index.docbook:1104
+msgid "Suppose we add a single element to a collection of size twenty and then remove two elements. Hibernate will issue one <literal>INSERT</literal> statement and two <literal>DELETE</literal> statements (unless the collection is a bag). This is certainly desirable."
+msgstr ""
+
+#: index.docbook:1110
+msgid "However, suppose that we remove eighteen elements, leaving two and then add thee new elements. There are two possible ways to proceed"
+msgstr ""
+
+#: index.docbook:1117
+msgid "delete eighteen rows one by one and then insert three rows"
+msgstr ""
+
+#: index.docbook:1120
+msgid "remove the whole collection (in one SQL <literal>DELETE</literal>) and insert all five current elements (one by one)"
+msgstr ""
+
+#: index.docbook:1125
+msgid "Hibernate isn't smart enough to know that the second option is probably quicker in this case. (And it would probably be undesirable for Hibernate to be that smart; such behaviour might confuse database triggers, etc.)"
+msgstr ""
+
+#: index.docbook:1131
+msgid "Fortunately, you can force this behaviour (ie. the second strategy) at any time by discarding (ie. dereferencing) the original collection and returning a newly instantiated collection with all the current elements. This can be very useful and powerful from time to time."
+msgstr ""
+
+#: index.docbook:1137
+msgid "Of course, one-shot-delete does not apply to collections mapped <literal>inverse=\"true\"</literal>."
+msgstr ""
+
+#: index.docbook:1146
+msgid "Monitoring performance"
+msgstr ""
+
+#: index.docbook:1148
+msgid "Optimization is not much use without monitoring and access to performance numbers. Hibernate provides a full range of figures about its internal operations. Statistics in Hibernate are available per <literal>SessionFactory</literal>."
+msgstr ""
+
+#: index.docbook:1155
+msgid "Monitoring a SessionFactory"
+msgstr ""
+
+#: index.docbook:1157
+msgid "You can access <literal>SessionFactory</literal> metrics in two ways. Your first option is to call <literal>sessionFactory.getStatistics()</literal> and read or display the <literal>Statistics</literal> yourself."
+msgstr ""
+
+#: index.docbook:1163
+msgid "Hibernate can also use JMX to publish metrics if you enable the <literal>StatisticsService</literal> MBean. You may enable a single MBean for all your <literal>SessionFactory</literal> or one per factory. See the following code for minimalistic configuration examples:"
+msgstr ""
+
+#: index.docbook:1170
+msgid ""
+ "<![CDATA[// MBean service registration for a specific SessionFactory\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"myFinancialApp\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory\n"
+ "server.registerMBean(stats, on); // Register the Mbean on the server]]>"
+msgstr ""
+
+#: index.docbook:1173
+msgid ""
+ "<![CDATA[// MBean service registration for all SessionFactory's\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"all\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "server.registerMBean(stats, on); // Register the MBean on the server]]>"
+msgstr ""
+
+#: index.docbook:1175
+msgid "TODO: This doesn't make sense: In the first case, we retrieve and use the MBean directly. In the second one, we must give the JNDI name in which the session factory is held before using it. Use <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal>"
+msgstr ""
+
+#: index.docbook:1180
+msgid "You can (de)activate the monitoring for a <literal>SessionFactory</literal>"
+msgstr ""
+
+#: index.docbook:1185
+msgid "at configuration time, set <literal>hibernate.generate_statistics</literal> to <literal>false</literal>"
+msgstr ""
+
+#: index.docbook:1192
+msgid "at runtime: <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> or <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>"
+msgstr ""
+
+#: index.docbook:1199
+msgid "Statistics can be reset programatically using the <literal>clear()</literal> method. A summary can be sent to a logger (info level) using the <literal>logSummary()</literal> method."
+msgstr ""
+
+#: index.docbook:1208
+msgid "Metrics"
+msgstr ""
+
+#: index.docbook:1210
+msgid "Hibernate provides a number of metrics, from very basic to the specialized information only relevant in certain scenarios. All available counters are described in the <literal>Statistics</literal> interface API, in three categories:"
+msgstr ""
+
+#: index.docbook:1217
+msgid "Metrics related to the general <literal>Session</literal> usage, such as number of open sessions, retrieved JDBC connections, etc."
+msgstr ""
+
+#: index.docbook:1223
+msgid "Metrics related to he entities, collections, queries, and caches as a whole (aka global metrics),"
+msgstr ""
+
+#: index.docbook:1229
+msgid "Detailed metrics related to a particular entity, collection, query or cache region."
+msgstr ""
+
+#: index.docbook:1236
+msgid "For exampl,e you can check the cache hit, miss, and put ratio of entities, collections and queries, and the average time a query needs. Beware that the number of milliseconds is subject to approximation in Java. Hibernate is tied to the JVM precision, on some platforms this might even only be accurate to 10 seconds."
+msgstr ""
+
+#: index.docbook:1243
+msgid "Simple getters are used to access the global metrics (i.e. not tied to a particular entity, collection, cache region, etc.). You can access the metrics of a particular entity, collection or cache region through its name, and through its HQL or SQL representation for queries. Please refer to the <literal>Statistics</literal>, <literal>EntityStatistics</literal>, <literal>CollectionStatistics</literal>, <literal>SecondLevelCacheStatistics</literal>, and <literal>QueryStatistics</literal> API Javadoc for more information. The following code shows a simple example:"
+msgstr ""
+
+#: index.docbook:1253
+msgid ""
+ "<![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();\n"
+ "\n"
+ "double queryCacheHitCount = stats.getQueryCacheHitCount();\n"
+ "double queryCacheMissCount = stats.getQueryCacheMissCount();\n"
+ "double queryCacheHitRatio =\n"
+ " queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);\n"
+ "\n"
+ "log.info(\"Query Hit ratio:\" + queryCacheHitRatio);\n"
+ "\n"
+ "EntityStatistics entityStats =\n"
+ " stats.getEntityStatistics( Cat.class.getName() );\n"
+ "long changes =\n"
+ " entityStats.getInsertCount()\n"
+ " + entityStats.getUpdateCount()\n"
+ " + entityStats.getDeleteCount();\n"
+ "log.info(Cat.class.getName() + \" changed \" + changes + \"times\" );]]>"
+msgstr ""
+
+#: index.docbook:1255
+msgid "To work on all entities, collections, queries and region caches, you can retrieve the list of names of entities, collections, queries and region caches with the following methods: <literal>getQueries()</literal>, <literal>getEntityNames()</literal>, <literal>getCollectionRoleNames()</literal>, and <literal>getSecondLevelCacheRegionNames()</literal>."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/persistent_classes.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/persistent_classes.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/persistent_classes.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,446 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Persistent Classes"
+msgstr ""
+
+#: index.docbook:7
+msgid "Persistent classes are classes in an application that implement the entities of the business problem (e.g. Customer and Order in an E-commerce application). Not all instances of a persistent class are considered to be in the persistent state - an instance may instead be transient or detached."
+msgstr ""
+
+#: index.docbook:14
+msgid "Hibernate works best if these classes follow some simple rules, also known as the Plain Old Java Object (POJO) programming model. However, none of these rules are hard requirements. Indeed, Hibernate3 assumes very little about the nature of your persistent objects. You may express a domain model in other ways: using trees of <literal>Map</literal> instances, for example."
+msgstr ""
+
+#: index.docbook:23
+msgid "A simple POJO example"
+msgstr ""
+
+#: index.docbook:25
+msgid "Most Java applications require a persistent class representing felines."
+msgstr ""
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ "\n"
+ " private Date birthdate;\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ " private int litterId;\n"
+ "\n"
+ " private Cat mother;\n"
+ " private Set kittens = new HashSet();\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ "\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ "\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " void setLitterId(int id) {\n"
+ " this.litterId = id;\n"
+ " }\n"
+ " public int getLitterId() {\n"
+ " return litterId;\n"
+ " }\n"
+ "\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " \n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kitten.setMother(this);\n"
+ " kitten.setLitterId( kittens.size() ); \n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:31
+msgid "There are four main rules to follow here:"
+msgstr ""
+
+#: index.docbook:37
+msgid "Implement a no-argument constructor"
+msgstr ""
+
+#: index.docbook:39
+msgid "<literal>Cat</literal> has a no-argument constructor. All persistent classes must have a default constructor (which may be non-public) so that Hibernate can instantiate them using <literal>Constructor.newInstance()</literal>. We strongly recommend having a default constructor with at least <emphasis>package</emphasis> visibility for runtime proxy generation in Hibernate."
+msgstr ""
+
+#: index.docbook:49
+msgid "Provide an identifier property (optional)"
+msgstr ""
+
+#: index.docbook:51
+msgid "<literal>Cat</literal> has a property called <literal>id</literal>. This property maps to the primary key column of a database table. The property might have been called anything, and its type might have been any primitive type, any primitive \"wrapper\" type, <literal>java.lang.String</literal> or <literal>java.util.Date</literal>. (If your legacy database table has composite keys, you can even use a user-defined class with properties of these types - see the section on composite identifiers later.)"
+msgstr ""
+
+#: index.docbook:60
+msgid "The identifier property is strictly optional. You can leave them off and let Hibernate keep track of object identifiers internally. We do not recommend this, however."
+msgstr ""
+
+#: index.docbook:65
+msgid "In fact, some functionality is available only to classes which declare an identifier property:"
+msgstr ""
+
+#: index.docbook:72
+msgid "Transitive reattachment for detached objects (cascade update or cascade merge) - see"
+msgstr ""
+
+#: index.docbook:79
+msgid "Session.saveOrUpdate()"
+msgstr ""
+
+#: index.docbook:84
+msgid "Session.merge()"
+msgstr ""
+
+#: index.docbook:89
+msgid "We recommend you declare consistently-named identifier properties on persistent classes. We further recommend that you use a nullable (ie. non-primitive) type."
+msgstr ""
+
+#: index.docbook:96
+msgid "Prefer non-final classes (optional)"
+msgstr ""
+
+#: index.docbook:97
+msgid "A central feature of Hibernate, <emphasis>proxies</emphasis>, depends upon the persistent class being either non-final, or the implementation of an interface that declares all public methods."
+msgstr ""
+
+#: index.docbook:102
+msgid "You can persist <literal>final</literal> classes that do not implement an interface with Hibernate, but you won't be able to use proxies for lazy association fetching - which will limit your options for performance tuning."
+msgstr ""
+
+#: index.docbook:107
+msgid "You should also avoid declaring <literal>public final</literal> methods on the non-final classes. If you want to use a class with a <literal>public final</literal> method, you must explicitly disable proxying by setting <literal>lazy=\"false\"</literal>."
+msgstr ""
+
+#: index.docbook:115
+msgid "Declare accessors and mutators for persistent fields (optional)"
+msgstr ""
+
+#: index.docbook:117
+msgid "<literal>Cat</literal> declares accessor methods for all its persistent fields. Many other ORM tools directly persist instance variables. We believe it is better to provide an indirection between the relational schema and internal data structures of the class. By default, Hibernate persists JavaBeans style properties, and recognizes method names of the form <literal>getFoo</literal>, <literal>isFoo</literal> and <literal>setFoo</literal>. You may switch to direct field access for particular properties, if needed."
+msgstr ""
+
+#: index.docbook:127
+msgid "Properties need <emphasis>not</emphasis> be declared public - Hibernate can persist a property with a default, <literal>protected</literal> or <literal>private</literal> get / set pair."
+msgstr ""
+
+#: index.docbook:138
+msgid "Implementing inheritance"
+msgstr ""
+
+#: index.docbook:140
+msgid "A subclass must also observe the first and second rules. It inherits its identifier property from the superclass, <literal>Cat</literal>."
+msgstr ""
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "public class DomesticCat extends Cat {\n"
+ " private String name;\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ " protected void setName(String name) {\n"
+ " this.name=name;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:149
+msgid "Implementing <literal>equals()</literal> and <literal>hashCode()</literal>"
+msgstr ""
+
+#: index.docbook:151
+msgid "You have to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods if you"
+msgstr ""
+
+#: index.docbook:157
+msgid "intend to put instances of persistent classes in a <literal>Set</literal> (the recommended way to represent many-valued associations) <emphasis>and</emphasis>"
+msgstr ""
+
+#: index.docbook:164
+msgid "intend to use reattachment of detached instances"
+msgstr ""
+
+#: index.docbook:170
+msgid "Hibernate guarantees equivalence of persistent identity (database row) and Java identity only inside a particular session scope. So as soon as we mix instances retrieved in different sessions, we must implement <literal>equals()</literal> and <literal>hashCode()</literal> if we wish to have meaningful semantics for <literal>Set</literal>s."
+msgstr ""
+
+#: index.docbook:178
+msgid "The most obvious way is to implement <literal>equals()</literal>/<literal>hashCode()</literal> by comparing the identifier value of both objects. If the value is the same, both must be the same database row, they are therefore equal (if both are added to a <literal>Set</literal>, we will only have one element in the <literal>Set</literal>). Unfortunately, we can't use that approach with generated identifiers! Hibernate will only assign identifier values to objects that are persistent, a newly created instance will not have any identifier value! Furthermore, if an instance is unsaved and currently in a <literal>Set</literal>, saving it will assign an identifier value to the object. If <literal>equals()</literal> and <literal>hashCode()</literal> are based on the identifier value, the hash code would change, breaking the contract of the <literal>Set</literal>. See the Hibernate website for a full discussion of this problem. Note that this is not a Hibernate issue, but !
normal Java semantics of object identity and equality."
+msgstr ""
+
+#: index.docbook:192
+msgid "We recommend implementing <literal>equals()</literal> and <literal>hashCode()</literal> using <emphasis>Business key equality</emphasis>. Business key equality means that the <literal>equals()</literal> method compares only the properties that form the business key, a key that would identify our instance in the real world (a <emphasis>natural</emphasis> candidate key):"
+msgstr ""
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[public class Cat {\n"
+ "\n"
+ " ...\n"
+ " public boolean equals(Object other) {\n"
+ " if (this == other) return true;\n"
+ " if ( !(other instanceof Cat) ) return false;\n"
+ "\n"
+ " final Cat cat = (Cat) other;\n"
+ "\n"
+ " if ( !cat.getLitterId().equals( getLitterId() ) ) return false;\n"
+ " if ( !cat.getMother().equals( getMother() ) ) return false;\n"
+ "\n"
+ " return true;\n"
+ " }\n"
+ "\n"
+ " public int hashCode() {\n"
+ " int result;\n"
+ " result = getMother().hashCode();\n"
+ " result = 29 * result + getLitterId();\n"
+ " return result;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:202
+msgid "Note that a business key does not have to be as solid as a database primary key candidate (see <xref linkend=\"transactions-basics-identity\"/>). Immutable or unique properties are usually good candidates for a business key."
+msgstr ""
+
+#: index.docbook:212
+msgid "Dynamic models"
+msgstr ""
+
+#: index.docbook:215
+msgid "Note that the following features are currently considered experimental and may change in the near future."
+msgstr ""
+
+#: index.docbook:219
+msgid "Persistent entities don't necessarily have to be represented as POJO classes or as JavaBean objects at runtime. Hibernate also supports dynamic models (using <literal>Map</literal>s of <literal>Map</literal>s at runtime) and the representation of entities as DOM4J trees. With this approach, you don't write persistent classes, only mapping files."
+msgstr ""
+
+#: index.docbook:227
+msgid "By default, Hibernate works in normal POJO mode. You may set a default entity representation mode for a particular <literal>SessionFactory</literal> using the <literal>default_entity_mode</literal> configuration option (see <xref linkend=\"configuration-optional-properties\"/>."
+msgstr ""
+
+#: index.docbook:234
+msgid "The following examples demonstrates the representation using <literal>Map</literal>s. First, in the mapping file, an <literal>entity-name</literal> has to be declared instead of (or in addition to) a class name:"
+msgstr ""
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class entity-name=\"Customer\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " type=\"long\"\n"
+ " column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <property name=\"address\"\n"
+ " column=\"ADDRESS\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <many-to-one name=\"organization\"\n"
+ " column=\"ORGANIZATION_ID\"\n"
+ " class=\"Organization\"/>\n"
+ "\n"
+ " <bag name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " lazy=\"false\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"CUSTOMER_ID\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ " \n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:242
+msgid "Note that even though associations are declared using target class names, the target type of an associations may also be a dynamic entity instead of a POJO."
+msgstr ""
+
+#: index.docbook:249
+msgid "After setting the default entity mode to <literal>dynamic-map</literal> for the <literal>SessionFactory</literal>, we can at runtime work with <literal>Map</literal>s of <literal>Map</literal>s:"
+msgstr ""
+
+#: index.docbook:255
+msgid ""
+ "<![CDATA[Session s = openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ "Session s = openSession();\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "\n"
+ "// Create an organization\n"
+ "Map foobar = new HashMap();\n"
+ "foobar.put(\"name\", \"Foobar Inc.\");\n"
+ "\n"
+ "// Link both\n"
+ "david.put(\"organization\", foobar);\n"
+ "\n"
+ "// Save both\n"
+ "s.save(\"Customer\", david);\n"
+ "s.save(\"Organization\", foobar);\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();]]>"
+msgstr ""
+
+#: index.docbook:257
+msgid "The advantages of a dynamic mapping are quick turnaround time for prototyping without the need for entity class implementation. However, you lose compile-time type checking and will very likely deal with many exceptions at runtime. Thanks to the Hibernate mapping, the database schema can easily be normalized and sound, allowing to add a proper domain model implementation on top later on."
+msgstr ""
+
+#: index.docbook:265
+msgid "Entity representation modes can also be set on a per <literal>Session</literal> basis:"
+msgstr ""
+
+#: index.docbook:270
+msgid ""
+ "<![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "dynamicSession.save(\"Customer\", david);\n"
+ "...\n"
+ "dynamicSession.flush();\n"
+ "dynamicSession.close()\n"
+ "...\n"
+ "// Continue on pojoSession\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:273
+msgid "Please note that the call to <literal>getSession()</literal> using an <literal>EntityMode</literal> is on the <literal>Session</literal> API, not the <literal>SessionFactory</literal>. That way, the new <literal>Session</literal> shares the underlying JDBC connection, transaction, and other context information. This means you don't have tocall <literal>flush()</literal> and <literal>close()</literal> on the secondary <literal>Session</literal>, and also leave the transaction and connection handling to the primary unit of work."
+msgstr ""
+
+#: index.docbook:283
+msgid "More information about the XML representation capabilities can be found in <xref linkend=\"xml\"/>."
+msgstr ""
+
+#: index.docbook:291
+msgid "Tuplizers"
+msgstr ""
+
+#: index.docbook:293
+msgid "<literal>org.hibernate.tuple.Tuplizer</literal>, and its sub-interfaces, are responsible for managing a particular representation of a piece of data, given that representation's <literal>org.hibernate.EntityMode</literal>. If a given piece of data is thought of as a data structure, then a tuplizer is the thing which knows how to create such a data structure and how to extract values from and inject values into such a data structure. For example, for the POJO entity mode, the correpsonding tuplizer knows how create the POJO through its constructor and how to access the POJO properties using the defined property accessors. There are two high-level types of Tuplizers, represented by the <literal>org.hibernate.tuple.entity.EntityTuplizer</literal> and <literal>org.hibernate.tuple.component.ComponentTuplizer</literal> interfaces. <literal>EntityTuplizer</literal>s are responsible for managing the above mentioned contracts in regards to entities, while <literal>ComponentTu!
plizer</literal>s do the same for components."
+msgstr ""
+
+#: index.docbook:308
+msgid "Users may also plug in their own tuplizers. Perhaps you require that a <literal>java.util.Map</literal> implementation other than <literal>java.util.HashMap</literal> be used while in the dynamic-map entity-mode; or perhaps you need to define a different proxy generation strategy than the one used by default. Both would be achieved by defining a custom tuplizer implementation. Tuplizers definitions are attached to the entity or component mapping they are meant to manage. Going back to the example of our customer entity:"
+msgstr ""
+
+#: index.docbook:317
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " <class entity-name=\"Customer\">\n"
+ " <!--\n"
+ " Override the dynamic-map entity-mode\n"
+ " tuplizer for the customer entity\n"
+ " -->\n"
+ " <tuplizer entity-mode=\"dynamic-map\"\n"
+ " class=\"CustomMapTuplizerImpl\"/>\n"
+ "\n"
+ " <id name=\"id\" type=\"long\" column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <!-- other properties -->\n"
+ " ...\n"
+ " </class>\n"
+ "</hibernate-mapping>\n"
+ "\n"
+ "\n"
+ "public class CustomMapTuplizerImpl\n"
+ " extends org.hibernate.tuple.entity.DynamicMapEntityTuplizer {\n"
+ " // override the buildInstantiator() method to plug in our custom map...\n"
+ " protected final Instantiator buildInstantiator(\n"
+ " org.hibernate.mapping.PersistentClass mappingInfo) {\n"
+ " return new CustomMapInstantiator( mappingInfo );\n"
+ " }\n"
+ "\n"
+ " private static final class CustomMapInstantiator\n"
+ " extends org.hibernate.tuple.DynamicMapInstantitor {\n"
+ " // override the generateMap() method to return our custom map...\n"
+ " protected final Map generateMap() {\n"
+ " return new CustomMap();\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:322
+msgid "TODO: Document user-extension framework in the property and proxy packages"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/preface.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/preface.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/preface.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,68 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Preface"
+msgstr ""
+
+#: index.docbook:23
+msgid "Working with object-oriented software and a relational database can be cumbersome and time consuming in today's enterprise environments. Hibernate is an object/relational mapping tool for Java environments. The term object/relational mapping (ORM) refers to the technique of mapping a data representation from an object model to a relational data model with a SQL-based schema."
+msgstr ""
+
+#: index.docbook:31
+msgid "Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities and can significantly reduce development time otherwise spent with manual data handling in SQL and JDBC."
+msgstr ""
+
+#: index.docbook:38
+msgid "Hibernates goal is to relieve the developer from 95 percent of common data persistence related programming tasks. Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate vendor-specific SQL code and will help with the common task of result set translation from a tabular representation to a graph of objects."
+msgstr ""
+
+#: index.docbook:48
+msgid "If you are new to Hibernate and Object/Relational Mapping or even Java, please follow these steps:"
+msgstr ""
+
+#: index.docbook:55
+msgid "Read <xref linkend=\"tutorial\"/> for a tutorial with step-by-step instructions. The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr ""
+
+#: index.docbook:63
+msgid "Read <xref linkend=\"architecture\"/> to understand the environments where Hibernate can be used."
+msgstr ""
+
+#: index.docbook:69
+msgid "Have a look at the <literal>eg/</literal> directory in the Hibernate distribution, it contains a simple standalone application. Copy your JDBC driver to the <literal>lib/</literal> directory and edit <literal>etc/hibernate.properties</literal>, specifying correct values for your database. From a command prompt in the distribution directory, type <literal>ant eg</literal> (using Ant), or under Windows, type <literal>build eg</literal>."
+msgstr ""
+
+#: index.docbook:80
+msgid "Use this reference documentation as your primary source of information. Consider reading <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2) if you need more help with application design or if you prefer a step-by-step tutorial. Also visit http://caveatemptor.hibernate.org and download the example application for Java Persistence with Hibernate."
+msgstr ""
+
+#: index.docbook:90
+msgid "FAQs are answered on the Hibernate website."
+msgstr ""
+
+#: index.docbook:95
+msgid "Third party demos, examples, and tutorials are linked on the Hibernate website."
+msgstr ""
+
+#: index.docbook:101
+msgid "The Community Area on the Hibernate website is a good resource for design patterns and various integration solutions (Tomcat, JBoss AS, Struts, EJB, etc.)."
+msgstr ""
+
+#: index.docbook:109
+msgid "If you have questions, use the user forum linked on the Hibernate website. We also provide a JIRA issue trackings system for bug reports and feature requests. If you are interested in the development of Hibernate, join the developer mailing list. If you are interested in translating this documentation into your language, contact us on the developer mailing list."
+msgstr ""
+
+#: index.docbook:117
+msgid "Commercial development support, production support, and training for Hibernate is available through JBoss Inc. (see http://www.hibernate.org/SupportTraining/). Hibernate is a Professional Open Source project and a critical component of the JBoss Enterprise Middleware System (JEMS) suite of products."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/query_criteria.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/query_criteria.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/query_criteria.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,484 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Criteria Queries"
+msgstr ""
+
+#: index.docbook:7
+msgid "Hibernate features an intuitive, extensible criteria query API."
+msgstr ""
+
+#: index.docbook:12
+msgid "Creating a <literal>Criteria</literal> instance"
+msgstr ""
+
+#: index.docbook:14
+msgid "The interface <literal>org.hibernate.Criteria</literal> represents a query against a particular persistent class. The <literal>Session</literal> is a factory for <literal>Criteria</literal> instances."
+msgstr ""
+
+#: index.docbook:20
+msgid ""
+ "<![CDATA[Criteria crit = sess.createCriteria(Cat.class);\n"
+ "crit.setMaxResults(50);\n"
+ "List cats = crit.list();]]>"
+msgstr ""
+
+#: index.docbook:25
+msgid "Narrowing the result set"
+msgstr ""
+
+#: index.docbook:27
+msgid "An individual query criterion is an instance of the interface <literal>org.hibernate.criterion.Criterion</literal>. The class <literal>org.hibernate.criterion.Restrictions</literal> defines factory methods for obtaining certain built-in <literal>Criterion</literal> types."
+msgstr ""
+
+#: index.docbook:35
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.between(\"weight\", minWeight, maxWeight) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:37
+msgid "Restrictions may be grouped logically."
+msgstr ""
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.or(\n"
+ " Restrictions.eq( \"age\", new Integer(0) ),\n"
+ " Restrictions.isNull(\"age\")\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.in( \"name\", new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( Restrictions.isNull(\"age\") )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(0) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(1) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(2) ) )\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:45
+msgid "There are quite a range of built-in criterion types (<literal>Restrictions</literal> subclasses), but one that is especially useful lets you specify SQL directly."
+msgstr ""
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.sqlRestriction(\"lower({alias}.name) like lower(?)\", \"Fritz%\", Hibernate.STRING) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:52
+msgid "The <literal>{alias}</literal> placeholder with be replaced by the row alias of the queried entity."
+msgstr ""
+
+#: index.docbook:57
+msgid "An alternative approach to obtaining a criterion is to get it from a <literal>Property</literal> instance. You can create a <literal>Property</literal> by calling <literal>Property.forName()</literal>."
+msgstr ""
+
+#: index.docbook:63
+msgid ""
+ "<![CDATA[\n"
+ "Property age = Property.forName(\"age\");\n"
+ "List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( age.isNull() )\n"
+ " .add( age.eq( new Integer(0) ) )\n"
+ " .add( age.eq( new Integer(1) ) )\n"
+ " .add( age.eq( new Integer(2) ) )\n"
+ " ) )\n"
+ " .add( Property.forName(\"name\").in( new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:68
+msgid "Ordering the results"
+msgstr ""
+
+#: index.docbook:70
+msgid "You may order the results using <literal>org.hibernate.criterion.Order</literal>."
+msgstr ""
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .addOrder( Order.asc(\"name\") )\n"
+ " .addOrder( Order.desc(\"age\") )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"name\").like(\"F%\") )\n"
+ " .addOrder( Property.forName(\"name\").asc() )\n"
+ " .addOrder( Property.forName(\"age\").desc() )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:81
+msgid "Associations"
+msgstr ""
+
+#: index.docbook:83
+msgid "You may easily specify constraints upon related entities by navigating associations using <literal>createCriteria()</literal>."
+msgstr ""
+
+#: index.docbook:88
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .createCriteria(\"kittens\")\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:90
+msgid "note that the second <literal>createCriteria()</literal> returns a new instance of <literal>Criteria</literal>, which refers to the elements of the <literal>kittens</literal> collection."
+msgstr ""
+
+#: index.docbook:96
+msgid "The following, alternate form is useful in certain circumstances."
+msgstr ""
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createAlias(\"kittens\", \"kt\")\n"
+ " .createAlias(\"mate\", \"mt\")\n"
+ " .add( Restrictions.eqProperty(\"kt.name\", \"mt.name\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:102
+msgid "(<literal>createAlias()</literal> does not create a new instance of <literal>Criteria</literal>.)"
+msgstr ""
+
+#: index.docbook:107
+msgid "Note that the kittens collections held by the <literal>Cat</literal> instances returned by the previous two queries are <emphasis>not</emphasis> pre-filtered by the criteria! If you wish to retrieve just the kittens that match the criteria, you must use a <literal>ResultTransformer</literal>."
+msgstr ""
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createCriteria(\"kittens\", \"kt\")\n"
+ " .add( Restrictions.eq(\"name\", \"F%\") )\n"
+ " .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)\n"
+ " .list();\n"
+ "Iterator iter = cats.iterator();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Map map = (Map) iter.next();\n"
+ " Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);\n"
+ " Cat kitten = (Cat) map.get(\"kt\");\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:119
+msgid "Dynamic association fetching"
+msgstr ""
+
+#: index.docbook:121
+msgid "You may specify association fetching semantics at runtime using <literal>setFetchMode()</literal>."
+msgstr ""
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .setFetchMode(\"mate\", FetchMode.EAGER)\n"
+ " .setFetchMode(\"kittens\", FetchMode.EAGER)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:128
+msgid "This query will fetch both <literal>mate</literal> and <literal>kittens</literal> by outer join. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr ""
+
+#: index.docbook:136
+msgid "Example queries"
+msgstr ""
+
+#: index.docbook:138
+msgid "The class <literal>org.hibernate.criterion.Example</literal> allows you to construct a query criterion from a given instance."
+msgstr ""
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[Cat cat = new Cat();\n"
+ "cat.setSex('F');\n"
+ "cat.setColor(Color.BLACK);\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:145
+msgid "Version properties, identifiers and associations are ignored. By default, null valued properties are excluded."
+msgstr ""
+
+#: index.docbook:150
+msgid "You can adjust how the <literal>Example</literal> is applied."
+msgstr ""
+
+#: index.docbook:154
+msgid ""
+ "<![CDATA[Example example = Example.create(cat)\n"
+ " .excludeZeroes() //exclude zero valued properties\n"
+ " .excludeProperty(\"color\") //exclude the property named \"color\"\n"
+ " .ignoreCase() //perform case insensitive string comparisons\n"
+ " .enableLike(); //use like for string comparisons\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add(example)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:156
+msgid "You can even use examples to place criteria upon associated objects."
+msgstr ""
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .createCriteria(\"mate\")\n"
+ " .add( Example.create( cat.getMate() ) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:165
+msgid "Projections, aggregation and grouping"
+msgstr ""
+
+#: index.docbook:166
+msgid "The class <literal>org.hibernate.criterion.Projections</literal> is a factory for <literal>Projection</literal> instances. We apply a projection to a query by calling <literal>setProjection()</literal>."
+msgstr ""
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.rowCount() )\n"
+ " .add( Restrictions.eq(\"color\", Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount() )\n"
+ " .add( Projections.avg(\"weight\") )\n"
+ " .add( Projections.max(\"weight\") )\n"
+ " .add( Projections.groupProperty(\"color\") )\n"
+ " )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:176
+msgid "There is no explicit \"group by\" necessary in a criteria query. Certain projection types are defined to be <emphasis>grouping projections</emphasis>, which also appear in the SQL <literal>group by</literal> clause."
+msgstr ""
+
+#: index.docbook:182
+msgid "An alias may optionally be assigned to a projection, so that the projected value may be referred to in restrictions or orderings. Here are two different ways to do this:"
+msgstr ""
+
+#: index.docbook:188
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.alias( Projections.groupProperty(\"color\"), \"colr\" ) )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:190
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.groupProperty(\"color\").as(\"colr\") )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:192
+msgid "The <literal>alias()</literal> and <literal>as()</literal> methods simply wrap a projection instance in another, aliased, instance of <literal>Projection</literal>. As a shortcut, you can assign an alias when you add the projection to a projection list:"
+msgstr ""
+
+#: index.docbook:199
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount(), \"catCountByColor\" )\n"
+ " .add( Projections.avg(\"weight\"), \"avgWeight\" )\n"
+ " .add( Projections.max(\"weight\"), \"maxWeight\" )\n"
+ " .add( Projections.groupProperty(\"color\"), \"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:201
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Domestic.class, \"cat\")\n"
+ " .createAlias(\"kittens\", \"kit\")\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.property(\"cat.name\"), \"catName\" )\n"
+ " .add( Projections.property(\"kit.name\"), \"kitName\" )\n"
+ " )\n"
+ " .addOrder( Order.asc(\"catName\") )\n"
+ " .addOrder( Order.asc(\"kitName\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:203
+msgid "You can also use <literal>Property.forName()</literal> to express projections:"
+msgstr ""
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Property.forName(\"name\") )\n"
+ " .add( Property.forName(\"color\").eq(Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:209
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount().as(\"catCountByColor\") )\n"
+ " .add( Property.forName(\"weight\").avg().as(\"avgWeight\") )\n"
+ " .add( Property.forName(\"weight\").max().as(\"maxWeight\") )\n"
+ " .add( Property.forName(\"color\").group().as(\"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:214
+msgid "Detached queries and subqueries"
+msgstr ""
+
+#: index.docbook:215
+msgid "The <literal>DetachedCriteria</literal> class lets you create a query outside the scope of a session, and then later execute it using some arbitrary <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)\n"
+ " .add( Property.forName(\"sex\").eq('F') );\n"
+ " \n"
+ "Session session = ....;\n"
+ "Transaction txn = session.beginTransaction();\n"
+ "List results = query.getExecutableCriteria(session).setMaxResults(100).list();\n"
+ "txn.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:222
+msgid "A <literal>DetachedCriteria</literal> may also be used to express a subquery. Criterion instances involving subqueries may be obtained via <literal>Subqueries</literal> or <literal>Property</literal>."
+msgstr ""
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\").avg() );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"weight\").gt(avgWeight) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:230
+msgid ""
+ "<![CDATA[DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\") );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Subqueries.geAll(\"weight\", weights) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:232
+msgid "Even correlated subqueries are possible:"
+msgstr ""
+
+#: index.docbook:236
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, \"cat2\")\n"
+ " .setProjection( Property.forName(\"weight\").avg() )\n"
+ " .add( Property.forName(\"cat2.sex\").eqProperty(\"cat.sex\") );\n"
+ "session.createCriteria(Cat.class, \"cat\")\n"
+ " .add( Property.forName(\"weight\").gt(avgWeightForSex) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:245
+msgid "Queries by natural identifier"
+msgstr ""
+
+#: index.docbook:247
+msgid "For most queries, including criteria queries, the query cache is not very efficient, because query cache invalidation occurs too frequently. However, there is one special kind of query where we can optimize the cache invalidation algorithm: lookups by a constant natural key. In some applications, this kind of query occurs frequently. The criteria API provides special provision for this use case."
+msgstr ""
+
+#: index.docbook:255
+msgid "First, you should map the natural key of your entity using <literal><natural-id></literal>, and enable use of the second-level cache."
+msgstr ""
+
+#: index.docbook:260
+msgid ""
+ "<![CDATA[<class name=\"User\">\n"
+ " <cache usage=\"read-write\"/>\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <natural-id>\n"
+ " <property name=\"name\"/>\n"
+ " <property name=\"org\"/>\n"
+ " </natural-id>\n"
+ " <property name=\"password\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:262
+msgid "Note that this functionality is not intended for use with entities with <emphasis>mutable</emphasis> natural keys."
+msgstr ""
+
+#: index.docbook:267
+msgid "Next, enable the Hibernate query cache."
+msgstr ""
+
+#: index.docbook:271
+msgid "Now, <literal>Restrictions.naturalId()</literal> allows us to make use of the more efficient cache algorithm."
+msgstr ""
+
+#: index.docbook:276
+msgid ""
+ "<![CDATA[session.createCriteria(User.class)\n"
+ " .add( Restrictions.naturalId()\n"
+ " .set(\"name\", \"gavin\")\n"
+ " .set(\"org\", \"hb\") \n"
+ " ).setCacheable(true)\n"
+ " .uniqueResult();]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/query_hql.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/query_hql.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/query_hql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1275 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "HQL: The Hibernate Query Language"
+msgstr ""
+
+#: index.docbook:7
+msgid "Hibernate is equipped with an extremely powerful query language that (quite intentionally) looks very much like SQL. But don't be fooled by the syntax; HQL is fully object-oriented, understanding notions like inheritence, polymorphism and association."
+msgstr ""
+
+#: index.docbook:14
+msgid "Case Sensitivity"
+msgstr ""
+
+#: index.docbook:16
+msgid "Queries are case-insensitive, except for names of Java classes and properties. So <literal>SeLeCT</literal> is the same as <literal>sELEct</literal> is the same as <literal>SELECT</literal> but <literal>org.hibernate.eg.FOO</literal> is not <literal>org.hibernate.eg.Foo</literal> and <literal>foo.barSet</literal> is not <literal>foo.BARSET</literal>."
+msgstr ""
+
+#: index.docbook:27
+msgid "This manual uses lowercase HQL keywords. Some users find queries with uppercase keywords more readable, but we find this convention ugly when embedded in Java code."
+msgstr ""
+
+#: index.docbook:35
+msgid "The from clause"
+msgstr ""
+
+#: index.docbook:37
+msgid "The simplest possible Hibernate query is of the form:"
+msgstr ""
+
+#: index.docbook:41
+msgid "<![CDATA[from eg.Cat]]>"
+msgstr ""
+
+#: index.docbook:43
+msgid "which simply returns all instances of the class <literal>eg.Cat</literal>. We don't usually need to qualify the class name, since <literal>auto-import</literal> is the default. So we almost always just write:"
+msgstr ""
+
+#: index.docbook:49
+msgid "<![CDATA[from Cat]]>"
+msgstr ""
+
+#: index.docbook:51
+msgid "Most of the time, you will need to assign an <emphasis>alias</emphasis>, since you will want to refer to the <literal>Cat</literal> in other parts of the query."
+msgstr ""
+
+#: index.docbook:57, index.docbook:372
+msgid "<![CDATA[from Cat as cat]]>"
+msgstr ""
+
+#: index.docbook:59
+msgid "This query assigns the alias <literal>cat</literal> to <literal>Cat</literal> instances, so we could use that alias later in the query. The <literal>as</literal> keyword is optional; we could also write:"
+msgstr ""
+
+#: index.docbook:65
+msgid "<![CDATA[from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:67
+msgid "Multiple classes may appear, resulting in a cartesian product or \"cross\" join."
+msgstr ""
+
+#: index.docbook:71
+msgid "<![CDATA[from Formula, Parameter]]>"
+msgstr ""
+
+#: index.docbook:72
+msgid "<![CDATA[from Formula as form, Parameter as param]]>"
+msgstr ""
+
+#: index.docbook:74
+msgid "It is considered good practice to name query aliases using an initial lowercase, consistent with Java naming standards for local variables (eg. <literal>domesticCat</literal>)."
+msgstr ""
+
+#: index.docbook:83
+msgid "Associations and joins"
+msgstr ""
+
+#: index.docbook:85
+msgid "We may also assign aliases to associated entities, or even to elements of a collection of values, using a <literal>join</literal>."
+msgstr ""
+
+#: index.docbook:90
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join cat.mate as mate\n"
+ " left outer join cat.kittens as kitten]]>"
+msgstr ""
+
+#: index.docbook:92
+msgid "<![CDATA[from Cat as cat left join cat.mate.kittens as kittens]]>"
+msgstr ""
+
+#: index.docbook:94
+msgid "<![CDATA[from Formula form full join form.parameter param]]>"
+msgstr ""
+
+#: index.docbook:96
+msgid "The supported join types are borrowed from ANSI SQL"
+msgstr ""
+
+#: index.docbook:103
+msgid "inner join"
+msgstr ""
+
+#: index.docbook:108
+msgid "left outer join"
+msgstr ""
+
+#: index.docbook:113
+msgid "right outer join"
+msgstr ""
+
+#: index.docbook:117
+msgid "<literal>full join</literal> (not usually useful)"
+msgstr ""
+
+#: index.docbook:123
+msgid "The <literal>inner join</literal>, <literal>left outer join</literal> and <literal>right outer join</literal> constructs may be abbreviated."
+msgstr ""
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " join cat.mate as mate\n"
+ " left join cat.kittens as kitten]]>"
+msgstr ""
+
+#: index.docbook:130
+msgid "You may supply extra join conditions using the HQL <literal>with</literal> keyword."
+msgstr ""
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " left join cat.kittens as kitten\n"
+ " with kitten.bodyWeight > 10.0]]>"
+msgstr ""
+
+#: index.docbook:137
+msgid "In addition, a \"fetch\" join allows associations or collections of values to be initialized along with their parent objects, using a single select. This is particularly useful in the case of a collection. It effectively overrides the outer join and lazy declarations of the mapping file for associations and collections. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr ""
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens]]>"
+msgstr ""
+
+#: index.docbook:147
+msgid "A fetch join does not usually need to assign an alias, because the associated objects should not be used in the <literal>where</literal> clause (or any other clause). Also, the associated objects are not returned directly in the query results. Instead, they may be accessed via the parent object. The only reason we might need an alias is if we are recursively join fetching a further collection:"
+msgstr ""
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens child\n"
+ " left join fetch child.kittens]]>"
+msgstr ""
+
+#: index.docbook:157
+msgid "Note that the <literal>fetch</literal> construct may not be used in queries called using <literal>iterate()</literal> (though <literal>scroll()</literal> can be used). Nor should <literal>fetch</literal> be used together with <literal>setMaxResults()</literal> or <literal>setFirstResult()</literal> as these operations are based on the result rows, which usually contain duplicates for eager collection fetching, hence, the number of rows is not what you'd expect. Nor may <literal>fetch</literal> be used together with an ad hoc <literal>with</literal> condition. It is possible to create a cartesian product by join fetching more than one collection in a query, so take care in this case. Join fetching multiple collection roles also sometimes gives unexpected results for bag mappings, so be careful about how you formulate your queries in this case. Finally, note that <literal>full join fetch</literal> and <literal>right join fetch</literal> are not meaningful."
+msgstr ""
+
+#: index.docbook:172
+msgid "If you are using property-level lazy fetching (with bytecode instrumentation), it is possible to force Hibernate to fetch the lazy properties immediately (in the first query) using <literal>fetch all properties</literal>."
+msgstr ""
+
+#: index.docbook:178
+msgid "<![CDATA[from Document fetch all properties order by name]]>"
+msgstr ""
+
+#: index.docbook:179
+msgid "<![CDATA[from Document doc fetch all properties where lower(doc.name) like '%cats%']]>"
+msgstr ""
+
+#: index.docbook:184
+msgid "Forms of join syntax"
+msgstr ""
+
+#: index.docbook:186
+msgid "HQL supports two forms of association joining: <literal>implicit</literal> and <literal>explicit</literal>."
+msgstr ""
+
+#: index.docbook:190
+msgid "The queries shown in the previous section all use the <literal>explicit</literal> form where the join keyword is explicitly used in the from clause. This is the recommended form."
+msgstr ""
+
+#: index.docbook:195
+msgid "The <literal>implicit</literal> form does not use the join keyword. Instead, the associations are \"dereferenced\" using dot-notation. <literal>implicit</literal> joins can appear in any of the HQL clauses. <literal>implicit</literal> join result in inner joins in the resulting SQL statement."
+msgstr ""
+
+#: index.docbook:202
+msgid "<![CDATA[from Cat as cat where cat.mate.name like '%s%']]>"
+msgstr ""
+
+#: index.docbook:206
+msgid "Refering to identifier property"
+msgstr ""
+
+#: index.docbook:208
+msgid "There are, generally speaking, 2 ways to refer to an entity's identifier property:"
+msgstr ""
+
+#: index.docbook:213
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the identifier property of an entity <emphasis>provided that entity does not define a non-identifier property named id</emphasis>."
+msgstr ""
+
+#: index.docbook:220
+msgid "If the entity defines a named identifier property, you may use that property name."
+msgstr ""
+
+#: index.docbook:226
+msgid "References to composite identifier properties follow the same naming rules. If the entity has a non-identifier property named id, the composite identifier property can only be referenced by its defined named; otherwise, the special <literal>id</literal> property can be used to rerference the identifier property."
+msgstr ""
+
+#: index.docbook:233
+msgid "Note: this has changed significantly starting in version 3.2.2. In previous versions, <literal>id</literal> <emphasis>always</emphasis> referred to the identifier property no matter what its actual name. A ramification of that decision was that non-identifier properties named <literal>id</literal> could never be referenced in Hibernate queries."
+msgstr ""
+
+#: index.docbook:242
+msgid "The select clause"
+msgstr ""
+
+#: index.docbook:244
+msgid "The <literal>select</literal> clause picks which objects and properties to return in the query result set. Consider:"
+msgstr ""
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[select mate\n"
+ "from Cat as cat\n"
+ " inner join cat.mate as mate]]>"
+msgstr ""
+
+#: index.docbook:251
+msgid "The query will select <literal>mate</literal>s of other <literal>Cat</literal>s. Actually, you may express this query more compactly as:"
+msgstr ""
+
+#: index.docbook:256
+msgid "<![CDATA[select cat.mate from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:258
+msgid "Queries may return properties of any value type including properties of component type:"
+msgstr ""
+
+#: index.docbook:262
+msgid ""
+ "<![CDATA[select cat.name from DomesticCat cat\n"
+ "where cat.name like 'fri%']]>"
+msgstr ""
+
+#: index.docbook:264
+msgid "<![CDATA[select cust.name.firstName from Customer as cust]]>"
+msgstr ""
+
+#: index.docbook:266
+msgid "Queries may return multiple objects and/or properties as an array of type <literal>Object[]</literal>,"
+msgstr ""
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[select mother, offspr, mate.name\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr ""
+
+#: index.docbook:273
+msgid "or as a <literal>List</literal>,"
+msgstr ""
+
+#: index.docbook:277
+msgid ""
+ "<![CDATA[select new list(mother, offspr, mate.name)\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr ""
+
+#: index.docbook:279
+msgid "or as an actual typesafe Java object,"
+msgstr ""
+
+#: index.docbook:283
+msgid ""
+ "<![CDATA[select new Family(mother, mate, offspr)\n"
+ "from DomesticCat as mother\n"
+ " join mother.mate as mate\n"
+ " left join mother.kittens as offspr]]>"
+msgstr ""
+
+#: index.docbook:285
+msgid "assuming that the class <literal>Family</literal> has an appropriate constructor."
+msgstr ""
+
+#: index.docbook:289
+msgid "You may assign aliases to selected expressions using <literal>as</literal>:"
+msgstr ""
+
+#: index.docbook:293
+msgid ""
+ "<![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n\n"
+ "from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:295
+msgid "This is most useful when used together with <literal>select new map</literal>:"
+msgstr ""
+
+#: index.docbook:299
+msgid ""
+ "<![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )\n"
+ "from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:301
+msgid "This query returns a <literal>Map</literal> from aliases to selected values."
+msgstr ""
+
+#: index.docbook:308
+msgid "Aggregate functions"
+msgstr ""
+
+#: index.docbook:310
+msgid "HQL queries may even return the results of aggregate functions on properties:"
+msgstr ""
+
+#: index.docbook:314
+msgid ""
+ "<![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)\n"
+ "from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:325
+msgid "The supported aggregate functions are"
+msgstr ""
+
+#: index.docbook:332
+msgid "avg(...), sum(...), min(...), max(...)"
+msgstr ""
+
+#: index.docbook:337
+msgid "count(*)"
+msgstr ""
+
+#: index.docbook:342
+msgid "count(...), count(distinct ...), count(all...)"
+msgstr ""
+
+#: index.docbook:347
+msgid "You may use arithmetic operators, concatenation, and recognized SQL functions in the select clause:"
+msgstr ""
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[select cat.weight + sum(kitten.weight)\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.weight]]>"
+msgstr ""
+
+#: index.docbook:354
+msgid "<![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]>"
+msgstr ""
+
+#: index.docbook:356
+msgid "The <literal>distinct</literal> and <literal>all</literal> keywords may be used and have the same semantics as in SQL."
+msgstr ""
+
+#: index.docbook:361
+msgid ""
+ "<![CDATA[select distinct cat.name from Cat cat\n"
+ "\n"
+ "select count(distinct cat.name), count(cat) from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:366
+msgid "Polymorphic queries"
+msgstr ""
+
+#: index.docbook:368
+msgid "A query like:"
+msgstr ""
+
+#: index.docbook:374
+msgid "returns instances not only of <literal>Cat</literal>, but also of subclasses like <literal>DomesticCat</literal>. Hibernate queries may name <emphasis>any</emphasis> Java class or interface in the <literal>from</literal> clause. The query will return instances of all persistent classes that extend that class or implement the interface. The following query would return all persistent objects:"
+msgstr ""
+
+#: index.docbook:382
+msgid "<![CDATA[from java.lang.Object o]]>"
+msgstr ""
+
+#: index.docbook:384
+msgid "The interface <literal>Named</literal> might be implemented by various persistent classes:"
+msgstr ""
+
+#: index.docbook:389
+msgid "<![CDATA[from Named n, Named m where n.name = m.name]]>"
+msgstr ""
+
+#: index.docbook:391
+msgid "Note that these last two queries will require more than one SQL <literal>SELECT</literal>. This means that the <literal>order by</literal> clause does not correctly order the whole result set. (It also means you can't call these queries using <literal>Query.scroll()</literal>.)"
+msgstr ""
+
+#: index.docbook:400
+msgid "The where clause"
+msgstr ""
+
+#: index.docbook:402
+msgid "The <literal>where</literal> clause allows you to narrow the list of instances returned. If no alias exists, you may refer to properties by name:"
+msgstr ""
+
+#: index.docbook:407
+msgid "<![CDATA[from Cat where name='Fritz']]>"
+msgstr ""
+
+#: index.docbook:409
+msgid "If there is an alias, use a qualified property name:"
+msgstr ""
+
+#: index.docbook:413
+msgid "<![CDATA[from Cat as cat where cat.name='Fritz']]>"
+msgstr ""
+
+#: index.docbook:415
+msgid "returns instances of <literal>Cat</literal> named 'Fritz'."
+msgstr ""
+
+#: index.docbook:419
+msgid ""
+ "<![CDATA[select foo\n"
+ "from Foo foo, Bar bar\n"
+ "where foo.startDate = bar.date]]>"
+msgstr ""
+
+#: index.docbook:421
+msgid "will return all instances of <literal>Foo</literal> for which there exists an instance of <literal>bar</literal> with a <literal>date</literal> property equal to the <literal>startDate</literal> property of the <literal>Foo</literal>. Compound path expressions make the <literal>where</literal> clause extremely powerful. Consider:"
+msgstr ""
+
+#: index.docbook:430
+msgid "<![CDATA[from Cat cat where cat.mate.name is not null]]>"
+msgstr ""
+
+#: index.docbook:432
+msgid "This query translates to an SQL query with a table (inner) join. If you were to write something like"
+msgstr ""
+
+#: index.docbook:437
+msgid ""
+ "<![CDATA[from Foo foo\n"
+ "where foo.bar.baz.customer.address.city is not null]]>"
+msgstr ""
+
+#: index.docbook:439
+msgid "you would end up with a query that would require four table joins in SQL."
+msgstr ""
+
+#: index.docbook:443
+msgid "The <literal>=</literal> operator may be used to compare not only properties, but also instances:"
+msgstr ""
+
+#: index.docbook:448
+msgid "<![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]>"
+msgstr ""
+
+#: index.docbook:450
+msgid ""
+ "<![CDATA[select cat, mate\n"
+ "from Cat cat, Cat mate\n"
+ "where cat.mate = mate]]>"
+msgstr ""
+
+#: index.docbook:452
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the unique identifier of an object. See <xref linkend=\"queryhql-identifier-property\"/> for more information."
+msgstr ""
+
+#: index.docbook:458
+msgid ""
+ "<![CDATA[from Cat as cat where cat.id = 123\n"
+ "\n"
+ "from Cat as cat where cat.mate.id = 69]]>"
+msgstr ""
+
+#: index.docbook:460
+msgid "The second query is efficient. No table join is required!"
+msgstr ""
+
+#: index.docbook:464
+msgid "Properties of composite identifiers may also be used. Suppose <literal>Person</literal> has a composite identifier consisting of <literal>country</literal> and <literal>medicareNumber</literal>. Again, see <xref linkend=\"queryhql-identifier-property\"/> for more information regarding referencing identifier properties."
+msgstr ""
+
+#: index.docbook:471
+msgid ""
+ "<![CDATA[from bank.Person person\n"
+ "where person.id.country = 'AU'\n"
+ " and person.id.medicareNumber = 123456]]>"
+msgstr ""
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[from bank.Account account\n"
+ "where account.owner.id.country = 'AU'\n"
+ " and account.owner.id.medicareNumber = 123456]]>"
+msgstr ""
+
+#: index.docbook:475
+msgid "Once again, the second query requires no table join."
+msgstr ""
+
+#: index.docbook:479
+msgid "Likewise, the special property <literal>class</literal> accesses the discriminator value of an instance in the case of polymorphic persistence. A Java class name embedded in the where clause will be translated to its discriminator value."
+msgstr ""
+
+#: index.docbook:485
+msgid "<![CDATA[from Cat cat where cat.class = DomesticCat]]>"
+msgstr ""
+
+#: index.docbook:487
+msgid "You may also use components or composite user types, or properties of said component types. See <xref linkend=\"queryhql-coomponents\"/> for more details."
+msgstr ""
+
+#: index.docbook:492
+msgid "An \"any\" type has the special properties <literal>id</literal> and <literal>class</literal>, allowing us to express a join in the following way (where <literal>AuditLog.item</literal> is a property mapped with <literal><any></literal>)."
+msgstr ""
+
+#: index.docbook:498
+msgid ""
+ "<![CDATA[from AuditLog log, Payment payment\n"
+ "where log.item.class = 'Payment' and log.item.id = payment.id]]>"
+msgstr ""
+
+#: index.docbook:500
+msgid "Notice that <literal>log.item.class</literal> and <literal>payment.class</literal> would refer to the values of completely different database columns in the above query."
+msgstr ""
+
+#: index.docbook:508
+msgid "Expressions"
+msgstr ""
+
+#: index.docbook:510
+msgid "Expressions allowed in the <literal>where</literal> clause include most of the kind of things you could write in SQL:"
+msgstr ""
+
+#: index.docbook:517
+msgid "mathematical operators <literal>+, -, *, /</literal>"
+msgstr ""
+
+#: index.docbook:522
+msgid "binary comparison operators <literal>=, >=, <=, <>, !=, like</literal>"
+msgstr ""
+
+#: index.docbook:527
+msgid "logical operations <literal>and, or, not</literal>"
+msgstr ""
+
+#: index.docbook:532
+msgid "Parentheses <literal>( )</literal>, indicating grouping"
+msgstr ""
+
+#: index.docbook:537
+msgid "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> and <literal>not member of</literal>"
+msgstr ""
+
+#: index.docbook:550
+msgid "\"Simple\" case, <literal>case ... when ... then ... else ... end</literal>, and \"searched\" case, <literal>case when ... then ... else ... end</literal>"
+msgstr ""
+
+#: index.docbook:556
+msgid "string concatenation <literal>...||...</literal> or <literal>concat(...,...)</literal>"
+msgstr ""
+
+#: index.docbook:561
+msgid "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+msgstr ""
+
+#: index.docbook:567
+msgid "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+msgstr ""
+
+#: index.docbook:574
+msgid "Any function or operator defined by EJB-QL 3.0: <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()</literal>"
+msgstr ""
+
+#: index.docbook:580
+msgid "<literal>coalesce()</literal> and <literal>nullif()</literal>"
+msgstr ""
+
+#: index.docbook:585
+msgid "<literal>str()</literal> for converting numeric or temporal values to a readable string"
+msgstr ""
+
+#: index.docbook:591
+msgid "<literal>cast(... as ...)</literal>, where the second argument is the name of a Hibernate type, and <literal>extract(... from ...)</literal> if ANSI <literal>cast()</literal> and <literal>extract()</literal> is supported by the underlying database"
+msgstr ""
+
+#: index.docbook:599
+msgid "the HQL <literal>index()</literal> function, that applies to aliases of a joined indexed collection"
+msgstr ""
+
+#: index.docbook:605
+msgid "HQL functions that take collection-valued path expressions: <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal>, along with the special <literal>elements()</literal> and <literal>indices</literal> functions which may be quantified using <literal>some, all, exists, any, in</literal>."
+msgstr ""
+
+#: index.docbook:613
+msgid "Any database-supported SQL scalar function like <literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>"
+msgstr ""
+
+#: index.docbook:619
+msgid "JDBC-style positional parameters <literal>?</literal>"
+msgstr ""
+
+#: index.docbook:624
+msgid "named parameters <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+msgstr ""
+
+#: index.docbook:629
+msgid "SQL literals <literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+msgstr ""
+
+#: index.docbook:635
+msgid "Java <literal>public static final</literal> constants <literal>eg.Color.TABBY</literal>"
+msgstr ""
+
+#: index.docbook:641
+msgid "<literal>in</literal> and <literal>between</literal> may be used as follows:"
+msgstr ""
+
+#: index.docbook:645
+msgid "<![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]>"
+msgstr ""
+
+#: index.docbook:647
+msgid "<![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr ""
+
+#: index.docbook:649
+msgid "and the negated forms may be written"
+msgstr ""
+
+#: index.docbook:653
+msgid "<![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]>"
+msgstr ""
+
+#: index.docbook:655
+msgid "<![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr ""
+
+#: index.docbook:657
+msgid "Likewise, <literal>is null</literal> and <literal>is not null</literal> may be used to test for null values."
+msgstr ""
+
+#: index.docbook:662
+msgid "Booleans may be easily used in expressions by declaring HQL query substitutions in Hibernate configuration:"
+msgstr ""
+
+#: index.docbook:667
+msgid "<![CDATA[<property name=\"hibernate.query.substitutions\">true 1, false 0</property>]]>"
+msgstr ""
+
+#: index.docbook:669
+msgid "This will replace the keywords <literal>true</literal> and <literal>false</literal> with the literals <literal>1</literal> and <literal>0</literal> in the translated SQL from this HQL:"
+msgstr ""
+
+#: index.docbook:674
+msgid "<![CDATA[from Cat cat where cat.alive = true]]>"
+msgstr ""
+
+#: index.docbook:676
+msgid "You may test the size of a collection with the special property <literal>size</literal>, or the special <literal>size()</literal> function."
+msgstr ""
+
+#: index.docbook:681
+msgid "<![CDATA[from Cat cat where cat.kittens.size > 0]]>"
+msgstr ""
+
+#: index.docbook:683
+msgid "<![CDATA[from Cat cat where size(cat.kittens) > 0]]>"
+msgstr ""
+
+#: index.docbook:685
+msgid "For indexed collections, you may refer to the minimum and maximum indices using <literal>minindex</literal> and <literal>maxindex</literal> functions. Similarly, you may refer to the minimum and maximum elements of a collection of basic type using the <literal>minelement</literal> and <literal>maxelement</literal> functions."
+msgstr ""
+
+#: index.docbook:693
+msgid "<![CDATA[from Calendar cal where maxelement(cal.holidays) > current_date]]>"
+msgstr ""
+
+#: index.docbook:695
+msgid "<![CDATA[from Order order where maxindex(order.items) > 100]]>"
+msgstr ""
+
+#: index.docbook:697
+msgid "<![CDATA[from Order order where minelement(order.items) > 10000]]>"
+msgstr ""
+
+#: index.docbook:699
+msgid "The SQL functions <literal>any, some, all, exists, in</literal> are supported when passed the element or index set of a collection (<literal>elements</literal> and <literal>indices</literal> functions) or the result of a subquery (see below)."
+msgstr ""
+
+#: index.docbook:705
+msgid ""
+ "<![CDATA[select mother from Cat as mother, Cat as kit\n"
+ "where kit in elements(foo.kittens)]]>"
+msgstr ""
+
+#: index.docbook:707
+msgid ""
+ "<![CDATA[select p from NameList list, Person p\n"
+ "where p.name = some elements(list.names)]]>"
+msgstr ""
+
+#: index.docbook:709
+msgid "<![CDATA[from Cat cat where exists elements(cat.kittens)]]>"
+msgstr ""
+
+#: index.docbook:711
+msgid "<![CDATA[from Player p where 3 > all elements(p.scores)]]>"
+msgstr ""
+
+#: index.docbook:713
+msgid "<![CDATA[from Show show where 'fizard' in indices(show.acts)]]>"
+msgstr ""
+
+#: index.docbook:715
+msgid "Note that these constructs - <literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal> - may only be used in the where clause in Hibernate3."
+msgstr ""
+
+#: index.docbook:722
+msgid "Elements of indexed collections (arrays, lists, maps) may be referred to by index (in a where clause only):"
+msgstr ""
+
+#: index.docbook:727
+msgid "<![CDATA[from Order order where order.items[0].id = 1234]]>"
+msgstr ""
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[select person from Person person, Calendar calendar\n"
+ "where calendar.holidays['national day'] = person.birthDay\n"
+ " and person.nationality.calendar = calendar]]>"
+msgstr ""
+
+#: index.docbook:731
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11]]>"
+msgstr ""
+
+#: index.docbook:733
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ maxindex(order.items) ] = item and order.id = 11]]>"
+msgstr ""
+
+#: index.docbook:735
+msgid "The expression inside <literal>[]</literal> may even be an arithmetic expression."
+msgstr ""
+
+#: index.docbook:739
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ size(order.items) - 1 ] = item]]>"
+msgstr ""
+
+#: index.docbook:741
+msgid "HQL also provides the built-in <literal>index()</literal> function, for elements of a one-to-many association or collection of values."
+msgstr ""
+
+#: index.docbook:746
+msgid ""
+ "<![CDATA[select item, index(item) from Order order\n"
+ " join order.items item\n"
+ "where index(item) < 5]]>"
+msgstr ""
+
+#: index.docbook:748
+msgid "Scalar SQL functions supported by the underlying database may be used"
+msgstr ""
+
+#: index.docbook:752
+msgid "<![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]>"
+msgstr ""
+
+#: index.docbook:754
+msgid "If you are not yet convinced by all this, think how much longer and less readable the following query would be in SQL:"
+msgstr ""
+
+#: index.docbook:759
+msgid ""
+ "<![CDATA[select cust\n"
+ "from Product prod,\n"
+ " Store store\n"
+ " inner join store.customers cust\n"
+ "where prod.name = 'widget'\n"
+ " and store.location.name in ( 'Melbourne', 'Sydney' )\n"
+ " and prod = all elements(cust.currentOrder.lineItems)]]>"
+msgstr ""
+
+#: index.docbook:761
+msgid "<emphasis>Hint:</emphasis> something like"
+msgstr ""
+
+#: index.docbook:765
+msgid ""
+ "<![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order\n"
+ "FROM customers cust,\n"
+ " stores store,\n"
+ " locations loc,\n"
+ " store_customers sc,\n"
+ " product prod\n"
+ "WHERE prod.name = 'widget'\n"
+ " AND store.loc_id = loc.id\n"
+ " AND loc.name IN ( 'Melbourne', 'Sydney' )\n"
+ " AND sc.store_id = store.id\n"
+ " AND sc.cust_id = cust.id\n"
+ " AND prod.id = ALL(\n"
+ " SELECT item.prod_id\n"
+ " FROM line_items item, orders o\n"
+ " WHERE item.order_id = o.id\n"
+ " AND cust.current_order = o.id\n"
+ " )]]>"
+msgstr ""
+
+#: index.docbook:770
+msgid "The order by clause"
+msgstr ""
+
+#: index.docbook:772
+msgid "The list returned by a query may be ordered by any property of a returned class or components:"
+msgstr ""
+
+#: index.docbook:776
+msgid ""
+ "<![CDATA[from DomesticCat cat\n"
+ "order by cat.name asc, cat.weight desc, cat.birthdate]]>"
+msgstr ""
+
+#: index.docbook:778
+msgid "The optional <literal>asc</literal> or <literal>desc</literal> indicate ascending or descending order respectively."
+msgstr ""
+
+#: index.docbook:785
+msgid "The group by clause"
+msgstr ""
+
+#: index.docbook:787
+msgid "A query that returns aggregate values may be grouped by any property of a returned class or components:"
+msgstr ""
+
+#: index.docbook:791
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color]]>"
+msgstr ""
+
+#: index.docbook:793
+msgid ""
+ "<![CDATA[select foo.id, avg(name), max(name)\n"
+ "from Foo foo join foo.names name\n"
+ "group by foo.id]]>"
+msgstr ""
+
+#: index.docbook:795
+msgid "A <literal>having</literal> clause is also allowed."
+msgstr ""
+
+#: index.docbook:799
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color\n"
+ "having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]>"
+msgstr ""
+
+#: index.docbook:801
+msgid "SQL functions and aggregate functions are allowed in the <literal>having</literal> and <literal>order by</literal> clauses, if supported by the underlying database (eg. not in MySQL)."
+msgstr ""
+
+#: index.docbook:807
+msgid ""
+ "<![CDATA[select cat\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.name, cat.other, cat.properties\n"
+ "having avg(kitten.weight) > 100\n"
+ "order by count(kitten) asc, sum(kitten.weight) desc]]>"
+msgstr ""
+
+#: index.docbook:809
+msgid "Note that neither the <literal>group by</literal> clause nor the <literal>order by</literal> clause may contain arithmetic expressions. Also note that Hibernate currently does not expand a grouped entity, so you can't write <literal>group by cat</literal> if all properties of <literal>cat</literal> are non-aggregated. You have to list all non-aggregated properties explicitly."
+msgstr ""
+
+#: index.docbook:821
+msgid "Subqueries"
+msgstr ""
+
+#: index.docbook:823
+msgid "For databases that support subselects, Hibernate supports subqueries within queries. A subquery must be surrounded by parentheses (often by an SQL aggregate function call). Even correlated subqueries (subqueries that refer to an alias in the outer query) are allowed."
+msgstr ""
+
+#: index.docbook:829
+msgid ""
+ "<![CDATA[from Cat as fatcat\n"
+ "where fatcat.weight > (\n"
+ " select avg(cat.weight) from DomesticCat cat\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:831
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name = some (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:833
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not exists (\n"
+ " from Cat as mate where mate.mate = cat\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:835
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name not in (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:837
+msgid ""
+ "<![CDATA[select cat.id, (select max(kit.weight) from cat.kitten kit)\n"
+ "from Cat as cat]]>"
+msgstr ""
+
+#: index.docbook:839
+msgid "Note that HQL subqueries may occur only in the select or where clauses."
+msgstr ""
+
+#: index.docbook:843
+msgid "Note that subqueries can also utilize <literal>row value constructor</literal> syntax. See <xref linkend=\"queryhql-tuple\"/> for more details."
+msgstr ""
+
+#: index.docbook:851
+msgid "HQL examples"
+msgstr ""
+
+#: index.docbook:853
+msgid "Hibernate queries can be quite powerful and complex. In fact, the power of the query language is one of Hibernate's main selling points. Here are some example queries very similar to queries that I used on a recent project. Note that most queries you will write are much simpler than these!"
+msgstr ""
+
+#: index.docbook:859
+msgid "The following query returns the order id, number of items and total value of the order for all unpaid orders for a particular customer and given minimum total value, ordering the results by total value. In determining the prices, it uses the current catalog. The resulting SQL query, against the <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal> and <literal>PRICE</literal> tables has four inner joins and an (uncorrelated) subselect."
+msgstr ""
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog.effectiveDate < sysdate\n"
+ " and catalog.effectiveDate >= all (\n"
+ " select cat.effectiveDate\n"
+ " from Catalog as cat\n"
+ " where cat.effectiveDate < sysdate\n"
+ " )\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr ""
+
+#: index.docbook:870
+msgid "What a monster! Actually, in real life, I'm not very keen on subqueries, so my query was really more like this:"
+msgstr ""
+
+#: index.docbook:875
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog = :currentCatalog\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr ""
+
+#: index.docbook:877
+msgid "The next query counts the number of payments in each status, excluding all payments in the <literal>AWAITING_APPROVAL</literal> status where the most recent status change was made by the current user. It translates to an SQL query with two inner joins and a correlated subselect against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> and <literal>PAYMENT_STATUS_CHANGE</literal> tables."
+msgstr ""
+
+#: index.docbook:885
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ " join payment.statusChanges as statusChange\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or (\n"
+ " statusChange.timeStamp = (\n"
+ " select max(change.timeStamp)\n"
+ " from PaymentStatusChange change\n"
+ " where change.payment = payment\n"
+ " )\n"
+ " and statusChange.user <> :currentUser\n"
+ " )\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr ""
+
+#: index.docbook:887
+msgid "If I would have mapped the <literal>statusChanges</literal> collection as a list, instead of a set, the query would have been much simpler to write."
+msgstr ""
+
+#: index.docbook:892
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr ""
+
+#: index.docbook:894
+msgid "The next query uses the MS SQL Server <literal>isNull()</literal> function to return all the accounts and unpaid payments for the organization to which the current user belongs. It translates to an SQL query with three inner joins, an outer join and a subselect against the <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> and <literal>ORG_USER</literal> tables."
+msgstr ""
+
+#: index.docbook:903
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser in elements(account.holder.users)\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr ""
+
+#: index.docbook:905
+msgid "For some databases, we would need to do away with the (correlated) subselect."
+msgstr ""
+
+#: index.docbook:909
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " join account.holder.users as user\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser = user\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr ""
+
+#: index.docbook:914
+msgid "Bulk update and delete"
+msgstr ""
+
+#: index.docbook:916
+msgid "HQL now supports <literal>update</literal>, <literal>delete</literal> and <literal>insert ... select ...</literal> statements. See <xref linkend=\"batch-direct\"/> for details."
+msgstr ""
+
+#: index.docbook:924
+msgid "Tips & Tricks"
+msgstr ""
+
+#: index.docbook:926
+msgid "You can count the number of query results without actually returning them:"
+msgstr ""
+
+#: index.docbook:930
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue()]]>"
+msgstr ""
+
+#: index.docbook:932
+msgid "To order a result by the size of a collection, use the following query:"
+msgstr ""
+
+#: index.docbook:936
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "order by count(msg)]]>"
+msgstr ""
+
+#: index.docbook:938
+msgid "If your database supports subselects, you can place a condition upon selection size in the where clause of your query:"
+msgstr ""
+
+#: index.docbook:943
+msgid "<![CDATA[from User usr where size(usr.messages) >= 1]]>"
+msgstr ""
+
+#: index.docbook:945
+msgid "If your database doesn't support subselects, use the following query:"
+msgstr ""
+
+#: index.docbook:949
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User usr.name\n"
+ " join usr.messages msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) >= 1]]>"
+msgstr ""
+
+#: index.docbook:951
+msgid "As this solution can't return a <literal>User</literal> with zero messages because of the inner join, the following form is also useful:"
+msgstr ""
+
+#: index.docbook:956
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) = 0]]>"
+msgstr ""
+
+#: index.docbook:958
+msgid "Properties of a JavaBean can be bound to named query parameters:"
+msgstr ""
+
+#: index.docbook:962
+msgid ""
+ "<![CDATA[Query q = s.createQuery(\"from foo Foo as foo where foo.name=:name and foo.size=:size\");\n"
+ "q.setProperties(fooBean); // fooBean has getName() and getSize()\n"
+ "List foos = q.list();]]>"
+msgstr ""
+
+#: index.docbook:964
+msgid "Collections are pageable by using the <literal>Query</literal> interface with a filter:"
+msgstr ""
+
+#: index.docbook:968
+msgid ""
+ "<![CDATA[Query q = s.createFilter( collection, \"\" ); // the trivial filter\n"
+ "q.setMaxResults(PAGE_SIZE);\n"
+ "q.setFirstResult(PAGE_SIZE * pageNumber);\n"
+ "List page = q.list();]]>"
+msgstr ""
+
+#: index.docbook:970
+msgid "Collection elements may be ordered or grouped using a query filter:"
+msgstr ""
+
+#: index.docbook:974
+msgid ""
+ "<![CDATA[Collection orderedCollection = s.filter( collection, \"order by this.amount\" );\n"
+ "Collection counts = s.filter( collection, \"select this.type, count(this) group by this.type\" );]]>"
+msgstr ""
+
+#: index.docbook:976
+msgid "You can find the size of a collection without initializing it:"
+msgstr ""
+
+#: index.docbook:980
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue();]]>"
+msgstr ""
+
+#: index.docbook:985
+msgid "Components"
+msgstr ""
+
+#: index.docbook:987
+msgid "Components might be used in just about every way that simple value types can be used in HQL queries. They can appear in the <literal>select</literal> clause:"
+msgstr ""
+
+#: index.docbook:992, index.docbook:1038
+msgid "<![CDATA[select p.name from from Person p]]>"
+msgstr ""
+
+#: index.docbook:993
+msgid "<![CDATA[select p.name.first from from Person p]]>"
+msgstr ""
+
+#: index.docbook:995
+msgid "where the Person's name property is a component. Components can also be used in the <literal>where</literal> clause:"
+msgstr ""
+
+#: index.docbook:1000
+msgid "<![CDATA[from from Person p where p.name = :name]]>"
+msgstr ""
+
+#: index.docbook:1001
+msgid "<![CDATA[from from Person p where p.name.first = :firstName]]>"
+msgstr ""
+
+#: index.docbook:1003
+msgid "Components can also be used in the <literal>order by</literal> clause:"
+msgstr ""
+
+#: index.docbook:1007
+msgid "<![CDATA[from from Person p order by p.name]]>"
+msgstr ""
+
+#: index.docbook:1008
+msgid "<![CDATA[from from Person p order by p.name.first]]>"
+msgstr ""
+
+#: index.docbook:1010
+msgid "Another common use of components is in <xref linkend=\"queryhql-tuple\"/>row value constructors."
+msgstr ""
+
+#: index.docbook:1016
+msgid "Row value constructor syntax"
+msgstr ""
+
+#: index.docbook:1018
+msgid "HQL supports the use of ANSI SQL <literal>row value constructor</literal> syntax (sometimes called <literal>tuple</literal> syntax), even though the underlying database may not support that notion. Here we are generally referring to multi-valued comparisons, typically associated with components. Consider an entity Person which defines a name component:"
+msgstr ""
+
+#: index.docbook:1025
+msgid "<![CDATA[from Person p where p.name.first='John' and p.name.last='Jingleheimer-Schmidt']]>"
+msgstr ""
+
+#: index.docbook:1027
+msgid "That's valid syntax, although a little verbose. It be nice to make this a bit more concise and use <literal>row value constructor</literal> syntax:"
+msgstr ""
+
+#: index.docbook:1032
+msgid "<![CDATA[from Person p where p.name=('John', 'Jingleheimer-Schmidt')]]>"
+msgstr ""
+
+#: index.docbook:1034
+msgid "It can also be useful to specify this in the <literal>select</literal> clause:"
+msgstr ""
+
+#: index.docbook:1040
+msgid "Another time using <literal>row value constructor</literal> syntax can be beneficial is when using subqueries needing to compare against multiple values:"
+msgstr ""
+
+#: index.docbook:1045
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not ( cat.name, cat.color ) in (\n"
+ " select cat.name, cat.color from DomesticCat cat\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:1047
+msgid "One thing to consider when deciding if you want to use this syntax is that the query will be dependent upon the ordering of the component sub-properties in the metadata."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/query_sql.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/query_sql.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/query_sql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,818 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Native SQL"
+msgstr ""
+
+#: index.docbook:7
+msgid "You may also express queries in the native SQL dialect of your database. This is useful if you want to utilize database specific features such as query hints or the <literal>CONNECT</literal> keyword in Oracle. It also provides a clean migration path from a direct SQL/JDBC based application to Hibernate."
+msgstr ""
+
+#: index.docbook:13
+msgid "Hibernate3 allows you to specify handwritten SQL (including stored procedures) for all create, update, delete, and load operations."
+msgstr ""
+
+#: index.docbook:17
+msgid "Using a <literal>SQLQuery</literal>"
+msgstr ""
+
+#: index.docbook:19
+msgid "Execution of native SQL queries is controlled via the <literal>SQLQuery</literal> interface, which is obtained by calling <literal>Session.createSQLQuery()</literal>. The following describes how to use this API for querying."
+msgstr ""
+
+#: index.docbook:25
+msgid "Scalar queries"
+msgstr ""
+
+#: index.docbook:27
+msgid "The most basic SQL query is to get a list of scalars (values)."
+msgstr ""
+
+#: index.docbook:30
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").list();\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").list();\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:32
+msgid "These will both return a List of Object arrays (Object[]) with scalar values for each column in the CATS table. Hibernate will use ResultSetMetadata to deduce the actual order and types of the returned scalar values."
+msgstr ""
+
+#: index.docbook:37
+msgid "To avoid the overhead of using <literal>ResultSetMetadata</literal> or simply to be more explicit in what is returned one can use <literal>addScalar()</literal>."
+msgstr ""
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\", Hibernate.STRING)\n"
+ " .addScalar(\"BIRTHDATE\", Hibernate.DATE)\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:43, index.docbook:89, index.docbook:170, index.docbook:321
+msgid "This query specified:"
+msgstr ""
+
+#: index.docbook:47, index.docbook:93, index.docbook:325
+msgid "the SQL query string"
+msgstr ""
+
+#: index.docbook:51
+msgid "the columns and types to return"
+msgstr ""
+
+#: index.docbook:55
+msgid "This will still return Object arrays, but now it will not use <literal>ResultSetMetdata</literal> but will instead explicitly get the ID, NAME and BIRTHDATE column as respectively a Long, String and a Short from the underlying resultset. This also means that only these three columns will be returned, even though the query is using <literal>*</literal> and could return more than the three listed columns."
+msgstr ""
+
+#: index.docbook:63
+msgid "It is possible to leave out the type information for all or some of the scalars."
+msgstr ""
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\")\n"
+ " .addScalar(\"BIRTHDATE\")\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:68
+msgid "This is essentially the same query as before, but now <literal>ResultSetMetaData</literal> is used to decide the type of NAME and BIRTHDATE where as the type of ID is explicitly specified."
+msgstr ""
+
+#: index.docbook:72
+msgid "How the java.sql.Types returned from ResultSetMetaData is mapped to Hibernate types is controlled by the Dialect. If a specific type is not mapped or does not result in the expected type it is possible to customize it via calls to <literal>registerHibernateType</literal> in the Dialect."
+msgstr ""
+
+#: index.docbook:80
+msgid "Entity queries"
+msgstr ""
+
+#: index.docbook:82
+msgid "The above queries were all about returning scalar values, basically returning the \"raw\" values from the resultset. The following shows how to get entity objects from a native sql query via <literal>addEntity()</literal>."
+msgstr ""
+
+#: index.docbook:87
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").addEntity(Cat.class);\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:97
+msgid "the entity returned by the query"
+msgstr ""
+
+#: index.docbook:101
+msgid "Assuming that Cat is mapped as a class with the columns ID, NAME and BIRTHDATE the above queries will both return a List where each element is a Cat entity."
+msgstr ""
+
+#: index.docbook:105
+msgid "If the entity is mapped with a <literal>many-to-one</literal> to another entity it is required to also return this when performing the native query, otherwise a database specific \"column not found\" error will occur. The additional columns will automatically be returned when using the * notation, but we prefer to be explicit as in the following example for a <literal>many-to-one</literal> to a <literal>Dog</literal>:"
+msgstr ""
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:115
+msgid "This will allow cat.getDog() to function properly."
+msgstr ""
+
+#: index.docbook:119
+msgid "Handling associations and collections"
+msgstr ""
+
+#: index.docbook:121
+msgid "It is possible to eagerly join in the <literal>Dog</literal> to avoid the possible extra roundtrip for initializing the proxy. This is done via the <literal>addJoin()</literal> method, which allows you to join in an association or collection."
+msgstr ""
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.ID, NAME, BIRTHDATE, DOG_ID, D_ID, D_NAME FROM CATS c, DOGS d WHERE c.DOG_ID = d.D_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dog\");\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:128
+msgid "In this example the returned <literal>Cat</literal>'s will have their <literal>dog</literal> property fully initialized without any extra roundtrip to the database. Notice that we added a alias name (\"cat\") to be able to specify the target property path of the join. It is possible to do the same eager joining for collections, e.g. if the <literal>Cat</literal> had a one-to-many to <literal>Dog</literal> instead."
+msgstr ""
+
+#: index.docbook:136
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, D_ID, D_NAME, CAT_ID FROM CATS c, DOGS d WHERE c.ID = d.CAT_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dogs\");\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:138
+msgid "At this stage we are reaching the limits of what is possible with native queries without starting to enhance the sql queries to make them usable in Hibernate; the problems starts to arise when returning multiple entities of the same type or when the default alias/column names are not enough."
+msgstr ""
+
+#: index.docbook:146
+msgid "Returning multiple entities"
+msgstr ""
+
+#: index.docbook:148
+msgid "Until now the result set column names are assumed to be the same as the column names specified in the mapping document. This can be problematic for SQL queries which join multiple tables, since the same column names may appear in more than one table."
+msgstr ""
+
+#: index.docbook:153
+msgid "Column alias injection is needed in the following query (which most likely will fail):"
+msgstr ""
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.*, m.* FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:158
+msgid "The intention for this query is to return two Cat instances per row, a cat and its mother. This will fail since there is a conflict of names since they are mapped to the same column names and on some databases the returned column aliases will most likely be on the form \"c.ID\", \"c.NAME\", etc. which are not equal to the columns specificed in the mappings (\"ID\" and \"NAME\")."
+msgstr ""
+
+#: index.docbook:165
+msgid "The following form is not vulnerable to column name duplication:"
+msgstr ""
+
+#: index.docbook:168
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:174
+msgid "the SQL query string, with placeholders for Hibernate to inject column aliases"
+msgstr ""
+
+#: index.docbook:179
+msgid "the entities returned by the query"
+msgstr ""
+
+#: index.docbook:183
+msgid "The {cat.*} and {mother.*} notation used above is a shorthand for \"all properties\". Alternatively, you may list the columns explicity, but even in this case we let Hibernate inject the SQL column aliases for each property. The placeholder for a column alias is just the property name qualified by the table alias. In the following example, we retrieve Cats and their mothers from a different table (cat_log) to the one declared in the mapping metadata. Notice that we may even use the property aliases in the where clause if we like."
+msgstr ""
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[String sql = \"SELECT ID as {c.id}, NAME as {c.name}, \" + \n"
+ " \"BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} \" +\n"
+ " \"FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID\";\n"
+ "\n"
+ "List loggedCats = sess.createSQLQuery(sql)\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class).list()\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:195
+msgid "Alias and property references"
+msgstr ""
+
+#: index.docbook:197
+msgid "For most cases the above alias injection is needed, but for queries relating to more complex mappings like composite properties, inheritance discriminators, collections etc. there are some specific aliases to use to allow Hibernate to inject the proper aliases."
+msgstr ""
+
+#: index.docbook:202
+msgid "The following table shows the different possibilities of using the alias injection. Note: the alias names in the result are examples, each alias will have a unique and probably different name when used."
+msgstr ""
+
+#: index.docbook:208
+msgid "Alias injection names"
+msgstr ""
+
+#: index.docbook:219
+msgid "Description"
+msgstr ""
+
+#: index.docbook:221
+msgid "Syntax"
+msgstr ""
+
+#: index.docbook:223
+msgid "Example"
+msgstr ""
+
+#: index.docbook:229
+msgid "A simple property"
+msgstr ""
+
+#: index.docbook:231
+msgid "{[aliasname].[propertyname]"
+msgstr ""
+
+#: index.docbook:233
+msgid "A_NAME as {item.name}"
+msgstr ""
+
+#: index.docbook:237
+msgid "A composite property"
+msgstr ""
+
+#: index.docbook:239
+msgid "{[aliasname].[componentname].[propertyname]}"
+msgstr ""
+
+#: index.docbook:241
+msgid "CURRENCY as {item.amount.currency}, VALUE as {item.amount.value}"
+msgstr ""
+
+#: index.docbook:246
+msgid "Discriminator of an entity"
+msgstr ""
+
+#: index.docbook:248
+msgid "{[aliasname].class}"
+msgstr ""
+
+#: index.docbook:250
+msgid "DISC as {item.class}"
+msgstr ""
+
+#: index.docbook:254
+msgid "All properties of an entity"
+msgstr ""
+
+#: index.docbook:256, index.docbook:304
+msgid "{[aliasname].*}"
+msgstr ""
+
+#: index.docbook:258
+msgid "{item.*}"
+msgstr ""
+
+#: index.docbook:262
+msgid "A collection key"
+msgstr ""
+
+#: index.docbook:264
+msgid "{[aliasname].key}"
+msgstr ""
+
+#: index.docbook:266
+msgid "ORGID as {coll.key}"
+msgstr ""
+
+#: index.docbook:270
+msgid "The id of an collection"
+msgstr ""
+
+#: index.docbook:272
+msgid "{[aliasname].id}"
+msgstr ""
+
+#: index.docbook:274
+msgid "EMPID as {coll.id}"
+msgstr ""
+
+#: index.docbook:278
+msgid "The element of an collection"
+msgstr ""
+
+#: index.docbook:280
+msgid "{[aliasname].element}"
+msgstr ""
+
+#: index.docbook:282
+msgid "XID as {coll.element}"
+msgstr ""
+
+#: index.docbook:286
+msgid "roperty of the element in the collection"
+msgstr ""
+
+#: index.docbook:288
+msgid "{[aliasname].element.[propertyname]}"
+msgstr ""
+
+#: index.docbook:290
+msgid "NAME as {coll.element.name}"
+msgstr ""
+
+#: index.docbook:294
+msgid "All properties of the element in the collection"
+msgstr ""
+
+#: index.docbook:296
+msgid "{[aliasname].element.*}"
+msgstr ""
+
+#: index.docbook:298
+msgid "{coll.element.*}"
+msgstr ""
+
+#: index.docbook:302
+msgid "All properties of the the collection"
+msgstr ""
+
+#: index.docbook:306
+msgid "{coll.*}"
+msgstr ""
+
+#: index.docbook:315
+msgid "Returning non-managed entities"
+msgstr ""
+
+#: index.docbook:317
+msgid "It is possible to apply a ResultTransformer to native sql queries. Allowing it to e.g. return non-managed entities."
+msgstr ""
+
+#: index.docbook:319
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT NAME, BIRTHDATE FROM CATS\")\n"
+ " .setResultTransformer(Transformers.aliasToBean(CatDTO.class))]]>"
+msgstr ""
+
+#: index.docbook:329
+msgid "a result transformer"
+msgstr ""
+
+#: index.docbook:333
+msgid "The above query will return a list of <literal>CatDTO</literal> which has been instantiated and injected the values of NAME and BIRTHNAME into its corresponding properties or fields."
+msgstr ""
+
+#: index.docbook:340
+msgid "Handling inheritance"
+msgstr ""
+
+#: index.docbook:342
+msgid "Native sql queries which query for entities that is mapped as part of an inheritance must include all properties for the baseclass and all it subclasses."
+msgstr ""
+
+#: index.docbook:348
+msgid "Parameters"
+msgstr ""
+
+#: index.docbook:350
+msgid "Native sql queries support positional as well as named parameters:"
+msgstr ""
+
+#: index.docbook:353
+msgid ""
+ "<![CDATA[Query query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like ?\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(0, \"Pus%\").list();\n"
+ " \n"
+ "query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like :name\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(\"name\", \"Pus%\").list(); ]]>"
+msgstr ""
+
+#: index.docbook:361
+msgid "Named SQL queries"
+msgstr ""
+
+#: index.docbook:363
+msgid "Named SQL queries may be defined in the mapping document and called in exactly the same way as a named HQL query. In this case, we do <emphasis>not</emphasis> need to call <literal>addEntity()</literal>."
+msgstr ""
+
+#: index.docbook:368
+msgid ""
+ "<![CDATA[<sql-query name=\"persons\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex}\n"
+ " FROM PERSON person\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:370
+msgid ""
+ "<![CDATA[List people = sess.getNamedQuery(\"persons\")\n"
+ " .setString(\"namePattern\", namePattern)\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:372
+msgid "The <literal><return-join></literal> and <literal><load-collection></literal> elements are used to join associations and define queries which initialize collections, respectively."
+msgstr ""
+
+#: index.docbook:377
+msgid ""
+ "<![CDATA[<sql-query name=\"personsWith\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:379
+msgid "A named SQL query may return a scalar value. You must declare the column alias and Hibernate type using the <literal><return-scalar></literal> element:"
+msgstr ""
+
+#: index.docbook:383
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return-scalar column=\"name\" type=\"string\"/>\n"
+ " <return-scalar column=\"age\" type=\"long\"/>\n"
+ " SELECT p.NAME AS name,\n"
+ " p.AGE AS age,\n"
+ " FROM PERSON p WHERE p.NAME LIKE 'Hiber%'\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:385
+msgid "You can externalize the resultset mapping informations in a <literal><resultset></literal> element to either reuse them accross several named queries or through the <literal>setResultSetMapping()</literal> API."
+msgstr ""
+
+#: index.docbook:390
+msgid ""
+ "<![CDATA[<resultset name=\"personAddress\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ "</resultset>\n"
+ "\n"
+ "<sql-query name=\"personsWith\" resultset-ref=\"personAddress\">\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:392
+msgid "You can alternatively use the resultset mapping information in your hbm files directly in java code."
+msgstr ""
+
+#: index.docbook:395
+msgid ""
+ "<![CDATA[List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .setResultSetMapping(\"catAndKitten\")\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:398
+msgid "Using return-property to explicitly specify column/alias names"
+msgstr ""
+
+#: index.docbook:401
+msgid "With <literal><return-property></literal> you can explicitly tell Hibernate what column aliases to use, instead of using the <literal>{}</literal>-syntax to let Hibernate inject its own aliases."
+msgstr ""
+
+#: index.docbook:406
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return alias=\"person\" class=\"eg.Person\">\n"
+ " <return-property name=\"name\" column=\"myName\"/>\n"
+ " <return-property name=\"age\" column=\"myAge\"/>\n"
+ " <return-property name=\"sex\" column=\"mySex\"/>\n"
+ " </return>\n"
+ " SELECT person.NAME AS myName,\n"
+ " person.AGE AS myAge,\n"
+ " person.SEX AS mySex,\n"
+ " FROM PERSON person WHERE person.NAME LIKE :name\n"
+ "</sql-query>\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:408
+msgid "<literal><return-property></literal> also works with multiple columns. This solves a limitation with the <literal>{}</literal>-syntax which can not allow fine grained control of multi-column properties."
+msgstr ""
+
+#: index.docbook:413
+msgid ""
+ "<![CDATA[<sql-query name=\"organizationCurrentEmployments\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " <return-property name=\"endDate\" column=\"myEndDate\"/>\n"
+ " </return>\n"
+ " SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},\n"
+ " STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},\n"
+ " REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT\n"
+ " WHERE EMPLOYER = :id AND ENDDATE IS NULL\n"
+ " ORDER BY STARTDATE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:415
+msgid "Notice that in this example we used <literal><return-property></literal> in combination with the <literal>{}</literal>-syntax for injection. Allowing users to choose how they want to refer column and properties."
+msgstr ""
+
+#: index.docbook:420
+msgid "If your mapping has a discriminator you must use <literal><return-discriminator></literal> to specify the discriminator column."
+msgstr ""
+
+#: index.docbook:426
+msgid "Using stored procedures for querying"
+msgstr ""
+
+#: index.docbook:428
+msgid "Hibernate 3 introduces support for queries via stored procedures and functions. Most of the following documentation is equivalent for both. The stored procedure/function must return a resultset as the first out-parameter to be able to work with Hibernate. An example of such a stored function in Oracle 9 and higher is as follows:"
+msgstr ""
+
+#: index.docbook:434
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION selectAllEmployments\n"
+ " RETURN SYS_REFCURSOR\n"
+ "AS\n"
+ " st_cursor SYS_REFCURSOR;\n"
+ "BEGIN\n"
+ " OPEN st_cursor FOR\n"
+ " SELECT EMPLOYEE, EMPLOYER,\n"
+ " STARTDATE, ENDDATE,\n"
+ " REGIONCODE, EID, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT;\n"
+ " RETURN st_cursor;\n"
+ " END;]]>"
+msgstr ""
+
+#: index.docbook:436
+msgid "To use this query in Hibernate you need to map it via a named query."
+msgstr ""
+
+#: index.docbook:439
+msgid ""
+ "<![CDATA[<sql-query name=\"selectAllEmployees_SP\" callable=\"true\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"employee\" column=\"EMPLOYEE\"/>\n"
+ " <return-property name=\"employer\" column=\"EMPLOYER\"/>\n"
+ " <return-property name=\"startDate\" column=\"STARTDATE\"/>\n"
+ " <return-property name=\"endDate\" column=\"ENDDATE\"/>\n"
+ " <return-property name=\"regionCode\" column=\"REGIONCODE\"/>\n"
+ " <return-property name=\"id\" column=\"EID\"/>\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " </return>\n"
+ " { ? = call selectAllEmployments() }\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:441
+msgid "Notice stored procedures currently only return scalars and entities. <literal><return-join></literal> and <literal><load-collection></literal> are not supported."
+msgstr ""
+
+#: index.docbook:446
+msgid "Rules/limitations for using stored procedures"
+msgstr ""
+
+#: index.docbook:448
+msgid "To use stored procedures with Hibernate the procedures/functions have to follow some rules. If they do not follow those rules they are not usable with Hibernate. If you still want to use these procedures you have to execute them via <literal>session.connection()</literal>. The rules are different for each database, since database vendors have different stored procedure semantics/syntax."
+msgstr ""
+
+#: index.docbook:455
+msgid "Stored procedure queries can't be paged with <literal>setFirstResult()/setMaxResults()</literal>."
+msgstr ""
+
+#: index.docbook:458
+msgid "Recommended call form is standard SQL92: <literal>{ ? = call functionName(<parameters>) }</literal> or <literal>{ ? = call procedureName(<parameters>}</literal>. Native call syntax is not supported."
+msgstr ""
+
+#: index.docbook:463
+msgid "For Oracle the following rules apply:"
+msgstr ""
+
+#: index.docbook:467
+msgid "A function must return a result set. The first parameter of a procedure must be an <literal>OUT</literal> that returns a result set. This is done by using a <literal>SYS_REFCURSOR</literal> type in Oracle 9 or 10. In Oracle you need to define a <literal>REF CURSOR</literal> type, see Oracle literature."
+msgstr ""
+
+#: index.docbook:476
+msgid "For Sybase or MS SQL server the following rules apply:"
+msgstr ""
+
+#: index.docbook:480
+msgid "The procedure must return a result set. Note that since these servers can/will return multiple result sets and update counts, Hibernate will iterate the results and take the first result that is a result set as its return value. Everything else will be discarded."
+msgstr ""
+
+#: index.docbook:488
+msgid "If you can enable <literal>SET NOCOUNT ON</literal> in your procedure it will probably be more efficient, but this is not a requirement."
+msgstr ""
+
+#: index.docbook:498
+msgid "Custom SQL for create, update and delete"
+msgstr ""
+
+#: index.docbook:500
+msgid "Hibernate3 can use custom SQL statements for create, update, and delete operations. The class and collection persisters in Hibernate already contain a set of configuration time generated strings (insertsql, deletesql, updatesql etc.). The mapping tags <literal><sql-insert></literal>, <literal><sql-delete></literal>, and <literal><sql-update></literal> override these strings:"
+msgstr ""
+
+#: index.docbook:508
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>\n"
+ " <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>\n"
+ " <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:510
+msgid "The SQL is directly executed in your database, so you are free to use any dialect you like. This will of course reduce the portability of your mapping if you use database specific SQL."
+msgstr ""
+
+#: index.docbook:514
+msgid "Stored procedures are supported if the <literal>callable</literal> attribute is set:"
+msgstr ""
+
+#: index.docbook:517
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert callable=\"true\">{call createPerson (?, ?)}</sql-insert>\n"
+ " <sql-delete callable=\"true\">{? = call deletePerson (?)}</sql-delete>\n"
+ " <sql-update callable=\"true\">{? = call updatePerson (?, ?)}</sql-update>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:519
+msgid "The order of the positional parameters are currently vital, as they must be in the same sequence as Hibernate expects them."
+msgstr ""
+
+#: index.docbook:522
+msgid "You can see the expected order by enabling debug logging for the <literal>org.hibernate.persister.entity</literal> level. With this level enabled Hibernate will print out the static SQL that is used to create, update, delete etc. entities. (To see the expected sequence, remember to not include your custom SQL in the mapping files as that will override the Hibernate generated static sql.)"
+msgstr ""
+
+#: index.docbook:529
+msgid "The stored procedures are in most cases (read: better do it than not) required to return the number of rows inserted/updated/deleted, as Hibernate has some runtime checks for the success of the statement. Hibernate always registers the first statement parameter as a numeric output parameter for the CUD operations:"
+msgstr ""
+
+#: index.docbook:535
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)\n"
+ " RETURN NUMBER IS\n"
+ "BEGIN\n"
+ "\n"
+ " update PERSON\n"
+ " set\n"
+ " NAME = uname,\n"
+ " where\n"
+ " ID = uid;\n"
+ "\n"
+ " return SQL%ROWCOUNT;\n"
+ "\n"
+ "END updatePerson;]]>"
+msgstr ""
+
+#: index.docbook:539
+msgid "Custom SQL for loading"
+msgstr ""
+
+#: index.docbook:541
+msgid "You may also declare your own SQL (or HQL) queries for entity loading:"
+msgstr ""
+
+#: index.docbook:544
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\" lock-mode=\"upgrade\"/>\n"
+ " SELECT NAME AS {pers.name}, ID AS {pers.id}\n"
+ " FROM PERSON\n"
+ " WHERE ID=?\n"
+ " FOR UPDATE\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:546
+msgid "This is just a named query declaration, as discussed earlier. You may reference this named query in a class mapping:"
+msgstr ""
+
+#: index.docbook:549
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <loader query-ref=\"person\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:551
+msgid "This even works with stored procedures."
+msgstr ""
+
+#: index.docbook:553
+msgid "You may even define a query for collection loading:"
+msgstr ""
+
+#: index.docbook:555
+msgid ""
+ "<![CDATA[<set name=\"employments\" inverse=\"true\">\n"
+ " <key/>\n"
+ " <one-to-many class=\"Employment\"/>\n"
+ " <loader query-ref=\"employments\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:557
+msgid ""
+ "<![CDATA[<sql-query name=\"employments\">\n"
+ " <load-collection alias=\"emp\" role=\"Person.employments\"/>\n"
+ " SELECT {emp.*}\n"
+ " FROM EMPLOYMENT emp\n"
+ " WHERE EMPLOYER = :id\n"
+ " ORDER BY STARTDATE ASC, EMPLOYEE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:559
+msgid "You could even define an entity loader that loads a collection by join fetching:"
+msgstr ""
+
+#: index.docbook:562
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\"/>\n"
+ " <return-join alias=\"emp\" property=\"pers.employments\"/>\n"
+ " SELECT NAME AS {pers.*}, {emp.*}\n"
+ " FROM PERSON pers\n"
+ " LEFT OUTER JOIN EMPLOYMENT emp\n"
+ " ON pers.ID = emp.PERSON_ID\n"
+ " WHERE ID=?\n"
+ "</sql-query>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/quickstart.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/quickstart.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/quickstart.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,12 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/session_api.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/session_api.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/session_api.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,982 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Working with objects"
+msgstr ""
+
+#: index.docbook:7
+msgid "Hibernate is a full object/relational mapping solution that not only shields the developer from the details of the underlying database management system, but also offers <emphasis>state management</emphasis> of objects. This is, contrary to the management of SQL <literal>statements</literal> in common JDBC/SQL persistence layers, a very natural object-oriented view of persistence in Java applications."
+msgstr ""
+
+#: index.docbook:16
+msgid "In other words, Hibernate application developers should always think about the <emphasis>state</emphasis> of their objects, and not necessarily about the execution of SQL statements. This part is taken care of by Hibernate and is only relevant for the application developer when tuning the performance of the system."
+msgstr ""
+
+#: index.docbook:24
+msgid "Hibernate object states"
+msgstr ""
+
+#: index.docbook:26
+msgid "Hibernate defines and supports the following object states:"
+msgstr ""
+
+#: index.docbook:32
+msgid "<emphasis>Transient</emphasis> - an object is transient if it has just been instantiated using the <literal>new</literal> operator, and it is not associated with a Hibernate <literal>Session</literal>. It has no persistent representation in the database and no identifier value has been assigned. Transient instances will be destroyed by the garbage collector if the application doesn't hold a reference anymore. Use the Hibernate <literal>Session</literal> to make an object persistent (and let Hibernate take care of the SQL statements that need to be executed for this transition)."
+msgstr ""
+
+#: index.docbook:44
+msgid "<emphasis>Persistent</emphasis> - a persistent instance has a representation in the database and an identifier value. It might just have been saved or loaded, however, it is by definition in the scope of a <literal>Session</literal>. Hibernate will detect any changes made to an object in persistent state and synchronize the state with the database when the unit of work completes. Developers don't execute manual <literal>UPDATE</literal> statements, or <literal>DELETE</literal> statements when an object should be made transient."
+msgstr ""
+
+#: index.docbook:55
+msgid "<emphasis>Detached</emphasis> - a detached instance is an object that has been persistent, but its <literal>Session</literal> has been closed. The reference to the object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be reattached to a new <literal>Session</literal> at a later point in time, making it (and all the modifications) persistent again. This feature enables a programming model for long running units of work that require user think-time. We call them <emphasis>application transactions</emphasis>, i.e. a unit of work from the point of view of the user."
+msgstr ""
+
+#: index.docbook:69
+msgid "We'll now discuss the states and state transitions (and the Hibernate methods that trigger a transition) in more detail."
+msgstr ""
+
+#: index.docbook:77
+msgid "Making objects persistent"
+msgstr ""
+
+#: index.docbook:79
+msgid "Newly instantiated instances of a a persistent class are considered <emphasis>transient</emphasis> by Hibernate. We can make a transient instance <emphasis>persistent</emphasis> by associating it with a session:"
+msgstr ""
+
+#: index.docbook:86
+msgid ""
+ "<![CDATA[DomesticCat fritz = new DomesticCat();\n"
+ "fritz.setColor(Color.GINGER);\n"
+ "fritz.setSex('M');\n"
+ "fritz.setName(\"Fritz\");\n"
+ "Long generatedId = (Long) sess.save(fritz);]]>"
+msgstr ""
+
+#: index.docbook:88
+msgid "If <literal>Cat</literal> has a generated identifier, the identifier is generated and assigned to the <literal>cat</literal> when <literal>save()</literal> is called. If <literal>Cat</literal> has an <literal>assigned</literal> identifier, or a composite key, the identifier should be assigned to the <literal>cat</literal> instance before calling <literal>save()</literal>. You may also use <literal>persist()</literal> instead of <literal>save()</literal>, with the semantics defined in the EJB3 early draft."
+msgstr ""
+
+#: index.docbook:100
+msgid "<literal>persist()</literal> makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. <literal>persist()</literal> also guarantees that it will not execute an <literal>INSERT</literal> statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context."
+msgstr ""
+
+#: index.docbook:111
+msgid "<literal>save()</literal> does guarantee to return an identifier. If an INSERT has to be executed to get the identifier ( e.g. \"identity\" generator, not \"sequence\"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is problematic in a long-running conversation with an extended Session/persistence context."
+msgstr ""
+
+#: index.docbook:121
+msgid "Alternatively, you may assign the identifier using an overloaded version of <literal>save()</literal>."
+msgstr ""
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[DomesticCat pk = new DomesticCat();\n"
+ "pk.setColor(Color.TABBY);\n"
+ "pk.setSex('F');\n"
+ "pk.setName(\"PK\");\n"
+ "pk.setKittens( new HashSet() );\n"
+ "pk.addKitten(fritz);\n"
+ "sess.save( pk, new Long(1234) );]]>"
+msgstr ""
+
+#: index.docbook:128
+msgid "If the object you make persistent has associated objects (e.g. the <literal>kittens</literal> collection in the previous example), these objects may be made persistent in any order you like unless you have a <literal>NOT NULL</literal> constraint upon a foreign key column. There is never a risk of violating foreign key constraints. However, you might violate a <literal>NOT NULL</literal> constraint if you <literal>save()</literal> the objects in the wrong order."
+msgstr ""
+
+#: index.docbook:138
+msgid "Usually you don't bother with this detail, as you'll very likely use Hibernate's <emphasis>transitive persistence</emphasis> feature to save the associated objects automatically. Then, even <literal>NOT NULL</literal> constraint violations don't occur - Hibernate will take care of everything. Transitive persistence is discussed later in this chapter."
+msgstr ""
+
+#: index.docbook:149
+msgid "Loading an object"
+msgstr ""
+
+#: index.docbook:151
+msgid "The <literal>load()</literal> methods of <literal>Session</literal> gives you a way to retrieve a persistent instance if you already know its identifier. <literal>load()</literal> takes a class object and will load the state into a newly instantiated instance of that class, in persistent state."
+msgstr ""
+
+#: index.docbook:158
+msgid "<![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]>"
+msgstr ""
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[// you need to wrap primitive identifiers\n"
+ "long id = 1234;\n"
+ "DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );]]>"
+msgstr ""
+
+#: index.docbook:162
+msgid "Alternatively, you can load state into a given instance:"
+msgstr ""
+
+#: index.docbook:166
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "// load pk's state into cat\n"
+ "sess.load( cat, new Long(pkId) );\n"
+ "Set kittens = cat.getKittens();]]>"
+msgstr ""
+
+#: index.docbook:168
+msgid "Note that <literal>load()</literal> will throw an unrecoverable exception if there is no matching database row. If the class is mapped with a proxy, <literal>load()</literal> just returns an uninitialized proxy and does not actually hit the database until you invoke a method of the proxy. This behaviour is very useful if you wish to create an association to an object without actually loading it from the database. It also allows multiple instances to be loaded as a batch if <literal>batch-size</literal> is defined for the class mapping."
+msgstr ""
+
+#: index.docbook:179
+msgid "If you are not certain that a matching row exists, you should use the <literal>get()</literal> method, which hits the database immediately and returns null if there is no matching row."
+msgstr ""
+
+#: index.docbook:185
+msgid ""
+ "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);\n"
+ "if (cat==null) {\n"
+ " cat = new Cat();\n"
+ " sess.save(cat, id);\n"
+ "}\n"
+ "return cat;]]>"
+msgstr ""
+
+#: index.docbook:187
+msgid "You may even load an object using an SQL <literal>SELECT ... FOR UPDATE</literal>, using a <literal>LockMode</literal>. See the API documentation for more information."
+msgstr ""
+
+#: index.docbook:192
+msgid "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]>"
+msgstr ""
+
+#: index.docbook:194
+msgid "Note that any associated instances or contained collections are <emphasis>not</emphasis> selected <literal>FOR UPDATE</literal>, unless you decide to specify <literal>lock</literal> or <literal>all</literal> as a cascade style for the association."
+msgstr ""
+
+#: index.docbook:201
+msgid "It is possible to re-load an object and all its collections at any time, using the <literal>refresh()</literal> method. This is useful when database triggers are used to initialize some of the properties of the object."
+msgstr ""
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[sess.save(cat);\n"
+ "sess.flush(); //force the SQL INSERT\n"
+ "sess.refresh(cat); //re-read the state (after the trigger executes)]]>"
+msgstr ""
+
+#: index.docbook:209
+msgid "An important question usually appears at this point: How much does Hibernate load from the database and how many SQL <literal>SELECT</literal>s will it use? This depends on the <emphasis>fetching strategy</emphasis> and is explained in <xref linkend=\"performance-fetching\"/>."
+msgstr ""
+
+#: index.docbook:219
+msgid "Querying"
+msgstr ""
+
+#: index.docbook:221
+msgid "If you don't know the identifiers of the objects you are looking for, you need a query. Hibernate supports an easy-to-use but powerful object oriented query language (HQL). For programmatic query creation, Hibernate supports a sophisticated Criteria and Example query feature (QBC and QBE). You may also express your query in the native SQL of your database, with optional support from Hibernate for result set conversion into objects."
+msgstr ""
+
+#: index.docbook:231
+msgid "Executing queries"
+msgstr ""
+
+#: index.docbook:233
+msgid "HQL and native SQL queries are represented with an instance of <literal>org.hibernate.Query</literal>. This interface offers methods for parameter binding, result set handling, and for the execution of the actual query. You always obtain a <literal>Query</literal> using the current <literal>Session</literal>:"
+msgstr ""
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[List cats = session.createQuery(\n"
+ " \"from Cat as cat where cat.birthdate < ?\")\n"
+ " .setDate(0, date)\n"
+ " .list();\n"
+ "\n"
+ "List mothers = session.createQuery(\n"
+ " \"select mother from Cat as cat join cat.mother as mother where cat.name = ?\")\n"
+ " .setString(0, name)\n"
+ " .list();\n"
+ "\n"
+ "List kittens = session.createQuery(\n"
+ " \"from Cat as cat where cat.mother = ?\")\n"
+ " .setEntity(0, pk)\n"
+ " .list();\n"
+ "\n"
+ "Cat mother = (Cat) session.createQuery(\n"
+ " \"select cat.mother from Cat as cat where cat = ?\")\n"
+ " .setEntity(0, izi)\n"
+ " .uniqueResult();]]\n"
+ "\n"
+ "Query mothersWithKittens = (Cat) session.createQuery(\n"
+ " \"select mother from Cat as mother left join fetch mother.kittens\");\n"
+ "Set uniqueMothers = new HashSet(mothersWithKittens.list());]]>"
+msgstr ""
+
+#: index.docbook:242
+msgid "A query is usually executed by invoking <literal>list()</literal>, the result of the query will be loaded completely into a collection in memory. Entity instances retrieved by a query are in persistent state. The <literal>uniqueResult()</literal> method offers a shortcut if you know your query will only return a single object. Note that queries that make use of eager fetching of collections usually return duplicates of the root objects (but with their collections initialized). You can filter these duplicates simply through a <literal>Set</literal>."
+msgstr ""
+
+#: index.docbook:254
+msgid "Iterating results"
+msgstr ""
+
+#: index.docbook:256
+msgid "Occasionally, you might be able to achieve better performance by executing the query using the <literal>iterate()</literal> method. This will only usually be the case if you expect that the actual entity instances returned by the query will already be in the session or second-level cache. If they are not already cached, <literal>iterate()</literal> will be slower than <literal>list()</literal> and might require many database hits for a simple query, usually <emphasis>1</emphasis> for the initial select which only returns identifiers, and <emphasis>n</emphasis> additional selects to initialize the actual instances."
+msgstr ""
+
+#: index.docbook:268
+msgid ""
+ "<![CDATA[// fetch ids\n"
+ "Iterator iter = sess.createQuery(\"from eg.Qux q order by q.likeliness\").iterate();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Qux qux = (Qux) iter.next(); // fetch the object\n"
+ " // something we couldnt express in the query\n"
+ " if ( qux.calculateComplicatedAlgorithm() ) {\n"
+ " // delete the current instance\n"
+ " iter.remove();\n"
+ " // dont need to process the rest\n"
+ " break;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:272
+msgid "Queries that return tuples"
+msgstr ""
+
+#: index.docbook:274
+msgid "Hibernate queries sometimes return tuples of objects, in which case each tuple is returned as an array:"
+msgstr ""
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Iterator kittensAndMothers = sess.createQuery(\n"
+ " \"select kitten, mother from Cat kitten join kitten.mother mother\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( kittensAndMothers.hasNext() ) {\n"
+ " Object[] tuple = (Object[]) kittensAndMothers.next();\n"
+ " Cat kitten = (Cat) tuple[0];\n"
+ " Cat mother = (Cat) tuple[1];\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:284
+msgid "Scalar results"
+msgstr ""
+
+#: index.docbook:286
+msgid "Queries may specify a property of a class in the <literal>select</literal> clause. They may even call SQL aggregate functions. Properties or aggregates are considered \"scalar\" results (and not entities in persistent state)."
+msgstr ""
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[Iterator results = sess.createQuery(\n"
+ " \"select cat.color, min(cat.birthdate), count(cat) from Cat cat \" +\n"
+ " \"group by cat.color\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( results.hasNext() ) {\n"
+ " Object[] row = (Object[]) results.next();\n"
+ " Color type = (Color) row[0];\n"
+ " Date oldest = (Date) row[1];\n"
+ " Integer count = (Integer) row[2];\n"
+ " .....\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:297
+msgid "Bind parameters"
+msgstr ""
+
+#: index.docbook:299
+msgid "Methods on <literal>Query</literal> are provided for binding values to named parameters or JDBC-style <literal>?</literal> parameters. <emphasis>Contrary to JDBC, Hibernate numbers parameters from zero.</emphasis> Named parameters are identifiers of the form <literal>:name</literal> in the query string. The advantages of named parameters are:"
+msgstr ""
+
+#: index.docbook:309
+msgid "named parameters are insensitive to the order they occur in the query string"
+msgstr ""
+
+#: index.docbook:315
+msgid "they may occur multiple times in the same query"
+msgstr ""
+
+#: index.docbook:320
+msgid "they are self-documenting"
+msgstr ""
+
+#: index.docbook:326
+msgid ""
+ "<![CDATA[//named parameter (preferred)\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = :name\");\n"
+ "q.setString(\"name\", \"Fritz\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr ""
+
+#: index.docbook:328
+msgid ""
+ "<![CDATA[//positional parameter\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = ?\");\n"
+ "q.setString(0, \"Izi\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr ""
+
+#: index.docbook:330
+msgid ""
+ "<![CDATA[//named parameter list\n"
+ "List names = new ArrayList();\n"
+ "names.add(\"Izi\");\n"
+ "names.add(\"Fritz\");\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name in (:namesList)\");\n"
+ "q.setParameterList(\"namesList\", names);\n"
+ "List cats = q.list();]]>"
+msgstr ""
+
+#: index.docbook:335
+msgid "Pagination"
+msgstr ""
+
+#: index.docbook:337
+msgid "If you need to specify bounds upon your result set (the maximum number of rows you want to retrieve and / or the first row you want to retrieve) you should use methods of the <literal>Query</literal> interface:"
+msgstr ""
+
+#: index.docbook:343
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"from DomesticCat cat\");\n"
+ "q.setFirstResult(20);\n"
+ "q.setMaxResults(10);\n"
+ "List cats = q.list();]]>"
+msgstr ""
+
+#: index.docbook:345
+msgid "Hibernate knows how to translate this limit query into the native SQL of your DBMS."
+msgstr ""
+
+#: index.docbook:353
+msgid "Scrollable iteration"
+msgstr ""
+
+#: index.docbook:355
+msgid "If your JDBC driver supports scrollable <literal>ResultSet</literal>s, the <literal>Query</literal> interface may be used to obtain a <literal>ScrollableResults</literal> object, which allows flexible navigation of the query results."
+msgstr ""
+
+#: index.docbook:362
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"select cat.name, cat from DomesticCat cat \" +\n"
+ " \"order by cat.name\");\n"
+ "ScrollableResults cats = q.scroll();\n"
+ "if ( cats.first() ) {\n"
+ "\n"
+ " // find the first name on each page of an alphabetical list of cats by name\n"
+ " firstNamesOfPages = new ArrayList();\n"
+ " do {\n"
+ " String name = cats.getString(0);\n"
+ " firstNamesOfPages.add(name);\n"
+ " }\n"
+ " while ( cats.scroll(PAGE_SIZE) );\n"
+ "\n"
+ " // Now get the first page of cats\n"
+ " pageOfCats = new ArrayList();\n"
+ " cats.beforeFirst();\n"
+ " int i=0;\n"
+ " while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );\n"
+ "\n"
+ "}\n"
+ "cats.close()]]>"
+msgstr ""
+
+#: index.docbook:364
+msgid "Note that an open database connection (and cursor) is required for this functionality, use <literal>setMaxResult()</literal>/<literal>setFirstResult()</literal> if you need offline pagination functionality."
+msgstr ""
+
+#: index.docbook:373
+msgid "Externalizing named queries"
+msgstr ""
+
+#: index.docbook:375
+msgid "You may also define named queries in the mapping document. (Remember to use a <literal>CDATA</literal> section if your query contains characters that could be interpreted as markup.)"
+msgstr ""
+
+#: index.docbook:381
+msgid ""
+ "<![CDATA[<query name=\"ByNameAndMaximumWeight\"><![CDATA[\n"
+ " from eg.DomesticCat as cat\n"
+ " where cat.name = ?\n"
+ " and cat.weight > ?\n"
+ "] ]></query>]]>"
+msgstr ""
+
+#: index.docbook:383
+msgid "Parameter binding and executing is done programatically:"
+msgstr ""
+
+#: index.docbook:387
+msgid ""
+ "<![CDATA[Query q = sess.getNamedQuery(\"ByNameAndMaximumWeight\");\n"
+ "q.setString(0, name);\n"
+ "q.setInt(1, minWeight);\n"
+ "List cats = q.list();]]>"
+msgstr ""
+
+#: index.docbook:389
+msgid "Note that the actual program code is independent of the query language that is used, you may also define native SQL queries in metadata, or migrate existing queries to Hibernate by placing them in mapping files."
+msgstr ""
+
+#: index.docbook:395
+msgid "Also note that a query declaration inside a <literal><hibernate-mapping></literal> element requires a global unique name for the query, while a query declaration inside a <literal><class></literal> element is made unique automatically by prepending the fully qualified name of the class, for example <literal>eg.Cat.ByNameAndMaximumWeight</literal>."
+msgstr ""
+
+#: index.docbook:408
+msgid "Filtering collections"
+msgstr ""
+
+#: index.docbook:409
+msgid "A collection <emphasis>filter</emphasis> is a special type of query that may be applied to a persistent collection or array. The query string may refer to <literal>this</literal>, meaning the current collection element."
+msgstr ""
+
+#: index.docbook:415
+msgid ""
+ "<![CDATA[Collection blackKittens = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"where this.color = ?\")\n"
+ " .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )\n"
+ " .list()\n"
+ ");]]>"
+msgstr ""
+
+#: index.docbook:417
+msgid "The returned collection is considered a bag, and it's a copy of the given collection. The original collection is not modified (this is contrary to the implication of the name \"filter\", but consistent with expected behavior)."
+msgstr ""
+
+#: index.docbook:423
+msgid "Observe that filters do not require a <literal>from</literal> clause (though they may have one if required). Filters are not limited to returning the collection elements themselves."
+msgstr ""
+
+#: index.docbook:428
+msgid ""
+ "<![CDATA[Collection blackKittenMates = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"select this.mate where this.color = eg.Color.BLACK.intValue\")\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:430
+msgid "Even an empty filter query is useful, e.g. to load a subset of elements in a huge collection:"
+msgstr ""
+
+#: index.docbook:435
+msgid ""
+ "<![CDATA[Collection tenKittens = session.createFilter(\n"
+ " mother.getKittens(), \"\")\n"
+ " .setFirstResult(0).setMaxResults(10)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:440
+msgid "Criteria queries"
+msgstr ""
+
+#: index.docbook:442
+msgid "HQL is extremely powerful but some developers prefer to build queries dynamically, using an object-oriented API, rather than building query strings. Hibernate provides an intuitive <literal>Criteria</literal> query API for these cases:"
+msgstr ""
+
+#: index.docbook:448
+msgid ""
+ "<![CDATA[Criteria crit = session.createCriteria(Cat.class);\n"
+ "crit.add( Restrictions.eq( \"color\", eg.Color.BLACK ) );\n"
+ "crit.setMaxResults(10);\n"
+ "List cats = crit.list();]]>"
+msgstr ""
+
+#: index.docbook:450
+msgid "The <literal>Criteria</literal> and the associated <literal>Example</literal> API are discussed in more detail in <xref linkend=\"querycriteria\"/>."
+msgstr ""
+
+#: index.docbook:458
+msgid "Queries in native SQL"
+msgstr ""
+
+#: index.docbook:460
+msgid "You may express a query in SQL, using <literal>createSQLQuery()</literal> and let Hibernate take care of the mapping from result sets to objects. Note that you may at any time call <literal>session.connection()</literal> and use the JDBC <literal>Connection</literal> directly. If you chose to use the Hibernate API, you must enclose SQL aliases in braces:"
+msgstr ""
+
+#: index.docbook:468
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\"SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list();]]>"
+msgstr ""
+
+#: index.docbook:470
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\n"
+ " \"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, \" +\n"
+ " \"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... \" +\n"
+ " \"FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list()]]>"
+msgstr ""
+
+#: index.docbook:472
+msgid "SQL queries may contain named and positional parameters, just like Hibernate queries. More information about native SQL queries in Hibernate can be found in <xref linkend=\"querysql\"/>."
+msgstr ""
+
+#: index.docbook:483
+msgid "Modifying persistent objects"
+msgstr ""
+
+#: index.docbook:485
+msgid "<emphasis>Transactional persistent instances</emphasis> (ie. objects loaded, saved, created or queried by the <literal>Session</literal>) may be manipulated by the application and any changes to persistent state will be persisted when the <literal>Session</literal> is <emphasis>flushed</emphasis> (discussed later in this chapter). There is no need to call a particular method (like <literal>update()</literal>, which has a different purpose) to make your modifications persistent. So the most straightforward way to update the state of an object is to <literal>load()</literal> it, and then manipulate it directly, while the <literal>Session</literal> is open:"
+msgstr ""
+
+#: index.docbook:496
+msgid ""
+ "<![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );\n"
+ "cat.setName(\"PK\");\n"
+ "sess.flush(); // changes to cat are automatically detected and persisted]]>"
+msgstr ""
+
+#: index.docbook:498
+msgid "Sometimes this programming model is inefficient since it would require both an SQL <literal>SELECT</literal> (to load an object) and an SQL <literal>UPDATE</literal> (to persist its updated state) in the same session. Therefore Hibernate offers an alternate approach, using detached instances."
+msgstr ""
+
+#: index.docbook:506
+msgid "Note that Hibernate does not offer its own API for direct execution of <literal>UPDATE</literal> or <literal>DELETE</literal> statements. Hibernate is a <emphasis>state management</emphasis> service, you don't have to think in <emphasis>statements</emphasis> to use it. JDBC is a perfect API for executing SQL statements, you can get a JDBC <literal>Connection</literal> at any time by calling <literal>session.connection()</literal>. Furthermore, the notion of mass operations conflicts with object/relational mapping for online transaction processing-oriented applications. Future versions of Hibernate may however provide special mass operation functions. See <xref linkend=\"batch\"/> for some possible batch operation tricks."
+msgstr ""
+
+#: index.docbook:521
+msgid "Modifying detached objects"
+msgstr ""
+
+#: index.docbook:523
+msgid "Many applications need to retrieve an object in one transaction, send it to the UI layer for manipulation, then save the changes in a new transaction. Applications that use this kind of approach in a high-concurrency environment usually use versioned data to ensure isolation for the \"long\" unit of work."
+msgstr ""
+
+#: index.docbook:530
+msgid "Hibernate supports this model by providing for reattachment of detached instances using the <literal>Session.update()</literal> or <literal>Session.merge()</literal> methods:"
+msgstr ""
+
+#: index.docbook:536
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catId);\n"
+ "Cat potentialMate = new Cat();\n"
+ "firstSession.save(potentialMate);\n"
+ "\n"
+ "// in a higher layer of the application\n"
+ "cat.setMate(potentialMate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.update(cat); // update cat\n"
+ "secondSession.update(mate); // update mate]]>"
+msgstr ""
+
+#: index.docbook:538
+msgid "If the <literal>Cat</literal> with identifier <literal>catId</literal> had already been loaded by <literal>secondSession</literal> when the application tried to reattach it, an exception would have been thrown."
+msgstr ""
+
+#: index.docbook:544
+msgid "Use <literal>update()</literal> if you are sure that the session does not contain an already persistent instance with the same identifier, and <literal>merge()</literal> if you want to merge your modifications at any time without consideration of the state of the session. In other words, <literal>update()</literal> is usually the first method you would call in a fresh session, ensuring that reattachment of your detached instances is the first operation that is executed."
+msgstr ""
+
+#: index.docbook:553
+msgid "The application should individually <literal>update()</literal> detached instances reachable from the given detached instance if and <emphasis>only</emphasis> if it wants their state also updated. This can be automated of course, using <emphasis>transitive persistence</emphasis>, see <xref linkend=\"objectstate-transitive\"/>."
+msgstr ""
+
+#: index.docbook:560
+msgid "The <literal>lock()</literal> method also allows an application to reassociate an object with a new session. However, the detached instance has to be unmodified!"
+msgstr ""
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[//just reassociate:\n"
+ "sess.lock(fritz, LockMode.NONE);\n"
+ "//do a version check, then reassociate:\n"
+ "sess.lock(izi, LockMode.READ);\n"
+ "//do a version check, using SELECT ... FOR UPDATE, then reassociate:\n"
+ "sess.lock(pk, LockMode.UPGRADE);]]>"
+msgstr ""
+
+#: index.docbook:567
+msgid "Note that <literal>lock()</literal> can be used with various <literal>LockMode</literal>s, see the API documentation and the chapter on transaction handling for more information. Reattachment is not the only usecase for <literal>lock()</literal>."
+msgstr ""
+
+#: index.docbook:574
+msgid "Other models for long units of work are discussed in <xref linkend=\"transactions-optimistic\"/>."
+msgstr ""
+
+#: index.docbook:581
+msgid "Automatic state detection"
+msgstr ""
+
+#: index.docbook:583
+msgid "Hibernate users have requested a general purpose method that either saves a transient instance by generating a new identifier or updates/reattaches the detached instances associated with its current identifier. The <literal>saveOrUpdate()</literal> method implements this functionality."
+msgstr ""
+
+#: index.docbook:590
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catID);\n"
+ "\n"
+ "// in a higher tier of the application\n"
+ "Cat mate = new Cat();\n"
+ "cat.setMate(mate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.saveOrUpdate(cat); // update existing state (cat has a non-null id)\n"
+ "secondSession.saveOrUpdate(mate); // save the new instance (mate has a null id)]]>"
+msgstr ""
+
+#: index.docbook:592
+msgid "The usage and semantics of <literal>saveOrUpdate()</literal> seems to be confusing for new users. Firstly, so long as you are not trying to use instances from one session in another new session, you should not need to use <literal>update()</literal>, <literal>saveOrUpdate()</literal>, or <literal>merge()</literal>. Some whole applications will never use either of these methods."
+msgstr ""
+
+#: index.docbook:600
+msgid "Usually <literal>update()</literal> or <literal>saveOrUpdate()</literal> are used in the following scenario:"
+msgstr ""
+
+#: index.docbook:607
+msgid "the application loads an object in the first session"
+msgstr ""
+
+#: index.docbook:612
+msgid "the object is passed up to the UI tier"
+msgstr ""
+
+#: index.docbook:617
+msgid "some modifications are made to the object"
+msgstr ""
+
+#: index.docbook:622
+msgid "the object is passed back down to the business logic tier"
+msgstr ""
+
+#: index.docbook:627
+msgid "the application persists these modifications by calling <literal>update()</literal> in a second session"
+msgstr ""
+
+#: index.docbook:634
+msgid "<literal>saveOrUpdate()</literal> does the following:"
+msgstr ""
+
+#: index.docbook:640
+msgid "if the object is already persistent in this session, do nothing"
+msgstr ""
+
+#: index.docbook:645
+msgid "if another object associated with the session has the same identifier, throw an exception"
+msgstr ""
+
+#: index.docbook:651
+msgid "if the object has no identifier property, <literal>save()</literal> it"
+msgstr ""
+
+#: index.docbook:656
+msgid "if the object's identifier has the value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr ""
+
+#: index.docbook:662
+msgid "if the object is versioned (by a <literal><version></literal> or <literal><timestamp></literal>), and the version property value is the same value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr ""
+
+#: index.docbook:670
+msgid "otherwise <literal>update()</literal> the object"
+msgstr ""
+
+#: index.docbook:676
+msgid "and <literal>merge()</literal> is very different:"
+msgstr ""
+
+#: index.docbook:682
+msgid "if there is a persistent instance with the same identifier currently associated with the session, copy the state of the given object onto the persistent instance"
+msgstr ""
+
+#: index.docbook:689
+msgid "if there is no persistent instance currently associated with the session, try to load it from the database, or create a new persistent instance"
+msgstr ""
+
+#: index.docbook:695
+msgid "the persistent instance is returned"
+msgstr ""
+
+#: index.docbook:700
+msgid "the given instance does not become associated with the session, it remains detached"
+msgstr ""
+
+#: index.docbook:710
+msgid "Deleting persistent objects"
+msgstr ""
+
+#: index.docbook:712
+msgid "<literal>Session.delete()</literal> will remove an object's state from the database. Of course, your application might still hold a reference to a deleted object. It's best to think of <literal>delete()</literal> as making a persistent instance transient."
+msgstr ""
+
+#: index.docbook:719
+msgid "<![CDATA[sess.delete(cat);]]>"
+msgstr ""
+
+#: index.docbook:721
+msgid "You may delete objects in any order you like, without risk of foreign key constraint violations. It is still possible to violate a <literal>NOT NULL</literal> constraint on a foreign key column by deleting objects in the wrong order, e.g. if you delete the parent, but forget to delete the children."
+msgstr ""
+
+#: index.docbook:732
+msgid "Replicating object between two different datastores"
+msgstr ""
+
+#: index.docbook:734
+msgid "It is occasionally useful to be able to take a graph of persistent instances and make them persistent in a different datastore, without regenerating identifier values."
+msgstr ""
+
+#: index.docbook:740
+msgid ""
+ "<![CDATA[//retrieve a cat from one database\n"
+ "Session session1 = factory1.openSession();\n"
+ "Transaction tx1 = session1.beginTransaction();\n"
+ "Cat cat = session1.get(Cat.class, catId);\n"
+ "tx1.commit();\n"
+ "session1.close();\n"
+ "\n"
+ "//reconcile with a second database\n"
+ "Session session2 = factory2.openSession();\n"
+ "Transaction tx2 = session2.beginTransaction();\n"
+ "session2.replicate(cat, ReplicationMode.LATEST_VERSION);\n"
+ "tx2.commit();\n"
+ "session2.close();]]>"
+msgstr ""
+
+#: index.docbook:742
+msgid "The <literal>ReplicationMode</literal> determines how <literal>replicate()</literal> will deal with conflicts with existing rows in the database."
+msgstr ""
+
+#: index.docbook:749
+msgid "<literal>ReplicationMode.IGNORE</literal> - ignore the object when there is an existing database row with the same identifier"
+msgstr ""
+
+#: index.docbook:755
+msgid "<literal>ReplicationMode.OVERWRITE</literal> - overwrite any existing database row with the same identifier"
+msgstr ""
+
+#: index.docbook:761
+msgid "<literal>ReplicationMode.EXCEPTION</literal> - throw an exception if there is an existing database row with the same identifier"
+msgstr ""
+
+#: index.docbook:767
+msgid "<literal>ReplicationMode.LATEST_VERSION</literal> - overwrite the row if its version number is earlier than the version number of the object, or ignore the object otherwise"
+msgstr ""
+
+#: index.docbook:775
+msgid "Usecases for this feature include reconciling data entered into different database instances, upgrading system configuration information during product upgrades, rolling back changes made during non-ACID transactions and more."
+msgstr ""
+
+#: index.docbook:784
+msgid "Flushing the Session"
+msgstr ""
+
+#: index.docbook:786
+msgid "From time to time the <literal>Session</literal> will execute the SQL statements needed to synchronize the JDBC connection's state with the state of objects held in memory. This process, <emphasis>flush</emphasis>, occurs by default at the following points"
+msgstr ""
+
+#: index.docbook:795
+msgid "before some query executions"
+msgstr ""
+
+#: index.docbook:800
+msgid "from <literal>org.hibernate.Transaction.commit()</literal>"
+msgstr ""
+
+#: index.docbook:805
+msgid "from <literal>Session.flush()</literal>"
+msgstr ""
+
+#: index.docbook:811
+msgid "The SQL statements are issued in the following order"
+msgstr ""
+
+#: index.docbook:817
+msgid "all entity insertions, in the same order the corresponding objects were saved using <literal>Session.save()</literal>"
+msgstr ""
+
+#: index.docbook:823
+msgid "all entity updates"
+msgstr ""
+
+#: index.docbook:828
+msgid "all collection deletions"
+msgstr ""
+
+#: index.docbook:833
+msgid "all collection element deletions, updates and insertions"
+msgstr ""
+
+#: index.docbook:838
+msgid "all collection insertions"
+msgstr ""
+
+#: index.docbook:843
+msgid "all entity deletions, in the same order the corresponding objects were deleted using <literal>Session.delete()</literal>"
+msgstr ""
+
+#: index.docbook:850
+msgid "(An exception is that objects using <literal>native</literal> ID generation are inserted when they are saved.)"
+msgstr ""
+
+#: index.docbook:855
+msgid "Except when you explicity <literal>flush()</literal>, there are absolutely no guarantees about <emphasis>when</emphasis> the <literal>Session</literal> executes the JDBC calls, only the <emphasis>order</emphasis> in which they are executed. However, Hibernate does guarantee that the <literal>Query.list(..)</literal> will never return stale data; nor will they return the wrong data."
+msgstr ""
+
+#: index.docbook:863
+msgid "It is possible to change the default behavior so that flush occurs less frequently. The <literal>FlushMode</literal> class defines three different modes: only flush at commit time (and only when the Hibernate <literal>Transaction</literal> API is used), flush automatically using the explained routine, or never flush unless <literal>flush()</literal> is called explicitly. The last mode is useful for long running units of work, where a <literal>Session</literal> is kept open and disconnected for a long time (see <xref linkend=\"transactions-optimistic-longsession\"/>)."
+msgstr ""
+
+#: index.docbook:873
+msgid ""
+ "<![CDATA[sess = sf.openSession();\n"
+ "Transaction tx = sess.beginTransaction();\n"
+ "sess.setFlushMode(FlushMode.COMMIT); // allow queries to return stale state\n"
+ "\n"
+ "Cat izi = (Cat) sess.load(Cat.class, id);\n"
+ "izi.setName(iznizi);\n"
+ "\n"
+ "// might return stale data\n"
+ "sess.find(\"from Cat as cat left outer join cat.kittens kitten\");\n"
+ "\n"
+ "// change to izi is not flushed!\n"
+ "...\n"
+ "tx.commit(); // flush occurs\n"
+ "sess.close();]]>"
+msgstr ""
+
+#: index.docbook:875
+msgid "During flush, an exception might occur (e.g. if a DML operation violates a constraint). Since handling exceptions involves some understanding of Hibernate's transactional behavior, we discuss it in <xref linkend=\"transactions\"/>."
+msgstr ""
+
+#: index.docbook:884
+msgid "Transitive persistence"
+msgstr ""
+
+#: index.docbook:886
+msgid "It is quite cumbersome to save, delete, or reattach individual objects, especially if you deal with a graph of associated objects. A common case is a parent/child relationship. Consider the following example:"
+msgstr ""
+
+#: index.docbook:892
+msgid "If the children in a parent/child relationship would be value typed (e.g. a collection of addresses or strings), their life cycle would depend on the parent and no further action would be required for convenient \"cascading\" of state changes. When the parent is saved, the value-typed child objects are saved as well, when the parent is deleted, the children will be deleted, etc. This even works for operations such as the removal of a child from the collection; Hibernate will detect this and, since value-typed objects can't have shared references, delete the child from the database."
+msgstr ""
+
+#: index.docbook:903
+msgid "Now consider the same scenario with parent and child objects being entities, not value-types (e.g. categories and items, or parent and child cats). Entities have their own life cycle, support shared references (so removing an entity from the collection does not mean it can be deleted), and there is by default no cascading of state from one entity to any other associated entities. Hibernate does not implement <emphasis>persistence by reachability</emphasis> by default."
+msgstr ""
+
+#: index.docbook:912
+msgid "For each basic operation of the Hibernate session - including <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal> - there is a corresponding cascade style. Respectively, the cascade styles are named <literal>create, merge, save-update, delete, lock, refresh, evict, replicate</literal>. If you want an operation to be cascaded along an association, you must indicate that in the mapping document. For example:"
+msgstr ""
+
+#: index.docbook:921
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist\"/>]]>"
+msgstr ""
+
+#: index.docbook:923
+msgid "Cascade styles my be combined:"
+msgstr ""
+
+#: index.docbook:927
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist,delete,lock\"/>]]>"
+msgstr ""
+
+#: index.docbook:929
+msgid "You may even use <literal>cascade=\"all\"</literal> to specify that <emphasis>all</emphasis> operations should be cascaded along the association. The default <literal>cascade=\"none\"</literal> specifies that no operations are to be cascaded."
+msgstr ""
+
+#: index.docbook:935
+msgid "A special cascade style, <literal>delete-orphan</literal>, applies only to one-to-many associations, and indicates that the <literal>delete()</literal> operation should be applied to any child object that is removed from the association."
+msgstr ""
+
+#: index.docbook:942
+msgid "Recommendations:"
+msgstr ""
+
+#: index.docbook:948
+msgid "It doesn't usually make sense to enable cascade on a <literal><many-to-one></literal> or <literal><many-to-many></literal> association. Cascade is often useful for <literal><one-to-one></literal> and <literal><one-to-many></literal> associations."
+msgstr ""
+
+#: index.docbook:956
+msgid "If the child object's lifespan is bounded by the lifespan of the parent object, make it a <emphasis>life cycle object</emphasis> by specifying <literal>cascade=\"all,delete-orphan\"</literal>."
+msgstr ""
+
+#: index.docbook:963
+msgid "Otherwise, you might not need cascade at all. But if you think that you will often be working with the parent and children together in the same transaction, and you want to save yourself some typing, consider using <literal>cascade=\"persist,merge,save-update\"</literal>."
+msgstr ""
+
+#: index.docbook:971
+msgid "Mapping an association (either a single valued association, or a collection) with <literal>cascade=\"all\"</literal> marks the association as a <emphasis>parent/child</emphasis> style relationship where save/update/delete of the parent results in save/update/delete of the child or children."
+msgstr ""
+
+#: index.docbook:977
+msgid "Futhermore, a mere reference to a child from a persistent parent will result in save/update of the child. This metaphor is incomplete, however. A child which becomes unreferenced by its parent is <emphasis>not</emphasis> automatically deleted, except in the case of a <literal><one-to-many></literal> association mapped with <literal>cascade=\"delete-orphan\"</literal>. The precise semantics of cascading operations for a parent/child relationship are as follows:"
+msgstr ""
+
+#: index.docbook:988
+msgid "If a parent is passed to <literal>persist()</literal>, all children are passed to <literal>persist()</literal>"
+msgstr ""
+
+#: index.docbook:994
+msgid "If a parent is passed to <literal>merge()</literal>, all children are passed to <literal>merge()</literal>"
+msgstr ""
+
+#: index.docbook:1000
+msgid "If a parent is passed to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal>, all children are passed to <literal>saveOrUpdate()</literal>"
+msgstr ""
+
+#: index.docbook:1006
+msgid "If a transient or detached child becomes referenced by a persistent parent, it is passed to <literal>saveOrUpdate()</literal>"
+msgstr ""
+
+#: index.docbook:1012
+msgid "If a parent is deleted, all children are passed to <literal>delete()</literal>"
+msgstr ""
+
+#: index.docbook:1017
+msgid "If a child is dereferenced by a persistent parent, <emphasis>nothing special happens</emphasis> - the application should explicitly delete the child if necessary - unless <literal>cascade=\"delete-orphan\"</literal>, in which case the \"orphaned\" child is deleted."
+msgstr ""
+
+#: index.docbook:1026
+msgid "Finally, note that cascading of operations can be applied to an object graph at <emphasis>call time</emphasis> or at <emphasis>flush time</emphasis>. All operations, if enabled, are cascaded to associated entities reachable when the operation is executed. However, <literal>save-upate</literal> and <literal>delete-orphan</literal> are transitive for all associated entities reachable during flush of the <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:1038
+msgid "Using metadata"
+msgstr ""
+
+#: index.docbook:1040
+msgid "Hibernate requires a very rich meta-level model of all entity and value types. From time to time, this model is very useful to the application itself. For example, the application might use Hibernate's metadata to implement a \"smart\" deep-copy algorithm that understands which objects should be copied (eg. mutable value types) and which should not (eg. immutable value types and, possibly, associated entities)."
+msgstr ""
+
+#: index.docbook:1047
+msgid "Hibernate exposes metadata via the <literal>ClassMetadata</literal> and <literal>CollectionMetadata</literal> interfaces and the <literal>Type</literal> hierarchy. Instances of the metadata interfaces may be obtained from the <literal>SessionFactory</literal>."
+msgstr ""
+
+#: index.docbook:1054
+msgid ""
+ "<![CDATA[Cat fritz = ......;\n"
+ "ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);\n"
+ "\n"
+ "Object[] propertyValues = catMeta.getPropertyValues(fritz);\n"
+ "String[] propertyNames = catMeta.getPropertyNames();\n"
+ "Type[] propertyTypes = catMeta.getPropertyTypes();\n"
+ "\n"
+ "// get a Map of all properties which are not collections or associations\n"
+ "Map namedValues = new HashMap();\n"
+ "for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {\n"
+ " namedValues.put( propertyNames[i], propertyValues[i] );\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/toolset_guide.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/toolset_guide.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/toolset_guide.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,662 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Toolset Guide"
+msgstr ""
+
+#: index.docbook:7
+msgid "Roundtrip engineering with Hibernate is possible using a set of Eclipse plugins, commandline tools, as well as Ant tasks."
+msgstr ""
+
+#: index.docbook:12
+msgid "The <emphasis>Hibernate Tools</emphasis> currently include plugins for the Eclipse IDE as well as Ant tasks for reverse engineering of existing databases:"
+msgstr ""
+
+#: index.docbook:18
+msgid "<emphasis>Mapping Editor:</emphasis> An editor for Hibernate XML mapping files, supporting auto-completion and syntax highlighting. It also supports semantic auto-completion for class names and property/field names, making it much more versatile than a normal XML editor."
+msgstr ""
+
+#: index.docbook:23
+msgid "<emphasis>Console:</emphasis> The console is a new view in Eclipse. In addition to a tree overview of your console configurations, you also get an interactive view of your persistent classes and their relationships. The console allows you to execute HQL queries against your database and browse the result directly in Eclipse."
+msgstr ""
+
+#: index.docbook:30
+msgid "<emphasis>Development Wizards:</emphasis> Several wizards are provided with the Hibernate Eclipse tools; you can use a wizard to quickly generate Hibernate configuration (cfg.xml) files, or you may even completely reverse engineer an existing database schema into POJO source files and Hibernate mapping files. The reverse engineering wizard supports customizable templates."
+msgstr ""
+
+#: index.docbook:38
+msgid "Ant Tasks:"
+msgstr ""
+
+#: index.docbook:43
+msgid "Please refer to the <emphasis>Hibernate Tools</emphasis> package and it's documentation for more information."
+msgstr ""
+
+#: index.docbook:48
+msgid "However, the Hibernate main package comes bundled with an integrated tool (it can even be used from \"inside\" Hibernate on-the-fly): <emphasis>SchemaExport</emphasis> aka <literal>hbm2ddl</literal>."
+msgstr ""
+
+#: index.docbook:55
+msgid "Automatic schema generation"
+msgstr ""
+
+#: index.docbook:57
+msgid "DDL may be generated from your mapping files by a Hibernate utility. The generated schema includes referential integrity constraints (primary and foreign keys) for entity and collection tables. Tables and sequences are also created for mapped identifier generators."
+msgstr ""
+
+#: index.docbook:64
+msgid "You <emphasis>must</emphasis> specify a SQL <literal>Dialect</literal> via the <literal>hibernate.dialect</literal> property when using this tool, as DDL is highly vendor specific."
+msgstr ""
+
+#: index.docbook:70
+msgid "First, customize your mapping files to improve the generated schema."
+msgstr ""
+
+#: index.docbook:75
+msgid "Customizing the schema"
+msgstr ""
+
+#: index.docbook:77
+msgid "Many Hibernate mapping elements define optional attributes named <literal>length</literal>, <literal>precision</literal> and <literal>scale</literal>. You may set the length, precision and scale of a column with this attribute."
+msgstr ""
+
+#: index.docbook:84
+msgid "<![CDATA[<property name=\"zip\" length=\"5\"/>]]>"
+msgstr ""
+
+#: index.docbook:85
+msgid "<![CDATA[<property name=\"balance\" precision=\"12\" scale=\"2\"/>]]>"
+msgstr ""
+
+#: index.docbook:87
+msgid "Some tags also accept a <literal>not-null</literal> attribute (for generating a <literal>NOT NULL</literal> constraint on table columns) and a <literal>unique</literal> attribute (for generating <literal>UNIQUE</literal> constraint on table columns)."
+msgstr ""
+
+#: index.docbook:93
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" not-null=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:95
+msgid "<![CDATA[<element column=\"serialNumber\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:97
+msgid "A <literal>unique-key</literal> attribute may be used to group columns in a single unique key constraint. Currently, the specified value of the <literal>unique-key</literal> attribute is <emphasis>not</emphasis> used to name the constraint in the generated DDL, only to group the columns in the mapping file."
+msgstr ""
+
+#: index.docbook:105
+msgid ""
+ "<![CDATA[<many-to-one name=\"org\" column=\"orgId\" unique-key=\"OrgEmployeeId\"/>\n"
+ "<property name=\"employeeId\" unique-key=\"OrgEmployee\"/>]]>"
+msgstr ""
+
+#: index.docbook:107
+msgid "An <literal>index</literal> attribute specifies the name of an index that will be created using the mapped column or columns. Multiple columns may be grouped into the same index, simply by specifying the same index name."
+msgstr ""
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[<property name=\"lastName\" index=\"CustName\"/>\n"
+ "<property name=\"firstName\" index=\"CustName\"/>]]>"
+msgstr ""
+
+#: index.docbook:115
+msgid "A <literal>foreign-key</literal> attribute may be used to override the name of any generated foreign key constraint."
+msgstr ""
+
+#: index.docbook:120
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" foreign-key=\"FKFooBar\"/>]]>"
+msgstr ""
+
+#: index.docbook:122
+msgid "Many mapping elements also accept a child <literal><column></literal> element. This is particularly useful for mapping multi-column types:"
+msgstr ""
+
+#: index.docbook:127
+msgid ""
+ "<![CDATA[<property name=\"name\" type=\"my.customtypes.Name\"/>\n"
+ " <column name=\"last\" not-null=\"true\" index=\"bar_idx\" length=\"30\"/>\n"
+ " <column name=\"first\" not-null=\"true\" index=\"bar_idx\" length=\"20\"/>\n"
+ " <column name=\"initial\"/>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:129
+msgid "The <literal>default</literal> attribute lets you specify a default value for a column (you should assign the same value to the mapped property before saving a new instance of the mapped class)."
+msgstr ""
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<property name=\"credits\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"credits\" default=\"10\"/>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:137
+msgid ""
+ "<![CDATA[<version name=\"version\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"version\" default=\"0\"/>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:139
+msgid "The <literal>sql-type</literal> attribute allows the user to override the default mapping of a Hibernate type to SQL datatype."
+msgstr ""
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<property name=\"balance\" type=\"float\">\n"
+ " <column name=\"balance\" sql-type=\"decimal(13,3)\"/>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:146
+msgid "The <literal>check</literal> attribute allows you to specify a check constraint."
+msgstr ""
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">\n"
+ " ...\n"
+ " <property name=\"bar\" type=\"float\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:156
+msgid "Summary"
+msgstr ""
+
+#: index.docbook:163
+msgid "Attribute"
+msgstr ""
+
+#: index.docbook:164
+msgid "Values"
+msgstr ""
+
+#: index.docbook:165
+msgid "Interpretation"
+msgstr ""
+
+#: index.docbook:170
+msgid "length"
+msgstr ""
+
+#: index.docbook:171, index.docbook:176, index.docbook:181
+msgid "number"
+msgstr ""
+
+#: index.docbook:172
+msgid "column length"
+msgstr ""
+
+#: index.docbook:175
+msgid "precision"
+msgstr ""
+
+#: index.docbook:177
+msgid "column decimal precision"
+msgstr ""
+
+#: index.docbook:180
+msgid "scale"
+msgstr ""
+
+#: index.docbook:182
+msgid "column decimal scale"
+msgstr ""
+
+#: index.docbook:185
+msgid "not-null"
+msgstr ""
+
+#: index.docbook:186, index.docbook:191
+msgid "true|false"
+msgstr ""
+
+#: index.docbook:187
+msgid "specfies that the column should be non-nullable"
+msgstr ""
+
+#: index.docbook:190
+msgid "unique"
+msgstr ""
+
+#: index.docbook:192
+msgid "specifies that the column should have a unique constraint"
+msgstr ""
+
+#: index.docbook:195
+msgid "index"
+msgstr ""
+
+#: index.docbook:196
+msgid "index_name"
+msgstr ""
+
+#: index.docbook:197
+msgid "specifies the name of a (multi-column) index"
+msgstr ""
+
+#: index.docbook:200
+msgid "unique-key"
+msgstr ""
+
+#: index.docbook:201
+msgid "unique_key_name"
+msgstr ""
+
+#: index.docbook:202
+msgid "specifies the name of a multi-column unique constraint"
+msgstr ""
+
+#: index.docbook:205
+msgid "foreign-key"
+msgstr ""
+
+#: index.docbook:206
+msgid "foreign_key_name"
+msgstr ""
+
+#: index.docbook:207
+msgid "specifies the name of the foreign key constraint generated for an association, for a <literal><one-to-one></literal>, <literal><many-to-one></literal>, <literal><key></literal>, or <literal><many-to-many></literal> mapping element. Note that <literal>inverse=\"true\"</literal> sides will not be considered by <literal>SchemaExport</literal>."
+msgstr ""
+
+#: index.docbook:217
+msgid "sql-type"
+msgstr ""
+
+#: index.docbook:218
+msgid "SQL column type"
+msgstr ""
+
+#: index.docbook:219
+msgid "overrides the default column type (attribute of <literal><column></literal> element only)"
+msgstr ""
+
+#: index.docbook:225
+msgid "default"
+msgstr ""
+
+#: index.docbook:226, index.docbook:233
+msgid "SQL expression"
+msgstr ""
+
+#: index.docbook:227
+msgid "specify a default value for the column"
+msgstr ""
+
+#: index.docbook:232
+msgid "check"
+msgstr ""
+
+#: index.docbook:234
+msgid "create an SQL check constraint on either column or table"
+msgstr ""
+
+#: index.docbook:242
+msgid "The <literal><comment></literal> element allows you to specify comments for the generated schema."
+msgstr ""
+
+#: index.docbook:247
+msgid ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">\n"
+ " <comment>Current customers only</comment>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[<property name=\"balance\">\n"
+ " <column name=\"bal\">\n"
+ " <comment>Balance in USD</comment>\n"
+ " </column>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:251
+msgid "This results in a <literal>comment on table</literal> or <literal>comment on column</literal> statement in the generated DDL (where supported)."
+msgstr ""
+
+#: index.docbook:260
+msgid "Running the tool"
+msgstr ""
+
+#: index.docbook:262
+msgid "The <literal>SchemaExport</literal> tool writes a DDL script to standard out and/or executes the DDL statements."
+msgstr ""
+
+#: index.docbook:267
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>options mapping_files</emphasis>"
+msgstr ""
+
+#: index.docbook:273
+msgid "<literal>SchemaExport</literal> Command Line Options"
+msgstr ""
+
+#: index.docbook:279, index.docbook:429, index.docbook:498
+msgid "Option"
+msgstr ""
+
+#: index.docbook:280, index.docbook:367, index.docbook:430, index.docbook:499
+msgid "Description"
+msgstr ""
+
+#: index.docbook:285, index.docbook:435
+msgid "--quiet"
+msgstr ""
+
+#: index.docbook:286, index.docbook:436
+msgid "don't output the script to stdout"
+msgstr ""
+
+#: index.docbook:289
+msgid "--drop"
+msgstr ""
+
+#: index.docbook:290
+msgid "only drop the tables"
+msgstr ""
+
+#: index.docbook:293
+msgid "--create"
+msgstr ""
+
+#: index.docbook:294
+msgid "only create the tables"
+msgstr ""
+
+#: index.docbook:297, index.docbook:439
+msgid "--text"
+msgstr ""
+
+#: index.docbook:298
+msgid "don't export to the database"
+msgstr ""
+
+#: index.docbook:301
+msgid "--output=my_schema.ddl"
+msgstr ""
+
+#: index.docbook:302
+msgid "output the ddl script to a file"
+msgstr ""
+
+#: index.docbook:305, index.docbook:443, index.docbook:504
+msgid "--naming=eg.MyNamingStrategy"
+msgstr ""
+
+#: index.docbook:306, index.docbook:444, index.docbook:505
+msgid "select a <literal>NamingStrategy</literal>"
+msgstr ""
+
+#: index.docbook:309, index.docbook:451, index.docbook:512
+msgid "--config=hibernate.cfg.xml"
+msgstr ""
+
+#: index.docbook:310
+msgid "read Hibernate configuration from an XML file"
+msgstr ""
+
+#: index.docbook:313, index.docbook:447, index.docbook:508
+msgid "--properties=hibernate.properties"
+msgstr ""
+
+#: index.docbook:314, index.docbook:448, index.docbook:509
+msgid "read database properties from a file"
+msgstr ""
+
+#: index.docbook:317
+msgid "--format"
+msgstr ""
+
+#: index.docbook:318
+msgid "format the generated SQL nicely in the script"
+msgstr ""
+
+#: index.docbook:321
+msgid "--delimiter=;"
+msgstr ""
+
+#: index.docbook:322
+msgid "set an end of line delimiter for the script"
+msgstr ""
+
+#: index.docbook:328
+msgid "You may even embed <literal>SchemaExport</literal> in your application:"
+msgstr ""
+
+#: index.docbook:332
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+msgstr ""
+
+#: index.docbook:337
+msgid "Properties"
+msgstr ""
+
+#: index.docbook:339
+msgid "Database properties may be specified"
+msgstr ""
+
+#: index.docbook:345
+msgid "as system properties with <literal>-D</literal><emphasis><property></emphasis>"
+msgstr ""
+
+#: index.docbook:348
+msgid "in <literal>hibernate.properties</literal>"
+msgstr ""
+
+#: index.docbook:351
+msgid "in a named properties file with <literal>--properties</literal>"
+msgstr ""
+
+#: index.docbook:355
+msgid "The needed properties are:"
+msgstr ""
+
+#: index.docbook:360
+msgid "SchemaExport Connection Properties"
+msgstr ""
+
+#: index.docbook:366
+msgid "Property Name"
+msgstr ""
+
+#: index.docbook:372
+msgid "hibernate.connection.driver_class"
+msgstr ""
+
+#: index.docbook:373
+msgid "jdbc driver class"
+msgstr ""
+
+#: index.docbook:376
+msgid "hibernate.connection.url"
+msgstr ""
+
+#: index.docbook:377
+msgid "jdbc url"
+msgstr ""
+
+#: index.docbook:380
+msgid "hibernate.connection.username"
+msgstr ""
+
+#: index.docbook:381
+msgid "database user"
+msgstr ""
+
+#: index.docbook:384
+msgid "hibernate.connection.password"
+msgstr ""
+
+#: index.docbook:385
+msgid "user password"
+msgstr ""
+
+#: index.docbook:388
+msgid "hibernate.dialect"
+msgstr ""
+
+#: index.docbook:389
+msgid "dialect"
+msgstr ""
+
+#: index.docbook:398
+msgid "Using Ant"
+msgstr ""
+
+#: index.docbook:400
+msgid "You can call <literal>SchemaExport</literal> from your Ant build script:"
+msgstr ""
+
+#: index.docbook:404
+msgid ""
+ "<![CDATA[<target name=\"schemaexport\">\n"
+ " <taskdef name=\"schemaexport\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaexport\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\"\n"
+ " text=\"no\"\n"
+ " drop=\"no\"\n"
+ " delimiter=\";\"\n"
+ " output=\"schema-export.sql\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaexport>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:409
+msgid "Incremental schema updates"
+msgstr ""
+
+#: index.docbook:411
+msgid "The <literal>SchemaUpdate</literal> tool will update an existing schema with \"incremental\" changes. Note that <literal>SchemaUpdate</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers."
+msgstr ""
+
+#: index.docbook:417
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>options mapping_files</emphasis>"
+msgstr ""
+
+#: index.docbook:423
+msgid "<literal>SchemaUpdate</literal> Command Line Options"
+msgstr ""
+
+#: index.docbook:440
+msgid "don't export the script to the database"
+msgstr ""
+
+#: index.docbook:452, index.docbook:513
+msgid "specify a <literal>.cfg.xml</literal> file"
+msgstr ""
+
+#: index.docbook:458
+msgid "You may embed <literal>SchemaUpdate</literal> in your application:"
+msgstr ""
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+msgstr ""
+
+#: index.docbook:467
+msgid "Using Ant for incremental schema updates"
+msgstr ""
+
+#: index.docbook:469
+msgid "You can call <literal>SchemaUpdate</literal> from the Ant script:"
+msgstr ""
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[<target name=\"schemaupdate\">\n"
+ " <taskdef name=\"schemaupdate\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaupdate\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaupdate>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:478
+msgid "Schema validation"
+msgstr ""
+
+#: index.docbook:480
+msgid "The <literal>SchemaValidator</literal> tool will validate that the existing database schema \"matches\" your mapping documents. Note that <literal>SchemaValidator</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers. This tool is extremely useful for testing."
+msgstr ""
+
+#: index.docbook:486
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaValidator</literal> <emphasis>options mapping_files</emphasis>"
+msgstr ""
+
+#: index.docbook:492
+msgid "<literal>SchemaValidator</literal> Command Line Options"
+msgstr ""
+
+#: index.docbook:519
+msgid "You may embed <literal>SchemaValidator</literal> in your application:"
+msgstr ""
+
+#: index.docbook:523
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaValidator(cfg).validate();]]>"
+msgstr ""
+
+#: index.docbook:528
+msgid "Using Ant for schema validation"
+msgstr ""
+
+#: index.docbook:530
+msgid "You can call <literal>SchemaValidator</literal> from the Ant script:"
+msgstr ""
+
+#: index.docbook:534
+msgid ""
+ "<![CDATA[<target name=\"schemavalidate\">\n"
+ " <taskdef name=\"schemavalidator\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaValidatorTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemavalidator\n"
+ " properties=\"hibernate.properties\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemavalidator>\n"
+ "</target>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/transactions.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/transactions.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/transactions.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,673 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Transactions And Concurrency"
+msgstr ""
+
+#: index.docbook:7
+msgid "The most important point about Hibernate and concurrency control is that it is very easy to understand. Hibernate directly uses JDBC connections and JTA resources without adding any additional locking behavior. We highly recommend you spend some time with the JDBC, ANSI, and transaction isolation specification of your database management system."
+msgstr ""
+
+#: index.docbook:14
+msgid "Hibernate does not lock objects in memory. Your application can expect the behavior as defined by the isolation level of your database transactions. Note that thanks to the <literal>Session</literal>, which is also a transaction-scoped cache, Hibernate provides repeatable reads for lookup by identifier and entity queries (not reporting queries that return scalar values)."
+msgstr ""
+
+#: index.docbook:22
+msgid "In addition to versioning for automatic optimistic concurrency control, Hibernate also offers a (minor) API for pessimistic locking of rows, using the <literal>SELECT FOR UPDATE</literal> syntax. Optimistic concurrency control and this API are discussed later in this chapter."
+msgstr ""
+
+#: index.docbook:29
+msgid "We start the discussion of concurrency control in Hibernate with the granularity of <literal>Configuration</literal>, <literal>SessionFactory</literal>, and <literal>Session</literal>, as well as database transactions and long conversations."
+msgstr ""
+
+#: index.docbook:36
+msgid "Session and transaction scopes"
+msgstr ""
+
+#: index.docbook:38
+msgid "A <literal>SessionFactory</literal> 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</literal> instance."
+msgstr ""
+
+#: index.docbook:44
+msgid "A <literal>Session</literal> is an inexpensive, non-threadsafe object that should be used once, for a single request, a conversation, single unit of work, and then discarded. A <literal>Session</literal> will not obtain a JDBC <literal>Connection</literal> (or a <literal>Datasource</literal>) unless it is needed, hence consume no resources until used."
+msgstr ""
+
+#: index.docbook:52
+msgid "To complete this picture you also have to think about database transactions. A database transaction has to be as short as possible, to reduce lock contention in the database. Long database transactions will prevent your application from scaling to highly concurrent load. Hence, it is almost never good design to hold a database transaction open during user think time, until the unit of work is complete."
+msgstr ""
+
+#: index.docbook:61
+msgid "What is the scope of a unit of work? Can a single Hibernate <literal>Session</literal> span several database transactions or is this a one-to-one relationship of scopes? When should you open and close a <literal>Session</literal> and how do you demarcate the database transaction boundaries?"
+msgstr ""
+
+#: index.docbook:69
+msgid "Unit of work"
+msgstr ""
+
+#: index.docbook:71
+msgid "First, don't use the <emphasis>session-per-operation</emphasis> antipattern, that is, don't open and close a <literal>Session</literal> for every simple database call in a single thread! Of course, 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. (Note that this also means that auto-commit after every single SQL statement is useless in an application, this mode is intended for ad-hoc SQL console work. Hibernate disables, or expects the application server to do so, auto-commit mode immediately.) Database transactions are never optional, all communication with a database has to occur inside a transaction, no matter if you read or write data. As explained, 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 much more maintainable and extensible."
+msgstr ""
+
+#: index.docbook:87
+msgid "The most common pattern in a multi-user client/server application is <emphasis>session-per-request</emphasis>. In this model, a request from the client is send to the server (where the Hibernate persistence layer runs), a new Hibernate <literal>Session</literal> is opened, and all database operations are executed in this unit of work. Once the work has been completed (and the response for the client has been prepared), the session is flushed and closed. You would also use a single database transaction to serve the clients request, starting and committing it when you open and close the <literal>Session</literal>. The relationship between the two is one-to-one and this model is a perfect fit for many applications."
+msgstr ""
+
+#: index.docbook:99
+msgid "The challenge lies in the implementation. Hibernate provides built-in management of the \"current session\" to simplify this pattern. All you have to do is start a transaction when a server request has to be processed, and end the transaction before the response is send to the client. You can do this in any way you like, common solutions are <literal>ServletFilter</literal>, 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 decide to use programmatic transaction demarcation, prefer the Hibernate <literal>Transaction</literal> API shown later in this chapter, for ease of use and code portability."
+msgstr ""
+
+#: index.docbook:112
+msgid "Your application code can access a \"current session\" to process the request by simply calling <literal>sessionFactory.getCurrentSession()</literal> anywhere and as often as needed. You will always get a <literal>Session</literal> 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 ""
+
+#: index.docbook:120
+msgid "Sometimes it is convenient to extend the scope of a <literal>Session</literal> 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 complete is easy to do if you implement your own interceptor. However, it is not easily doable if you rely on EJBs with container-managed transactions, as 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 around this <emphasis>Open Session in View</emphasis> pattern."
+msgstr ""
+
+#: index.docbook:135
+msgid "Long conversations"
+msgstr ""
+
+#: index.docbook:137
+msgid "The session-per-request pattern is not the only useful concept you can use to design units of work. Many business processes require a whole series of interactions with the user interleaved with database accesses. In web and enterprise applications it is not acceptable for a database transaction to span a user interaction. Consider the following example:"
+msgstr ""
+
+#: index.docbook:147
+msgid "The first screen of a dialog opens, the data seen by the user has been loaded in a particular <literal>Session</literal> and database transaction. The user is free to modify the objects."
+msgstr ""
+
+#: index.docbook:154
+msgid "The user clicks \"Save\" after 5 minutes and expects his modifications to be made persistent; he also expects that he was the only person editing this information and that no conflicting modification can occur."
+msgstr ""
+
+#: index.docbook:162
+msgid "We call this unit of work, from the point of view of the user, a long running <emphasis>conversation</emphasis> (or <emphasis>application transaction</emphasis>). There are many ways how you can implement this in your application."
+msgstr ""
+
+#: index.docbook:168
+msgid "A first naive implementation might keep the <literal>Session</literal> 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 of course an anti-pattern, since lock contention would not allow the application to scale with the number of concurrent users."
+msgstr ""
+
+#: index.docbook:176
+msgid "Clearly, we have to use several database transactions to implement the converastion. 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 (e.g. in a wizard-style dialog spanning several request/response cycles). This is easier to implement than it might sound, especially if you use Hibernate's features:"
+msgstr ""
+
+#: index.docbook:189
+msgid "<emphasis>Automatic Versioning</emphasis> - Hibernate can do automatic optimistic concurrency control for you, it can automatically detect if a concurrent modification occured during user think time. Usually we only check at the end of the conversation."
+msgstr ""
+
+#: index.docbook:197
+msgid "<emphasis>Detached Objects</emphasis> - If you decide to use the already discussed <emphasis>session-per-request</emphasis> pattern, all loaded instances will be in 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</emphasis>. Automatic versioning is used to isolate concurrent modifications."
+msgstr ""
+
+#: index.docbook:207
+msgid "<emphasis>Extended (or Long) Session</emphasis> - The Hibernate <literal>Session</literal> may 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</literal> is usually not allowed to be flushed automatically, but explicitely."
+msgstr ""
+
+#: index.docbook:220
+msgid "Both <emphasis>session-per-request-with-detached-objects</emphasis> and <emphasis>session-per-conversation</emphasis> have advantages and disadvantages, we discuss them later in this chapter in the context of optimistic concurrency control."
+msgstr ""
+
+#: index.docbook:229
+msgid "Considering object identity"
+msgstr ""
+
+#: index.docbook:231
+msgid "An application may concurrently access the same persistent state in two different <literal>Session</literal>s. However, an instance of a persistent class is never shared between two <literal>Session</literal> instances. Hence there are two different notions of identity:"
+msgstr ""
+
+#: index.docbook:240
+msgid "Database Identity"
+msgstr ""
+
+#: index.docbook:243
+msgid "foo.getId().equals( bar.getId() )"
+msgstr ""
+
+#: index.docbook:248
+msgid "JVM Identity"
+msgstr ""
+
+#: index.docbook:251
+msgid "foo==bar"
+msgstr ""
+
+#: index.docbook:257
+msgid "Then for objects attached to a <emphasis>particular</emphasis> <literal>Session</literal> (i.e. in the scope of a <literal>Session</literal>) the two notions are equivalent, and JVM identity for database identity is guaranteed by Hibernate. However, 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 (automatic versioning) at flush/commit time, using an optimistic approach."
+msgstr ""
+
+#: index.docbook:266
+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 only doesn't need expensive locking or other means of synchronization. The application never needs to synchronize on any business object, as long as it sticks to a single thread per <literal>Session</literal>. Within a <literal>Session</literal> the application may safely use <literal>==</literal> to compare objects."
+msgstr ""
+
+#: index.docbook:275
+msgid "However, an application that uses <literal>==</literal> outside of a <literal>Session</literal>, might see unexpected results. This might occur even in some unexpected places, for example, if you put two detached instances into the same <literal>Set</literal>. Both might have the same database identity (i.e. they represent the same row), but JVM identity is by definition not guaranteed for instances in detached state. The developer has to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods in persistent classes and implement his own notion of object equality. There is one caveat: Never use the database identifier to implement equality, use a business key, 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</literal>, changing the hashcode breaks the contract of t!
he <literal>Set</literal>. Attributes for business keys don't 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</literal>. See the Hibernate website for a more thorough discussion of this issue. Also note that this is not a Hibernate issue, but simply how Java object identity and equality has to be implemented."
+msgstr ""
+
+#: index.docbook:296
+msgid "Common issues"
+msgstr ""
+
+#: index.docbook:298
+msgid "Never use the anti-patterns <emphasis>session-per-user-session</emphasis> or <emphasis>session-per-application</emphasis> (of course, there are rare exceptions to this rule). Note that some of the following issues might also appear with the recommended patterns, make sure you understand the implications before making a design decision:"
+msgstr ""
+
+#: index.docbook:307
+msgid "A <literal>Session</literal> is not thread-safe. Things which are supposed to work concurrently, like HTTP requests, session beans, or Swing workers, will cause race conditions if a <literal>Session</literal> instance would be shared. If you keep your Hibernate <literal>Session</literal> in your <literal>HttpSession</literal> (discussed later), you should consider synchronizing access to your Http session. Otherwise, a user that clicks reload fast enough may use the same <literal>Session</literal> in two concurrently running threads."
+msgstr ""
+
+#: index.docbook:318
+msgid "An exception thrown by Hibernate means you have to rollback your database transaction and close the <literal>Session</literal> immediately (discussed later in more detail). If your <literal>Session</literal> is bound to the application, you have to stop the application. Rolling back the database transaction doesn't put your business objects back into the state they were at the start of the transaction. This means the database state and the business objects do get out of sync. Usually this is not a problem, because exceptions are not recoverable and you have to start over after rollback anyway."
+msgstr ""
+
+#: index.docbook:330
+msgid "The <literal>Session</literal> caches every object that is in persistent state (watched and checked for dirty state by Hibernate). This means it grows endlessly until you get an OutOfMemoryException, if you keep it open for a long time or simply load too much data. One solution for this is to call <literal>clear()</literal> and <literal>evict()</literal> to manage the <literal>Session</literal> cache, but you most likely should consider a Stored Procedure if you need mass data operations. Some solutions are shown in <xref linkend=\"batch\"/>. Keeping a <literal>Session</literal> open for the duration of a user session also means a high probability of stale data."
+msgstr ""
+
+#: index.docbook:348
+msgid "Database transaction demarcation"
+msgstr ""
+
+#: index.docbook:350
+msgid "Datatabase (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 ""
+
+#: index.docbook:360
+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, in other words, begin, commit, or rollback database transactions himself. 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 ""
+
+#: index.docbook:370
+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 you'd use programmatic transaction demaracation. Hibernate offers a wrapper API called <literal>Transaction</literal> 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 ""
+
+#: index.docbook:379
+msgid "Usually, ending a <literal>Session</literal> involves four distinct phases:"
+msgstr ""
+
+#: index.docbook:385
+msgid "flush the session"
+msgstr ""
+
+#: index.docbook:390
+msgid "commit the transaction"
+msgstr ""
+
+#: index.docbook:395
+msgid "close the session"
+msgstr ""
+
+#: index.docbook:400
+msgid "handle exceptions"
+msgstr ""
+
+#: index.docbook:406
+msgid "Flushing the session has been discussed earlier, we'll now have a closer look at transaction demarcation and exception handling in both managed- and non-managed environments."
+msgstr ""
+
+#: index.docbook:413
+msgid "Non-managed environment"
+msgstr ""
+
+#: index.docbook:415
+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 ""
+
+#: index.docbook:422
+msgid ""
+ "<![CDATA[// Non-managed environment idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:424
+msgid "You don't have to <literal>flush()</literal> the <literal>Session</literal> explicitly - the call to <literal>commit()</literal> automatically triggers the synchronization (depending upon the <xref linkend=\"objectstate-flushing\"/>FlushMode for the session. A call to <literal>close()</literal> marks the end of a session. The main implication of <literal>close()</literal> is that the JDBC connection will be relinquished by the session. This Java code is portable and runs in both non-managed and JTA environments."
+msgstr ""
+
+#: index.docbook:433
+msgid "A much more flexible solution is Hibernate's built-in \"current session\" context management, as described earlier:"
+msgstr ""
+
+#: index.docbook:438
+msgid ""
+ "<![CDATA[// Non-managed environment idiom with getCurrentSession()\n"
+ "try {\n"
+ " factory.getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " factory.getCurrentSession().getTransaction().commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " factory.getCurrentSession().getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:440
+msgid "You will very likely never 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</literal> (and usually can only clean up and exit) are in different layers. The current context management by Hibernate can significantly simplify this design, as all you need is access to a <literal>SessionFactory</literal>. Exception handling is discussed later in this chapter."
+msgstr ""
+
+#: index.docbook:450
+msgid "Note that you should select <literal>org.hibernate.transaction.JDBCTransactionFactory</literal> (which is the default), and for the second example <literal>\"thread\"</literal> as your <literal>hibernate.current_session_context_class</literal>."
+msgstr ""
+
+#: index.docbook:459
+msgid "Using JTA"
+msgstr ""
+
+#: index.docbook:461
+msgid "If your persistence layer runs in an application server (e.g. 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 ""
+
+#: index.docbook:468
+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</literal> API. So, the transaction management code is identical to the non-managed environment."
+msgstr ""
+
+#: index.docbook:474
+msgid ""
+ "<![CDATA[// BMT idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:476
+msgid "If you want to use a transaction-bound <literal>Session</literal>, that is, the <literal>getCurrentSession()</literal> functionality for easy context propagation, you will have to use the JTA <literal>UserTransaction</literal> API directly:"
+msgstr ""
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[// BMT idiom with getCurrentSession()\n"
+ "try {\n"
+ " UserTransaction tx = (UserTransaction)new InitialContext()\n"
+ " .lookup(\"java:comp/UserTransaction\");\n"
+ "\n"
+ " tx.begin();\n"
+ "\n"
+ " // Do some work on Session bound to transaction\n"
+ " factory.getCurrentSession().load(...);\n"
+ " factory.getCurrentSession().persist(...);\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:484
+msgid "With CMT, transaction demarcation is done in session bean deployment descriptors, not programatically, hence, the code is reduced to:"
+msgstr ""
+
+#: index.docbook:489
+msgid ""
+ "<![CDATA[// CMT idiom\n"
+ " Session sess = factory.getCurrentSession();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:491
+msgid "In a CMT/EJB even rollback happens automatically, since an unhandled <literal>RuntimeException</literal> thrown by a session bean method tells the container to set the global transaction to rollback. <emphasis>This means you do not need to use the Hibernate <literal>Transaction</literal> API at all with BMT or CMT, and you get automatic propagation of the \"current\" Session bound to the transaction.</emphasis>"
+msgstr ""
+
+#: index.docbook:499
+msgid "Note that you should 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, when you configure Hibernate's transaction factory. Remember to also set <literal>hibernate.transaction.manager_lookup_class</literal>. Furthermore, make sure that your <literal>hibernate.current_session_context_class</literal> is either unset (backwards compatiblity), or set to <literal>\"jta\"</literal>."
+msgstr ""
+
+#: index.docbook:508
+msgid "The <literal>getCurrentSession()</literal> operation has one downside in a JTA environment. There is one caveat to the use of <literal>after_statement</literal> connection release mode, which is then used by default. Due to a silly limitation of the JTA spec, it is not possible for Hibernate to automatically clean up any unclosed <literal>ScrollableResults</literal> or <literal>Iterator</literal> instances returned by <literal>scroll()</literal> or <literal>iterate()</literal>. You <emphasis>must</emphasis> release the underlying database cursor by calling <literal>ScrollableResults.close()</literal> or <literal>Hibernate.close(Iterator)</literal> explicity from a <literal>finally</literal> block. (Of course, most applications can easily avoid using <literal>scroll()</literal> or <literal>iterate()</literal> at all from the JTA or CMT code.)"
+msgstr ""
+
+#: index.docbook:524
+msgid "Exception handling"
+msgstr ""
+
+#: index.docbook:526
+msgid "If the <literal>Session</literal> throws an exception (including any <literal>SQLException</literal>), you should immediately rollback the database transaction, call <literal>Session.close()</literal> and discard the <literal>Session</literal> instance. Certain methods of <literal>Session</literal> will <emphasis>not</emphasis> leave the session in a consistent state. No exception thrown by Hibernate can be treated as recoverable. Ensure that the <literal>Session</literal> will be closed by calling <literal>close()</literal> in a <literal>finally</literal> block."
+msgstr ""
+
+#: index.docbook:537
+msgid "The <literal>HibernateException</literal>, which wraps most of the errors that can occur in a Hibernate persistence layer, is an unchecked exception (it wasn't in older versions of Hibernate). In our opinion, we shouldn't 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 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 which are not a <literal>HibernateException</literal>. These are, again, not recoverable and appropriate action should be taken."
+msgstr ""
+
+#: index.docbook:549
+msgid "Hibernate wraps <literal>SQLException</literal>s thrown while interacting with the database in a <literal>JDBCException</literal>. In fact, Hibernate will attempt to convert the eexception into a more meningful subclass of <literal>JDBCException</literal>. The underlying <literal>SQLException</literal> is always available via <literal>JDBCException.getCause()</literal>. Hibernate converts the <literal>SQLException</literal> into an appropriate <literal>JDBCException</literal> subclass using the <literal>SQLExceptionConverter</literal> attached to the <literal>SessionFactory</literal>. By default, the <literal>SQLExceptionConverter</literal> is defined by the configured dialect; however, it is also possible to plug in a custom implementation (see the javadocs for the <literal>SQLExceptionConverterFactory</literal> class for details). The standard <literal>JDBCException</literal> subtypes are:"
+msgstr ""
+
+#: index.docbook:565
+msgid "<literal>JDBCConnectionException</literal> - indicates an error with the underlying JDBC communication."
+msgstr ""
+
+#: index.docbook:571
+msgid "<literal>SQLGrammarException</literal> - indicates a grammar or syntax problem with the issued SQL."
+msgstr ""
+
+#: index.docbook:577
+msgid "<literal>ConstraintViolationException</literal> - indicates some form of integrity constraint violation."
+msgstr ""
+
+#: index.docbook:583
+msgid "<literal>LockAcquisitionException</literal> - indicates an error acquiring a lock level necessary to perform the requested operation."
+msgstr ""
+
+#: index.docbook:589
+msgid "<literal>GenericJDBCException</literal> - a generic exception which did not fall into any of the other categories."
+msgstr ""
+
+#: index.docbook:599
+msgid "Transaction timeout"
+msgstr ""
+
+#: index.docbook:601
+msgid "One extremely 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 functioanlity is abstracted by the Hibernate <literal>Transaction</literal> object."
+msgstr ""
+
+#: index.docbook:614
+msgid ""
+ "<![CDATA[\n"
+ "Session sess = factory.openSession();\n"
+ "try {\n"
+ " //set transaction timeout to 3 seconds\n"
+ " sess.getTransaction().setTimeout(3);\n"
+ " sess.getTransaction().begin();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " sess.getTransaction().commit()\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " sess.getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:616
+msgid "Note that <literal>setTimeout()</literal> may not be called in a CMT bean, where transaction timeouts must be defined declaratively."
+msgstr ""
+
+#: index.docbook:626
+msgid "Optimistic concurrency control"
+msgstr ""
+
+#: index.docbook:628
+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 for three possible approaches to writing application code that uses optimistic concurrency. The use cases we show are in the context of long conversations, but version checking also has the benefit of preventing lost updates in single database transactions."
+msgstr ""
+
+#: index.docbook:639
+msgid "Application version checking"
+msgstr ""
+
+#: index.docbook:641
+msgid "In an implementation without much help from Hibernate, each interaction with the database occurs in a new <literal>Session</literal> and the developer is responsible for reloading all persistent instances from the database before manipulating them. This approach forces the application 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 ""
+
+#: index.docbook:650
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "\n"
+ "int oldVersion = foo.getVersion();\n"
+ "session.load( foo, foo.getKey() ); // load the current state\n"
+ "if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:652
+msgid "The <literal>version</literal> property is mapped using <literal><version></literal>, and Hibernate will automatically increment it during flush if the entity is dirty."
+msgstr ""
+
+#: index.docbook:658
+msgid "Of course, if you are operating in a low-data-concurrency environment and don't require version checking, you may use this approach and just skip the version check. In that case, <emphasis>last commit wins</emphasis> will be the default strategy for your long conversations. Keep in mind 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 ""
+
+#: index.docbook:667
+msgid "Clearly, manual version checking is only feasible in very trivial circumstances and not practical for most applications. Often not only single instances, but complete graphs of modified ojects have to be checked. Hibernate offers automatic version checking with either an extended <literal>Session</literal> or detached instances as the design paradigm."
+msgstr ""
+
+#: index.docbook:678
+msgid "Extended session and automatic versioning"
+msgstr ""
+
+#: index.docbook:680
+msgid "A single <literal>Session</literal> instance and its persistent instances are used for the whole conversation, known as <emphasis>session-per-conversation</emphasis>. Hibernate checks instance versions at flush time, throwing an exception if concurrent modification is detected. It's 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 ""
+
+#: index.docbook:689
+msgid "The <literal>Session</literal> 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 need not concern itself with version checking or with reattaching detached instances, nor does it have to reload instances in every database transaction."
+msgstr ""
+
+#: index.docbook:697
+msgid ""
+ "<![CDATA[// foo is an instance loaded earlier by the old session\n"
+ "Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction\n"
+ "\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "session.flush(); // Only for last transaction in conversation\n"
+ "t.commit(); // Also return JDBC connection\n"
+ "session.close(); // Only for last transaction in conversation]]>"
+msgstr ""
+
+#: index.docbook:698
+msgid "The <literal>foo</literal> object still knows which <literal>Session</literal> 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 aren't updating, you may call <literal>Session.lock()</literal> with <literal>LockMode.READ</literal> on any objects that might have been updated by another transaction. You don't need to lock any data that you <emphasis>are</emphasis> updating. Usually you would set <literal>FlushMode.MANUAL</literal> on an extended <literal>Session</literal>, so that only the last database transaction cycle is allowed to actually persist all modifications made in this conversation. Hence, only this last database transaction would include the <literal>flush()</literal> operation, and then also <literal>close()!
</literal> the session to end the conversation."
+msgstr ""
+
+#: index.docbook:713
+msgid "This pattern is problematic if the <literal>Session</literal> is too big to be stored during user think time, e.g. an <literal>HttpSession</literal> should be kept as small as possible. As the <literal>Session</literal> is also the (mandatory) first-level cache and contains all loaded objects, we can probably use this strategy only for a few request/response cycles. You should use a <literal>Session</literal> only for a single conversation, as it will soon also have stale data."
+msgstr ""
+
+#: index.docbook:723
+msgid "(Note that earlier Hibernate versions required explicit disconnection and reconnection of a <literal>Session</literal>. These methods are deprecated, as beginning and ending a transaction has the same effect.)"
+msgstr ""
+
+#: index.docbook:729
+msgid "Also note that you should keep the disconnected <literal>Session</literal> close to the persistence layer. In other words, use an EJB stateful session bean to hold the <literal>Session</literal> in a three-tier environment, and don't transfer it to the web layer (or even serialize it to a separate tier) to store it in the <literal>HttpSession</literal>."
+msgstr ""
+
+#: index.docbook:737
+msgid "The extended session pattern, or <emphasis>session-per-conversation</emphasis>, is more difficult to implement with automatic current session context management. You need to supply your own implementation of the <literal>CurrentSessionContext</literal> for this, see the Hibernate Wiki for examples."
+msgstr ""
+
+#: index.docbook:747
+msgid "Detached objects and automatic versioning"
+msgstr ""
+
+#: index.docbook:749
+msgid "Each interaction with the persistent store occurs in a new <literal>Session</literal>. However, the same persistent instances are reused for each interaction with the database. The application manipulates the state of detached instances originally loaded in another <literal>Session</literal> and then reattaches them using <literal>Session.update()</literal>, <literal>Session.saveOrUpdate()</literal>, or <literal>Session.merge()</literal>."
+msgstr ""
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "foo.setProperty(\"bar\");\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "session.saveOrUpdate(foo); // Use merge() if \"foo\" might have been loaded already\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:759
+msgid "Again, Hibernate will check instance versions during flush, throwing an exception if conflicting updates occured."
+msgstr ""
+
+#: index.docbook:764
+msgid "You may also call <literal>lock()</literal> instead of <literal>update()</literal> and use <literal>LockMode.READ</literal> (performing a version check, bypassing all caches) if you are sure that the object has not been modified."
+msgstr ""
+
+#: index.docbook:773
+msgid "Customizing automatic versioning"
+msgstr ""
+
+#: index.docbook:775
+msgid "You may disable Hibernate's automatic version increment for particular properties and collections by setting the <literal>optimistic-lock</literal> mapping attribute to <literal>false</literal>. Hibernate will then no longer increment versions if the property is dirty."
+msgstr ""
+
+#: index.docbook:782
+msgid "Legacy database schemas are often static and can't be modified. Or, other applications might also access the same database and don't know how to handle version numbers or even timestamps. In both cases, versioning can't rely on a particular column in a table. To force a version check without a version or timestamp property mapping, with a comparison of the state of all fields in a row, turn on <literal>optimistic-lock=\"all\"</literal> in the <literal><class></literal> mapping. Note that this concepetually only works if Hibernate can compare the old and new state, i.e. if you use a single long <literal>Session</literal> and not session-per-request-with-detached-objects."
+msgstr ""
+
+#: index.docbook:793
+msgid "Sometimes concurrent modification can be permitted as long as the changes that have been made don't overlap. If you set <literal>optimistic-lock=\"dirty\"</literal> when mapping the <literal><class></literal>, Hibernate will only compare dirty fields during flush."
+msgstr ""
+
+#: index.docbook:799
+msgid "In both cases, with dedicated version/timestamp columns or with full/dirty field comparison, Hibernate uses a single <literal>UPDATE</literal> statement (with an appropriate <literal>WHERE</literal> clause) per entity to execute the version check and update the information. If you use transitive persistence to cascade reattachment to associated entities, Hibernate might execute uneccessary updates. This is usually not a problem, but <emphasis>on update</emphasis> 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\"</literal> in the <literal><class></literal> mapping, forcing Hibernate to <literal>SELECT</literal> the instance to ensure that changes did actually occur, before updating the row."
+msgstr ""
+
+#: index.docbook:817
+msgid "Pessimistic Locking"
+msgstr ""
+
+#: index.docbook:819
+msgid "It is not intended that users spend much time worring about locking strategies. Its 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 sometimes wish to obtain exclusive pessimistic locks, or re-obtain locks at the start of a new transaction."
+msgstr ""
+
+#: index.docbook:826
+msgid "Hibernate will always use the locking mechanism of the database, never lock objects in memory!"
+msgstr ""
+
+#: index.docbook:831
+msgid "The <literal>LockMode</literal> class defines the different lock levels that may be acquired by Hibernate. A lock is obtained by the following mechanisms:"
+msgstr ""
+
+#: index.docbook:838
+msgid "<literal>LockMode.WRITE</literal> is acquired automatically when Hibernate updates or inserts a row."
+msgstr ""
+
+#: index.docbook:844
+msgid "<literal>LockMode.UPGRADE</literal> may be acquired upon explicit user request using <literal>SELECT ... FOR UPDATE</literal> on databases which support that syntax."
+msgstr ""
+
+#: index.docbook:850
+msgid "<literal>LockMode.UPGRADE_NOWAIT</literal> may be acquired upon explicit user request using a <literal>SELECT ... FOR UPDATE NOWAIT</literal> under Oracle."
+msgstr ""
+
+#: index.docbook:856
+msgid "<literal>LockMode.READ</literal> is acquired automatically when Hibernate reads data under Repeatable Read or Serializable isolation level. May be re-acquired by explicit user request."
+msgstr ""
+
+#: index.docbook:863
+msgid "<literal>LockMode.NONE</literal> represents the absence of a lock. All objects switch to this lock mode at the end of a <literal>Transaction</literal>. Objects associated with the session via a call to <literal>update()</literal> or <literal>saveOrUpdate()</literal> also start out in this lock mode."
+msgstr ""
+
+#: index.docbook:872
+msgid "The \"explicit user request\" is expressed in one of the following ways:"
+msgstr ""
+
+#: index.docbook:878
+msgid "A call to <literal>Session.load()</literal>, specifying a <literal>LockMode</literal>."
+msgstr ""
+
+#: index.docbook:883
+msgid "A call to <literal>Session.lock()</literal>."
+msgstr ""
+
+#: index.docbook:888
+msgid "A call to <literal>Query.setLockMode()</literal>."
+msgstr ""
+
+#: index.docbook:894
+msgid "If <literal>Session.load()</literal> is called with <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, and the requested object was not yet loaded by the session, the object is loaded using <literal>SELECT ... FOR UPDATE</literal>. If <literal>load()</literal> is called for an object that is already loaded with a less restrictive lock than the one requested, Hibernate calls <literal>lock()</literal> for that object."
+msgstr ""
+
+#: index.docbook:903
+msgid "<literal>Session.lock()</literal> performs a version number check if the specified lock mode is <literal>READ</literal>, <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>. (In the case of <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, <literal>SELECT ... FOR UPDATE</literal> is used.)"
+msgstr ""
+
+#: index.docbook:910
+msgid "If the database does not support the requested lock mode, Hibernate will use an appropriate alternate mode (instead of throwing an exception). This ensures that applications will be portable."
+msgstr ""
+
+#: index.docbook:919
+msgid "Connection Release Modes"
+msgstr ""
+
+#: index.docbook:921
+msgid "The legacy (2.x) behavior of Hibernate in regards to JDBC connection management was that a <literal>Session</literal> would obtain a connection when it was first needed and then hold unto that connection until the session was closed. Hibernate 3.x introduced the notion of connection release modes to tell a session how to handle its JDBC connections. Note that the following discussion is pertinent only to connections provided through a configured <literal>ConnectionProvider</literal>; 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</literal>:"
+msgstr ""
+
+#: index.docbook:935
+msgid "<literal>ON_CLOSE</literal> - is essentially the legacy behavior described above. The Hibernate session obatins a connection when it first needs to perform some JDBC access and holds unto that connection until the session is closed."
+msgstr ""
+
+#: index.docbook:942
+msgid "<literal>AFTER_TRANSACTION</literal> - says to release connections after a <literal>org.hibernate.Transaction</literal> has completed."
+msgstr ""
+
+#: index.docbook:948
+msgid "<literal>AFTER_STATEMENT</literal> (also referred to as aggressive release) - says to release connections after each and 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</literal>."
+msgstr ""
+
+#: index.docbook:958
+msgid "The configuration parameter <literal>hibernate.connection.release_mode</literal> is used to specify which release mode to use. The possible values:"
+msgstr ""
+
+#: index.docbook:965
+msgid "<literal>auto</literal> (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. It is rarely a good idea to 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 ""
+
+#: index.docbook:975
+msgid "<literal>on_close</literal> - says to use ConnectionReleaseMode.ON_CLOSE. This setting is left for backwards compatibility, but its use is highly discouraged."
+msgstr ""
+
+#: index.docbook:981
+msgid "<literal>after_transaction</literal> - says to use 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 ""
+
+#: index.docbook:989
+msgid "<literal>after_statement</literal> - says to use ConnectionReleaseMode.AFTER_STATEMENT. Additionally, the configured <literal>ConnectionProvider</literal> is consulted to see if it supports this setting (<literal>supportsAggressiveRelease()</literal>). 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 we make a call into <literal>ConnectionProvider.getConnection()</literal> or in auto-commit environments where it does not matter whether we get back the same connection."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/tutorial.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/tutorial.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/tutorial.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1315 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:7
+msgid "Introduction to Hibernate"
+msgstr ""
+
+#: index.docbook:10
+msgid "Preface"
+msgstr ""
+
+#: index.docbook:12
+msgid "This chapter is an introductory tutorial for new users of Hibernate. We start with a simple command line application using an in-memory database and develop it in easy to understand steps."
+msgstr ""
+
+#: index.docbook:18
+msgid "This tutorial is intended for new users of Hibernate but requires Java and SQL knowledge. It is based on a tutorial by Michael Gloegl, the third-party libraries we name are for JDK 1.4 and 5.0. You might need others for JDK 1.3."
+msgstr ""
+
+#: index.docbook:24
+msgid "The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr ""
+
+#: index.docbook:32
+msgid "Part 1 - The first Hibernate Application"
+msgstr ""
+
+#: index.docbook:34
+msgid "First, we'll create a simple console-based Hibernate application. We use an Java database (HSQL DB), so we do not have to install any database server."
+msgstr ""
+
+#: index.docbook:39
+msgid "Let's assume we need a small database application that can store events we want to attend, and information about the hosts of these events."
+msgstr ""
+
+#: index.docbook:44
+msgid "The first thing we do, is set up our development directory and put all the Java libraries we need into it. Download the Hibernate distribution from the Hibernate website. Extract the package and place all required libraries found in <literal>/lib</literal> into into the <literal>/lib</literal> directory of your new development working directory. It should look like this:"
+msgstr ""
+
+#: index.docbook:52
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " antlr.jar\n"
+ " cglib.jar\n"
+ " asm.jar\n"
+ " asm-attrs.jars\n"
+ " commons-collections.jar\n"
+ " commons-logging.jar\n"
+ " hibernate3.jar\n"
+ " jta.jar\n"
+ " dom4j.jar\n"
+ " log4j.jar ]]>"
+msgstr ""
+
+#: index.docbook:54
+msgid "This is the minimum set of required libraries (note that we also copied hibernate3.jar, the main archive) for Hibernate <emphasis>at the time of writing</emphasis>. The Hibernate release you are using might require more or less libraries. See the <literal>README.txt</literal> file in the <literal>lib/</literal> directory of the Hibernate distribution for more information about required and optional third-party libraries. (Actually, Log4j is not required but preferred by many developers.)"
+msgstr ""
+
+#: index.docbook:63
+msgid "Next we create a class that represents the event we want to store in database."
+msgstr ""
+
+#: index.docbook:68
+msgid "The first class"
+msgstr ""
+
+#: index.docbook:70
+msgid "Our first persistent class is a simple JavaBean class with some properties:"
+msgstr ""
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Event {\n"
+ " private Long id;\n"
+ "\n"
+ " private String title;\n"
+ " private Date date;\n"
+ "\n"
+ " public Event() {}\n"
+ "\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public Date getDate() {\n"
+ " return date;\n"
+ " }\n"
+ "\n"
+ " public void setDate(Date date) {\n"
+ " this.date = date;\n"
+ " }\n"
+ "\n"
+ " public String getTitle() {\n"
+ " return title;\n"
+ " }\n"
+ "\n"
+ " public void setTitle(String title) {\n"
+ " this.title = title;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:76
+msgid "You can see that this class uses standard JavaBean naming conventions for property getter and setter methods, as well as private visibility for the fields. This is a recommended design - but not required. Hibernate can also access fields directly, the benefit of accessor methods is robustness for refactoring. The no-argument constructor is required to instantiate an object of this class through reflection."
+msgstr ""
+
+#: index.docbook:84
+msgid "The <literal>id</literal> property holds a unique identifier value for a particular event. All persistent entity classes (there are less important dependent classes as well) will need such an identifier property if we want to use the full feature set of Hibernate. In fact, most applications (esp. web applications) need to distinguish objects by identifier, so you should consider this a feature rather than a limitation. However, we usually don't manipulate the identity of an object, hence the setter method should be private. Only Hibernate will assign identifiers when an object is saved. You can see that Hibernate can access public, private, and protected accessor methods, as well as (public, private, protected) fields directly. The choice is up to you and you can match it to fit your application design."
+msgstr ""
+
+#: index.docbook:96
+msgid "The no-argument constructor is a requirement for all persistent classes; Hibernate has to create objects for you, using Java Reflection. The constructor can be private, however, package visibility is required for runtime proxy generation and efficient data retrieval without bytecode instrumentation."
+msgstr ""
+
+#: index.docbook:103
+msgid "Place this Java source file in a directory called <literal>src</literal> in the development folder, and in its correct package. The directory should now look like this:"
+msgstr ""
+
+#: index.docbook:108
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java]]>"
+msgstr ""
+
+#: index.docbook:110
+msgid "In the next step, we tell Hibernate about this persistent class."
+msgstr ""
+
+#: index.docbook:117
+msgid "The mapping file"
+msgstr ""
+
+#: index.docbook:119
+msgid "Hibernate needs to know how to load and store objects of the persistent class. This is where the Hibernate mapping file comes into play. The mapping file tells Hibernate what table in the database it has to access, and what columns in that table it should use."
+msgstr ""
+
+#: index.docbook:126
+msgid "The basic structure of a mapping file looks like this:"
+msgstr ""
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "[...]\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:132
+msgid "Note that the Hibernate DTD is very sophisticated. You can use it for auto-completion of XML mapping elements and attributes in your editor or IDE. You also should open up the DTD file in your text editor - it's the easiest way to get an overview of all elements and attributes and to see the defaults, as well as some comments. Note that Hibernate will not load the DTD file from the web, but first look it up from the classpath of the application. The DTD file is included in <literal>hibernate3.jar</literal> as well as in the <literal>src/</literal> directory of the Hibernate distribution."
+msgstr ""
+
+#: index.docbook:143
+msgid "We will omit the DTD declaration in future examples to shorten the code. It is of course not optional."
+msgstr ""
+
+#: index.docbook:148
+msgid "Between the two <literal>hibernate-mapping</literal> tags, include a <literal>class</literal> element. All persistent entity classes (again, there might be dependent classes later on, which are not first-class entities) need such a mapping, to a table in the SQL database:"
+msgstr ""
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:157
+msgid "So far we told Hibernate how to persist and load object of class <literal>Event</literal> to the table <literal>EVENTS</literal>, each instance represented by a row in that table. Now we continue with a mapping of the unique identifier property to the tables primary key. In addition, as we don't want to care about handling this identifier, we configure Hibernate's identifier generation strategy for a surrogate primary key column:"
+msgstr ""
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:167
+msgid "The <literal>id</literal> element is the declaration of the identifer property, <literal>name=\"id\"</literal> declares the name of the Java property - Hibernate will use the getter and setter methods to access the property. The column attribute tells Hibernate which column of the <literal>EVENTS</literal> table we use for this primary key. The nested <literal>generator</literal> element specifies the identifier generation strategy, in this case we used <literal>native</literal>, which picks the best strategy depending on the configured database (dialect). Hibernate supports database generated, globally unique, as well as application assigned identifiers (or any strategy you have written an extension for)."
+msgstr ""
+
+#: index.docbook:180
+msgid "Finally we include declarations for the persistent properties of the class in the mapping file. By default, no properties of the class are considered persistent:"
+msgstr ""
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\" type=\"timestamp\" column=\"EVENT_DATE\"/>\n"
+ " <property name=\"title\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:188
+msgid "Just as with the <literal>id</literal> element, the <literal>name</literal> attribute of the <literal>property</literal> element tells Hibernate which getter and setter methods to use. So, in this case, Hibernate will look for <literal>getDate()/setDate()</literal>, as well as <literal>getTitle()/setTitle()</literal>."
+msgstr ""
+
+#: index.docbook:195
+msgid "Why does the <literal>date</literal> property mapping include the <literal>column</literal> attribute, but the <literal>title</literal> doesn't? Without the <literal>column</literal> attribute Hibernate by default uses the property name as the column name. This works fine for <literal>title</literal>. However, <literal>date</literal> is a reserved keyword in most database, so we better map it to a different name."
+msgstr ""
+
+#: index.docbook:204
+msgid "The next interesting thing is that the <literal>title</literal> mapping also lacks a <literal>type</literal> attribute. The types we declare and use in the mapping files are not, as you might expect, Java data types. They are also not SQL database types. These types are so called <emphasis>Hibernate mapping types</emphasis>, converters which can translate from Java to SQL data types and vice versa. Again, Hibernate will try to determine the correct conversion and mapping type itself if the <literal>type</literal> attribute is not present in the mapping. In some cases this automatic detection (using Reflection on the Java class) might not have the default you expect or need. This is the case with the <literal>date</literal> property. Hibernate can't know if the property (which is of <literal>java.util.Date</literal>) should map to a SQL <literal>date</literal>, <literal>timestamp</literal>, or <literal>time</literal> column. We preserve full date and time information !
by mapping the property with a <literal>timestamp</literal> converter."
+msgstr ""
+
+#: index.docbook:220
+msgid "This mapping file should be saved as <literal>Event.hbm.xml</literal>, right in the directory next to the <literal>Event</literal> Java class source file. The naming of mapping files can be arbitrary, however the <literal>hbm.xml</literal> suffix is a convention in the Hibernate developer community. The directory structure should now look like this:"
+msgstr ""
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml]]>"
+msgstr ""
+
+#: index.docbook:230
+msgid "We continue with the main configuration of Hibernate."
+msgstr ""
+
+#: index.docbook:237
+msgid "Hibernate configuration"
+msgstr ""
+
+#: index.docbook:239
+msgid "We now have a persistent class and its mapping file in place. It is time to configure Hibernate. Before we do this, we will need a database. HSQL DB, a java-based SQL DBMS, can be downloaded from the HSQL DB website(http://hsqldb.org/). Actually, you only need the <literal>hsqldb.jar</literal> from this download. Place this file in the <literal>lib/</literal> directory of the development folder."
+msgstr ""
+
+#: index.docbook:247
+msgid "Create a directory called <literal>data</literal> in the root of the development directory - this is where HSQL DB will store its data files. Now start the database by running <literal>java -classpath ../lib/hsqldb.jar org.hsqldb.Server</literal> in this data directory. You can see it start up and bind to a TCP/IP socket, this is where our application will connect later. If you want to start with a fresh database during this tutorial, shutdown HSQL DB (press <literal>CTRL + C</literal> in the window), delete all files in the <literal>data/</literal> directory, and start HSQL DB again."
+msgstr ""
+
+#: index.docbook:257
+msgid "Hibernate is the layer in your application which connects to this database, so it needs connection information. The connections are made through a JDBC connection pool, which we also have to configure. The Hibernate distribution contains several open source JDBC connection pooling tools, but will use the Hibernate built-in connection pool for this tutorial. Note that you have to copy the required library into your classpath and use different connection pooling settings if you want to use a production-quality third party JDBC pooling software."
+msgstr ""
+
+#: index.docbook:267
+msgid "For Hibernate's configuration, we can use a simple <literal>hibernate.properties</literal> file, a slightly more sophisticated <literal>hibernate.cfg.xml</literal> file, or even complete programmatic setup. Most users prefer the XML configuration file:"
+msgstr ""
+
+#: index.docbook:273
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <!-- Database connection settings -->\n"
+ " <property name=\"connection.driver_class\">org.hsqldb.jdbcDriver</property>\n"
+ " <property name=\"connection.url\">jdbc:hsqldb:hsql://localhost</property>\n"
+ " <property name=\"connection.username\">sa</property>\n"
+ " <property name=\"connection.password\"></property>\n"
+ "\n"
+ " <!-- JDBC connection pool (use the built-in) -->\n"
+ " <property name=\"connection.pool_size\">1</property>\n"
+ "\n"
+ " <!-- SQL dialect -->\n"
+ " <property name=\"dialect\">org.hibernate.dialect.HSQLDialect</property>\n"
+ "\n"
+ " <!-- Enable Hibernate's automatic session context management -->\n"
+ " <property name=\"current_session_context_class\">thread</property>\n"
+ "\n"
+ " <!-- Disable the second-level cache -->\n"
+ " <property name=\"cache.provider_class\">org.hibernate.cache.NoCacheProvider</property>\n"
+ "\n"
+ " <!-- Echo all executed SQL to stdout -->\n"
+ " <property name=\"show_sql\">true</property>\n"
+ "\n"
+ " <!-- Drop and re-create the database schema on startup -->\n"
+ " <property name=\"hbm2ddl.auto\">create</property>\n"
+ "\n"
+ " <mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+
+#: index.docbook:275
+msgid "Note that this XML configuration uses a different DTD. We configure Hibernate's <literal>SessionFactory</literal> - a global factory responsible for a particular database. If you have several databases, use several <literal><session-factory></literal> configurations, usually in several configuration files (for easier startup)."
+msgstr ""
+
+#: index.docbook:283
+msgid "The first four <literal>property</literal> elements contain the necessary configuration for the JDBC connection. The dialect <literal>property</literal> element specifies the particular SQL variant Hibernate generates. Hibernate's automatic session management for persistence contexts will come in handy as you will soon see. The <literal>hbm2ddl.auto</literal> option turns on automatic generation of database schemas - directly into the database. This can of course also be turned off (by removing the config option) or redirected to a file with the help of the <literal>SchemaExport</literal> Ant task. Finally, we add the mapping file(s) for persistent classes to the configuration."
+msgstr ""
+
+#: index.docbook:296
+msgid "Copy this file into the source directory, so it will end up in the root of the classpath. Hibernate automatically looks for a file called <literal>hibernate.cfg.xml</literal> in the root of the classpath, on startup."
+msgstr ""
+
+#: index.docbook:305
+msgid "Building with Ant"
+msgstr ""
+
+#: index.docbook:307
+msgid "We'll now build the tutorial with Ant. You will need to have Ant installed - get it from the <ulink url=\"http://ant.apache.org/bindownload.cgi\">Ant download page</ulink>. How to install Ant will not be covered here. Please refer to the <ulink url=\"http://ant.apache.org/manual/index.html\">Ant manual</ulink>. After you have installed Ant, we can start to create the buildfile. It will be called <literal>build.xml</literal> and placed directly in the development directory."
+msgstr ""
+
+#: index.docbook:316
+msgid "A basic build file looks like this:"
+msgstr ""
+
+#: index.docbook:320
+msgid ""
+ "<![CDATA[<project name=\"hibernate-tutorial\" default=\"compile\">\n"
+ "\n"
+ " <property name=\"sourcedir\" value=\"${basedir}/src\"/>\n"
+ " <property name=\"targetdir\" value=\"${basedir}/bin\"/>\n"
+ " <property name=\"librarydir\" value=\"${basedir}/lib\"/>\n"
+ "\n"
+ " <path id=\"libraries\">\n"
+ " <fileset dir=\"${librarydir}\">\n"
+ " <include name=\"*.jar\"/>\n"
+ " </fileset>\n"
+ " </path>\n"
+ "\n"
+ " <target name=\"clean\">\n"
+ " <delete dir=\"${targetdir}\"/>\n"
+ " <mkdir dir=\"${targetdir}\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"compile\" depends=\"clean, copy-resources\">\n"
+ " <javac srcdir=\"${sourcedir}\"\n"
+ " destdir=\"${targetdir}\"\n"
+ " classpathref=\"libraries\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"copy-resources\">\n"
+ " <copy todir=\"${targetdir}\">\n"
+ " <fileset dir=\"${sourcedir}\">\n"
+ " <exclude name=\"**/*.java\"/>\n"
+ " </fileset>\n"
+ " </copy>\n"
+ " </target>\n"
+ "\n"
+ "</project>]]>"
+msgstr ""
+
+#: index.docbook:322
+msgid "This will tell Ant to add all files in the lib directory ending with <literal>.jar</literal> to the classpath used for compilation. It will also copy all non-Java source files to the target directory, e.g. configuration and Hibernate mapping files. If you now run Ant, you should get this output:"
+msgstr ""
+
+#: index.docbook:329
+msgid ""
+ "<![CDATA[C:\\hibernateTutorial\\>ant\n"
+ "Buildfile: build.xml\n"
+ "\n"
+ "copy-resources:\n"
+ " [copy] Copying 2 files to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "compile:\n"
+ " [javac] Compiling 1 source file to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "BUILD SUCCESSFUL\n"
+ "Total time: 1 second ]]>"
+msgstr ""
+
+#: index.docbook:334
+msgid "Startup and helpers"
+msgstr ""
+
+#: index.docbook:336
+msgid "It's time to load and store some <literal>Event</literal> objects, but first we have to complete the setup with some infrastructure code. We have to startup Hibernate. This startup includes building a global <literal>SessionFactory</literal> object and to store it somewhere for easy access in application code. A <literal>SessionFactory</literal> can open up new <literal>Session</literal>'s. A <literal>Session</literal> represents a single-threaded unit of work, the <literal>SessionFactory</literal> is a thread-safe global object, instantiated once."
+msgstr ""
+
+#: index.docbook:346
+msgid "We'll create a <literal>HibernateUtil</literal> helper class which takes care of startup and makes accessing a <literal>SessionFactory</literal> convenient. Let's have a look at the implementation:"
+msgstr ""
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[package util;\n"
+ "\n"
+ "import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ "\n"
+ " private static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Create the SessionFactory from hibernate.cfg.xml\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " System.err.println(\"Initial SessionFactory creation failed.\" + ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static SessionFactory getSessionFactory() {\n"
+ " return sessionFactory;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:354
+msgid "This class does not only produce the global <literal>SessionFactory</literal> in its static initializer (called once by the JVM when the class is loaded), but also hides the fact that it uses a static singleton. It might as well lookup the <literal>SessionFactory</literal> from JNDI in an application server."
+msgstr ""
+
+#: index.docbook:361
+msgid "If you give the <literal>SessionFactory</literal> a name in your configuration file, Hibernate will in fact try to bind it to JNDI after it has been built. To avoid this code completely you could also use JMX deployment and let the JMX-capable container instantiate and bind a <literal>HibernateService</literal> to JNDI. These advanced options are discussed in the Hibernate reference documentation."
+msgstr ""
+
+#: index.docbook:370
+msgid "Place <literal>HibernateUtil.java</literal> in the development source directory, in a package next to <literal>events</literal>:"
+msgstr ""
+
+#: index.docbook:375
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml\n"
+ " +util\n"
+ " HibernateUtil.java\n"
+ " hibernate.cfg.xml\n"
+ "+data\n"
+ "build.xml]]>"
+msgstr ""
+
+#: index.docbook:377
+msgid "This should again compile without problems. We finally need to configure a logging system - Hibernate uses commons logging and leaves you the choice between Log4j and JDK 1.4 logging. Most developers prefer Log4j: copy <literal>log4j.properties</literal> from the Hibernate distribution (it's in the <literal>etc/</literal> directory) to your <literal>src</literal> directory, next to <literal>hibernate.cfg.xml</literal>. Have a look at the example configuration and change the settings if you like to have more verbose output. By default, only Hibernate startup message are shown on stdout."
+msgstr ""
+
+#: index.docbook:387
+msgid "The tutorial infrastructure is complete - and we are ready to do some real work with Hibernate."
+msgstr ""
+
+#: index.docbook:395
+msgid "Loading and storing objects"
+msgstr ""
+
+#: index.docbook:397
+msgid "Finally, we can use Hibernate to load and store objects. We write an <literal>EventManager</literal> class with a <literal>main()</literal> method:"
+msgstr ""
+
+#: index.docbook:402
+msgid ""
+ "<![CDATA[package events;\n"
+ "import org.hibernate.Session;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "import util.HibernateUtil;\n"
+ "\n"
+ "public class EventManager {\n"
+ "\n"
+ " public static void main(String[] args) {\n"
+ " EventManager mgr = new EventManager();\n"
+ "\n"
+ " if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " }\n"
+ "\n"
+ " HibernateUtil.getSessionFactory().close();\n"
+ " }\n"
+ "\n"
+ " private void createAndStoreEvent(String title, Date theDate) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " session.save(theEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:404
+msgid "We create a new <literal>Event</literal> object, and hand it over to Hibernate. Hibernate now takes care of the SQL and executes <literal>INSERT</literal>s on the database. Let's have a look at the <literal>Session</literal> and <literal>Transaction</literal>-handling code before we run this."
+msgstr ""
+
+#: index.docbook:411
+msgid "A <literal>Session</literal> is a single unit of work. For now we'll keep things simple and assume a one-to-one granularity between a Hibernate <literal>Session</literal> and a database transaction. To shield our code from the actual underlying transaction system (in this case plain JDBC, but it could also run with JTA) we use the <literal>Transaction</literal> API that is available on the Hibernate <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:419
+msgid "What does <literal>sessionFactory.getCurrentSession()</literal> do? First, you can call it as many times and anywhere you like, once you get hold of your <literal>SessionFactory</literal> (easy thanks to <literal>HibernateUtil</literal>). The <literal>getCurrentSession()</literal> method always returns the \"current\" unit of work. Remember that we switched the configuration option for this mechanism to \"thread\" in <literal>hibernate.cfg.xml</literal>? Hence, the current unit of work is bound to the current Java thread that executes our application. However, this is not the full picture, you also have to consider scope, when a unit of work begins and when it ends."
+msgstr ""
+
+#: index.docbook:430
+msgid "A <literal>Session</literal> begins when it is first needed, when the first call to <literal>getCurrentSession()</literal> is made. It is then bound by Hibernate to the current thread. When the transaction ends, either through commit or rollback, Hibernate automatically unbinds the <literal>Session</literal> from the thread and closes it for you. If you call <literal>getCurrentSession()</literal> again, you get a new <literal>Session</literal> and can start a new unit of work. This <emphasis>thread-bound</emphasis> programming model is the most popular way of using Hibernate, as it allows flexible layering of your code (transaction demarcation code can be separated from data access code, we'll do this later in this tutorial)."
+msgstr ""
+
+#: index.docbook:441
+msgid "Related to the unit of work scope, should the Hibernate <literal>Session</literal> be used to execute one or several database operations? The above example uses one <literal>Session</literal> for one operation. This is pure coincidence, the example is just not complex enough to show any other approach. The scope of a Hibernate <literal>Session</literal> is flexible but you should never design your application to use a new Hibernate <literal>Session</literal> for <emphasis>every</emphasis> database operation. So even if you see it a few more times in the following (very trivial) examples, consider <emphasis>session-per-operation</emphasis> an anti-pattern. A real (web) application is shown later in this tutorial."
+msgstr ""
+
+#: index.docbook:452
+msgid "Have a look at <xref linkend=\"transactions\"/> for more information about transaction handling and demarcation. We also skipped any error handling and rollback in the previous example."
+msgstr ""
+
+#: index.docbook:458
+msgid "To run this first routine we have to add a callable target to the Ant build file:"
+msgstr ""
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[<target name=\"run\" depends=\"compile\">\n"
+ " <java fork=\"true\" classname=\"events.EventManager\" classpathref=\"libraries\">\n"
+ " <classpath path=\"${targetdir}\"/>\n"
+ " <arg value=\"${action}\"/>\n"
+ " </java>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:464
+msgid "The value of the <literal>action</literal> argument is set on the command line when calling the target:"
+msgstr ""
+
+#: index.docbook:469
+msgid "<![CDATA[C:\\hibernateTutorial\\>ant run -Daction=store]]>"
+msgstr ""
+
+#: index.docbook:471
+msgid "You should see, after compilation, Hibernate starting up and, depending on your configuration, lots of log output. At the end you will find the following line:"
+msgstr ""
+
+#: index.docbook:476
+msgid "<![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]>"
+msgstr ""
+
+#: index.docbook:478
+msgid "This is the <literal>INSERT</literal> executed by Hibernate, the question marks represent JDBC bind parameters. To see the values bound as arguments, or to reduce the verbosity of the log, check your <literal>log4j.properties</literal>."
+msgstr ""
+
+#: index.docbook:484
+msgid "Now we'd like to list stored events as well, so we add an option to the main method:"
+msgstr ""
+
+#: index.docbook:488
+msgid ""
+ "<![CDATA[if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ "}\n"
+ "else if (args[0].equals(\"list\")) {\n"
+ " List events = mgr.listEvents();\n"
+ " for (int i = 0; i < events.size(); i++) {\n"
+ " Event theEvent = (Event) events.get(i);\n"
+ " System.out.println(\"Event: \" + theEvent.getTitle() +\n"
+ " \" Time: \" + theEvent.getDate());\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:490
+msgid "We also add a new <literal>listEvents() method</literal>:"
+msgstr ""
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[private List listEvents() {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " List result = session.createQuery(\"from Event\").list();\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " return result;\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:496
+msgid "What we do here is use an HQL (Hibernate Query Language) query to load all existing <literal>Event</literal> objects from the database. Hibernate will generate the appropriate SQL, send it to the database and populate <literal>Event</literal> objects with the data. You can create more complex queries with HQL, of course."
+msgstr ""
+
+#: index.docbook:503
+msgid "Now, to execute and test all of this, follow these steps:"
+msgstr ""
+
+#: index.docbook:509
+msgid "Run <literal>ant run -Daction=store</literal> to store something into the database and, of course, to generate the database schema before through hbm2ddl."
+msgstr ""
+
+#: index.docbook:515
+msgid "Now disable hbm2ddl by commenting out the property in your <literal>hibernate.cfg.xml</literal> file. Usually you only leave it turned on in continous unit testing, but another run of hbm2ddl would <emphasis>drop</emphasis> everything you have stored - the <literal>create</literal> configuration setting actually translates into \"drop all tables from the schema, then re-create all tables, when the SessionFactory is build\"."
+msgstr ""
+
+#: index.docbook:525
+msgid "If you now call Ant with <literal>-Daction=list</literal>, you should see the events you have stored so far. You can of course also call the <literal>store</literal> action a few times more."
+msgstr ""
+
+#: index.docbook:531
+msgid "Note: Most new Hibernate users fail at this point and we see questions about <emphasis>Table not found</emphasis> error messages regularly. However, if you follow the steps outlined above you will not have this problem, as hbm2ddl creates the database schema on the first run, and subsequent application restarts will use this schema. If you change the mapping and/or database schema, you have to re-enable hbm2ddl once again."
+msgstr ""
+
+#: index.docbook:544
+msgid "Part 2 - Mapping associations"
+msgstr ""
+
+#: index.docbook:546
+msgid "We mapped a persistent entity class to a table. Let's build on this and add some class associations. First we'll add people to our application, and store a list of events they participate in."
+msgstr ""
+
+#: index.docbook:552
+msgid "Mapping the Person class"
+msgstr ""
+
+#: index.docbook:554
+msgid "The first cut of the <literal>Person</literal> class is simple:"
+msgstr ""
+
+#: index.docbook:558
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "public class Person {\n"
+ "\n"
+ " private Long id;\n"
+ " private int age;\n"
+ " private String firstname;\n"
+ " private String lastname;\n"
+ "\n"
+ " public Person() {}\n"
+ "\n"
+ " // Accessor methods for all properties, private setter for 'id'\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:560
+msgid "Create a new mapping file called <literal>Person.hbm.xml</literal> (don't forget the DTD reference at the top):"
+msgstr ""
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:567
+msgid "Finally, add the new mapping to Hibernate's configuration:"
+msgstr ""
+
+#: index.docbook:571
+msgid ""
+ "<![CDATA[<mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "<mapping resource=\"events/Person.hbm.xml\"/>]]>"
+msgstr ""
+
+#: index.docbook:573
+msgid "We'll now create an association between these two entities. Obviously, persons can participate in events, and events have participants. The design questions we have to deal with are: directionality, multiplicity, and collection behavior."
+msgstr ""
+
+#: index.docbook:583
+msgid "A unidirectional Set-based association"
+msgstr ""
+
+#: index.docbook:585
+msgid "We'll add a collection of events to the <literal>Person</literal> class. That way we can easily navigate to the events for a particular person, without executing an explicit query - by calling <literal>aPerson.getEvents()</literal>. We use a Java collection, a <literal>Set</literal>, because the collection will not contain duplicate elements and the ordering is not relevant for us."
+msgstr ""
+
+#: index.docbook:592
+msgid "We need a unidirectional, many-valued associations, implemented with a <literal>Set</literal>. Let's write the code for this in the Java classes and then map it:"
+msgstr ""
+
+#: index.docbook:597
+msgid ""
+ "<![CDATA[public class Person {\n"
+ "\n"
+ " private Set events = new HashSet();\n"
+ "\n"
+ " public Set getEvents() {\n"
+ " return events;\n"
+ " }\n"
+ "\n"
+ " public void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:599
+msgid "Before we map this association, think about the other side. Clearly, we could just keep this unidirectional. Or, we could create another collection on the <literal>Event</literal>, if we want to be able to navigate it bi-directional, i.e. <literal>anEvent.getParticipants()</literal>. This is not necessary, from a functional perspective. You could always execute an explicit query to retrieve the participants for a particular event. This is a design choice left to you, but what is clear from this discussion is the multiplicity of the association: \"many\" valued on both sides, we call this a <emphasis>many-to-many</emphasis> association. Hence, we use Hibernate's many-to-many mapping:"
+msgstr ""
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ "\n"
+ " <set name=\"events\" table=\"PERSON_EVENT\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <many-to-many column=\"EVENT_ID\" class=\"events.Event\"/>\n"
+ " </set>\n"
+ "\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:612
+msgid "Hibernate supports all kinds of collection mappings, a <literal><set></literal> being most common. For a many-to-many association (or <emphasis>n:m</emphasis> entity relationship), an association table is needed. Each row in this table represents a link between a person and an event. The table name is configured with the <literal>table</literal> attribute of the <literal>set</literal> element. The identifier column name in the association, for the person's side, is defined with the <literal><key></literal> element, the column name for the event's side with the <literal>column</literal> attribute of the <literal><many-to-many></literal>. You also have to tell Hibernate the class of the objects in your collection (correct: the class on the other side of the collection of references)."
+msgstr ""
+
+#: index.docbook:624
+msgid "The database schema for this mapping is therefore:"
+msgstr ""
+
+#: index.docbook:628
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | |\n"
+ " |_____________| |__________________| | PERSON |\n"
+ " | | | | |_____________|\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | |\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE |\n"
+ " |_____________| | FIRSTNAME |\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:633
+msgid "Working the association"
+msgstr ""
+
+#: index.docbook:635
+msgid "Let's bring some people and events together in a new method in <literal>EventManager</literal>:"
+msgstr ""
+
+#: index.docbook:639
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:641
+msgid "After loading a <literal>Person</literal> and an <literal>Event</literal>, simply modify the collection using the normal collection methods. As you can see, there is no explicit call to <literal>update()</literal> or <literal>save()</literal>, Hibernate automatically detects that the collection has been modified and needs to be updated. This is called <emphasis>automatic dirty checking</emphasis>, and you can also try it by modifying the name or the date property of any of your objects. As long as they are in <emphasis>persistent</emphasis> state, that is, bound to a particular Hibernate <literal>Session</literal> (i.e. they have been just loaded or saved in a unit of work), Hibernate monitors any changes and executes SQL in a write-behind fashion. The process of synchronizing the memory state with the database, usually only at the end of a unit of work, is called <emphasis>flushing</emphasis>. In our code, the unit of work ends with a commit (or rollback) of the dat!
abase transaction - as defined by the <literal>thread</literal> configuration option for the <literal>CurrentSessionContext</literal> class."
+msgstr ""
+
+#: index.docbook:656
+msgid "You might of course load person and event in different units of work. Or you modify an object outside of a <literal>Session</literal>, when it is not in persistent state (if it was persistent before, we call this state <emphasis>detached</emphasis>). You can even modify a collection when it is detached:"
+msgstr ""
+
+#: index.docbook:663
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session\n"
+ " .createQuery(\"select p from Person p left join fetch p.events where p.id = :pid\")\n"
+ " .setParameter(\"pid\", personId)\n"
+ " .uniqueResult(); // Eager fetch the collection so we can use it detached\n"
+ "\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " // End of first unit of work\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent); // aPerson (and its collection) is detached\n"
+ "\n"
+ " // Begin second unit of work\n"
+ "\n"
+ " Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session2.beginTransaction();\n"
+ "\n"
+ " session2.update(aPerson); // Reattachment of aPerson\n"
+ "\n"
+ " session2.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:665
+msgid "The call to <literal>update</literal> makes a detached object persistent again, you could say it binds it to a new unit of work, so any modifications you made to it while detached can be saved to the database. This includes any modifications (additions/deletions) you made to a collection of that entity object."
+msgstr ""
+
+#: index.docbook:672
+msgid "Well, this is not much use in our current situation, but it's an important concept you can design into your own application. For now, complete this exercise by adding a new action to the <literal>EventManager</literal>'s main method and call it from the command line. If you need the identifiers of a person and an event - the <literal>save()</literal> method returns it (you might have to modify some of the previous methods to return that identifier):"
+msgstr ""
+
+#: index.docbook:680
+msgid ""
+ "<![CDATA[else if (args[0].equals(\"addpersontoevent\")) {\n"
+ " Long eventId = mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " Long personId = mgr.createAndStorePerson(\"Foo\", \"Bar\");\n"
+ " mgr.addPersonToEvent(personId, eventId);\n"
+ " System.out.println(\"Added person \" + personId + \" to event \" + eventId);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:682
+msgid "This was an example of an association between two equally important classes, two entities. As mentioned earlier, there are other classes and types in a typical model, usually \"less important\". Some you have already seen, like an <literal>int</literal> or a <literal>String</literal>. We call these classes <emphasis>value types</emphasis>, and their instances <emphasis>depend</emphasis> on a particular entity. Instances of these types don't have their own identity, nor are they shared between entities (two persons don't reference the same <literal>firstname</literal> object, even if they have the same first name). Of course, value types can not only be found in the JDK (in fact, in a Hibernate application all JDK classes are considered value types), but you can also write dependent classes yourself, <literal>Address</literal> or <literal>MonetaryAmount</literal>, for example."
+msgstr ""
+
+#: index.docbook:695
+msgid "You can also design a collection of value types. This is conceptually very different from a collection of references to other entities, but looks almost the same in Java."
+msgstr ""
+
+#: index.docbook:703
+msgid "Collection of values"
+msgstr ""
+
+#: index.docbook:705
+msgid "We add a collection of value typed objects to the <literal>Person</literal> entity. We want to store email addresses, so the type we use is <literal>String</literal>, and the collection is again a <literal>Set</literal>:"
+msgstr ""
+
+#: index.docbook:710
+msgid ""
+ "<![CDATA[private Set emailAddresses = new HashSet();\n"
+ "\n"
+ "public Set getEmailAddresses() {\n"
+ " return emailAddresses;\n"
+ "}\n"
+ "\n"
+ "public void setEmailAddresses(Set emailAddresses) {\n"
+ " this.emailAddresses = emailAddresses;\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:712
+msgid "The mapping of this <literal>Set</literal>:"
+msgstr ""
+
+#: index.docbook:716
+msgid ""
+ "<![CDATA[<set name=\"emailAddresses\" table=\"PERSON_EMAIL_ADDR\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <element type=\"string\" column=\"EMAIL_ADDR\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:718
+msgid "The difference compared with the earlier mapping is the <literal>element</literal> part, which tells Hibernate that the collection does not contain references to another entity, but a collection of elements of type <literal>String</literal> (the lowercase name tells you it's a Hibernate mapping type/converter). Once again, the <literal>table</literal> attribute of the <literal>set</literal> element determines the table name for the collection. The <literal>key</literal> element defines the foreign-key column name in the collection table. The <literal>column</literal> attribute in the <literal>element</literal> element defines the column name where the <literal>String</literal> values will actually be stored."
+msgstr ""
+
+#: index.docbook:728
+msgid "Have a look at the updated schema:"
+msgstr ""
+
+#: index.docbook:732
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | | ___________________\n"
+ " |_____________| |__________________| | PERSON | | |\n"
+ " | | | | |_____________| | PERSON_EMAIL_ADDR |\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | | |___________________|\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE | | *EMAIL_ADDR |\n"
+ " |_____________| | FIRSTNAME | |___________________|\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:734
+msgid "You can see that the primary key of the collection table is in fact a composite key, using both columns. This also implies that there can't be duplicate email addresses per person, which is exactly the semantics we need for a set in Java."
+msgstr ""
+
+#: index.docbook:740
+msgid "You can now try and add elements to this collection, just like we did before by linking persons and events. It's the same code in Java:"
+msgstr ""
+
+#: index.docbook:745
+msgid ""
+ "<![CDATA[private void addEmailToPerson(Long personId, String emailAddress) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ "\n"
+ " // The getEmailAddresses() might trigger a lazy load of the collection\n"
+ " aPerson.getEmailAddresses().add(emailAddress);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:747
+msgid "This time we didnt' use a <emphasis>fetch</emphasis> query to initialize the collection. Hence, the call to its getter method will trigger an additional select to initialize it, so we can add an element to it. Monitor the SQL log and try to optimize this with an eager fetch."
+msgstr ""
+
+#: index.docbook:757
+msgid "Bi-directional associations"
+msgstr ""
+
+#: index.docbook:759
+msgid "Next we are going to map a bi-directional association - making the association between person and event work from both sides in Java. Of course, the database schema doesn't change, we still have many-to-many multiplicity. A relational database is more flexible than a network programming language, so it doesn't need anything like a navigation direction - data can be viewed and retrieved in any possible way."
+msgstr ""
+
+#: index.docbook:767
+msgid "First, add a collection of participants to the <literal>Event</literal> Event class:"
+msgstr ""
+
+#: index.docbook:771
+msgid ""
+ "<![CDATA[private Set participants = new HashSet();\n"
+ "\n"
+ "public Set getParticipants() {\n"
+ " return participants;\n"
+ "}\n"
+ "\n"
+ "public void setParticipants(Set participants) {\n"
+ " this.participants = participants;\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:773
+msgid "Now map this side of the association too, in <literal>Event.hbm.xml</literal>."
+msgstr ""
+
+#: index.docbook:777
+msgid ""
+ "<![CDATA[<set name=\"participants\" table=\"PERSON_EVENT\" inverse=\"true\">\n"
+ " <key column=\"EVENT_ID\"/>\n"
+ " <many-to-many column=\"PERSON_ID\" class=\"events.Person\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:779
+msgid "As you see, these are normal <literal>set</literal> mappings in both mapping documents. Notice that the column names in <literal>key</literal> and <literal>many-to-many</literal> are swapped in both mapping documents. The most important addition here is the <literal>inverse=\"true\"</literal> attribute in the <literal>set</literal> element of the <literal>Event</literal>'s collection mapping."
+msgstr ""
+
+#: index.docbook:787
+msgid "What this means is that Hibernate should take the other side - the <literal>Person</literal> class - when it needs to find out information about the link between the two. This will be a lot easier to understand once you see how the bi-directional link between our two entities is created ."
+msgstr ""
+
+#: index.docbook:796
+msgid "Working bi-directional links"
+msgstr ""
+
+#: index.docbook:798
+msgid "First, keep in mind that Hibernate does not affect normal Java semantics. How did we create a link between a <literal>Person</literal> and an <literal>Event</literal> in the unidirectional example? We added an instance of <literal>Event</literal> to the collection of event references, of an instance of <literal>Person</literal>. So, obviously, if we want to make this link working bi-directional, we have to do the same on the other side - adding a <literal>Person</literal> reference to the collection in an <literal>Event</literal>. This \"setting the link on both sides\" is absolutely necessary and you should never forget doing it."
+msgstr ""
+
+#: index.docbook:808
+msgid "Many developers program defensive and create link management methods to correctly set both sides, e.g. in <literal>Person</literal>:"
+msgstr ""
+
+#: index.docbook:813
+msgid ""
+ "<![CDATA[protected Set getEvents() {\n"
+ " return events;\n"
+ "}\n"
+ "\n"
+ "protected void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ "}\n"
+ "\n"
+ "public void addToEvent(Event event) {\n"
+ " this.getEvents().add(event);\n"
+ " event.getParticipants().add(this);\n"
+ "}\n"
+ "\n"
+ "public void removeFromEvent(Event event) {\n"
+ " this.getEvents().remove(event);\n"
+ " event.getParticipants().remove(this);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:815
+msgid "Notice that the get and set methods for the collection are now protected - this allows classes in the same package and subclasses to still access the methods, but prevents everybody else from messing with the collections directly (well, almost). You should probably do the same with the collection on the other side."
+msgstr ""
+
+#: index.docbook:822
+msgid "What about the <literal>inverse</literal> mapping attribute? For you, and for Java, a bi-directional link is simply a matter of setting the references on both sides correctly. Hibernate however doesn't have enough information to correctly arrange SQL <literal>INSERT</literal> and <literal>UPDATE</literal> statements (to avoid constraint violations), and needs some help to handle bi-directional associations properly. Making one side of the association <literal>inverse</literal> tells Hibernate to basically ignore it, to consider it a <emphasis>mirror</emphasis> of the other side. That's all that is necessary for Hibernate to work out all of the issues when transformation a directional navigation model to a SQL database schema. The rules you have to remember are straightforward: All bi-directional associations need one side as <literal>inverse</literal>. In a one-to-many association it has to be the many-side, in many-to-many association you can pick either side, there!
is no difference."
+msgstr ""
+
+#: index.docbook:837
+msgid "Let's turn this into a small web application."
+msgstr ""
+
+#: index.docbook:844
+msgid "Part 3 - The EventManager web application"
+msgstr ""
+
+#: index.docbook:846
+msgid "A Hibernate web application uses <literal>Session</literal> and <literal>Transaction</literal> almost like a standalone application. However, some common patterns are useful. We now write an <literal>EventManagerServlet</literal>. This servlet can list all events stored in the database, and it provides an HTML form to enter new events."
+msgstr ""
+
+#: index.docbook:854
+msgid "Writing the basic servlet"
+msgstr ""
+
+#: index.docbook:856
+msgid "Create a new class in your source directory, in the <literal>events</literal> package:"
+msgstr ""
+
+#: index.docbook:861
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "// Imports\n"
+ "\n"
+ "public class EventManagerServlet extends HttpServlet {\n"
+ "\n"
+ " // Servlet code\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:863
+msgid "The servlet handles HTTP <literal>GET</literal> requests only, hence, the method we implement is <literal>doGet()</literal>:"
+msgstr ""
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[protected void doGet(HttpServletRequest request,\n"
+ " HttpServletResponse response)\n"
+ " throws ServletException, IOException {\n"
+ "\n"
+ " SimpleDateFormat dateFormatter = new SimpleDateFormat(\"dd.MM.yyyy\");\n"
+ "\n"
+ " try {\n"
+ " // Begin unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // Process request and render page...\n"
+ "\n"
+ " // End unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().commit();\n"
+ "\n"
+ " } catch (Exception ex) {\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().rollback();\n"
+ " throw new ServletException(ex);\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:870
+msgid "The pattern we are applying here is called <emphasis>session-per-request</emphasis>. When a request hits the servlet, a new Hibernate <literal>Session</literal> is opened through the first call to <literal>getCurrentSession()</literal> on the <literal>SessionFactory</literal>. Then a database transaction is started—all data access as to occur inside a transaction, no matter if data is read or written (we don't use the auto-commit mode in applications)."
+msgstr ""
+
+#: index.docbook:879
+msgid "Do <emphasis>not</emphasis> use a new Hibernate <literal>Session</literal> for every database operation. Use one Hibernate <literal>Session</literal> that is scoped to the whole request. Use <literal>getCurrentSession()</literal>, so that it is automatically bound to the current Java thread."
+msgstr ""
+
+#: index.docbook:886
+msgid "Next, the possible actions of the request are processed and the response HTML is rendered. We'll get to that part soon."
+msgstr ""
+
+#: index.docbook:891
+msgid "Finally, the unit of work ends when processing and rendering is complete. If any problem occured during processing or rendering, an exception will be thrown and the database transaction rolled back. This completes the <literal>session-per-request</literal> pattern. Instead of the transaction demarcation code in every servlet you could also write a servlet filter. See the Hibernate website and Wiki for more information about this pattern, called <emphasis>Open Session in View</emphasis>—you'll need it as soon as you consider rendering your view in JSP, not in a servlet."
+msgstr ""
+
+#: index.docbook:905
+msgid "Processing and rendering"
+msgstr ""
+
+#: index.docbook:907
+msgid "Let's implement the processing of the request and rendering of the page."
+msgstr ""
+
+#: index.docbook:911
+msgid ""
+ "<![CDATA[// Write HTML header\n"
+ "PrintWriter out = response.getWriter();\n"
+ "out.println(\"<html><head><title>Event Manager</title></head><body>\");\n"
+ "\n"
+ "// Handle actions\n"
+ "if ( \"store\".equals(request.getParameter(\"action\")) ) {\n"
+ "\n"
+ " String eventTitle = request.getParameter(\"eventTitle\");\n"
+ " String eventDate = request.getParameter(\"eventDate\");\n"
+ "\n"
+ " if ( \"\".equals(eventTitle) || \"\".equals(eventDate) ) {\n"
+ " out.println(\"<b><i>Please enter event title and date.</i></b>\");\n"
+ " } else {\n"
+ " createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));\n"
+ " out.println(\"<b><i>Added event.</i></b>\");\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "// Print page\n"
+ "printEventForm(out);\n"
+ "listEvents(out, dateFormatter);\n"
+ "\n"
+ "// Write HTML footer\n"
+ "out.println(\"</body></html>\");\n"
+ "out.flush();\n"
+ "out.close();]]>"
+msgstr ""
+
+#: index.docbook:913
+msgid "Granted, this coding style with a mix of Java and HTML would not scale in a more complex application—keep in mind that we are only illustrating basic Hibernate concepts in this tutorial. The code prints an HTML header and a footer. Inside this page, an HTML form for event entry and a list of all events in the database are printed. The first method is trivial and only outputs HTML:"
+msgstr ""
+
+#: index.docbook:922
+msgid ""
+ "<![CDATA[private void printEventForm(PrintWriter out) {\n"
+ " out.println(\"<h2>Add new event:</h2>\");\n"
+ " out.println(\"<form>\");\n"
+ " out.println(\"Title: <input name='eventTitle' length='50'/><br/>\");\n"
+ " out.println(\"Date (e.g. 24.12.2009): <input name='eventDate' length='10'/><br/>\");\n"
+ " out.println(\"<input type='submit' name='action' value='store'/>\");\n"
+ " out.println(\"</form>\");\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:924
+msgid "The <literal>listEvents()</literal> method uses the Hibernate <literal>Session</literal> bound to the current thread to execute a query:"
+msgstr ""
+
+#: index.docbook:930
+msgid ""
+ "<![CDATA[private void listEvents(PrintWriter out, SimpleDateFormat dateFormatter) {\n"
+ "\n"
+ " List result = HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().createCriteria(Event.class).list();\n"
+ " if (result.size() > 0) {\n"
+ " out.println(\"<h2>Events in database:</h2>\");\n"
+ " out.println(\"<table border='1'>\");\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<th>Event title</th>\");\n"
+ " out.println(\"<th>Event date</th>\");\n"
+ " out.println(\"</tr>\");\n"
+ " for (Iterator it = result.iterator(); it.hasNext();) {\n"
+ " Event event = (Event) it.next();\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<td>\" + event.getTitle() + \"</td>\");\n"
+ " out.println(\"<td>\" + dateFormatter.format(event.getDate()) + \"</td>\");\n"
+ " out.println(\"</tr>\");\n"
+ " }\n"
+ " out.println(\"</table>\");\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:932
+msgid "Finally, the <literal>store</literal> action is dispatched to the <literal>createAndStoreEvent()</literal> method, which also uses the <literal>Session</literal> of the current thread:"
+msgstr ""
+
+#: index.docbook:938
+msgid ""
+ "<![CDATA[protected void createAndStoreEvent(String title, Date theDate) {\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().save(theEvent);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:940
+msgid "That's it, the servlet is complete. A request to the servlet will be processed in a single <literal>Session</literal> and <literal>Transaction</literal>. As earlier in the standalone application, Hibernate can automatically bind these ojects to the current thread of execution. This gives you the freedom to layer your code and access the <literal>SessionFactory</literal> in any way you like. Usually you'd use a more sophisticated design and move the data access code into data access objects (the DAO pattern). See the Hibernate Wiki for more examples."
+msgstr ""
+
+#: index.docbook:954
+msgid "Deploying and testing"
+msgstr ""
+
+#: index.docbook:956
+msgid "To deploy this application you have to create a web archive, a WAR. Add the following Ant target to your <literal>build.xml</literal>:"
+msgstr ""
+
+#: index.docbook:961
+msgid ""
+ "<![CDATA[<target name=\"war\" depends=\"compile\">\n"
+ " <war destfile=\"hibernate-tutorial.war\" webxml=\"web.xml\">\n"
+ " <lib dir=\"${librarydir}\">\n"
+ " <exclude name=\"jsdk*.jar\"/>\n"
+ " </lib>\n"
+ "\n"
+ " <classes dir=\"${targetdir}\"/>\n"
+ " </war>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:963
+msgid "This target creates a file called <literal>hibernate-tutorial.war</literal> in your project directory. It packages all libraries and the <literal>web.xml</literal> descriptor, which is expected in the base directory of your project:"
+msgstr ""
+
+#: index.docbook:969
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<web-app version=\"2.4\"\n"
+ " xmlns=\"http://java.sun.com/xml/ns/j2ee\"\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ " xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">\n"
+ "\n"
+ " <servlet>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <servlet-class>events.EventManagerServlet</servlet-class>\n"
+ " </servlet>\n"
+ "\n"
+ " <servlet-mapping>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <url-pattern>/eventmanager</url-pattern>\n"
+ " </servlet-mapping>\n"
+ "</web-app>]]>"
+msgstr ""
+
+#: index.docbook:971
+msgid "Before you compile and deploy the web application, note that an additional library is required: <literal>jsdk.jar</literal>. This is the Java servlet development kit, if you don't have this library already, get it from the Sun website and copy it to your library directory. However, it will be only used for compliation and excluded from the WAR package."
+msgstr ""
+
+#: index.docbook:979
+msgid "To build and deploy call <literal>ant war</literal> in your project directory and copy the <literal>hibernate-tutorial.war</literal> file into your Tomcat <literal>webapp</literal> directory. If you don't have Tomcat installed, download it and follow the installation instructions. You don't have to change any Tomcat configuration to deploy this application though."
+msgstr ""
+
+#: index.docbook:987
+msgid "Once deployed and Tomcat is running, access the application at <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal>. Make sure you watch the Tomcat log to see Hibernate initialize when the first request hits your servlet (the static initializer in <literal>HibernateUtil</literal> is called) and to get the detailed output if any exceptions occurs."
+msgstr ""
+
+#: index.docbook:1000
+msgid "Summary"
+msgstr ""
+
+#: index.docbook:1002
+msgid "This tutorial covered the basics of writing a simple standalone Hibernate application and a small web application."
+msgstr ""
+
+#: index.docbook:1007
+msgid "If you already feel confident with Hibernate, continue browsing through the reference documentation table of contents for topics you find interesting - most asked are transactional processing (<xref linkend=\"transactions\"/>), fetch performance (<xref linkend=\"performance\"/>), or the usage of the API (<xref linkend=\"objectstate\"/>) and the query features (<xref linkend=\"objectstate-querying\"/>)."
+msgstr ""
+
+#: index.docbook:1015
+msgid "Don't forget to check the Hibernate website for more (specialized) tutorials."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/content/xml.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/content/xml.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/content/xml.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,284 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "XML Mapping"
+msgstr ""
+
+#: index.docbook:7
+msgid "Note that this is an experimental feature in Hibernate 3.0 and is under extremely active development."
+msgstr ""
+
+#: index.docbook:13
+msgid "Working with XML data"
+msgstr ""
+
+#: index.docbook:15
+msgid "Hibernate lets you work with persistent XML data in much the same way you work with persistent POJOs. A parsed XML tree can be thought of as just another way to represent the relational data at the object level, instead of POJOs."
+msgstr ""
+
+#: index.docbook:22
+msgid "Hibernate supports dom4j as API for manipulating XML trees. You can write queries that retrieve dom4j trees from the database and have any modification you make to the tree automatically synchronized to the database. You can even take an XML document, parse it using dom4j, and write it to the database with any of Hibernate's basic operations: <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> (merging is not yet supported)."
+msgstr ""
+
+#: index.docbook:32
+msgid "This feature has many applications including data import/export, externalization of entity data via JMS or SOAP and XSLT-based reporting."
+msgstr ""
+
+#: index.docbook:37
+msgid "A single mapping may be used to simultaneously map properties of a class and nodes of an XML document to the database, or, if there is no class to map, it may be used to map just the XML."
+msgstr ""
+
+#: index.docbook:44
+msgid "Specifying XML and class mapping together"
+msgstr ""
+
+#: index.docbook:46
+msgid "Here is an example of mapping a POJO and XML simultaneously:"
+msgstr ""
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<class name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"accountId\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <many-to-one name=\"customer\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:54
+msgid "Specifying only an XML mapping"
+msgstr ""
+
+#: index.docbook:56
+msgid "Here is an example where there is no POJO class:"
+msgstr ""
+
+#: index.docbook:60
+msgid ""
+ "<![CDATA[<class entity-name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\" \n"
+ " type=\"string\"/>\n"
+ " \n"
+ " <many-to-one name=\"customerId\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\" \n"
+ " entity-name=\"Customer\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\" \n"
+ " type=\"big_decimal\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:62
+msgid "This mapping allows you to access the data as a dom4j tree, or as a graph of property name/value pairs (java <literal>Map</literal>s). The property names are purely logical constructs that may be referred to in HQL queries."
+msgstr ""
+
+#: index.docbook:73
+msgid "XML mapping metadata"
+msgstr ""
+
+#: index.docbook:75
+msgid "Many Hibernate mapping elements accept the <literal>node</literal> attribute. This let's you specify the name of an XML attribute or element that holds the property or entity data. The format of the <literal>node</literal> attribute must be one of the following:"
+msgstr ""
+
+#: index.docbook:84
+msgid "<literal>\"element-name\"</literal> - map to the named XML element"
+msgstr ""
+
+#: index.docbook:87
+msgid "<literal>\"@attribute-name\"</literal> - map to the named XML attribute"
+msgstr ""
+
+#: index.docbook:90
+msgid "<literal>\".\"</literal> - map to the parent element"
+msgstr ""
+
+#: index.docbook:93
+msgid "<literal>\"element-name/@attribute-name\"</literal> - map to the named attribute of the named element"
+msgstr ""
+
+#: index.docbook:100
+msgid "For collections and single valued associations, there is an additional <literal>embed-xml</literal> attribute. If <literal>embed-xml=\"true\"</literal>, the default, the XML tree for the associated entity (or collection of value type) will be embedded directly in the XML tree for the entity that owns the association. Otherwise, if <literal>embed-xml=\"false\"</literal>, then only the referenced identifier value will appear in the XML for single point associations and collections will simply not appear at all."
+msgstr ""
+
+#: index.docbook:110
+msgid "You should be careful not to leave <literal>embed-xml=\"true\"</literal> for too many associations, since XML does not deal well with circularity!"
+msgstr ""
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Customer\" \n"
+ " table=\"CUSTOMER\" \n"
+ " node=\"customer\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"CUST_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <map name=\"accounts\" \n"
+ " node=\".\" \n"
+ " embed-xml=\"true\">\n"
+ " <key column=\"CUSTOMER_ID\" \n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"SHORT_DESC\" \n"
+ " node=\"@short-desc\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many entity-name=\"Account\"\n"
+ " embed-xml=\"false\" \n"
+ " node=\"account\"/>\n"
+ " </map>\n"
+ " \n"
+ " <component name=\"name\" \n"
+ " node=\"name\">\n"
+ " <property name=\"firstName\" \n"
+ " node=\"first-name\"/>\n"
+ " <property name=\"initial\" \n"
+ " node=\"initial\"/>\n"
+ " <property name=\"lastName\" \n"
+ " node=\"last-name\"/>\n"
+ " </component>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:117
+msgid "in this case, we have decided to embed the collection of account ids, but not the actual account data. The following HQL query:"
+msgstr ""
+
+#: index.docbook:122
+msgid "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
+msgstr ""
+
+#: index.docbook:124
+msgid "Would return datasets such as this:"
+msgstr ""
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account short-desc=\"Savings\">987632567</account>\n"
+ " <account short-desc=\"Credit Card\">985612323</account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+
+#: index.docbook:130
+msgid "If you set <literal>embed-xml=\"true\"</literal> on the <literal><one-to-many></literal> mapping, the data might look more like this:"
+msgstr ""
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account id=\"987632567\" short-desc=\"Savings\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>100.29</balance>\n"
+ " </account>\n"
+ " <account id=\"985612323\" short-desc=\"Credit Card\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>-2370.34</balance>\n"
+ " </account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+
+#: index.docbook:141
+msgid "Manipulating XML data"
+msgstr ""
+
+#: index.docbook:143
+msgid "Let's rearead and update XML documents in the application. We do this by obtaining a dom4j session:"
+msgstr ""
+
+#: index.docbook:148
+msgid ""
+ "<![CDATA[Document doc = ....;\n"
+ " \n"
+ "Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "List results = dom4jSession\n"
+ " .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")\n"
+ " .list();\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " //add the customer data to the XML document\n"
+ " Element customer = (Element) results.get(i);\n"
+ " doc.add(customer);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " Element customer = (Element) results.get(i);\n"
+ " //change the customer name in the XML and database\n"
+ " Element name = customer.element(\"name\");\n"
+ " name.element(\"first-name\").setText(firstName);\n"
+ " name.element(\"initial\").setText(initial);\n"
+ " name.element(\"last-name\").setText(lastName);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:152
+msgid "It is extremely useful to combine this feature with Hibernate's <literal>replicate()</literal> operation to implement XML-based data import/export."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/pt-BR/legal_notice.po
===================================================================
--- core/trunk/documentation/manual/translations/pt-BR/legal_notice.po (rev 0)
+++ core/trunk/documentation/manual/translations/pt-BR/legal_notice.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,48 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Legal Notice"
+msgstr "Legal Notice"
+
+#: index.docbook:22
+msgid "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+msgstr "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+
+#: index.docbook:31
+msgid "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+msgstr "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+
+#: index.docbook:34
+msgid "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+msgstr "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+
+#: index.docbook:37
+msgid "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+msgstr "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+
+#: index.docbook:40
+msgid "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+msgstr "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+
+#: index.docbook:43
+msgid "All other trademarks referenced herein are the property of their respective owners."
+msgstr "All other trademarks referenced herein are the property of their respective owners."
+
+#: index.docbook:46
+msgid "The GPG fingerprint of the security at redhat.com key is:"
+msgstr "The GPG fingerprint of the security at redhat.com key is:"
+
+#: index.docbook:49
+msgid "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+msgstr "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/Hibernate_Reference.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/Hibernate_Reference.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/Hibernate_Reference.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,24 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:26
+msgid "HIBERNATE - Relational Persistence for Idiomatic Java"
+msgstr "HIBERNATE - 符åJavaä¹ æ¯çå
³ç³»æ°æ®åºæä¹
å"
+
+#: index.docbook:27
+msgid "Hibernate Reference Documentation"
+msgstr "Hibernateåèææ¡£"
+
+#: index.docbook:41
+msgid "©rightHolder;"
+msgstr "©rightHolder;"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/architecture.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/architecture.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/architecture.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,216 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Architecture"
+msgstr ""
+
+#: index.docbook:24
+msgid "Overview"
+msgstr ""
+
+#: index.docbook:26
+msgid "A (very) high-level view of the Hibernate architecture:"
+msgstr ""
+
+#: index.docbook:39
+msgid "This diagram shows Hibernate using the database and configuration data to provide persistence services (and persistent objects) to the application."
+msgstr ""
+
+#: index.docbook:44
+msgid "We would like to show a more detailed view of the runtime architecture. Unfortunately, Hibernate is flexible and supports several approaches. We will show the two extremes. The \"lite\" architecture has the application provide its own JDBC connections and manage its own transactions. This approach uses a minimal subset of Hibernate's APIs:"
+msgstr ""
+
+#: index.docbook:61
+msgid "The \"full cream\" architecture abstracts the application away from the underlying JDBC/JTA APIs and lets Hibernate take care of the details."
+msgstr ""
+
+#: index.docbook:75
+msgid "Heres some definitions of the objects in the diagrams:"
+msgstr ""
+
+#: index.docbook:80
+msgid "SessionFactory (<literal>org.hibernate.SessionFactory</literal>)"
+msgstr ""
+
+#: index.docbook:82
+msgid "A threadsafe (immutable) cache of compiled mappings for a single database. A factory for <literal>Session</literal> and a client of <literal>ConnectionProvider</literal>. Might hold an optional (second-level) cache of data that is reusable between transactions, at a process- or cluster-level."
+msgstr ""
+
+#: index.docbook:92
+msgid "Session (<literal>org.hibernate.Session</literal>)"
+msgstr ""
+
+#: index.docbook:94
+msgid "A single-threaded, short-lived object representing a conversation between the application and the persistent store. Wraps a JDBC connection. Factory for <literal>Transaction</literal>. Holds a mandatory (first-level) cache of persistent objects, used when navigating the object graph or looking up objects by identifier."
+msgstr ""
+
+#: index.docbook:104
+msgid "Persistent objects and collections"
+msgstr ""
+
+#: index.docbook:106
+msgid "Short-lived, single threaded objects containing persistent state and business function. These might be ordinary JavaBeans/POJOs, the only special thing about them is that they are currently associated with (exactly one) <literal>Session</literal>. As soon as the <literal>Session</literal> is closed, they will be detached and free to use in any application layer (e.g. directly as data transfer objects to and from presentation)."
+msgstr ""
+
+#: index.docbook:117
+msgid "Transient and detached objects and collections"
+msgstr ""
+
+#: index.docbook:119
+msgid "Instances of persistent classes that are not currently associated with a <literal>Session</literal>. They may have been instantiated by the application and not (yet) persisted or they may have been instantiated by a closed <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:128
+msgid "Transaction (<literal>org.hibernate.Transaction</literal>)"
+msgstr ""
+
+#: index.docbook:130
+msgid "(Optional) A single-threaded, short-lived object used by the application to specify atomic units of work. Abstracts application from underlying JDBC, JTA or CORBA transaction. A <literal>Session</literal> might span several <literal>Transaction</literal>s in some cases. However, transaction demarcation, either using the underlying API or <literal>Transaction</literal>, is never optional!"
+msgstr ""
+
+#: index.docbook:141
+msgid "ConnectionProvider (<literal>org.hibernate.connection.ConnectionProvider</literal>)"
+msgstr ""
+
+#: index.docbook:143
+msgid "(Optional) A factory for (and pool of) JDBC connections. Abstracts application from underlying <literal>Datasource</literal> or <literal>DriverManager</literal>. Not exposed to application, but can be extended/implemented by the developer."
+msgstr ""
+
+#: index.docbook:151
+msgid "TransactionFactory (<literal>org.hibernate.TransactionFactory</literal>)"
+msgstr ""
+
+#: index.docbook:153
+msgid "(Optional) A factory for <literal>Transaction</literal> instances. Not exposed to the application, but can be extended/implemented by the developer."
+msgstr ""
+
+#: index.docbook:160
+msgid "Extension Interfaces"
+msgstr ""
+
+#: index.docbook:162
+msgid "Hibernate offers many optional extension interfaces you can implement to customize the behavior of your persistence layer. See the API documentation for details."
+msgstr ""
+
+#: index.docbook:171
+msgid "Given a \"lite\" architecture, the application bypasses the <literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or <literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly."
+msgstr ""
+
+#: index.docbook:179
+msgid "Instance states"
+msgstr ""
+
+#: index.docbook:180
+msgid "An instance of a persistent classes may be in one of three different states, which are defined with respect to a <emphasis>persistence context</emphasis>. The Hibernate <literal>Session</literal> object is the persistence context:"
+msgstr ""
+
+#: index.docbook:188
+msgid "transient"
+msgstr ""
+
+#: index.docbook:190
+msgid "The instance is not, and has never been associated with any persistence context. It has no persistent identity (primary key value)."
+msgstr ""
+
+#: index.docbook:198
+msgid "persistent"
+msgstr ""
+
+#: index.docbook:200
+msgid "The instance is currently associated with a persistence context. It has a persistent identity (primary key value) and, perhaps, a corresponding row in the database. For a particular persistence context, Hibernate <emphasis>guarantees</emphasis> that persistent identity is equivalent to Java identity (in-memory location of the object)."
+msgstr ""
+
+#: index.docbook:212
+msgid "detached"
+msgstr ""
+
+#: index.docbook:214
+msgid "The instance was once associated with a persistence context, but that context was closed, or the instance was serialized to another process. It has a persistent identity and, perhaps, a corrsponding row in the database. For detached instances, Hibernate makes no guarantees about the relationship between persistent identity and Java identity."
+msgstr ""
+
+#: index.docbook:229
+msgid "JMX Integration"
+msgstr ""
+
+#: index.docbook:231
+msgid "JMX is the J2EE standard for management of Java components. Hibernate may be managed via a JMX standard service. We provide an MBean implementation in the distribution, <literal>org.hibernate.jmx.HibernateService</literal>."
+msgstr ""
+
+#: index.docbook:237
+msgid "For an example how to deploy Hibernate as a JMX service on the JBoss Application Server, please see the JBoss User Guide. On JBoss AS, you also get these benefits if you deploy using JMX:"
+msgstr ""
+
+#: index.docbook:245
+msgid "<emphasis>Session Management:</emphasis> The Hibernate <literal>Session</literal>'s life cycle can be automatically bound to the scope of a JTA transaction. This means you no longer have to manually open and close the <literal>Session</literal>, this becomes the job of a JBoss EJB interceptor. You also don't have to worry about transaction demarcation in your code anymore (unless you'd like to write a portable persistence layer of course, use the optional Hibernate <literal>Transaction</literal> API for this). You call the <literal>HibernateContext</literal> to access a <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:257
+msgid "<emphasis>HAR deployment:</emphasis> Usually you deploy the Hibernate JMX service using a JBoss service deployment descriptor (in an EAR and/or SAR file), it supports all the usual configuration options of a Hibernate <literal>SessionFactory</literal>. However, you still have to name all your mapping files in the deployment descriptor. If you decide to use the optional HAR deployment, JBoss will automatically detect all mapping files in your HAR file."
+msgstr ""
+
+#: index.docbook:268
+msgid "Consult the JBoss AS user guide for more information about these options."
+msgstr ""
+
+#: index.docbook:272
+msgid "Another feature available as a JMX service are runtime Hibernate statistics. See <xref linkend=\"configuration-optional-statistics\"/>."
+msgstr ""
+
+#: index.docbook:279
+msgid "JCA Support"
+msgstr ""
+
+#: index.docbook:280
+msgid "Hibernate may also be configured as a JCA connector. Please see the website for more details. Please note that Hibernate JCA support is still considered experimental."
+msgstr ""
+
+#: index.docbook:287
+msgid "Contextual Sessions"
+msgstr ""
+
+#: index.docbook:288
+msgid "Most applications using Hibernate need some form of \"contextual\" sessions, where a given session is in effect throughout the scope of a given context. However, across applications the definition of what constitutes a context is typically different; and different contexts define different scopes to the notion of current. Applications using Hibernate prior to version 3.0 tended to utilize either home-grown <literal>ThreadLocal</literal>-based contextual sessions, helper classes such as <literal>HibernateUtil</literal>, or utilized third-party frameworks (such as Spring or Pico) which provided proxy/interception-based contextual sessions."
+msgstr ""
+
+#: index.docbook:297
+msgid "Starting with version 3.0.1, Hibernate added the <literal>SessionFactory.getCurrentSession()</literal> method. Initially, this assumed usage of <literal>JTA</literal> transactions, where the <literal>JTA</literal> transaction defined both the scope and context of a current session. The Hibernate team maintains that, given the maturity of the numerous stand-alone <literal>JTA TransactionManager</literal> implementations out there, most (if not all) applications should be using <literal>JTA</literal> transaction management whether or not they are deployed into a <literal>J2EE</literal> container. Based on that, the <literal>JTA</literal>-based contextual sessions is all you should ever need to use."
+msgstr ""
+
+#: index.docbook:307
+msgid "However, as of version 3.1, the processing behind <literal>SessionFactory.getCurrentSession()</literal> is now pluggable. To that end, a new extension interface (<literal>org.hibernate.context.CurrentSessionContext</literal>) and a new configuration parameter (<literal>hibernate.current_session_context_class</literal>) have been added to allow pluggability of the scope and context of defining current sessions."
+msgstr ""
+
+#: index.docbook:314
+msgid "See the Javadocs for the <literal>org.hibernate.context.CurrentSessionContext</literal> interface for a detailed discussion of its contract. It defines a single method, <literal>currentSession()</literal>, by which the implementation is responsible for tracking the current contextual session. Out-of-the-box, Hibernate comes with three implementations of this interface."
+msgstr ""
+
+#: index.docbook:324
+msgid "<literal>org.hibernate.context.JTASessionContext</literal> - current sessions are tracked and scoped by a <literal>JTA</literal> transaction. The processing here is exactly the same as in the older JTA-only approach. See the Javadocs for details."
+msgstr ""
+
+#: index.docbook:332
+msgid "<literal>org.hibernate.context.ThreadLocalSessionContext</literal> - current sessions are tracked by thread of execution. Again, see the Javadocs for details."
+msgstr ""
+
+#: index.docbook:338
+msgid "<literal>org.hibernate.context.ManagedSessionContext</literal> - current sessions are tracked by thread of execution. However, you are responsible to bind and unbind a <literal>Session</literal> instance with static methods on this class, it does never open, flush, or close a <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:347
+msgid "The first two implementations provide a \"one session - one database transaction\" programming model, also known and used as <emphasis>session-per-request</emphasis>. The beginning and end of a Hibernate session is defined by the duration of a database transaction. If you use programatic transaction demarcation in plain JSE without JTA, you are adviced to use the Hibernate <literal>Transaction</literal> API to hide the underlying transaction system from your code. If you use JTA, use the JTA interfaces to demarcate transactions. If you execute in an EJB container that supports CMT, transaction boundaries are defined declaratively and you don't need any transaction or session demarcation operations in your code. Refer to <xref linkend=\"transactions\"/> for more information and code examples."
+msgstr ""
+
+#: index.docbook:359
+msgid "The <literal>hibernate.current_session_context_class</literal> configuration parameter defines which <literal>org.hibernate.context.CurrentSessionContext</literal> implementation should be used. Note that for backwards compatibility, if this config param is not set but a <literal>org.hibernate.transaction.TransactionManagerLookup</literal> is configured, Hibernate will use the <literal>org.hibernate.context.JTASessionContext</literal>. Typically, the value of this parameter would just name the implementation class to use; for the three out-of-the-box implementations, however, there are three corresponding short names, \"jta\", \"thread\", and \"managed\"."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/association_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/association_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/association_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,608 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:6
+msgid "Association Mappings"
+msgstr ""
+
+#: index.docbook:9
+msgid "Introduction"
+msgstr ""
+
+#: index.docbook:11
+msgid "Association mappings are the often most difficult thing to get right. In this section we'll go through the canonical cases one by one, starting with unidirectional mappings, and then considering the bidirectional cases. We'll use <literal>Person</literal> and <literal>Address</literal> in all the examples."
+msgstr ""
+
+#: index.docbook:19
+msgid "We'll classify associations by whether or not they map to an intervening join table, and by multiplicity."
+msgstr ""
+
+#: index.docbook:24
+msgid "Nullable foreign keys are not considered good practice in traditional data modelling, so all our examples use not null foreign keys. This is not a requirement of Hibernate, and the mappings will all work if you drop the nullability constraints."
+msgstr ""
+
+#: index.docbook:34
+msgid "Unidirectional associations"
+msgstr ""
+
+#: index.docbook:37, index.docbook:108
+msgid "many to one"
+msgstr ""
+
+#: index.docbook:39
+msgid "A <emphasis>unidirectional many-to-one association</emphasis> is the most common kind of unidirectional association."
+msgstr ""
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:45, index.docbook:161
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:50, index.docbook:121, index.docbook:185, index.docbook:225
+msgid "one to one"
+msgstr ""
+
+#: index.docbook:52
+msgid "A <emphasis>unidirectional one-to-one association on a foreign key</emphasis> is almost identical. The only difference is the column unique constraint."
+msgstr ""
+
+#: index.docbook:57
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:58, index.docbook:193
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:60
+msgid "A <emphasis>unidirectional one-to-one association on a primary key</emphasis> usually uses a special id generator. (Notice that we've reversed the direction of the association in this example.)"
+msgstr ""
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:67, index.docbook:201
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( personId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:72, index.docbook:94
+msgid "one to many"
+msgstr ""
+
+#: index.docbook:74
+msgid "A <emphasis>unidirectional one-to-many association on a foreign key</emphasis> is a very unusual case, and is not really recommended."
+msgstr ""
+
+#: index.docbook:79
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\">\n"
+ " <key column=\"personId\" \n"
+ " not-null=\"true\"/>\n"
+ " <one-to-many class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:80
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key, personId bigint not null )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:82
+msgid "We think it's better to use a join table for this kind of association."
+msgstr ""
+
+#: index.docbook:91
+msgid "Unidirectional associations with join tables"
+msgstr ""
+
+#: index.docbook:96
+msgid "A <emphasis>unidirectional one-to-many association on a join table</emphasis> is much preferred. Notice that by specifying <literal>unique=\"true\"</literal>, we have changed the multiplicity from many-to-many to one-to-many."
+msgstr ""
+
+#: index.docbook:102
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:103
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:110
+msgid "A <emphasis>unidirectional many-to-one association on a join table</emphasis> is quite common when the association is optional."
+msgstr ""
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:116
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:123
+msgid "A <emphasis>unidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr ""
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:129, index.docbook:233
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null primary key, addressId bigint not null unique )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:134, index.docbook:238
+msgid "many to many"
+msgstr ""
+
+#: index.docbook:136
+msgid "Finally, we have a <emphasis>unidirectional many-to-many association</emphasis>."
+msgstr ""
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:141, index.docbook:246
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:148
+msgid "Bidirectional associations"
+msgstr ""
+
+#: index.docbook:151, index.docbook:211
+msgid "one to many / many to one"
+msgstr ""
+
+#: index.docbook:153
+msgid "A <emphasis>bidirectional many-to-one association</emphasis> is the most common kind of association. (This is the standard parent/child relationship.)"
+msgstr ""
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:163
+msgid "If you use a <literal>List</literal> (or other indexed collection) you need to set the <literal>key</literal> column of the foreign key to <literal>not null</literal>, and let Hibernate manage the association from the collections side to maintain the index of each element (making the other side virtually inverse by setting <literal>update=\"false\"</literal> and <literal>insert=\"false\"</literal>):"
+msgstr ""
+
+#: index.docbook:171
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\"\n"
+ " not-null=\"true\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\"/>\n"
+ " ...\n"
+ " <list name=\"people\">\n"
+ " <key column=\"addressId\" not-null=\"true\"/>\n"
+ " <list-index column=\"peopleIdx\"/>\n"
+ " <one-to-many class=\"Person\"/>\n"
+ " </list>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:173
+msgid "It is important that you define <literal>not-null=\"true\"</literal> on the <literal><key></literal> element of the collection mapping if the underlying foreign key column is <literal>NOT NULL</literal>. Don't only declare <literal>not-null=\"true\"</literal> on a possible nested <literal><column></literal> element, but on the <literal><key></literal> element."
+msgstr ""
+
+#: index.docbook:187
+msgid "A <emphasis>bidirectional one-to-one association on a foreign key</emphasis> is quite common."
+msgstr ""
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <many-to-one name=\"address\" \n"
+ " column=\"addressId\" \n"
+ " unique=\"true\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " property-ref=\"address\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:195
+msgid "A <emphasis>bidirectional one-to-one association on a primary key</emphasis> uses the special id generator."
+msgstr ""
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <one-to-one name=\"address\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">person</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <one-to-one name=\"person\" \n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:208
+msgid "Bidirectional associations with join tables"
+msgstr ""
+
+#: index.docbook:213
+msgid "A <emphasis>bidirectional one-to-many association on a join table</emphasis>. Note that the <literal>inverse=\"true\"</literal> can go on either end of the association, on the collection, or on the join."
+msgstr ""
+
+#: index.docbook:219
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" \n"
+ " table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " unique=\"true\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " inverse=\"true\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\"\n"
+ " not-null=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[\n"
+ "create table Person ( personId bigint not null primary key )\n"
+ "create table PersonAddress ( personId bigint not null, addressId bigint not null primary key )\n"
+ "create table Address ( addressId bigint not null primary key )\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:227
+msgid "A <emphasis>bidirectional one-to-one association on a join table</emphasis> is extremely unusual, but possible."
+msgstr ""
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\">\n"
+ " <key column=\"personId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"address\"\n"
+ " column=\"addressId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <join table=\"PersonAddress\" \n"
+ " optional=\"true\"\n"
+ " inverse=\"true\">\n"
+ " <key column=\"addressId\" \n"
+ " unique=\"true\"/>\n"
+ " <many-to-one name=\"person\"\n"
+ " column=\"personId\" \n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ " </join>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:240
+msgid "Finally, we have a <emphasis>bidirectional many-to-many association</emphasis>."
+msgstr ""
+
+#: index.docbook:244
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\" column=\"personId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"addresses\" table=\"PersonAddress\">\n"
+ " <key column=\"personId\"/>\n"
+ " <many-to-many column=\"addressId\"\n"
+ " class=\"Address\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ " <id name=\"id\" column=\"addressId\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <set name=\"people\" inverse=\"true\" table=\"PersonAddress\">\n"
+ " <key column=\"addressId\"/>\n"
+ " <many-to-many column=\"personId\"\n"
+ " class=\"Person\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:253
+msgid "More complex association mappings"
+msgstr ""
+
+#: index.docbook:255
+msgid "More complex association joins are <emphasis>extremely</emphasis> rare. Hibernate makes it possible to handle more complex situations using SQL fragments embedded in the mapping document. For example, if a table with historical account information data defines <literal>accountNumber</literal>, <literal>effectiveEndDate</literal> and <literal>effectiveStartDate</literal>columns, mapped as follows:"
+msgstr ""
+
+#: index.docbook:264
+msgid ""
+ "<![CDATA[<properties name=\"currentAccountKey\">\n"
+ " <property name=\"accountNumber\" type=\"string\" not-null=\"true\"/>\n"
+ " <property name=\"currentAccount\" type=\"boolean\">\n"
+ " <formula>case when effectiveEndDate is null then 1 else 0 end</formula>\n"
+ " </property>\n"
+ "</properties>\n"
+ "<property name=\"effectiveEndDate\" type=\"date\"/>\n"
+ "<property name=\"effectiveStateDate\" type=\"date\" not-null=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:266
+msgid "Then we can map an association to the <emphasis>current</emphasis> instance (the one with null <literal>effectiveEndDate</literal>) using:"
+msgstr ""
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<many-to-one name=\"currentAccountInfo\" \n"
+ " property-ref=\"currentAccountKey\"\n"
+ " class=\"AccountInfo\">\n"
+ " <column name=\"accountNumber\"/>\n"
+ " <formula>'1'</formula>\n"
+ "</many-to-one>]]>"
+msgstr ""
+
+#: index.docbook:273
+msgid "In a more complex example, imagine that the association between <literal>Employee</literal> and <literal>Organization</literal> is maintained in an <literal>Employment</literal> table full of historical employment data. Then an association to the employee's <emphasis>most recent</emphasis> employer (the one with the most recent <literal>startDate</literal>) might be mapped this way:"
+msgstr ""
+
+#: index.docbook:281
+msgid ""
+ "<![CDATA[<join>\n"
+ " <key column=\"employeeId\"/>\n"
+ " <subselect>\n"
+ " select employeeId, orgId \n"
+ " from Employments \n"
+ " group by orgId \n"
+ " having startDate = max(startDate)\n"
+ " </subselect>\n"
+ " <many-to-one name=\"mostRecentEmployer\" \n"
+ " class=\"Organization\" \n"
+ " column=\"orgId\"/>\n"
+ "</join>]]>"
+msgstr ""
+
+#: index.docbook:283
+msgid "You can get quite creative with this functionality, but it is usually more practical to handle these kinds of cases using HQL or a criteria query."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/basic_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/basic_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/basic_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,2459 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Basic O/R Mapping"
+msgstr ""
+
+#: index.docbook:8
+msgid "Mapping declaration"
+msgstr ""
+
+#: index.docbook:10
+msgid "Object/relational mappings are usually defined in an XML document. The mapping document is designed to be readable and hand-editable. The mapping language is Java-centric, meaning that mappings are constructed around persistent class declarations, not table declarations."
+msgstr ""
+
+#: index.docbook:17
+msgid "Note that, even though many Hibernate users choose to write the XML by hand, a number of tools exist to generate the mapping document, including XDoclet, Middlegen and AndroMDA."
+msgstr ""
+
+#: index.docbook:23
+msgid "Lets kick off with an example mapping:"
+msgstr ""
+
+#: index.docbook:27
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\"\n"
+ " table=\"cats\"\n"
+ " discriminator-value=\"C\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ "\n"
+ " <discriminator column=\"subclass\"\n"
+ " type=\"character\"/>\n"
+ "\n"
+ " <property name=\"weight\"/>\n"
+ "\n"
+ " <property name=\"birthdate\"\n"
+ " type=\"date\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"color\"\n"
+ " type=\"eg.types.ColorUserType\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"sex\"\n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <property name=\"litterId\"\n"
+ " column=\"litterId\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <many-to-one name=\"mother\"\n"
+ " column=\"mother_id\"\n"
+ " update=\"false\"/>\n"
+ "\n"
+ " <set name=\"kittens\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"litter_id\">\n"
+ " <key column=\"mother_id\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"DomesticCat\"\n"
+ " discriminator-value=\"D\">\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:29
+msgid "We will now discuss the content of the mapping document. We will only describe the document elements and attributes that are used by Hibernate at runtime. The mapping document also contains some extra optional attributes and elements that affect the database schemas exported by the schema export tool. (For example the <literal> not-null</literal> attribute.)"
+msgstr ""
+
+#: index.docbook:40
+msgid "Doctype"
+msgstr ""
+
+#: index.docbook:42
+msgid "All XML mappings should declare the doctype shown. The actual DTD may be found at the URL above, in the directory <literal>hibernate-x.x.x/src/org/hibernate </literal> or in <literal>hibernate3.jar</literal>. Hibernate will always look for the DTD in its classpath first. If you experience lookups of the DTD using an Internet connection, check your DTD declaration against the contents of your claspath."
+msgstr ""
+
+#: index.docbook:52
+msgid "EntityResolver"
+msgstr ""
+
+#: index.docbook:53
+msgid "As mentioned previously, Hibernate will first attempt to resolve DTDs in its classpath. The manner in which it does this is by registering a custom <literal>org.xml.sax.EntityResolver</literal> implementation with the SAXReader it uses to read in the xml files. This custom <literal>EntityResolver</literal> recognizes two different systemId namespaces."
+msgstr ""
+
+#: index.docbook:61
+msgid "a <literal>hibernate namespace</literal> is recognized whenever the resolver encounteres a systemId starting with <literal>http://hibernate.sourceforge.net/</literal>; the resolver attempts to resolve these entities via the classlaoder which loaded the Hibernate classes."
+msgstr ""
+
+#: index.docbook:70
+msgid "a <literal>user namespace</literal> is recognized whenever the resolver encounteres a systemId using a <literal>classpath://</literal> URL protocol; the resolver will attempt to resolve these entities via (1) the current thread context classloader and (2) the classloader which loaded the Hibernate classes."
+msgstr ""
+
+#: index.docbook:79
+msgid "An example of utilizing user namespacing:"
+msgstr ""
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\" [\n"
+ " <!ENTITY types SYSTEM \"classpath://your/domain/types.xml\">\n"
+ "]>\n"
+ "\n"
+ "<hibernate-mapping package=\"your.domain\">\n"
+ " <class name=\"MyEntity\">\n"
+ " <id name=\"id\" type=\"my-custom-id-type\">\n"
+ " ...\n"
+ " </id>\n"
+ " <class>\n"
+ " &types;\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:83
+msgid "Where <literal>types.xml</literal> is a resource in the <literal>your.domain</literal> package and contains a custom <xref linkend=\"mapping-types-custom\"/>typedef."
+msgstr ""
+
+#: index.docbook:91
+msgid "hibernate-mapping"
+msgstr ""
+
+#: index.docbook:93
+msgid "This element has several optional attributes. The <literal>schema</literal> and <literal>catalog</literal> attributes specify that tables referred to in this mapping belong to the named schema and/or catalog. If specified, tablenames will be qualified by the given schema and catalog names. If missing, tablenames will be unqualified. The <literal>default-cascade</literal> attribute specifies what cascade style should be assumed for properties and collections which do not specify a <literal>cascade</literal> attribute. The <literal>auto-import</literal> attribute lets us use unqualified class names in the query language, by default."
+msgstr ""
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[<hibernate-mapping\n"
+ " schema=\"schemaName\"\n"
+ " catalog=\"catalogName\"\n"
+ " default-cascade=\"cascade_style\"\n"
+ " default-access=\"field|property|ClassName\"\n"
+ " default-lazy=\"true|false\"\n"
+ " auto-import=\"true|false\"\n"
+ " package=\"package.name\"\n"
+ " />]]>"
+msgstr ""
+
+#: index.docbook:117
+msgid "<literal>schema</literal> (optional): The name of a database schema."
+msgstr ""
+
+#: index.docbook:122
+msgid "<literal>catalog</literal> (optional): The name of a database catalog."
+msgstr ""
+
+#: index.docbook:127
+msgid "<literal>default-cascade</literal> (optional - defaults to <literal>none</literal>): A default cascade style."
+msgstr ""
+
+#: index.docbook:133
+msgid "<literal>default-access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing all properties. Can be a custom implementation of <literal>PropertyAccessor</literal>."
+msgstr ""
+
+#: index.docbook:140
+msgid "<literal>default-lazy</literal> (optional - defaults to <literal>true</literal>): The default value for unspecifed <literal>lazy</literal> attributes of class and collection mappings."
+msgstr ""
+
+#: index.docbook:147
+msgid "<literal>auto-import</literal> (optional - defaults to <literal>true</literal>): Specifies whether we can use unqualified class names (of classes in this mapping) in the query language."
+msgstr ""
+
+#: index.docbook:154
+msgid "<literal>package</literal> (optional): Specifies a package prefix to assume for unqualified class names in the mapping document."
+msgstr ""
+
+#: index.docbook:162
+msgid "If you have two persistent classes with the same (unqualified) name, you should set <literal>auto-import=\"false\"</literal>. Hibernate will throw an exception if you attempt to assign two classes to the same \"imported\" name."
+msgstr ""
+
+#: index.docbook:168
+msgid "Note that the <literal>hibernate-mapping</literal> element allows you to nest several persistent <literal><class></literal> mappings, as shown above. It is however good practice (and expected by some tools) to map only a single persistent class (or a single class hierarchy) in one mapping file and name it after the persistent superclass, e.g. <literal>Cat.hbm.xml</literal>, <literal>Dog.hbm.xml</literal>, or if using inheritance, <literal>Animal.hbm.xml</literal>."
+msgstr ""
+
+#: index.docbook:181
+msgid "<title>class</title>"
+msgstr ""
+
+#: index.docbook:183
+msgid "You may declare a persistent class using the <literal>class</literal> element:"
+msgstr ""
+
+#: index.docbook:211
+msgid ""
+ "<![CDATA[<class\n"
+ " name=\"ClassName\"\n"
+ " table=\"tableName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " mutable=\"true|false\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " select-before-update=\"true|false\"\n"
+ " polymorphism=\"implicit|explicit\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " persister=\"PersisterClass\"\n"
+ " batch-size=\"N\"\n"
+ " optimistic-lock=\"none|version|dirty|all\"\n"
+ " lazy=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " check=\"arbitrary sql check condition\"\n"
+ " rowid=\"rowid\"\n"
+ " subselect=\"SQL expression\"\n"
+ " abstract=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:214
+msgid "<literal>name</literal> (optional): The fully qualified Java class name of the persistent class (or interface). If this attribute is missing, it is assumed that the mapping is for a non-POJO entity."
+msgstr ""
+
+#: index.docbook:221
+msgid "<literal>table</literal> (optional - defaults to the unqualified class name): The name of its database table."
+msgstr ""
+
+#: index.docbook:227
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses, used for polymorphic behaviour. Acceptable values include <literal>null</literal> and <literal>not null</literal>."
+msgstr ""
+
+#: index.docbook:234
+msgid "<literal>mutable</literal> (optional, defaults to <literal>true</literal>): Specifies that instances of the class are (not) mutable."
+msgstr ""
+
+#: index.docbook:240, index.docbook:2204
+msgid "<literal>schema</literal> (optional): Override the schema name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr ""
+
+#: index.docbook:246, index.docbook:2210
+msgid "<literal>catalog</literal> (optional): Override the catalog name specified by the root <literal><hibernate-mapping></literal> element."
+msgstr ""
+
+#: index.docbook:252
+msgid "<literal>proxy</literal> (optional): Specifies an interface to use for lazy initializing proxies. You may specify the name of the class itself."
+msgstr ""
+
+#: index.docbook:258
+msgid "<literal>dynamic-update</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>UPDATE</literal> SQL should be generated at runtime and contain only those columns whose values have changed."
+msgstr ""
+
+#: index.docbook:265
+msgid "<literal>dynamic-insert</literal> (optional, defaults to <literal>false</literal>): Specifies that <literal>INSERT</literal> SQL should be generated at runtime and contain only the columns whose values are not null."
+msgstr ""
+
+#: index.docbook:272
+msgid "<literal>select-before-update</literal> (optional, defaults to <literal>false</literal>): Specifies that Hibernate should <emphasis>never</emphasis> perform an SQL <literal>UPDATE</literal> unless it is certain that an object is actually modified. In certain cases (actually, only when a transient object has been associated with a new session using <literal>update()</literal>), this means that Hibernate will perform an extra SQL <literal>SELECT</literal> to determine if an <literal>UPDATE</literal> is actually required."
+msgstr ""
+
+#: index.docbook:282
+msgid "<literal>polymorphism</literal> (optional, defaults to <literal>implicit</literal>): Determines whether implicit or explicit query polymorphism is used."
+msgstr ""
+
+#: index.docbook:288
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving objects of this class"
+msgstr ""
+
+#: index.docbook:294
+msgid "<literal>persister</literal> (optional): Specifies a custom <literal>ClassPersister</literal>."
+msgstr ""
+
+#: index.docbook:299
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for fetching instances of this class by identifier."
+msgstr ""
+
+#: index.docbook:305
+msgid "<literal>optimistic-lock</literal> (optional, defaults to <literal>version</literal>): Determines the optimistic locking strategy."
+msgstr ""
+
+#: index.docbook:311
+msgid "<literal>lazy</literal> (optional): Lazy fetching may be completely disabled by setting <literal>lazy=\"false\"</literal>."
+msgstr ""
+
+#: index.docbook:317
+msgid "<literal>entity-name</literal> (optional, defaults to the class name): Hibernate3 allows a class to be mapped multiple times (to different tables, potentially), and allows entity mappings that are represented by Maps or XML at the Java level. In these cases, you should provide an explicit arbitrary name for the entity. See <xref linkend=\"persistent-classes-dynamicmodels\"/> and <xref linkend=\"xml\"/> for more information."
+msgstr ""
+
+#: index.docbook:327
+msgid "<literal>check</literal> (optional): A SQL expression used to generate a multi-row <emphasis>check</emphasis> constraint for automatic schema generation."
+msgstr ""
+
+#: index.docbook:333
+msgid "<literal>rowid</literal> (optional): Hibernate can use so called ROWIDs on databases which support. E.g. on Oracle, Hibernate can use the <literal>rowid</literal> extra column for fast updates if you set this option to <literal>rowid</literal>. A ROWID is an implementation detail and represents the physical location of a stored tuple."
+msgstr ""
+
+#: index.docbook:341
+msgid "<literal>subselect</literal> (optional): Maps an immutable and read-only entity to a database subselect. Useful if you want to have a view instead of a base table, but don't. See below for more information."
+msgstr ""
+
+#: index.docbook:348
+msgid "<literal>abstract</literal> (optional): Used to mark abstract superclasses in <literal><union-subclass></literal> hierarchies."
+msgstr ""
+
+#: index.docbook:356
+msgid "It is perfectly acceptable for the named persistent class to be an interface. You would then declare implementing classes of that interface using the <literal><subclass></literal> element. You may persist any <emphasis>static</emphasis> inner class. You should specify the class name using the standard form ie. <literal>eg.Foo$Bar</literal>."
+msgstr ""
+
+#: index.docbook:363
+msgid "Immutable classes, <literal>mutable=\"false\"</literal>, may not be updated or deleted by the application. This allows Hibernate to make some minor performance optimizations."
+msgstr ""
+
+#: index.docbook:368
+msgid "The optional <literal>proxy</literal> attribute enables lazy initialization of persistent instances of the class. Hibernate will initially return CGLIB proxies which implement the named interface. The actual persistent object will be loaded when a method of the proxy is invoked. See \"Initializing collections and proxies\" below."
+msgstr ""
+
+#: index.docbook:375
+msgid "<emphasis>Implicit</emphasis> polymorphism means that instances of the class will be returned by a query that names any superclass or implemented interface or the class and that instances of any subclass of the class will be returned by a query that names the class itself. <emphasis>Explicit</emphasis> polymorphism means that class instances will be returned only by queries that explicitly name that class and that queries that name the class will return only instances of subclasses mapped inside this <literal><class></literal> declaration as a <literal><subclass></literal> or <literal><joined-subclass></literal>. For most purposes the default, <literal>polymorphism=\"implicit\"</literal>, is appropriate. Explicit polymorphism is useful when two different classes are mapped to the same table (this allows a \"lightweight\" class that contains a subset of the table columns)."
+msgstr ""
+
+#: index.docbook:387
+msgid "The <literal>persister</literal> attribute lets you customize the persistence strategy used for the class. You may, for example, specify your own subclass of <literal>org.hibernate.persister.EntityPersister</literal> or you might even provide a completely new implementation of the interface <literal>org.hibernate.persister.ClassPersister</literal> that implements persistence via, for example, stored procedure calls, serialization to flat files or LDAP. See <literal>org.hibernate.test.CustomPersister</literal> for a simple example (of \"persistence\" to a <literal>Hashtable</literal>)."
+msgstr ""
+
+#: index.docbook:398
+msgid "Note that the <literal>dynamic-update</literal> and <literal>dynamic-insert</literal> settings are not inherited by subclasses and so may also be specified on the <literal><subclass></literal> or <literal><joined-subclass></literal> elements. These settings may increase performance in some cases, but might actually decrease performance in others. Use judiciously."
+msgstr ""
+
+#: index.docbook:406
+msgid "Use of <literal>select-before-update</literal> will usually decrease performance. It is very useful to prevent a database update trigger being called unnecessarily if you reattach a graph of detached instances to a <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:412
+msgid "If you enable <literal>dynamic-update</literal>, you will have a choice of optimistic locking strategies:"
+msgstr ""
+
+#: index.docbook:418
+msgid "<literal>version</literal> check the version/timestamp columns"
+msgstr ""
+
+#: index.docbook:423
+msgid "<literal>all</literal> check all columns"
+msgstr ""
+
+#: index.docbook:428
+msgid "<literal>dirty</literal> check the changed columns, allowing some concurrent updates"
+msgstr ""
+
+#: index.docbook:433
+msgid "<literal>none</literal> do not use optimistic locking"
+msgstr ""
+
+#: index.docbook:438
+msgid "We <emphasis>very</emphasis> strongly recommend that you use version/timestamp columns for optimistic locking with Hibernate. This is the optimal strategy with respect to performance and is the only strategy that correctly handles modifications made to detached instances (ie. when <literal>Session.merge()</literal> is used)."
+msgstr ""
+
+#: index.docbook:445
+msgid "There is no difference between a view and a base table for a Hibernate mapping, as expected this is transparent at the database level (note that some DBMS don't support views properly, especially with updates). Sometimes you want to use a view, but can't create one in the database (ie. with a legacy schema). In this case, you can map an immutable and read-only entity to a given SQL subselect expression:"
+msgstr ""
+
+#: index.docbook:453
+msgid ""
+ "<![CDATA[<class name=\"Summary\">\n"
+ " <subselect>\n"
+ " select item.name, max(bid.amount), count(*)\n"
+ " from item\n"
+ " join bid on bid.item_id = item.id\n"
+ " group by item.name\n"
+ " </subselect>\n"
+ " <synchronize table=\"item\"/>\n"
+ " <synchronize table=\"bid\"/>\n"
+ " <id name=\"name\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:455
+msgid "Declare the tables to synchronize this entity with, ensuring that auto-flush happens correctly, and that queries against the derived entity do not return stale data. The <literal><subselect></literal> is available as both as an attribute and a nested mapping element."
+msgstr ""
+
+#: index.docbook:465
+msgid "<title>id</title>"
+msgstr ""
+
+#: index.docbook:467
+msgid "Mapped classes <emphasis>must</emphasis> declare the primary key column of the database table. Most classes will also have a JavaBeans-style property holding the unique identifier of an instance. The <literal><id></literal> element defines the mapping from that property to the primary key column."
+msgstr ""
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[<id\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " column=\"column_name\"\n"
+ " unsaved-value=\"null|any|none|undefined|id_value\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "\n"
+ " <generator class=\"generatorClass\"/>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:485
+msgid "<literal>name</literal> (optional): The name of the identifier property."
+msgstr ""
+
+#: index.docbook:490
+msgid "<literal>type</literal> (optional): A name that indicates the Hibernate type."
+msgstr ""
+
+#: index.docbook:495
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the primary key column."
+msgstr ""
+
+#: index.docbook:501
+msgid "<literal>unsaved-value</literal> (optional - defaults to a \"sensible\" value): An identifier property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session."
+msgstr ""
+
+#: index.docbook:509, index.docbook:1017, index.docbook:1156, index.docbook:1238, index.docbook:1345, index.docbook:1534, index.docbook:1708, index.docbook:1878, index.docbook:2457
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the property value."
+msgstr ""
+
+#: index.docbook:517
+msgid "If the <literal>name</literal> attribute is missing, it is assumed that the class has no identifier property."
+msgstr ""
+
+#: index.docbook:522
+msgid "The <literal>unsaved-value</literal> attribute is almost never needed in Hibernate3."
+msgstr ""
+
+#: index.docbook:526
+msgid "There is an alternative <literal><composite-id></literal> declaration to allow access to legacy data with composite keys. We strongly discourage its use for anything else."
+msgstr ""
+
+#: index.docbook:532
+msgid "Generator"
+msgstr ""
+
+#: index.docbook:534
+msgid "The optional <literal><generator></literal> child element names a Java class used to generate unique identifiers for instances of the persistent class. If any parameters are required to configure or initialize the generator instance, they are passed using the <literal><param></literal> element."
+msgstr ""
+
+#: index.docbook:541
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"org.hibernate.id.TableHiLoGenerator\">\n"
+ " <param name=\"table\">uid_table</param>\n"
+ " <param name=\"column\">next_hi_value_column</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:543
+msgid "All generators implement the interface <literal>org.hibernate.id.IdentifierGenerator</literal>. This is a very simple interface; some applications may choose to provide their own specialized implementations. However, Hibernate provides a range of built-in implementations. There are shortcut names for the built-in generators:"
+msgstr ""
+
+#: index.docbook:551
+msgid "increment"
+msgstr ""
+
+#: index.docbook:553
+msgid "generates identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal> that are unique only when no other process is inserting data into the same table. <emphasis>Do not use in a cluster.</emphasis>"
+msgstr ""
+
+#: index.docbook:562
+msgid "identity"
+msgstr ""
+
+#: index.docbook:564
+msgid "supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>."
+msgstr ""
+
+#: index.docbook:572
+msgid "sequence"
+msgstr ""
+
+#: index.docbook:574
+msgid "uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase. The returned identifier is of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>"
+msgstr ""
+
+#: index.docbook:582
+msgid "hilo"
+msgstr ""
+
+#: index.docbook:584
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a table and column (by default <literal>hibernate_unique_key</literal> and <literal>next_hi</literal> respectively) as a source of hi values. The hi/lo algorithm generates identifiers that are unique only for a particular database."
+msgstr ""
+
+#: index.docbook:594
+msgid "seqhilo"
+msgstr ""
+
+#: index.docbook:596
+msgid "uses a hi/lo algorithm to efficiently generate identifiers of type <literal>long</literal>, <literal>short</literal> or <literal>int</literal>, given a named database sequence."
+msgstr ""
+
+#: index.docbook:604
+msgid "uuid"
+msgstr ""
+
+#: index.docbook:606
+msgid "uses a 128-bit UUID algorithm to generate identifiers of type string, unique within a network (the IP address is used). The UUID is encoded as a string of hexadecimal digits of length 32."
+msgstr ""
+
+#: index.docbook:614
+msgid "guid"
+msgstr ""
+
+#: index.docbook:616
+msgid "uses a database-generated GUID string on MS SQL Server and MySQL."
+msgstr ""
+
+#: index.docbook:622
+msgid "native"
+msgstr ""
+
+#: index.docbook:624
+msgid "picks <literal>identity</literal>, <literal>sequence</literal> or <literal>hilo</literal> depending upon the capabilities of the underlying database."
+msgstr ""
+
+#: index.docbook:632
+msgid "assigned"
+msgstr ""
+
+#: index.docbook:634
+msgid "lets the application to assign an identifier to the object before <literal>save()</literal> is called. This is the default strategy if no <literal><generator></literal> element is specified."
+msgstr ""
+
+#: index.docbook:642
+msgid "select"
+msgstr ""
+
+#: index.docbook:644
+msgid "retrieves a primary key assigned by a database trigger by selecting the row by some unique key and retrieving the primary key value."
+msgstr ""
+
+#: index.docbook:651
+msgid "foreign"
+msgstr ""
+
+#: index.docbook:653
+msgid "uses the identifier of another associated object. Usually used in conjunction with a <literal><one-to-one></literal> primary key association."
+msgstr ""
+
+#: index.docbook:660
+msgid "sequence-identity"
+msgstr ""
+
+#: index.docbook:662
+msgid "a specialized sequence generation strategy which utilizes a database sequence for the actual value generation, but combines this with JDBC3 getGeneratedKeys to actually return the generated identifier value as part of the insert statement execution. This strategy is only known to be supported on Oracle 10g drivers targetted for JDK 1.4. Note comments on these insert statements are disabled due to a bug in the Oracle drivers."
+msgstr ""
+
+#: index.docbook:679
+msgid "Hi/lo algorithm"
+msgstr ""
+
+#: index.docbook:680
+msgid "The <literal>hilo</literal> and <literal>seqhilo</literal> generators provide two alternate implementations of the hi/lo algorithm, a favorite approach to identifier generation. The first implementation requires a \"special\" database table to hold the next available \"hi\" value. The second uses an Oracle-style sequence (where supported)."
+msgstr ""
+
+#: index.docbook:687
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"hilo\">\n"
+ " <param name=\"table\">hi_value</param>\n"
+ " <param name=\"column\">next_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"cat_id\">\n"
+ " <generator class=\"seqhilo\">\n"
+ " <param name=\"sequence\">hi_value</param>\n"
+ " <param name=\"max_lo\">100</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:691
+msgid "Unfortunately, you can't use <literal>hilo</literal> when supplying your own <literal>Connection</literal> to Hibernate. When Hibernate is using an application server datasource to obtain connections enlisted with JTA, you must properly configure the <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr ""
+
+#: index.docbook:700
+msgid "UUID algorithm"
+msgstr ""
+
+#: index.docbook:701
+msgid "The UUID contains: IP address, startup time of the JVM (accurate to a quarter second), system time and a counter value (unique within the JVM). It's not possible to obtain a MAC address or memory address from Java code, so this is the best we can do without using JNI."
+msgstr ""
+
+#: index.docbook:710
+msgid "Identity columns and sequences"
+msgstr ""
+
+#: index.docbook:711
+msgid "For databases which support identity columns (DB2, MySQL, Sybase, MS SQL), you may use <literal>identity</literal> key generation. For databases that support sequences (DB2, Oracle, PostgreSQL, Interbase, McKoi, SAP DB) you may use <literal>sequence</literal> style key generation. Both these strategies require two SQL queries to insert a new object."
+msgstr ""
+
+#: index.docbook:719
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">person_id_sequence</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:721
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\" unsaved-value=\"0\">\n"
+ " <generator class=\"identity\"/>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:723
+msgid "For cross-platform development, the <literal>native</literal> strategy will choose from the <literal>identity</literal>, <literal>sequence</literal> and <literal>hilo</literal> strategies, dependant upon the capabilities of the underlying database."
+msgstr ""
+
+#: index.docbook:732
+msgid "Assigned identifiers"
+msgstr ""
+
+#: index.docbook:733
+msgid "If you want the application to assign identifiers (as opposed to having Hibernate generate them), you may use the <literal>assigned</literal> generator. This special generator will use the identifier value already assigned to the object's identifier property. This generator is used when the primary key is a natural key instead of a surrogate key. This is the default behavior if you do no specify a <literal><generator></literal> element."
+msgstr ""
+
+#: index.docbook:742
+msgid "Choosing the <literal>assigned</literal> generator makes Hibernate use <literal>unsaved-value=\"undefined\"</literal>, forcing Hibernate to go to the database to determine if an instance is transient or detached, unless there is a version or timestamp property, or you define <literal>Interceptor.isUnsaved()</literal>."
+msgstr ""
+
+#: index.docbook:752
+msgid "Primary keys assigned by triggers"
+msgstr ""
+
+#: index.docbook:753
+msgid "For legacy schemas only (Hibernate does not generate DDL with triggers)."
+msgstr ""
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<id name=\"id\" type=\"long\" column=\"person_id\">\n"
+ " <generator class=\"select\">\n"
+ " <param name=\"key\">socialSecurityNumber</param>\n"
+ " </generator>\n"
+ "</id>]]>"
+msgstr ""
+
+#: index.docbook:759
+msgid "In the above example, there is a unique valued property named <literal>socialSecurityNumber</literal> defined by the class, as a natural key, and a surrogate key named <literal>person_id</literal> whose value is generated by a trigger."
+msgstr ""
+
+#: index.docbook:771
+msgid "Enhanced identifier generators"
+msgstr ""
+
+#: index.docbook:773
+msgid "Starting with release 3.2.3, there are 2 new generators which represent a re-thinking of 2 different aspects of identifier generation. The first aspect is database portability; the second is optimization (not having to query the database for every request for a new identifier value). These two new generators are intended to take the place of some of the named generators described above (starting in 3.3.x); however, they are included in the current releases and can be referenced by FQN."
+msgstr ""
+
+#: index.docbook:781
+msgid "The first of these new generators is <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> which is intended firstly as a replacement for the <literal>sequence</literal> generator and secondly as a better portability generator than <literal>native</literal> (because <literal>native</literal> (generally) chooses between <literal>identity</literal> and <literal>sequence</literal> which have largely different semantics which can cause subtle isssues in applications eyeing portability). <literal>org.hibernate.id.enhanced.SequenceStyleGenerator</literal> however achieves portability in a different manner. It chooses between using a table or a sequence in the database to store its incrementing values depending on the capabilities of the dialect being used. The difference between this and <literal>native</literal> is that table-based and sequence-based storage have the same exact semantic (in fact sequences are exactly what Hibernate tries to emmulate with its!
table-based generators). This generator has a number of configuration parameters:"
+msgstr ""
+
+#: index.docbook:795
+msgid "<literal>sequence_name</literal> (optional, defaults to <literal>hibernate_sequence</literal>): The name of the sequence (or table) to be used."
+msgstr ""
+
+#: index.docbook:801
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the sequence/table. In sequence creation terms, this is analogous to the clause typical named \"STARTS WITH\"."
+msgstr ""
+
+#: index.docbook:808
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the sequence/table should differ. In sequence creation terms, this is analogous to the clause typical named \"INCREMENT BY\"."
+msgstr ""
+
+#: index.docbook:815
+msgid "<literal>force_table_use</literal> (optional, defaults to <literal>false</literal>): Should we force the use of a table as the backing structure even though the dialect might support sequence?"
+msgstr ""
+
+#: index.docbook:822
+msgid "<literal>value_column</literal> (optional, defaults to <literal>next_val</literal>): Only relevant for table structures! The name of the column on the table which is used to hold the value."
+msgstr ""
+
+#: index.docbook:829
+msgid "<literal>optimizer</literal> (optional, defaults to <literal>none</literal>): See"
+msgstr ""
+
+#: index.docbook:836
+msgid "The second of these new generators is <literal>org.hibernate.id.enhanced.TableGenerator</literal> which is intended firstly as a replacement for the <literal>table</literal> generator (although it actually functions much more like <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal>) and secondly as a re-implementation of <literal>org.hibernate.id.MultipleHiLoPerTableGenerator</literal> utilizing the notion of pluggable optimiziers. Essentially this generator defines a table capable of holding a number of different increment values simultaneously by using multiple distinctly keyed rows. This generator has a number of configuration parameters:"
+msgstr ""
+
+#: index.docbook:846
+msgid "<literal>table_name</literal> (optional, defaults to <literal>hibernate_sequences</literal>): The name of the table to be used."
+msgstr ""
+
+#: index.docbook:852
+msgid "<literal>value_column_name</literal> (optional, defaults to <literal>next_val</literal>): The name of the column on the table which is used to hold the value."
+msgstr ""
+
+#: index.docbook:858
+msgid "<literal>segment_column_name</literal> (optional, defaults to <literal>sequence_name</literal>): The name of the column on the table which is used to hold the \"segement key\". This is the value which distinctly identifies which increment value to use."
+msgstr ""
+
+#: index.docbook:865
+msgid "<literal>segment_value</literal> (optional, defaults to <literal>default</literal>): The \"segment key\" value for the segment from which we want to pull increment values for this generator."
+msgstr ""
+
+#: index.docbook:872
+msgid "<literal>segment_value_length</literal> (optional, defaults to <literal>255</literal>): Used for schema generation; the column size to create this segment key column."
+msgstr ""
+
+#: index.docbook:878
+msgid "<literal>initial_value</literal> (optional, defaults to <literal>1</literal>): The initial value to be retrieved from the table."
+msgstr ""
+
+#: index.docbook:884
+msgid "<literal>increment_size</literal> (optional, defaults to <literal>1</literal>): The value by which subsequent calls to the table should differ."
+msgstr ""
+
+#: index.docbook:890
+msgid "<literal>optimizer</literal> (optional, defaults to <literal></literal>): See"
+msgstr ""
+
+#: index.docbook:900
+msgid "Identifier generator optimization"
+msgstr ""
+
+#: index.docbook:901
+msgid "For identifier generators which store values in the database, it is inefficient for them to hit the database on each and every call to generate a new identifier value. Instead, you'd ideally want to group a bunch of them in memory and only hit the database when you have exhausted your in-memory value group. This is the role of the pluggable optimizers. Currently only the two enhanced generators (<xref linkend=\"mapping-declaration-id-enhanced\"/> support this notion."
+msgstr ""
+
+#: index.docbook:909
+msgid "<literal>none</literal> (generally this is the default if no optimizer was specified): This says to not perform any optimizations, and hit the database each and every request."
+msgstr ""
+
+#: index.docbook:915
+msgid "<literal>hilo</literal>: applies a hi/lo algorithm around the database retrieved values. The values from the database for this optimizer are expected to be sequential. The values retrieved from the database structure for this optimizer indicates the \"group number\"; the <literal>increment_size</literal> is multiplied by that value in memory to define a group \"hi value\"."
+msgstr ""
+
+#: index.docbook:924
+msgid "<literal>pooled</literal>: like was discussed for <literal>hilo</literal>, this optimizers attempts to minimize the number of hits to the database. Here, however, we simply store the starting value for the \"next group\" into the database structure rather than a sequential value in combination with an in-memory grouping algorithm. <literal>increment_size</literal> here refers to the values coming from the database."
+msgstr ""
+
+#: index.docbook:937
+msgid "composite-id"
+msgstr ""
+
+#: index.docbook:939
+msgid ""
+ "<![CDATA[<composite-id\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " mapped=\"true|false\"\n"
+ " access=\"field|property|ClassName\">\n"
+ " node=\"element-name|.\"\n"
+ "\n"
+ " <key-property name=\"propertyName\" type=\"typename\" column=\"column_name\"/>\n"
+ " <key-many-to-one name=\"propertyName class=\"ClassName\" column=\"column_name\"/>\n"
+ " ......\n"
+ "</composite-id>]]>"
+msgstr ""
+
+#: index.docbook:941
+msgid "For a table with a composite key, you may map multiple properties of the class as identifier properties. The <literal><composite-id></literal> element accepts <literal><key-property></literal> property mappings and <literal><key-many-to-one></literal> mappings as child elements."
+msgstr ""
+
+#: index.docbook:948
+msgid ""
+ "<![CDATA[<composite-id>\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr ""
+
+#: index.docbook:950
+msgid "Your persistent class <emphasis>must</emphasis> override <literal>equals()</literal> and <literal>hashCode()</literal> to implement composite identifier equality. It must also implements <literal>Serializable</literal>."
+msgstr ""
+
+#: index.docbook:956
+msgid "Unfortunately, this approach to composite identifiers means that a persistent object is its own identifier. There is no convenient \"handle\" other than the object itself. You must instantiate an instance of the persistent class itself and populate its identifier properties before you can <literal>load()</literal> the persistent state associated with a composite key. We call this approach an <emphasis>embedded</emphasis> composite identifier, and discourage it for serious applications."
+msgstr ""
+
+#: index.docbook:965
+msgid "A second approach is what we call a <emphasis>mapped</emphasis> composite identifier, where the identifier properties named inside the <literal><composite-id></literal> element are duplicated on both the persistent class and a separate identifier class."
+msgstr ""
+
+#: index.docbook:971
+msgid ""
+ "<![CDATA[<composite-id class=\"MedicareId\" mapped=\"true\">\n"
+ " <key-property name=\"medicareNumber\"/>\n"
+ " <key-property name=\"dependent\"/>\n"
+ "</composite-id>]]>"
+msgstr ""
+
+#: index.docbook:973
+msgid "In this example, both the composite identifier class, <literal>MedicareId</literal>, and the entity class itself have properties named <literal>medicareNumber</literal> and <literal>dependent</literal>. The identifier class must override <literal>equals()</literal> and <literal>hashCode()</literal> and implement. <literal>Serializable</literal>. The disadvantage of this approach is quite obvious—code duplication."
+msgstr ""
+
+#: index.docbook:982
+msgid "The following attributes are used to specify a mapped composite identifier:"
+msgstr ""
+
+#: index.docbook:988
+msgid "<literal>mapped</literal> (optional, defaults to <literal>false</literal>): indicates that a mapped composite identifier is used, and that the contained property mappings refer to both the entity class and the composite identifier class."
+msgstr ""
+
+#: index.docbook:996
+msgid "<literal>class</literal> (optional, but required for a mapped composite identifier): The class used as a composite identifier."
+msgstr ""
+
+#: index.docbook:1003
+msgid "We will describe a third, even more convenient approach where the composite identifier is implemented as a component class in <xref linkend=\"components-compositeid\"/>. The attributes described below apply only to this alternative approach:"
+msgstr ""
+
+#: index.docbook:1011
+msgid "<literal>name</literal> (optional, required for this approach): A property of component type that holds the composite identifier (see chapter 9)."
+msgstr ""
+
+#: index.docbook:1023
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The component class used as a composite identifier (see next section)."
+msgstr ""
+
+#: index.docbook:1030
+msgid "This third approach, an <emphasis>identifier component</emphasis> is the one we recommend for almost all applications."
+msgstr ""
+
+#: index.docbook:1038
+msgid "discriminator"
+msgstr ""
+
+#: index.docbook:1040
+msgid "The <literal><discriminator></literal> element is required for polymorphic persistence using the table-per-class-hierarchy mapping strategy and declares a discriminator column of the table. The discriminator column contains marker values that tell the persistence layer what subclass to instantiate for a particular row. A restricted set of types may be used: <literal>string</literal>, <literal>character</literal>, <literal>integer</literal>, <literal>byte</literal>, <literal>short</literal>, <literal>boolean</literal>, <literal>yes_no</literal>, <literal>true_false</literal>."
+msgstr ""
+
+#: index.docbook:1058
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " column=\"discriminator_column\"\n"
+ " type=\"discriminator_type\"\n"
+ " force=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary sql expression\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1061
+msgid "<literal>column</literal> (optional - defaults to <literal>class</literal>) the name of the discriminator column."
+msgstr ""
+
+#: index.docbook:1067
+msgid "<literal>type</literal> (optional - defaults to <literal>string</literal>) a name that indicates the Hibernate type"
+msgstr ""
+
+#: index.docbook:1073
+msgid "<literal>force</literal> (optional - defaults to <literal>false</literal>) \"force\" Hibernate to specify allowed discriminator values even when retrieving all instances of the root class."
+msgstr ""
+
+#: index.docbook:1080
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>) set this to <literal>false</literal> if your discriminator column is also part of a mapped composite identifier. (Tells Hibernate to not include the column in SQL <literal>INSERT</literal>s.)"
+msgstr ""
+
+#: index.docbook:1088
+msgid "<literal>formula</literal> (optional) an arbitrary SQL expression that is executed when a type has to be evaluated. Allows content-based discrimination."
+msgstr ""
+
+#: index.docbook:1096
+msgid "Actual values of the discriminator column are specified by the <literal>discriminator-value</literal> attribute of the <literal><class></literal> and <literal><subclass></literal> elements."
+msgstr ""
+
+#: index.docbook:1102
+msgid "The <literal>force</literal> attribute is (only) useful if the table contains rows with \"extra\" discriminator values that are not mapped to a persistent class. This will not usually be the case."
+msgstr ""
+
+#: index.docbook:1108
+msgid "Using the <literal>formula</literal> attribute you can declare an arbitrary SQL expression that will be used to evaluate the type of a row:"
+msgstr ""
+
+#: index.docbook:1113
+msgid ""
+ "<![CDATA[<discriminator\n"
+ " formula=\"case when CLASS_TYPE in ('a', 'b', 'c') then 0 else 1 end\"\n"
+ " type=\"integer\"/>]]>"
+msgstr ""
+
+#: index.docbook:1118
+msgid "version (optional)"
+msgstr ""
+
+#: index.docbook:1120
+msgid "The <literal><version></literal> element is optional and indicates that the table contains versioned data. This is particularly useful if you plan to use <emphasis>long transactions</emphasis> (see below)."
+msgstr ""
+
+#: index.docbook:1136
+msgid ""
+ "<![CDATA[<version\n"
+ " column=\"version_column\"\n"
+ " name=\"propertyName\"\n"
+ " type=\"typename\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|negative|undefined\"\n"
+ " generated=\"never|always\"\n"
+ " insert=\"true|false\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1139
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of the column holding the version number."
+msgstr ""
+
+#: index.docbook:1145
+msgid "<literal>name</literal>: The name of a property of the persistent class."
+msgstr ""
+
+#: index.docbook:1150
+msgid "<literal>type</literal> (optional - defaults to <literal>integer</literal>): The type of the version number."
+msgstr ""
+
+#: index.docbook:1162
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>undefined</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr ""
+
+#: index.docbook:1171
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this version property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr ""
+
+#: index.docbook:1178
+msgid "<literal>insert</literal> (optional - defaults to <literal>true</literal>): Specifies whether the version column should be included in SQL insert statements. May be set to <literal>false</literal> if and only if the database column is defined with a default value of <literal>0</literal>."
+msgstr ""
+
+#: index.docbook:1188
+msgid "Version numbers may be of Hibernate type <literal>long</literal>, <literal>integer</literal>, <literal>short</literal>, <literal>timestamp</literal> or <literal>calendar</literal>."
+msgstr ""
+
+#: index.docbook:1193
+msgid "A version or timestamp property should never be null for a detached instance, so Hibernate will detect any instance with a null version or timestamp as transient, no matter what other <literal>unsaved-value</literal> strategies are specified. <emphasis>Declaring a nullable version or timestamp property is an easy way to avoid any problems with transitive reattachment in Hibernate, especially useful for people using assigned identifiers or composite keys!</emphasis>"
+msgstr ""
+
+#: index.docbook:1204
+msgid "timestamp (optional)"
+msgstr ""
+
+#: index.docbook:1206
+msgid "The optional <literal><timestamp></literal> element indicates that the table contains timestamped data. This is intended as an alternative to versioning. Timestamps are by nature a less safe implementation of optimistic locking. However, sometimes the application might use the timestamps in other ways."
+msgstr ""
+
+#: index.docbook:1222
+msgid ""
+ "<![CDATA[<timestamp\n"
+ " column=\"timestamp_column\"\n"
+ " name=\"propertyName\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unsaved-value=\"null|undefined\"\n"
+ " source=\"vm|db\"\n"
+ " generated=\"never|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1225
+msgid "<literal>column</literal> (optional - defaults to the property name): The name of a column holding the timestamp."
+msgstr ""
+
+#: index.docbook:1231
+msgid "<literal>name</literal>: The name of a JavaBeans style property of Java type <literal>Date</literal> or <literal>Timestamp</literal> of the persistent class."
+msgstr ""
+
+#: index.docbook:1244
+msgid "<literal>unsaved-value</literal> (optional - defaults to <literal>null</literal>): A version property value that indicates that an instance is newly instantiated (unsaved), distinguishing it from detached instances that were saved or loaded in a previous session. (<literal>undefined</literal> specifies that the identifier property value should be used.)"
+msgstr ""
+
+#: index.docbook:1253
+msgid "<literal>source</literal> (optional - defaults to <literal>vm</literal>): From where should Hibernate retrieve the timestamp value? From the database, or from the current JVM? Database-based timestamps incur an overhead because Hibernate must hit the database in order to determine the \"next value\", but will be safer for use in clustered environments. Note also, that not all <literal>Dialect</literal>s are known to support retrieving of the database's current timestamp, while others might be unsafe for usage in locking due to lack of precision (Oracle 8 for example)."
+msgstr ""
+
+#: index.docbook:1265
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this timestamp property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr ""
+
+#: index.docbook:1274
+msgid "Note that <literal><timestamp></literal> is equivalent to <literal><version type=\"timestamp\"></literal>. And <literal><timestamp source=\"db\"></literal> is equivalent to <literal><version type=\"dbtimestamp\"></literal>"
+msgstr ""
+
+#: index.docbook:1284
+msgid "property"
+msgstr ""
+
+#: index.docbook:1286
+msgid "The <literal><property></literal> element declares a persistent, JavaBean style property of the class."
+msgstr ""
+
+#: index.docbook:1308
+msgid ""
+ "<![CDATA[<property\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " type=\"typename\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " generated=\"never|insert|always\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1311
+msgid "<literal>name</literal>: the name of the property, with an initial lowercase letter."
+msgstr ""
+
+#: index.docbook:1317
+msgid "<literal>column</literal> (optional - defaults to the property name): the name of the mapped database table column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr ""
+
+#: index.docbook:1324
+msgid "<literal>type</literal> (optional): a name that indicates the Hibernate type."
+msgstr ""
+
+#: index.docbook:1329
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) : specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" property whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr ""
+
+#: index.docbook:1338
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> property. Computed properties do not have a column mapping of their own."
+msgstr ""
+
+#: index.docbook:1351
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr ""
+
+#: index.docbook:1358
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the columns. Also, allow this to be the target of a <literal>property-ref</literal>."
+msgstr ""
+
+#: index.docbook:1365
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the columns."
+msgstr ""
+
+#: index.docbook:1371
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr ""
+
+#: index.docbook:1379
+msgid "<literal>generated</literal> (optional - defaults to <literal>never</literal>): Specifies that this property value is actually generated by the database. See the discussion of <xref linkend=\"mapping-generated\"/>generated properties."
+msgstr ""
+
+#: index.docbook:1388
+msgid "<emphasis>typename</emphasis> could be:"
+msgstr ""
+
+#: index.docbook:1394
+msgid "The name of a Hibernate basic type (eg. <literal>integer, string, character, date, timestamp, float, binary, serializable, object, blob</literal>)."
+msgstr ""
+
+#: index.docbook:1400
+msgid "The name of a Java class with a default basic type (eg. <literal>int, float, char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob</literal>)."
+msgstr ""
+
+#: index.docbook:1406
+msgid "The name of a serializable Java class."
+msgstr ""
+
+#: index.docbook:1411
+msgid "The class name of a custom type (eg. <literal>com.illflow.type.MyCustomType</literal>)."
+msgstr ""
+
+#: index.docbook:1417
+msgid "If you do not specify a type, Hibernate will use reflection upon the named property to take a guess at the correct Hibernate type. Hibernate will try to interpret the name of the return class of the property getter using rules 2, 3, 4 in that order. However, this is not always enough. In certain cases you will still need the <literal>type</literal> attribute. (For example, to distinguish between <literal>Hibernate.DATE</literal> and <literal>Hibernate.TIMESTAMP</literal>, or to specify a custom type.)"
+msgstr ""
+
+#: index.docbook:1427
+msgid "The <literal>access</literal> attribute lets you control how Hibernate will access the property at runtime. By default, Hibernate will call the property get/set pair. If you specify <literal>access=\"field\"</literal>, Hibernate will bypass the get/set pair and access the field directly, using reflection. You may specify your own strategy for property access by naming a class that implements the interface <literal>org.hibernate.property.PropertyAccessor</literal>."
+msgstr ""
+
+#: index.docbook:1436
+msgid "An especially powerful feature are derived properties. These properties are by definition read-only, the property value is computed at load time. You declare the computation as a SQL expression, this translates to a <literal>SELECT</literal> clause subquery in the SQL query that loads an instance:"
+msgstr ""
+
+#: index.docbook:1443
+msgid ""
+ "<![CDATA[\n"
+ "<property name=\"totalPrice\"\n"
+ " formula=\"( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product p\n"
+ " WHERE li.productId = p.productId\n"
+ " AND li.customerId = customerId\n"
+ " AND li.orderNumber = orderNumber )\"/>]]>"
+msgstr ""
+
+#: index.docbook:1445
+msgid "Note that you can reference the entities own table by not declaring an alias on a particular column (<literal>customerId</literal> in the given example). Also note that you can use the nested <literal><formula></literal> mapping element if you don't like to use the attribute."
+msgstr ""
+
+#: index.docbook:1455
+msgid "many-to-one"
+msgstr ""
+
+#: index.docbook:1457
+msgid "An ordinary association to another persistent class is declared using a <literal>many-to-one</literal> element. The relational model is a many-to-one association: a foreign key in one table is referencing the primary key column(s) of the target table."
+msgstr ""
+
+#: index.docbook:1485
+msgid ""
+ "<![CDATA[<many-to-one\n"
+ " name=\"propertyName\"\n"
+ " column=\"column_name\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " fetch=\"join|select\"\n"
+ " update=\"true|false\"\n"
+ " insert=\"true|false\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " unique=\"true|false\"\n"
+ " not-null=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " formula=\"arbitrary SQL expression\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " index=\"index_name\"\n"
+ " unique_key=\"unique_key_id\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1488, index.docbook:1669, index.docbook:1855
+msgid "<literal>name</literal>: The name of the property."
+msgstr ""
+
+#: index.docbook:1493, index.docbook:2284
+msgid "<literal>column</literal> (optional): The name of the foreign key column. This may also be specified by nested <literal><column></literal> element(s)."
+msgstr ""
+
+#: index.docbook:1500, index.docbook:1674
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the associated class."
+msgstr ""
+
+#: index.docbook:1506
+msgid "<literal>cascade</literal> (optional): Specifies which operations should be cascaded from the parent object to the associated object."
+msgstr ""
+
+#: index.docbook:1512, index.docbook:1695
+msgid "<literal>fetch</literal> (optional - defaults to <literal>select</literal>): Chooses between outer-join fetching or sequential select fetching."
+msgstr ""
+
+#: index.docbook:1518
+msgid "<literal>update, insert</literal> (optional - defaults to <literal>true</literal>) specifies that the mapped columns should be included in SQL <literal>UPDATE</literal> and/or <literal>INSERT</literal> statements. Setting both to <literal>false</literal> allows a pure \"derived\" association whose value is initialized from some other property that maps to the same colum(s) or by a trigger or other application."
+msgstr ""
+
+#: index.docbook:1527
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class is used."
+msgstr ""
+
+#: index.docbook:1540
+msgid "<literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. Also, allow this to be the target of a <literal>property-ref</literal>. This makes the association multiplicity effectively one to one."
+msgstr ""
+
+#: index.docbook:1548
+msgid "<literal>not-null</literal> (optional): Enable the DDL generation of a nullability constraint for the foreign key columns."
+msgstr ""
+
+#: index.docbook:1554
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, dertermines if a version increment should occur when this property is dirty."
+msgstr ""
+
+#: index.docbook:1562
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched."
+msgstr ""
+
+#: index.docbook:1572
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr ""
+
+#: index.docbook:1579, index.docbook:1733
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class."
+msgstr ""
+
+#: index.docbook:1585
+msgid "<literal>formula</literal> (optional): an SQL expression that defines the value for a <emphasis>computed</emphasis> foreign key."
+msgstr ""
+
+#: index.docbook:1592
+msgid "Setting a value of the <literal>cascade</literal> attribute to any meaningful value other than <literal>none</literal> will propagate certain operations to the associated object. The meaningful values are the names of Hibernate's basic operations, <literal>persist, merge, delete, save-update, evict, replicate, lock, refresh</literal>, as well as the special values <literal>delete-orphan</literal> and <literal>all</literal> and comma-separated combinations of operation names, for example, <literal>cascade=\"persist,merge,evict\"</literal> or <literal>cascade=\"all,delete-orphan\"</literal>. See <xref linkend=\"objectstate-transitive\"/> for a full explanation. Note that single valued associations (many-to-one and one-to-one associations) do not support orphan delete."
+msgstr ""
+
+#: index.docbook:1605
+msgid "A typical <literal>many-to-one</literal> declaration looks as simple as this:"
+msgstr ""
+
+#: index.docbook:1609
+msgid "<![CDATA[<many-to-one name=\"product\" class=\"Product\" column=\"PRODUCT_ID\"/>]]>"
+msgstr ""
+
+#: index.docbook:1611
+msgid "The <literal>property-ref</literal> attribute should only be used for mapping legacy data where a foreign key refers to a unique key of the associated table other than the primary key. This is an ugly relational model. For example, suppose the <literal>Product</literal> class had a unique serial number, that is not the primary key. (The <literal>unique</literal> attribute controls Hibernate's DDL generation with the SchemaExport tool.)"
+msgstr ""
+
+#: index.docbook:1620
+msgid "<![CDATA[<property name=\"serialNumber\" unique=\"true\" type=\"string\" column=\"SERIAL_NUMBER\"/>]]>"
+msgstr ""
+
+#: index.docbook:1622
+msgid "Then the mapping for <literal>OrderItem</literal> might use:"
+msgstr ""
+
+#: index.docbook:1626
+msgid "<![CDATA[<many-to-one name=\"product\" property-ref=\"serialNumber\" column=\"PRODUCT_SERIAL_NUMBER\"/>]]>"
+msgstr ""
+
+#: index.docbook:1628
+msgid "This is certainly not encouraged, however."
+msgstr ""
+
+#: index.docbook:1632
+msgid "If the referenced unique key comprises multiple properties of the associated entity, you should map the referenced properties inside a named <literal><properties></literal> element."
+msgstr ""
+
+#: index.docbook:1637
+msgid "If the referenced unique key is the property of a component, you may specify a property path:"
+msgstr ""
+
+#: index.docbook:1641
+msgid "<![CDATA[<many-to-one name=\"owner\" property-ref=\"identity.ssn\" column=\"OWNER_SSN\"/>]]>"
+msgstr ""
+
+#: index.docbook:1646
+msgid "one-to-one"
+msgstr ""
+
+#: index.docbook:1648
+msgid "A one-to-one association to another persistent class is declared using a <literal>one-to-one</literal> element."
+msgstr ""
+
+#: index.docbook:1666
+msgid ""
+ "<![CDATA[<one-to-one\n"
+ " name=\"propertyName\"\n"
+ " class=\"ClassName\"\n"
+ " cascade=\"cascade_style\"\n"
+ " constrained=\"true|false\"\n"
+ " fetch=\"join|select\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " formula=\"any SQL expression\"\n"
+ " lazy=\"proxy|no-proxy|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name|@attribute-name|element/@attribute|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ " foreign-key=\"foreign_key_name\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:1680
+msgid "<literal>cascade</literal> (optional) specifies which operations should be cascaded from the parent object to the associated object."
+msgstr ""
+
+#: index.docbook:1686
+msgid "<literal>constrained</literal> (optional) specifies that a foreign key constraint on the primary key of the mapped table references the table of the associated class. This option affects the order in which <literal>save()</literal> and <literal>delete()</literal> are cascaded, and determines whether the association may be proxied (it is also used by the schema export tool)."
+msgstr ""
+
+#: index.docbook:1701
+msgid "<literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to the primary key of this class. If not specified, the primary key of the associated class is used."
+msgstr ""
+
+#: index.docbook:1714
+msgid "<literal>formula</literal> (optional): Almost all one to one associations map to the primary key of the owning entity. In the rare case that this is not the case, you may specify a some other column, columns or expression to join on using an SQL formula. (See <literal>org.hibernate.test.onetooneformula</literal> for an example.)"
+msgstr ""
+
+#: index.docbook:1722
+msgid "<literal>lazy</literal> (optional - defaults to <literal>proxy</literal>): By default, single point associations are proxied. <literal>lazy=\"no-proxy\"</literal> specifies that the property should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation). <literal>lazy=\"false\"</literal> specifies that the association will always be eagerly fetched. <emphasis>Note that if <literal>constrained=\"false\"</literal>, proxying is impossible and Hibernate will eager fetch the association!</emphasis>"
+msgstr ""
+
+#: index.docbook:1740
+msgid "There are two varieties of one-to-one association:"
+msgstr ""
+
+#: index.docbook:1744
+msgid "primary key associations"
+msgstr ""
+
+#: index.docbook:1747
+msgid "unique foreign key associations"
+msgstr ""
+
+#: index.docbook:1752
+msgid "Primary key associations don't need an extra table column; if two rows are related by the association then the two table rows share the same primary key value. So if you want two objects to be related by a primary key association, you must make sure that they are assigned the same identifier value!"
+msgstr ""
+
+#: index.docbook:1759
+msgid "For a primary key association, add the following mappings to <literal>Employee</literal> and <literal>Person</literal>, respectively."
+msgstr ""
+
+#: index.docbook:1764
+msgid "<![CDATA[<one-to-one name=\"person\" class=\"Person\"/>]]>"
+msgstr ""
+
+#: index.docbook:1765
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" constrained=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:1767
+msgid "Now we must ensure that the primary keys of related rows in the PERSON and EMPLOYEE tables are equal. We use a special Hibernate identifier generation strategy called <literal>foreign</literal>:"
+msgstr ""
+
+#: index.docbook:1773
+msgid ""
+ "<![CDATA[<class name=\"person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"foreign\">\n"
+ " <param name=\"property\">employee</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " ...\n"
+ " <one-to-one name=\"employee\"\n"
+ " class=\"Employee\"\n"
+ " constrained=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:1775
+msgid "A newly saved instance of <literal>Person</literal> is then assigned the same primary key value as the <literal>Employee</literal> instance refered with the <literal>employee</literal> property of that <literal>Person</literal>."
+msgstr ""
+
+#: index.docbook:1781
+msgid "Alternatively, a foreign key with a unique constraint, from <literal>Employee</literal> to <literal>Person</literal>, may be expressed as:"
+msgstr ""
+
+#: index.docbook:1786
+msgid "<![CDATA[<many-to-one name=\"person\" class=\"Person\" column=\"PERSON_ID\" unique=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:1788
+msgid "And this association may be made bidirectional by adding the following to the <literal>Person</literal> mapping:"
+msgstr ""
+
+#: index.docbook:1793
+msgid "<![CDATA[<one-to-one name=\"employee\" class=\"Employee\" property-ref=\"person\"/>]]>"
+msgstr ""
+
+#: index.docbook:1798
+msgid "natural-id"
+msgstr ""
+
+#: index.docbook:1800
+msgid ""
+ "<![CDATA[<natural-id mutable=\"true|false\"/>\n"
+ " <property ... />\n"
+ " <many-to-one ... />\n"
+ " ......\n"
+ "</natural-id>]]>"
+msgstr ""
+
+#: index.docbook:1802
+msgid "Even though we recommend the use of surrogate keys as primary keys, you should still try to identify natural keys for all entities. A natural key is a property or combination of properties that is unique and non-null. If it is also immutable, even better. Map the properties of the natural key inside the <literal><natural-id></literal> element. Hibernate will generate the necessary unique key and nullability constraints, and your mapping will be more self-documenting."
+msgstr ""
+
+#: index.docbook:1811
+msgid "We strongly recommend that you implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the natural key properties of the entity."
+msgstr ""
+
+#: index.docbook:1816
+msgid "This mapping is not intended for use with entities with natural primary keys."
+msgstr ""
+
+#: index.docbook:1822
+msgid "<literal>mutable</literal> (optional, defaults to <literal>false</literal>): By default, natural identifier properties as assumed to be immutable (constant)."
+msgstr ""
+
+#: index.docbook:1832
+msgid "component, dynamic-component"
+msgstr ""
+
+#: index.docbook:1834
+msgid "The <literal><component></literal> element maps properties of a child object to columns of the table of a parent class. Components may, in turn, declare their own properties, components or collections. See \"Components\" below."
+msgstr ""
+
+#: index.docbook:1852
+msgid ""
+ "<![CDATA[<component\n"
+ " name=\"propertyName\"\n"
+ " class=\"className\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " lazy=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</component>]]>"
+msgstr ""
+
+#: index.docbook:1860
+msgid "<literal>class</literal> (optional - defaults to the property type determined by reflection): The name of the component (child) class."
+msgstr ""
+
+#: index.docbook:1866, index.docbook:1955
+msgid "<literal>insert</literal>: Do the mapped columns appear in SQL <literal>INSERT</literal>s?"
+msgstr ""
+
+#: index.docbook:1872, index.docbook:1961
+msgid "<literal>update</literal>: Do the mapped columns appear in SQL <literal>UPDATE</literal>s?"
+msgstr ""
+
+#: index.docbook:1884
+msgid "<literal>lazy</literal> (optional - defaults to <literal>false</literal>): Specifies that this component should be fetched lazily when the instance variable is first accessed (requires build-time bytecode instrumentation)."
+msgstr ""
+
+#: index.docbook:1891
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this component do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when this property is dirty."
+msgstr ""
+
+#: index.docbook:1899, index.docbook:1975
+msgid "<literal>unique</literal> (optional - defaults to <literal>false</literal>): Specifies that a unique constraint exists upon all mapped columns of the component."
+msgstr ""
+
+#: index.docbook:1908
+msgid "The child <literal><property></literal> tags map properties of the child class to table columns."
+msgstr ""
+
+#: index.docbook:1913
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr ""
+
+#: index.docbook:1919
+msgid "The <literal><dynamic-component></literal> element allows a <literal>Map</literal> to be mapped as a component, where the property names refer to keys of the map, see <xref linkend=\"components-dynamic\"/>."
+msgstr ""
+
+#: index.docbook:1928
+msgid "properties"
+msgstr ""
+
+#: index.docbook:1930
+msgid "The <literal><properties></literal> element allows the definition of a named, logical grouping of properties of a class. The most important use of the construct is that it allows a combination of properties to be the target of a <literal>property-ref</literal>. It is also a convenient way to define a multi-column unique constraint."
+msgstr ""
+
+#: index.docbook:1946
+msgid ""
+ "<![CDATA[<properties\n"
+ " name=\"logicalName\"\n"
+ " insert=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <property ...../>\n"
+ " <many-to-one .... />\n"
+ " ........\n"
+ "</properties>]]>"
+msgstr ""
+
+#: index.docbook:1949
+msgid "<literal>name</literal>: The logical name of the grouping - <emphasis>not</emphasis> an actual property name."
+msgstr ""
+
+#: index.docbook:1967
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to these properties do or do not require acquisition of the optimistic lock. In other words, determines if a version increment should occur when these properties are dirty."
+msgstr ""
+
+#: index.docbook:1984
+msgid "For example, if we have the following <literal><properties></literal> mapping:"
+msgstr ""
+
+#: index.docbook:1988
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"personNumber\"/>\n"
+ " ...\n"
+ " <properties name=\"name\"\n"
+ " unique=\"true\" update=\"false\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </properties>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:1990
+msgid "Then we might have some legacy data association which refers to this unique key of the <literal>Person</literal> table, instead of to the primary key:"
+msgstr ""
+
+#: index.docbook:1995
+msgid ""
+ "<![CDATA[<many-to-one name=\"person\"\n"
+ " class=\"Person\" property-ref=\"name\">\n"
+ " <column name=\"firstName\"/>\n"
+ " <column name=\"initial\"/>\n"
+ " <column name=\"lastName\"/>\n"
+ "</many-to-one>]]>"
+msgstr ""
+
+#: index.docbook:1997
+msgid "We don't recommend the use of this kind of thing outside the context of mapping legacy data."
+msgstr ""
+
+#: index.docbook:2005
+msgid "subclass"
+msgstr ""
+
+#: index.docbook:2007
+msgid "Finally, polymorphic persistence requires the declaration of each subclass of the root persistent class. For the table-per-class-hierarchy mapping strategy, the <literal><subclass></literal> declaration is used."
+msgstr ""
+
+#: index.docbook:2020
+msgid ""
+ "<![CDATA[<subclass\n"
+ " name=\"ClassName\"\n"
+ " discriminator-value=\"discriminator_value\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " extends=\"SuperclassName\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</subclass>]]>"
+msgstr ""
+
+#: index.docbook:2023, index.docbook:2081, index.docbook:2144
+msgid "<literal>name</literal>: The fully qualified class name of the subclass."
+msgstr ""
+
+#: index.docbook:2028
+msgid "<literal>discriminator-value</literal> (optional - defaults to the class name): A value that distiguishes individual subclasses."
+msgstr ""
+
+#: index.docbook:2034, index.docbook:2091, index.docbook:2154
+msgid "<literal>proxy</literal> (optional): Specifies a class or interface to use for lazy initializing proxies."
+msgstr ""
+
+#: index.docbook:2040, index.docbook:2097, index.docbook:2160
+msgid "<literal>lazy</literal> (optional, defaults to <literal>true</literal>): Setting <literal>lazy=\"false\"</literal> disables the use of lazy fetching."
+msgstr ""
+
+#: index.docbook:2048
+msgid "Each subclass should declare its own persistent properties and subclasses. <literal><version></literal> and <literal><id></literal> properties are assumed to be inherited from the root class. Each subclass in a heirarchy must define a unique <literal>discriminator-value</literal>. If none is specified, the fully qualified Java class name is used."
+msgstr ""
+
+#: index.docbook:2056, index.docbook:2114, index.docbook:2172
+msgid "For information about inheritance mappings, see <xref linkend=\"inheritance\"/>."
+msgstr ""
+
+#: index.docbook:2063
+msgid "joined-subclass"
+msgstr ""
+
+#: index.docbook:2065
+msgid "Alternatively, each subclass may be mapped to its own table (table-per-subclass mapping strategy). Inherited state is retrieved by joining with the table of the superclass. We use the <literal><joined-subclass></literal> element."
+msgstr ""
+
+#: index.docbook:2078
+msgid ""
+ "<![CDATA[<joined-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <key .... >\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</joined-subclass>]]>"
+msgstr ""
+
+#: index.docbook:2086, index.docbook:2149
+msgid "<literal>table</literal>: The name of the subclass table."
+msgstr ""
+
+#: index.docbook:2105
+msgid "No discriminator column is required for this mapping strategy. Each subclass must, however, declare a table column holding the object identifier using the <literal><key></literal> element. The mapping at the start of the chapter would be re-written as:"
+msgstr ""
+
+#: index.docbook:2112
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class name=\"Cat\" table=\"CATS\">\n"
+ " <id name=\"id\" column=\"uid\" type=\"long\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " <property name=\"birthdate\" type=\"date\"/>\n"
+ " <property name=\"color\" not-null=\"true\"/>\n"
+ " <property name=\"sex\" not-null=\"true\"/>\n"
+ " <property name=\"weight\"/>\n"
+ " <many-to-one name=\"mate\"/>\n"
+ " <set name=\"kittens\">\n"
+ " <key column=\"MOTHER\"/>\n"
+ " <one-to-many class=\"Cat\"/>\n"
+ " </set>\n"
+ " <joined-subclass name=\"DomesticCat\" table=\"DOMESTIC_CATS\">\n"
+ " <key column=\"CAT\"/>\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </joined-subclass>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"eg.Dog\">\n"
+ " <!-- mapping for Dog could go here -->\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2121
+msgid "union-subclass"
+msgstr ""
+
+#: index.docbook:2123
+msgid "A third option is to map only the concrete classes of an inheritance hierarchy to tables, (the table-per-concrete-class strategy) where each table defines all persistent state of the class, including inherited state. In Hibernate, it is not absolutely necessary to explicitly map such inheritance hierarchies. You can simply map each class with a separate <literal><class></literal> declaration. However, if you wish use polymorphic associations (e.g. an association to the superclass of your hierarchy), you need to use the <literal><union-subclass></literal> mapping."
+msgstr ""
+
+#: index.docbook:2141
+msgid ""
+ "<![CDATA[<union-subclass\n"
+ " name=\"ClassName\"\n"
+ " table=\"tablename\"\n"
+ " proxy=\"ProxyInterface\"\n"
+ " lazy=\"true|false\"\n"
+ " dynamic-update=\"true|false\"\n"
+ " dynamic-insert=\"true|false\"\n"
+ " schema=\"schema\"\n"
+ " catalog=\"catalog\"\n"
+ " extends=\"SuperclassName\"\n"
+ " abstract=\"true|false\"\n"
+ " persister=\"ClassName\"\n"
+ " subselect=\"SQL expression\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\">\n"
+ "\n"
+ " <property .... />\n"
+ " .....\n"
+ "</union-subclass>]]>"
+msgstr ""
+
+#: index.docbook:2168
+msgid "No discriminator column or key column is required for this mapping strategy."
+msgstr ""
+
+#: index.docbook:2179
+msgid "join"
+msgstr ""
+
+#: index.docbook:2181
+msgid "Using the <literal><join></literal> element, it is possible to map properties of one class to several tables, when there's a 1-to-1 relationship between the tables."
+msgstr ""
+
+#: index.docbook:2195
+msgid ""
+ "<![CDATA[<join\n"
+ " table=\"tablename\"\n"
+ " schema=\"owner\"\n"
+ " catalog=\"catalog\"\n"
+ " fetch=\"join|select\"\n"
+ " inverse=\"true|false\"\n"
+ " optional=\"true|false\">\n"
+ "\n"
+ " <key ... />\n"
+ "\n"
+ " <property ... />\n"
+ " ...\n"
+ "</join>]]>"
+msgstr ""
+
+#: index.docbook:2199
+msgid "<literal>table</literal>: The name of the joined table."
+msgstr ""
+
+#: index.docbook:2216
+msgid "<literal>fetch</literal> (optional - defaults to <literal>join</literal>): If set to <literal>join</literal>, the default, Hibernate will use an inner join to retrieve a <literal><join></literal> defined by a class or its superclasses and an outer join for a <literal><join></literal> defined by a subclass. If set to <literal>select</literal> then Hibernate will use a sequential select for a <literal><join></literal> defined on a subclass, which will be issued only if a row turns out to represent an instance of the subclass. Inner joins will still be used to retrieve a <literal><join></literal> defined by the class and its superclasses."
+msgstr ""
+
+#: index.docbook:2229
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will not try to insert or update the properties defined by this join."
+msgstr ""
+
+#: index.docbook:2236
+msgid "<literal>optional</literal> (optional - defaults to <literal>false</literal>): If enabled, Hibernate will insert a row only if the properties defined by this join are non-null and will always use an outer join to retrieve the properties."
+msgstr ""
+
+#: index.docbook:2245
+msgid "For example, the address information for a person can be mapped to a separate table (while preserving value type semantics for all properties):"
+msgstr ""
+
+#: index.docbook:2250
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " table=\"PERSON\">\n"
+ "\n"
+ " <id name=\"id\" column=\"PERSON_ID\">...</id>\n"
+ "\n"
+ " <join table=\"ADDRESS\">\n"
+ " <key column=\"ADDRESS_ID\"/>\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </join>\n"
+ " ...]]>"
+msgstr ""
+
+#: index.docbook:2252
+msgid "This feature is often only useful for legacy data models, we recommend fewer tables than classes and a fine-grained domain model. However, it is useful for switching between inheritance mapping strategies in a single hierarchy, as explained later."
+msgstr ""
+
+#: index.docbook:2262
+msgid "<title>key</title>"
+msgstr ""
+
+#: index.docbook:2264
+msgid "We've seen the <literal><key></literal> element crop up a few times now. It appears anywhere the parent mapping element defines a join to a new table, and defines the foreign key in the joined table, that references the primary key of the original table."
+msgstr ""
+
+#: index.docbook:2280
+msgid ""
+ "<![CDATA[<key\n"
+ " column=\"columnname\"\n"
+ " on-delete=\"noaction|cascade\"\n"
+ " property-ref=\"propertyName\"\n"
+ " not-null=\"true|false\"\n"
+ " update=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:2291
+msgid "<literal>on-delete</literal> (optional, defaults to <literal>noaction</literal>): Specifies whether the foreign key constraint has database-level cascade delete enabled."
+msgstr ""
+
+#: index.docbook:2298
+msgid "<literal>property-ref</literal> (optional): Specifies that the foreign key refers to columns that are not the primary key of the orginal table. (Provided for legacy data.)"
+msgstr ""
+
+#: index.docbook:2305
+msgid "<literal>not-null</literal> (optional): Specifies that the foreign key columns are not nullable (this is implied whenever the foreign key is also part of the primary key)."
+msgstr ""
+
+#: index.docbook:2312
+msgid "<literal>update</literal> (optional): Specifies that the foreign key should never be updated (this is implied whenever the foreign key is also part of the primary key)."
+msgstr ""
+
+#: index.docbook:2319
+msgid "<literal>unique</literal> (optional): Specifies that the foreign key should have a unique constraint (this is implied whenever the foreign key is also the primary key)."
+msgstr ""
+
+#: index.docbook:2327
+msgid "We recommend that for systems where delete performance is important, all keys should be defined <literal>on-delete=\"cascade\"</literal>, and Hibernate will use a database-level <literal>ON CASCADE DELETE</literal> constraint, instead of many individual <literal>DELETE</literal> statements. Be aware that this feature bypasses Hibernate's usual optimistic locking strategy for versioned data."
+msgstr ""
+
+#: index.docbook:2335
+msgid "The <literal>not-null</literal> and <literal>update</literal> attributes are useful when mapping a unidirectional one to many association. If you map a unidirectional one to many to a non-nullable foreign key, you <emphasis>must</emphasis> declare the key column using <literal><key not-null=\"true\"></literal>."
+msgstr ""
+
+#: index.docbook:2345
+msgid "column and formula elements"
+msgstr ""
+
+#: index.docbook:2346
+msgid "Any mapping element which accepts a <literal>column</literal> attribute will alternatively accept a <literal><column></literal> subelement. Likewise, <literal><formula></literal> is an alternative to the <literal>formula</literal> attribute."
+msgstr ""
+
+#: index.docbook:2352
+msgid ""
+ "<![CDATA[<column\n"
+ " name=\"column_name\"\n"
+ " length=\"N\"\n"
+ " precision=\"N\"\n"
+ " scale=\"N\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " unique-key=\"multicolumn_unique_key_name\"\n"
+ " index=\"index_name\"\n"
+ " sql-type=\"sql_type_name\"\n"
+ " check=\"SQL expression\"\n"
+ " default=\"SQL expression\"/>]]>"
+msgstr ""
+
+#: index.docbook:2354
+msgid "<![CDATA[<formula>SQL expression</formula>]]>"
+msgstr ""
+
+#: index.docbook:2356
+msgid "<literal>column</literal> and <literal>formula</literal> attributes may even be combined within the same property or association mapping to express, for example, exotic join conditions."
+msgstr ""
+
+#: index.docbook:2362
+msgid ""
+ "<![CDATA[<many-to-one name=\"homeAddress\" class=\"Address\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"person_id\" not-null=\"true\" length=\"10\"/>\n"
+ " <formula>'MAILING'</formula>\n"
+ "</many-to-one>]]>"
+msgstr ""
+
+#: index.docbook:2367
+msgid "import"
+msgstr ""
+
+#: index.docbook:2369
+msgid "Suppose your application has two persistent classes with the same name, and you don't want to specify the fully qualified (package) name in Hibernate queries. Classes may be \"imported\" explicitly, rather than relying upon <literal>auto-import=\"true\"</literal>. You may even import classes and interfaces that are not explicitly mapped."
+msgstr ""
+
+#: index.docbook:2376
+msgid "<![CDATA[<import class=\"java.lang.Object\" rename=\"Universe\"/>]]>"
+msgstr ""
+
+#: index.docbook:2383
+msgid ""
+ "<![CDATA[<import\n"
+ " class=\"ClassName\"\n"
+ " rename=\"ShortName\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:2386
+msgid "<literal>class</literal>: The fully qualified class name of of any Java class."
+msgstr ""
+
+#: index.docbook:2391
+msgid "<literal>rename</literal> (optional - defaults to the unqualified class name): A name that may be used in the query language."
+msgstr ""
+
+#: index.docbook:2402
+msgid "<title>any</title>"
+msgstr ""
+
+#: index.docbook:2404
+msgid "There is one further type of property mapping. The <literal><any></literal> mapping element defines a polymorphic association to classes from multiple tables. This type of mapping always requires more than one column. The first column holds the type of the associated entity. The remaining columns hold the identifier. It is impossible to specify a foreign key constraint for this kind of association, so this is most certainly not meant as the usual way of mapping (polymorphic) associations. You should use this only in very special cases (eg. audit logs, user session data, etc)."
+msgstr ""
+
+#: index.docbook:2414
+msgid "The <literal>meta-type</literal> attribute lets the application specify a custom type that maps database column values to persistent classes which have identifier properties of the type specified by <literal>id-type</literal>. You must specify the mapping from values of the meta-type to class names."
+msgstr ""
+
+#: index.docbook:2421
+msgid ""
+ "<![CDATA[<any name=\"being\" id-type=\"long\" meta-type=\"string\">\n"
+ " <meta-value value=\"TBL_ANIMAL\" class=\"Animal\"/>\n"
+ " <meta-value value=\"TBL_HUMAN\" class=\"Human\"/>\n"
+ " <meta-value value=\"TBL_ALIEN\" class=\"Alien\"/>\n"
+ " <column name=\"table_name\"/>\n"
+ " <column name=\"id\"/>\n"
+ "</any>]]>"
+msgstr ""
+
+#: index.docbook:2432
+msgid ""
+ "<![CDATA[<any\n"
+ " name=\"propertyName\"\n"
+ " id-type=\"idtypename\"\n"
+ " meta-type=\"metatypename\"\n"
+ " cascade=\"cascade_style\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ ">\n"
+ " <meta-value ... />\n"
+ " <meta-value ... />\n"
+ " .....\n"
+ " <column .... />\n"
+ " <column .... />\n"
+ " .....\n"
+ "</any>]]>"
+msgstr ""
+
+#: index.docbook:2435
+msgid "<literal>name</literal>: the property name."
+msgstr ""
+
+#: index.docbook:2440
+msgid "<literal>id-type</literal>: the identifier type."
+msgstr ""
+
+#: index.docbook:2445
+msgid "<literal>meta-type</literal> (optional - defaults to <literal>string</literal>): Any type that is allowed for a discriminator mapping."
+msgstr ""
+
+#: index.docbook:2451
+msgid "<literal>cascade</literal> (optional- defaults to <literal>none</literal>): the cascade style."
+msgstr ""
+
+#: index.docbook:2463
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Specifies that updates to this property do or do not require acquisition of the optimistic lock. In other words, define if a version increment should occur if this property is dirty."
+msgstr ""
+
+#: index.docbook:2478
+msgid "Hibernate Types"
+msgstr ""
+
+#: index.docbook:2481
+msgid "Entities and values"
+msgstr ""
+
+#: index.docbook:2483
+msgid "To understand the behaviour of various Java language-level objects with respect to the persistence service, we need to classify them into two groups:"
+msgstr ""
+
+#: index.docbook:2488
+msgid "An <emphasis>entity</emphasis> exists independently of any other objects holding references to the entity. Contrast this with the usual Java model where an unreferenced object is garbage collected. Entities must be explicitly saved and deleted (except that saves and deletions may be <emphasis>cascaded</emphasis> from a parent entity to its children). This is different from the ODMG model of object persistence by reachablity - and corresponds more closely to how application objects are usually used in large systems. Entities support circular and shared references. They may also be versioned."
+msgstr ""
+
+#: index.docbook:2499
+msgid "An entity's persistent state consists of references to other entities and instances of <emphasis>value</emphasis> types. Values are primitives, collections (not what's inside a collection), components and certain immutable objects. Unlike entities, values (in particular collections and components) <emphasis>are</emphasis> persisted and deleted by reachability. Since value objects (and primitives) are persisted and deleted along with their containing entity they may not be independently versioned. Values have no independent identity, so they cannot be shared by two entities or collections."
+msgstr ""
+
+#: index.docbook:2510
+msgid "Up until now, we've been using the term \"persistent class\" to refer to entities. We will continue to do that. Strictly speaking, however, not all user-defined classes with persistent state are entities. A <emphasis>component</emphasis> is a user defined class with value semantics. A Java property of type <literal>java.lang.String</literal> also has value semantics. Given this definition, we can say that all types (classes) provided by the JDK have value type semantics in Java, while user-defined types may be mapped with entity or value type semantics. This decision is up to the application developer. A good hint for an entity class in a domain model are shared references to a single instance of that class, while composition or aggregation usually translates to a value type."
+msgstr ""
+
+#: index.docbook:2524
+msgid "We'll revisit both concepts throughout the documentation."
+msgstr ""
+
+#: index.docbook:2528
+msgid "The challenge is to map the Java type system (and the developers' definition of entities and value types) to the SQL/database type system. The bridge between both systems is provided by Hibernate: for entities we use <literal><class></literal>, <literal><subclass></literal> and so on. For value types we use <literal><property></literal>, <literal><component></literal>, etc, usually with a <literal>type</literal> attribute. The value of this attribute is the name of a Hibernate <emphasis>mapping type</emphasis>. Hibernate provides many mappings (for standard JDK value types) out of the box. You can write your own mapping types and implement your custom conversion strategies as well, as you'll see later."
+msgstr ""
+
+#: index.docbook:2541
+msgid "All built-in Hibernate types except collections support null semantics."
+msgstr ""
+
+#: index.docbook:2548
+msgid "Basic value types"
+msgstr ""
+
+#: index.docbook:2550
+msgid "The built-in <emphasis>basic mapping types</emphasis> may be roughly categorized into"
+msgstr ""
+
+#: index.docbook:2555
+msgid "integer, long, short, float, double, character, byte, boolean, yes_no, true_false"
+msgstr ""
+
+#: index.docbook:2558
+msgid "Type mappings from Java primitives or wrapper classes to appropriate (vendor-specific) SQL column types. <literal>boolean, yes_no</literal> and <literal>true_false</literal> are all alternative encodings for a Java <literal>boolean</literal> or <literal>java.lang.Boolean</literal>."
+msgstr ""
+
+#: index.docbook:2567
+msgid "string"
+msgstr ""
+
+#: index.docbook:2569
+msgid "A type mapping from <literal>java.lang.String</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>)."
+msgstr ""
+
+#: index.docbook:2576
+msgid "date, time, timestamp"
+msgstr ""
+
+#: index.docbook:2578
+msgid "Type mappings from <literal>java.util.Date</literal> and its subclasses to SQL types <literal>DATE</literal>, <literal>TIME</literal> and <literal>TIMESTAMP</literal> (or equivalent)."
+msgstr ""
+
+#: index.docbook:2586
+msgid "calendar, calendar_date"
+msgstr ""
+
+#: index.docbook:2588
+msgid "Type mappings from <literal>java.util.Calendar</literal> to SQL types <literal>TIMESTAMP</literal> and <literal>DATE</literal> (or equivalent)."
+msgstr ""
+
+#: index.docbook:2596
+msgid "big_decimal, big_integer"
+msgstr ""
+
+#: index.docbook:2598
+msgid "Type mappings from <literal>java.math.BigDecimal</literal> and <literal>java.math.BigInteger</literal> to <literal>NUMERIC</literal> (or Oracle <literal>NUMBER</literal>)."
+msgstr ""
+
+#: index.docbook:2606
+msgid "locale, timezone, currency"
+msgstr ""
+
+#: index.docbook:2608
+msgid "Type mappings from <literal>java.util.Locale</literal>, <literal>java.util.TimeZone</literal> and <literal>java.util.Currency</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). Instances of <literal>Locale</literal> and <literal>Currency</literal> are mapped to their ISO codes. Instances of <literal>TimeZone</literal> are mapped to their <literal>ID</literal>."
+msgstr ""
+
+#: index.docbook:2620
+msgid "<literal>class</literal>"
+msgstr ""
+
+#: index.docbook:2622
+msgid "A type mapping from <literal>java.lang.Class</literal> to <literal>VARCHAR</literal> (or Oracle <literal>VARCHAR2</literal>). A <literal>Class</literal> is mapped to its fully qualified name."
+msgstr ""
+
+#: index.docbook:2630
+msgid "binary"
+msgstr ""
+
+#: index.docbook:2632
+msgid "Maps byte arrays to an appropriate SQL binary type."
+msgstr ""
+
+#: index.docbook:2638
+msgid "text"
+msgstr ""
+
+#: index.docbook:2640
+msgid "Maps long Java strings to a SQL <literal>CLOB</literal> or <literal>TEXT</literal> type."
+msgstr ""
+
+#: index.docbook:2647
+msgid "serializable"
+msgstr ""
+
+#: index.docbook:2649
+msgid "Maps serializable Java types to an appropriate SQL binary type. You may also indicate the Hibernate type <literal>serializable</literal> with the name of a serializable Java class or interface that does not default to a basic type."
+msgstr ""
+
+#: index.docbook:2658
+msgid "clob, blob"
+msgstr ""
+
+#: index.docbook:2660
+msgid "Type mappings for the JDBC classes <literal>java.sql.Clob</literal> and <literal>java.sql.Blob</literal>. These types may be inconvenient for some applications, since the blob or clob object may not be reused outside of a transaction. (Furthermore, driver support is patchy and inconsistent.)"
+msgstr ""
+
+#: index.docbook:2670
+msgid "imm_date, imm_time, imm_timestamp, imm_calendar, imm_calendar_date, imm_serializable, imm_binary"
+msgstr ""
+
+#: index.docbook:2674
+msgid "Type mappings for what are usually considered mutable Java types, where Hibernate makes certain optimizations appropriate only for immutable Java types, and the application treats the object as immutable. For example, you should not call <literal>Date.setTime()</literal> for an instance mapped as <literal>imm_timestamp</literal>. To change the value of the property, and have that change made persistent, the application must assign a new (nonidentical) object to the property."
+msgstr ""
+
+#: index.docbook:2689
+msgid "Unique identifiers of entities and collections may be of any basic type except <literal>binary</literal>, <literal>blob</literal> and <literal>clob</literal>. (Composite identifiers are also allowed, see below.)"
+msgstr ""
+
+#: index.docbook:2695
+msgid "The basic value types have corresponding <literal>Type</literal> constants defined on <literal>org.hibernate.Hibernate</literal>. For example, <literal>Hibernate.STRING</literal> represents the <literal>string</literal> type."
+msgstr ""
+
+#: index.docbook:2704
+msgid "Custom value types"
+msgstr ""
+
+#: index.docbook:2706
+msgid "It is relatively easy for developers to create their own value types. For example, you might want to persist properties of type <literal>java.lang.BigInteger</literal> to <literal>VARCHAR</literal> columns. Hibernate does not provide a built-in type for this. But custom types are not limited to mapping a property (or collection element) to a single table column. So, for example, you might have a Java property <literal>getName()</literal>/<literal>setName()</literal> of type <literal>java.lang.String</literal> that is persisted to the columns <literal>FIRST_NAME</literal>, <literal>INITIAL</literal>, <literal>SURNAME</literal>."
+msgstr ""
+
+#: index.docbook:2717
+msgid "To implement a custom type, implement either <literal>org.hibernate.UserType</literal> or <literal>org.hibernate.CompositeUserType</literal> and declare properties using the fully qualified classname of the type. Check out <literal>org.hibernate.test.DoubleStringType</literal> to see the kind of things that are possible."
+msgstr ""
+
+#: index.docbook:2725
+msgid ""
+ "<![CDATA[<property name=\"twoStrings\" type=\"org.hibernate.test.DoubleStringType\">\n"
+ " <column name=\"first_string\"/>\n"
+ " <column name=\"second_string\"/>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:2727
+msgid "Notice the use of <literal><column></literal> tags to map a property to multiple columns."
+msgstr ""
+
+#: index.docbook:2732
+msgid "The <literal>CompositeUserType</literal>, <literal>EnhancedUserType</literal>, <literal>UserCollectionType</literal>, and <literal>UserVersionType</literal> interfaces provide support for more specialized uses."
+msgstr ""
+
+#: index.docbook:2738
+msgid "You may even supply parameters to a <literal>UserType</literal> in the mapping file. To do this, your <literal>UserType</literal> must implement the <literal>org.hibernate.usertype.ParameterizedType</literal> interface. To supply parameters to your custom type, you can use the <literal><type></literal> element in your mapping files."
+msgstr ""
+
+#: index.docbook:2746
+msgid ""
+ "<![CDATA[<property name=\"priority\">\n"
+ " <type name=\"com.mycompany.usertypes.DefaultValueIntegerType\">\n"
+ " <param name=\"default\">0</param>\n"
+ " </type>\n"
+ "</property>]]>"
+msgstr ""
+
+#: index.docbook:2748
+msgid "The <literal>UserType</literal> can now retrieve the value for the parameter named <literal>default</literal> from the <literal>Properties</literal> object passed to it."
+msgstr ""
+
+#: index.docbook:2753
+msgid "If you use a certain <literal>UserType</literal> very often, it may be useful to define a shorter name for it. You can do this using the <literal><typedef></literal> element. Typedefs assign a name to a custom type, and may also contain a list of default parameter values if the type is parameterized."
+msgstr ""
+
+#: index.docbook:2760
+msgid ""
+ "<![CDATA[<typedef class=\"com.mycompany.usertypes.DefaultValueIntegerType\" name=\"default_zero\">\n"
+ " <param name=\"default\">0</param>\n"
+ "</typedef>]]>"
+msgstr ""
+
+#: index.docbook:2762
+msgid "<![CDATA[<property name=\"priority\" type=\"default_zero\"/>]]>"
+msgstr ""
+
+#: index.docbook:2764
+msgid "It is also possible to override the parameters supplied in a typedef on a case-by-case basis by using type parameters on the property mapping."
+msgstr ""
+
+#: index.docbook:2769
+msgid "Even though Hibernate's rich range of built-in types and support for components means you will very rarely <emphasis>need</emphasis> to use a custom type, it is nevertheless considered good form to use custom types for (non-entity) classes that occur frequently in your application. For example, a <literal>MonetaryAmount</literal> class is a good candidate for a <literal>CompositeUserType</literal>, even though it could easily be mapped as a component. One motivation for this is abstraction. With a custom type, your mapping documents would be future-proofed against possible changes in your way of representing monetary values."
+msgstr ""
+
+#: index.docbook:2785
+msgid "Mapping a class more than once"
+msgstr ""
+
+#: index.docbook:2786
+msgid "It is possible to provide more than one mapping for a particular persistent class. In this case you must specify an <emphasis>entity name</emphasis> do disambiguate between instances of the two mapped entities. (By default, the entity name is the same as the class name.) Hibernate lets you specify the entity name when working with persistent objects, when writing queries, or when mapping associations to the named entity."
+msgstr ""
+
+#: index.docbook:2794
+msgid ""
+ "<![CDATA[<class name=\"Contract\" table=\"Contracts\"\n"
+ " entity-name=\"CurrentContract\">\n"
+ " ...\n"
+ " <set name=\"history\" inverse=\"true\"\n"
+ " order-by=\"effectiveEndDate desc\">\n"
+ " <key column=\"currentContractId\"/>\n"
+ " <one-to-many entity-name=\"HistoricalContract\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Contract\" table=\"ContractHistory\"\n"
+ " entity-name=\"HistoricalContract\">\n"
+ " ...\n"
+ " <many-to-one name=\"currentContract\"\n"
+ " column=\"currentContractId\"\n"
+ " entity-name=\"CurrentContract\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:2796
+msgid "Notice how associations are now specified using <literal>entity-name</literal> instead of <literal>class</literal>."
+msgstr ""
+
+#: index.docbook:2804
+msgid "SQL quoted identifiers"
+msgstr ""
+
+#: index.docbook:2805
+msgid "You may force Hibernate to quote an identifier in the generated SQL by enclosing the table or column name in backticks in the mapping document. Hibernate will use the correct quotation style for the SQL <literal>Dialect</literal> (usually double quotes, but brackets for SQL Server and backticks for MySQL)."
+msgstr ""
+
+#: index.docbook:2812
+msgid ""
+ "<![CDATA[<class name=\"LineItem\" table=\"`Line Item`\">\n"
+ " <id name=\"id\" column=\"`Item Id`\"/><generator class=\"assigned\"/></id>\n"
+ " <property name=\"itemNumber\" column=\"`Item #`\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:2818
+msgid "Metadata alternatives"
+msgstr ""
+
+#: index.docbook:2820
+msgid "XML isn't for everyone, and so there are some alternative ways to define O/R mapping metadata in Hibernate."
+msgstr ""
+
+#: index.docbook:2825
+msgid "Using XDoclet markup"
+msgstr ""
+
+#: index.docbook:2827
+msgid "Many Hibernate users prefer to embed mapping information directly in sourcecode using XDoclet <literal>@hibernate.tags</literal>. We will not cover this approach in this document, since strictly it is considered part of XDoclet. However, we include the following example of the <literal>Cat</literal> class with XDoclet mappings."
+msgstr ""
+
+#: index.docbook:2834
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "/**\n"
+ " * @hibernate.class\n"
+ " * table=\"CATS\"\n"
+ " */\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ " private Date birthdate;\n"
+ " private Cat mother;\n"
+ " private Set kittens\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ "\n"
+ " /*\n"
+ " * @hibernate.id\n"
+ " * generator-class=\"native\"\n"
+ " * column=\"CAT_ID\"\n"
+ " */\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.many-to-one\n"
+ " * column=\"PARENT_ID\"\n"
+ " */\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"BIRTH_DATE\"\n"
+ " */\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"WEIGHT\"\n"
+ " */\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"COLOR\"\n"
+ " * not-null=\"true\"\n"
+ " */\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ " /**\n"
+ " * @hibernate.set\n"
+ " * inverse=\"true\"\n"
+ " * order-by=\"BIRTH_DATE\"\n"
+ " * @hibernate.collection-key\n"
+ " * column=\"PARENT_ID\"\n"
+ " * @hibernate.collection-one-to-many\n"
+ " */\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "\n"
+ " /**\n"
+ " * @hibernate.property\n"
+ " * column=\"SEX\"\n"
+ " * not-null=\"true\"\n"
+ " * update=\"false\"\n"
+ " */\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2836
+msgid "See the Hibernate web site for more examples of XDoclet and Hibernate."
+msgstr ""
+
+#: index.docbook:2843
+msgid "Using JDK 5.0 Annotations"
+msgstr ""
+
+#: index.docbook:2845
+msgid "JDK 5.0 introduced XDoclet-style annotations at the language level, type-safe and checked at compile time. This mechnism is more powerful than XDoclet annotations and better supported by tools and IDEs. IntelliJ IDEA, for example, supports auto-completion and syntax highlighting of JDK 5.0 annotations. The new revision of the EJB specification (JSR-220) uses JDK 5.0 annotations as the primary metadata mechanism for entity beans. Hibernate3 implements the <literal>EntityManager</literal> of JSR-220 (the persistence API), support for mapping metadata is available via the <emphasis>Hibernate Annotations</emphasis> package, as a separate download. Both EJB3 (JSR-220) and Hibernate3 metadata is supported."
+msgstr ""
+
+#: index.docbook:2856
+msgid "This is an example of a POJO class annotated as an EJB entity bean:"
+msgstr ""
+
+#: index.docbook:2860
+msgid ""
+ "<![CDATA[@Entity(access = AccessType.FIELD)\n"
+ "public class Customer implements Serializable {\n"
+ "\n"
+ " @Id;\n"
+ " Long id;\n"
+ "\n"
+ " String firstName;\n"
+ " String lastName;\n"
+ " Date birthday;\n"
+ "\n"
+ " @Transient\n"
+ " Integer age;\n"
+ "\n"
+ " @Embedded\n"
+ " private Address homeAddress;\n"
+ "\n"
+ " @OneToMany(cascade=CascadeType.ALL)\n"
+ " @JoinColumn(name=\"CUSTOMER_ID\")\n"
+ " Set<Order> orders;\n"
+ "\n"
+ " // Getter/setter and business methods\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:2862
+msgid "Note that support for JDK 5.0 Annotations (and JSR-220) is still work in progress and not completed. Please refer to the Hibernate Annotations module for more details."
+msgstr ""
+
+#: index.docbook:2871
+msgid "Generated Properties"
+msgstr ""
+
+#: index.docbook:2872
+msgid "Generated properties are properties which have their values generated by the database. Typically, Hibernate applications needed to <literal>refresh</literal> objects which contain any properties for which the database was generating values. Marking properties as generated, however, lets the application delegate this responsibility to Hibernate. Essentially, whenever Hibernate issues an SQL INSERT or UPDATE for an entity which has defined generated properties, it immediately issues a select afterwards to retrieve the generated values."
+msgstr ""
+
+#: index.docbook:2881
+msgid "Properties marked as generated must additionally be non-insertable and non-updateable. Only <xref linkend=\"mapping-declaration-version\"/>versions, <xref linkend=\"mapping-declaration-timestamp\"/>timestamps, and <xref linkend=\"mapping-declaration-property\"/>simple properties can be marked as generated."
+msgstr ""
+
+#: index.docbook:2888
+msgid "<literal>never</literal> (the default) - means that the given property value is not generated within the database."
+msgstr ""
+
+#: index.docbook:2892
+msgid "<literal>insert</literal> - states that the given property value is generated on insert, but is not regenerated on subsequent updates. Things like created-date would fall into this category. Note that even thought <xref linkend=\"mapping-declaration-version\"/>version and <xref linkend=\"mapping-declaration-timestamp\"/>timestamp properties can be marked as generated, this option is not available there..."
+msgstr ""
+
+#: index.docbook:2900
+msgid "<literal>always</literal> - states that the property value is generated both on insert and on update."
+msgstr ""
+
+#: index.docbook:2907
+msgid "Auxiliary Database Objects"
+msgstr ""
+
+#: index.docbook:2908
+msgid "Allows CREATE and DROP of arbitrary database objects, in conjunction with Hibernate's schema evolution tools, to provide the ability to fully define a user schema within the Hibernate mapping files. Although designed specifically for creating and dropping things like triggers or stored procedures, really any SQL command that can be run via a <literal>java.sql.Statement.execute()</literal> method is valid here (ALTERs, INSERTS, etc). There are essentially two modes for defining auxiliary database objects..."
+msgstr ""
+
+#: index.docbook:2917
+msgid "The first mode is to explicitly list the CREATE and DROP commands out in the mapping file:"
+msgstr ""
+
+#: index.docbook:2921
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <create>CREATE TRIGGER my_trigger ...</create>\n"
+ " <drop>DROP TRIGGER my_trigger</drop>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2922
+msgid "The second mode is to supply a custom class which knows how to construct the CREATE and DROP commands. This custom class must implement the <literal>org.hibernate.mapping.AuxiliaryDatabaseObject</literal> interface."
+msgstr ""
+
+#: index.docbook:2927
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:2928
+msgid "Additionally, these database objects can be optionally scoped such that they only apply when certain dialects are used."
+msgstr ""
+
+#: index.docbook:2932
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " ...\n"
+ " <database-object>\n"
+ " <definition class=\"MyTriggerDefinition\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.Oracle9Dialect\"/>\n"
+ " <dialect-scope name=\"org.hibernate.dialect.OracleDialect\"/>\n"
+ " </database-object>\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/batch.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/batch.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/batch.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,281 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Batch processing"
+msgstr ""
+
+#: index.docbook:7
+msgid "A naive approach to inserting 100 000 rows in the database using Hibernate might look like this:"
+msgstr ""
+
+#: index.docbook:12
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ "}\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:14
+msgid "This would fall over with an <literal>OutOfMemoryException</literal> somewhere around the 50 000th row. That's because Hibernate caches all the newly inserted <literal>Customer</literal> instances in the session-level cache."
+msgstr ""
+
+#: index.docbook:20
+msgid "In this chapter we'll show you how to avoid this problem. First, however, if you are doing batch processing, it is absolutely critical that you enable the use of JDBC batching, if you intend to achieve reasonable performance. Set the JDBC batch size to a reasonable number (say, 10-50):"
+msgstr ""
+
+#: index.docbook:27
+msgid "<![CDATA[hibernate.jdbc.batch_size 20]]>"
+msgstr ""
+
+#: index.docbook:29
+msgid "Note that Hibernate disables insert batching at the JDBC level transparently if you use an <literal>identiy</literal> identifier generator."
+msgstr ""
+
+#: index.docbook:34
+msgid "You also might like to do this kind of work in a process where interaction with the second-level cache is completely disabled:"
+msgstr ""
+
+#: index.docbook:39
+msgid "<![CDATA[hibernate.cache.use_second_level_cache false]]>"
+msgstr ""
+
+#: index.docbook:41
+msgid "However, this is not absolutely necessary, since we can explicitly set the <literal>CacheMode</literal> to disable interaction with the second-level cache."
+msgstr ""
+
+#: index.docbook:47
+msgid "Batch inserts"
+msgstr ""
+
+#: index.docbook:49
+msgid "When making new objects persistent, you must <literal>flush()</literal> and then <literal>clear()</literal> the session regularly, to control the size of the first-level cache."
+msgstr ""
+
+#: index.docbook:55
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "for ( int i=0; i<100000; i++ ) {\n"
+ " Customer customer = new Customer(.....);\n"
+ " session.save(customer);\n"
+ " if ( i % 20 == 0 ) { //20, same as the JDBC batch size\n"
+ " //flush a batch of inserts and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:60
+msgid "Batch updates"
+msgstr ""
+
+#: index.docbook:62
+msgid "For retrieving and updating data the same ideas apply. In addition, you need to use <literal>scroll()</literal> to take advantage of server-side cursors for queries that return many rows of data."
+msgstr ""
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .setCacheMode(CacheMode.IGNORE)\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "int count=0;\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " if ( ++count % 20 == 0 ) {\n"
+ " //flush a batch of updates and release memory:\n"
+ " session.flush();\n"
+ " session.clear();\n"
+ " }\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:73
+msgid "The StatelessSession interface"
+msgstr ""
+
+#: index.docbook:74
+msgid "Alternatively, Hibernate provides a command-oriented API that may be used for streaming data to and from the database in the form of detached objects. A <literal>StatelessSession</literal> has no persistence context associated with it and does not provide many of the higher-level life cycle semantics. In particular, a stateless session does not implement a first-level cache nor interact with any second-level or query cache. It does not implement transactional write-behind or automatic dirty checking. Operations performed using a stateless session do not ever cascade to associated instances. Collections are ignored by a stateless session. Operations performed via a stateless session bypass Hibernate's event model and interceptors. Stateless sessions are vulnerable to data aliasing effects, due to the lack of a first-level cache. A stateless session is a lower-level abstraction, much closer to the underlying JDBC."
+msgstr ""
+
+#: index.docbook:89
+msgid ""
+ "<![CDATA[StatelessSession session = sessionFactory.openStatelessSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ " \n"
+ "ScrollableResults customers = session.getNamedQuery(\"GetCustomers\")\n"
+ " .scroll(ScrollMode.FORWARD_ONLY);\n"
+ "while ( customers.next() ) {\n"
+ " Customer customer = (Customer) customers.get(0);\n"
+ " customer.updateStuff(...);\n"
+ " session.update(customer);\n"
+ "}\n"
+ " \n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:91
+msgid "Note that in this code example, the <literal>Customer</literal> instances returned by the query are immediately detached. They are never associated with any persistence context."
+msgstr ""
+
+#: index.docbook:97
+msgid "The <literal>insert(), update()</literal> and <literal>delete()</literal> operations defined by the <literal>StatelessSession</literal> interface are considered to be direct database row-level operations, which result in immediate execution of a SQL <literal>INSERT, UPDATE</literal> or <literal>DELETE</literal> respectively. Thus, they have very different semantics to the <literal>save(), saveOrUpdate()</literal> and <literal>delete()</literal> operations defined by the <literal>Session</literal> interface."
+msgstr ""
+
+#: index.docbook:110
+msgid "DML-style operations"
+msgstr ""
+
+#: index.docbook:112
+msgid "As already discussed, automatic and transparent object/relational mapping is concerned with the management of object state. This implies that the object state is available in memory, hence manipulating (using the SQL <literal>Data Manipulation Language</literal> (DML) statements: <literal>INSERT</literal>, <literal>UPDATE</literal>, <literal>DELETE</literal>) data directly in the database will not affect in-memory state. However, Hibernate provides methods for bulk SQL-style DML statement execution which are performed through the Hibernate Query Language (<xref linkend=\"queryhql\"/>HQL)."
+msgstr ""
+
+#: index.docbook:122
+msgid "The pseudo-syntax for <literal>UPDATE</literal> and <literal>DELETE</literal> statements is: <literal>( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)?</literal>. Some points to note:"
+msgstr ""
+
+#: index.docbook:130
+msgid "In the from-clause, the FROM keyword is optional"
+msgstr ""
+
+#: index.docbook:135
+msgid "There can only be a single entity named in the from-clause; it can optionally be aliased. If the entity name is aliased, then any property references must be qualified using that alias; if the entity name is not aliased, then it is illegal for any property references to be qualified."
+msgstr ""
+
+#: index.docbook:143
+msgid "No <xref linkend=\"queryhql-joins-forms\"/>joins (either implicit or explicit) can be specified in a bulk HQL query. Sub-queries may be used in the where-clause; the subqueries, themselves, may contain joins."
+msgstr ""
+
+#: index.docbook:150
+msgid "The where-clause is also optional."
+msgstr ""
+
+#: index.docbook:156
+msgid "As an example, to execute an HQL <literal>UPDATE</literal>, use the <literal>Query.executeUpdate()</literal> method (the method is named for those familiar with JDBC's <literal>PreparedStatement.executeUpdate()</literal>):"
+msgstr ""
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlUpdate = \"update Customer c set c.name = :newName where c.name = :oldName\";\n"
+ "// or String hqlUpdate = \"update Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:164
+msgid "HQL <literal>UPDATE</literal> statements, by default do not effect the <xref linkend=\"mapping-declaration-version\"/>version or the <xref linkend=\"mapping-declaration-timestamp\"/>timestamp property values for the affected entities; this is in keeping with the EJB3 specification. However, you can force Hibernate to properly reset the <literal>version</literal> or <literal>timestamp</literal> property values through the use of a <literal>versioned update</literal>. This is achieved by adding the <literal>VERSIONED</literal> keyword after the <literal>UPDATE</literal> keyword."
+msgstr ""
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "String hqlVersionedUpdate = \"update versioned Customer set name = :newName where name = :oldName\";\n"
+ "int updatedEntities = s.createQuery( hqlUpdate )\n"
+ " .setString( \"newName\", newName )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:176
+msgid "Note that custom version types (<literal>org.hibernate.usertype.UserVersionType</literal>) are not allowed in conjunction with a <literal>update versioned</literal> statement."
+msgstr ""
+
+#: index.docbook:181
+msgid "To execute an HQL <literal>DELETE</literal>, use the same <literal>Query.executeUpdate()</literal> method:"
+msgstr ""
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlDelete = \"delete Customer c where c.name = :oldName\";\n"
+ "// or String hqlDelete = \"delete Customer where name = :oldName\";\n"
+ "int deletedEntities = s.createQuery( hqlDelete )\n"
+ " .setString( \"oldName\", oldName )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:188
+msgid "The <literal>int</literal> value returned by the <literal>Query.executeUpdate()</literal> method indicate the number of entities effected by the operation. Consider this may or may not correlate to the number of rows effected in the database. An HQL bulk operation might result in multiple actual SQL statements being executed, for joined-subclass, for example. The returned number indicates the number of actual entities affected by the statement. Going back to the example of joined-subclass, a delete against one of the subclasses may actually result in deletes against not just the table to which that subclass is mapped, but also the \"root\" table and potentially joined-subclass tables further down the inheritence hierarchy."
+msgstr ""
+
+#: index.docbook:199
+msgid "The pseudo-syntax for <literal>INSERT</literal> statements is: <literal>INSERT INTO EntityName properties_list select_statement</literal>. Some points to note:"
+msgstr ""
+
+#: index.docbook:207
+msgid "Only the INSERT INTO ... SELECT ... form is supported; not the INSERT INTO ... VALUES ... form."
+msgstr ""
+
+#: index.docbook:210
+msgid "The properties_list is analogous to the <literal>column speficiation</literal> in the SQL <literal>INSERT</literal> statement. For entities involved in mapped inheritence, only properties directly defined on that given class-level can be used in the properties_list. Superclass properties are not allowed; and subclass properties do not make sense. In other words, <literal>INSERT</literal> statements are inherently non-polymorphic."
+msgstr ""
+
+#: index.docbook:220
+msgid "select_statement can be any valid HQL select query, with the caveat that the return types must match the types expected by the insert. Currently, this is checked during query compilation rather than allowing the check to relegate to the database. Note however that this might cause problems between Hibernate <literal>Type</literal>s which are <emphasis>equivalent</emphasis> as opposed to <emphasis>equal</emphasis>. This might cause issues with mismatches between a property defined as a <literal>org.hibernate.type.DateType</literal> and a property defined as a <literal>org.hibernate.type.TimestampType</literal>, even though the database might not make a distinction or might be able to handle the conversion."
+msgstr ""
+
+#: index.docbook:232
+msgid "For the id property, the insert statement gives you two options. You can either explicitly specify the id property in the properties_list (in which case its value is taken from the corresponding select expression) or omit it from the properties_list (in which case a generated value is used). This later option is only available when using id generators that operate in the database; attempting to use this option with any \"in memory\" type generators will cause an exception during parsing. Note that for the purposes of this discussion, in-database generators are considered to be <literal>org.hibernate.id.SequenceGenerator</literal> (and its subclasses) and any implementors of <literal>org.hibernate.id.PostInsertIdentifierGenerator</literal>. The most notable exception here is <literal>org.hibernate.id.TableHiLoGenerator</literal>, which cannot be used because it does not expose a selectable way to get its values."
+msgstr ""
+
+#: index.docbook:247
+msgid "For properties mapped as either <literal>version</literal> or <literal>timestamp</literal>, the insert statement gives you two options. You can either specify the property in the properties_list (in which case its value is taken from the corresponding select expressions) or omit it from the properties_list (in which case the <literal>seed value</literal> defined by the <literal>org.hibernate.type.VersionType</literal> is used)."
+msgstr ""
+
+#: index.docbook:257
+msgid "An example HQL <literal>INSERT</literal> statement execution:"
+msgstr ""
+
+#: index.docbook:261
+msgid ""
+ "<![CDATA[Session session = sessionFactory.openSession();\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "String hqlInsert = \"insert into DelinquentAccount (id, name) select c.id, c.name from Customer c where ...\";\n"
+ "int createdEntities = s.createQuery( hqlInsert )\n"
+ " .executeUpdate();\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/best_practices.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/best_practices.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/best_practices.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,168 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Best Practices"
+msgstr ""
+
+#: index.docbook:9
+msgid "Write fine-grained classes and map them using <literal><component></literal>."
+msgstr ""
+
+#: index.docbook:11
+msgid "Use an <literal>Address</literal> class to encapsulate <literal>street</literal>, <literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>. This encourages code reuse and simplifies refactoring."
+msgstr ""
+
+#: index.docbook:19
+msgid "Declare identifier properties on persistent classes."
+msgstr ""
+
+#: index.docbook:21
+msgid "Hibernate makes identifier properties optional. There are all sorts of reasons why you should use them. We recommend that identifiers be 'synthetic' (generated, with no business meaning)."
+msgstr ""
+
+#: index.docbook:29
+msgid "Identify natural keys."
+msgstr ""
+
+#: index.docbook:31
+msgid "Identify natural keys for all entities, and map them using <literal><natural-id></literal>. Implement <literal>equals()</literal> and <literal>hashCode()</literal> to compare the properties that make up the natural key."
+msgstr ""
+
+#: index.docbook:39
+msgid "Place each class mapping in its own file."
+msgstr ""
+
+#: index.docbook:41
+msgid "Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</literal> in the file <literal>com/eg/Foo.hbm.xml</literal>. This makes particularly good sense in a team environment."
+msgstr ""
+
+#: index.docbook:49
+msgid "Load mappings as resources."
+msgstr ""
+
+#: index.docbook:51
+msgid "Deploy the mappings along with the classes they map."
+msgstr ""
+
+#: index.docbook:57
+msgid "Consider externalising query strings."
+msgstr ""
+
+#: index.docbook:59
+msgid "This is a good practice if your queries call non-ANSI-standard SQL functions. Externalising the query strings to mapping files will make the application more portable."
+msgstr ""
+
+#: index.docbook:67
+msgid "Use bind variables."
+msgstr ""
+
+#: index.docbook:69
+msgid "As in JDBC, always replace non-constant values by \"?\". Never use string manipulation to bind a non-constant value in a query! Even better, consider using named parameters in queries."
+msgstr ""
+
+#: index.docbook:77
+msgid "Don't manage your own JDBC connections."
+msgstr ""
+
+#: index.docbook:79
+msgid "Hibernate lets the application manage JDBC connections. This approach should be considered a last-resort. If you can't use the built-in connections providers, consider providing your own implementation of <literal>org.hibernate.connection.ConnectionProvider</literal>."
+msgstr ""
+
+#: index.docbook:87
+msgid "Consider using a custom type."
+msgstr ""
+
+#: index.docbook:89
+msgid "Suppose you have a Java type, say from some library, that needs to be persisted but doesn't provide the accessors needed to map it as a component. You should consider implementing <literal>org.hibernate.UserType</literal>. This approach frees the application code from implementing transformations to / from a Hibernate type."
+msgstr ""
+
+#: index.docbook:98
+msgid "Use hand-coded JDBC in bottlenecks."
+msgstr ""
+
+#: index.docbook:100
+msgid "In performance-critical areas of the system, some kinds of operations might benefit from direct JDBC. But please, wait until you <emphasis>know</emphasis> something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If you need to use direct JDBC, it might be worth opening a Hibernate <literal>Session</literal> and using that JDBC connection. That way you can still use the same transaction strategy and underlying connection provider."
+msgstr ""
+
+#: index.docbook:110
+msgid "Understand <literal>Session</literal> flushing."
+msgstr ""
+
+#: index.docbook:112
+msgid "From time to time the Session synchronizes its persistent state with the database. Performance will be affected if this process occurs too often. You may sometimes minimize unnecessary flushing by disabling automatic flushing or even by changing the order of queries and other operations within a particular transaction."
+msgstr ""
+
+#: index.docbook:121
+msgid "In a three tiered architecture, consider using detached objects."
+msgstr ""
+
+#: index.docbook:123
+msgid "When using a servlet / session bean architecture, you could pass persistent objects loaded in the session bean to and from the servlet / JSP layer. Use a new session to service each request. Use <literal>Session.merge()</literal> or <literal>Session.saveOrUpdate()</literal> to synchronize objects with the database."
+msgstr ""
+
+#: index.docbook:132
+msgid "In a two tiered architecture, consider using long persistence contexts."
+msgstr ""
+
+#: index.docbook:134
+msgid "Database Transactions have to be as short as possible for best scalability. However, it is often neccessary to implement long running <emphasis>application transactions</emphasis>, a single unit-of-work from the point of view of a user. An application transaction might span several client request/response cycles. It is common to use detached objects to implement application transactions. An alternative, extremely appropriate in two tiered architecture, is to maintain a single open persistence contact (session) for the whole life cycle of the application transaction and simply disconnect from the JDBC connection at the end of each request and reconnect at the beginning of the subsequent request. Never share a single session across more than one application transaction, or you will be working with stale data."
+msgstr ""
+
+#: index.docbook:148
+msgid "Don't treat exceptions as recoverable."
+msgstr ""
+
+#: index.docbook:150
+msgid "This is more of a necessary practice than a \"best\" practice. When an exception occurs, roll back the <literal>Transaction</literal> and close the <literal>Session</literal>. If you don't, Hibernate can't guarantee that in-memory state accurately represents persistent state. As a special case of this, do not use <literal>Session.load()</literal> to determine if an instance with the given identifier exists on the database; use <literal>Session.get()</literal> or a query instead."
+msgstr ""
+
+#: index.docbook:160
+msgid "Prefer lazy fetching for associations."
+msgstr ""
+
+#: index.docbook:162
+msgid "Use eager fetching sparingly. Use proxies and lazy collections for most associations to classes that are not likely to be completely held in the second-level cache. For associations to cached classes, where there is an a extremely high probability of a cache hit, explicitly disable eager fetching using <literal>lazy=\"false\"</literal>. When an join fetching is appropriate to a particular use case, use a query with a <literal>left join fetch</literal>."
+msgstr ""
+
+#: index.docbook:172
+msgid "Use the <emphasis>open session in view</emphasis> pattern, or a disciplined <emphasis>assembly phase</emphasis> to avoid problems with unfetched data."
+msgstr ""
+
+#: index.docbook:177
+msgid "Hibernate frees the developer from writing tedious <emphasis>Data Transfer Objects</emphasis> (DTO). In a traditional EJB architecture, DTOs serve dual purposes: first, they work around the problem that entity beans are not serializable; second, they implicitly define an assembly phase where all data to be used by the view is fetched and marshalled into the DTOs before returning control to the presentation tier. Hibernate eliminates the first purpose. However, you will still need an assembly phase (think of your business methods as having a strict contract with the presentation tier about what data is available in the detached objects) unless you are prepared to hold the persistence context (the session) open across the view rendering process. This is not a limitation of Hibernate! It is a fundamental requirement of safe transactional data access."
+msgstr ""
+
+#: index.docbook:191
+msgid "Consider abstracting your business logic from Hibernate."
+msgstr ""
+
+#: index.docbook:193
+msgid "Hide (Hibernate) data-access code behind an interface. Combine the <emphasis>DAO</emphasis> and <emphasis>Thread Local Session</emphasis> patterns. You can even have some classes persisted by handcoded JDBC, associated to Hibernate via a <literal>UserType</literal>. (This advice is intended for \"sufficiently large\" applications; it is not appropriate for an application with five tables!)"
+msgstr ""
+
+#: index.docbook:203
+msgid "Don't use exotic association mappings."
+msgstr ""
+
+#: index.docbook:205
+msgid "Good usecases for a real many-to-many associations are rare. Most of the time you need additional information stored in the \"link table\". In this case, it is much better to use two one-to-many associations to an intermediate link class. In fact, we think that most associations are one-to-many and many-to-one, you should be careful when using any other association style and ask yourself if it is really neccessary."
+msgstr ""
+
+#: index.docbook:215
+msgid "Prefer bidirectional associations."
+msgstr ""
+
+#: index.docbook:217
+msgid "Unidirectional associations are more difficult to query. In a large application, almost all associations must be navigable in both directions in queries."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/collection_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/collection_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/collection_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,919 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Collection Mapping"
+msgstr ""
+
+#: index.docbook:8
+msgid "Persistent collections"
+msgstr ""
+
+#: index.docbook:10
+msgid "Hibernate requires that persistent collection-valued fields be declared as an interface type, for example:"
+msgstr ""
+
+#: index.docbook:15
+msgid ""
+ "<![CDATA[public class Product {\n"
+ " private String serialNumber;\n"
+ " private Set parts = new HashSet();\n"
+ " \n"
+ " public Set getParts() { return parts; }\n"
+ " void setParts(Set parts) { this.parts = parts; }\n"
+ " public String getSerialNumber() { return serialNumber; }\n"
+ " void setSerialNumber(String sn) { serialNumber = sn; }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:17
+msgid "The actual interface might be <literal>java.util.Set</literal>, <literal>java.util.Collection</literal>, <literal>java.util.List</literal>, <literal>java.util.Map</literal>, <literal>java.util.SortedSet</literal>, <literal>java.util.SortedMap</literal> or ... anything you like! (Where \"anything you like\" means you will have to write an implementation of <literal>org.hibernate.usertype.UserCollectionType</literal>.)"
+msgstr ""
+
+#: index.docbook:26
+msgid "Notice how we initialized the instance variable with an instance of <literal>HashSet</literal>. This is the best way to initialize collection valued properties of newly instantiated (non-persistent) instances. When you make the instance persistent - by calling <literal>persist()</literal>, for example - Hibernate will actually replace the <literal>HashSet</literal> with an instance of Hibernate's own implementation of <literal>Set</literal>. Watch out for errors like this:"
+msgstr ""
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "Cat kitten = new DomesticCat();\n"
+ "....\n"
+ "Set kittens = new HashSet();\n"
+ "kittens.add(kitten);\n"
+ "cat.setKittens(kittens);\n"
+ "session.persist(cat);\n"
+ "kittens = cat.getKittens(); // Okay, kittens collection is a Set\n"
+ "(HashSet) cat.getKittens(); // Error!]]>"
+msgstr ""
+
+#: index.docbook:38
+msgid "The persistent collections injected by Hibernate behave like <literal>HashMap</literal>, <literal>HashSet</literal>, <literal>TreeMap</literal>, <literal>TreeSet</literal> or <literal>ArrayList</literal>, depending upon the interface type."
+msgstr ""
+
+#: index.docbook:45
+msgid "Collections instances have the usual behavior of value types. They are automatically persisted when referenced by a persistent object and automatically deleted when unreferenced. If a collection is passed from one persistent object to another, its elements might be moved from one table to another. Two entities may not share a reference to the same collection instance. Due to the underlying relational model, collection-valued properties do not support null value semantics; Hibernate does not distinguish between a null collection reference and an empty collection."
+msgstr ""
+
+#: index.docbook:56
+msgid "You shouldn't have to worry much about any of this. Use persistent collections the same way you use ordinary Java collections. Just make sure you understand the semantics of bidirectional associations (discussed later)."
+msgstr ""
+
+#: index.docbook:65
+msgid "Collection mappings"
+msgstr ""
+
+#: index.docbook:67
+msgid "The Hibernate mapping element used for mapping a collection depends upon the type of the interface. For example, a <literal><set></literal> element is used for mapping properties of type <literal>Set</literal>."
+msgstr ""
+
+#: index.docbook:73
+msgid ""
+ "<![CDATA[<class name=\"Product\">\n"
+ " <id name=\"serialNumber\" column=\"productSerialNumber\"/>\n"
+ " <set name=\"parts\">\n"
+ " <key column=\"productSerialNumber\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:75
+msgid "Apart from <literal><set></literal>, there is also <literal><list></literal>, <literal><map></literal>, <literal><bag></literal>, <literal><array></literal> and <literal><primitive-array></literal> mapping elements. The <literal><map></literal> element is representative:"
+msgstr ""
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<map\n"
+ " name=\"propertyName\"\n"
+ " table=\"table_name\"\n"
+ " schema=\"schema_name\"\n"
+ " lazy=\"true|extra|false\"\n"
+ " inverse=\"true|false\"\n"
+ " cascade=\"all|none|save-update|delete|all-delete-orphan|delete-orphan\"\n"
+ " sort=\"unsorted|natural|comparatorClass\"\n"
+ " order-by=\"column_name asc|desc\"\n"
+ " where=\"arbitrary sql where condition\"\n"
+ " fetch=\"join|select|subselect\"\n"
+ " batch-size=\"N\"\n"
+ " access=\"field|property|ClassName\"\n"
+ " optimistic-lock=\"true|false\"\n"
+ " mutable=\"true|false\"\n"
+ " node=\"element-name|.\"\n"
+ " embed-xml=\"true|false\"\n"
+ ">\n"
+ "\n"
+ " <key .... />\n"
+ " <map-key .... />\n"
+ " <element .... />\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:103
+msgid "<literal>name</literal> the collection property name"
+msgstr ""
+
+#: index.docbook:108
+msgid "<literal>table</literal> (optional - defaults to property name) the name of the collection table (not used for one-to-many associations)"
+msgstr ""
+
+#: index.docbook:114
+msgid "<literal>schema</literal> (optional) the name of a table schema to override the schema declared on the root element"
+msgstr ""
+
+#: index.docbook:120
+msgid "<literal>lazy</literal> (optional - defaults to <literal>true</literal>) may be used to disable lazy fetching and specify that the association is always eagerly fetched, or to enable \"extra-lazy\" fetching where most operations do not initialize the collection (suitable for very large collections)"
+msgstr ""
+
+#: index.docbook:129
+msgid "<literal>inverse</literal> (optional - defaults to <literal>false</literal>) mark this collection as the \"inverse\" end of a bidirectional association"
+msgstr ""
+
+#: index.docbook:135
+msgid "<literal>cascade</literal> (optional - defaults to <literal>none</literal>) enable operations to cascade to child entities"
+msgstr ""
+
+#: index.docbook:141
+msgid "<literal>sort</literal> (optional) specify a sorted collection with <literal>natural</literal> sort order, or a given comparator class"
+msgstr ""
+
+#: index.docbook:147
+msgid "<literal>order-by</literal> (optional, JDK1.4 only) specify a table column (or columns) that define the iteration order of the <literal>Map</literal>, <literal>Set</literal> or bag, together with an optional <literal>asc</literal> or <literal>desc</literal>"
+msgstr ""
+
+#: index.docbook:154
+msgid "<literal>where</literal> (optional) specify an arbitrary SQL <literal>WHERE</literal> condition to be used when retrieving or removing the collection (useful if the collection should contain only a subset of the available data)"
+msgstr ""
+
+#: index.docbook:161
+msgid "<literal>fetch</literal> (optional, defaults to <literal>select</literal>) Choose between outer-join fetching, fetching by sequential select, and fetching by sequential subselect."
+msgstr ""
+
+#: index.docbook:168
+msgid "<literal>batch-size</literal> (optional, defaults to <literal>1</literal>) specify a \"batch size\" for lazily fetching instances of this collection."
+msgstr ""
+
+#: index.docbook:174
+msgid "<literal>access</literal> (optional - defaults to <literal>property</literal>): The strategy Hibernate should use for accessing the collection property value."
+msgstr ""
+
+#: index.docbook:180
+msgid "<literal>optimistic-lock</literal> (optional - defaults to <literal>true</literal>): Species that changes to the state of the collection results in increment of the owning entity's version. (For one to many associations, it is often reasonable to disable this setting.)"
+msgstr ""
+
+#: index.docbook:188
+msgid "<literal>mutable</literal> (optional - defaults to <literal>true</literal>): A value of <literal>false</literal> specifies that the elements of the collection never change (a minor performance optimization in some cases)."
+msgstr ""
+
+#: index.docbook:198
+msgid "Collection foreign keys"
+msgstr ""
+
+#: index.docbook:200
+msgid "Collection instances are distinguished in the database by the foreign key of the entity that owns the collection. This foreign key is referred to as the <emphasis>collection key column</emphasis> (or columns) of the collection table. The collection key column is mapped by the <literal><key></literal> element."
+msgstr ""
+
+#: index.docbook:208
+msgid "There may be a nullability constraint on the foreign key column. For most collections, this is implied. For unidirectional one to many associations, the foreign key column is nullable by default, so you might need to specify <literal>not-null=\"true\"</literal>."
+msgstr ""
+
+#: index.docbook:215
+msgid "<![CDATA[<key column=\"productSerialNumber\" not-null=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:217
+msgid "The foreign key constraint may use <literal>ON DELETE CASCADE</literal>."
+msgstr ""
+
+#: index.docbook:221
+msgid "<![CDATA[<key column=\"productSerialNumber\" on-delete=\"cascade\"/>]]>"
+msgstr ""
+
+#: index.docbook:223
+msgid "See the previous chapter for a full definition of the <literal><key></literal> element."
+msgstr ""
+
+#: index.docbook:231
+msgid "Collection elements"
+msgstr ""
+
+#: index.docbook:233
+msgid "Collections may contain almost any other Hibernate type, including all basic types, custom types, components, and of course, references to other entities. This is an important distinction: an object in a collection might be handled with \"value\" semantics (its life cycle fully depends on the collection owner) or it might be a reference to another entity, with its own life cycle. In the latter case, only the \"link\" between the two objects is considered to be state held by the collection."
+msgstr ""
+
+#: index.docbook:242
+msgid "The contained type is referred to as the <emphasis>collection element type</emphasis>. Collection elements are mapped by <literal><element></literal> or <literal><composite-element></literal>, or in the case of entity references, with <literal><one-to-many></literal> or <literal><many-to-many></literal>. The first two map elements with value semantics, the next two are used to map entity associations."
+msgstr ""
+
+#: index.docbook:254
+msgid "Indexed collections"
+msgstr ""
+
+#: index.docbook:256
+msgid "All collection mappings, except those with set and bag semantics, need an <emphasis>index column</emphasis> in the collection table - a column that maps to an array index, or <literal>List</literal> index, or <literal>Map</literal> key. The index of a <literal>Map</literal> may be of any basic type, mapped with <literal><map-key></literal>, it may be an entity reference mapped with <literal><map-key-many-to-many></literal>, or it may be a composite type, mapped with <literal><composite-map-key></literal>. The index of an array or list is always of type <literal>integer</literal> and is mapped using the <literal><list-index></literal> element. The mapped column contains sequential integers (numbered from zero, by default)."
+msgstr ""
+
+#: index.docbook:267
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"index1\" coords=\"2 45\"/> <area id=\"index2\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<list-index \n"
+ " column=\"column_name\"\n"
+ " base=\"0|1|...\"/>]]></programlisting> <calloutlist> <callout arearefs=\"index1\"> <para> <literal>column_name</literal> (required): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"index1\"> <para> <literal>base</literal> (optional, defaults to <literal>0</literal>): The value of the index column that corresponds to the first element of the list or array. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"mapkey1\" coords=\"2 45\"/> <area id=\"mapkey2\" coords=\"3 45\"/> <area id=\"mapkey3\" coords=\"4 45\"/> </areaspec> <programlisting><![CDATA[<map-key \n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"type_name\"\n"
+ " node=\"@attribute-name\"\n"
+ " length=\"N\"/>]]></programlisting> <calloutlist> <callout arearefs=\"mapkey1\"> <para> <literal>column</literal> (optional): The name of the column holding the collection index values. </para> </callout> <callout arearefs=\"mapkey2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the key of the map. </para> </callout> <callout arearefs=\"mapkey3\"> <para> <literal>type</literal> (reguired): The type of the map keys. </para> </callout> </calloutlist> </programlistingco> <programlistingco> <areaspec> <area id=\"indexmanytomany1\" coords=\"2 45\"/> <area id=\"indexmanytomany2\" coords=\"3 45\"/> <area id=\"indexmanytomany3\" coords=\"3 45\"/> </areaspec> <programlisting><![CDATA[<map-key-many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"indexmanytomany1\"> <para> <literal>column</literal> (optional): The name of the foreign key column for the collection index values. </para> </callout> <callout arearefs=\"indexmanytomany2\"> <para> <literal>formula</literal> (optional): A SQL formula used to evaluate the foreign key of the map key. </para> </callout> <callout arearefs=\"indexmanytomany3\"> <para> <literal>class</literal> (required): The entity class used as the map key. </para> </callout> </calloutlist> </programlistingco>"
+msgstr ""
+
+#: index.docbook:348
+msgid "If your table doesn't have an index column, and you still wish to use <literal>List</literal> as the property type, you should map the property as a Hibernate <emphasis><bag></emphasis>. A bag does not retain its order when it is retrieved from the database, but it may be optionally sorted or ordered."
+msgstr ""
+
+#: index.docbook:357
+msgid "There are quite a range of mappings that can be generated for collections, covering many common relational models. We suggest you experiment with the schema generation tool to get a feeling for how various mapping declarations translate to database tables."
+msgstr ""
+
+#: index.docbook:364
+msgid "Collections of values and many-to-many associations"
+msgstr ""
+
+#: index.docbook:366
+msgid "Any collection of values or many-to-many association requires a dedicated <emphasis>collection table</emphasis> with a foreign key column or columns, <emphasis>collection element column</emphasis> or columns and possibly an index column or columns."
+msgstr ""
+
+#: index.docbook:373
+msgid "For a collection of values, we use the <literal><element></literal> tag."
+msgstr ""
+
+#: index.docbook:375
+msgid ""
+ "<programlistingco> <areaspec> <area id=\"element1b\" coords=\"2 50\"/> <area id=\"element2b\" coords=\"3 50\"/> <area id=\"element3b\" coords=\"4 50\"/> </areaspec> <programlisting><![CDATA[<element\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " type=\"typename\"\n"
+ " length=\"L\"\n"
+ " precision=\"P\"\n"
+ " scale=\"S\"\n"
+ " not-null=\"true|false\"\n"
+ " unique=\"true|false\"\n"
+ " node=\"element-name\"\n"
+ "/>]]></programlisting> <calloutlist> <callout arearefs=\"element1b\"> <para> <literal>column</literal> (optional): The name of the column holding the collection element values. </para> </callout> <callout arearefs=\"element2b\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element. </para> </callout> <callout arearefs=\"element3b\"> <para> <literal>type</literal> (required): The type of the collection element. </para> </callout> </calloutlist> </programlistingco> <para> A <emphasis>many-to-many association</emphasis> is specified using the <literal><many-to-many></literal> element. </para> <programlistingco> <areaspec> <area id=\"manytomany1\" coords=\"2 60\"/> <area id=\"manytomany2\" coords=\"3 60\"/> <area id=\"manytomany3\" coords=\"4 60\"/> <area id=\"manytomany4\" coords=\"5 60\"/> <area id=\"manytomany5\" coords=\"6 60\"/> <area id=\"manytomany6\" coords=\"7 60\"/> <area id=\"manytomany7\" coords=\"8 60\"/> <area id=\!
"manytomany8\" coords=\"9 60\"/> </areaspec> <programlisting><![CDATA[<many-to-many\n"
+ " column=\"column_name\"\n"
+ " formula=\"any SQL expression\"\n"
+ " class=\"ClassName\"\n"
+ " fetch=\"select|join\"\n"
+ " unique=\"true|false\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " property-ref=\"propertyNameFromAssociatedClass\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]></programlisting> <calloutlist> <callout arearefs=\"manytomany1\"> <para> <literal>column</literal> (optional): The name of the element foreign key column. </para> </callout> <callout arearefs=\"manytomany2\"> <para> <literal>formula</literal> (optional): An SQL formula used to evaluate the element foreign key value. </para> </callout> <callout arearefs=\"manytomany3\"> <para> <literal>class</literal> (required): The name of the associated class. </para> </callout> <callout arearefs=\"manytomany4\"> <para> <literal>fetch</literal> (optional - defaults to <literal>join</literal>): enables outer-join or sequential select fetching for this association. This is a special case; for full eager fetching (in a single <literal>SELECT</literal>) of an entity and its many-to-many relationships to other entities, you would enable <literal>join</literal> fetching not only of the collection itself, but also with this attribute on the <literal><many-to-many></literal!
> nested element. </para> </callout> <callout arearefs=\"manytomany5\"> <para> <literal>unique</literal> (optional): Enable the DDL generation of a unique constraint for the foreign-key column. This makes the association multiplicity effectively one to many. </para> </callout> <callout arearefs=\"manytomany6\"> <para> <literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how foreign keys that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association. </para> </callout> <callout arearefs=\"manytomany7\"> <para> <literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>. </para> </callout> <callout arearefs=\"manytomany8\"> <para> <literal>property-ref</literal>: (optional) The name of a property of the associated class that is joined to this foreign key. If not specified, the primary key of the associated class !
is used. </para> </callout> </calloutlist> </programlistingco>"
+msgstr ""
+
+#: index.docbook:480
+msgid "Some examples, first, a set of strings:"
+msgstr ""
+
+#: index.docbook:484
+msgid ""
+ "<![CDATA[<set name=\"names\" table=\"person_names\">\n"
+ " <key column=\"person_id\"/>\n"
+ " <element column=\"person_name\" type=\"string\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:486
+msgid "A bag containing integers (with an iteration order determined by the <literal>order-by</literal> attribute):"
+msgstr ""
+
+#: index.docbook:491
+msgid ""
+ "<![CDATA[<bag name=\"sizes\" \n"
+ " table=\"item_sizes\" \n"
+ " order-by=\"size asc\">\n"
+ " <key column=\"item_id\"/>\n"
+ " <element column=\"size\" type=\"integer\"/>\n"
+ "</bag>]]>"
+msgstr ""
+
+#: index.docbook:493
+msgid "An array of entities - in this case, a many to many association:"
+msgstr ""
+
+#: index.docbook:497
+msgid ""
+ "<![CDATA[<array name=\"addresses\" \n"
+ " table=\"PersonAddress\" \n"
+ " cascade=\"persist\">\n"
+ " <key column=\"personId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <many-to-many column=\"addressId\" class=\"Address\"/>\n"
+ "</array>]]>"
+msgstr ""
+
+#: index.docbook:499
+msgid "A map from string indices to dates:"
+msgstr ""
+
+#: index.docbook:503
+msgid ""
+ "<![CDATA[<map name=\"holidays\" \n"
+ " table=\"holidays\" \n"
+ " schema=\"dbo\" \n"
+ " order-by=\"hol_name asc\">\n"
+ " <key column=\"id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:505
+msgid "A list of components (discussed in the next chapter):"
+msgstr ""
+
+#: index.docbook:509
+msgid ""
+ "<![CDATA[<list name=\"carComponents\" \n"
+ " table=\"CarComponents\">\n"
+ " <key column=\"carId\"/>\n"
+ " <list-index column=\"sortOrder\"/>\n"
+ " <composite-element class=\"CarComponent\">\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"type\"/>\n"
+ " <property name=\"serialNumber\" column=\"serialNum\"/>\n"
+ " </composite-element>\n"
+ "</list>]]>"
+msgstr ""
+
+#: index.docbook:514
+msgid "One-to-many associations"
+msgstr ""
+
+#: index.docbook:516
+msgid "A <emphasis>one to many association</emphasis> links the tables of two classes via a foreign key, with no intervening collection table. This mapping loses certain semantics of normal Java collections:"
+msgstr ""
+
+#: index.docbook:524
+msgid "An instance of the contained entity class may not belong to more than one instance of the collection"
+msgstr ""
+
+#: index.docbook:530
+msgid "An instance of the contained entity class may not appear at more than one value of the collection index"
+msgstr ""
+
+#: index.docbook:537
+msgid "An association from <literal>Product</literal> to <literal>Part</literal> requires existence of a foreign key column and possibly an index column to the <literal>Part</literal> table. A <literal><one-to-many></literal> tag indicates that this is a one to many association."
+msgstr ""
+
+#: index.docbook:550
+msgid ""
+ "<![CDATA[<one-to-many \n"
+ " class=\"ClassName\"\n"
+ " not-found=\"ignore|exception\"\n"
+ " entity-name=\"EntityName\"\n"
+ " node=\"element-name\"\n"
+ " embed-xml=\"true|false\"\n"
+ " />]]>"
+msgstr ""
+
+#: index.docbook:553
+msgid "<literal>class</literal> (required): The name of the associated class."
+msgstr ""
+
+#: index.docbook:558
+msgid "<literal>not-found</literal> (optional - defaults to <literal>exception</literal>): Specifies how cached identifiers that reference missing rows will be handled: <literal>ignore</literal> will treat a missing row as a null association."
+msgstr ""
+
+#: index.docbook:565
+msgid "<literal>entity-name</literal> (optional): The entity name of the associated class, as an alternative to <literal>class</literal>."
+msgstr ""
+
+#: index.docbook:573
+msgid "Notice that the <literal><one-to-many></literal> element does not need to declare any columns. Nor is it necessary to specify the <literal>table</literal> name anywhere."
+msgstr ""
+
+#: index.docbook:579
+msgid "<emphasis>Very important note:</emphasis> If the foreign key column of a <literal><one-to-many></literal> association is declared <literal>NOT NULL</literal>, you must declare the <literal><key></literal> mapping <literal>not-null=\"true\"</literal> or <emphasis>use a bidirectional association</emphasis> with the collection mapping marked <literal>inverse=\"true\"</literal>. See the discussion of bidirectional associations later in this chapter."
+msgstr ""
+
+#: index.docbook:588
+msgid "This example shows a map of <literal>Part</literal> entities by name (where <literal>partName</literal> is a persistent property of <literal>Part</literal>). Notice the use of a formula-based index."
+msgstr ""
+
+#: index.docbook:594
+msgid ""
+ "<![CDATA[<map name=\"parts\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"productId\" not-null=\"true\"/>\n"
+ " <map-key formula=\"partName\"/>\n"
+ " <one-to-many class=\"Part\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:600
+msgid "Advanced collection mappings"
+msgstr ""
+
+#: index.docbook:603
+msgid "Sorted collections"
+msgstr ""
+
+#: index.docbook:605
+msgid "Hibernate supports collections implementing <literal>java.util.SortedMap</literal> and <literal>java.util.SortedSet</literal>. You must specify a comparator in the mapping file:"
+msgstr ""
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<set name=\"aliases\" \n"
+ " table=\"person_aliases\" \n"
+ " sort=\"natural\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" sort=\"my.custom.HolidayComparator\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date\" type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:612
+msgid "Allowed values of the <literal>sort</literal> attribute are <literal>unsorted</literal>, <literal>natural</literal> and the name of a class implementing <literal>java.util.Comparator</literal>."
+msgstr ""
+
+#: index.docbook:618
+msgid "Sorted collections actually behave like <literal>java.util.TreeSet</literal> or <literal>java.util.TreeMap</literal>."
+msgstr ""
+
+#: index.docbook:623
+msgid "If you want the database itself to order the collection elements use the <literal>order-by</literal> attribute of <literal>set</literal>, <literal>bag</literal> or <literal>map</literal> mappings. This solution is only available under JDK 1.4 or higher (it is implemented using <literal>LinkedHashSet</literal> or <literal>LinkedHashMap</literal>). This performs the ordering in the SQL query, not in memory."
+msgstr ""
+
+#: index.docbook:632
+msgid ""
+ "<![CDATA[<set name=\"aliases\" table=\"person_aliases\" order-by=\"lower(name) asc\">\n"
+ " <key column=\"person\"/>\n"
+ " <element column=\"name\" type=\"string\"/>\n"
+ "</set>\n"
+ "\n"
+ "<map name=\"holidays\" order-by=\"hol_date, hol_name\">\n"
+ " <key column=\"year_id\"/>\n"
+ " <map-key column=\"hol_name\" type=\"string\"/>\n"
+ " <element column=\"hol_date type=\"date\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:634
+msgid "Note that the value of the <literal>order-by</literal> attribute is an SQL ordering, not a HQL ordering!"
+msgstr ""
+
+#: index.docbook:639
+msgid "Associations may even be sorted by some arbitrary criteria at runtime using a collection <literal>filter()</literal>."
+msgstr ""
+
+#: index.docbook:644
+msgid "<![CDATA[sortedUsers = s.createFilter( group.getUsers(), \"order by this.name\" ).list();]]>"
+msgstr ""
+
+#: index.docbook:649
+msgid "Bidirectional associations"
+msgstr ""
+
+#: index.docbook:651
+msgid "A <emphasis>bidirectional association</emphasis> allows navigation from both \"ends\" of the association. Two kinds of bidirectional association are supported:"
+msgstr ""
+
+#: index.docbook:658
+msgid "one-to-many"
+msgstr ""
+
+#: index.docbook:660
+msgid "set or bag valued at one end, single-valued at the other"
+msgstr ""
+
+#: index.docbook:666
+msgid "many-to-many"
+msgstr ""
+
+#: index.docbook:668
+msgid "set or bag valued at both ends"
+msgstr ""
+
+#: index.docbook:677
+msgid "You may specify a bidirectional many-to-many association simply by mapping two many-to-many associations to the same database table and declaring one end as <emphasis>inverse</emphasis> (which one is your choice, but it can not be an indexed collection)."
+msgstr ""
+
+#: index.docbook:684
+msgid "Here's an example of a bidirectional many-to-many association; each category can have many items and each item can be in many categories:"
+msgstr ""
+
+#: index.docbook:689
+msgid ""
+ "<![CDATA[<class name=\"Category\">\n"
+ " <id name=\"id\" column=\"CATEGORY_ID\"/>\n"
+ " ...\n"
+ " <bag name=\"items\" table=\"CATEGORY_ITEM\">\n"
+ " <key column=\"CATEGORY_ID\"/>\n"
+ " <many-to-many class=\"Item\" column=\"ITEM_ID\"/>\n"
+ " </bag>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Item\">\n"
+ " <id name=\"id\" column=\"ITEM_ID\"/>\n"
+ " ...\n"
+ "\n"
+ " <!-- inverse end -->\n"
+ " <bag name=\"categories\" table=\"CATEGORY_ITEM\" inverse=\"true\">\n"
+ " <key column=\"ITEM_ID\"/>\n"
+ " <many-to-many class=\"Category\" column=\"CATEGORY_ID\"/>\n"
+ " </bag>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:691
+msgid "Changes made only to the inverse end of the association are <emphasis>not</emphasis> persisted. This means that Hibernate has two representations in memory for every bidirectional association, one link from A to B and another link from B to A. This is easier to understand if you think about the Java object model and how we create a many-to-many relationship in Java:"
+msgstr ""
+
+#: index.docbook:699
+msgid ""
+ "<![CDATA[\n"
+ "category.getItems().add(item); // The category now \"knows\" about the relationship\n"
+ "item.getCategories().add(category); // The item now \"knows\" about the relationship\n"
+ "\n"
+ "session.persist(item); // The relationship won't be saved!\n"
+ "session.persist(category); // The relationship will be saved]]>"
+msgstr ""
+
+#: index.docbook:701
+msgid "The non-inverse side is used to save the in-memory representation to the database."
+msgstr ""
+
+#: index.docbook:705
+msgid "You may define a bidirectional one-to-many association by mapping a one-to-many association to the same table column(s) as a many-to-one association and declaring the many-valued end <literal>inverse=\"true\"</literal>."
+msgstr ""
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:713
+msgid "Mapping one end of an association with <literal>inverse=\"true\"</literal> doesn't affect the operation of cascades, these are orthogonal concepts!"
+msgstr ""
+
+#: index.docbook:721
+msgid "Bidirectional associations with indexed collections"
+msgstr ""
+
+#: index.docbook:722
+msgid "A bidirectional association where one end is represented as a <literal><list></literal> or <literal><map></literal> requires special consideration. If there is a property of the child class which maps to the index column, no problem, we can continue using <literal>inverse=\"true\"</literal> on the collection mapping:"
+msgstr ""
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"/>\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:731
+msgid "But, if there is no such property on the child class, we can't think of the association as truly bidirectional (there is information available at one end of the association that is not available at the other end). In this case, we can't map the collection <literal>inverse=\"true\"</literal>. Instead, we could use the following mapping:"
+msgstr ""
+
+#: index.docbook:738
+msgid ""
+ "<![CDATA[<class name=\"Parent\">\n"
+ " <id name=\"id\" column=\"parent_id\"/>\n"
+ " ....\n"
+ " <map name=\"children\">\n"
+ " <key column=\"parent_id\"\n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"name\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </map>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Child\">\n"
+ " <id name=\"id\" column=\"child_id\"/>\n"
+ " ....\n"
+ " <many-to-one name=\"parent\" \n"
+ " class=\"Parent\" \n"
+ " column=\"parent_id\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\"\n"
+ " not-null=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:740
+msgid "Note that in this mapping, the collection-valued end of the association is responsible for updates to the foreign key. TODO: Does this really result in some unnecessary update statements?"
+msgstr ""
+
+#: index.docbook:748
+msgid "Ternary associations"
+msgstr ""
+
+#: index.docbook:750
+msgid "There are three possible approaches to mapping a ternary association. One is to use a <literal>Map</literal> with an association as its index:"
+msgstr ""
+
+#: index.docbook:755
+msgid ""
+ "<![CDATA[<map name=\"contracts\">\n"
+ " <key column=\"employer_id\" not-null=\"true\"/>\n"
+ " <map-key-many-to-many column=\"employee_id\" class=\"Employee\"/>\n"
+ " <one-to-many class=\"Contract\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[<map name=\"connections\">\n"
+ " <key column=\"incoming_node_id\"/>\n"
+ " <map-key-many-to-many column=\"outgoing_node_id\" class=\"Node\"/>\n"
+ " <many-to-many column=\"connection_id\" class=\"Connection\"/>\n"
+ "</map>]]>"
+msgstr ""
+
+#: index.docbook:759
+msgid "A second approach is to simply remodel the association as an entity class. This is the approach we use most commonly."
+msgstr ""
+
+#: index.docbook:764
+msgid "A final alternative is to use composite elements, which we will discuss later."
+msgstr ""
+
+#: index.docbook:771
+msgid "Using an <idbag>"
+msgstr ""
+
+#: index.docbook:773
+msgid "If you've fully embraced our view that composite keys are a bad thing and that entities should have synthetic identifiers (surrogate keys), then you might find it a bit odd that the many to many associations and collections of values that we've shown so far all map to tables with composite keys! Now, this point is quite arguable; a pure association table doesn't seem to benefit much from a surrogate key (though a collection of composite values <emphasis>might</emphasis>). Nevertheless, Hibernate provides a feature that allows you to map many to many associations and collections of values to a table with a surrogate key."
+msgstr ""
+
+#: index.docbook:784
+msgid "The <literal><idbag></literal> element lets you map a <literal>List</literal> (or <literal>Collection</literal>) with bag semantics."
+msgstr ""
+
+#: index.docbook:789
+msgid ""
+ "<![CDATA[<idbag name=\"lovers\" table=\"LOVERS\">\n"
+ " <collection-id column=\"ID\" type=\"long\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </collection-id>\n"
+ " <key column=\"PERSON1\"/>\n"
+ " <many-to-many column=\"PERSON2\" class=\"Person\" fetch=\"join\"/>\n"
+ "</idbag>]]>"
+msgstr ""
+
+#: index.docbook:791
+msgid "As you can see, an <literal><idbag></literal> has a synthetic id generator, just like an entity class! A different surrogate key is assigned to each collection row. Hibernate does not provide any mechanism to discover the surrogate key value of a particular row, however."
+msgstr ""
+
+#: index.docbook:798
+msgid "Note that the update performance of an <literal><idbag></literal> is <emphasis>much</emphasis> better than a regular <literal><bag></literal>! Hibernate can locate individual rows efficiently and update or delete them individually, just like a list, map or set."
+msgstr ""
+
+#: index.docbook:805
+msgid "In the current implementation, the <literal>native</literal> identifier generation strategy is not supported for <literal><idbag></literal> collection identifiers."
+msgstr ""
+
+#: index.docbook:829
+msgid "Collection examples"
+msgstr ""
+
+#: index.docbook:831
+msgid "The previous sections are pretty confusing. So lets look at an example. This class:"
+msgstr ""
+
+#: index.docbook:836
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "\n"
+ "public class Parent {\n"
+ " private long id;\n"
+ " private Set children;\n"
+ "\n"
+ " public long getId() { return id; }\n"
+ " private void setId(long id) { this.id=id; }\n"
+ "\n"
+ " private Set getChildren() { return children; }\n"
+ " private void setChildren(Set children) { this.children=children; }\n"
+ "\n"
+ " ....\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:838
+msgid "has a collection of <literal>Child</literal> instances. If each child has at most one parent, the most natural mapping is a one-to-many association:"
+msgstr ""
+
+#: index.docbook:844
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:846
+msgid "This maps to the following table definitions:"
+msgstr ""
+
+#: index.docbook:850
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255), parent_id bigint )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr ""
+
+#: index.docbook:852
+msgid "If the parent is <emphasis>required</emphasis>, use a bidirectional one-to-many association:"
+msgstr ""
+
+#: index.docbook:857
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <many-to-one name=\"parent\" class=\"Parent\" column=\"parent_id\" not-null=\"true\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:859
+msgid "Notice the <literal>NOT NULL</literal> constraint:"
+msgstr ""
+
+#: index.docbook:863
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null\n"
+ " primary key,\n"
+ " name varchar(255),\n"
+ " parent_id bigint not null )\n"
+ "alter table child add constraint childfk0 (parent_id) references parent]]>"
+msgstr ""
+
+#: index.docbook:865
+msgid "Alternatively, if you absolutely insist that this association should be unidirectional, you can declare the <literal>NOT NULL</literal> constraint on the <literal><key></literal> mapping:"
+msgstr ""
+
+#: index.docbook:871
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:873
+msgid "On the other hand, if a child might have multiple parents, a many-to-many association is appropriate:"
+msgstr ""
+
+#: index.docbook:878
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Parent\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <set name=\"children\" table=\"childset\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <many-to-many class=\"Child\" column=\"child_id\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Child\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:880
+msgid "Table definitions:"
+msgstr ""
+
+#: index.docbook:884
+msgid ""
+ "<![CDATA[create table parent ( id bigint not null primary key )\n"
+ "create table child ( id bigint not null primary key, name varchar(255) )\n"
+ "create table childset ( parent_id bigint not null,\n"
+ " child_id bigint not null,\n"
+ " primary key ( parent_id, child_id ) )\n"
+ "alter table childset add constraint childsetfk0 (parent_id) references parent\n"
+ "alter table childset add constraint childsetfk1 (child_id) references child]]>"
+msgstr ""
+
+#: index.docbook:886
+msgid "For more examples and a complete walk-through a parent/child relationship mapping, see <xref linkend=\"example-parentchild\"/>."
+msgstr ""
+
+#: index.docbook:891
+msgid "Even more exotic association mappings are possible, we will catalog all possibilities in the next chapter."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/component_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/component_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/component_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,372 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Component Mapping"
+msgstr ""
+
+#: index.docbook:7
+msgid "The notion of a <emphasis>component</emphasis> is re-used in several different contexts, for different purposes, throughout Hibernate."
+msgstr ""
+
+#: index.docbook:13
+msgid "Dependent objects"
+msgstr ""
+
+#: index.docbook:15
+msgid "A component is a contained object that is persisted as a value type, not an entity reference. The term \"component\" refers to the object-oriented notion of composition (not to architecture-level components). For example, you might model a person like this:"
+msgstr ""
+
+#: index.docbook:21
+msgid ""
+ "<![CDATA[public class Person {\n"
+ " private java.util.Date birthday;\n"
+ " private Name name;\n"
+ " private String key;\n"
+ " public String getKey() {\n"
+ " return key;\n"
+ " }\n"
+ " private void setKey(String key) {\n"
+ " this.key=key;\n"
+ " }\n"
+ " public java.util.Date getBirthday() {\n"
+ " return birthday;\n"
+ " }\n"
+ " public void setBirthday(java.util.Date birthday) {\n"
+ " this.birthday = birthday;\n"
+ " }\n"
+ " public Name getName() {\n"
+ " return name;\n"
+ " }\n"
+ " public void setName(Name name) {\n"
+ " this.name = name;\n"
+ " }\n"
+ " ......\n"
+ " ......\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:23
+msgid ""
+ "<![CDATA[public class Name {\n"
+ " char initial;\n"
+ " String first;\n"
+ " String last;\n"
+ " public String getFirst() {\n"
+ " return first;\n"
+ " }\n"
+ " void setFirst(String first) {\n"
+ " this.first = first;\n"
+ " }\n"
+ " public String getLast() {\n"
+ " return last;\n"
+ " }\n"
+ " void setLast(String last) {\n"
+ " this.last = last;\n"
+ " }\n"
+ " public char getInitial() {\n"
+ " return initial;\n"
+ " }\n"
+ " void setInitial(char initial) {\n"
+ " this.initial = initial;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:25
+msgid "Now <literal>Name</literal> may be persisted as a component of <literal>Person</literal>. Notice that <literal>Name</literal> defines getter and setter methods for its persistent properties, but doesn't need to declare any interfaces or identifier properties."
+msgstr ""
+
+#: index.docbook:32
+msgid "Our Hibernate mapping would look like:"
+msgstr ""
+
+#: index.docbook:36
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\"> <!-- class attribute optional -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:38
+msgid "The person table would have the columns <literal>pid</literal>, <literal>birthday</literal>, <literal>initial</literal>, <literal>first</literal> and <literal>last</literal>."
+msgstr ""
+
+#: index.docbook:46
+msgid "Like all value types, components do not support shared references. In other words, two persons could have the same name, but the two person objects would contain two independent name ojects, only \"the same\" by value. The null value semantics of a component are <emphasis>ad hoc</emphasis>. When reloading the containing object, Hibernate will assume that if all component columns are null, then the entire component is null. This should be okay for most purposes."
+msgstr ""
+
+#: index.docbook:55
+msgid "The properties of a component may be of any Hibernate type (collections, many-to-one associations, other components, etc). Nested components should <emphasis>not</emphasis> be considered an exotic usage. Hibernate is intended to support a very fine-grained object model."
+msgstr ""
+
+#: index.docbook:62
+msgid "The <literal><component></literal> element allows a <literal><parent></literal> subelement that maps a property of the component class as a reference back to the containing entity."
+msgstr ""
+
+#: index.docbook:68
+msgid ""
+ "<![CDATA[<class name=\"eg.Person\" table=\"person\">\n"
+ " <id name=\"Key\" column=\"pid\" type=\"string\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " <property name=\"birthday\" type=\"date\"/>\n"
+ " <component name=\"Name\" class=\"eg.Name\" unique=\"true\">\n"
+ " <parent name=\"namedPerson\"/> <!-- reference back to the Person -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </component>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:73
+msgid "Collections of dependent objects"
+msgstr ""
+
+#: index.docbook:75
+msgid "Collections of components are supported (eg. an array of type <literal>Name</literal>). Declare your component collection by replacing the <literal><element></literal> tag with a <literal><composite-element></literal> tag."
+msgstr ""
+
+#: index.docbook:82
+msgid ""
+ "<![CDATA[<set name=\"someNames\" table=\"some_names\" lazy=\"true\">\n"
+ " <key column=\"id\"/>\n"
+ " <composite-element class=\"eg.Name\"> <!-- class attribute required -->\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"first\"/>\n"
+ " <property name=\"last\"/>\n"
+ " </composite-element>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:84
+msgid "Note: if you define a <literal>Set</literal> of composite elements, it is very important to implement <literal>equals()</literal> and <literal>hashCode()</literal> correctly."
+msgstr ""
+
+#: index.docbook:90
+msgid "Composite elements may contain components but not collections. If your composite element itself contains components, use the <literal><nested-composite-element></literal> tag. This is a pretty exotic case - a collection of components which themselves have components. By this stage you should be asking yourself if a one-to-many association is more appropriate. Try remodelling the composite element as an entity - but note that even though the Java model is the same, the relational model and persistence semantics are still slightly different."
+msgstr ""
+
+#: index.docbook:102
+msgid "Please note that a composite element mapping doesn't support null-able properties if you're using a <literal><set></literal>. Hibernate has to use each columns value to identify a record when deleting objects (there is no separate primary key column in the composite element table), which is not possible with null values. You have to either use only not-null properties in a composite-element or choose a <literal><list></literal>, <literal><map></literal>, <literal><bag></literal> or <literal><idbag></literal>."
+msgstr ""
+
+#: index.docbook:113
+msgid "A special case of a composite element is a composite element with a nested <literal><many-to-one></literal> element. A mapping like this allows you to map extra columns of a many-to-many association table to the composite element class. The following is a many-to-many association from <literal>Order</literal> to <literal>Item</literal> where <literal>purchaseDate</literal>, <literal>price</literal> and <literal>quantity</literal> are properties of the association:"
+msgstr ""
+
+#: index.docbook:123
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.Purchase\">\n"
+ " <property name=\"purchaseDate\"/>\n"
+ " <property name=\"price\"/>\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/> <!-- class attribute is optional -->\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:125
+msgid "Of course, there can't be a reference to the purchae on the other side, for bidirectional association navigation. Remember that components are value types and don't allow shared references. A single <literal>Purchase</literal> can be in the set of an <literal>Order</literal>, but it can't be referenced by the <literal>Item</literal> at the same time."
+msgstr ""
+
+#: index.docbook:133
+msgid "Even ternary (or quaternary, etc) associations are possible:"
+msgstr ""
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<class name=\"eg.Order\" .... >\n"
+ " ....\n"
+ " <set name=\"purchasedItems\" table=\"purchase_items\" lazy=\"true\">\n"
+ " <key column=\"order_id\">\n"
+ " <composite-element class=\"eg.OrderLine\">\n"
+ " <many-to-one name=\"purchaseDetails class=\"eg.Purchase\"/>\n"
+ " <many-to-one name=\"item\" class=\"eg.Item\"/>\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:137
+msgid "Composite elements may appear in queries using the same syntax as associations to other entities."
+msgstr ""
+
+#: index.docbook:145
+msgid "Components as Map indices"
+msgstr ""
+
+#: index.docbook:147
+msgid "The <literal><composite-map-key></literal> element lets you map a component class as the key of a <literal>Map</literal>. Make sure you override <literal>hashCode()</literal> and <literal>equals()</literal> correctly on the component class."
+msgstr ""
+
+#: index.docbook:156
+msgid "Components as composite identifiers"
+msgstr ""
+
+#: index.docbook:158
+msgid "You may use a component as an identifier of an entity class. Your component class must satisfy certain requirements:"
+msgstr ""
+
+#: index.docbook:165
+msgid "It must implement <literal>java.io.Serializable</literal>."
+msgstr ""
+
+#: index.docbook:170
+msgid "It must re-implement <literal>equals()</literal> and <literal>hashCode()</literal>, consistently with the database's notion of composite key equality."
+msgstr ""
+
+#: index.docbook:179
+msgid "Note: in Hibernate3, the second requirement is not an absolutely hard requirement of Hibernate. But do it anyway."
+msgstr ""
+
+#: index.docbook:183
+msgid "You can't use an <literal>IdentifierGenerator</literal> to generate composite keys. Instead the application must assign its own identifiers."
+msgstr ""
+
+#: index.docbook:188
+msgid "Use the <literal><composite-id></literal> tag (with nested <literal><key-property></literal> elements) in place of the usual <literal><id></literal> declaration. For example, the <literal>OrderLine</literal> class has a primary key that depends upon the (composite) primary key of <literal>Order</literal>."
+msgstr ""
+
+#: index.docbook:196
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " \n"
+ " <composite-id name=\"id\" class=\"OrderLineId\">\n"
+ " <key-property name=\"lineId\"/>\n"
+ " <key-property name=\"orderId\"/>\n"
+ " <key-property name=\"customerId\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"name\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\" class=\"Order\"\n"
+ " insert=\"false\" update=\"false\">\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-one>\n"
+ " ....\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:198
+msgid "Now, any foreign keys referencing the <literal>OrderLine</literal> table are also composite. You must declare this in your mappings for other classes. An association to <literal>OrderLine</literal> would be mapped like this:"
+msgstr ""
+
+#: index.docbook:204
+msgid ""
+ "<![CDATA[<many-to-one name=\"orderLine\" class=\"OrderLine\">\n"
+ "<!-- the \"class\" attribute is optional, as usual -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ "</many-to-one>]]>"
+msgstr ""
+
+#: index.docbook:206
+msgid "(Note that the <literal><column></literal> tag is an alternative to the <literal>column</literal> attribute everywhere.)"
+msgstr ""
+
+#: index.docbook:211
+msgid "A <literal>many-to-many</literal> association to <literal>OrderLine</literal> also uses the composite foreign key:"
+msgstr ""
+
+#: index.docbook:216
+msgid ""
+ "<![CDATA[<set name=\"undeliveredOrderLines\">\n"
+ " <key column name=\"warehouseId\"/>\n"
+ " <many-to-many class=\"OrderLine\">\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </many-to-many>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:218
+msgid "The collection of <literal>OrderLine</literal>s in <literal>Order</literal> would use:"
+msgstr ""
+
+#: index.docbook:223
+msgid ""
+ "<![CDATA[<set name=\"orderLines\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"OrderLine\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:225
+msgid "(The <literal><one-to-many></literal> element, as usual, declares no columns.)"
+msgstr ""
+
+#: index.docbook:229
+msgid "If <literal>OrderLine</literal> itself owns a collection, it also has a composite foreign key."
+msgstr ""
+
+#: index.docbook:234
+msgid ""
+ "<![CDATA[<class name=\"OrderLine\">\n"
+ " ....\n"
+ " ....\n"
+ " <list name=\"deliveryAttempts\">\n"
+ " <key> <!-- a collection inherits the composite key type -->\n"
+ " <column name=\"lineId\"/>\n"
+ " <column name=\"orderId\"/>\n"
+ " <column name=\"customerId\"/>\n"
+ " </key>\n"
+ " <list-index column=\"attemptId\" base=\"1\"/>\n"
+ " <composite-element class=\"DeliveryAttempt\">\n"
+ " ...\n"
+ " </composite-element>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:239
+msgid "Dynamic components"
+msgstr ""
+
+#: index.docbook:241
+msgid "You may even map a property of type <literal>Map</literal>:"
+msgstr ""
+
+#: index.docbook:245
+msgid ""
+ "<![CDATA[<dynamic-component name=\"userAttributes\">\n"
+ " <property name=\"foo\" column=\"FOO\" type=\"string\"/>\n"
+ " <property name=\"bar\" column=\"BAR\" type=\"integer\"/>\n"
+ " <many-to-one name=\"baz\" class=\"Baz\" column=\"BAZ_ID\"/>\n"
+ "</dynamic-component>]]>"
+msgstr ""
+
+#: index.docbook:247
+msgid "The semantics of a <literal><dynamic-component></literal> mapping are identical to <literal><component></literal>. The advantage of this kind of mapping is the ability to determine the actual properties of the bean at deployment time, just by editing the mapping document. Runtime manipulation of the mapping document is also possible, using a DOM parser. Even better, you can access (and change) Hibernate's configuration-time metamodel via the <literal>Configuration</literal> object."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/configuration.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/configuration.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/configuration.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1489 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Configuration"
+msgstr ""
+
+#: index.docbook:7
+msgid "Because Hibernate is designed to operate in many different environments, there are a large number of configuration parameters. Fortunately, most have sensible default values and Hibernate is distributed with an example <literal>hibernate.properties</literal> file in <literal>etc/</literal> that shows the various options. Just put the example file in your classpath and customize it."
+msgstr ""
+
+#: index.docbook:16
+msgid "Programmatic configuration"
+msgstr ""
+
+#: index.docbook:18
+msgid "An instance of <literal>org.hibernate.cfg.Configuration</literal> represents an entire set of mappings of an application's Java types to an SQL database. The <literal>Configuration</literal> is used to build an (immutable) <literal>SessionFactory</literal>. The mappings are compiled from various XML mapping files."
+msgstr ""
+
+#: index.docbook:26
+msgid "You may obtain a <literal>Configuration</literal> instance by instantiating it directly and specifying XML mapping documents. If the mapping files are in the classpath, use <literal>addResource()</literal>:"
+msgstr ""
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addResource(\"Item.hbm.xml\")\n"
+ " .addResource(\"Bid.hbm.xml\");]]>"
+msgstr ""
+
+#: index.docbook:34
+msgid "An alternative (sometimes better) way is to specify the mapped class, and let Hibernate find the mapping document for you:"
+msgstr ""
+
+#: index.docbook:39
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class);]]>"
+msgstr ""
+
+#: index.docbook:41
+msgid "Then Hibernate will look for mapping files named <literal>/org/hibernate/auction/Item.hbm.xml</literal> and <literal>/org/hibernate/auction/Bid.hbm.xml</literal> in the classpath. This approach eliminates any hardcoded filenames."
+msgstr ""
+
+#: index.docbook:48
+msgid "A <literal>Configuration</literal> also allows you to specify configuration properties:"
+msgstr ""
+
+#: index.docbook:53
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration()\n"
+ " .addClass(org.hibernate.auction.Item.class)\n"
+ " .addClass(org.hibernate.auction.Bid.class)\n"
+ " .setProperty(\"hibernate.dialect\", \"org.hibernate.dialect.MySQLInnoDBDialect\")\n"
+ " .setProperty(\"hibernate.connection.datasource\", \"java:comp/env/jdbc/test\")\n"
+ " .setProperty(\"hibernate.order_updates\", \"true\");]]>"
+msgstr ""
+
+#: index.docbook:55
+msgid "This is not the only way to pass configuration properties to Hibernate. The various options include:"
+msgstr ""
+
+#: index.docbook:62
+msgid "Pass an instance of <literal>java.util.Properties</literal> to <literal>Configuration.setProperties()</literal>."
+msgstr ""
+
+#: index.docbook:68
+msgid "Place <literal>hibernate.properties</literal> in a root directory of the classpath."
+msgstr ""
+
+#: index.docbook:74
+msgid "Set <literal>System</literal> properties using <literal>java -Dproperty=value</literal>."
+msgstr ""
+
+#: index.docbook:80
+msgid "Include <literal><property></literal> elements in <literal>hibernate.cfg.xml</literal> (discussed later)."
+msgstr ""
+
+#: index.docbook:87
+msgid "<literal>hibernate.properties</literal> is the easiest approach if you want to get started quickly."
+msgstr ""
+
+#: index.docbook:92
+msgid "The <literal>Configuration</literal> is intended as a startup-time object, to be discarded once a <literal>SessionFactory</literal> is created."
+msgstr ""
+
+#: index.docbook:100
+msgid "Obtaining a SessionFactory"
+msgstr ""
+
+#: index.docbook:102
+msgid "When all mappings have been parsed by the <literal>Configuration</literal>, the application must obtain a factory for <literal>Session</literal> instances. This factory is intended to be shared by all application threads:"
+msgstr ""
+
+#: index.docbook:108
+msgid "<![CDATA[SessionFactory sessions = cfg.buildSessionFactory();]]>"
+msgstr ""
+
+#: index.docbook:110
+msgid "Hibernate does allow your application to instantiate more than one <literal>SessionFactory</literal>. This is useful if you are using more than one database."
+msgstr ""
+
+#: index.docbook:119
+msgid "JDBC connections"
+msgstr ""
+
+#: index.docbook:121
+msgid "Usually, you want to have the <literal>SessionFactory</literal> create and pool JDBC connections for you. If you take this approach, opening a <literal>Session</literal> is as simple as:"
+msgstr ""
+
+#: index.docbook:127
+msgid "<![CDATA[Session session = sessions.openSession(); // open a new Session]]>"
+msgstr ""
+
+#: index.docbook:129
+msgid "As soon as you do something that requires access to the database, a JDBC connection will be obtained from the pool."
+msgstr ""
+
+#: index.docbook:134
+msgid "For this to work, we need to pass some JDBC connection properties to Hibernate. All Hibernate property names and semantics are defined on the class <literal>org.hibernate.cfg.Environment</literal>. We will now describe the most important settings for JDBC connection configuration."
+msgstr ""
+
+#: index.docbook:141
+msgid "Hibernate will obtain (and pool) connections using <literal>java.sql.DriverManager</literal> if you set the following properties:"
+msgstr ""
+
+#: index.docbook:147
+msgid "Hibernate JDBC Properties"
+msgstr ""
+
+#: index.docbook:153, index.docbook:241, index.docbook:338, index.docbook:529, index.docbook:725, index.docbook:832, index.docbook:920
+msgid "Property name"
+msgstr ""
+
+#: index.docbook:154, index.docbook:242, index.docbook:339, index.docbook:530, index.docbook:726, index.docbook:833, index.docbook:921
+msgid "Purpose"
+msgstr ""
+
+#: index.docbook:160
+msgid "hibernate.connection.driver_class"
+msgstr ""
+
+#: index.docbook:163
+msgid "JDBC driver class"
+msgstr ""
+
+#: index.docbook:168
+msgid "hibernate.connection.url"
+msgstr ""
+
+#: index.docbook:171
+msgid "JDBC URL"
+msgstr ""
+
+#: index.docbook:176, index.docbook:272
+msgid "hibernate.connection.username"
+msgstr ""
+
+#: index.docbook:179
+msgid "database user"
+msgstr ""
+
+#: index.docbook:184, index.docbook:280
+msgid "hibernate.connection.password"
+msgstr ""
+
+#: index.docbook:187
+msgid "database user password"
+msgstr ""
+
+#: index.docbook:192
+msgid "hibernate.connection.pool_size"
+msgstr ""
+
+#: index.docbook:195
+msgid "maximum number of pooled connections"
+msgstr ""
+
+#: index.docbook:202
+msgid "Hibernate's own connection pooling algorithm is however quite rudimentary. It is intended to help you get started and is <emphasis>not intended for use in a production system</emphasis> or even for performance testing. You should use a third party pool for best performance and stability. Just replace the <literal>hibernate.connection.pool_size</literal> property with connection pool specific settings. This will turn off Hibernate's internal pool. For example, you might like to use C3P0."
+msgstr ""
+
+#: index.docbook:212
+msgid "C3P0 is an open source JDBC connection pool distributed along with Hibernate in the <literal>lib</literal> directory. Hibernate will use its <literal>C3P0ConnectionProvider</literal> for connection pooling if you set <literal>hibernate.c3p0.*</literal> properties. If you'd like to use Proxool refer to the packaged <literal>hibernate.properties</literal> and the Hibernate web site for more information."
+msgstr ""
+
+#: index.docbook:221
+msgid "Here is an example <literal>hibernate.properties</literal> file for C3P0:"
+msgstr ""
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[hibernate.connection.driver_class = org.postgresql.Driver\n"
+ "hibernate.connection.url = jdbc:postgresql://localhost/mydatabase\n"
+ "hibernate.connection.username = myuser\n"
+ "hibernate.connection.password = secret\n"
+ "hibernate.c3p0.min_size=5\n"
+ "hibernate.c3p0.max_size=20\n"
+ "hibernate.c3p0.timeout=1800\n"
+ "hibernate.c3p0.max_statements=50\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+
+#: index.docbook:227
+msgid "For use inside an application server, you should almost always configure Hibernate to obtain connections from an application server <literal>Datasource</literal> registered in JNDI. You'll need to set at least one of the following properties:"
+msgstr ""
+
+#: index.docbook:235
+msgid "Hibernate Datasource Properties"
+msgstr ""
+
+#: index.docbook:248
+msgid "hibernate.connection.datasource"
+msgstr ""
+
+#: index.docbook:251
+msgid "datasource JNDI name"
+msgstr ""
+
+#: index.docbook:256
+msgid "hibernate.jndi.url"
+msgstr ""
+
+#: index.docbook:258
+msgid "<emphasis>URL of the JNDI provider</emphasis> (optional)"
+msgstr ""
+
+#: index.docbook:264
+msgid "hibernate.jndi.class"
+msgstr ""
+
+#: index.docbook:266
+msgid "<emphasis>class of the JNDI <literal>InitialContextFactory</literal></emphasis> (optional)"
+msgstr ""
+
+#: index.docbook:274
+msgid "<emphasis>database user</emphasis> (optional)"
+msgstr ""
+
+#: index.docbook:282
+msgid "<emphasis>database user password</emphasis> (optional)"
+msgstr ""
+
+#: index.docbook:290
+msgid "Here's an example <literal>hibernate.properties</literal> file for an application server provided JNDI datasource:"
+msgstr ""
+
+#: index.docbook:295
+msgid ""
+ "<![CDATA[hibernate.connection.datasource = java:/comp/env/jdbc/test\n"
+ "hibernate.transaction.factory_class = \\\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ "hibernate.transaction.manager_lookup_class = \\\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup\n"
+ "hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect]]>"
+msgstr ""
+
+#: index.docbook:297
+msgid "JDBC connections obtained from a JNDI datasource will automatically participate in the container-managed transactions of the application server."
+msgstr ""
+
+#: index.docbook:302
+msgid "Arbitrary connection properties may be given by prepending \"<literal>hibernate.connection</literal>\" to the property name. For example, you may specify a <literal>charSet</literal> using <literal>hibernate.connection.charSet</literal>."
+msgstr ""
+
+#: index.docbook:308
+msgid "You may define your own plugin strategy for obtaining JDBC connections by implementing the interface <literal>org.hibernate.connection.ConnectionProvider</literal>. You may select a custom implementation by setting <literal>hibernate.connection.provider_class</literal>."
+msgstr ""
+
+#: index.docbook:317
+msgid "Optional configuration properties"
+msgstr ""
+
+#: index.docbook:319
+msgid "There are a number of other properties that control the behaviour of Hibernate at runtime. All are optional and have reasonable default values."
+msgstr ""
+
+#: index.docbook:324
+msgid "<emphasis>Warning: some of these properties are \"system-level\" only.</emphasis> System-level properties can be set only via <literal>java -Dproperty=value</literal> or <literal>hibernate.properties</literal>. They may <emphasis>not</emphasis> be set by the other techniques described above."
+msgstr ""
+
+#: index.docbook:332
+msgid "Hibernate Configuration Properties"
+msgstr ""
+
+#: index.docbook:345
+msgid "hibernate.dialect"
+msgstr ""
+
+#: index.docbook:347
+msgid "The classname of a Hibernate <literal>Dialect</literal> which allows Hibernate to generate SQL optimized for a particular relational database."
+msgstr ""
+
+#: index.docbook:351
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>full.classname.of.Dialect</literal>"
+msgstr ""
+
+#: index.docbook:359
+msgid "hibernate.show_sql"
+msgstr ""
+
+#: index.docbook:361
+msgid "Write all SQL statements to console. This is an alternative to setting the log category <literal>org.hibernate.SQL</literal> to <literal>debug</literal>."
+msgstr ""
+
+#: index.docbook:365, index.docbook:377, index.docbook:471, index.docbook:484, index.docbook:497, index.docbook:510, index.docbook:564, index.docbook:591, index.docbook:605, index.docbook:660, index.docbook:888, index.docbook:903, index.docbook:993
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true</literal> | <literal>false</literal>"
+msgstr ""
+
+#: index.docbook:373
+msgid "hibernate.format_sql"
+msgstr ""
+
+#: index.docbook:375
+msgid "Pretty print the SQL in the log and console."
+msgstr ""
+
+#: index.docbook:385
+msgid "hibernate.default_schema"
+msgstr ""
+
+#: index.docbook:387
+msgid "Qualify unqualified table names with the given schema/tablespace in generated SQL."
+msgstr ""
+
+#: index.docbook:390
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>SCHEMA_NAME</literal>"
+msgstr ""
+
+#: index.docbook:398
+msgid "hibernate.default_catalog"
+msgstr ""
+
+#: index.docbook:400
+msgid "Qualify unqualified table names with the given catalog in generated SQL."
+msgstr ""
+
+#: index.docbook:403
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>CATALOG_NAME</literal>"
+msgstr ""
+
+#: index.docbook:411
+msgid "hibernate.session_factory_name"
+msgstr ""
+
+#: index.docbook:413
+msgid "The <literal>SessionFactory</literal> will be automatically bound to this name in JNDI after it has been created."
+msgstr ""
+
+#: index.docbook:416, index.docbook:859
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jndi/composite/name</literal>"
+msgstr ""
+
+#: index.docbook:424
+msgid "hibernate.max_fetch_depth"
+msgstr ""
+
+#: index.docbook:426
+msgid "Set a maximum \"depth\" for the outer join fetch tree for single-ended associations (one-to-one, many-to-one). A <literal>0</literal> disables default outer join fetching."
+msgstr ""
+
+#: index.docbook:430
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>0</literal> and <literal>3</literal>"
+msgstr ""
+
+#: index.docbook:439
+msgid "hibernate.default_batch_fetch_size"
+msgstr ""
+
+#: index.docbook:441
+msgid "Set a default size for Hibernate batch fetching of associations."
+msgstr ""
+
+#: index.docbook:443
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values <literal>4</literal>, <literal>8</literal>, <literal>16</literal>"
+msgstr ""
+
+#: index.docbook:452
+msgid "hibernate.default_entity_mode"
+msgstr ""
+
+#: index.docbook:454
+msgid "Set a default mode for entity representation for all sessions opened from this <literal>SessionFactory</literal>"
+msgstr ""
+
+#: index.docbook:457
+msgid "<literal>dynamic-map</literal>, <literal>dom4j</literal>, <literal>pojo</literal>"
+msgstr ""
+
+#: index.docbook:465
+msgid "hibernate.order_updates"
+msgstr ""
+
+#: index.docbook:467
+msgid "Force Hibernate to order SQL updates by the primary key value of the items being updated. This will result in fewer transaction deadlocks in highly concurrent systems."
+msgstr ""
+
+#: index.docbook:479
+msgid "hibernate.generate_statistics"
+msgstr ""
+
+#: index.docbook:481
+msgid "If enabled, Hibernate will collect statistics useful for performance tuning."
+msgstr ""
+
+#: index.docbook:492
+msgid "hibernate.use_identifier_rollback"
+msgstr ""
+
+#: index.docbook:494
+msgid "If enabled, generated identifier properties will be reset to default values when objects are deleted."
+msgstr ""
+
+#: index.docbook:505
+msgid "hibernate.use_sql_comments"
+msgstr ""
+
+#: index.docbook:507
+msgid "If turned on, Hibernate will generate comments inside the SQL, for easier debugging, defaults to <literal>false</literal>."
+msgstr ""
+
+#: index.docbook:521
+msgid "Hibernate JDBC and Connection Properties"
+msgstr ""
+
+#: index.docbook:536
+msgid "hibernate.jdbc.fetch_size"
+msgstr ""
+
+#: index.docbook:538
+msgid "A non-zero value determines the JDBC fetch size (calls <literal>Statement.setFetchSize()</literal>)."
+msgstr ""
+
+#: index.docbook:545
+msgid "hibernate.jdbc.batch_size"
+msgstr ""
+
+#: index.docbook:547
+msgid "A non-zero value enables use of JDBC2 batch updates by Hibernate."
+msgstr ""
+
+#: index.docbook:549
+msgid "<emphasis role=\"strong\">eg.</emphasis> recommended values between <literal>5</literal> and <literal>30</literal>"
+msgstr ""
+
+#: index.docbook:557
+msgid "hibernate.jdbc.batch_versioned_data"
+msgstr ""
+
+#: index.docbook:559
+msgid "Set this property to <literal>true</literal> if your JDBC driver returns correct row counts from <literal>executeBatch()</literal> (it is usually safe to turn this option on). Hibernate will then use batched DML for automatically versioned data. Defaults to <literal>false</literal>."
+msgstr ""
+
+#: index.docbook:572
+msgid "hibernate.jdbc.factory_class"
+msgstr ""
+
+#: index.docbook:574
+msgid "Select a custom <literal>Batcher</literal>. Most applications will not need this configuration property."
+msgstr ""
+
+#: index.docbook:577
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.BatcherFactory</literal>"
+msgstr ""
+
+#: index.docbook:585
+msgid "hibernate.jdbc.use_scrollable_resultset"
+msgstr ""
+
+#: index.docbook:587
+msgid "Enables use of JDBC2 scrollable resultsets by Hibernate. This property is only necessary when using user supplied JDBC connections, Hibernate uses connection metadata otherwise."
+msgstr ""
+
+#: index.docbook:599
+msgid "hibernate.jdbc.use_streams_for_binary"
+msgstr ""
+
+#: index.docbook:601
+msgid "Use streams when writing/reading <literal>binary</literal> or <literal>serializable</literal> types to/from JDBC (system-level property)."
+msgstr ""
+
+#: index.docbook:613
+msgid "hibernate.jdbc.use_get_generated_keys"
+msgstr ""
+
+#: index.docbook:615
+msgid "Enable use of JDBC3 <literal>PreparedStatement.getGeneratedKeys()</literal> to retrieve natively generated keys after insert. Requires JDBC3+ driver and JRE1.4+, set to false if your driver has problems with the Hibernate identifier generators. By default, tries to determine the driver capabilities using connection metadata."
+msgstr ""
+
+#: index.docbook:621, index.docbook:751, index.docbook:763, index.docbook:777, index.docbook:815
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>true|false</literal>"
+msgstr ""
+
+#: index.docbook:629
+msgid "hibernate.connection.provider_class"
+msgstr ""
+
+#: index.docbook:631
+msgid "The classname of a custom <literal>ConnectionProvider</literal> which provides JDBC connections to Hibernate."
+msgstr ""
+
+#: index.docbook:634
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.ConnectionProvider</literal>"
+msgstr ""
+
+#: index.docbook:642
+msgid "hibernate.connection.isolation"
+msgstr ""
+
+#: index.docbook:644
+msgid "Set the JDBC transaction isolation level. Check <literal>java.sql.Connection</literal> for meaningful values but note that most databases do not support all isolation levels."
+msgstr ""
+
+#: index.docbook:648
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>1, 2, 4, 8</literal>"
+msgstr ""
+
+#: index.docbook:656
+msgid "hibernate.connection.autocommit"
+msgstr ""
+
+#: index.docbook:658
+msgid "Enables autocommit for JDBC pooled connections (not recommended)."
+msgstr ""
+
+#: index.docbook:668
+msgid "hibernate.connection.release_mode"
+msgstr ""
+
+#: index.docbook:670
+msgid "Specify when Hibernate should release JDBC connections. By default, a JDBC connection is held until the session is explicitly closed or disconnected. For an application server JTA datasource, you should use <literal>after_statement</literal> to aggressively release connections after every JDBC call. For a non-JTA connection, it often makes sense to release the connection at the end of each transaction, by using <literal>after_transaction</literal>. <literal>auto</literal> will choose <literal>after_statement</literal> for the JTA and CMT transaction strategies and <literal>after_transaction</literal> for the JDBC transaction strategy."
+msgstr ""
+
+#: index.docbook:681
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>auto</literal> (default) | <literal>on_close</literal> | <literal>after_transaction</literal> | <literal>after_statement</literal>"
+msgstr ""
+
+#: index.docbook:686
+msgid "Note that this setting only affects <literal>Session</literal>s returned from <literal>SessionFactory.openSession</literal>. For <literal>Session</literal>s obtained through <literal>SessionFactory.getCurrentSession</literal>, the <literal>CurrentSessionContext</literal> implementation configured for use controls the connection release mode for those <literal>Session</literal>s. See"
+msgstr ""
+
+#: index.docbook:698
+msgid "hibernate.connection.<emphasis><propertyName></emphasis>"
+msgstr ""
+
+#: index.docbook:700
+msgid "Pass the JDBC property <literal>propertyName</literal> to <literal>DriverManager.getConnection()</literal>."
+msgstr ""
+
+#: index.docbook:707
+msgid "hibernate.jndi.<emphasis><propertyName></emphasis>"
+msgstr ""
+
+#: index.docbook:709
+msgid "Pass the property <literal>propertyName</literal> to the JNDI <literal>InitialContextFactory</literal>."
+msgstr ""
+
+#: index.docbook:719
+msgid "Hibernate Cache Properties"
+msgstr ""
+
+#: index.docbook:732
+msgid "hibernate.cache.provider_class"
+msgstr ""
+
+#: index.docbook:734
+msgid "The classname of a custom <literal>CacheProvider</literal>."
+msgstr ""
+
+#: index.docbook:736
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.CacheProvider</literal>"
+msgstr ""
+
+#: index.docbook:744
+msgid "hibernate.cache.use_minimal_puts"
+msgstr ""
+
+#: index.docbook:746
+msgid "Optimize second-level cache operation to minimize writes, at the cost of more frequent reads. This setting is most useful for clustered caches and, in Hibernate3, is enabled by default for clustered cache implementations."
+msgstr ""
+
+#: index.docbook:759
+msgid "hibernate.cache.use_query_cache"
+msgstr ""
+
+#: index.docbook:761
+msgid "Enable the query cache, individual queries still have to be set cachable."
+msgstr ""
+
+#: index.docbook:771
+msgid "hibernate.cache.use_second_level_cache"
+msgstr ""
+
+#: index.docbook:773
+msgid "May be used to completely disable the second level cache, which is enabled by default for classes which specify a <literal><cache></literal> mapping."
+msgstr ""
+
+#: index.docbook:785
+msgid "hibernate.cache.query_cache_factory"
+msgstr ""
+
+#: index.docbook:787
+msgid "The classname of a custom <literal>QueryCache</literal> interface, defaults to the built-in <literal>StandardQueryCache</literal>."
+msgstr ""
+
+#: index.docbook:790
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.QueryCache</literal>"
+msgstr ""
+
+#: index.docbook:798
+msgid "hibernate.cache.region_prefix"
+msgstr ""
+
+#: index.docbook:800
+msgid "A prefix to use for second-level cache region names."
+msgstr ""
+
+#: index.docbook:802
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>prefix</literal>"
+msgstr ""
+
+#: index.docbook:810
+msgid "hibernate.cache.use_structured_entries"
+msgstr ""
+
+#: index.docbook:812
+msgid "Forces Hibernate to store data in the second-level cache in a more human-friendly format."
+msgstr ""
+
+#: index.docbook:826
+msgid "Hibernate Transaction Properties"
+msgstr ""
+
+#: index.docbook:839
+msgid "hibernate.transaction.factory_class"
+msgstr ""
+
+#: index.docbook:841
+msgid "The classname of a <literal>TransactionFactory</literal> to use with Hibernate <literal>Transaction</literal> API (defaults to <literal>JDBCTransactionFactory</literal>)."
+msgstr ""
+
+#: index.docbook:845
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionFactory</literal>"
+msgstr ""
+
+#: index.docbook:853
+msgid "jta.UserTransaction"
+msgstr ""
+
+#: index.docbook:855
+msgid "A JNDI name used by <literal>JTATransactionFactory</literal> to obtain the JTA <literal>UserTransaction</literal> from the application server."
+msgstr ""
+
+#: index.docbook:867
+msgid "hibernate.transaction.manager_lookup_class"
+msgstr ""
+
+#: index.docbook:869
+msgid "The classname of a <literal>TransactionManagerLookup</literal> - required when JVM-level caching is enabled or when using hilo generator in a JTA environment."
+msgstr ""
+
+#: index.docbook:873
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>classname.of.TransactionManagerLookup</literal>"
+msgstr ""
+
+#: index.docbook:881
+msgid "hibernate.transaction.flush_before_completion"
+msgstr ""
+
+#: index.docbook:883
+msgid "If enabled, the session will be automatically flushed during the before completion phase of the transaction. Built-in and automatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr ""
+
+#: index.docbook:896
+msgid "hibernate.transaction.auto_close_session"
+msgstr ""
+
+#: index.docbook:898
+msgid "If enabled, the session will be automatically closed during the after completion phase of the transaction. Built-in and utomatic session context management is preferred, see <xref linkend=\"architecture-current-session\"/>."
+msgstr ""
+
+#: index.docbook:914
+msgid "Miscellaneous Properties"
+msgstr ""
+
+#: index.docbook:927
+msgid "hibernate.current_session_context_class"
+msgstr ""
+
+#: index.docbook:929
+msgid "Supply a (custom) strategy for the scoping of the \"current\" <literal>Session</literal>. See <xref linkend=\"architecture-current-session\"/> for more information about the built-in strategies."
+msgstr ""
+
+#: index.docbook:934
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>jta</literal> | <literal>thread</literal> | <literal>managed</literal> | <literal>custom.Class</literal>"
+msgstr ""
+
+#: index.docbook:943
+msgid "hibernate.query.factory_class"
+msgstr ""
+
+#: index.docbook:945
+msgid "Chooses the HQL parser implementation."
+msgstr ""
+
+#: index.docbook:947
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>org.hibernate.hql.ast.ASTQueryTranslatorFactory</literal> or <literal>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</literal>"
+msgstr ""
+
+#: index.docbook:956
+msgid "hibernate.query.substitutions"
+msgstr ""
+
+#: index.docbook:958
+msgid "Mapping from tokens in Hibernate queries to SQL tokens (tokens might be function or literal names, for example)."
+msgstr ""
+
+#: index.docbook:961
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC</literal>"
+msgstr ""
+
+#: index.docbook:969
+msgid "hibernate.hbm2ddl.auto"
+msgstr ""
+
+#: index.docbook:971
+msgid "Automatically validate or export schema DDL to the database when the <literal>SessionFactory</literal> is created. With <literal>create-drop</literal>, the database schema will be dropped when the <literal>SessionFactory</literal> is closed explicitly."
+msgstr ""
+
+#: index.docbook:977
+msgid "<emphasis role=\"strong\">eg.</emphasis> <literal>validate</literal> | <literal>update</literal> | <literal>create</literal> | <literal>create-drop</literal>"
+msgstr ""
+
+#: index.docbook:986
+msgid "hibernate.cglib.use_reflection_optimizer"
+msgstr ""
+
+#: index.docbook:988
+msgid "Enables use of CGLIB instead of runtime reflection (System-level property). Reflection can sometimes be useful when troubleshooting, note that Hibernate always requires CGLIB even if you turn off the optimizer. You can not set this property in <literal>hibernate.cfg.xml</literal>."
+msgstr ""
+
+#: index.docbook:1004
+msgid "SQL Dialects"
+msgstr ""
+
+#: index.docbook:1006
+msgid "You should always set the <literal>hibernate.dialect</literal> property to the correct <literal>org.hibernate.dialect.Dialect</literal> subclass for your database. If you specify a dialect, Hibernate will use sensible defaults for some of the other properties listed above, saving you the effort of specifying them manually."
+msgstr ""
+
+#: index.docbook:1014
+msgid "Hibernate SQL Dialects (<literal>hibernate.dialect</literal>)"
+msgstr ""
+
+#: index.docbook:1022
+msgid "RDBMS"
+msgstr ""
+
+#: index.docbook:1023
+msgid "Dialect"
+msgstr ""
+
+#: index.docbook:1028
+msgid "<entry>DB2</entry>"
+msgstr ""
+
+#: index.docbook:1028
+msgid "org.hibernate.dialect.DB2Dialect"
+msgstr ""
+
+#: index.docbook:1031
+msgid "DB2 AS/400"
+msgstr ""
+
+#: index.docbook:1031
+msgid "org.hibernate.dialect.DB2400Dialect"
+msgstr ""
+
+#: index.docbook:1034
+msgid "DB2 OS390"
+msgstr ""
+
+#: index.docbook:1034
+msgid "org.hibernate.dialect.DB2390Dialect"
+msgstr ""
+
+#: index.docbook:1037
+msgid "PostgreSQL"
+msgstr ""
+
+#: index.docbook:1037
+msgid "org.hibernate.dialect.PostgreSQLDialect"
+msgstr ""
+
+#: index.docbook:1040
+msgid "MySQL"
+msgstr ""
+
+#: index.docbook:1040
+msgid "org.hibernate.dialect.MySQLDialect"
+msgstr ""
+
+#: index.docbook:1043
+msgid "MySQL with InnoDB"
+msgstr ""
+
+#: index.docbook:1043
+msgid "org.hibernate.dialect.MySQLInnoDBDialect"
+msgstr ""
+
+#: index.docbook:1046
+msgid "MySQL with MyISAM"
+msgstr ""
+
+#: index.docbook:1046
+msgid "org.hibernate.dialect.MySQLMyISAMDialect"
+msgstr ""
+
+#: index.docbook:1049
+msgid "Oracle (any version)"
+msgstr ""
+
+#: index.docbook:1049
+msgid "org.hibernate.dialect.OracleDialect"
+msgstr ""
+
+#: index.docbook:1052
+msgid "Oracle 9i/10g"
+msgstr ""
+
+#: index.docbook:1052
+msgid "org.hibernate.dialect.Oracle9Dialect"
+msgstr ""
+
+#: index.docbook:1055
+msgid "Sybase"
+msgstr ""
+
+#: index.docbook:1055
+msgid "org.hibernate.dialect.SybaseDialect"
+msgstr ""
+
+#: index.docbook:1058
+msgid "Sybase Anywhere"
+msgstr ""
+
+#: index.docbook:1058
+msgid "org.hibernate.dialect.SybaseAnywhereDialect"
+msgstr ""
+
+#: index.docbook:1061
+msgid "Microsoft SQL Server"
+msgstr ""
+
+#: index.docbook:1061
+msgid "org.hibernate.dialect.SQLServerDialect"
+msgstr ""
+
+#: index.docbook:1064
+msgid "SAP DB"
+msgstr ""
+
+#: index.docbook:1064
+msgid "org.hibernate.dialect.SAPDBDialect"
+msgstr ""
+
+#: index.docbook:1067
+msgid "Informix"
+msgstr ""
+
+#: index.docbook:1067
+msgid "org.hibernate.dialect.InformixDialect"
+msgstr ""
+
+#: index.docbook:1070
+msgid "HypersonicSQL"
+msgstr ""
+
+#: index.docbook:1070
+msgid "org.hibernate.dialect.HSQLDialect"
+msgstr ""
+
+#: index.docbook:1073
+msgid "Ingres"
+msgstr ""
+
+#: index.docbook:1073
+msgid "org.hibernate.dialect.IngresDialect"
+msgstr ""
+
+#: index.docbook:1076
+msgid "Progress"
+msgstr ""
+
+#: index.docbook:1076
+msgid "org.hibernate.dialect.ProgressDialect"
+msgstr ""
+
+#: index.docbook:1079
+msgid "Mckoi SQL"
+msgstr ""
+
+#: index.docbook:1079
+msgid "org.hibernate.dialect.MckoiDialect"
+msgstr ""
+
+#: index.docbook:1082
+msgid "Interbase"
+msgstr ""
+
+#: index.docbook:1082
+msgid "org.hibernate.dialect.InterbaseDialect"
+msgstr ""
+
+#: index.docbook:1085
+msgid "Pointbase"
+msgstr ""
+
+#: index.docbook:1085
+msgid "org.hibernate.dialect.PointbaseDialect"
+msgstr ""
+
+#: index.docbook:1088
+msgid "FrontBase"
+msgstr ""
+
+#: index.docbook:1088
+msgid "org.hibernate.dialect.FrontbaseDialect"
+msgstr ""
+
+#: index.docbook:1091
+msgid "Firebird"
+msgstr ""
+
+#: index.docbook:1091
+msgid "org.hibernate.dialect.FirebirdDialect"
+msgstr ""
+
+#: index.docbook:1100
+msgid "Outer Join Fetching"
+msgstr ""
+
+#: index.docbook:1102
+msgid "If your database supports ANSI, Oracle or Sybase style outer joins, <emphasis>outer join fetching</emphasis> will often increase performance by limiting the number of round trips to and from the database (at the cost of possibly more work performed by the database itself). Outer join fetching allows a whole graph of objects connected by many-to-one, one-to-many, many-to-many and one-to-one associations to be retrieved in a single SQL <literal>SELECT</literal>."
+msgstr ""
+
+#: index.docbook:1111
+msgid "Outer join fetching may be disabled <emphasis>globally</emphasis> by setting the property <literal>hibernate.max_fetch_depth</literal> to <literal>0</literal>. A setting of <literal>1</literal> or higher enables outer join fetching for one-to-one and many-to-one associations which have been mapped with <literal>fetch=\"join\"</literal>."
+msgstr ""
+
+#: index.docbook:1119
+msgid "See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr ""
+
+#: index.docbook:1126
+msgid "Binary Streams"
+msgstr ""
+
+#: index.docbook:1128
+msgid "Oracle limits the size of <literal>byte</literal> arrays that may be passed to/from its JDBC driver. If you wish to use large instances of <literal>binary</literal> or <literal>serializable</literal> type, you should enable <literal>hibernate.jdbc.use_streams_for_binary</literal>. <emphasis>This is a system-level setting only.</emphasis>"
+msgstr ""
+
+#: index.docbook:1139
+msgid "Second-level and query cache"
+msgstr ""
+
+#: index.docbook:1141
+msgid "The properties prefixed by <literal>hibernate.cache</literal> allow you to use a process or cluster scoped second-level cache system with Hibernate. See the <xref linkend=\"performance-cache\"/> for more details."
+msgstr ""
+
+#: index.docbook:1151
+msgid "Query Language Substitution"
+msgstr ""
+
+#: index.docbook:1153
+msgid "You may define new Hibernate query tokens using <literal>hibernate.query.substitutions</literal>. For example:"
+msgstr ""
+
+#: index.docbook:1158
+msgid "hibernate.query.substitutions true=1, false=0"
+msgstr ""
+
+#: index.docbook:1160
+msgid "would cause the tokens <literal>true</literal> and <literal>false</literal> to be translated to integer literals in the generated SQL."
+msgstr ""
+
+#: index.docbook:1165
+msgid "hibernate.query.substitutions toLowercase=LOWER"
+msgstr ""
+
+#: index.docbook:1167
+msgid "would allow you to rename the SQL <literal>LOWER</literal> function."
+msgstr ""
+
+#: index.docbook:1174
+msgid "Hibernate statistics"
+msgstr ""
+
+#: index.docbook:1176
+msgid "If you enable <literal>hibernate.generate_statistics</literal>, Hibernate will expose a number of metrics that are useful when tuning a running system via <literal>SessionFactory.getStatistics()</literal>. Hibernate can even be configured to expose these statistics via JMX. Read the Javadoc of the interfaces in <literal>org.hibernate.stats</literal> for more information."
+msgstr ""
+
+#: index.docbook:1188
+msgid "Logging"
+msgstr ""
+
+#: index.docbook:1190
+msgid "Hibernate logs various events using Apache commons-logging."
+msgstr ""
+
+#: index.docbook:1194
+msgid "The commons-logging service will direct output to either Apache Log4j (if you include <literal>log4j.jar</literal> in your classpath) or JDK1.4 logging (if running under JDK1.4 or above). You may download Log4j from <literal>http://jakarta.apache.org</literal>. To use Log4j you will need to place a <literal>log4j.properties</literal> file in your classpath, an example properties file is distributed with Hibernate in the <literal>src/</literal> directory."
+msgstr ""
+
+#: index.docbook:1204
+msgid "We strongly recommend that you familiarize yourself with Hibernate's log messages. A lot of work has been put into making the Hibernate log as detailed as possible, without making it unreadable. It is an essential troubleshooting device. The most interesting log categories are the following:"
+msgstr ""
+
+#: index.docbook:1213
+msgid "Hibernate Log Categories"
+msgstr ""
+
+#: index.docbook:1219
+msgid "Category"
+msgstr ""
+
+#: index.docbook:1220
+msgid "Function"
+msgstr ""
+
+#: index.docbook:1225
+msgid "org.hibernate.SQL"
+msgstr ""
+
+#: index.docbook:1226
+msgid "Log all SQL DML statements as they are executed"
+msgstr ""
+
+#: index.docbook:1229
+msgid "org.hibernate.type"
+msgstr ""
+
+#: index.docbook:1230
+msgid "Log all JDBC parameters"
+msgstr ""
+
+#: index.docbook:1233
+msgid "org.hibernate.tool.hbm2ddl"
+msgstr ""
+
+#: index.docbook:1234
+msgid "Log all SQL DDL statements as they are executed"
+msgstr ""
+
+#: index.docbook:1237
+msgid "org.hibernate.pretty"
+msgstr ""
+
+#: index.docbook:1238
+msgid "Log the state of all entities (max 20 entities) associated with the session at flush time"
+msgstr ""
+
+#: index.docbook:1244
+msgid "org.hibernate.cache"
+msgstr ""
+
+#: index.docbook:1245
+msgid "Log all second-level cache activity"
+msgstr ""
+
+#: index.docbook:1248
+msgid "org.hibernate.transaction"
+msgstr ""
+
+#: index.docbook:1249
+msgid "Log transaction related activity"
+msgstr ""
+
+#: index.docbook:1252
+msgid "org.hibernate.jdbc"
+msgstr ""
+
+#: index.docbook:1253
+msgid "Log all JDBC resource acquisition"
+msgstr ""
+
+#: index.docbook:1256
+msgid "org.hibernate.hql.ast.AST"
+msgstr ""
+
+#: index.docbook:1257
+msgid "Log HQL and SQL ASTs during query parsing"
+msgstr ""
+
+#: index.docbook:1262
+msgid "org.hibernate.secure"
+msgstr ""
+
+#: index.docbook:1263
+msgid "Log all JAAS authorization requests"
+msgstr ""
+
+#: index.docbook:1266
+msgid "org.hibernate"
+msgstr ""
+
+#: index.docbook:1267
+msgid "Log everything (a lot of information, but very useful for troubleshooting)"
+msgstr ""
+
+#: index.docbook:1276
+msgid "When developing applications with Hibernate, you should almost always work with <literal>debug</literal> enabled for the category <literal>org.hibernate.SQL</literal>, or, alternatively, the property <literal>hibernate.show_sql</literal> enabled."
+msgstr ""
+
+#: index.docbook:1286
+msgid "Implementing a <literal>NamingStrategy</literal>"
+msgstr ""
+
+#: index.docbook:1288
+msgid "The interface <literal>org.hibernate.cfg.NamingStrategy</literal> allows you to specify a \"naming standard\" for database objects and schema elements."
+msgstr ""
+
+#: index.docbook:1293
+msgid "You may provide rules for automatically generating database identifiers from Java identifiers or for processing \"logical\" column and table names given in the mapping file into \"physical\" table and column names. This feature helps reduce the verbosity of the mapping document, eliminating repetitive noise (<literal>TBL_</literal> prefixes, for example). The default strategy used by Hibernate is quite minimal."
+msgstr ""
+
+#: index.docbook:1302
+msgid "You may specify a different strategy by calling <literal>Configuration.setNamingStrategy()</literal> before adding mappings:"
+msgstr ""
+
+#: index.docbook:1307
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .setNamingStrategy(ImprovedNamingStrategy.INSTANCE)\n"
+ " .addFile(\"Item.hbm.xml\")\n"
+ " .addFile(\"Bid.hbm.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr ""
+
+#: index.docbook:1309
+msgid "<literal>org.hibernate.cfg.ImprovedNamingStrategy</literal> is a built-in strategy that might be a useful starting point for some applications."
+msgstr ""
+
+#: index.docbook:1317
+msgid "XML configuration file"
+msgstr ""
+
+#: index.docbook:1319
+msgid "An alternative approach to configuration is to specify a full configuration in a file named <literal>hibernate.cfg.xml</literal>. This file can be used as a replacement for the <literal>hibernate.properties</literal> file or, if both are present, to override properties."
+msgstr ""
+
+#: index.docbook:1326
+msgid "The XML configuration file is by default expected to be in the root o your <literal>CLASSPATH</literal>. Here is an example:"
+msgstr ""
+
+#: index.docbook:1331
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <!-- a SessionFactory instance listed as /jndi/name -->\n"
+ " <session-factory\n"
+ " name=\"java:hibernate/SessionFactory\">\n"
+ "\n"
+ " <!-- properties -->\n"
+ " <property name=\"connection.datasource\">java:/comp/env/jdbc/MyDB</property>\n"
+ " <property name=\"dialect\">org.hibernate.dialect.MySQLDialect</property>\n"
+ " <property name=\"show_sql\">false</property>\n"
+ " <property name=\"transaction.factory_class\">\n"
+ " org.hibernate.transaction.JTATransactionFactory\n"
+ " </property>\n"
+ " <property name=\"jta.UserTransaction\">java:comp/UserTransaction</property>\n"
+ "\n"
+ " <!-- mapping files -->\n"
+ " <mapping resource=\"org/hibernate/auction/Item.hbm.xml\"/>\n"
+ " <mapping resource=\"org/hibernate/auction/Bid.hbm.xml\"/>\n"
+ "\n"
+ " <!-- cache settings -->\n"
+ " <class-cache class=\"org.hibernate.auction.Item\" usage=\"read-write\"/>\n"
+ " <class-cache class=\"org.hibernate.auction.Bid\" usage=\"read-only\"/>\n"
+ " <collection-cache collection=\"org.hibernate.auction.Item.bids\" usage=\"read-write\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+
+#: index.docbook:1333
+msgid "As you can see, the advantage of this approach is the externalization of the mapping file names to configuration. The <literal>hibernate.cfg.xml</literal> is also more convenient once you have to tune the Hibernate cache. Note that is your choice to use either <literal>hibernate.properties</literal> or <literal>hibernate.cfg.xml</literal>, both are equivalent, except for the above mentioned benefits of using the XML syntax."
+msgstr ""
+
+#: index.docbook:1342
+msgid "With the XML configuration, starting Hibernate is then as simple as"
+msgstr ""
+
+#: index.docbook:1346
+msgid "<![CDATA[SessionFactory sf = new Configuration().configure().buildSessionFactory();]]>"
+msgstr ""
+
+#: index.docbook:1348
+msgid "You can pick a different XML configuration file using"
+msgstr ""
+
+#: index.docbook:1352
+msgid ""
+ "<![CDATA[SessionFactory sf = new Configuration()\n"
+ " .configure(\"catdb.cfg.xml\")\n"
+ " .buildSessionFactory();]]>"
+msgstr ""
+
+#: index.docbook:1357
+msgid "J2EE Application Server integration"
+msgstr ""
+
+#: index.docbook:1359
+msgid "Hibernate has the following integration points for J2EE infrastructure:"
+msgstr ""
+
+#: index.docbook:1365
+msgid "<emphasis>Container-managed datasources</emphasis>: Hibernate can use JDBC connections managed by the container and provided through JNDI. Usually, a JTA compatible <literal>TransactionManager</literal> and a <literal>ResourceManager</literal> take care of transaction management (CMT), esp. distributed transaction handling across several datasources. You may of course also demarcate transaction boundaries programmatically (BMT) or you might want to use the optional Hibernate <literal>Transaction</literal> API for this to keep your code portable."
+msgstr ""
+
+#: index.docbook:1380
+msgid "<emphasis>Automatic JNDI binding</emphasis>: Hibernate can bind its <literal>SessionFactory</literal> to JNDI after startup."
+msgstr ""
+
+#: index.docbook:1389
+msgid "<emphasis>JTA Session binding:</emphasis> The Hibernate <literal>Session</literal> may be automatically bound to the scope of JTA transactions. Simply lookup the <literal>SessionFactory</literal> from JNDI and get the current <literal>Session</literal>. Let Hibernate take care of flushing and closing the <literal>Session</literal> when your JTA transaction completes. Transaction demarcation is either declarative (CMT) or programmatic (BMT/UserTransaction)."
+msgstr ""
+
+#: index.docbook:1402
+msgid "<emphasis>JMX deployment:</emphasis> If you have a JMX capable application server (e.g. JBoss AS), you can chose to deploy Hibernate as a managed MBean. This saves you the one line startup code to build your <literal>SessionFactory</literal> from a <literal>Configuration</literal>. The container will startup your <literal>HibernateService</literal>, and ideally also take care of service dependencies (Datasource has to be available before Hibernate starts, etc)."
+msgstr ""
+
+#: index.docbook:1413
+msgid "Depending on your environment, you might have to set the configuration option <literal>hibernate.connection.aggressive_release</literal> to true if your application server shows \"connection containment\" exceptions."
+msgstr ""
+
+#: index.docbook:1420
+msgid "Transaction strategy configuration"
+msgstr ""
+
+#: index.docbook:1422
+msgid "The Hibernate <literal>Session</literal> API is independent of any transaction demarcation system in your architecture. If you let Hibernate use JDBC directly, through a connection pool, you may begin and end your transactions by calling the JDBC API. If you run in a J2EE application server, you might want to use bean-managed transactions and call the JTA API and <literal>UserTransaction</literal> when needed."
+msgstr ""
+
+#: index.docbook:1430
+msgid "To keep your code portable between these two (and other) environments we recommend the optional Hibernate <literal>Transaction</literal> API, which wraps and hides the underlying system. You have to specify a factory class for <literal>Transaction</literal> instances by setting the Hibernate configuration property <literal>hibernate.transaction.factory_class</literal>."
+msgstr ""
+
+#: index.docbook:1437
+msgid "There are three standard (built-in) choices:"
+msgstr ""
+
+#: index.docbook:1443
+msgid "org.hibernate.transaction.JDBCTransactionFactory"
+msgstr ""
+
+#: index.docbook:1445
+msgid "delegates to database (JDBC) transactions (default)"
+msgstr ""
+
+#: index.docbook:1449
+msgid "org.hibernate.transaction.JTATransactionFactory"
+msgstr ""
+
+#: index.docbook:1451
+msgid "delegates to container-managed transaction if an existing transaction is underway in this context (e.g. EJB session bean method), otherwise a new transaction is started and bean-managed transaction are used."
+msgstr ""
+
+#: index.docbook:1459
+msgid "org.hibernate.transaction.CMTTransactionFactory"
+msgstr ""
+
+#: index.docbook:1461
+msgid "delegates to container-managed JTA transactions"
+msgstr ""
+
+#: index.docbook:1466
+msgid "You may also define your own transaction strategies (for a CORBA transaction service, for example)."
+msgstr ""
+
+#: index.docbook:1471
+msgid "Some features in Hibernate (i.e. the second level cache, Contextual Sessions with JTA, etc.) require access to the JTA <literal>TransactionManager</literal> in a managed environment. In an application server you have to specify how Hibernate should obtain a reference to the <literal>TransactionManager</literal>, since J2EE does not standardize a single mechanism:"
+msgstr ""
+
+#: index.docbook:1479
+msgid "JTA TransactionManagers"
+msgstr ""
+
+#: index.docbook:1485
+msgid "Transaction Factory"
+msgstr ""
+
+#: index.docbook:1486
+msgid "Application Server"
+msgstr ""
+
+#: index.docbook:1491
+msgid "org.hibernate.transaction.JBossTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1492
+msgid "JBoss"
+msgstr ""
+
+#: index.docbook:1495
+msgid "org.hibernate.transaction.WeblogicTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1496
+msgid "Weblogic"
+msgstr ""
+
+#: index.docbook:1499
+msgid "org.hibernate.transaction.WebSphereTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1500
+msgid "WebSphere"
+msgstr ""
+
+#: index.docbook:1503
+msgid "org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"
+msgstr ""
+
+#: index.docbook:1504
+msgid "WebSphere 6"
+msgstr ""
+
+#: index.docbook:1507
+msgid "org.hibernate.transaction.OrionTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1508
+msgid "Orion"
+msgstr ""
+
+#: index.docbook:1511
+msgid "org.hibernate.transaction.ResinTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1512
+msgid "Resin"
+msgstr ""
+
+#: index.docbook:1515
+msgid "org.hibernate.transaction.JOTMTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1516
+msgid "JOTM"
+msgstr ""
+
+#: index.docbook:1519
+msgid "org.hibernate.transaction.JOnASTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1520
+msgid "JOnAS"
+msgstr ""
+
+#: index.docbook:1523
+msgid "org.hibernate.transaction.JRun4TransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1524
+msgid "JRun4"
+msgstr ""
+
+#: index.docbook:1527
+msgid "org.hibernate.transaction.BESTransactionManagerLookup"
+msgstr ""
+
+#: index.docbook:1528
+msgid "Borland ES"
+msgstr ""
+
+#: index.docbook:1537
+msgid "JNDI-bound <literal>SessionFactory</literal>"
+msgstr ""
+
+#: index.docbook:1539
+msgid "A JNDI bound Hibernate <literal>SessionFactory</literal> can simplify the lookup of the factory and the creation of new <literal>Session</literal>s. Note that this is not related to a JNDI bound <literal>Datasource</literal>, both simply use the same registry!"
+msgstr ""
+
+#: index.docbook:1546
+msgid "If you wish to have the <literal>SessionFactory</literal> bound to a JNDI namespace, specify a name (eg. <literal>java:hibernate/SessionFactory</literal>) using the property <literal>hibernate.session_factory_name</literal>. If this property is omitted, the <literal>SessionFactory</literal> will not be bound to JNDI. (This is especially useful in environments with a read-only JNDI default implementation, e.g. Tomcat.)"
+msgstr ""
+
+#: index.docbook:1554
+msgid "When binding the <literal>SessionFactory</literal> to JNDI, Hibernate will use the values of <literal>hibernate.jndi.url</literal>, <literal>hibernate.jndi.class</literal> to instantiate an initial context. If they are not specified, the default <literal>InitialContext</literal> will be used."
+msgstr ""
+
+#: index.docbook:1561
+msgid "Hibernate will automatically place the <literal>SessionFactory</literal> in JNDI after you call <literal>cfg.buildSessionFactory()</literal>. This means you will at least have this call in some startup code (or utility class) in your application, unless you use JMX deployment with the <literal>HibernateService</literal> (discussed later)."
+msgstr ""
+
+#: index.docbook:1568
+msgid "If you use a JNDI <literal>SessionFactory</literal>, an EJB or any other class may obtain the <literal>SessionFactory</literal> using a JNDI lookup."
+msgstr ""
+
+#: index.docbook:1573
+msgid "We recommend that you bind the <literal>SessionFactory</literal> to JNDI in a managed environment and use a <literal>static</literal> singleton otherwise. To shield your application code from these details, we also recommend to hide the actual lookup code for a <literal>SessionFactory</literal> in a helper class, such as <literal>HibernateUtil.getSessionFactory()</literal>. Note that such a class is also a convenient way to startup Hibernate—see chapter 1."
+msgstr ""
+
+#: index.docbook:1585
+msgid "Current Session context management with JTA"
+msgstr ""
+
+#: index.docbook:1587
+msgid "The easiest way to handle <literal>Session</literal>s and transactions is Hibernates automatic \"current\" <literal>Session</literal> management. See the discussion of <xref linkend=\"architecture-current-session\"/>current sessions. Using the <literal>\"jta\"</literal> session context, if there is no Hibernate <literal>Session</literal> associated with the current JTA transaction, one will be started and associated with that JTA transaction the first time you call <literal>sessionFactory.getCurrentSession()</literal>. The <literal>Session</literal>s retrieved via <literal>getCurrentSession()</literal> in <literal>\"jta\"</literal> context will be set to automatically flush before the transaction completes, close after the transaction completes, and aggressively release JDBC connections after each statement. This allows the <literal>Session</literal>s to be managed by the life cycle of the JTA transaction to which it is associated, keeping user code clean of such man!
agement concerns. Your code can either use JTA programmatically through <literal>UserTransaction</literal>, or (recommended for portable code) use the Hibernate <literal>Transaction</literal> API to set transaction boundaries. If you run in an EJB container, declarative transaction demarcation with CMT is preferred."
+msgstr ""
+
+#: index.docbook:1610
+msgid "JMX deployment"
+msgstr ""
+
+#: index.docbook:1612
+msgid "The line <literal>cfg.buildSessionFactory()</literal> still has to be executed somewhere to get a <literal>SessionFactory</literal> into JNDI. You can do this either in a <literal>static</literal> initializer block (like the one in <literal>HibernateUtil</literal>) or you deploy Hibernate as a <emphasis>managed service</emphasis>."
+msgstr ""
+
+#: index.docbook:1620
+msgid "Hibernate is distributed with <literal>org.hibernate.jmx.HibernateService</literal> for deployment on an application server with JMX capabilities, such as JBoss AS. The actual deployment and configuration is vendor specific. Here is an example <literal>jboss-service.xml</literal> for JBoss 4.0.x:"
+msgstr ""
+
+#: index.docbook:1627
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<server>\n"
+ "\n"
+ "<mbean code=\"org.hibernate.jmx.HibernateService\"\n"
+ " name=\"jboss.jca:service=HibernateFactory,name=HibernateFactory\">\n"
+ "\n"
+ " <!-- Required services -->\n"
+ " <depends>jboss.jca:service=RARDeployer</depends>\n"
+ " <depends>jboss.jca:service=LocalTxCM,name=HsqlDS</depends>\n"
+ "\n"
+ " <!-- Bind the Hibernate service to JNDI -->\n"
+ " <attribute name=\"JndiName\">java:/hibernate/SessionFactory</attribute>\n"
+ "\n"
+ " <!-- Datasource settings -->\n"
+ " <attribute name=\"Datasource\">java:HsqlDS</attribute>\n"
+ " <attribute name=\"Dialect\">org.hibernate.dialect.HSQLDialect</attribute>\n"
+ "\n"
+ " <!-- Transaction integration -->\n"
+ " <attribute name=\"TransactionStrategy\">\n"
+ " org.hibernate.transaction.JTATransactionFactory</attribute>\n"
+ " <attribute name=\"TransactionManagerLookupStrategy\">\n"
+ " org.hibernate.transaction.JBossTransactionManagerLookup</attribute>\n"
+ " <attribute name=\"FlushBeforeCompletionEnabled\">true</attribute>\n"
+ " <attribute name=\"AutoCloseSessionEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Fetching options -->\n"
+ " <attribute name=\"MaximumFetchDepth\">5</attribute>\n"
+ "\n"
+ " <!-- Second-level caching -->\n"
+ " <attribute name=\"SecondLevelCacheEnabled\">true</attribute>\n"
+ " <attribute name=\"CacheProviderClass\">org.hibernate.cache.EhCacheProvider</attribute>\n"
+ " <attribute name=\"QueryCacheEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Logging -->\n"
+ " <attribute name=\"ShowSqlEnabled\">true</attribute>\n"
+ "\n"
+ " <!-- Mapping files -->\n"
+ " <attribute name=\"MapResources\">auction/Item.hbm.xml,auction/Category.hbm.xml</attribute>\n"
+ "\n"
+ "</mbean>\n"
+ "\n"
+ "</server>]]>"
+msgstr ""
+
+#: index.docbook:1629
+msgid "This file is deployed in a directory called <literal>META-INF</literal> and packaged in a JAR file with the extension <literal>.sar</literal> (service archive). You also need to package Hibernate, its required third-party libraries, your compiled persistent classes, as well as your mapping files in the same archive. Your enterprise beans (usually session beans) may be kept in their own JAR file, but you may include this EJB JAR file in the main service archive to get a single (hot-)deployable unit. Consult the JBoss AS documentation for more information about JMX service and EJB deployment."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/events.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/events.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/events.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,245 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Interceptors and events"
+msgstr ""
+
+#: index.docbook:7
+msgid "It is often useful for the application to react to certain events that occur inside Hibernate. This allows implementation of certain kinds of generic functionality, and extension of Hibernate functionality."
+msgstr ""
+
+#: index.docbook:14
+msgid "Interceptors"
+msgstr ""
+
+#: index.docbook:16
+msgid "The <literal>Interceptor</literal> interface provides callbacks from the session to the application allowing the application to inspect and/or manipulate properties of a persistent object before it is saved, updated, deleted or loaded. One possible use for this is to track auditing information. For example, the following <literal>Interceptor</literal> automatically sets the <literal>createTimestamp</literal> when an <literal>Auditable</literal> is created and updates the <literal>lastUpdateTimestamp</literal> property when an <literal>Auditable</literal> is updated."
+msgstr ""
+
+#: index.docbook:27
+msgid "You may either implement <literal>Interceptor</literal> directly or (better) extend <literal>EmptyInterceptor</literal>."
+msgstr ""
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[package org.hibernate.test;\n"
+ "\n"
+ "import java.io.Serializable;\n"
+ "import java.util.Date;\n"
+ "import java.util.Iterator;\n"
+ "\n"
+ "import org.hibernate.EmptyInterceptor;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.type.Type;\n"
+ "\n"
+ "public class AuditInterceptor extends EmptyInterceptor {\n"
+ "\n"
+ " private int updates;\n"
+ " private int creates;\n"
+ " private int loads;\n"
+ "\n"
+ " public void onDelete(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " // do nothing\n"
+ " }\n"
+ "\n"
+ " public boolean onFlushDirty(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] currentState,\n"
+ " Object[] previousState,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " updates++;\n"
+ " for ( int i=0; i < propertyNames.length; i++ ) {\n"
+ " if ( \"lastUpdateTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " currentState[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onLoad(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " loads++;\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public boolean onSave(Object entity,\n"
+ " Serializable id,\n"
+ " Object[] state,\n"
+ " String[] propertyNames,\n"
+ " Type[] types) {\n"
+ "\n"
+ " if ( entity instanceof Auditable ) {\n"
+ " creates++;\n"
+ " for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( \"createTimestamp\".equals( propertyNames[i] ) ) {\n"
+ " state[i] = new Date();\n"
+ " return true;\n"
+ " }\n"
+ " }\n"
+ " }\n"
+ " return false;\n"
+ " }\n"
+ "\n"
+ " public void afterTransactionCompletion(Transaction tx) {\n"
+ " if ( tx.wasCommitted() ) {\n"
+ " System.out.println(\"Creations: \" + creates + \", Updates: \" + updates, \"Loads: \" + loads);\n"
+ " }\n"
+ " updates=0;\n"
+ " creates=0;\n"
+ " loads=0;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:34
+msgid "Interceptors come in two flavors: <literal>Session</literal>-scoped and <literal>SessionFactory</literal>-scoped."
+msgstr ""
+
+#: index.docbook:39
+msgid "A <literal>Session</literal>-scoped interceptor is specified when a session is opened using one of the overloaded SessionFactory.openSession() methods accepting an <literal>Interceptor</literal>."
+msgstr ""
+
+#: index.docbook:45
+msgid "<![CDATA[Session session = sf.openSession( new AuditInterceptor() );]]>"
+msgstr ""
+
+#: index.docbook:47
+msgid "A <literal>SessionFactory</literal>-scoped interceptor is registered with the <literal>Configuration</literal> object prior to building the <literal>SessionFactory</literal>. In this case, the supplied interceptor will be applied to all sessions opened from that <literal>SessionFactory</literal>; this is true unless a session is opened explicitly specifying the interceptor to use. <literal>SessionFactory</literal>-scoped interceptors must be thread safe, taking care to not store session-specific state since multiple sessions will use this interceptor (potentially) concurrently."
+msgstr ""
+
+#: index.docbook:56
+msgid "<![CDATA[new Configuration().setInterceptor( new AuditInterceptor() );]]>"
+msgstr ""
+
+#: index.docbook:61
+msgid "Event system"
+msgstr ""
+
+#: index.docbook:63
+msgid "If you have to react to particular events in your persistence layer, you may also use the Hibernate3 <emphasis>event</emphasis> architecture. The event system can be used in addition or as a replacement for interceptors."
+msgstr ""
+
+#: index.docbook:69
+msgid "Essentially all of the methods of the <literal>Session</literal> interface correlate to an event. You have a <literal>LoadEvent</literal>, a <literal>FlushEvent</literal>, etc (consult the XML configuration-file DTD or the <literal>org.hibernate.event</literal> package for the full list of defined event types). When a request is made of one of these methods, the Hibernate <literal>Session</literal> generates an appropriate event and passes it to the configured event listeners for that type. Out-of-the-box, these listeners implement the same processing in which those methods always resulted. However, you are free to implement a customization of one of the listener interfaces (i.e., the <literal>LoadEvent</literal> is processed by the registered implemenation of the <literal>LoadEventListener</literal> interface), in which case their implementation would be responsible for processing any <literal>load()</literal> requests made of the <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:84
+msgid "The listeners should be considered effectively singletons; meaning, they are shared between requests, and thus should not save any state as instance variables."
+msgstr ""
+
+#: index.docbook:89
+msgid "A custom listener should implement the appropriate interface for the event it wants to process and/or extend one of the convenience base classes (or even the default event listeners used by Hibernate out-of-the-box as these are declared non-final for this purpose). Custom listeners can either be registered programmatically through the <literal>Configuration</literal> object, or specified in the Hibernate configuration XML (declarative configuration through the properties file is not supported). Here's an example of a custom load event listener:"
+msgstr ""
+
+#: index.docbook:99
+msgid ""
+ "<![CDATA[public class MyLoadListener implements LoadEventListener {\n"
+ " // this is the single method defined by the LoadEventListener interface\n"
+ " public void onLoad(LoadEvent event, LoadEventListener.LoadType loadType)\n"
+ " throws HibernateException {\n"
+ " if ( !MySecurity.isAuthorized( event.getEntityClassName(), event.getEntityId() ) ) {\n"
+ " throw MySecurityException(\"Unauthorized access\");\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:101
+msgid "You also need a configuration entry telling Hibernate to use the listener in addition to the default listener:"
+msgstr ""
+
+#: index.docbook:106
+msgid ""
+ "<![CDATA[<hibernate-configuration>\n"
+ " <session-factory>\n"
+ " ...\n"
+ " <event type=\"load\">\n"
+ " <listener class=\"com.eg.MyLoadListener\"/>\n"
+ " <listener class=\"org.hibernate.event.def.DefaultLoadEventListener\"/>\n"
+ " </event>\n"
+ " </session-factory>\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+
+#: index.docbook:108
+msgid "Instead, you may register it programmatically:"
+msgstr ""
+
+#: index.docbook:112
+msgid ""
+ "<![CDATA[Configuration cfg = new Configuration();\n"
+ "LoadEventListener[] stack = { new MyLoadListener(), new DefaultLoadEventListener() };\n"
+ "cfg.EventListeners().setLoadEventListeners(stack);]]>"
+msgstr ""
+
+#: index.docbook:114
+msgid "Listeners registered declaratively cannot share instances. If the same class name is used in multiple <literal><listener/></literal> elements, each reference will result in a separate instance of that class. If you need the capability to share listener instances between listener types you must use the programmatic registration approach."
+msgstr ""
+
+#: index.docbook:122
+msgid "Why implement an interface and define the specific type during configuration? Well, a listener implementation could implement multiple event listener interfaces. Having the type additionally defined during registration makes it easier to turn custom listeners on or off during configuration."
+msgstr ""
+
+#: index.docbook:132
+msgid "Hibernate declarative security"
+msgstr ""
+
+#: index.docbook:133
+msgid "Usually, declarative security in Hibernate applications is managed in a session facade layer. Now, Hibernate3 allows certain actions to be permissioned via JACC, and authorized via JAAS. This is optional functionality built on top of the event architecture."
+msgstr ""
+
+#: index.docbook:139
+msgid "First, you must configure the appropriate event listeners, to enable the use of JAAS authorization."
+msgstr ""
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<listener type=\"pre-delete\" class=\"org.hibernate.secure.JACCPreDeleteEventListener\"/>\n"
+ "<listener type=\"pre-update\" class=\"org.hibernate.secure.JACCPreUpdateEventListener\"/>\n"
+ "<listener type=\"pre-insert\" class=\"org.hibernate.secure.JACCPreInsertEventListener\"/>\n"
+ "<listener type=\"pre-load\" class=\"org.hibernate.secure.JACCPreLoadEventListener\"/>]]>"
+msgstr ""
+
+#: index.docbook:146
+msgid "Note that <literal><listener type=\"...\" class=\"...\"/></literal> is just a shorthand for <literal><event type=\"...\"><listener class=\"...\"/></event></literal> when there is exactly one listener for a particular event type."
+msgstr ""
+
+#: index.docbook:152
+msgid "Next, still in <literal>hibernate.cfg.xml</literal>, bind the permissions to roles:"
+msgstr ""
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[<grant role=\"admin\" entity-name=\"User\" actions=\"insert,update,read\"/>\n"
+ "<grant role=\"su\" entity-name=\"User\" actions=\"*\"/>]]>"
+msgstr ""
+
+#: index.docbook:158
+msgid "The role names are the roles understood by your JACC provider."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/example_mappings.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/example_mappings.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/example_mappings.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,653 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Example: Various Mappings"
+msgstr ""
+
+#: index.docbook:22
+msgid "This chapters shows off some more complex association mappings."
+msgstr ""
+
+#: index.docbook:27
+msgid "Employer/Employee"
+msgstr ""
+
+#: index.docbook:29
+msgid "The following model of the relationship between <literal>Employer</literal> and <literal>Employee</literal> uses an actual entity class (<literal>Employment</literal>) to represent the association. This is done because there might be more than one period of employment for the same two parties. Components are used to model monetary values and employee names."
+msgstr ""
+
+#: index.docbook:46
+msgid "Heres a possible mapping document:"
+msgstr ""
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " \n"
+ " <class name=\"Employer\" table=\"employers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employer_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employment\" table=\"employment_periods\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employment_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"startDate\" column=\"start_date\"/>\n"
+ " <property name=\"endDate\" column=\"end_date\"/>\n"
+ "\n"
+ " <component name=\"hourlyRate\" class=\"MonetaryAmount\">\n"
+ " <property name=\"amount\">\n"
+ " <column name=\"hourly_rate\" sql-type=\"NUMERIC(12, 2)\"/>\n"
+ " </property>\n"
+ " <property name=\"currency\" length=\"12\"/>\n"
+ " </component>\n"
+ "\n"
+ " <many-to-one name=\"employer\" column=\"employer_id\" not-null=\"true\"/>\n"
+ " <many-to-one name=\"employee\" column=\"employee_id\" not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Employee\" table=\"employees\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"sequence\">\n"
+ " <param name=\"sequence\">employee_id_seq</param>\n"
+ " </generator>\n"
+ " </id>\n"
+ " <property name=\"taxfileNumber\"/>\n"
+ " <component name=\"name\" class=\"Name\">\n"
+ " <property name=\"firstName\"/>\n"
+ " <property name=\"initial\"/>\n"
+ " <property name=\"lastName\"/>\n"
+ " </component>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:52
+msgid "And heres the table schema generated by <literal>SchemaExport</literal>."
+msgstr ""
+
+#: index.docbook:56
+msgid ""
+ "<![CDATA[create table employers (\n"
+ " id BIGINT not null, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employment_periods (\n"
+ " id BIGINT not null,\n"
+ " hourly_rate NUMERIC(12, 2),\n"
+ " currency VARCHAR(12), \n"
+ " employee_id BIGINT not null, \n"
+ " employer_id BIGINT not null, \n"
+ " end_date TIMESTAMP, \n"
+ " start_date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table employees (\n"
+ " id BIGINT not null, \n"
+ " firstName VARCHAR(255), \n"
+ " initial CHAR(1), \n"
+ " lastName VARCHAR(255), \n"
+ " taxfileNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK0 foreign key (employer_id) references employers\n"
+ "alter table employment_periods \n"
+ " add constraint employment_periodsFK1 foreign key (employee_id) references employees\n"
+ "create sequence employee_id_seq\n"
+ "create sequence employment_id_seq\n"
+ "create sequence employer_id_seq]]>"
+msgstr ""
+
+#: index.docbook:61
+msgid "Author/Work"
+msgstr ""
+
+#: index.docbook:63
+msgid "Consider the following model of the relationships between <literal>Work</literal>, <literal>Author</literal> and <literal>Person</literal>. We represent the relationship between <literal>Work</literal> and <literal>Author</literal> as a many-to-many association. We choose to represent the relationship between <literal>Author</literal> and <literal>Person</literal> as one-to-one association. Another possibility would be to have <literal>Author</literal> extend <literal>Person</literal>."
+msgstr ""
+
+#: index.docbook:81
+msgid "The following mapping document correctly represents these relationships:"
+msgstr ""
+
+#: index.docbook:85
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Work\" table=\"works\" discriminator-value=\"W\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"type\" type=\"character\"/>\n"
+ "\n"
+ " <property name=\"title\"/>\n"
+ " <set name=\"authors\" table=\"author_work\">\n"
+ " <key column name=\"work_id\"/>\n"
+ " <many-to-many class=\"Author\" column name=\"author_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " <subclass name=\"Book\" discriminator-value=\"B\">\n"
+ " <property name=\"text\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " <subclass name=\"Song\" discriminator-value=\"S\">\n"
+ " <property name=\"tempo\"/>\n"
+ " <property name=\"genre\"/>\n"
+ " </subclass>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Author\" table=\"authors\">\n"
+ "\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <!-- The Author must have the same identifier as the Person -->\n"
+ " <generator class=\"assigned\"/> \n"
+ " </id>\n"
+ "\n"
+ " <property name=\"alias\"/>\n"
+ " <one-to-one name=\"person\" constrained=\"true\"/>\n"
+ "\n"
+ " <set name=\"works\" table=\"author_work\" inverse=\"true\">\n"
+ " <key column=\"author_id\"/>\n"
+ " <many-to-many class=\"Work\" column=\"work_id\"/>\n"
+ " </set>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Person\" table=\"persons\">\n"
+ " <id name=\"id\" column=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:87
+msgid "There are four tables in this mapping. <literal>works</literal>, <literal>authors</literal> and <literal>persons</literal> hold work, author and person data respectively. <literal>author_work</literal> is an association table linking authors to works. Heres the table schema, as generated by <literal>SchemaExport</literal>."
+msgstr ""
+
+#: index.docbook:95
+msgid ""
+ "<![CDATA[create table works (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " tempo FLOAT, \n"
+ " genre VARCHAR(255), \n"
+ " text INTEGER, \n"
+ " title VARCHAR(255), \n"
+ " type CHAR(1) not null, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table author_work (\n"
+ " author_id BIGINT not null, \n"
+ " work_id BIGINT not null, \n"
+ " primary key (work_id, author_id)\n"
+ ")\n"
+ "\n"
+ "create table authors (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " alias VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table persons (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table authors \n"
+ " add constraint authorsFK0 foreign key (id) references persons\n"
+ "alter table author_work \n"
+ " add constraint author_workFK0 foreign key (author_id) references authors\n"
+ "alter table author_work\n"
+ " add constraint author_workFK1 foreign key (work_id) references works]]>"
+msgstr ""
+
+#: index.docbook:100
+msgid "Customer/Order/Product"
+msgstr ""
+
+#: index.docbook:102
+msgid "Now consider a model of the relationships between <literal>Customer</literal>, <literal>Order</literal> and <literal>LineItem</literal> and <literal>Product</literal>. There is a one-to-many association between <literal>Customer</literal> and <literal>Order</literal>, but how should we represent <literal>Order</literal> / <literal>LineItem</literal> / <literal>Product</literal>? I've chosen to map <literal>LineItem</literal> as an association class representing the many-to-many association between <literal>Order</literal> and <literal>Product</literal>. In Hibernate, this is called a composite element."
+msgstr ""
+
+#: index.docbook:122
+msgid "The mapping document:"
+msgstr ""
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"Customer\" table=\"customers\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\"/>\n"
+ " <set name=\"orders\" inverse=\"true\">\n"
+ " <key column=\"customer_id\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </set>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Order\" table=\"orders\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\"/>\n"
+ " <many-to-one name=\"customer\" column=\"customer_id\"/>\n"
+ " <list name=\"lineItems\" table=\"line_items\">\n"
+ " <key column=\"order_id\"/>\n"
+ " <list-index column=\"line_number\"/>\n"
+ " <composite-element class=\"LineItem\">\n"
+ " <property name=\"quantity\"/>\n"
+ " <many-to-one name=\"product\" column=\"product_id\"/>\n"
+ " </composite-element>\n"
+ " </list>\n"
+ " </class>\n"
+ "\n"
+ " <class name=\"Product\" table=\"products\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"serialNumber\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:128
+msgid "<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> and <literal>products</literal> hold customer, order, order line item and product data respectively. <literal>line_items</literal> also acts as an association table linking orders with products."
+msgstr ""
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[create table customers (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " name VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table orders (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " customer_id BIGINT, \n"
+ " date TIMESTAMP, \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "create table line_items (\n"
+ " line_number INTEGER not null, \n"
+ " order_id BIGINT not null, \n"
+ " product_id BIGINT, \n"
+ " quantity INTEGER, \n"
+ " primary key (order_id, line_number)\n"
+ ")\n"
+ "\n"
+ "create table products (\n"
+ " id BIGINT not null generated by default as identity, \n"
+ " serialNumber VARCHAR(255), \n"
+ " primary key (id)\n"
+ ")\n"
+ "\n"
+ "alter table orders \n"
+ " add constraint ordersFK0 foreign key (customer_id) references customers\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK0 foreign key (product_id) references products\n"
+ "alter table line_items\n"
+ " add constraint line_itemsFK1 foreign key (order_id) references orders]]>"
+msgstr ""
+
+#: index.docbook:140
+msgid "Miscellaneous example mappings"
+msgstr ""
+
+#: index.docbook:142
+msgid "These examples are all taken from the Hibernate test suite. You will find many other useful example mappings there. Look in the <literal>test</literal> folder of the Hibernate distribution."
+msgstr ""
+
+#: index.docbook:148
+msgid "TODO: put words around this stuff"
+msgstr ""
+
+#: index.docbook:151
+msgid "\"Typed\" one-to-one association"
+msgstr ""
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"name\"/>\n"
+ " <one-to-one name=\"address\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'HOME'</formula>\n"
+ " </one-to-one>\n"
+ " <one-to-one name=\"mailingAddress\" \n"
+ " cascade=\"all\">\n"
+ " <formula>name</formula>\n"
+ " <formula>'MAILING'</formula>\n"
+ " </one-to-one>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\" batch-size=\"2\" \n"
+ " check=\"addressType in ('MAILING', 'HOME', 'BUSINESS')\">\n"
+ " <composite-id>\n"
+ " <key-many-to-one name=\"person\" \n"
+ " column=\"personName\"/>\n"
+ " <key-property name=\"type\" \n"
+ " column=\"addressType\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"street\" type=\"text\"/>\n"
+ " <property name=\"state\"/>\n"
+ " <property name=\"zip\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:156
+msgid "Composite key example"
+msgstr ""
+
+#: index.docbook:157
+msgid ""
+ "<![CDATA[<class name=\"Customer\">\n"
+ "\n"
+ " <id name=\"customerId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\" not-null=\"true\" length=\"100\"/>\n"
+ " <property name=\"address\" not-null=\"true\" length=\"200\"/>\n"
+ "\n"
+ " <list name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key column=\"customerId\"/>\n"
+ " <index column=\"orderNumber\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </list>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Order\" table=\"CustomerOrder\" lazy=\"true\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ " <synchronize table=\"Product\"/>\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"Order$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"orderDate\" \n"
+ " type=\"calendar_date\"\n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <property name=\"total\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity*p.price) \n"
+ " from LineItem li, Product p \n"
+ " where li.productId = p.productId \n"
+ " and li.customerId = customerId \n"
+ " and li.orderNumber = orderNumber )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ " <many-to-one name=\"customer\"\n"
+ " column=\"customerId\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"/>\n"
+ " \n"
+ " <bag name=\"lineItems\"\n"
+ " fetch=\"join\" \n"
+ " inverse=\"true\"\n"
+ " cascade=\"save-update\">\n"
+ " <key>\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </key>\n"
+ " <one-to-many class=\"LineItem\"/>\n"
+ " </bag>\n"
+ " \n"
+ "</class>\n"
+ " \n"
+ "<class name=\"LineItem\">\n"
+ " \n"
+ " <composite-id name=\"id\" \n"
+ " class=\"LineItem$Id\">\n"
+ " <key-property name=\"customerId\" length=\"10\"/>\n"
+ " <key-property name=\"orderNumber\"/>\n"
+ " <key-property name=\"productId\" length=\"10\"/>\n"
+ " </composite-id>\n"
+ " \n"
+ " <property name=\"quantity\"/>\n"
+ " \n"
+ " <many-to-one name=\"order\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\">\n"
+ " <column name=\"customerId\"/>\n"
+ " <column name=\"orderNumber\"/>\n"
+ " </many-to-one>\n"
+ " \n"
+ " <many-to-one name=\"product\"\n"
+ " insert=\"false\"\n"
+ " update=\"false\" \n"
+ " not-null=\"true\"\n"
+ " column=\"productId\"/>\n"
+ " \n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Product\">\n"
+ " <synchronize table=\"LineItem\"/>\n"
+ "\n"
+ " <id name=\"productId\"\n"
+ " length=\"10\">\n"
+ " <generator class=\"assigned\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"description\" \n"
+ " not-null=\"true\" \n"
+ " length=\"200\"/>\n"
+ " <property name=\"price\" length=\"3\"/>\n"
+ " <property name=\"numberAvailable\"/>\n"
+ " \n"
+ " <property name=\"numberOrdered\">\n"
+ " <formula>\n"
+ " ( select sum(li.quantity) \n"
+ " from LineItem li \n"
+ " where li.productId = productId )\n"
+ " </formula>\n"
+ " </property>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:161
+msgid "Many-to-many with shared composite key attribute"
+msgstr ""
+
+#: index.docbook:162
+msgid ""
+ "<![CDATA[<class name=\"User\" table=\"`User`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <set name=\"groups\" table=\"UserGroup\">\n"
+ " <key>\n"
+ " <column name=\"userName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"Group\">\n"
+ " <column name=\"groupName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ " \n"
+ "<class name=\"Group\" table=\"`Group`\">\n"
+ " <composite-id>\n"
+ " <key-property name=\"name\"/>\n"
+ " <key-property name=\"org\"/>\n"
+ " </composite-id>\n"
+ " <property name=\"description\"/>\n"
+ " <set name=\"users\" table=\"UserGroup\" inverse=\"true\">\n"
+ " <key>\n"
+ " <column name=\"groupName\"/>\n"
+ " <column name=\"org\"/>\n"
+ " </key>\n"
+ " <many-to-many class=\"User\">\n"
+ " <column name=\"userName\"/>\n"
+ " <formula>org</formula>\n"
+ " </many-to-many>\n"
+ " </set>\n"
+ "</class>\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:166
+msgid "Content based discrimination"
+msgstr ""
+
+#: index.docbook:167
+msgid ""
+ "<![CDATA[<class name=\"Person\"\n"
+ " discriminator-value=\"P\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"person_id\" \n"
+ " unsaved-value=\"0\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " \n"
+ " \n"
+ " <discriminator \n"
+ " type=\"character\">\n"
+ " <formula>\n"
+ " case \n"
+ " when title is not null then 'E' \n"
+ " when salesperson is not null then 'C' \n"
+ " else 'P' \n"
+ " end\n"
+ " </formula>\n"
+ " </discriminator>\n"
+ "\n"
+ " <property name=\"name\" \n"
+ " not-null=\"true\"\n"
+ " length=\"80\"/>\n"
+ " \n"
+ " <property name=\"sex\" \n"
+ " not-null=\"true\"\n"
+ " update=\"false\"/>\n"
+ " \n"
+ " <component name=\"address\">\n"
+ " <property name=\"address\"/>\n"
+ " <property name=\"zip\"/>\n"
+ " <property name=\"country\"/>\n"
+ " </component>\n"
+ " \n"
+ " <subclass name=\"Employee\" \n"
+ " discriminator-value=\"E\">\n"
+ " <property name=\"title\"\n"
+ " length=\"20\"/>\n"
+ " <property name=\"salary\"/>\n"
+ " <many-to-one name=\"manager\"/>\n"
+ " </subclass>\n"
+ " \n"
+ " <subclass name=\"Customer\" \n"
+ " discriminator-value=\"C\">\n"
+ " <property name=\"comments\"/>\n"
+ " <many-to-one name=\"salesperson\"/>\n"
+ " </subclass>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:171
+msgid "Associations on alternate keys"
+msgstr ""
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " \n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ " \n"
+ " <property name=\"name\" length=\"100\"/>\n"
+ " \n"
+ " <one-to-one name=\"address\" \n"
+ " property-ref=\"person\"\n"
+ " cascade=\"all\"\n"
+ " fetch=\"join\"/>\n"
+ " \n"
+ " <set name=\"accounts\" \n"
+ " inverse=\"true\">\n"
+ " <key column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " <one-to-many class=\"Account\"/>\n"
+ " </set>\n"
+ " \n"
+ " <property name=\"userId\" length=\"8\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Address\">\n"
+ "\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"hilo\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"address\" length=\"300\"/>\n"
+ " <property name=\"zip\" length=\"5\"/>\n"
+ " <property name=\"country\" length=\"25\"/>\n"
+ " <many-to-one name=\"person\" unique=\"true\" not-null=\"true\"/>\n"
+ "\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Account\">\n"
+ " <id name=\"accountId\" length=\"32\">\n"
+ " <generator class=\"uuid\"/>\n"
+ " </id>\n"
+ " \n"
+ " <many-to-one name=\"user\"\n"
+ " column=\"userId\"\n"
+ " property-ref=\"userId\"/>\n"
+ " \n"
+ " <property name=\"type\" not-null=\"true\"/>\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/example_parentchild.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/example_parentchild.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/example_parentchild.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,287 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Parent/Child"
+msgstr ""
+
+#: index.docbook:7
+msgid "One of the very first things that new users try to do with Hibernate is to model a parent / child type relationship. There are two different approaches to this. For various reasons the most convenient approach, especially for new users, is to model both <literal>Parent</literal> and <literal>Child</literal> as entity classes with a <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a <literal><composite-element></literal>.) Now, it turns out that default semantics of a one to many association (in Hibernate) are much less close to the usual semantics of a parent / child relationship than those of a composite element mapping. We will explain how to use a <emphasis>bidirectional one to many association with cascades</emphasis> to model a parent / child relationship efficiently and elegantly. It's not at all difficult!"
+msgstr ""
+
+#: index.docbook:21
+msgid "A note about collections"
+msgstr ""
+
+#: index.docbook:23
+msgid "Hibernate collections are considered to be a logical part of their owning entity; never of the contained entities. This is a crucial distinction! It has the following consequences:"
+msgstr ""
+
+#: index.docbook:30
+msgid "When we remove / add an object from / to a collection, the version number of the collection owner is incremented."
+msgstr ""
+
+#: index.docbook:36
+msgid "If an object that was removed from a collection is an instance of a value type (eg, a composite element), that object will cease to be persistent and its state will be completely removed from the database. Likewise, adding a value type instance to the collection will cause its state to be immediately persistent."
+msgstr ""
+
+#: index.docbook:44
+msgid "On the other hand, if an entity is removed from a collection (a one-to-many or many-to-many association), it will not be deleted, by default. This behaviour is completely consistent - a change to the internal state of another entity should not cause the associated entity to vanish! Likewise, adding an entity to a collection does not cause that entity to become persistent, by default."
+msgstr ""
+
+#: index.docbook:54
+msgid "Instead, the default behaviour is that adding an entity to a collection merely creates a link between the two entities, while removing it removes the link. This is very appropriate for all sorts of cases. Where it is not appropriate at all is the case of a parent / child relationship, where the life of the child is bound to the life cycle of the parent."
+msgstr ""
+
+#: index.docbook:64
+msgid "Bidirectional one-to-many"
+msgstr ""
+
+#: index.docbook:66
+msgid "Suppose we start with a simple <literal><one-to-many></literal> association from <literal>Parent</literal> to <literal>Child</literal>."
+msgstr ""
+
+#: index.docbook:71
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:73
+msgid "If we were to execute the following code"
+msgstr ""
+
+#: index.docbook:77
+msgid ""
+ "<![CDATA[Parent p = .....;\n"
+ "Child c = new Child();\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:79
+msgid "Hibernate would issue two SQL statements:"
+msgstr ""
+
+#: index.docbook:85
+msgid "an <literal>INSERT</literal> to create the record for <literal>c</literal>"
+msgstr ""
+
+#: index.docbook:88
+msgid "an <literal>UPDATE</literal> to create the link from <literal>p</literal> to <literal>c</literal>"
+msgstr ""
+
+#: index.docbook:95
+msgid "This is not only inefficient, but also violates any <literal>NOT NULL</literal> constraint on the <literal>parent_id</literal> column. We can fix the nullability constraint violation by specifying <literal>not-null=\"true\"</literal> in the collection mapping:"
+msgstr ""
+
+#: index.docbook:101
+msgid ""
+ "<![CDATA[<set name=\"children\">\n"
+ " <key column=\"parent_id\" not-null=\"true\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:103
+msgid "However, this is not the recommended solution."
+msgstr ""
+
+#: index.docbook:106
+msgid "The underlying cause of this behaviour is that the link (the foreign key <literal>parent_id</literal>) from <literal>p</literal> to <literal>c</literal> is not considered part of the state of the <literal>Child</literal> object and is therefore not created in the <literal>INSERT</literal>. So the solution is to make the link part of the <literal>Child</literal> mapping."
+msgstr ""
+
+#: index.docbook:113
+msgid "<![CDATA[<many-to-one name=\"parent\" column=\"parent_id\" not-null=\"true\"/>]]>"
+msgstr ""
+
+#: index.docbook:115
+msgid "(We also need to add the <literal>parent</literal> property to the <literal>Child</literal> class.)"
+msgstr ""
+
+#: index.docbook:119
+msgid "Now that the <literal>Child</literal> entity is managing the state of the link, we tell the collection not to update the link. We use the <literal>inverse</literal> attribute."
+msgstr ""
+
+#: index.docbook:124
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:126
+msgid "The following code would be used to add a new <literal>Child</literal>"
+msgstr ""
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:132
+msgid "And now, only one SQL <literal>INSERT</literal> would be issued!"
+msgstr ""
+
+#: index.docbook:136
+msgid "To tighten things up a bit, we could create an <literal>addChild()</literal> method of <literal>Parent</literal>."
+msgstr ""
+
+#: index.docbook:141
+msgid ""
+ "<![CDATA[public void addChild(Child c) {\n"
+ " c.setParent(this);\n"
+ " children.add(c);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:143
+msgid "Now, the code to add a <literal>Child</literal> looks like"
+msgstr ""
+
+#: index.docbook:147
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.save(c);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:152
+msgid "Cascading life cycle"
+msgstr ""
+
+#: index.docbook:154
+msgid "The explicit call to <literal>save()</literal> is still annoying. We will address this by using cascades."
+msgstr ""
+
+#: index.docbook:159
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:161
+msgid "This simplifies the code above to"
+msgstr ""
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = new Child();\n"
+ "p.addChild(c);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:167
+msgid "Similarly, we don't need to iterate over the children when saving or deleting a <literal>Parent</literal>. The following removes <literal>p</literal> and all its children from the database."
+msgstr ""
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "session.delete(p);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:174
+msgid "However, this code"
+msgstr ""
+
+#: index.docbook:178
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "c.setParent(null);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:180
+msgid "will not remove <literal>c</literal> from the database; it will ony remove the link to <literal>p</literal> (and cause a <literal>NOT NULL</literal> constraint violation, in this case). You need to explicitly <literal>delete()</literal> the <literal>Child</literal>."
+msgstr ""
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[Parent p = (Parent) session.load(Parent.class, pid);\n"
+ "Child c = (Child) p.getChildren().iterator().next();\n"
+ "p.getChildren().remove(c);\n"
+ "session.delete(c);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:188
+msgid "Now, in our case, a <literal>Child</literal> can't really exist without its parent. So if we remove a <literal>Child</literal> from the collection, we really do want it to be deleted. For this, we must use <literal>cascade=\"all-delete-orphan\"</literal>."
+msgstr ""
+
+#: index.docbook:194
+msgid ""
+ "<![CDATA[<set name=\"children\" inverse=\"true\" cascade=\"all-delete-orphan\">\n"
+ " <key column=\"parent_id\"/>\n"
+ " <one-to-many class=\"Child\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:196
+msgid "Note: even though the collection mapping specifies <literal>inverse=\"true\"</literal>, cascades are still processed by iterating the collection elements. So if you require that an object be saved, deleted or updated by cascade, you must add it to the collection. It is not enough to simply call <literal>setParent()</literal>."
+msgstr ""
+
+#: index.docbook:206
+msgid "Cascades and <literal>unsaved-value</literal>"
+msgstr ""
+
+#: index.docbook:208
+msgid "Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</literal>, made some changes in a UI action and wish to persist these changes in a new session by calling <literal>update()</literal>. The <literal>Parent</literal> will contain a collection of childen and, since cascading update is enabled, Hibernate needs to know which children are newly instantiated and which represent existing rows in the database. Lets assume that both <literal>Parent</literal> and <literal>Child</literal> have genenerated identifier properties of type <literal>Long</literal>. Hibernate will use the identifier and version/timestamp property value to determine which of the children are new. (See <xref linkend=\"objectstate-saveorupdate\"/>.) <emphasis>In Hibernate3, it is no longer necessary to specify an <literal>unsaved-value</literal> explicitly.</emphasis>"
+msgstr ""
+
+#: index.docbook:220
+msgid "The following code will update <literal>parent</literal> and <literal>child</literal> and insert <literal>newChild</literal>."
+msgstr ""
+
+#: index.docbook:225
+msgid ""
+ "<![CDATA[//parent and child were both loaded in a previous session\n"
+ "parent.addChild(child);\n"
+ "Child newChild = new Child();\n"
+ "parent.addChild(newChild);\n"
+ "session.update(parent);\n"
+ "session.flush();]]>"
+msgstr ""
+
+#: index.docbook:227
+msgid "Well, that's all very well for the case of a generated identifier, but what about assigned identifiers and composite identifiers? This is more difficult, since Hibernate can't use the identifier property to distinguish between a newly instantiated object (with an identifier assigned by the user) and an object loaded in a previous session. In this case, Hibernate will either use the timestamp or version property, or will actually query the second-level cache or, worst case, the database, to see if the row exists."
+msgstr ""
+
+#: index.docbook:260
+msgid "Conclusion"
+msgstr ""
+
+#: index.docbook:262
+msgid "There is quite a bit to digest here and it might look confusing first time around. However, in practice, it all works out very nicely. Most Hibernate applications use the parent / child pattern in many places."
+msgstr ""
+
+#: index.docbook:267
+msgid "We mentioned an alternative in the first paragraph. None of the above issues exist in the case of <literal><composite-element></literal> mappings, which have exactly the semantics of a parent / child relationship. Unfortunately, there are two big limitations to composite element classes: composite elements may not own collections, and they should not be the child of any entity other than the unique parent."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/example_weblog.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/example_weblog.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/example_weblog.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,450 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Example: Weblog Application"
+msgstr ""
+
+#: index.docbook:8
+msgid "Persistent Classes"
+msgstr ""
+
+#: index.docbook:10
+msgid "The persistent classes represent a weblog, and an item posted in a weblog. They are to be modelled as a standard parent/child relationship, but we will use an ordered bag, instead of a set."
+msgstr ""
+
+#: index.docbook:16
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.List;\n"
+ "\n"
+ "public class Blog {\n"
+ " private Long _id;\n"
+ " private String _name;\n"
+ " private List _items;\n"
+ "\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public List getItems() {\n"
+ " return _items;\n"
+ " }\n"
+ " public String getName() {\n"
+ " return _name;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setItems(List list) {\n"
+ " _items = list;\n"
+ " }\n"
+ " public void setName(String string) {\n"
+ " _name = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:18
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.text.DateFormat;\n"
+ "import java.util.Calendar;\n"
+ "\n"
+ "public class BlogItem {\n"
+ " private Long _id;\n"
+ " private Calendar _datetime;\n"
+ " private String _text;\n"
+ " private String _title;\n"
+ " private Blog _blog;\n"
+ "\n"
+ " public Blog getBlog() {\n"
+ " return _blog;\n"
+ " }\n"
+ " public Calendar getDatetime() {\n"
+ " return _datetime;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return _id;\n"
+ " }\n"
+ " public String getText() {\n"
+ " return _text;\n"
+ " }\n"
+ " public String getTitle() {\n"
+ " return _title;\n"
+ " }\n"
+ " public void setBlog(Blog blog) {\n"
+ " _blog = blog;\n"
+ " }\n"
+ " public void setDatetime(Calendar calendar) {\n"
+ " _datetime = calendar;\n"
+ " }\n"
+ " public void setId(Long long1) {\n"
+ " _id = long1;\n"
+ " }\n"
+ " public void setText(String string) {\n"
+ " _text = string;\n"
+ " }\n"
+ " public void setTitle(String string) {\n"
+ " _title = string;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:23
+msgid "Hibernate Mappings"
+msgstr ""
+
+#: index.docbook:25
+msgid "The XML mappings should now be quite straightforward."
+msgstr ""
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"Blog\"\n"
+ " table=\"BLOGS\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " not-null=\"true\"\n"
+ " unique=\"true\"/>\n"
+ "\n"
+ " <bag\n"
+ " name=\"items\"\n"
+ " inverse=\"true\"\n"
+ " order-by=\"DATE_TIME\"\n"
+ " cascade=\"all\">\n"
+ "\n"
+ " <key column=\"BLOG_ID\"/>\n"
+ " <one-to-many class=\"BlogItem\"/>\n"
+ "\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:31
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping package=\"eg\">\n"
+ "\n"
+ " <class\n"
+ " name=\"BlogItem\"\n"
+ " table=\"BLOG_ITEMS\"\n"
+ " dynamic-update=\"true\">\n"
+ "\n"
+ " <id\n"
+ " name=\"id\"\n"
+ " column=\"BLOG_ITEM_ID\">\n"
+ "\n"
+ " <generator class=\"native\"/>\n"
+ "\n"
+ " </id>\n"
+ "\n"
+ " <property\n"
+ " name=\"title\"\n"
+ " column=\"TITLE\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"text\"\n"
+ " column=\"TEXT\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <property\n"
+ " name=\"datetime\"\n"
+ " column=\"DATE_TIME\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " <many-to-one\n"
+ " name=\"blog\"\n"
+ " column=\"BLOG_ID\"\n"
+ " not-null=\"true\"/>\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:36
+msgid "Hibernate Code"
+msgstr ""
+
+#: index.docbook:38
+msgid "The following class demonstrates some of the kinds of things we can do with these classes, using Hibernate."
+msgstr ""
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "import java.util.ArrayList;\n"
+ "import java.util.Calendar;\n"
+ "import java.util.Iterator;\n"
+ "import java.util.List;\n"
+ "\n"
+ "import org.hibernate.HibernateException;\n"
+ "import org.hibernate.Query;\n"
+ "import org.hibernate.Session;\n"
+ "import org.hibernate.SessionFactory;\n"
+ "import org.hibernate.Transaction;\n"
+ "import org.hibernate.cfg.Configuration;\n"
+ "import org.hibernate.tool.hbm2ddl.SchemaExport;\n"
+ "\n"
+ "public class BlogMain {\n"
+ " \n"
+ " private SessionFactory _sessions;\n"
+ " \n"
+ " public void configure() throws HibernateException {\n"
+ " _sessions = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class)\n"
+ " .buildSessionFactory();\n"
+ " }\n"
+ " \n"
+ " public void exportTables() throws HibernateException {\n"
+ " Configuration cfg = new Configuration()\n"
+ " .addClass(Blog.class)\n"
+ " .addClass(BlogItem.class);\n"
+ " new SchemaExport(cfg).create(true, true);\n"
+ " }\n"
+ " \n"
+ " public Blog createBlog(String name) throws HibernateException {\n"
+ " \n"
+ " Blog blog = new Blog();\n"
+ " blog.setName(name);\n"
+ " blog.setItems( new ArrayList() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.persist(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Blog blog, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setBlog(blog);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " blog.getItems().add(item);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(blog);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public BlogItem createBlogItem(Long blogid, String title, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " BlogItem item = new BlogItem();\n"
+ " item.setTitle(title);\n"
+ " item.setText(text);\n"
+ " item.setDatetime( Calendar.getInstance() );\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Blog blog = (Blog) session.load(Blog.class, blogid);\n"
+ " item.setBlog(blog);\n"
+ " blog.getItems().add(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return item;\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(BlogItem item, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " item.setText(text);\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " session.update(item);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public void updateBlogItem(Long itemid, String text)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);\n"
+ " item.setText(text);\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " }\n"
+ " \n"
+ " public List listAllBlogNamesAndItemCounts(int max)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"select blog.id, blog.name, count(blogItem) \" +\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join blog.items as blogItem \" +\n"
+ " \"group by blog.name, blog.id \" +\n"
+ " \"order by max(blogItem.datetime)\"\n"
+ " );\n"
+ " q.setMaxResults(max);\n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ " \n"
+ " public Blog getBlogAndAllItems(Long blogid)\n"
+ " throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " Blog blog = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"left outer join fetch blog.items \" +\n"
+ " \"where blog.id = :blogid\"\n"
+ " );\n"
+ " q.setParameter(\"blogid\", blogid);\n"
+ " blog = (Blog) q.uniqueResult();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return blog;\n"
+ " }\n"
+ " \n"
+ " public List listBlogsAndRecentItems() throws HibernateException {\n"
+ " \n"
+ " Session session = _sessions.openSession();\n"
+ " Transaction tx = null;\n"
+ " List result = null;\n"
+ " try {\n"
+ " tx = session.beginTransaction();\n"
+ " Query q = session.createQuery(\n"
+ " \"from Blog as blog \" +\n"
+ " \"inner join blog.items as blogItem \" +\n"
+ " \"where blogItem.datetime > :minDate\"\n"
+ " );\n"
+ "\n"
+ " Calendar cal = Calendar.getInstance();\n"
+ " cal.roll(Calendar.MONTH, false);\n"
+ " q.setCalendar(\"minDate\", cal);\n"
+ " \n"
+ " result = q.list();\n"
+ " tx.commit();\n"
+ " }\n"
+ " catch (HibernateException he) {\n"
+ " if (tx!=null) tx.rollback();\n"
+ " throw he;\n"
+ " }\n"
+ " finally {\n"
+ " session.close();\n"
+ " }\n"
+ " return result;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/filters.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/filters.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/filters.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,149 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Filtering data"
+msgstr ""
+
+#: index.docbook:7
+msgid "Hibernate3 provides an innovative new approach to handling data with \"visibility\" rules. A <emphasis>Hibernate filter</emphasis> is a global, named, parameterized filter that may be enabled or disabled for a particular Hibernate session."
+msgstr ""
+
+#: index.docbook:14
+msgid "Hibernate filters"
+msgstr ""
+
+#: index.docbook:16
+msgid "Hibernate3 adds the ability to pre-define filter criteria and attach those filters at both a class and a collection level. A filter criteria is the ability to define a restriction clause very similiar to the existing \"where\" attribute available on the class and various collection elements. Except these filter conditions can be parameterized. The application can then make the decision at runtime whether given filters should be enabled and what their parameter values should be. Filters can be used like database views, but parameterized inside the application."
+msgstr ""
+
+#: index.docbook:26
+msgid "In order to use filters, they must first be defined and then attached to the appropriate mapping elements. To define a filter, use the <literal><filter-def/></literal> element within a <literal><hibernate-mapping/></literal> element:"
+msgstr ""
+
+#: index.docbook:32
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\">\n"
+ " <filter-param name=\"myFilterParam\" type=\"string\"/>\n"
+ "</filter-def>]]>"
+msgstr ""
+
+#: index.docbook:34
+msgid "Then, this filter can be attached to a class:"
+msgstr ""
+
+#: index.docbook:38
+msgid ""
+ "<![CDATA[<class name=\"myClass\" ...>\n"
+ " ...\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:40
+msgid "or, to a collection:"
+msgstr ""
+
+#: index.docbook:44
+msgid ""
+ "<![CDATA[<set ...>\n"
+ " <filter name=\"myFilter\" condition=\":myFilterParam = MY_FILTERED_COLUMN\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:46
+msgid "or, even to both (or multiples of each) at the same time."
+msgstr ""
+
+#: index.docbook:50
+msgid "The methods on <literal>Session</literal> are: <literal>enableFilter(String filterName)</literal>, <literal>getEnabledFilter(String filterName)</literal>, and <literal>disableFilter(String filterName)</literal>. By default, filters are <emphasis>not</emphasis> enabled for a given session; they must be explcitly enabled through use of the <literal>Session.enabledFilter()</literal> method, which returns an instance of the <literal>Filter</literal> interface. Using the simple filter defined above, this would look like:"
+msgstr ""
+
+#: index.docbook:59
+msgid "<![CDATA[session.enableFilter(\"myFilter\").setParameter(\"myFilterParam\", \"some-value\");]]>"
+msgstr ""
+
+#: index.docbook:61
+msgid "Note that methods on the org.hibernate.Filter interface do allow the method-chaining common to much of Hibernate."
+msgstr ""
+
+#: index.docbook:65
+msgid "A full example, using temporal data with an effective record date pattern:"
+msgstr ""
+
+#: index.docbook:69
+msgid ""
+ "<![CDATA[<filter-def name=\"effectiveDate\">\n"
+ " <filter-param name=\"asOfDate\" type=\"date\"/>\n"
+ "</filter-def>\n"
+ "\n"
+ "<class name=\"Employee\" ...>\n"
+ "...\n"
+ " <many-to-one name=\"department\" column=\"dept_id\" class=\"Department\"/>\n"
+ " <property name=\"effectiveStartDate\" type=\"date\" column=\"eff_start_dt\"/>\n"
+ " <property name=\"effectiveEndDate\" type=\"date\" column=\"eff_end_dt\"/>\n"
+ "...\n"
+ " <!--\n"
+ " Note that this assumes non-terminal records have an eff_end_dt set to\n"
+ " a max db date for simplicity-sake\n"
+ " -->\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"Department\" ...>\n"
+ "...\n"
+ " <set name=\"employees\" lazy=\"true\">\n"
+ " <key column=\"dept_id\"/>\n"
+ " <one-to-many class=\"Employee\"/>\n"
+ " <filter name=\"effectiveDate\"\n"
+ " condition=\":asOfDate BETWEEN eff_start_dt and eff_end_dt\"/>\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:71
+msgid "Then, in order to ensure that you always get back currently effective records, simply enable the filter on the session prior to retrieving employee data:"
+msgstr ""
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[Session session = ...;\n"
+ "session.enabledFilter(\"effectiveDate\").setParameter(\"asOfDate\", new Date());\n"
+ "List results = session.createQuery(\"from Employee as e where e.salary > :targetSalary\")\n"
+ " .setLong(\"targetSalary\", new Long(1000000))\n"
+ " .list();\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:78
+msgid "In the HQL above, even though we only explicitly mentioned a salary constraint on the results, because of the enabled filter the query will return only currently active employees who have a salary greater than a million dollars."
+msgstr ""
+
+#: index.docbook:84
+msgid "Note: if you plan on using filters with outer joining (either through HQL or load fetching) be careful of the direction of the condition expression. Its safest to set this up for left outer joining; in general, place the parameter first followed by the column name(s) after the operator."
+msgstr ""
+
+#: index.docbook:91
+msgid "After being defined a filter might be attached to multiple entities and/or collections each with its own condition. That can be tedious when the conditions are the same each time. Thus <literal><filter-def/></literal> allows defining a default condition, either as an attribute or CDATA:"
+msgstr ""
+
+#: index.docbook:98
+msgid ""
+ "<![CDATA[<filter-def name=\"myFilter\" condition=\"abc > xyz\">...</filter-def>\n"
+ "<filter-def name=\"myOtherFilter\">abc=xyz</filter-def>]]>"
+msgstr ""
+
+#: index.docbook:100
+msgid "This default condition will then be used whenever the filter is attached to something without specifying a condition. Note that this means you can give a specific condition as part of the attachment of the filter which overrides the default condition in that particular case."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/inheritance_mapping.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/inheritance_mapping.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/inheritance_mapping.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,477 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Inheritance Mapping"
+msgstr ""
+
+#: index.docbook:8
+msgid "The Three Strategies"
+msgstr ""
+
+#: index.docbook:10
+msgid "Hibernate supports the three basic inheritance mapping strategies:"
+msgstr ""
+
+#: index.docbook:16
+msgid "table per class hierarchy"
+msgstr ""
+
+#: index.docbook:21
+msgid "<para>table per subclass</para>"
+msgstr ""
+
+#: index.docbook:26
+msgid "table per concrete class"
+msgstr ""
+
+#: index.docbook:32
+msgid "In addition, Hibernate supports a fourth, slightly different kind of polymorphism:"
+msgstr ""
+
+#: index.docbook:39
+msgid "implicit polymorphism"
+msgstr ""
+
+#: index.docbook:45
+msgid "It is possible to use different mapping strategies for different branches of the same inheritance hierarchy, and then make use of implicit polymorphism to achieve polymorphism across the whole hierarchy. However, Hibernate does not support mixing <literal><subclass></literal>, and <literal><joined-subclass></literal> and <literal><union-subclass></literal> mappings under the same root <literal><class></literal> element. It is possible to mix together the table per hierarchy and table per subclass strategies, under the the same <literal><class></literal> element, by combining the <literal><subclass></literal> and <literal><join></literal> elements (see below)."
+msgstr ""
+
+#: index.docbook:59
+msgid "It is possible to define <literal>subclass</literal>, <literal>union-subclass</literal>, and <literal>joined-subclass</literal> mappings in separate mapping documents, directly beneath <literal>hibernate-mapping</literal>. This allows you to extend a class hierachy just by adding a new mapping file. You must specify an <literal>extends</literal> attribute in the subclass mapping, naming a previously mapped superclass. Note: Previously this feature made the ordering of the mapping documents important. Since Hibernate3, the ordering of mapping files does not matter when using the extends keyword. The ordering inside a single mapping file still needs to be defined as superclasses before subclasses."
+msgstr ""
+
+#: index.docbook:70
+msgid ""
+ "<![CDATA[\n"
+ " <hibernate-mapping>\n"
+ " <subclass name=\"DomesticCat\" extends=\"Cat\" discriminator-value=\"D\">\n"
+ " <property name=\"name\" type=\"string\"/>\n"
+ " </subclass>\n"
+ " </hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:74
+msgid "Table per class hierarchy"
+msgstr ""
+
+#: index.docbook:76
+msgid "Suppose we have an interface <literal>Payment</literal>, with implementors <literal>CreditCardPayment</literal>, <literal>CashPayment</literal>, <literal>ChequePayment</literal>. The table per hierarchy mapping would look like:"
+msgstr ""
+
+#: index.docbook:83
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:85
+msgid "Exactly one table is required. There is one big limitation of this mapping strategy: columns declared by the subclasses, such as <literal>CCTYPE</literal>, may not have <literal>NOT NULL</literal> constraints."
+msgstr ""
+
+#: index.docbook:94
+msgid "Table per subclass"
+msgstr ""
+
+#: index.docbook:96
+msgid "A table per subclass mapping would look like:"
+msgstr ""
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <joined-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:102
+msgid "Four tables are required. The three subclass tables have primary key associations to the superclass table (so the relational model is actually a one-to-one association)."
+msgstr ""
+
+#: index.docbook:111
+msgid "Table per subclass, using a discriminator"
+msgstr ""
+
+#: index.docbook:113
+msgid "Note that Hibernate's implementation of table per subclass requires no discriminator column. Other object/relational mappers use a different implementation of table per subclass which requires a type discriminator column in the superclass table. The approach taken by Hibernate is much more difficult to implement but arguably more correct from a relational point of view. If you would like to use a discriminator column with the table per subclass strategy, you may combine the use of <literal><subclass></literal> and <literal><join></literal>, as follow:"
+msgstr ""
+
+#: index.docbook:125
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " <join table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " <join table=\"CHEQUE_PAYMENT\" fetch=\"select\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:127
+msgid "The optional <literal>fetch=\"select\"</literal> declaration tells Hibernate not to fetch the <literal>ChequePayment</literal> subclass data using an outer join when querying the superclass."
+msgstr ""
+
+#: index.docbook:136
+msgid "Mixing table per class hierarchy with table per subclass"
+msgstr ""
+
+#: index.docbook:138
+msgid "You may even mix the table per hierarchy and table per subclass strategies using this approach:"
+msgstr ""
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[<class name=\"Payment\" table=\"PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"PAYMENT_TYPE\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"CreditCardPayment\" discriminator-value=\"CREDIT\">\n"
+ " <join table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </join>\n"
+ " </subclass>\n"
+ " <subclass name=\"CashPayment\" discriminator-value=\"CASH\">\n"
+ " ...\n"
+ " </subclass>\n"
+ " <subclass name=\"ChequePayment\" discriminator-value=\"CHEQUE\">\n"
+ " ...\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:145
+msgid "For any of these mapping strategies, a polymorphic association to the root <literal>Payment</literal> class is mapped using <literal><many-to-one></literal>."
+msgstr ""
+
+#: index.docbook:151
+msgid "<![CDATA[<many-to-one name=\"payment\" column=\"PAYMENT_ID\" class=\"Payment\"/>]]>"
+msgstr ""
+
+#: index.docbook:156
+msgid "Table per concrete class"
+msgstr ""
+
+#: index.docbook:158
+msgid "There are two ways we could go about mapping the table per concrete class strategy. The first is to use <literal><union-subclass></literal>."
+msgstr ""
+
+#: index.docbook:163
+msgid ""
+ "<![CDATA[<class name=\"Payment\">\n"
+ " <id name=\"id\" type=\"long\" column=\"PAYMENT_ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"AMOUNT\"/>\n"
+ " ...\n"
+ " <union-subclass name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <property name=\"creditCardType\" column=\"CCTYPE\"/>\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ " <union-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " ...\n"
+ " </union-subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:165
+msgid "Three tables are involved for the subclasses. Each table defines columns for all properties of the class, including inherited properties."
+msgstr ""
+
+#: index.docbook:170
+msgid "The limitation of this approach is that if a property is mapped on the superclass, the column name must be the same on all subclass tables. (We might relax this in a future release of Hibernate.) The identity generator strategy is not allowed in union subclass inheritance, indeed the primary key seed has to be shared accross all unioned subclasses of a hierarchy."
+msgstr ""
+
+#: index.docbook:179
+msgid "If your superclass is abstract, map it with <literal>abstract=\"true\"</literal>. Of course, if it is not abstract, an additional table (defaults to <literal>PAYMENT</literal> in the example above) is needed to hold instances of the superclass."
+msgstr ""
+
+#: index.docbook:189
+msgid "Table per concrete class, using implicit polymorphism"
+msgstr ""
+
+#: index.docbook:191
+msgid "An alternative approach is to make use of implicit polymorphism:"
+msgstr ""
+
+#: index.docbook:195
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CASH_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CHEQUE_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:197
+msgid "Notice that nowhere do we mention the <literal>Payment</literal> interface explicitly. Also notice that properties of <literal>Payment</literal> are mapped in each of the subclasses. If you want to avoid duplication, consider using XML entities (e.g. <literal>[ <!ENTITY allproperties SYSTEM \"allproperties.xml\"> ]</literal> in the <literal>DOCTYPE</literal> declartion and <literal>&allproperties;</literal> in the mapping)."
+msgstr ""
+
+#: index.docbook:207
+msgid "The disadvantage of this approach is that Hibernate does not generate SQL <literal>UNION</literal>s when performing polymorphic queries."
+msgstr ""
+
+#: index.docbook:212
+msgid "For this mapping strategy, a polymorphic association to <literal>Payment</literal> is usually mapped using <literal><any></literal>."
+msgstr ""
+
+#: index.docbook:217
+msgid ""
+ "<![CDATA[<any name=\"payment\" meta-type=\"string\" id-type=\"long\">\n"
+ " <meta-value value=\"CREDIT\" class=\"CreditCardPayment\"/>\n"
+ " <meta-value value=\"CASH\" class=\"CashPayment\"/>\n"
+ " <meta-value value=\"CHEQUE\" class=\"ChequePayment\"/>\n"
+ " <column name=\"PAYMENT_CLASS\"/>\n"
+ " <column name=\"PAYMENT_ID\"/>\n"
+ "</any>]]>"
+msgstr ""
+
+#: index.docbook:222
+msgid "Mixing implicit polymorphism with other inheritance mappings"
+msgstr ""
+
+#: index.docbook:224
+msgid "There is one further thing to notice about this mapping. Since the subclasses are each mapped in their own <literal><class></literal> element (and since <literal>Payment</literal> is just an interface), each of the subclasses could easily be part of another inheritance hierarchy! (And you can still use polymorphic queries against the <literal>Payment</literal> interface.)"
+msgstr ""
+
+#: index.docbook:232
+msgid ""
+ "<![CDATA[<class name=\"CreditCardPayment\" table=\"CREDIT_PAYMENT\">\n"
+ " <id name=\"id\" type=\"long\" column=\"CREDIT_PAYMENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <discriminator column=\"CREDIT_CARD\" type=\"string\"/>\n"
+ " <property name=\"amount\" column=\"CREDIT_AMOUNT\"/>\n"
+ " ...\n"
+ " <subclass name=\"MasterCardPayment\" discriminator-value=\"MDC\"/>\n"
+ " <subclass name=\"VisaPayment\" discriminator-value=\"VISA\"/>\n"
+ "</class>\n"
+ "\n"
+ "<class name=\"NonelectronicTransaction\" table=\"NONELECTRONIC_TXN\">\n"
+ " <id name=\"id\" type=\"long\" column=\"TXN_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " ...\n"
+ " <joined-subclass name=\"CashPayment\" table=\"CASH_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CASH_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ " <joined-subclass name=\"ChequePayment\" table=\"CHEQUE_PAYMENT\">\n"
+ " <key column=\"PAYMENT_ID\"/>\n"
+ " <property name=\"amount\" column=\"CHEQUE_AMOUNT\"/>\n"
+ " ...\n"
+ " </joined-subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:234
+msgid "Once again, we don't mention <literal>Payment</literal> explicitly. If we execute a query against the <literal>Payment</literal> interface - for example, <literal>from Payment</literal> - Hibernate automatically returns instances of <literal>CreditCardPayment</literal> (and its subclasses, since they also implement <literal>Payment</literal>), <literal>CashPayment</literal> and <literal>ChequePayment</literal> but not instances of <literal>NonelectronicTransaction</literal>."
+msgstr ""
+
+#: index.docbook:249
+msgid "Limitations"
+msgstr ""
+
+#: index.docbook:251
+msgid "There are certain limitations to the \"implicit polymorphism\" approach to the table per concrete-class mapping strategy. There are somewhat less restrictive limitations to <literal><union-subclass></literal> mappings."
+msgstr ""
+
+#: index.docbook:258
+msgid "The following table shows the limitations of table per concrete-class mappings, and of implicit polymorphism, in Hibernate."
+msgstr ""
+
+#: index.docbook:264
+msgid "Features of inheritance mappings"
+msgstr ""
+
+#: index.docbook:276
+msgid "Inheritance strategy"
+msgstr ""
+
+#: index.docbook:277
+msgid "Polymorphic many-to-one"
+msgstr ""
+
+#: index.docbook:278
+msgid "Polymorphic one-to-one"
+msgstr ""
+
+#: index.docbook:279
+msgid "Polymorphic one-to-many"
+msgstr ""
+
+#: index.docbook:280
+msgid "Polymorphic many-to-many"
+msgstr ""
+
+#: index.docbook:281
+msgid "Polymorphic <literal>load()/get()</literal>"
+msgstr ""
+
+#: index.docbook:282
+msgid "Polymorphic queries"
+msgstr ""
+
+#: index.docbook:283
+msgid "Polymorphic joins"
+msgstr ""
+
+#: index.docbook:284
+msgid "Outer join fetching"
+msgstr ""
+
+#: index.docbook:289
+msgid "table per class-hierarchy"
+msgstr ""
+
+#: index.docbook:290, index.docbook:301, index.docbook:312
+msgid "<many-to-one>"
+msgstr ""
+
+#: index.docbook:291, index.docbook:302, index.docbook:313
+msgid "<one-to-one>"
+msgstr ""
+
+#: index.docbook:292, index.docbook:303
+msgid "<one-to-many>"
+msgstr ""
+
+#: index.docbook:293, index.docbook:304, index.docbook:315
+msgid "<many-to-many>"
+msgstr ""
+
+#: index.docbook:294, index.docbook:305, index.docbook:316
+msgid "s.get(Payment.class, id)"
+msgstr ""
+
+#: index.docbook:295, index.docbook:306, index.docbook:317, index.docbook:328
+msgid "from Payment p"
+msgstr ""
+
+#: index.docbook:296, index.docbook:307, index.docbook:318
+msgid "from Order o join o.payment p"
+msgstr ""
+
+#: index.docbook:297, index.docbook:308, index.docbook:319
+msgid "supported"
+msgstr ""
+
+#: index.docbook:300
+msgid "<entry>table per subclass</entry>"
+msgstr ""
+
+#: index.docbook:311
+msgid "table per concrete-class (union-subclass)"
+msgstr ""
+
+#: index.docbook:314
+msgid "<literal><one-to-many></literal> (for <literal>inverse=\"true\"</literal> only)"
+msgstr ""
+
+#: index.docbook:322
+msgid "table per concrete class (implicit polymorphism)"
+msgstr ""
+
+#: index.docbook:323
+msgid "<any>"
+msgstr ""
+
+#: index.docbook:324, index.docbook:325, index.docbook:329, index.docbook:330
+msgid "not supported"
+msgstr ""
+
+#: index.docbook:326
+msgid "<many-to-any>"
+msgstr ""
+
+#: index.docbook:327
+msgid "s.createCriteria(Payment.class).add( Restrictions.idEq(id) ).uniqueResult()"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/performance.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/performance.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/performance.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1068 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Improving performance"
+msgstr ""
+
+#: index.docbook:8
+msgid "Fetching strategies"
+msgstr ""
+
+#: index.docbook:10
+msgid "A <emphasis>fetching strategy</emphasis> is the strategy Hibernate will use for retrieving associated objects if the application needs to navigate the association. Fetch strategies may be declared in the O/R mapping metadata, or over-ridden by a particular HQL or <literal>Criteria</literal> query."
+msgstr ""
+
+#: index.docbook:17
+msgid "Hibernate3 defines the following fetching strategies:"
+msgstr ""
+
+#: index.docbook:23
+msgid "<emphasis>Join fetching</emphasis> - Hibernate retrieves the associated instance or collection in the same <literal>SELECT</literal>, using an <literal>OUTER JOIN</literal>."
+msgstr ""
+
+#: index.docbook:30
+msgid "<emphasis>Select fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated entity or collection. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr ""
+
+#: index.docbook:39
+msgid "<emphasis>Subselect fetching</emphasis> - a second <literal>SELECT</literal> is used to retrieve the associated collections for all entities retrieved in a previous query or fetch. Unless you explicitly disable lazy fetching by specifying <literal>lazy=\"false\"</literal>, this second select will only be executed when you actually access the association."
+msgstr ""
+
+#: index.docbook:48
+msgid "<emphasis>Batch fetching</emphasis> - an optimization strategy for select fetching - Hibernate retrieves a batch of entity instances or collections in a single <literal>SELECT</literal>, by specifying a list of primary keys or foreign keys."
+msgstr ""
+
+#: index.docbook:57
+msgid "Hibernate also distinguishes between:"
+msgstr ""
+
+#: index.docbook:63
+msgid "<emphasis>Immediate fetching</emphasis> - an association, collection or attribute is fetched immediately, when the owner is loaded."
+msgstr ""
+
+#: index.docbook:69
+msgid "<emphasis>Lazy collection fetching</emphasis> - a collection is fetched when the application invokes an operation upon that collection. (This is the default for collections.)"
+msgstr ""
+
+#: index.docbook:76
+msgid "<emphasis>\"Extra-lazy\" collection fetching</emphasis> - individual elements of the collection are accessed from the database as needed. Hibernate tries not to fetch the whole collection into memory unless absolutely needed (suitable for very large collections)"
+msgstr ""
+
+#: index.docbook:84
+msgid "<emphasis>Proxy fetching</emphasis> - a single-valued association is fetched when a method other than the identifier getter is invoked upon the associated object."
+msgstr ""
+
+#: index.docbook:91
+msgid "<emphasis>\"No-proxy\" fetching</emphasis> - a single-valued association is fetched when the instance variable is accessed. Compared to proxy fetching, this approach is less lazy (the association is fetched even when only the identifier is accessed) but more transparent, since no proxy is visible to the application. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr ""
+
+#: index.docbook:101
+msgid "<emphasis>Lazy attribute fetching</emphasis> - an attribute or single valued association is fetched when the instance variable is accessed. This approach requires buildtime bytecode instrumentation and is rarely necessary."
+msgstr ""
+
+#: index.docbook:110
+msgid "We have two orthogonal notions here: <emphasis>when</emphasis> is the association fetched, and <emphasis>how</emphasis> is it fetched (what SQL is used). Don't confuse them! We use <literal>fetch</literal> to tune performance. We may use <literal>lazy</literal> to define a contract for what data is always available in any detached instance of a particular class."
+msgstr ""
+
+#: index.docbook:119
+msgid "Working with lazy associations"
+msgstr ""
+
+#: index.docbook:121
+msgid "By default, Hibernate3 uses lazy select fetching for collections and lazy proxy fetching for single-valued associations. These defaults make sense for almost all associations in almost all applications."
+msgstr ""
+
+#: index.docbook:127
+msgid "<emphasis>Note:</emphasis> if you set <literal>hibernate.default_batch_fetch_size</literal>, Hibernate will use the batch fetch optimization for lazy fetching (this optimization may also be enabled at a more granular level)."
+msgstr ""
+
+#: index.docbook:134
+msgid "However, lazy fetching poses one problem that you must be aware of. Access to a lazy association outside of the context of an open Hibernate session will result in an exception. For example:"
+msgstr ""
+
+#: index.docbook:140
+msgid ""
+ "<![CDATA[s = sessions.openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ " \n"
+ "User u = (User) s.createQuery(\"from User u where u.name=:userName\")\n"
+ " .setString(\"userName\", userName).uniqueResult();\n"
+ "Map permissions = u.getPermissions();\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();\n"
+ "\n"
+ "Integer accessLevel = (Integer) permissions.get(\"accounts\"); // Error!]]>"
+msgstr ""
+
+#: index.docbook:142
+msgid "Since the permissions collection was not initialized when the <literal>Session</literal> was closed, the collection will not be able to load its state. <emphasis>Hibernate does not support lazy initialization for detached objects</emphasis>. The fix is to move the code that reads from the collection to just before the transaction is committed."
+msgstr ""
+
+#: index.docbook:150
+msgid "Alternatively, we could use a non-lazy collection or association, by specifying <literal>lazy=\"false\"</literal> for the association mapping. However, it is intended that lazy initialization be used for almost all collections and associations. If you define too many non-lazy associations in your object model, Hibernate will end up needing to fetch the entire database into memory in every transaction!"
+msgstr ""
+
+#: index.docbook:159
+msgid "On the other hand, we often want to choose join fetching (which is non-lazy by nature) instead of select fetching in a particular transaction. We'll now see how to customize the fetching strategy. In Hibernate3, the mechanisms for choosing a fetch strategy are identical for single-valued associations and collections."
+msgstr ""
+
+#: index.docbook:170
+msgid "Tuning fetch strategies"
+msgstr ""
+
+#: index.docbook:172
+msgid "Select fetching (the default) is extremely vulnerable to N+1 selects problems, so we might want to enable join fetching in the mapping document:"
+msgstr ""
+
+#: index.docbook:177
+msgid ""
+ "<![CDATA[<set name=\"permissions\" \n"
+ " fetch=\"join\">\n"
+ " <key column=\"userId\"/>\n"
+ " <one-to-many class=\"Permission\"/>\n"
+ "</set]]>"
+msgstr ""
+
+#: index.docbook:179
+msgid "<![CDATA[<many-to-one name=\"mother\" class=\"Cat\" fetch=\"join\"/>]]>"
+msgstr ""
+
+#: index.docbook:181
+msgid "The <literal>fetch</literal> strategy defined in the mapping document affects:"
+msgstr ""
+
+#: index.docbook:187
+msgid "retrieval via <literal>get()</literal> or <literal>load()</literal>"
+msgstr ""
+
+#: index.docbook:192
+msgid "retrieval that happens implicitly when an association is navigated"
+msgstr ""
+
+#: index.docbook:197
+msgid "<literal>Criteria</literal> queries"
+msgstr ""
+
+#: index.docbook:202
+msgid "HQL queries if <literal>subselect</literal> fetching is used"
+msgstr ""
+
+#: index.docbook:208
+msgid "No matter what fetching strategy you use, the defined non-lazy graph is guaranteed to be loaded into memory. Note that this might result in several immediate selects being used to execute a particular HQL query."
+msgstr ""
+
+#: index.docbook:214
+msgid "Usually, we don't use the mapping document to customize fetching. Instead, we keep the default behavior, and override it for a particular transaction, using <literal>left join fetch</literal> in HQL. This tells Hibernate to fetch the association eagerly in the first select, using an outer join. In the <literal>Criteria</literal> query API, you would use <literal>setFetchMode(FetchMode.JOIN)</literal>."
+msgstr ""
+
+#: index.docbook:223
+msgid "If you ever feel like you wish you could change the fetching strategy used by <literal>get()</literal> or <literal>load()</literal>, simply use a <literal>Criteria</literal> query, for example:"
+msgstr ""
+
+#: index.docbook:229
+msgid ""
+ "<![CDATA[User user = (User) session.createCriteria(User.class)\n"
+ " .setFetchMode(\"permissions\", FetchMode.JOIN)\n"
+ " .add( Restrictions.idEq(userId) )\n"
+ " .uniqueResult();]]>"
+msgstr ""
+
+#: index.docbook:231
+msgid "(This is Hibernate's equivalent of what some ORM solutions call a \"fetch plan\".)"
+msgstr ""
+
+#: index.docbook:235
+msgid "A completely different way to avoid problems with N+1 selects is to use the second-level cache."
+msgstr ""
+
+#: index.docbook:243
+msgid "Single-ended association proxies"
+msgstr ""
+
+#: index.docbook:245
+msgid "Lazy fetching for collections is implemented using Hibernate's own implementation of persistent collections. However, a different mechanism is needed for lazy behavior in single-ended associations. The target entity of the association must be proxied. Hibernate implements lazy initializing proxies for persistent objects using runtime bytecode enhancement (via the excellent CGLIB library)."
+msgstr ""
+
+#: index.docbook:253
+msgid "By default, Hibernate3 generates proxies (at startup) for all persistent classes and uses them to enable lazy fetching of <literal>many-to-one</literal> and <literal>one-to-one</literal> associations."
+msgstr ""
+
+#: index.docbook:259
+msgid "The mapping file may declare an interface to use as the proxy interface for that class, with the <literal>proxy</literal> attribute. By default, Hibernate uses a subclass of the class. <emphasis>Note that the proxied class must implement a default constructor with at least package visibility. We recommend this constructor for all persistent classes!</emphasis>"
+msgstr ""
+
+#: index.docbook:266
+msgid "There are some gotchas to be aware of when extending this approach to polymorphic classes, eg."
+msgstr ""
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[<class name=\"Cat\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:273
+msgid "Firstly, instances of <literal>Cat</literal> will never be castable to <literal>DomesticCat</literal>, even if the underlying instance is an instance of <literal>DomesticCat</literal>:"
+msgstr ""
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)\n"
+ "if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy\n"
+ " DomesticCat dc = (DomesticCat) cat; // Error!\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:281
+msgid "Secondly, it is possible to break proxy <literal>==</literal>."
+msgstr ""
+
+#: index.docbook:285
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy\n"
+ "DomesticCat dc = \n"
+ " (DomesticCat) session.load(DomesticCat.class, id); // acquire new DomesticCat proxy!\n"
+ "System.out.println(cat==dc); // false]]>"
+msgstr ""
+
+#: index.docbook:287
+msgid "However, the situation is not quite as bad as it looks. Even though we now have two references to different proxy objects, the underlying instance will still be the same object:"
+msgstr ""
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy\n"
+ "System.out.println( dc.getWeight() ); // 11.0]]>"
+msgstr ""
+
+#: index.docbook:294
+msgid "Third, you may not use a CGLIB proxy for a <literal>final</literal> class or a class with any <literal>final</literal> methods."
+msgstr ""
+
+#: index.docbook:299
+msgid "Finally, if your persistent object acquires any resources upon instantiation (eg. in initializers or default constructor), then those resources will also be acquired by the proxy. The proxy class is an actual subclass of the persistent class."
+msgstr ""
+
+#: index.docbook:305
+msgid "These problems are all due to fundamental limitations in Java's single inheritance model. If you wish to avoid these problems your persistent classes must each implement an interface that declares its business methods. You should specify these interfaces in the mapping file. eg."
+msgstr ""
+
+#: index.docbook:311
+msgid ""
+ "<![CDATA[<class name=\"CatImpl\" proxy=\"Cat\">\n"
+ " ......\n"
+ " <subclass name=\"DomesticCatImpl\" proxy=\"DomesticCat\">\n"
+ " .....\n"
+ " </subclass>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:313
+msgid "where <literal>CatImpl</literal> implements the interface <literal>Cat</literal> and <literal>DomesticCatImpl</literal> implements the interface <literal>DomesticCat</literal>. Then proxies for instances of <literal>Cat</literal> and <literal>DomesticCat</literal> may be returned by <literal>load()</literal> or <literal>iterate()</literal>. (Note that <literal>list()</literal> does not usually return proxies.)"
+msgstr ""
+
+#: index.docbook:321
+msgid ""
+ "<![CDATA[Cat cat = (Cat) session.load(CatImpl.class, catid);\n"
+ "Iterator iter = session.createQuery(\"from CatImpl as cat where cat.name='fritz'\").iterate();\n"
+ "Cat fritz = (Cat) iter.next();]]>"
+msgstr ""
+
+#: index.docbook:323
+msgid "Relationships are also lazily initialized. This means you must declare any properties to be of type <literal>Cat</literal>, not <literal>CatImpl</literal>."
+msgstr ""
+
+#: index.docbook:328
+msgid "Certain operations do <emphasis>not</emphasis> require proxy initialization"
+msgstr ""
+
+#: index.docbook:334
+msgid "<literal>equals()</literal>, if the persistent class does not override <literal>equals()</literal>"
+msgstr ""
+
+#: index.docbook:340
+msgid "<literal>hashCode()</literal>, if the persistent class does not override <literal>hashCode()</literal>"
+msgstr ""
+
+#: index.docbook:346
+msgid "The identifier getter method"
+msgstr ""
+
+#: index.docbook:352
+msgid "Hibernate will detect persistent classes that override <literal>equals()</literal> or <literal>hashCode()</literal>."
+msgstr ""
+
+#: index.docbook:357
+msgid "By choosing <literal>lazy=\"no-proxy\"</literal> instead of the default <literal>lazy=\"proxy\"</literal>, we can avoid the problems associated with typecasting. However, we will require buildtime bytecode instrumentation, and all operations will result in immediate proxy initialization."
+msgstr ""
+
+#: index.docbook:367
+msgid "Initializing collections and proxies"
+msgstr ""
+
+#: index.docbook:369
+msgid "A <literal>LazyInitializationException</literal> will be thrown by Hibernate if an uninitialized collection or proxy is accessed outside of the scope of the <literal>Session</literal>, ie. when the entity owning the collection or having the reference to the proxy is in the detached state."
+msgstr ""
+
+#: index.docbook:375
+msgid "Sometimes we need to ensure that a proxy or collection is initialized before closing the <literal>Session</literal>. Of course, we can alway force initialization by calling <literal>cat.getSex()</literal> or <literal>cat.getKittens().size()</literal>, for example. But that is confusing to readers of the code and is not convenient for generic code."
+msgstr ""
+
+#: index.docbook:382
+msgid "The static methods <literal>Hibernate.initialize()</literal> and <literal>Hibernate.isInitialized()</literal> provide the application with a convenient way of working with lazily initialized collections or proxies. <literal>Hibernate.initialize(cat)</literal> will force the initialization of a proxy, <literal>cat</literal>, as long as its <literal>Session</literal> is still open. <literal>Hibernate.initialize( cat.getKittens() )</literal> has a similar effect for the collection of kittens."
+msgstr ""
+
+#: index.docbook:391
+msgid "Another option is to keep the <literal>Session</literal> open until all needed collections and proxies have been loaded. In some application architectures, particularly where the code that accesses data using Hibernate, and the code that uses it are in different application layers or different physical processes, it can be a problem to ensure that the <literal>Session</literal> is open when a collection is initialized. There are two basic ways to deal with this issue:"
+msgstr ""
+
+#: index.docbook:402
+msgid "In a web-based application, a servlet filter can be used to close the <literal>Session</literal> only at the very end of a user request, once the rendering of the view is complete (the <emphasis>Open Session in View</emphasis> pattern). Of course, this places heavy demands on the correctness of the exception handling of your application infrastructure. It is vitally important that the <literal>Session</literal> is closed and the transaction ended before returning to the user, even when an exception occurs during rendering of the view. See the Hibernate Wiki for examples of this \"Open Session in View\" pattern."
+msgstr ""
+
+#: index.docbook:415
+msgid "In an application with a separate business tier, the business logic must \"prepare\" all collections that will be needed by the web tier before returning. This means that the business tier should load all the data and return all the data already initialized to the presentation/web tier that is required for a particular use case. Usually, the application calls <literal>Hibernate.initialize()</literal> for each collection that will be needed in the web tier (this call must occur before the session is closed) or retrieves the collection eagerly using a Hibernate query with a <literal>FETCH</literal> clause or a <literal>FetchMode.JOIN</literal> in <literal>Criteria</literal>. This is usually easier if you adopt the <emphasis>Command</emphasis> pattern instead of a <emphasis>Session Facade</emphasis>."
+msgstr ""
+
+#: index.docbook:430
+msgid "You may also attach a previously loaded object to a new <literal>Session</literal> with <literal>merge()</literal> or <literal>lock()</literal> before accessing uninitialized collections (or other proxies). No, Hibernate does not, and certainly <emphasis>should</emphasis> not do this automatically, since it would introduce ad hoc transaction semantics!"
+msgstr ""
+
+#: index.docbook:440
+msgid "Sometimes you don't want to initialize a large collection, but still need some information about it (like its size) or a subset of the data."
+msgstr ""
+
+#: index.docbook:445
+msgid "You can use a collection filter to get the size of a collection without initializing it:"
+msgstr ""
+
+#: index.docbook:449
+msgid "<![CDATA[( (Integer) s.createFilter( collection, \"select count(*)\" ).list().get(0) ).intValue()]]>"
+msgstr ""
+
+#: index.docbook:451
+msgid "The <literal>createFilter()</literal> method is also used to efficiently retrieve subsets of a collection without needing to initialize the whole collection:"
+msgstr ""
+
+#: index.docbook:456
+msgid "<![CDATA[s.createFilter( lazyCollection, \"\").setFirstResult(0).setMaxResults(10).list();]]>"
+msgstr ""
+
+#: index.docbook:461
+msgid "Using batch fetching"
+msgstr ""
+
+#: index.docbook:463
+msgid "Hibernate can make efficient use of batch fetching, that is, Hibernate can load several uninitialized proxies if one proxy is accessed (or collections. Batch fetching is an optimization of the lazy select fetching strategy. There are two ways you can tune batch fetching: on the class and the collection level."
+msgstr ""
+
+#: index.docbook:469
+msgid "Batch fetching for classes/entities is easier to understand. Imagine you have the following situation at runtime: You have 25 <literal>Cat</literal> instances loaded in a <literal>Session</literal>, each <literal>Cat</literal> has a reference to its <literal>owner</literal>, a <literal>Person</literal>. The <literal>Person</literal> class is mapped with a proxy, <literal>lazy=\"true\"</literal>. If you now iterate through all cats and call <literal>getOwner()</literal> on each, Hibernate will by default execute 25 <literal>SELECT</literal> statements, to retrieve the proxied owners. You can tune this behavior by specifying a <literal>batch-size</literal> in the mapping of <literal>Person</literal>:"
+msgstr ""
+
+#: index.docbook:479
+msgid "<![CDATA[<class name=\"Person\" batch-size=\"10\">...</class>]]>"
+msgstr ""
+
+#: index.docbook:481
+msgid "Hibernate will now execute only three queries, the pattern is 10, 10, 5."
+msgstr ""
+
+#: index.docbook:485
+msgid "You may also enable batch fetching of collections. For example, if each <literal>Person</literal> has a lazy collection of <literal>Cat</literal>s, and 10 persons are currently loaded in the <literal>Sesssion</literal>, iterating through all persons will generate 10 <literal>SELECT</literal>s, one for every call to <literal>getCats()</literal>. If you enable batch fetching for the <literal>cats</literal> collection in the mapping of <literal>Person</literal>, Hibernate can pre-fetch collections:"
+msgstr ""
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <set name=\"cats\" batch-size=\"3\">\n"
+ " ...\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:496
+msgid "With a <literal>batch-size</literal> of 3, Hibernate will load 3, 3, 3, 1 collections in four <literal>SELECT</literal>s. Again, the value of the attribute depends on the expected number of uninitialized collections in a particular <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:502
+msgid "Batch fetching of collections is particularly useful if you have a nested tree of items, ie. the typical bill-of-materials pattern. (Although a <emphasis>nested set</emphasis> or a <emphasis>materialized path</emphasis> might be a better option for read-mostly trees.)"
+msgstr ""
+
+#: index.docbook:511
+msgid "Using subselect fetching"
+msgstr ""
+
+#: index.docbook:513
+msgid "If one lazy collection or single-valued proxy has to be fetched, Hibernate loads all of them, re-running the original query in a subselect. This works in the same way as batch-fetching, without the piecemeal loading."
+msgstr ""
+
+#: index.docbook:524
+msgid "Using lazy property fetching"
+msgstr ""
+
+#: index.docbook:526
+msgid "Hibernate3 supports the lazy fetching of individual properties. This optimization technique is also known as <emphasis>fetch groups</emphasis>. Please note that this is mostly a marketing feature, as in practice, optimizing row reads is much more important than optimization of column reads. However, only loading some properties of a class might be useful in extreme cases, when legacy tables have hundreds of columns and the data model can not be improved."
+msgstr ""
+
+#: index.docbook:535
+msgid "To enable lazy property loading, set the <literal>lazy</literal> attribute on your particular property mappings:"
+msgstr ""
+
+#: index.docbook:540
+msgid ""
+ "<![CDATA[<class name=\"Document\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\" length=\"50\"/>\n"
+ " <property name=\"summary\" not-null=\"true\" length=\"200\" lazy=\"true\"/>\n"
+ " <property name=\"text\" not-null=\"true\" length=\"2000\" lazy=\"true\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:542
+msgid "Lazy property loading requires buildtime bytecode instrumentation! If your persistent classes are not enhanced, Hibernate will silently ignore lazy property settings and fall back to immediate fetching."
+msgstr ""
+
+#: index.docbook:548
+msgid "For bytecode instrumentation, use the following Ant task:"
+msgstr ""
+
+#: index.docbook:552
+msgid ""
+ "<![CDATA[<target name=\"instrument\" depends=\"compile\">\n"
+ " <taskdef name=\"instrument\" classname=\"org.hibernate.tool.instrument.InstrumentTask\">\n"
+ " <classpath path=\"${jar.path}\"/>\n"
+ " <classpath path=\"${classes.dir}\"/>\n"
+ " <classpath refid=\"lib.class.path\"/>\n"
+ " </taskdef>\n"
+ "\n"
+ " <instrument verbose=\"true\">\n"
+ " <fileset dir=\"${testclasses.dir}/org/hibernate/auction/model\">\n"
+ " <include name=\"*.class\"/>\n"
+ " </fileset>\n"
+ " </instrument>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:554
+msgid "A different (better?) way to avoid unnecessary column reads, at least for read-only transactions is to use the projection features of HQL or Criteria queries. This avoids the need for buildtime bytecode processing and is certainly a prefered solution."
+msgstr ""
+
+#: index.docbook:561
+msgid "You may force the usual eager fetching of properties using <literal>fetch all properties</literal> in HQL."
+msgstr ""
+
+#: index.docbook:571
+msgid "The Second Level Cache"
+msgstr ""
+
+#: index.docbook:573
+msgid "A Hibernate <literal>Session</literal> is a transaction-level cache of persistent data. It is possible to configure a cluster or JVM-level (<literal>SessionFactory</literal>-level) cache on a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be careful. Caches are never aware of changes made to the persistent store by another application (though they may be configured to regularly expire cached data)."
+msgstr ""
+
+#: index.docbook:581
+msgid "You have the option to tell Hibernate which caching implementation to use by specifying the name of a class that implements <literal>org.hibernate.cache.CacheProvider</literal> using the property <literal>hibernate.cache.provider_class</literal>. 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."
+msgstr ""
+
+#: index.docbook:592
+msgid "Cache Providers"
+msgstr ""
+
+#: index.docbook:601, index.docbook:774
+msgid "Cache"
+msgstr ""
+
+#: index.docbook:602
+msgid "Provider class"
+msgstr ""
+
+#: index.docbook:603
+msgid "Type"
+msgstr ""
+
+#: index.docbook:604
+msgid "Cluster Safe"
+msgstr ""
+
+#: index.docbook:605
+msgid "Query Cache Supported"
+msgstr ""
+
+#: index.docbook:610, index.docbook:783
+msgid "Hashtable (not intended for production use)"
+msgstr ""
+
+#: index.docbook:611
+msgid "org.hibernate.cache.HashtableCacheProvider"
+msgstr ""
+
+#: index.docbook:612
+msgid "memory"
+msgstr ""
+
+#: index.docbook:614, index.docbook:621, index.docbook:628, index.docbook:784, index.docbook:785, index.docbook:786, index.docbook:791, index.docbook:792, index.docbook:793, index.docbook:798, index.docbook:799, index.docbook:800, index.docbook:805, index.docbook:806, index.docbook:812, index.docbook:815
+msgid "<entry>yes</entry>"
+msgstr ""
+
+#: index.docbook:617, index.docbook:790
+msgid "EHCache"
+msgstr ""
+
+#: index.docbook:618
+msgid "org.hibernate.cache.EhCacheProvider"
+msgstr ""
+
+#: index.docbook:619, index.docbook:626
+msgid "memory, disk"
+msgstr ""
+
+#: index.docbook:624, index.docbook:797
+msgid "OSCache"
+msgstr ""
+
+#: index.docbook:625
+msgid "org.hibernate.cache.OSCacheProvider"
+msgstr ""
+
+#: index.docbook:631, index.docbook:804
+msgid "SwarmCache"
+msgstr ""
+
+#: index.docbook:632
+msgid "org.hibernate.cache.SwarmCacheProvider"
+msgstr ""
+
+#: index.docbook:633
+msgid "clustered (ip multicast)"
+msgstr ""
+
+#: index.docbook:634
+msgid "yes (clustered invalidation)"
+msgstr ""
+
+#: index.docbook:638, index.docbook:811
+msgid "JBoss TreeCache"
+msgstr ""
+
+#: index.docbook:639
+msgid "org.hibernate.cache.TreeCacheProvider"
+msgstr ""
+
+#: index.docbook:640
+msgid "clustered (ip multicast), transactional"
+msgstr ""
+
+#: index.docbook:641
+msgid "yes (replication)"
+msgstr ""
+
+#: index.docbook:642
+msgid "yes (clock sync req.)"
+msgstr ""
+
+#: index.docbook:649
+msgid "Cache mappings"
+msgstr ""
+
+#: index.docbook:651
+msgid "The <literal><cache></literal> element of a class or collection mapping has the following form:"
+msgstr ""
+
+#: index.docbook:662
+msgid ""
+ "<![CDATA[<cache \n"
+ " usage=\"transactional|read-write|nonstrict-read-write|read-only\"\n"
+ " region=\"RegionName\"\n"
+ " include=\"all|non-lazy\"\n"
+ "/>]]>"
+msgstr ""
+
+#: index.docbook:665
+msgid "<literal>usage</literal> (required) specifies the caching strategy: <literal>transactional</literal>, <literal>read-write</literal>, <literal>nonstrict-read-write</literal> or <literal>read-only</literal>"
+msgstr ""
+
+#: index.docbook:674
+msgid "<literal>region</literal> (optional, defaults to the class or collection role name) specifies the name of the second level cache region"
+msgstr ""
+
+#: index.docbook:681
+msgid "<literal>include</literal> (optional, defaults to <literal>all</literal>) <literal>non-lazy</literal> specifies that properties of the entity mapped with <literal>lazy=\"true\"</literal> may not be cached when attribute-level lazy fetching is enabled"
+msgstr ""
+
+#: index.docbook:691
+msgid "Alternatively (preferrably?), you may specify <literal><class-cache></literal> and <literal><collection-cache></literal> elements in <literal>hibernate.cfg.xml</literal>."
+msgstr ""
+
+#: index.docbook:696
+msgid "The <literal>usage</literal> attribute specifies a <emphasis>cache concurrency strategy</emphasis>."
+msgstr ""
+
+#: index.docbook:703
+msgid "Strategy: read only"
+msgstr ""
+
+#: index.docbook:705
+msgid "If your application needs to read but never modify instances of a persistent class, a <literal>read-only</literal> cache may be used. This is the simplest and best performing strategy. It's even perfectly safe for use in a cluster."
+msgstr ""
+
+#: index.docbook:711
+msgid ""
+ "<![CDATA[<class name=\"eg.Immutable\" mutable=\"false\">\n"
+ " <cache usage=\"read-only\"/>\n"
+ " ....\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:717
+msgid "Strategy: read/write"
+msgstr ""
+
+#: index.docbook:719
+msgid "If the application needs to update data, a <literal>read-write</literal> cache might be appropriate. This cache strategy should never be used if serializable transaction isolation level is required. If the cache is used in a JTA environment, you must specify the property <literal>hibernate.transaction.manager_lookup_class</literal>, naming a strategy for obtaining the JTA <literal>TransactionManager</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called. If you wish to use this strategy in a cluster, you should ensure that the underlying cache implementation supports locking. The built-in cache providers do <emphasis>not</emphasis>."
+msgstr ""
+
+#: index.docbook:730
+msgid ""
+ "<![CDATA[<class name=\"eg.Cat\" .... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " <set name=\"kittens\" ... >\n"
+ " <cache usage=\"read-write\"/>\n"
+ " ....\n"
+ " </set>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:735
+msgid "Strategy: nonstrict read/write"
+msgstr ""
+
+#: index.docbook:737
+msgid "If the application only occasionally needs to update data (ie. if it is extremely unlikely that two transactions would try to update the same item simultaneously) and strict transaction isolation is not required, a <literal>nonstrict-read-write</literal> cache might be appropriate. If the cache is used in a JTA environment, you must specify <literal>hibernate.transaction.manager_lookup_class</literal>. In other environments, you should ensure that the transaction is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called."
+msgstr ""
+
+#: index.docbook:749
+msgid "Strategy: transactional"
+msgstr ""
+
+#: index.docbook:751
+msgid "The <literal>transactional</literal> cache strategy provides support for fully transactional cache providers such as JBoss TreeCache. Such a cache may only be used in a JTA environment and you must specify <literal>hibernate.transaction.manager_lookup_class</literal>."
+msgstr ""
+
+#: index.docbook:759
+msgid "None of the cache providers support all of the cache concurrency strategies. The following table shows which providers are compatible with which concurrency strategies."
+msgstr ""
+
+#: index.docbook:765
+msgid "Cache Concurrency Strategy Support"
+msgstr ""
+
+#: index.docbook:775
+msgid "read-only"
+msgstr ""
+
+#: index.docbook:776
+msgid "nonstrict-read-write"
+msgstr ""
+
+#: index.docbook:777
+msgid "read-write"
+msgstr ""
+
+#: index.docbook:778
+msgid "transactional"
+msgstr ""
+
+#: index.docbook:824
+msgid "Managing the caches"
+msgstr ""
+
+#: index.docbook:826
+msgid "Whenever you pass an object to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal> and whenever you retrieve an object using <literal>load()</literal>, <literal>get()</literal>, <literal>list()</literal>, <literal>iterate()</literal> or <literal>scroll()</literal>, that object is added to the internal cache of the <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:833
+msgid "When <literal>flush()</literal> is subsequently called, the state of that object will be synchronized with the database. If you do not want this synchronization to occur or if you are processing a huge number of objects and need to manage memory efficiently, the <literal>evict()</literal> method may be used to remove the object and its collections from the first-level cache."
+msgstr ""
+
+#: index.docbook:841
+msgid ""
+ "<![CDATA[ScrollableResult cats = sess.createQuery(\"from Cat as cat\").scroll(); //a huge result set\n"
+ "while ( cats.next() ) {\n"
+ " Cat cat = (Cat) cats.get(0);\n"
+ " doSomethingWithACat(cat);\n"
+ " sess.evict(cat);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:843
+msgid "The <literal>Session</literal> also provides a <literal>contains()</literal> method to determine if an instance belongs to the session cache."
+msgstr ""
+
+#: index.docbook:848
+msgid "To completely evict all objects from the session cache, call <literal>Session.clear()</literal>"
+msgstr ""
+
+#: index.docbook:852
+msgid "For the second-level cache, there are methods defined on <literal>SessionFactory</literal> for evicting the cached state of an instance, entire class, collection instance or entire collection role."
+msgstr ""
+
+#: index.docbook:858
+msgid ""
+ "<![CDATA[sessionFactory.evict(Cat.class, catId); //evict a particular Cat\n"
+ "sessionFactory.evict(Cat.class); //evict all Cats\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\", catId); //evict a particular collection of kittens\n"
+ "sessionFactory.evictCollection(\"Cat.kittens\"); //evict all kitten collections]]>"
+msgstr ""
+
+#: index.docbook:860
+msgid "The <literal>CacheMode</literal> controls how a particular session interacts with the second-level cache."
+msgstr ""
+
+#: index.docbook:867
+msgid "<literal>CacheMode.NORMAL</literal> - read items from and write items to the second-level cache"
+msgstr ""
+
+#: index.docbook:872
+msgid "<literal>CacheMode.GET</literal> - read items from the second-level cache, but don't write to the second-level cache except when updating data"
+msgstr ""
+
+#: index.docbook:878
+msgid "<literal>CacheMode.PUT</literal> - write items to the second-level cache, but don't read from the second-level cache"
+msgstr ""
+
+#: index.docbook:884
+msgid "<literal>CacheMode.REFRESH</literal> - write items to the second-level cache, but don't read from the second-level cache, bypass the effect of <literal>hibernate.cache.use_minimal_puts</literal>, forcing a refresh of the second-level cache for all items read from the database"
+msgstr ""
+
+#: index.docbook:892
+msgid "To browse the contents of a second-level or query cache region, use the <literal>Statistics</literal> API:"
+msgstr ""
+
+#: index.docbook:897
+msgid ""
+ "<![CDATA[Map cacheEntries = sessionFactory.getStatistics()\n"
+ " .getSecondLevelCacheStatistics(regionName)\n"
+ " .getEntries();]]>"
+msgstr ""
+
+#: index.docbook:899
+msgid "You'll need to enable statistics, and, optionally, force Hibernate to keep the cache entries in a more human-understandable format:"
+msgstr ""
+
+#: index.docbook:904
+msgid ""
+ "<![CDATA[hibernate.generate_statistics true\n"
+ "hibernate.cache.use_structured_entries true]]>"
+msgstr ""
+
+#: index.docbook:909
+msgid "The Query Cache"
+msgstr ""
+
+#: index.docbook:911
+msgid "Query result sets may also be cached. This is only useful for queries that are run frequently with the same parameters. To use the query cache you must first enable it:"
+msgstr ""
+
+#: index.docbook:916
+msgid "<![CDATA[hibernate.cache.use_query_cache true]]>"
+msgstr ""
+
+#: index.docbook:918
+msgid "This setting causes the creation of two new cache regions - one holding cached query result sets (<literal>org.hibernate.cache.StandardQueryCache</literal>), the other holding timestamps of the most recent updates to queryable tables (<literal>org.hibernate.cache.UpdateTimestampsCache</literal>). Note that the query cache does not cache the state of the actual entities in the result set; it caches only identifier values and results of value type. So the query cache should always be used in conjunction with the second-level cache."
+msgstr ""
+
+#: index.docbook:928
+msgid "Most queries do not benefit from caching, so by default queries are not cached. To enable caching, call <literal>Query.setCacheable(true)</literal>. This call allows the query to look for existing cache results or add its results to the cache when it is executed."
+msgstr ""
+
+#: index.docbook:935
+msgid "If you require fine-grained control over query cache expiration policies, you may specify a named cache region for a particular query by calling <literal>Query.setCacheRegion()</literal>."
+msgstr ""
+
+#: index.docbook:941
+msgid ""
+ "<![CDATA[List blogs = sess.createQuery(\"from Blog blog where blog.blogger = :blogger\")\n"
+ " .setEntity(\"blogger\", blogger)\n"
+ " .setMaxResults(15)\n"
+ " .setCacheable(true)\n"
+ " .setCacheRegion(\"frontpages\")\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:943
+msgid "If the query should force a refresh of its query cache region, you should call <literal>Query.setCacheMode(CacheMode.REFRESH)</literal>. This is particularly useful in cases where underlying data may have been updated via a separate process (i.e., not modified through Hibernate) and allows the application to selectively refresh particular query result sets. This is a more efficient alternative to eviction of a query cache region via <literal>SessionFactory.evictQueries()</literal>."
+msgstr ""
+
+#: index.docbook:955
+msgid "Understanding Collection performance"
+msgstr ""
+
+#: index.docbook:957
+msgid "We've already spent quite some time talking about collections. In this section we will highlight a couple more issues about how collections behave at runtime."
+msgstr ""
+
+#: index.docbook:964
+msgid "Taxonomy"
+msgstr ""
+
+#: index.docbook:966
+msgid "Hibernate defines three basic kinds of collections:"
+msgstr ""
+
+#: index.docbook:970
+msgid "collections of values"
+msgstr ""
+
+#: index.docbook:973
+msgid "one to many associations"
+msgstr ""
+
+#: index.docbook:976
+msgid "many to many associations"
+msgstr ""
+
+#: index.docbook:980
+msgid "This classification distinguishes the various table and foreign key relationships but does not tell us quite everything we need to know about the relational model. To fully understand the relational structure and performance characteristics, we must also consider the structure of the primary key that is used by Hibernate to update or delete collection rows. This suggests the following classification:"
+msgstr ""
+
+#: index.docbook:991
+msgid "indexed collections"
+msgstr ""
+
+#: index.docbook:994
+msgid "sets"
+msgstr ""
+
+#: index.docbook:997
+msgid "bags"
+msgstr ""
+
+#: index.docbook:1001
+msgid "All indexed collections (maps, lists, arrays) have a primary key consisting of the <literal><key></literal> and <literal><index></literal> columns. In this case collection updates are usually extremely efficient - the primary key may be efficiently indexed and a particular row may be efficiently located when Hibernate tries to update or delete it."
+msgstr ""
+
+#: index.docbook:1009
+msgid "Sets have a primary key consisting of <literal><key></literal> and element columns. This may be less efficient for some types of collection element, particularly composite elements or large text or binary fields; the database may not be able to index a complex primary key as efficently. On the other hand, for one to many or many to many associations, particularly in the case of synthetic identifiers, it is likely to be just as efficient. (Side-note: if you want <literal>SchemaExport</literal> to actually create the primary key of a <literal><set></literal> for you, you must declare all columns as <literal>not-null=\"true\"</literal>.)"
+msgstr ""
+
+#: index.docbook:1020
+msgid "<literal><idbag></literal> mappings define a surrogate key, so they are always very efficient to update. In fact, they are the best case."
+msgstr ""
+
+#: index.docbook:1025
+msgid "Bags are the worst case. Since a bag permits duplicate element values and has no index column, no primary key may be defined. Hibernate has no way of distinguishing between duplicate rows. Hibernate resolves this problem by completely removing (in a single <literal>DELETE</literal>) and recreating the collection whenever it changes. This might be very inefficient."
+msgstr ""
+
+#: index.docbook:1033
+msgid "Note that for a one-to-many association, the \"primary key\" may not be the physical primary key of the database table - but even in this case, the above classification is still useful. (It still reflects how Hibernate \"locates\" individual rows of the collection.)"
+msgstr ""
+
+#: index.docbook:1043
+msgid "Lists, maps, idbags and sets are the most efficient collections to update"
+msgstr ""
+
+#: index.docbook:1045
+msgid "From the discussion above, it should be clear that indexed collections and (usually) sets allow the most efficient operation in terms of adding, removing and updating elements."
+msgstr ""
+
+#: index.docbook:1051
+msgid "There is, arguably, one more advantage that indexed collections have over sets for many to many associations or collections of values. Because of the structure of a <literal>Set</literal>, Hibernate doesn't ever <literal>UPDATE</literal> a row when an element is \"changed\". Changes to a <literal>Set</literal> always work via <literal>INSERT</literal> and <literal>DELETE</literal> (of individual rows). Once again, this consideration does not apply to one to many associations."
+msgstr ""
+
+#: index.docbook:1060
+msgid "After observing that arrays cannot be lazy, we would conclude that lists, maps and idbags are the most performant (non-inverse) collection types, with sets not far behind. Sets are expected to be the most common kind of collection in Hibernate applications. This is because the \"set\" semantics are most natural in the relational model."
+msgstr ""
+
+#: index.docbook:1068
+msgid "However, in well-designed Hibernate domain models, we usually see that most collections are in fact one-to-many associations with <literal>inverse=\"true\"</literal>. For these associations, the update is handled by the many-to-one end of the association, and so considerations of collection update performance simply do not apply."
+msgstr ""
+
+#: index.docbook:1078
+msgid "Bags and lists are the most efficient inverse collections"
+msgstr ""
+
+#: index.docbook:1080
+msgid "Just before you ditch bags forever, there is a particular case in which bags (and also lists) are much more performant than sets. For a collection with <literal>inverse=\"true\"</literal> (the standard bidirectional one-to-many relationship idiom, for example) we can add elements to a bag or list without needing to initialize (fetch) the bag elements! This is because <literal>Collection.add()</literal> or <literal>Collection.addAll()</literal> must always return true for a bag or <literal>List</literal> (unlike a <literal>Set</literal>). This can make the following common code much faster."
+msgstr ""
+
+#: index.docbook:1090
+msgid ""
+ "<![CDATA[Parent p = (Parent) sess.load(Parent.class, id);\n"
+ "Child c = new Child();\n"
+ "c.setParent(p);\n"
+ "p.getChildren().add(c); //no need to fetch the collection!\n"
+ "sess.flush();]]>"
+msgstr ""
+
+#: index.docbook:1095
+msgid "One shot delete"
+msgstr ""
+
+#: index.docbook:1097
+msgid "Occasionally, deleting collection elements one by one can be extremely inefficient. Hibernate isn't completely stupid, so it knows not to do that in the case of an newly-empty collection (if you called <literal>list.clear()</literal>, for example). In this case, Hibernate will issue a single <literal>DELETE</literal> and we are done!"
+msgstr ""
+
+#: index.docbook:1104
+msgid "Suppose we add a single element to a collection of size twenty and then remove two elements. Hibernate will issue one <literal>INSERT</literal> statement and two <literal>DELETE</literal> statements (unless the collection is a bag). This is certainly desirable."
+msgstr ""
+
+#: index.docbook:1110
+msgid "However, suppose that we remove eighteen elements, leaving two and then add thee new elements. There are two possible ways to proceed"
+msgstr ""
+
+#: index.docbook:1117
+msgid "delete eighteen rows one by one and then insert three rows"
+msgstr ""
+
+#: index.docbook:1120
+msgid "remove the whole collection (in one SQL <literal>DELETE</literal>) and insert all five current elements (one by one)"
+msgstr ""
+
+#: index.docbook:1125
+msgid "Hibernate isn't smart enough to know that the second option is probably quicker in this case. (And it would probably be undesirable for Hibernate to be that smart; such behaviour might confuse database triggers, etc.)"
+msgstr ""
+
+#: index.docbook:1131
+msgid "Fortunately, you can force this behaviour (ie. the second strategy) at any time by discarding (ie. dereferencing) the original collection and returning a newly instantiated collection with all the current elements. This can be very useful and powerful from time to time."
+msgstr ""
+
+#: index.docbook:1137
+msgid "Of course, one-shot-delete does not apply to collections mapped <literal>inverse=\"true\"</literal>."
+msgstr ""
+
+#: index.docbook:1146
+msgid "Monitoring performance"
+msgstr ""
+
+#: index.docbook:1148
+msgid "Optimization is not much use without monitoring and access to performance numbers. Hibernate provides a full range of figures about its internal operations. Statistics in Hibernate are available per <literal>SessionFactory</literal>."
+msgstr ""
+
+#: index.docbook:1155
+msgid "Monitoring a SessionFactory"
+msgstr ""
+
+#: index.docbook:1157
+msgid "You can access <literal>SessionFactory</literal> metrics in two ways. Your first option is to call <literal>sessionFactory.getStatistics()</literal> and read or display the <literal>Statistics</literal> yourself."
+msgstr ""
+
+#: index.docbook:1163
+msgid "Hibernate can also use JMX to publish metrics if you enable the <literal>StatisticsService</literal> MBean. You may enable a single MBean for all your <literal>SessionFactory</literal> or one per factory. See the following code for minimalistic configuration examples:"
+msgstr ""
+
+#: index.docbook:1170
+msgid ""
+ "<![CDATA[// MBean service registration for a specific SessionFactory\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"myFinancialApp\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "stats.setSessionFactory(sessionFactory); // Bind the stats to a SessionFactory\n"
+ "server.registerMBean(stats, on); // Register the Mbean on the server]]>"
+msgstr ""
+
+#: index.docbook:1173
+msgid ""
+ "<![CDATA[// MBean service registration for all SessionFactory's\n"
+ "Hashtable tb = new Hashtable();\n"
+ "tb.put(\"type\", \"statistics\");\n"
+ "tb.put(\"sessionFactory\", \"all\");\n"
+ "ObjectName on = new ObjectName(\"hibernate\", tb); // MBean object name\n"
+ "\n"
+ "StatisticsService stats = new StatisticsService(); // MBean implementation\n"
+ "server.registerMBean(stats, on); // Register the MBean on the server]]>"
+msgstr ""
+
+#: index.docbook:1175
+msgid "TODO: This doesn't make sense: In the first case, we retrieve and use the MBean directly. In the second one, we must give the JNDI name in which the session factory is held before using it. Use <literal>hibernateStatsBean.setSessionFactoryJNDIName(\"my/JNDI/Name\")</literal>"
+msgstr ""
+
+#: index.docbook:1180
+msgid "You can (de)activate the monitoring for a <literal>SessionFactory</literal>"
+msgstr ""
+
+#: index.docbook:1185
+msgid "at configuration time, set <literal>hibernate.generate_statistics</literal> to <literal>false</literal>"
+msgstr ""
+
+#: index.docbook:1192
+msgid "at runtime: <literal>sf.getStatistics().setStatisticsEnabled(true)</literal> or <literal>hibernateStatsBean.setStatisticsEnabled(true)</literal>"
+msgstr ""
+
+#: index.docbook:1199
+msgid "Statistics can be reset programatically using the <literal>clear()</literal> method. A summary can be sent to a logger (info level) using the <literal>logSummary()</literal> method."
+msgstr ""
+
+#: index.docbook:1208
+msgid "Metrics"
+msgstr ""
+
+#: index.docbook:1210
+msgid "Hibernate provides a number of metrics, from very basic to the specialized information only relevant in certain scenarios. All available counters are described in the <literal>Statistics</literal> interface API, in three categories:"
+msgstr ""
+
+#: index.docbook:1217
+msgid "Metrics related to the general <literal>Session</literal> usage, such as number of open sessions, retrieved JDBC connections, etc."
+msgstr ""
+
+#: index.docbook:1223
+msgid "Metrics related to he entities, collections, queries, and caches as a whole (aka global metrics),"
+msgstr ""
+
+#: index.docbook:1229
+msgid "Detailed metrics related to a particular entity, collection, query or cache region."
+msgstr ""
+
+#: index.docbook:1236
+msgid "For exampl,e you can check the cache hit, miss, and put ratio of entities, collections and queries, and the average time a query needs. Beware that the number of milliseconds is subject to approximation in Java. Hibernate is tied to the JVM precision, on some platforms this might even only be accurate to 10 seconds."
+msgstr ""
+
+#: index.docbook:1243
+msgid "Simple getters are used to access the global metrics (i.e. not tied to a particular entity, collection, cache region, etc.). You can access the metrics of a particular entity, collection or cache region through its name, and through its HQL or SQL representation for queries. Please refer to the <literal>Statistics</literal>, <literal>EntityStatistics</literal>, <literal>CollectionStatistics</literal>, <literal>SecondLevelCacheStatistics</literal>, and <literal>QueryStatistics</literal> API Javadoc for more information. The following code shows a simple example:"
+msgstr ""
+
+#: index.docbook:1253
+msgid ""
+ "<![CDATA[Statistics stats = HibernateUtil.sessionFactory.getStatistics();\n"
+ "\n"
+ "double queryCacheHitCount = stats.getQueryCacheHitCount();\n"
+ "double queryCacheMissCount = stats.getQueryCacheMissCount();\n"
+ "double queryCacheHitRatio =\n"
+ " queryCacheHitCount / (queryCacheHitCount + queryCacheMissCount);\n"
+ "\n"
+ "log.info(\"Query Hit ratio:\" + queryCacheHitRatio);\n"
+ "\n"
+ "EntityStatistics entityStats =\n"
+ " stats.getEntityStatistics( Cat.class.getName() );\n"
+ "long changes =\n"
+ " entityStats.getInsertCount()\n"
+ " + entityStats.getUpdateCount()\n"
+ " + entityStats.getDeleteCount();\n"
+ "log.info(Cat.class.getName() + \" changed \" + changes + \"times\" );]]>"
+msgstr ""
+
+#: index.docbook:1255
+msgid "To work on all entities, collections, queries and region caches, you can retrieve the list of names of entities, collections, queries and region caches with the following methods: <literal>getQueries()</literal>, <literal>getEntityNames()</literal>, <literal>getCollectionRoleNames()</literal>, and <literal>getSecondLevelCacheRegionNames()</literal>."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/persistent_classes.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/persistent_classes.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/persistent_classes.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,446 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Persistent Classes"
+msgstr ""
+
+#: index.docbook:7
+msgid "Persistent classes are classes in an application that implement the entities of the business problem (e.g. Customer and Order in an E-commerce application). Not all instances of a persistent class are considered to be in the persistent state - an instance may instead be transient or detached."
+msgstr ""
+
+#: index.docbook:14
+msgid "Hibernate works best if these classes follow some simple rules, also known as the Plain Old Java Object (POJO) programming model. However, none of these rules are hard requirements. Indeed, Hibernate3 assumes very little about the nature of your persistent objects. You may express a domain model in other ways: using trees of <literal>Map</literal> instances, for example."
+msgstr ""
+
+#: index.docbook:23
+msgid "A simple POJO example"
+msgstr ""
+
+#: index.docbook:25
+msgid "Most Java applications require a persistent class representing felines."
+msgstr ""
+
+#: index.docbook:29
+msgid ""
+ "<![CDATA[package eg;\n"
+ "import java.util.Set;\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Cat {\n"
+ " private Long id; // identifier\n"
+ "\n"
+ " private Date birthdate;\n"
+ " private Color color;\n"
+ " private char sex;\n"
+ " private float weight;\n"
+ " private int litterId;\n"
+ "\n"
+ " private Cat mother;\n"
+ " private Set kittens = new HashSet();\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id=id;\n"
+ " }\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " void setBirthdate(Date date) {\n"
+ " birthdate = date;\n"
+ " }\n"
+ " public Date getBirthdate() {\n"
+ " return birthdate;\n"
+ " }\n"
+ "\n"
+ " void setWeight(float weight) {\n"
+ " this.weight = weight;\n"
+ " }\n"
+ " public float getWeight() {\n"
+ " return weight;\n"
+ " }\n"
+ "\n"
+ " public Color getColor() {\n"
+ " return color;\n"
+ " }\n"
+ " void setColor(Color color) {\n"
+ " this.color = color;\n"
+ " }\n"
+ "\n"
+ " void setSex(char sex) {\n"
+ " this.sex=sex;\n"
+ " }\n"
+ " public char getSex() {\n"
+ " return sex;\n"
+ " }\n"
+ "\n"
+ " void setLitterId(int id) {\n"
+ " this.litterId = id;\n"
+ " }\n"
+ " public int getLitterId() {\n"
+ " return litterId;\n"
+ " }\n"
+ "\n"
+ " void setMother(Cat mother) {\n"
+ " this.mother = mother;\n"
+ " }\n"
+ " public Cat getMother() {\n"
+ " return mother;\n"
+ " }\n"
+ " void setKittens(Set kittens) {\n"
+ " this.kittens = kittens;\n"
+ " }\n"
+ " public Set getKittens() {\n"
+ " return kittens;\n"
+ " }\n"
+ " \n"
+ " // addKitten not needed by Hibernate\n"
+ " public void addKitten(Cat kitten) {\n"
+ " kitten.setMother(this);\n"
+ " kitten.setLitterId( kittens.size() ); \n"
+ " kittens.add(kitten);\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:31
+msgid "There are four main rules to follow here:"
+msgstr ""
+
+#: index.docbook:37
+msgid "Implement a no-argument constructor"
+msgstr ""
+
+#: index.docbook:39
+msgid "<literal>Cat</literal> has a no-argument constructor. All persistent classes must have a default constructor (which may be non-public) so that Hibernate can instantiate them using <literal>Constructor.newInstance()</literal>. We strongly recommend having a default constructor with at least <emphasis>package</emphasis> visibility for runtime proxy generation in Hibernate."
+msgstr ""
+
+#: index.docbook:49
+msgid "Provide an identifier property (optional)"
+msgstr ""
+
+#: index.docbook:51
+msgid "<literal>Cat</literal> has a property called <literal>id</literal>. This property maps to the primary key column of a database table. The property might have been called anything, and its type might have been any primitive type, any primitive \"wrapper\" type, <literal>java.lang.String</literal> or <literal>java.util.Date</literal>. (If your legacy database table has composite keys, you can even use a user-defined class with properties of these types - see the section on composite identifiers later.)"
+msgstr ""
+
+#: index.docbook:60
+msgid "The identifier property is strictly optional. You can leave them off and let Hibernate keep track of object identifiers internally. We do not recommend this, however."
+msgstr ""
+
+#: index.docbook:65
+msgid "In fact, some functionality is available only to classes which declare an identifier property:"
+msgstr ""
+
+#: index.docbook:72
+msgid "Transitive reattachment for detached objects (cascade update or cascade merge) - see"
+msgstr ""
+
+#: index.docbook:79
+msgid "Session.saveOrUpdate()"
+msgstr ""
+
+#: index.docbook:84
+msgid "Session.merge()"
+msgstr ""
+
+#: index.docbook:89
+msgid "We recommend you declare consistently-named identifier properties on persistent classes. We further recommend that you use a nullable (ie. non-primitive) type."
+msgstr ""
+
+#: index.docbook:96
+msgid "Prefer non-final classes (optional)"
+msgstr ""
+
+#: index.docbook:97
+msgid "A central feature of Hibernate, <emphasis>proxies</emphasis>, depends upon the persistent class being either non-final, or the implementation of an interface that declares all public methods."
+msgstr ""
+
+#: index.docbook:102
+msgid "You can persist <literal>final</literal> classes that do not implement an interface with Hibernate, but you won't be able to use proxies for lazy association fetching - which will limit your options for performance tuning."
+msgstr ""
+
+#: index.docbook:107
+msgid "You should also avoid declaring <literal>public final</literal> methods on the non-final classes. If you want to use a class with a <literal>public final</literal> method, you must explicitly disable proxying by setting <literal>lazy=\"false\"</literal>."
+msgstr ""
+
+#: index.docbook:115
+msgid "Declare accessors and mutators for persistent fields (optional)"
+msgstr ""
+
+#: index.docbook:117
+msgid "<literal>Cat</literal> declares accessor methods for all its persistent fields. Many other ORM tools directly persist instance variables. We believe it is better to provide an indirection between the relational schema and internal data structures of the class. By default, Hibernate persists JavaBeans style properties, and recognizes method names of the form <literal>getFoo</literal>, <literal>isFoo</literal> and <literal>setFoo</literal>. You may switch to direct field access for particular properties, if needed."
+msgstr ""
+
+#: index.docbook:127
+msgid "Properties need <emphasis>not</emphasis> be declared public - Hibernate can persist a property with a default, <literal>protected</literal> or <literal>private</literal> get / set pair."
+msgstr ""
+
+#: index.docbook:138
+msgid "Implementing inheritance"
+msgstr ""
+
+#: index.docbook:140
+msgid "A subclass must also observe the first and second rules. It inherits its identifier property from the superclass, <literal>Cat</literal>."
+msgstr ""
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[package eg;\n"
+ "\n"
+ "public class DomesticCat extends Cat {\n"
+ " private String name;\n"
+ "\n"
+ " public String getName() {\n"
+ " return name;\n"
+ " }\n"
+ " protected void setName(String name) {\n"
+ " this.name=name;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:149
+msgid "Implementing <literal>equals()</literal> and <literal>hashCode()</literal>"
+msgstr ""
+
+#: index.docbook:151
+msgid "You have to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods if you"
+msgstr ""
+
+#: index.docbook:157
+msgid "intend to put instances of persistent classes in a <literal>Set</literal> (the recommended way to represent many-valued associations) <emphasis>and</emphasis>"
+msgstr ""
+
+#: index.docbook:164
+msgid "intend to use reattachment of detached instances"
+msgstr ""
+
+#: index.docbook:170
+msgid "Hibernate guarantees equivalence of persistent identity (database row) and Java identity only inside a particular session scope. So as soon as we mix instances retrieved in different sessions, we must implement <literal>equals()</literal> and <literal>hashCode()</literal> if we wish to have meaningful semantics for <literal>Set</literal>s."
+msgstr ""
+
+#: index.docbook:178
+msgid "The most obvious way is to implement <literal>equals()</literal>/<literal>hashCode()</literal> by comparing the identifier value of both objects. If the value is the same, both must be the same database row, they are therefore equal (if both are added to a <literal>Set</literal>, we will only have one element in the <literal>Set</literal>). Unfortunately, we can't use that approach with generated identifiers! Hibernate will only assign identifier values to objects that are persistent, a newly created instance will not have any identifier value! Furthermore, if an instance is unsaved and currently in a <literal>Set</literal>, saving it will assign an identifier value to the object. If <literal>equals()</literal> and <literal>hashCode()</literal> are based on the identifier value, the hash code would change, breaking the contract of the <literal>Set</literal>. See the Hibernate website for a full discussion of this problem. Note that this is not a Hibernate issue, but !
normal Java semantics of object identity and equality."
+msgstr ""
+
+#: index.docbook:192
+msgid "We recommend implementing <literal>equals()</literal> and <literal>hashCode()</literal> using <emphasis>Business key equality</emphasis>. Business key equality means that the <literal>equals()</literal> method compares only the properties that form the business key, a key that would identify our instance in the real world (a <emphasis>natural</emphasis> candidate key):"
+msgstr ""
+
+#: index.docbook:200
+msgid ""
+ "<![CDATA[public class Cat {\n"
+ "\n"
+ " ...\n"
+ " public boolean equals(Object other) {\n"
+ " if (this == other) return true;\n"
+ " if ( !(other instanceof Cat) ) return false;\n"
+ "\n"
+ " final Cat cat = (Cat) other;\n"
+ "\n"
+ " if ( !cat.getLitterId().equals( getLitterId() ) ) return false;\n"
+ " if ( !cat.getMother().equals( getMother() ) ) return false;\n"
+ "\n"
+ " return true;\n"
+ " }\n"
+ "\n"
+ " public int hashCode() {\n"
+ " int result;\n"
+ " result = getMother().hashCode();\n"
+ " result = 29 * result + getLitterId();\n"
+ " return result;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:202
+msgid "Note that a business key does not have to be as solid as a database primary key candidate (see <xref linkend=\"transactions-basics-identity\"/>). Immutable or unique properties are usually good candidates for a business key."
+msgstr ""
+
+#: index.docbook:212
+msgid "Dynamic models"
+msgstr ""
+
+#: index.docbook:215
+msgid "Note that the following features are currently considered experimental and may change in the near future."
+msgstr ""
+
+#: index.docbook:219
+msgid "Persistent entities don't necessarily have to be represented as POJO classes or as JavaBean objects at runtime. Hibernate also supports dynamic models (using <literal>Map</literal>s of <literal>Map</literal>s at runtime) and the representation of entities as DOM4J trees. With this approach, you don't write persistent classes, only mapping files."
+msgstr ""
+
+#: index.docbook:227
+msgid "By default, Hibernate works in normal POJO mode. You may set a default entity representation mode for a particular <literal>SessionFactory</literal> using the <literal>default_entity_mode</literal> configuration option (see <xref linkend=\"configuration-optional-properties\"/>."
+msgstr ""
+
+#: index.docbook:234
+msgid "The following examples demonstrates the representation using <literal>Map</literal>s. First, in the mapping file, an <literal>entity-name</literal> has to be declared instead of (or in addition to) a class name:"
+msgstr ""
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class entity-name=\"Customer\">\n"
+ "\n"
+ " <id name=\"id\"\n"
+ " type=\"long\"\n"
+ " column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <property name=\"name\"\n"
+ " column=\"NAME\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <property name=\"address\"\n"
+ " column=\"ADDRESS\"\n"
+ " type=\"string\"/>\n"
+ "\n"
+ " <many-to-one name=\"organization\"\n"
+ " column=\"ORGANIZATION_ID\"\n"
+ " class=\"Organization\"/>\n"
+ "\n"
+ " <bag name=\"orders\"\n"
+ " inverse=\"true\"\n"
+ " lazy=\"false\"\n"
+ " cascade=\"all\">\n"
+ " <key column=\"CUSTOMER_ID\"/>\n"
+ " <one-to-many class=\"Order\"/>\n"
+ " </bag>\n"
+ "\n"
+ " </class>\n"
+ " \n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:242
+msgid "Note that even though associations are declared using target class names, the target type of an associations may also be a dynamic entity instead of a POJO."
+msgstr ""
+
+#: index.docbook:249
+msgid "After setting the default entity mode to <literal>dynamic-map</literal> for the <literal>SessionFactory</literal>, we can at runtime work with <literal>Map</literal>s of <literal>Map</literal>s:"
+msgstr ""
+
+#: index.docbook:255
+msgid ""
+ "<![CDATA[Session s = openSession();\n"
+ "Transaction tx = s.beginTransaction();\n"
+ "Session s = openSession();\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "\n"
+ "// Create an organization\n"
+ "Map foobar = new HashMap();\n"
+ "foobar.put(\"name\", \"Foobar Inc.\");\n"
+ "\n"
+ "// Link both\n"
+ "david.put(\"organization\", foobar);\n"
+ "\n"
+ "// Save both\n"
+ "s.save(\"Customer\", david);\n"
+ "s.save(\"Organization\", foobar);\n"
+ "\n"
+ "tx.commit();\n"
+ "s.close();]]>"
+msgstr ""
+
+#: index.docbook:257
+msgid "The advantages of a dynamic mapping are quick turnaround time for prototyping without the need for entity class implementation. However, you lose compile-time type checking and will very likely deal with many exceptions at runtime. Thanks to the Hibernate mapping, the database schema can easily be normalized and sound, allowing to add a proper domain model implementation on top later on."
+msgstr ""
+
+#: index.docbook:265
+msgid "Entity representation modes can also be set on a per <literal>Session</literal> basis:"
+msgstr ""
+
+#: index.docbook:270
+msgid ""
+ "<![CDATA[Session dynamicSession = pojoSession.getSession(EntityMode.MAP);\n"
+ "\n"
+ "// Create a customer\n"
+ "Map david = new HashMap();\n"
+ "david.put(\"name\", \"David\");\n"
+ "dynamicSession.save(\"Customer\", david);\n"
+ "...\n"
+ "dynamicSession.flush();\n"
+ "dynamicSession.close()\n"
+ "...\n"
+ "// Continue on pojoSession\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:273
+msgid "Please note that the call to <literal>getSession()</literal> using an <literal>EntityMode</literal> is on the <literal>Session</literal> API, not the <literal>SessionFactory</literal>. That way, the new <literal>Session</literal> shares the underlying JDBC connection, transaction, and other context information. This means you don't have tocall <literal>flush()</literal> and <literal>close()</literal> on the secondary <literal>Session</literal>, and also leave the transaction and connection handling to the primary unit of work."
+msgstr ""
+
+#: index.docbook:283
+msgid "More information about the XML representation capabilities can be found in <xref linkend=\"xml\"/>."
+msgstr ""
+
+#: index.docbook:291
+msgid "Tuplizers"
+msgstr ""
+
+#: index.docbook:293
+msgid "<literal>org.hibernate.tuple.Tuplizer</literal>, and its sub-interfaces, are responsible for managing a particular representation of a piece of data, given that representation's <literal>org.hibernate.EntityMode</literal>. If a given piece of data is thought of as a data structure, then a tuplizer is the thing which knows how to create such a data structure and how to extract values from and inject values into such a data structure. For example, for the POJO entity mode, the correpsonding tuplizer knows how create the POJO through its constructor and how to access the POJO properties using the defined property accessors. There are two high-level types of Tuplizers, represented by the <literal>org.hibernate.tuple.entity.EntityTuplizer</literal> and <literal>org.hibernate.tuple.component.ComponentTuplizer</literal> interfaces. <literal>EntityTuplizer</literal>s are responsible for managing the above mentioned contracts in regards to entities, while <literal>ComponentTu!
plizer</literal>s do the same for components."
+msgstr ""
+
+#: index.docbook:308
+msgid "Users may also plug in their own tuplizers. Perhaps you require that a <literal>java.util.Map</literal> implementation other than <literal>java.util.HashMap</literal> be used while in the dynamic-map entity-mode; or perhaps you need to define a different proxy generation strategy than the one used by default. Both would be achieved by defining a custom tuplizer implementation. Tuplizers definitions are attached to the entity or component mapping they are meant to manage. Going back to the example of our customer entity:"
+msgstr ""
+
+#: index.docbook:317
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ " <class entity-name=\"Customer\">\n"
+ " <!--\n"
+ " Override the dynamic-map entity-mode\n"
+ " tuplizer for the customer entity\n"
+ " -->\n"
+ " <tuplizer entity-mode=\"dynamic-map\"\n"
+ " class=\"CustomMapTuplizerImpl\"/>\n"
+ "\n"
+ " <id name=\"id\" type=\"long\" column=\"ID\">\n"
+ " <generator class=\"sequence\"/>\n"
+ " </id>\n"
+ "\n"
+ " <!-- other properties -->\n"
+ " ...\n"
+ " </class>\n"
+ "</hibernate-mapping>\n"
+ "\n"
+ "\n"
+ "public class CustomMapTuplizerImpl\n"
+ " extends org.hibernate.tuple.entity.DynamicMapEntityTuplizer {\n"
+ " // override the buildInstantiator() method to plug in our custom map...\n"
+ " protected final Instantiator buildInstantiator(\n"
+ " org.hibernate.mapping.PersistentClass mappingInfo) {\n"
+ " return new CustomMapInstantiator( mappingInfo );\n"
+ " }\n"
+ "\n"
+ " private static final class CustomMapInstantiator\n"
+ " extends org.hibernate.tuple.DynamicMapInstantitor {\n"
+ " // override the generateMap() method to return our custom map...\n"
+ " protected final Map generateMap() {\n"
+ " return new CustomMap();\n"
+ " }\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:322
+msgid "TODO: Document user-extension framework in the property and proxy packages"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/preface.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/preface.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/preface.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,68 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:21
+msgid "Preface"
+msgstr "<title>åè¨</title>"
+
+#: index.docbook:23
+msgid "Working with object-oriented software and a relational database can be cumbersome and time consuming in today's enterprise environments. Hibernate is an object/relational mapping tool for Java environments. The term object/relational mapping (ORM) refers to the technique of mapping a data representation from an object model to a relational data model with a SQL-based schema."
+msgstr "å¨ä»æ¥çä¼ä¸ç¯å¢ä¸ï¼æé¢å对象ç软件åå
³ç³»æ°æ®åºä¸èµ·ä½¿ç¨å¯è½æ¯ç¸å½éº»ç¦ã浪费æ¶é´çãHibernateæ¯ä¸ä¸ªé¢åJavaç¯å¢ç对象/å
³ç³»æ°æ®åºæ å°å·¥å
·ã对象/å
³ç³»æ°æ®åºæ å°(object/relational mapping (ORM))è¿ä¸ªæ¯è¯è¡¨ç¤ºä¸ç§ææ¯ï¼ç¨æ¥æ对象模å表示ç对象æ å°å°åºäºSQLçå
³ç³»æ¨¡åæ°æ®ç»æä¸å»ã"
+
+#: index.docbook:31
+msgid "Hibernate not only takes care of the mapping from Java classes to database tables (and from Java data types to SQL data types), but also provides data query and retrieval facilities and can significantly reduce development time otherwise spent with manual data handling in SQL and JDBC."
+msgstr "Hibernateä¸ä»
ä»
管çJavaç±»å°æ°æ®åºè¡¨çæ å°ï¼å
æ¬Javaæ°æ®ç±»åå°SQLæ°æ®ç±»åçæ å°ï¼ï¼è¿æä¾æ°æ®æ¥è¯¢åè·åæ°æ®çæ¹æ³ï¼å¯ä»¥å¤§å¹
度åå°å¼åæ¶äººå·¥ä½¿ç¨SQLåJDBCå¤çæ°æ®çæ¶é´ã"
+
+#: index.docbook:38
+msgid "Hibernates goal is to relieve the developer from 95 percent of common data persistence related programming tasks. Hibernate may not be the best solution for data-centric applications that only use stored-procedures to implement the business logic in the database, it is most useful with object-oriented domain models and business logic in the Java-based middle-tier. However, Hibernate can certainly help you to remove or encapsulate vendor-specific SQL code and will help with the common task of result set translation from a tabular representation to a graph of objects."
+msgstr "Hibernateçç®æ æ¯å¯¹äºå¼åè
é常çæ°æ®æä¹
åç¸å
³çç¼ç¨ä»»å¡ï¼è§£æ¾å
¶ä¸ç95%ã对äºä»¥æ°æ®ä¸ºä¸å¿çç¨åºæ¥è¯´,å®ä»¬å¾å¾åªå¨æ°æ®åºä¸ä½¿ç¨åå¨è¿ç¨æ¥å®ç°åä¸é»è¾,Hibernateå¯è½ä¸æ¯æ好ç解å³æ¹æ¡;对äºé£äºå¨åºäºJavaçä¸é´å±åºç¨ä¸ï¼å®ä»¬å®ç°é¢å对象çä¸å¡æ¨¡åååä¸é»è¾çåºç¨ï¼Hibernateæ¯ææç¨çãä¸ç®¡ææ ·ï¼Hibernateä¸å®å¯ä»¥å¸®å©ä½ æ¶é¤æè
å
è£
é£äºé对ç¹å®ååçSQL代ç ï¼å¹¶ä¸å¸®ä½ æç»æéä»è¡¨æ ¼å¼ç表示形å¼è½¬æ¢å°ä¸ç³»åç对象å»ã"
+
+#: index.docbook:48
+msgid "If you are new to Hibernate and Object/Relational Mapping or even Java, please follow these steps:"
+msgstr "å¦æä½ å¯¹Hibernateå对象/å
³ç³»æ°æ®åºæ å°è¿æ¯ä¸ªæ°æï¼æè
çè³å¯¹Javaä¹ä¸çæï¼è¯·æç
§ä¸é¢çæ¥éª¤æ¥å¦ä¹ ã"
+
+#: index.docbook:55
+msgid "Read <xref linkend=\"tutorial\"/> for a tutorial with step-by-step instructions. The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr "é
读<xref linkend=\"tutorial\"/>ï¼è¿æ¯ä¸ç¯å
å«è¯¦ç»çéæ¥æ导çæåãæ¬æåçæºä»£ç å
å«å¨åè¡å
ä¸ï¼ä½ å¯ä»¥å¨<literal>doc/reference/tutorial/</literal>ç®å½ä¸æ¾å°ã"
+
+#: index.docbook:63
+msgid "Read <xref linkend=\"architecture\"/> to understand the environments where Hibernate can be used."
+msgstr "é
读<xref linkend=\"architecture\"/>æ¥ç解Hibernateå¯ä»¥ä½¿ç¨çç¯å¢ã"
+
+#: index.docbook:69
+msgid "Have a look at the <literal>eg/</literal> directory in the Hibernate distribution, it contains a simple standalone application. Copy your JDBC driver to the <literal>lib/</literal> directory and edit <literal>etc/hibernate.properties</literal>, specifying correct values for your database. From a command prompt in the distribution directory, type <literal>ant eg</literal> (using Ant), or under Windows, type <literal>build eg</literal>."
+msgstr "æ¥çHibernateåè¡å
ä¸ç<literal>eg/</literal>ç®å½ï¼éé¢æä¸ä¸ªç®åçç¬ç«è¿è¡çç¨åºãæä½ çJDBC驱å¨æ·è´å°<literal>lib/</literal>ç®å½ä¸ï¼ä¿®æ¹ä¸ä¸<literal>src/hibernate.properties</literal>,æå®å
¶ä¸ä½ çæ°æ®åºçä¿¡æ¯ãè¿å
¥å½ä»¤è¡ï¼åæ¢å°ä½ çåè¡å
çç®å½ï¼è¾å
¥<literal>ant eg</literal>(使ç¨äºAntï¼ï¼æè
å¨Windowsæä½ç³»ç»ä¸ä½¿ç¨<literal>build eg</literal>ã"
+
+#: index.docbook:80
+msgid "Use this reference documentation as your primary source of information. Consider reading <emphasis>Java Persistence with Hibernate</emphasis> (http://www.manning.com/bauer2) if you need more help with application design or if you prefer a step-by-step tutorial. Also visit http://caveatemptor.hibernate.org and download the example application for Java Persistence with Hibernate."
+msgstr "æè¿ä»½åèææ¡£ä½ä¸ºä½ å¦ä¹ ç主è¦ä¿¡æ¯æ¥æºã"
+
+#: index.docbook:90
+msgid "FAQs are answered on the Hibernate website."
+msgstr "å¨Hibernate çç½ç«ä¸å¯ä»¥æ¾å°ç»å¸¸æé®çé®é¢ä¸è§£ç(FAQ)ã"
+
+#: index.docbook:95
+msgid "Third party demos, examples, and tutorials are linked on the Hibernate website."
+msgstr "å¨Hibernateç½ç«ä¸è¿æ第ä¸æ¹çæ¼ç¤ºã示ä¾åæç¨çé¾æ¥ã"
+
+#: index.docbook:101
+msgid "The Community Area on the Hibernate website is a good resource for design patterns and various integration solutions (Tomcat, JBoss AS, Struts, EJB, etc.)."
+msgstr "Hibernateç½ç«çâ社åº(Community Area)âæ¯è®¨è®ºå
³äºè®¾è®¡æ¨¡å¼ä»¥åå¾å¤æ´åæ¹æ¡(Tomcat, JBoss AS, Struts, EJB,çç)ç好å°æ¹ã"
+
+#: index.docbook:109
+msgid "If you have questions, use the user forum linked on the Hibernate website. We also provide a JIRA issue trackings system for bug reports and feature requests. If you are interested in the development of Hibernate, join the developer mailing list. If you are interested in translating this documentation into your language, contact us on the developer mailing list."
+msgstr "å¦æä½ æé®é¢ï¼è¯·ä½¿ç¨Hibernateç½ç«ä¸é¾æ¥çç¨æ·è®ºåãæ们ä¹æä¾ä¸ä¸ªJIRAé®é¢è¿½è¸ªç³»ç»ï¼æ¥æébugæ¥ååæ°åè½è¯·æ±ãå¦æä½ å¯¹å¼åHibernateæå
´è¶£ï¼è¯·å å
¥å¼åè
çé®ä»¶å表ãï¼Hibernateç½ç«ä¸çç¨æ·è®ºåæä¸ä¸ªä¸æçé¢ï¼JavaEyeä¹æHibernateä¸æçé¢,æ¨å¯ä»¥å¨é£é交æµé®é¢ä¸ç»éªãï¼"
+
+#: index.docbook:117
+msgid "Commercial development support, production support, and training for Hibernate is available through JBoss Inc. (see http://www.hibernate.org/SupportTraining/). Hibernate is a Professional Open Source project and a critical component of the JBoss Enterprise Middleware System (JEMS) suite of products."
+msgstr "åä¸å¼åã产åæ¯æåHibernateå¹è®å¯ä»¥éè¿JBoss Inc.è·å¾ãï¼è¯·æ¥é
ï¼http://www.hibernate.org/SupportTraining/ï¼ã Hibernateæ¯ä¸ä¸ªä¸ä¸çå¼æ¾æºä»£ç 项ç®(Professional Open Source project)ï¼ä¹æ¯JBoss Enterprise Middleware System(JEMS),JBossä¼ä¸çº§ä¸é´ä»¶ç³»ç»çä¸ä¸ªæ ¸å¿ç»ä»¶ã"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/query_criteria.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/query_criteria.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/query_criteria.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,484 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Criteria Queries"
+msgstr ""
+
+#: index.docbook:7
+msgid "Hibernate features an intuitive, extensible criteria query API."
+msgstr ""
+
+#: index.docbook:12
+msgid "Creating a <literal>Criteria</literal> instance"
+msgstr ""
+
+#: index.docbook:14
+msgid "The interface <literal>org.hibernate.Criteria</literal> represents a query against a particular persistent class. The <literal>Session</literal> is a factory for <literal>Criteria</literal> instances."
+msgstr ""
+
+#: index.docbook:20
+msgid ""
+ "<![CDATA[Criteria crit = sess.createCriteria(Cat.class);\n"
+ "crit.setMaxResults(50);\n"
+ "List cats = crit.list();]]>"
+msgstr ""
+
+#: index.docbook:25
+msgid "Narrowing the result set"
+msgstr ""
+
+#: index.docbook:27
+msgid "An individual query criterion is an instance of the interface <literal>org.hibernate.criterion.Criterion</literal>. The class <literal>org.hibernate.criterion.Restrictions</literal> defines factory methods for obtaining certain built-in <literal>Criterion</literal> types."
+msgstr ""
+
+#: index.docbook:35
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.between(\"weight\", minWeight, maxWeight) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:37
+msgid "Restrictions may be grouped logically."
+msgstr ""
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .add( Restrictions.or(\n"
+ " Restrictions.eq( \"age\", new Integer(0) ),\n"
+ " Restrictions.isNull(\"age\")\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:43
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.in( \"name\", new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( Restrictions.isNull(\"age\") )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(0) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(1) ) )\n"
+ " .add( Restrictions.eq(\"age\", new Integer(2) ) )\n"
+ " ) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:45
+msgid "There are quite a range of built-in criterion types (<literal>Restrictions</literal> subclasses), but one that is especially useful lets you specify SQL directly."
+msgstr ""
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.sqlRestriction(\"lower({alias}.name) like lower(?)\", \"Fritz%\", Hibernate.STRING) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:52
+msgid "The <literal>{alias}</literal> placeholder with be replaced by the row alias of the queried entity."
+msgstr ""
+
+#: index.docbook:57
+msgid "An alternative approach to obtaining a criterion is to get it from a <literal>Property</literal> instance. You can create a <literal>Property</literal> by calling <literal>Property.forName()</literal>."
+msgstr ""
+
+#: index.docbook:63
+msgid ""
+ "<![CDATA[\n"
+ "Property age = Property.forName(\"age\");\n"
+ "List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.disjunction()\n"
+ " .add( age.isNull() )\n"
+ " .add( age.eq( new Integer(0) ) )\n"
+ " .add( age.eq( new Integer(1) ) )\n"
+ " .add( age.eq( new Integer(2) ) )\n"
+ " ) )\n"
+ " .add( Property.forName(\"name\").in( new String[] { \"Fritz\", \"Izi\", \"Pk\" } ) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:68
+msgid "Ordering the results"
+msgstr ""
+
+#: index.docbook:70
+msgid "You may order the results using <literal>org.hibernate.criterion.Order</literal>."
+msgstr ""
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\")\n"
+ " .addOrder( Order.asc(\"name\") )\n"
+ " .addOrder( Order.desc(\"age\") )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:76
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"name\").like(\"F%\") )\n"
+ " .addOrder( Property.forName(\"name\").asc() )\n"
+ " .addOrder( Property.forName(\"age\").desc() )\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:81
+msgid "Associations"
+msgstr ""
+
+#: index.docbook:83
+msgid "You may easily specify constraints upon related entities by navigating associations using <literal>createCriteria()</literal>."
+msgstr ""
+
+#: index.docbook:88
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .createCriteria(\"kittens\")\n"
+ " .add( Restrictions.like(\"name\", \"F%\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:90
+msgid "note that the second <literal>createCriteria()</literal> returns a new instance of <literal>Criteria</literal>, which refers to the elements of the <literal>kittens</literal> collection."
+msgstr ""
+
+#: index.docbook:96
+msgid "The following, alternate form is useful in certain circumstances."
+msgstr ""
+
+#: index.docbook:100
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createAlias(\"kittens\", \"kt\")\n"
+ " .createAlias(\"mate\", \"mt\")\n"
+ " .add( Restrictions.eqProperty(\"kt.name\", \"mt.name\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:102
+msgid "(<literal>createAlias()</literal> does not create a new instance of <literal>Criteria</literal>.)"
+msgstr ""
+
+#: index.docbook:107
+msgid "Note that the kittens collections held by the <literal>Cat</literal> instances returned by the previous two queries are <emphasis>not</emphasis> pre-filtered by the criteria! If you wish to retrieve just the kittens that match the criteria, you must use a <literal>ResultTransformer</literal>."
+msgstr ""
+
+#: index.docbook:114
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .createCriteria(\"kittens\", \"kt\")\n"
+ " .add( Restrictions.eq(\"name\", \"F%\") )\n"
+ " .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)\n"
+ " .list();\n"
+ "Iterator iter = cats.iterator();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Map map = (Map) iter.next();\n"
+ " Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);\n"
+ " Cat kitten = (Cat) map.get(\"kt\");\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:119
+msgid "Dynamic association fetching"
+msgstr ""
+
+#: index.docbook:121
+msgid "You may specify association fetching semantics at runtime using <literal>setFetchMode()</literal>."
+msgstr ""
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[List cats = sess.createCriteria(Cat.class)\n"
+ " .add( Restrictions.like(\"name\", \"Fritz%\") )\n"
+ " .setFetchMode(\"mate\", FetchMode.EAGER)\n"
+ " .setFetchMode(\"kittens\", FetchMode.EAGER)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:128
+msgid "This query will fetch both <literal>mate</literal> and <literal>kittens</literal> by outer join. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr ""
+
+#: index.docbook:136
+msgid "Example queries"
+msgstr ""
+
+#: index.docbook:138
+msgid "The class <literal>org.hibernate.criterion.Example</literal> allows you to construct a query criterion from a given instance."
+msgstr ""
+
+#: index.docbook:143
+msgid ""
+ "<![CDATA[Cat cat = new Cat();\n"
+ "cat.setSex('F');\n"
+ "cat.setColor(Color.BLACK);\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:145
+msgid "Version properties, identifiers and associations are ignored. By default, null valued properties are excluded."
+msgstr ""
+
+#: index.docbook:150
+msgid "You can adjust how the <literal>Example</literal> is applied."
+msgstr ""
+
+#: index.docbook:154
+msgid ""
+ "<![CDATA[Example example = Example.create(cat)\n"
+ " .excludeZeroes() //exclude zero valued properties\n"
+ " .excludeProperty(\"color\") //exclude the property named \"color\"\n"
+ " .ignoreCase() //perform case insensitive string comparisons\n"
+ " .enableLike(); //use like for string comparisons\n"
+ "List results = session.createCriteria(Cat.class)\n"
+ " .add(example)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:156
+msgid "You can even use examples to place criteria upon associated objects."
+msgstr ""
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .add( Example.create(cat) )\n"
+ " .createCriteria(\"mate\")\n"
+ " .add( Example.create( cat.getMate() ) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:165
+msgid "Projections, aggregation and grouping"
+msgstr ""
+
+#: index.docbook:166
+msgid "The class <literal>org.hibernate.criterion.Projections</literal> is a factory for <literal>Projection</literal> instances. We apply a projection to a query by calling <literal>setProjection()</literal>."
+msgstr ""
+
+#: index.docbook:172
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.rowCount() )\n"
+ " .add( Restrictions.eq(\"color\", Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:174
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount() )\n"
+ " .add( Projections.avg(\"weight\") )\n"
+ " .add( Projections.max(\"weight\") )\n"
+ " .add( Projections.groupProperty(\"color\") )\n"
+ " )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:176
+msgid "There is no explicit \"group by\" necessary in a criteria query. Certain projection types are defined to be <emphasis>grouping projections</emphasis>, which also appear in the SQL <literal>group by</literal> clause."
+msgstr ""
+
+#: index.docbook:182
+msgid "An alias may optionally be assigned to a projection, so that the projected value may be referred to in restrictions or orderings. Here are two different ways to do this:"
+msgstr ""
+
+#: index.docbook:188
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.alias( Projections.groupProperty(\"color\"), \"colr\" ) )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:190
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.groupProperty(\"color\").as(\"colr\") )\n"
+ " .addOrder( Order.asc(\"colr\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:192
+msgid "The <literal>alias()</literal> and <literal>as()</literal> methods simply wrap a projection instance in another, aliased, instance of <literal>Projection</literal>. As a shortcut, you can assign an alias when you add the projection to a projection list:"
+msgstr ""
+
+#: index.docbook:199
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount(), \"catCountByColor\" )\n"
+ " .add( Projections.avg(\"weight\"), \"avgWeight\" )\n"
+ " .add( Projections.max(\"weight\"), \"maxWeight\" )\n"
+ " .add( Projections.groupProperty(\"color\"), \"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:201
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Domestic.class, \"cat\")\n"
+ " .createAlias(\"kittens\", \"kit\")\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.property(\"cat.name\"), \"catName\" )\n"
+ " .add( Projections.property(\"kit.name\"), \"kitName\" )\n"
+ " )\n"
+ " .addOrder( Order.asc(\"catName\") )\n"
+ " .addOrder( Order.asc(\"kitName\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:203
+msgid "You can also use <literal>Property.forName()</literal> to express projections:"
+msgstr ""
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Property.forName(\"name\") )\n"
+ " .add( Property.forName(\"color\").eq(Color.BLACK) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:209
+msgid ""
+ "<![CDATA[List results = session.createCriteria(Cat.class)\n"
+ " .setProjection( Projections.projectionList()\n"
+ " .add( Projections.rowCount().as(\"catCountByColor\") )\n"
+ " .add( Property.forName(\"weight\").avg().as(\"avgWeight\") )\n"
+ " .add( Property.forName(\"weight\").max().as(\"maxWeight\") )\n"
+ " .add( Property.forName(\"color\").group().as(\"color\" )\n"
+ " )\n"
+ " .addOrder( Order.desc(\"catCountByColor\") )\n"
+ " .addOrder( Order.desc(\"avgWeight\") )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:214
+msgid "Detached queries and subqueries"
+msgstr ""
+
+#: index.docbook:215
+msgid "The <literal>DetachedCriteria</literal> class lets you create a query outside the scope of a session, and then later execute it using some arbitrary <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:220
+msgid ""
+ "<![CDATA[DetachedCriteria query = DetachedCriteria.forClass(Cat.class)\n"
+ " .add( Property.forName(\"sex\").eq('F') );\n"
+ " \n"
+ "Session session = ....;\n"
+ "Transaction txn = session.beginTransaction();\n"
+ "List results = query.getExecutableCriteria(session).setMaxResults(100).list();\n"
+ "txn.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:222
+msgid "A <literal>DetachedCriteria</literal> may also be used to express a subquery. Criterion instances involving subqueries may be obtained via <literal>Subqueries</literal> or <literal>Property</literal>."
+msgstr ""
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\").avg() );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Property.forName(\"weight\").gt(avgWeight) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:230
+msgid ""
+ "<![CDATA[DetachedCriteria weights = DetachedCriteria.forClass(Cat.class)\n"
+ " .setProjection( Property.forName(\"weight\") );\n"
+ "session.createCriteria(Cat.class)\n"
+ " .add( Subqueries.geAll(\"weight\", weights) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:232
+msgid "Even correlated subqueries are possible:"
+msgstr ""
+
+#: index.docbook:236
+msgid ""
+ "<![CDATA[DetachedCriteria avgWeightForSex = DetachedCriteria.forClass(Cat.class, \"cat2\")\n"
+ " .setProjection( Property.forName(\"weight\").avg() )\n"
+ " .add( Property.forName(\"cat2.sex\").eqProperty(\"cat.sex\") );\n"
+ "session.createCriteria(Cat.class, \"cat\")\n"
+ " .add( Property.forName(\"weight\").gt(avgWeightForSex) )\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:245
+msgid "Queries by natural identifier"
+msgstr ""
+
+#: index.docbook:247
+msgid "For most queries, including criteria queries, the query cache is not very efficient, because query cache invalidation occurs too frequently. However, there is one special kind of query where we can optimize the cache invalidation algorithm: lookups by a constant natural key. In some applications, this kind of query occurs frequently. The criteria API provides special provision for this use case."
+msgstr ""
+
+#: index.docbook:255
+msgid "First, you should map the natural key of your entity using <literal><natural-id></literal>, and enable use of the second-level cache."
+msgstr ""
+
+#: index.docbook:260
+msgid ""
+ "<![CDATA[<class name=\"User\">\n"
+ " <cache usage=\"read-write\"/>\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <natural-id>\n"
+ " <property name=\"name\"/>\n"
+ " <property name=\"org\"/>\n"
+ " </natural-id>\n"
+ " <property name=\"password\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:262
+msgid "Note that this functionality is not intended for use with entities with <emphasis>mutable</emphasis> natural keys."
+msgstr ""
+
+#: index.docbook:267
+msgid "Next, enable the Hibernate query cache."
+msgstr ""
+
+#: index.docbook:271
+msgid "Now, <literal>Restrictions.naturalId()</literal> allows us to make use of the more efficient cache algorithm."
+msgstr ""
+
+#: index.docbook:276
+msgid ""
+ "<![CDATA[session.createCriteria(User.class)\n"
+ " .add( Restrictions.naturalId()\n"
+ " .set(\"name\", \"gavin\")\n"
+ " .set(\"org\", \"hb\") \n"
+ " ).setCacheable(true)\n"
+ " .uniqueResult();]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/query_hql.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/query_hql.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/query_hql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1275 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "HQL: The Hibernate Query Language"
+msgstr ""
+
+#: index.docbook:7
+msgid "Hibernate is equipped with an extremely powerful query language that (quite intentionally) looks very much like SQL. But don't be fooled by the syntax; HQL is fully object-oriented, understanding notions like inheritence, polymorphism and association."
+msgstr ""
+
+#: index.docbook:14
+msgid "Case Sensitivity"
+msgstr ""
+
+#: index.docbook:16
+msgid "Queries are case-insensitive, except for names of Java classes and properties. So <literal>SeLeCT</literal> is the same as <literal>sELEct</literal> is the same as <literal>SELECT</literal> but <literal>org.hibernate.eg.FOO</literal> is not <literal>org.hibernate.eg.Foo</literal> and <literal>foo.barSet</literal> is not <literal>foo.BARSET</literal>."
+msgstr ""
+
+#: index.docbook:27
+msgid "This manual uses lowercase HQL keywords. Some users find queries with uppercase keywords more readable, but we find this convention ugly when embedded in Java code."
+msgstr ""
+
+#: index.docbook:35
+msgid "The from clause"
+msgstr ""
+
+#: index.docbook:37
+msgid "The simplest possible Hibernate query is of the form:"
+msgstr ""
+
+#: index.docbook:41
+msgid "<![CDATA[from eg.Cat]]>"
+msgstr ""
+
+#: index.docbook:43
+msgid "which simply returns all instances of the class <literal>eg.Cat</literal>. We don't usually need to qualify the class name, since <literal>auto-import</literal> is the default. So we almost always just write:"
+msgstr ""
+
+#: index.docbook:49
+msgid "<![CDATA[from Cat]]>"
+msgstr ""
+
+#: index.docbook:51
+msgid "Most of the time, you will need to assign an <emphasis>alias</emphasis>, since you will want to refer to the <literal>Cat</literal> in other parts of the query."
+msgstr ""
+
+#: index.docbook:57, index.docbook:372
+msgid "<![CDATA[from Cat as cat]]>"
+msgstr ""
+
+#: index.docbook:59
+msgid "This query assigns the alias <literal>cat</literal> to <literal>Cat</literal> instances, so we could use that alias later in the query. The <literal>as</literal> keyword is optional; we could also write:"
+msgstr ""
+
+#: index.docbook:65
+msgid "<![CDATA[from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:67
+msgid "Multiple classes may appear, resulting in a cartesian product or \"cross\" join."
+msgstr ""
+
+#: index.docbook:71
+msgid "<![CDATA[from Formula, Parameter]]>"
+msgstr ""
+
+#: index.docbook:72
+msgid "<![CDATA[from Formula as form, Parameter as param]]>"
+msgstr ""
+
+#: index.docbook:74
+msgid "It is considered good practice to name query aliases using an initial lowercase, consistent with Java naming standards for local variables (eg. <literal>domesticCat</literal>)."
+msgstr ""
+
+#: index.docbook:83
+msgid "Associations and joins"
+msgstr ""
+
+#: index.docbook:85
+msgid "We may also assign aliases to associated entities, or even to elements of a collection of values, using a <literal>join</literal>."
+msgstr ""
+
+#: index.docbook:90
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join cat.mate as mate\n"
+ " left outer join cat.kittens as kitten]]>"
+msgstr ""
+
+#: index.docbook:92
+msgid "<![CDATA[from Cat as cat left join cat.mate.kittens as kittens]]>"
+msgstr ""
+
+#: index.docbook:94
+msgid "<![CDATA[from Formula form full join form.parameter param]]>"
+msgstr ""
+
+#: index.docbook:96
+msgid "The supported join types are borrowed from ANSI SQL"
+msgstr ""
+
+#: index.docbook:103
+msgid "inner join"
+msgstr ""
+
+#: index.docbook:108
+msgid "left outer join"
+msgstr ""
+
+#: index.docbook:113
+msgid "right outer join"
+msgstr ""
+
+#: index.docbook:117
+msgid "<literal>full join</literal> (not usually useful)"
+msgstr ""
+
+#: index.docbook:123
+msgid "The <literal>inner join</literal>, <literal>left outer join</literal> and <literal>right outer join</literal> constructs may be abbreviated."
+msgstr ""
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " join cat.mate as mate\n"
+ " left join cat.kittens as kitten]]>"
+msgstr ""
+
+#: index.docbook:130
+msgid "You may supply extra join conditions using the HQL <literal>with</literal> keyword."
+msgstr ""
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " left join cat.kittens as kitten\n"
+ " with kitten.bodyWeight > 10.0]]>"
+msgstr ""
+
+#: index.docbook:137
+msgid "In addition, a \"fetch\" join allows associations or collections of values to be initialized along with their parent objects, using a single select. This is particularly useful in the case of a collection. It effectively overrides the outer join and lazy declarations of the mapping file for associations and collections. See <xref linkend=\"performance-fetching\"/> for more information."
+msgstr ""
+
+#: index.docbook:145
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens]]>"
+msgstr ""
+
+#: index.docbook:147
+msgid "A fetch join does not usually need to assign an alias, because the associated objects should not be used in the <literal>where</literal> clause (or any other clause). Also, the associated objects are not returned directly in the query results. Instead, they may be accessed via the parent object. The only reason we might need an alias is if we are recursively join fetching a further collection:"
+msgstr ""
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ " inner join fetch cat.mate\n"
+ " left join fetch cat.kittens child\n"
+ " left join fetch child.kittens]]>"
+msgstr ""
+
+#: index.docbook:157
+msgid "Note that the <literal>fetch</literal> construct may not be used in queries called using <literal>iterate()</literal> (though <literal>scroll()</literal> can be used). Nor should <literal>fetch</literal> be used together with <literal>setMaxResults()</literal> or <literal>setFirstResult()</literal> as these operations are based on the result rows, which usually contain duplicates for eager collection fetching, hence, the number of rows is not what you'd expect. Nor may <literal>fetch</literal> be used together with an ad hoc <literal>with</literal> condition. It is possible to create a cartesian product by join fetching more than one collection in a query, so take care in this case. Join fetching multiple collection roles also sometimes gives unexpected results for bag mappings, so be careful about how you formulate your queries in this case. Finally, note that <literal>full join fetch</literal> and <literal>right join fetch</literal> are not meaningful."
+msgstr ""
+
+#: index.docbook:172
+msgid "If you are using property-level lazy fetching (with bytecode instrumentation), it is possible to force Hibernate to fetch the lazy properties immediately (in the first query) using <literal>fetch all properties</literal>."
+msgstr ""
+
+#: index.docbook:178
+msgid "<![CDATA[from Document fetch all properties order by name]]>"
+msgstr ""
+
+#: index.docbook:179
+msgid "<![CDATA[from Document doc fetch all properties where lower(doc.name) like '%cats%']]>"
+msgstr ""
+
+#: index.docbook:184
+msgid "Forms of join syntax"
+msgstr ""
+
+#: index.docbook:186
+msgid "HQL supports two forms of association joining: <literal>implicit</literal> and <literal>explicit</literal>."
+msgstr ""
+
+#: index.docbook:190
+msgid "The queries shown in the previous section all use the <literal>explicit</literal> form where the join keyword is explicitly used in the from clause. This is the recommended form."
+msgstr ""
+
+#: index.docbook:195
+msgid "The <literal>implicit</literal> form does not use the join keyword. Instead, the associations are \"dereferenced\" using dot-notation. <literal>implicit</literal> joins can appear in any of the HQL clauses. <literal>implicit</literal> join result in inner joins in the resulting SQL statement."
+msgstr ""
+
+#: index.docbook:202
+msgid "<![CDATA[from Cat as cat where cat.mate.name like '%s%']]>"
+msgstr ""
+
+#: index.docbook:206
+msgid "Refering to identifier property"
+msgstr ""
+
+#: index.docbook:208
+msgid "There are, generally speaking, 2 ways to refer to an entity's identifier property:"
+msgstr ""
+
+#: index.docbook:213
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the identifier property of an entity <emphasis>provided that entity does not define a non-identifier property named id</emphasis>."
+msgstr ""
+
+#: index.docbook:220
+msgid "If the entity defines a named identifier property, you may use that property name."
+msgstr ""
+
+#: index.docbook:226
+msgid "References to composite identifier properties follow the same naming rules. If the entity has a non-identifier property named id, the composite identifier property can only be referenced by its defined named; otherwise, the special <literal>id</literal> property can be used to rerference the identifier property."
+msgstr ""
+
+#: index.docbook:233
+msgid "Note: this has changed significantly starting in version 3.2.2. In previous versions, <literal>id</literal> <emphasis>always</emphasis> referred to the identifier property no matter what its actual name. A ramification of that decision was that non-identifier properties named <literal>id</literal> could never be referenced in Hibernate queries."
+msgstr ""
+
+#: index.docbook:242
+msgid "The select clause"
+msgstr ""
+
+#: index.docbook:244
+msgid "The <literal>select</literal> clause picks which objects and properties to return in the query result set. Consider:"
+msgstr ""
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[select mate\n"
+ "from Cat as cat\n"
+ " inner join cat.mate as mate]]>"
+msgstr ""
+
+#: index.docbook:251
+msgid "The query will select <literal>mate</literal>s of other <literal>Cat</literal>s. Actually, you may express this query more compactly as:"
+msgstr ""
+
+#: index.docbook:256
+msgid "<![CDATA[select cat.mate from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:258
+msgid "Queries may return properties of any value type including properties of component type:"
+msgstr ""
+
+#: index.docbook:262
+msgid ""
+ "<![CDATA[select cat.name from DomesticCat cat\n"
+ "where cat.name like 'fri%']]>"
+msgstr ""
+
+#: index.docbook:264
+msgid "<![CDATA[select cust.name.firstName from Customer as cust]]>"
+msgstr ""
+
+#: index.docbook:266
+msgid "Queries may return multiple objects and/or properties as an array of type <literal>Object[]</literal>,"
+msgstr ""
+
+#: index.docbook:271
+msgid ""
+ "<![CDATA[select mother, offspr, mate.name\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr ""
+
+#: index.docbook:273
+msgid "or as a <literal>List</literal>,"
+msgstr ""
+
+#: index.docbook:277
+msgid ""
+ "<![CDATA[select new list(mother, offspr, mate.name)\n"
+ "from DomesticCat as mother\n"
+ " inner join mother.mate as mate\n"
+ " left outer join mother.kittens as offspr]]>"
+msgstr ""
+
+#: index.docbook:279
+msgid "or as an actual typesafe Java object,"
+msgstr ""
+
+#: index.docbook:283
+msgid ""
+ "<![CDATA[select new Family(mother, mate, offspr)\n"
+ "from DomesticCat as mother\n"
+ " join mother.mate as mate\n"
+ " left join mother.kittens as offspr]]>"
+msgstr ""
+
+#: index.docbook:285
+msgid "assuming that the class <literal>Family</literal> has an appropriate constructor."
+msgstr ""
+
+#: index.docbook:289
+msgid "You may assign aliases to selected expressions using <literal>as</literal>:"
+msgstr ""
+
+#: index.docbook:293
+msgid ""
+ "<![CDATA[select max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n\n"
+ "from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:295
+msgid "This is most useful when used together with <literal>select new map</literal>:"
+msgstr ""
+
+#: index.docbook:299
+msgid ""
+ "<![CDATA[select new map( max(bodyWeight) as max, min(bodyWeight) as min, count(*) as n )\n"
+ "from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:301
+msgid "This query returns a <literal>Map</literal> from aliases to selected values."
+msgstr ""
+
+#: index.docbook:308
+msgid "Aggregate functions"
+msgstr ""
+
+#: index.docbook:310
+msgid "HQL queries may even return the results of aggregate functions on properties:"
+msgstr ""
+
+#: index.docbook:314
+msgid ""
+ "<![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)\n"
+ "from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:325
+msgid "The supported aggregate functions are"
+msgstr ""
+
+#: index.docbook:332
+msgid "avg(...), sum(...), min(...), max(...)"
+msgstr ""
+
+#: index.docbook:337
+msgid "count(*)"
+msgstr ""
+
+#: index.docbook:342
+msgid "count(...), count(distinct ...), count(all...)"
+msgstr ""
+
+#: index.docbook:347
+msgid "You may use arithmetic operators, concatenation, and recognized SQL functions in the select clause:"
+msgstr ""
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[select cat.weight + sum(kitten.weight)\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.weight]]>"
+msgstr ""
+
+#: index.docbook:354
+msgid "<![CDATA[select firstName||' '||initial||' '||upper(lastName) from Person]]>"
+msgstr ""
+
+#: index.docbook:356
+msgid "The <literal>distinct</literal> and <literal>all</literal> keywords may be used and have the same semantics as in SQL."
+msgstr ""
+
+#: index.docbook:361
+msgid ""
+ "<![CDATA[select distinct cat.name from Cat cat\n"
+ "\n"
+ "select count(distinct cat.name), count(cat) from Cat cat]]>"
+msgstr ""
+
+#: index.docbook:366
+msgid "Polymorphic queries"
+msgstr ""
+
+#: index.docbook:368
+msgid "A query like:"
+msgstr ""
+
+#: index.docbook:374
+msgid "returns instances not only of <literal>Cat</literal>, but also of subclasses like <literal>DomesticCat</literal>. Hibernate queries may name <emphasis>any</emphasis> Java class or interface in the <literal>from</literal> clause. The query will return instances of all persistent classes that extend that class or implement the interface. The following query would return all persistent objects:"
+msgstr ""
+
+#: index.docbook:382
+msgid "<![CDATA[from java.lang.Object o]]>"
+msgstr ""
+
+#: index.docbook:384
+msgid "The interface <literal>Named</literal> might be implemented by various persistent classes:"
+msgstr ""
+
+#: index.docbook:389
+msgid "<![CDATA[from Named n, Named m where n.name = m.name]]>"
+msgstr ""
+
+#: index.docbook:391
+msgid "Note that these last two queries will require more than one SQL <literal>SELECT</literal>. This means that the <literal>order by</literal> clause does not correctly order the whole result set. (It also means you can't call these queries using <literal>Query.scroll()</literal>.)"
+msgstr ""
+
+#: index.docbook:400
+msgid "The where clause"
+msgstr ""
+
+#: index.docbook:402
+msgid "The <literal>where</literal> clause allows you to narrow the list of instances returned. If no alias exists, you may refer to properties by name:"
+msgstr ""
+
+#: index.docbook:407
+msgid "<![CDATA[from Cat where name='Fritz']]>"
+msgstr ""
+
+#: index.docbook:409
+msgid "If there is an alias, use a qualified property name:"
+msgstr ""
+
+#: index.docbook:413
+msgid "<![CDATA[from Cat as cat where cat.name='Fritz']]>"
+msgstr ""
+
+#: index.docbook:415
+msgid "returns instances of <literal>Cat</literal> named 'Fritz'."
+msgstr ""
+
+#: index.docbook:419
+msgid ""
+ "<![CDATA[select foo\n"
+ "from Foo foo, Bar bar\n"
+ "where foo.startDate = bar.date]]>"
+msgstr ""
+
+#: index.docbook:421
+msgid "will return all instances of <literal>Foo</literal> for which there exists an instance of <literal>bar</literal> with a <literal>date</literal> property equal to the <literal>startDate</literal> property of the <literal>Foo</literal>. Compound path expressions make the <literal>where</literal> clause extremely powerful. Consider:"
+msgstr ""
+
+#: index.docbook:430
+msgid "<![CDATA[from Cat cat where cat.mate.name is not null]]>"
+msgstr ""
+
+#: index.docbook:432
+msgid "This query translates to an SQL query with a table (inner) join. If you were to write something like"
+msgstr ""
+
+#: index.docbook:437
+msgid ""
+ "<![CDATA[from Foo foo\n"
+ "where foo.bar.baz.customer.address.city is not null]]>"
+msgstr ""
+
+#: index.docbook:439
+msgid "you would end up with a query that would require four table joins in SQL."
+msgstr ""
+
+#: index.docbook:443
+msgid "The <literal>=</literal> operator may be used to compare not only properties, but also instances:"
+msgstr ""
+
+#: index.docbook:448
+msgid "<![CDATA[from Cat cat, Cat rival where cat.mate = rival.mate]]>"
+msgstr ""
+
+#: index.docbook:450
+msgid ""
+ "<![CDATA[select cat, mate\n"
+ "from Cat cat, Cat mate\n"
+ "where cat.mate = mate]]>"
+msgstr ""
+
+#: index.docbook:452
+msgid "The special property (lowercase) <literal>id</literal> may be used to reference the unique identifier of an object. See <xref linkend=\"queryhql-identifier-property\"/> for more information."
+msgstr ""
+
+#: index.docbook:458
+msgid ""
+ "<![CDATA[from Cat as cat where cat.id = 123\n"
+ "\n"
+ "from Cat as cat where cat.mate.id = 69]]>"
+msgstr ""
+
+#: index.docbook:460
+msgid "The second query is efficient. No table join is required!"
+msgstr ""
+
+#: index.docbook:464
+msgid "Properties of composite identifiers may also be used. Suppose <literal>Person</literal> has a composite identifier consisting of <literal>country</literal> and <literal>medicareNumber</literal>. Again, see <xref linkend=\"queryhql-identifier-property\"/> for more information regarding referencing identifier properties."
+msgstr ""
+
+#: index.docbook:471
+msgid ""
+ "<![CDATA[from bank.Person person\n"
+ "where person.id.country = 'AU'\n"
+ " and person.id.medicareNumber = 123456]]>"
+msgstr ""
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[from bank.Account account\n"
+ "where account.owner.id.country = 'AU'\n"
+ " and account.owner.id.medicareNumber = 123456]]>"
+msgstr ""
+
+#: index.docbook:475
+msgid "Once again, the second query requires no table join."
+msgstr ""
+
+#: index.docbook:479
+msgid "Likewise, the special property <literal>class</literal> accesses the discriminator value of an instance in the case of polymorphic persistence. A Java class name embedded in the where clause will be translated to its discriminator value."
+msgstr ""
+
+#: index.docbook:485
+msgid "<![CDATA[from Cat cat where cat.class = DomesticCat]]>"
+msgstr ""
+
+#: index.docbook:487
+msgid "You may also use components or composite user types, or properties of said component types. See <xref linkend=\"queryhql-coomponents\"/> for more details."
+msgstr ""
+
+#: index.docbook:492
+msgid "An \"any\" type has the special properties <literal>id</literal> and <literal>class</literal>, allowing us to express a join in the following way (where <literal>AuditLog.item</literal> is a property mapped with <literal><any></literal>)."
+msgstr ""
+
+#: index.docbook:498
+msgid ""
+ "<![CDATA[from AuditLog log, Payment payment\n"
+ "where log.item.class = 'Payment' and log.item.id = payment.id]]>"
+msgstr ""
+
+#: index.docbook:500
+msgid "Notice that <literal>log.item.class</literal> and <literal>payment.class</literal> would refer to the values of completely different database columns in the above query."
+msgstr ""
+
+#: index.docbook:508
+msgid "Expressions"
+msgstr ""
+
+#: index.docbook:510
+msgid "Expressions allowed in the <literal>where</literal> clause include most of the kind of things you could write in SQL:"
+msgstr ""
+
+#: index.docbook:517
+msgid "mathematical operators <literal>+, -, *, /</literal>"
+msgstr ""
+
+#: index.docbook:522
+msgid "binary comparison operators <literal>=, >=, <=, <>, !=, like</literal>"
+msgstr ""
+
+#: index.docbook:527
+msgid "logical operations <literal>and, or, not</literal>"
+msgstr ""
+
+#: index.docbook:532
+msgid "Parentheses <literal>( )</literal>, indicating grouping"
+msgstr ""
+
+#: index.docbook:537
+msgid "<literal>in</literal>, <literal>not in</literal>, <literal>between</literal>, <literal>is null</literal>, <literal>is not null</literal>, <literal>is empty</literal>, <literal>is not empty</literal>, <literal>member of</literal> and <literal>not member of</literal>"
+msgstr ""
+
+#: index.docbook:550
+msgid "\"Simple\" case, <literal>case ... when ... then ... else ... end</literal>, and \"searched\" case, <literal>case when ... then ... else ... end</literal>"
+msgstr ""
+
+#: index.docbook:556
+msgid "string concatenation <literal>...||...</literal> or <literal>concat(...,...)</literal>"
+msgstr ""
+
+#: index.docbook:561
+msgid "<literal>current_date()</literal>, <literal>current_time()</literal>, <literal>current_timestamp()</literal>"
+msgstr ""
+
+#: index.docbook:567
+msgid "<literal>second(...)</literal>, <literal>minute(...)</literal>, <literal>hour(...)</literal>, <literal>day(...)</literal>, <literal>month(...)</literal>, <literal>year(...)</literal>,"
+msgstr ""
+
+#: index.docbook:574
+msgid "Any function or operator defined by EJB-QL 3.0: <literal>substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()</literal>"
+msgstr ""
+
+#: index.docbook:580
+msgid "<literal>coalesce()</literal> and <literal>nullif()</literal>"
+msgstr ""
+
+#: index.docbook:585
+msgid "<literal>str()</literal> for converting numeric or temporal values to a readable string"
+msgstr ""
+
+#: index.docbook:591
+msgid "<literal>cast(... as ...)</literal>, where the second argument is the name of a Hibernate type, and <literal>extract(... from ...)</literal> if ANSI <literal>cast()</literal> and <literal>extract()</literal> is supported by the underlying database"
+msgstr ""
+
+#: index.docbook:599
+msgid "the HQL <literal>index()</literal> function, that applies to aliases of a joined indexed collection"
+msgstr ""
+
+#: index.docbook:605
+msgid "HQL functions that take collection-valued path expressions: <literal>size(), minelement(), maxelement(), minindex(), maxindex()</literal>, along with the special <literal>elements()</literal> and <literal>indices</literal> functions which may be quantified using <literal>some, all, exists, any, in</literal>."
+msgstr ""
+
+#: index.docbook:613
+msgid "Any database-supported SQL scalar function like <literal>sign()</literal>, <literal>trunc()</literal>, <literal>rtrim()</literal>, <literal>sin()</literal>"
+msgstr ""
+
+#: index.docbook:619
+msgid "JDBC-style positional parameters <literal>?</literal>"
+msgstr ""
+
+#: index.docbook:624
+msgid "named parameters <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>"
+msgstr ""
+
+#: index.docbook:629
+msgid "SQL literals <literal>'foo'</literal>, <literal>69</literal>, <literal>6.66E+2</literal>, <literal>'1970-01-01 10:00:01.0'</literal>"
+msgstr ""
+
+#: index.docbook:635
+msgid "Java <literal>public static final</literal> constants <literal>eg.Color.TABBY</literal>"
+msgstr ""
+
+#: index.docbook:641
+msgid "<literal>in</literal> and <literal>between</literal> may be used as follows:"
+msgstr ""
+
+#: index.docbook:645
+msgid "<![CDATA[from DomesticCat cat where cat.name between 'A' and 'B']]>"
+msgstr ""
+
+#: index.docbook:647
+msgid "<![CDATA[from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr ""
+
+#: index.docbook:649
+msgid "and the negated forms may be written"
+msgstr ""
+
+#: index.docbook:653
+msgid "<![CDATA[from DomesticCat cat where cat.name not between 'A' and 'B']]>"
+msgstr ""
+
+#: index.docbook:655
+msgid "<![CDATA[from DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]>"
+msgstr ""
+
+#: index.docbook:657
+msgid "Likewise, <literal>is null</literal> and <literal>is not null</literal> may be used to test for null values."
+msgstr ""
+
+#: index.docbook:662
+msgid "Booleans may be easily used in expressions by declaring HQL query substitutions in Hibernate configuration:"
+msgstr ""
+
+#: index.docbook:667
+msgid "<![CDATA[<property name=\"hibernate.query.substitutions\">true 1, false 0</property>]]>"
+msgstr ""
+
+#: index.docbook:669
+msgid "This will replace the keywords <literal>true</literal> and <literal>false</literal> with the literals <literal>1</literal> and <literal>0</literal> in the translated SQL from this HQL:"
+msgstr ""
+
+#: index.docbook:674
+msgid "<![CDATA[from Cat cat where cat.alive = true]]>"
+msgstr ""
+
+#: index.docbook:676
+msgid "You may test the size of a collection with the special property <literal>size</literal>, or the special <literal>size()</literal> function."
+msgstr ""
+
+#: index.docbook:681
+msgid "<![CDATA[from Cat cat where cat.kittens.size > 0]]>"
+msgstr ""
+
+#: index.docbook:683
+msgid "<![CDATA[from Cat cat where size(cat.kittens) > 0]]>"
+msgstr ""
+
+#: index.docbook:685
+msgid "For indexed collections, you may refer to the minimum and maximum indices using <literal>minindex</literal> and <literal>maxindex</literal> functions. Similarly, you may refer to the minimum and maximum elements of a collection of basic type using the <literal>minelement</literal> and <literal>maxelement</literal> functions."
+msgstr ""
+
+#: index.docbook:693
+msgid "<![CDATA[from Calendar cal where maxelement(cal.holidays) > current_date]]>"
+msgstr ""
+
+#: index.docbook:695
+msgid "<![CDATA[from Order order where maxindex(order.items) > 100]]>"
+msgstr ""
+
+#: index.docbook:697
+msgid "<![CDATA[from Order order where minelement(order.items) > 10000]]>"
+msgstr ""
+
+#: index.docbook:699
+msgid "The SQL functions <literal>any, some, all, exists, in</literal> are supported when passed the element or index set of a collection (<literal>elements</literal> and <literal>indices</literal> functions) or the result of a subquery (see below)."
+msgstr ""
+
+#: index.docbook:705
+msgid ""
+ "<![CDATA[select mother from Cat as mother, Cat as kit\n"
+ "where kit in elements(foo.kittens)]]>"
+msgstr ""
+
+#: index.docbook:707
+msgid ""
+ "<![CDATA[select p from NameList list, Person p\n"
+ "where p.name = some elements(list.names)]]>"
+msgstr ""
+
+#: index.docbook:709
+msgid "<![CDATA[from Cat cat where exists elements(cat.kittens)]]>"
+msgstr ""
+
+#: index.docbook:711
+msgid "<![CDATA[from Player p where 3 > all elements(p.scores)]]>"
+msgstr ""
+
+#: index.docbook:713
+msgid "<![CDATA[from Show show where 'fizard' in indices(show.acts)]]>"
+msgstr ""
+
+#: index.docbook:715
+msgid "Note that these constructs - <literal>size</literal>, <literal>elements</literal>, <literal>indices</literal>, <literal>minindex</literal>, <literal>maxindex</literal>, <literal>minelement</literal>, <literal>maxelement</literal> - may only be used in the where clause in Hibernate3."
+msgstr ""
+
+#: index.docbook:722
+msgid "Elements of indexed collections (arrays, lists, maps) may be referred to by index (in a where clause only):"
+msgstr ""
+
+#: index.docbook:727
+msgid "<![CDATA[from Order order where order.items[0].id = 1234]]>"
+msgstr ""
+
+#: index.docbook:729
+msgid ""
+ "<![CDATA[select person from Person person, Calendar calendar\n"
+ "where calendar.holidays['national day'] = person.birthDay\n"
+ " and person.nationality.calendar = calendar]]>"
+msgstr ""
+
+#: index.docbook:731
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11]]>"
+msgstr ""
+
+#: index.docbook:733
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ maxindex(order.items) ] = item and order.id = 11]]>"
+msgstr ""
+
+#: index.docbook:735
+msgid "The expression inside <literal>[]</literal> may even be an arithmetic expression."
+msgstr ""
+
+#: index.docbook:739
+msgid ""
+ "<![CDATA[select item from Item item, Order order\n"
+ "where order.items[ size(order.items) - 1 ] = item]]>"
+msgstr ""
+
+#: index.docbook:741
+msgid "HQL also provides the built-in <literal>index()</literal> function, for elements of a one-to-many association or collection of values."
+msgstr ""
+
+#: index.docbook:746
+msgid ""
+ "<![CDATA[select item, index(item) from Order order\n"
+ " join order.items item\n"
+ "where index(item) < 5]]>"
+msgstr ""
+
+#: index.docbook:748
+msgid "Scalar SQL functions supported by the underlying database may be used"
+msgstr ""
+
+#: index.docbook:752
+msgid "<![CDATA[from DomesticCat cat where upper(cat.name) like 'FRI%']]>"
+msgstr ""
+
+#: index.docbook:754
+msgid "If you are not yet convinced by all this, think how much longer and less readable the following query would be in SQL:"
+msgstr ""
+
+#: index.docbook:759
+msgid ""
+ "<![CDATA[select cust\n"
+ "from Product prod,\n"
+ " Store store\n"
+ " inner join store.customers cust\n"
+ "where prod.name = 'widget'\n"
+ " and store.location.name in ( 'Melbourne', 'Sydney' )\n"
+ " and prod = all elements(cust.currentOrder.lineItems)]]>"
+msgstr ""
+
+#: index.docbook:761
+msgid "<emphasis>Hint:</emphasis> something like"
+msgstr ""
+
+#: index.docbook:765
+msgid ""
+ "<![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order\n"
+ "FROM customers cust,\n"
+ " stores store,\n"
+ " locations loc,\n"
+ " store_customers sc,\n"
+ " product prod\n"
+ "WHERE prod.name = 'widget'\n"
+ " AND store.loc_id = loc.id\n"
+ " AND loc.name IN ( 'Melbourne', 'Sydney' )\n"
+ " AND sc.store_id = store.id\n"
+ " AND sc.cust_id = cust.id\n"
+ " AND prod.id = ALL(\n"
+ " SELECT item.prod_id\n"
+ " FROM line_items item, orders o\n"
+ " WHERE item.order_id = o.id\n"
+ " AND cust.current_order = o.id\n"
+ " )]]>"
+msgstr ""
+
+#: index.docbook:770
+msgid "The order by clause"
+msgstr ""
+
+#: index.docbook:772
+msgid "The list returned by a query may be ordered by any property of a returned class or components:"
+msgstr ""
+
+#: index.docbook:776
+msgid ""
+ "<![CDATA[from DomesticCat cat\n"
+ "order by cat.name asc, cat.weight desc, cat.birthdate]]>"
+msgstr ""
+
+#: index.docbook:778
+msgid "The optional <literal>asc</literal> or <literal>desc</literal> indicate ascending or descending order respectively."
+msgstr ""
+
+#: index.docbook:785
+msgid "The group by clause"
+msgstr ""
+
+#: index.docbook:787
+msgid "A query that returns aggregate values may be grouped by any property of a returned class or components:"
+msgstr ""
+
+#: index.docbook:791
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color]]>"
+msgstr ""
+
+#: index.docbook:793
+msgid ""
+ "<![CDATA[select foo.id, avg(name), max(name)\n"
+ "from Foo foo join foo.names name\n"
+ "group by foo.id]]>"
+msgstr ""
+
+#: index.docbook:795
+msgid "A <literal>having</literal> clause is also allowed."
+msgstr ""
+
+#: index.docbook:799
+msgid ""
+ "<![CDATA[select cat.color, sum(cat.weight), count(cat)\n"
+ "from Cat cat\n"
+ "group by cat.color\n"
+ "having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]>"
+msgstr ""
+
+#: index.docbook:801
+msgid "SQL functions and aggregate functions are allowed in the <literal>having</literal> and <literal>order by</literal> clauses, if supported by the underlying database (eg. not in MySQL)."
+msgstr ""
+
+#: index.docbook:807
+msgid ""
+ "<![CDATA[select cat\n"
+ "from Cat cat\n"
+ " join cat.kittens kitten\n"
+ "group by cat.id, cat.name, cat.other, cat.properties\n"
+ "having avg(kitten.weight) > 100\n"
+ "order by count(kitten) asc, sum(kitten.weight) desc]]>"
+msgstr ""
+
+#: index.docbook:809
+msgid "Note that neither the <literal>group by</literal> clause nor the <literal>order by</literal> clause may contain arithmetic expressions. Also note that Hibernate currently does not expand a grouped entity, so you can't write <literal>group by cat</literal> if all properties of <literal>cat</literal> are non-aggregated. You have to list all non-aggregated properties explicitly."
+msgstr ""
+
+#: index.docbook:821
+msgid "Subqueries"
+msgstr ""
+
+#: index.docbook:823
+msgid "For databases that support subselects, Hibernate supports subqueries within queries. A subquery must be surrounded by parentheses (often by an SQL aggregate function call). Even correlated subqueries (subqueries that refer to an alias in the outer query) are allowed."
+msgstr ""
+
+#: index.docbook:829
+msgid ""
+ "<![CDATA[from Cat as fatcat\n"
+ "where fatcat.weight > (\n"
+ " select avg(cat.weight) from DomesticCat cat\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:831
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name = some (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:833
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not exists (\n"
+ " from Cat as mate where mate.mate = cat\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:835
+msgid ""
+ "<![CDATA[from DomesticCat as cat\n"
+ "where cat.name not in (\n"
+ " select name.nickName from Name as name\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:837
+msgid ""
+ "<![CDATA[select cat.id, (select max(kit.weight) from cat.kitten kit)\n"
+ "from Cat as cat]]>"
+msgstr ""
+
+#: index.docbook:839
+msgid "Note that HQL subqueries may occur only in the select or where clauses."
+msgstr ""
+
+#: index.docbook:843
+msgid "Note that subqueries can also utilize <literal>row value constructor</literal> syntax. See <xref linkend=\"queryhql-tuple\"/> for more details."
+msgstr ""
+
+#: index.docbook:851
+msgid "HQL examples"
+msgstr ""
+
+#: index.docbook:853
+msgid "Hibernate queries can be quite powerful and complex. In fact, the power of the query language is one of Hibernate's main selling points. Here are some example queries very similar to queries that I used on a recent project. Note that most queries you will write are much simpler than these!"
+msgstr ""
+
+#: index.docbook:859
+msgid "The following query returns the order id, number of items and total value of the order for all unpaid orders for a particular customer and given minimum total value, ordering the results by total value. In determining the prices, it uses the current catalog. The resulting SQL query, against the <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>, <literal>CATALOG</literal> and <literal>PRICE</literal> tables has four inner joins and an (uncorrelated) subselect."
+msgstr ""
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog.effectiveDate < sysdate\n"
+ " and catalog.effectiveDate >= all (\n"
+ " select cat.effectiveDate\n"
+ " from Catalog as cat\n"
+ " where cat.effectiveDate < sysdate\n"
+ " )\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr ""
+
+#: index.docbook:870
+msgid "What a monster! Actually, in real life, I'm not very keen on subqueries, so my query was really more like this:"
+msgstr ""
+
+#: index.docbook:875
+msgid ""
+ "<![CDATA[select order.id, sum(price.amount), count(item)\n"
+ "from Order as order\n"
+ " join order.lineItems as item\n"
+ " join item.product as product,\n"
+ " Catalog as catalog\n"
+ " join catalog.prices as price\n"
+ "where order.paid = false\n"
+ " and order.customer = :customer\n"
+ " and price.product = product\n"
+ " and catalog = :currentCatalog\n"
+ "group by order\n"
+ "having sum(price.amount) > :minAmount\n"
+ "order by sum(price.amount) desc]]>"
+msgstr ""
+
+#: index.docbook:877
+msgid "The next query counts the number of payments in each status, excluding all payments in the <literal>AWAITING_APPROVAL</literal> status where the most recent status change was made by the current user. It translates to an SQL query with two inner joins and a correlated subselect against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> and <literal>PAYMENT_STATUS_CHANGE</literal> tables."
+msgstr ""
+
+#: index.docbook:885
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ " join payment.statusChanges as statusChange\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or (\n"
+ " statusChange.timeStamp = (\n"
+ " select max(change.timeStamp)\n"
+ " from PaymentStatusChange change\n"
+ " where change.payment = payment\n"
+ " )\n"
+ " and statusChange.user <> :currentUser\n"
+ " )\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr ""
+
+#: index.docbook:887
+msgid "If I would have mapped the <literal>statusChanges</literal> collection as a list, instead of a set, the query would have been much simpler to write."
+msgstr ""
+
+#: index.docbook:892
+msgid ""
+ "<![CDATA[select count(payment), status.name\n"
+ "from Payment as payment\n"
+ " join payment.currentStatus as status\n"
+ "where payment.status.name <> PaymentStatus.AWAITING_APPROVAL\n"
+ " or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser\n"
+ "group by status.name, status.sortOrder\n"
+ "order by status.sortOrder]]>"
+msgstr ""
+
+#: index.docbook:894
+msgid "The next query uses the MS SQL Server <literal>isNull()</literal> function to return all the accounts and unpaid payments for the organization to which the current user belongs. It translates to an SQL query with three inner joins, an outer join and a subselect against the <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>, <literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> and <literal>ORG_USER</literal> tables."
+msgstr ""
+
+#: index.docbook:903
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser in elements(account.holder.users)\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr ""
+
+#: index.docbook:905
+msgid "For some databases, we would need to do away with the (correlated) subselect."
+msgstr ""
+
+#: index.docbook:909
+msgid ""
+ "<![CDATA[select account, payment\n"
+ "from Account as account\n"
+ " join account.holder.users as user\n"
+ " left outer join account.payments as payment\n"
+ "where :currentUser = user\n"
+ " and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)\n"
+ "order by account.type.sortOrder, account.accountNumber, payment.dueDate]]>"
+msgstr ""
+
+#: index.docbook:914
+msgid "Bulk update and delete"
+msgstr ""
+
+#: index.docbook:916
+msgid "HQL now supports <literal>update</literal>, <literal>delete</literal> and <literal>insert ... select ...</literal> statements. See <xref linkend=\"batch-direct\"/> for details."
+msgstr ""
+
+#: index.docbook:924
+msgid "Tips & Tricks"
+msgstr ""
+
+#: index.docbook:926
+msgid "You can count the number of query results without actually returning them:"
+msgstr ""
+
+#: index.docbook:930
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue()]]>"
+msgstr ""
+
+#: index.docbook:932
+msgid "To order a result by the size of a collection, use the following query:"
+msgstr ""
+
+#: index.docbook:936
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "order by count(msg)]]>"
+msgstr ""
+
+#: index.docbook:938
+msgid "If your database supports subselects, you can place a condition upon selection size in the where clause of your query:"
+msgstr ""
+
+#: index.docbook:943
+msgid "<![CDATA[from User usr where size(usr.messages) >= 1]]>"
+msgstr ""
+
+#: index.docbook:945
+msgid "If your database doesn't support subselects, use the following query:"
+msgstr ""
+
+#: index.docbook:949
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User usr.name\n"
+ " join usr.messages msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) >= 1]]>"
+msgstr ""
+
+#: index.docbook:951
+msgid "As this solution can't return a <literal>User</literal> with zero messages because of the inner join, the following form is also useful:"
+msgstr ""
+
+#: index.docbook:956
+msgid ""
+ "<![CDATA[select usr.id, usr.name\n"
+ "from User as usr\n"
+ " left join usr.messages as msg\n"
+ "group by usr.id, usr.name\n"
+ "having count(msg) = 0]]>"
+msgstr ""
+
+#: index.docbook:958
+msgid "Properties of a JavaBean can be bound to named query parameters:"
+msgstr ""
+
+#: index.docbook:962
+msgid ""
+ "<![CDATA[Query q = s.createQuery(\"from foo Foo as foo where foo.name=:name and foo.size=:size\");\n"
+ "q.setProperties(fooBean); // fooBean has getName() and getSize()\n"
+ "List foos = q.list();]]>"
+msgstr ""
+
+#: index.docbook:964
+msgid "Collections are pageable by using the <literal>Query</literal> interface with a filter:"
+msgstr ""
+
+#: index.docbook:968
+msgid ""
+ "<![CDATA[Query q = s.createFilter( collection, \"\" ); // the trivial filter\n"
+ "q.setMaxResults(PAGE_SIZE);\n"
+ "q.setFirstResult(PAGE_SIZE * pageNumber);\n"
+ "List page = q.list();]]>"
+msgstr ""
+
+#: index.docbook:970
+msgid "Collection elements may be ordered or grouped using a query filter:"
+msgstr ""
+
+#: index.docbook:974
+msgid ""
+ "<![CDATA[Collection orderedCollection = s.filter( collection, \"order by this.amount\" );\n"
+ "Collection counts = s.filter( collection, \"select this.type, count(this) group by this.type\" );]]>"
+msgstr ""
+
+#: index.docbook:976
+msgid "You can find the size of a collection without initializing it:"
+msgstr ""
+
+#: index.docbook:980
+msgid "<![CDATA[( (Integer) session.createQuery(\"select count(*) from ....\").iterate().next() ).intValue();]]>"
+msgstr ""
+
+#: index.docbook:985
+msgid "Components"
+msgstr ""
+
+#: index.docbook:987
+msgid "Components might be used in just about every way that simple value types can be used in HQL queries. They can appear in the <literal>select</literal> clause:"
+msgstr ""
+
+#: index.docbook:992, index.docbook:1038
+msgid "<![CDATA[select p.name from from Person p]]>"
+msgstr ""
+
+#: index.docbook:993
+msgid "<![CDATA[select p.name.first from from Person p]]>"
+msgstr ""
+
+#: index.docbook:995
+msgid "where the Person's name property is a component. Components can also be used in the <literal>where</literal> clause:"
+msgstr ""
+
+#: index.docbook:1000
+msgid "<![CDATA[from from Person p where p.name = :name]]>"
+msgstr ""
+
+#: index.docbook:1001
+msgid "<![CDATA[from from Person p where p.name.first = :firstName]]>"
+msgstr ""
+
+#: index.docbook:1003
+msgid "Components can also be used in the <literal>order by</literal> clause:"
+msgstr ""
+
+#: index.docbook:1007
+msgid "<![CDATA[from from Person p order by p.name]]>"
+msgstr ""
+
+#: index.docbook:1008
+msgid "<![CDATA[from from Person p order by p.name.first]]>"
+msgstr ""
+
+#: index.docbook:1010
+msgid "Another common use of components is in <xref linkend=\"queryhql-tuple\"/>row value constructors."
+msgstr ""
+
+#: index.docbook:1016
+msgid "Row value constructor syntax"
+msgstr ""
+
+#: index.docbook:1018
+msgid "HQL supports the use of ANSI SQL <literal>row value constructor</literal> syntax (sometimes called <literal>tuple</literal> syntax), even though the underlying database may not support that notion. Here we are generally referring to multi-valued comparisons, typically associated with components. Consider an entity Person which defines a name component:"
+msgstr ""
+
+#: index.docbook:1025
+msgid "<![CDATA[from Person p where p.name.first='John' and p.name.last='Jingleheimer-Schmidt']]>"
+msgstr ""
+
+#: index.docbook:1027
+msgid "That's valid syntax, although a little verbose. It be nice to make this a bit more concise and use <literal>row value constructor</literal> syntax:"
+msgstr ""
+
+#: index.docbook:1032
+msgid "<![CDATA[from Person p where p.name=('John', 'Jingleheimer-Schmidt')]]>"
+msgstr ""
+
+#: index.docbook:1034
+msgid "It can also be useful to specify this in the <literal>select</literal> clause:"
+msgstr ""
+
+#: index.docbook:1040
+msgid "Another time using <literal>row value constructor</literal> syntax can be beneficial is when using subqueries needing to compare against multiple values:"
+msgstr ""
+
+#: index.docbook:1045
+msgid ""
+ "<![CDATA[from Cat as cat\n"
+ "where not ( cat.name, cat.color ) in (\n"
+ " select cat.name, cat.color from DomesticCat cat\n"
+ ")]]>"
+msgstr ""
+
+#: index.docbook:1047
+msgid "One thing to consider when deciding if you want to use this syntax is that the query will be dependent upon the ordering of the component sub-properties in the metadata."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/query_sql.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/query_sql.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/query_sql.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,818 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Native SQL"
+msgstr ""
+
+#: index.docbook:7
+msgid "You may also express queries in the native SQL dialect of your database. This is useful if you want to utilize database specific features such as query hints or the <literal>CONNECT</literal> keyword in Oracle. It also provides a clean migration path from a direct SQL/JDBC based application to Hibernate."
+msgstr ""
+
+#: index.docbook:13
+msgid "Hibernate3 allows you to specify handwritten SQL (including stored procedures) for all create, update, delete, and load operations."
+msgstr ""
+
+#: index.docbook:17
+msgid "Using a <literal>SQLQuery</literal>"
+msgstr ""
+
+#: index.docbook:19
+msgid "Execution of native SQL queries is controlled via the <literal>SQLQuery</literal> interface, which is obtained by calling <literal>Session.createSQLQuery()</literal>. The following describes how to use this API for querying."
+msgstr ""
+
+#: index.docbook:25
+msgid "Scalar queries"
+msgstr ""
+
+#: index.docbook:27
+msgid "The most basic SQL query is to get a list of scalars (values)."
+msgstr ""
+
+#: index.docbook:30
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").list();\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").list();\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:32
+msgid "These will both return a List of Object arrays (Object[]) with scalar values for each column in the CATS table. Hibernate will use ResultSetMetadata to deduce the actual order and types of the returned scalar values."
+msgstr ""
+
+#: index.docbook:37
+msgid "To avoid the overhead of using <literal>ResultSetMetadata</literal> or simply to be more explicit in what is returned one can use <literal>addScalar()</literal>."
+msgstr ""
+
+#: index.docbook:41
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\", Hibernate.STRING)\n"
+ " .addScalar(\"BIRTHDATE\", Hibernate.DATE)\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:43, index.docbook:89, index.docbook:170, index.docbook:321
+msgid "This query specified:"
+msgstr ""
+
+#: index.docbook:47, index.docbook:93, index.docbook:325
+msgid "the SQL query string"
+msgstr ""
+
+#: index.docbook:51
+msgid "the columns and types to return"
+msgstr ""
+
+#: index.docbook:55
+msgid "This will still return Object arrays, but now it will not use <literal>ResultSetMetdata</literal> but will instead explicitly get the ID, NAME and BIRTHDATE column as respectively a Long, String and a Short from the underlying resultset. This also means that only these three columns will be returned, even though the query is using <literal>*</literal> and could return more than the three listed columns."
+msgstr ""
+
+#: index.docbook:63
+msgid "It is possible to leave out the type information for all or some of the scalars."
+msgstr ""
+
+#: index.docbook:66
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\")\n"
+ " .addScalar(\"ID\", Hibernate.LONG)\n"
+ " .addScalar(\"NAME\")\n"
+ " .addScalar(\"BIRTHDATE\")\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:68
+msgid "This is essentially the same query as before, but now <literal>ResultSetMetaData</literal> is used to decide the type of NAME and BIRTHDATE where as the type of ID is explicitly specified."
+msgstr ""
+
+#: index.docbook:72
+msgid "How the java.sql.Types returned from ResultSetMetaData is mapped to Hibernate types is controlled by the Dialect. If a specific type is not mapped or does not result in the expected type it is possible to customize it via calls to <literal>registerHibernateType</literal> in the Dialect."
+msgstr ""
+
+#: index.docbook:80
+msgid "Entity queries"
+msgstr ""
+
+#: index.docbook:82
+msgid "The above queries were all about returning scalar values, basically returning the \"raw\" values from the resultset. The following shows how to get entity objects from a native sql query via <literal>addEntity()</literal>."
+msgstr ""
+
+#: index.docbook:87
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT * FROM CATS\").addEntity(Cat.class);\n"
+ "sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:97
+msgid "the entity returned by the query"
+msgstr ""
+
+#: index.docbook:101
+msgid "Assuming that Cat is mapped as a class with the columns ID, NAME and BIRTHDATE the above queries will both return a List where each element is a Cat entity."
+msgstr ""
+
+#: index.docbook:105
+msgid "If the entity is mapped with a <literal>many-to-one</literal> to another entity it is required to also return this when performing the native query, otherwise a database specific \"column not found\" error will occur. The additional columns will automatically be returned when using the * notation, but we prefer to be explicit as in the following example for a <literal>many-to-one</literal> to a <literal>Dog</literal>:"
+msgstr ""
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, DOG_ID FROM CATS\").addEntity(Cat.class);\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:115
+msgid "This will allow cat.getDog() to function properly."
+msgstr ""
+
+#: index.docbook:119
+msgid "Handling associations and collections"
+msgstr ""
+
+#: index.docbook:121
+msgid "It is possible to eagerly join in the <literal>Dog</literal> to avoid the possible extra roundtrip for initializing the proxy. This is done via the <literal>addJoin()</literal> method, which allows you to join in an association or collection."
+msgstr ""
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.ID, NAME, BIRTHDATE, DOG_ID, D_ID, D_NAME FROM CATS c, DOGS d WHERE c.DOG_ID = d.D_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dog\");\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:128
+msgid "In this example the returned <literal>Cat</literal>'s will have their <literal>dog</literal> property fully initialized without any extra roundtrip to the database. Notice that we added a alias name (\"cat\") to be able to specify the target property path of the join. It is possible to do the same eager joining for collections, e.g. if the <literal>Cat</literal> had a one-to-many to <literal>Dog</literal> instead."
+msgstr ""
+
+#: index.docbook:136
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT ID, NAME, BIRTHDATE, D_ID, D_NAME, CAT_ID FROM CATS c, DOGS d WHERE c.ID = d.CAT_ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addJoin(\"cat.dogs\");\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:138
+msgid "At this stage we are reaching the limits of what is possible with native queries without starting to enhance the sql queries to make them usable in Hibernate; the problems starts to arise when returning multiple entities of the same type or when the default alias/column names are not enough."
+msgstr ""
+
+#: index.docbook:146
+msgid "Returning multiple entities"
+msgstr ""
+
+#: index.docbook:148
+msgid "Until now the result set column names are assumed to be the same as the column names specified in the mapping document. This can be problematic for SQL queries which join multiple tables, since the same column names may appear in more than one table."
+msgstr ""
+
+#: index.docbook:153
+msgid "Column alias injection is needed in the following query (which most likely will fail):"
+msgstr ""
+
+#: index.docbook:156
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT c.*, m.* FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:158
+msgid "The intention for this query is to return two Cat instances per row, a cat and its mother. This will fail since there is a conflict of names since they are mapped to the same column names and on some databases the returned column aliases will most likely be on the form \"c.ID\", \"c.NAME\", etc. which are not equal to the columns specificed in the mappings (\"ID\" and \"NAME\")."
+msgstr ""
+
+#: index.docbook:165
+msgid "The following form is not vulnerable to column name duplication:"
+msgstr ""
+
+#: index.docbook:168
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT {cat.*}, {mother.*} FROM CATS c, CATS m WHERE c.MOTHER_ID = c.ID\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class)\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:174
+msgid "the SQL query string, with placeholders for Hibernate to inject column aliases"
+msgstr ""
+
+#: index.docbook:179
+msgid "the entities returned by the query"
+msgstr ""
+
+#: index.docbook:183
+msgid "The {cat.*} and {mother.*} notation used above is a shorthand for \"all properties\". Alternatively, you may list the columns explicity, but even in this case we let Hibernate inject the SQL column aliases for each property. The placeholder for a column alias is just the property name qualified by the table alias. In the following example, we retrieve Cats and their mothers from a different table (cat_log) to the one declared in the mapping metadata. Notice that we may even use the property aliases in the where clause if we like."
+msgstr ""
+
+#: index.docbook:192
+msgid ""
+ "<![CDATA[String sql = \"SELECT ID as {c.id}, NAME as {c.name}, \" + \n"
+ " \"BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} \" +\n"
+ " \"FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID\";\n"
+ "\n"
+ "List loggedCats = sess.createSQLQuery(sql)\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ " .addEntity(\"mother\", Cat.class).list()\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:195
+msgid "Alias and property references"
+msgstr ""
+
+#: index.docbook:197
+msgid "For most cases the above alias injection is needed, but for queries relating to more complex mappings like composite properties, inheritance discriminators, collections etc. there are some specific aliases to use to allow Hibernate to inject the proper aliases."
+msgstr ""
+
+#: index.docbook:202
+msgid "The following table shows the different possibilities of using the alias injection. Note: the alias names in the result are examples, each alias will have a unique and probably different name when used."
+msgstr ""
+
+#: index.docbook:208
+msgid "Alias injection names"
+msgstr ""
+
+#: index.docbook:219
+msgid "Description"
+msgstr ""
+
+#: index.docbook:221
+msgid "Syntax"
+msgstr ""
+
+#: index.docbook:223
+msgid "Example"
+msgstr ""
+
+#: index.docbook:229
+msgid "A simple property"
+msgstr ""
+
+#: index.docbook:231
+msgid "{[aliasname].[propertyname]"
+msgstr ""
+
+#: index.docbook:233
+msgid "A_NAME as {item.name}"
+msgstr ""
+
+#: index.docbook:237
+msgid "A composite property"
+msgstr ""
+
+#: index.docbook:239
+msgid "{[aliasname].[componentname].[propertyname]}"
+msgstr ""
+
+#: index.docbook:241
+msgid "CURRENCY as {item.amount.currency}, VALUE as {item.amount.value}"
+msgstr ""
+
+#: index.docbook:246
+msgid "Discriminator of an entity"
+msgstr ""
+
+#: index.docbook:248
+msgid "{[aliasname].class}"
+msgstr ""
+
+#: index.docbook:250
+msgid "DISC as {item.class}"
+msgstr ""
+
+#: index.docbook:254
+msgid "All properties of an entity"
+msgstr ""
+
+#: index.docbook:256, index.docbook:304
+msgid "{[aliasname].*}"
+msgstr ""
+
+#: index.docbook:258
+msgid "{item.*}"
+msgstr ""
+
+#: index.docbook:262
+msgid "A collection key"
+msgstr ""
+
+#: index.docbook:264
+msgid "{[aliasname].key}"
+msgstr ""
+
+#: index.docbook:266
+msgid "ORGID as {coll.key}"
+msgstr ""
+
+#: index.docbook:270
+msgid "The id of an collection"
+msgstr ""
+
+#: index.docbook:272
+msgid "{[aliasname].id}"
+msgstr ""
+
+#: index.docbook:274
+msgid "EMPID as {coll.id}"
+msgstr ""
+
+#: index.docbook:278
+msgid "The element of an collection"
+msgstr ""
+
+#: index.docbook:280
+msgid "{[aliasname].element}"
+msgstr ""
+
+#: index.docbook:282
+msgid "XID as {coll.element}"
+msgstr ""
+
+#: index.docbook:286
+msgid "roperty of the element in the collection"
+msgstr ""
+
+#: index.docbook:288
+msgid "{[aliasname].element.[propertyname]}"
+msgstr ""
+
+#: index.docbook:290
+msgid "NAME as {coll.element.name}"
+msgstr ""
+
+#: index.docbook:294
+msgid "All properties of the element in the collection"
+msgstr ""
+
+#: index.docbook:296
+msgid "{[aliasname].element.*}"
+msgstr ""
+
+#: index.docbook:298
+msgid "{coll.element.*}"
+msgstr ""
+
+#: index.docbook:302
+msgid "All properties of the the collection"
+msgstr ""
+
+#: index.docbook:306
+msgid "{coll.*}"
+msgstr ""
+
+#: index.docbook:315
+msgid "Returning non-managed entities"
+msgstr ""
+
+#: index.docbook:317
+msgid "It is possible to apply a ResultTransformer to native sql queries. Allowing it to e.g. return non-managed entities."
+msgstr ""
+
+#: index.docbook:319
+msgid ""
+ "<![CDATA[sess.createSQLQuery(\"SELECT NAME, BIRTHDATE FROM CATS\")\n"
+ " .setResultTransformer(Transformers.aliasToBean(CatDTO.class))]]>"
+msgstr ""
+
+#: index.docbook:329
+msgid "a result transformer"
+msgstr ""
+
+#: index.docbook:333
+msgid "The above query will return a list of <literal>CatDTO</literal> which has been instantiated and injected the values of NAME and BIRTHNAME into its corresponding properties or fields."
+msgstr ""
+
+#: index.docbook:340
+msgid "Handling inheritance"
+msgstr ""
+
+#: index.docbook:342
+msgid "Native sql queries which query for entities that is mapped as part of an inheritance must include all properties for the baseclass and all it subclasses."
+msgstr ""
+
+#: index.docbook:348
+msgid "Parameters"
+msgstr ""
+
+#: index.docbook:350
+msgid "Native sql queries support positional as well as named parameters:"
+msgstr ""
+
+#: index.docbook:353
+msgid ""
+ "<![CDATA[Query query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like ?\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(0, \"Pus%\").list();\n"
+ " \n"
+ "query = sess.createSQLQuery(\"SELECT * FROM CATS WHERE NAME like :name\").addEntity(Cat.class);\n"
+ "List pusList = query.setString(\"name\", \"Pus%\").list(); ]]>"
+msgstr ""
+
+#: index.docbook:361
+msgid "Named SQL queries"
+msgstr ""
+
+#: index.docbook:363
+msgid "Named SQL queries may be defined in the mapping document and called in exactly the same way as a named HQL query. In this case, we do <emphasis>not</emphasis> need to call <literal>addEntity()</literal>."
+msgstr ""
+
+#: index.docbook:368
+msgid ""
+ "<![CDATA[<sql-query name=\"persons\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex}\n"
+ " FROM PERSON person\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:370
+msgid ""
+ "<![CDATA[List people = sess.getNamedQuery(\"persons\")\n"
+ " .setString(\"namePattern\", namePattern)\n"
+ " .setMaxResults(50)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:372
+msgid "The <literal><return-join></literal> and <literal><load-collection></literal> elements are used to join associations and define queries which initialize collections, respectively."
+msgstr ""
+
+#: index.docbook:377
+msgid ""
+ "<![CDATA[<sql-query name=\"personsWith\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:379
+msgid "A named SQL query may return a scalar value. You must declare the column alias and Hibernate type using the <literal><return-scalar></literal> element:"
+msgstr ""
+
+#: index.docbook:383
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return-scalar column=\"name\" type=\"string\"/>\n"
+ " <return-scalar column=\"age\" type=\"long\"/>\n"
+ " SELECT p.NAME AS name,\n"
+ " p.AGE AS age,\n"
+ " FROM PERSON p WHERE p.NAME LIKE 'Hiber%'\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:385
+msgid "You can externalize the resultset mapping informations in a <literal><resultset></literal> element to either reuse them accross several named queries or through the <literal>setResultSetMapping()</literal> API."
+msgstr ""
+
+#: index.docbook:390
+msgid ""
+ "<![CDATA[<resultset name=\"personAddress\">\n"
+ " <return alias=\"person\" class=\"eg.Person\"/>\n"
+ " <return-join alias=\"address\" property=\"person.mailingAddress\"/>\n"
+ "</resultset>\n"
+ "\n"
+ "<sql-query name=\"personsWith\" resultset-ref=\"personAddress\">\n"
+ " SELECT person.NAME AS {person.name},\n"
+ " person.AGE AS {person.age},\n"
+ " person.SEX AS {person.sex},\n"
+ " address.STREET AS {address.street},\n"
+ " address.CITY AS {address.city},\n"
+ " address.STATE AS {address.state},\n"
+ " address.ZIP AS {address.zip}\n"
+ " FROM PERSON person\n"
+ " JOIN ADDRESS address\n"
+ " ON person.ID = address.PERSON_ID AND address.TYPE='MAILING'\n"
+ " WHERE person.NAME LIKE :namePattern\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:392
+msgid "You can alternatively use the resultset mapping information in your hbm files directly in java code."
+msgstr ""
+
+#: index.docbook:395
+msgid ""
+ "<![CDATA[List cats = sess.createSQLQuery(\n"
+ " \"select {cat.*}, {kitten.*} from cats cat, cats kitten where kitten.mother = cat.id\"\n"
+ " )\n"
+ " .setResultSetMapping(\"catAndKitten\")\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:398
+msgid "Using return-property to explicitly specify column/alias names"
+msgstr ""
+
+#: index.docbook:401
+msgid "With <literal><return-property></literal> you can explicitly tell Hibernate what column aliases to use, instead of using the <literal>{}</literal>-syntax to let Hibernate inject its own aliases."
+msgstr ""
+
+#: index.docbook:406
+msgid ""
+ "<![CDATA[<sql-query name=\"mySqlQuery\">\n"
+ " <return alias=\"person\" class=\"eg.Person\">\n"
+ " <return-property name=\"name\" column=\"myName\"/>\n"
+ " <return-property name=\"age\" column=\"myAge\"/>\n"
+ " <return-property name=\"sex\" column=\"mySex\"/>\n"
+ " </return>\n"
+ " SELECT person.NAME AS myName,\n"
+ " person.AGE AS myAge,\n"
+ " person.SEX AS mySex,\n"
+ " FROM PERSON person WHERE person.NAME LIKE :name\n"
+ "</sql-query>\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:408
+msgid "<literal><return-property></literal> also works with multiple columns. This solves a limitation with the <literal>{}</literal>-syntax which can not allow fine grained control of multi-column properties."
+msgstr ""
+
+#: index.docbook:413
+msgid ""
+ "<![CDATA[<sql-query name=\"organizationCurrentEmployments\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " <return-property name=\"endDate\" column=\"myEndDate\"/>\n"
+ " </return>\n"
+ " SELECT EMPLOYEE AS {emp.employee}, EMPLOYER AS {emp.employer},\n"
+ " STARTDATE AS {emp.startDate}, ENDDATE AS {emp.endDate},\n"
+ " REGIONCODE as {emp.regionCode}, EID AS {emp.id}, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT\n"
+ " WHERE EMPLOYER = :id AND ENDDATE IS NULL\n"
+ " ORDER BY STARTDATE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:415
+msgid "Notice that in this example we used <literal><return-property></literal> in combination with the <literal>{}</literal>-syntax for injection. Allowing users to choose how they want to refer column and properties."
+msgstr ""
+
+#: index.docbook:420
+msgid "If your mapping has a discriminator you must use <literal><return-discriminator></literal> to specify the discriminator column."
+msgstr ""
+
+#: index.docbook:426
+msgid "Using stored procedures for querying"
+msgstr ""
+
+#: index.docbook:428
+msgid "Hibernate 3 introduces support for queries via stored procedures and functions. Most of the following documentation is equivalent for both. The stored procedure/function must return a resultset as the first out-parameter to be able to work with Hibernate. An example of such a stored function in Oracle 9 and higher is as follows:"
+msgstr ""
+
+#: index.docbook:434
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION selectAllEmployments\n"
+ " RETURN SYS_REFCURSOR\n"
+ "AS\n"
+ " st_cursor SYS_REFCURSOR;\n"
+ "BEGIN\n"
+ " OPEN st_cursor FOR\n"
+ " SELECT EMPLOYEE, EMPLOYER,\n"
+ " STARTDATE, ENDDATE,\n"
+ " REGIONCODE, EID, VALUE, CURRENCY\n"
+ " FROM EMPLOYMENT;\n"
+ " RETURN st_cursor;\n"
+ " END;]]>"
+msgstr ""
+
+#: index.docbook:436
+msgid "To use this query in Hibernate you need to map it via a named query."
+msgstr ""
+
+#: index.docbook:439
+msgid ""
+ "<![CDATA[<sql-query name=\"selectAllEmployees_SP\" callable=\"true\">\n"
+ " <return alias=\"emp\" class=\"Employment\">\n"
+ " <return-property name=\"employee\" column=\"EMPLOYEE\"/>\n"
+ " <return-property name=\"employer\" column=\"EMPLOYER\"/>\n"
+ " <return-property name=\"startDate\" column=\"STARTDATE\"/>\n"
+ " <return-property name=\"endDate\" column=\"ENDDATE\"/>\n"
+ " <return-property name=\"regionCode\" column=\"REGIONCODE\"/>\n"
+ " <return-property name=\"id\" column=\"EID\"/>\n"
+ " <return-property name=\"salary\">\n"
+ " <return-column name=\"VALUE\"/>\n"
+ " <return-column name=\"CURRENCY\"/>\n"
+ " </return-property>\n"
+ " </return>\n"
+ " { ? = call selectAllEmployments() }\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:441
+msgid "Notice stored procedures currently only return scalars and entities. <literal><return-join></literal> and <literal><load-collection></literal> are not supported."
+msgstr ""
+
+#: index.docbook:446
+msgid "Rules/limitations for using stored procedures"
+msgstr ""
+
+#: index.docbook:448
+msgid "To use stored procedures with Hibernate the procedures/functions have to follow some rules. If they do not follow those rules they are not usable with Hibernate. If you still want to use these procedures you have to execute them via <literal>session.connection()</literal>. The rules are different for each database, since database vendors have different stored procedure semantics/syntax."
+msgstr ""
+
+#: index.docbook:455
+msgid "Stored procedure queries can't be paged with <literal>setFirstResult()/setMaxResults()</literal>."
+msgstr ""
+
+#: index.docbook:458
+msgid "Recommended call form is standard SQL92: <literal>{ ? = call functionName(<parameters>) }</literal> or <literal>{ ? = call procedureName(<parameters>}</literal>. Native call syntax is not supported."
+msgstr ""
+
+#: index.docbook:463
+msgid "For Oracle the following rules apply:"
+msgstr ""
+
+#: index.docbook:467
+msgid "A function must return a result set. The first parameter of a procedure must be an <literal>OUT</literal> that returns a result set. This is done by using a <literal>SYS_REFCURSOR</literal> type in Oracle 9 or 10. In Oracle you need to define a <literal>REF CURSOR</literal> type, see Oracle literature."
+msgstr ""
+
+#: index.docbook:476
+msgid "For Sybase or MS SQL server the following rules apply:"
+msgstr ""
+
+#: index.docbook:480
+msgid "The procedure must return a result set. Note that since these servers can/will return multiple result sets and update counts, Hibernate will iterate the results and take the first result that is a result set as its return value. Everything else will be discarded."
+msgstr ""
+
+#: index.docbook:488
+msgid "If you can enable <literal>SET NOCOUNT ON</literal> in your procedure it will probably be more efficient, but this is not a requirement."
+msgstr ""
+
+#: index.docbook:498
+msgid "Custom SQL for create, update and delete"
+msgstr ""
+
+#: index.docbook:500
+msgid "Hibernate3 can use custom SQL statements for create, update, and delete operations. The class and collection persisters in Hibernate already contain a set of configuration time generated strings (insertsql, deletesql, updatesql etc.). The mapping tags <literal><sql-insert></literal>, <literal><sql-delete></literal>, and <literal><sql-update></literal> override these strings:"
+msgstr ""
+
+#: index.docbook:508
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert>INSERT INTO PERSON (NAME, ID) VALUES ( UPPER(?), ? )</sql-insert>\n"
+ " <sql-update>UPDATE PERSON SET NAME=UPPER(?) WHERE ID=?</sql-update>\n"
+ " <sql-delete>DELETE FROM PERSON WHERE ID=?</sql-delete>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:510
+msgid "The SQL is directly executed in your database, so you are free to use any dialect you like. This will of course reduce the portability of your mapping if you use database specific SQL."
+msgstr ""
+
+#: index.docbook:514
+msgid "Stored procedures are supported if the <literal>callable</literal> attribute is set:"
+msgstr ""
+
+#: index.docbook:517
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <sql-insert callable=\"true\">{call createPerson (?, ?)}</sql-insert>\n"
+ " <sql-delete callable=\"true\">{? = call deletePerson (?)}</sql-delete>\n"
+ " <sql-update callable=\"true\">{? = call updatePerson (?, ?)}</sql-update>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:519
+msgid "The order of the positional parameters are currently vital, as they must be in the same sequence as Hibernate expects them."
+msgstr ""
+
+#: index.docbook:522
+msgid "You can see the expected order by enabling debug logging for the <literal>org.hibernate.persister.entity</literal> level. With this level enabled Hibernate will print out the static SQL that is used to create, update, delete etc. entities. (To see the expected sequence, remember to not include your custom SQL in the mapping files as that will override the Hibernate generated static sql.)"
+msgstr ""
+
+#: index.docbook:529
+msgid "The stored procedures are in most cases (read: better do it than not) required to return the number of rows inserted/updated/deleted, as Hibernate has some runtime checks for the success of the statement. Hibernate always registers the first statement parameter as a numeric output parameter for the CUD operations:"
+msgstr ""
+
+#: index.docbook:535
+msgid ""
+ "<![CDATA[CREATE OR REPLACE FUNCTION updatePerson (uid IN NUMBER, uname IN VARCHAR2)\n"
+ " RETURN NUMBER IS\n"
+ "BEGIN\n"
+ "\n"
+ " update PERSON\n"
+ " set\n"
+ " NAME = uname,\n"
+ " where\n"
+ " ID = uid;\n"
+ "\n"
+ " return SQL%ROWCOUNT;\n"
+ "\n"
+ "END updatePerson;]]>"
+msgstr ""
+
+#: index.docbook:539
+msgid "Custom SQL for loading"
+msgstr ""
+
+#: index.docbook:541
+msgid "You may also declare your own SQL (or HQL) queries for entity loading:"
+msgstr ""
+
+#: index.docbook:544
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\" lock-mode=\"upgrade\"/>\n"
+ " SELECT NAME AS {pers.name}, ID AS {pers.id}\n"
+ " FROM PERSON\n"
+ " WHERE ID=?\n"
+ " FOR UPDATE\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:546
+msgid "This is just a named query declaration, as discussed earlier. You may reference this named query in a class mapping:"
+msgstr ""
+
+#: index.docbook:549
+msgid ""
+ "<![CDATA[<class name=\"Person\">\n"
+ " <id name=\"id\">\n"
+ " <generator class=\"increment\"/>\n"
+ " </id>\n"
+ " <property name=\"name\" not-null=\"true\"/>\n"
+ " <loader query-ref=\"person\"/>\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:551
+msgid "This even works with stored procedures."
+msgstr ""
+
+#: index.docbook:553
+msgid "You may even define a query for collection loading:"
+msgstr ""
+
+#: index.docbook:555
+msgid ""
+ "<![CDATA[<set name=\"employments\" inverse=\"true\">\n"
+ " <key/>\n"
+ " <one-to-many class=\"Employment\"/>\n"
+ " <loader query-ref=\"employments\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:557
+msgid ""
+ "<![CDATA[<sql-query name=\"employments\">\n"
+ " <load-collection alias=\"emp\" role=\"Person.employments\"/>\n"
+ " SELECT {emp.*}\n"
+ " FROM EMPLOYMENT emp\n"
+ " WHERE EMPLOYER = :id\n"
+ " ORDER BY STARTDATE ASC, EMPLOYEE ASC\n"
+ "</sql-query>]]>"
+msgstr ""
+
+#: index.docbook:559
+msgid "You could even define an entity loader that loads a collection by join fetching:"
+msgstr ""
+
+#: index.docbook:562
+msgid ""
+ "<![CDATA[<sql-query name=\"person\">\n"
+ " <return alias=\"pers\" class=\"Person\"/>\n"
+ " <return-join alias=\"emp\" property=\"pers.employments\"/>\n"
+ " SELECT NAME AS {pers.*}, {emp.*}\n"
+ " FROM PERSON pers\n"
+ " LEFT OUTER JOIN EMPLOYMENT emp\n"
+ " ON pers.ID = emp.PERSON_ID\n"
+ " WHERE ID=?\n"
+ "</sql-query>]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/quickstart.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/quickstart.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/quickstart.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,12 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/session_api.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/session_api.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/session_api.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,982 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Working with objects"
+msgstr ""
+
+#: index.docbook:7
+msgid "Hibernate is a full object/relational mapping solution that not only shields the developer from the details of the underlying database management system, but also offers <emphasis>state management</emphasis> of objects. This is, contrary to the management of SQL <literal>statements</literal> in common JDBC/SQL persistence layers, a very natural object-oriented view of persistence in Java applications."
+msgstr ""
+
+#: index.docbook:16
+msgid "In other words, Hibernate application developers should always think about the <emphasis>state</emphasis> of their objects, and not necessarily about the execution of SQL statements. This part is taken care of by Hibernate and is only relevant for the application developer when tuning the performance of the system."
+msgstr ""
+
+#: index.docbook:24
+msgid "Hibernate object states"
+msgstr ""
+
+#: index.docbook:26
+msgid "Hibernate defines and supports the following object states:"
+msgstr ""
+
+#: index.docbook:32
+msgid "<emphasis>Transient</emphasis> - an object is transient if it has just been instantiated using the <literal>new</literal> operator, and it is not associated with a Hibernate <literal>Session</literal>. It has no persistent representation in the database and no identifier value has been assigned. Transient instances will be destroyed by the garbage collector if the application doesn't hold a reference anymore. Use the Hibernate <literal>Session</literal> to make an object persistent (and let Hibernate take care of the SQL statements that need to be executed for this transition)."
+msgstr ""
+
+#: index.docbook:44
+msgid "<emphasis>Persistent</emphasis> - a persistent instance has a representation in the database and an identifier value. It might just have been saved or loaded, however, it is by definition in the scope of a <literal>Session</literal>. Hibernate will detect any changes made to an object in persistent state and synchronize the state with the database when the unit of work completes. Developers don't execute manual <literal>UPDATE</literal> statements, or <literal>DELETE</literal> statements when an object should be made transient."
+msgstr ""
+
+#: index.docbook:55
+msgid "<emphasis>Detached</emphasis> - a detached instance is an object that has been persistent, but its <literal>Session</literal> has been closed. The reference to the object is still valid, of course, and the detached instance might even be modified in this state. A detached instance can be reattached to a new <literal>Session</literal> at a later point in time, making it (and all the modifications) persistent again. This feature enables a programming model for long running units of work that require user think-time. We call them <emphasis>application transactions</emphasis>, i.e. a unit of work from the point of view of the user."
+msgstr ""
+
+#: index.docbook:69
+msgid "We'll now discuss the states and state transitions (and the Hibernate methods that trigger a transition) in more detail."
+msgstr ""
+
+#: index.docbook:77
+msgid "Making objects persistent"
+msgstr ""
+
+#: index.docbook:79
+msgid "Newly instantiated instances of a a persistent class are considered <emphasis>transient</emphasis> by Hibernate. We can make a transient instance <emphasis>persistent</emphasis> by associating it with a session:"
+msgstr ""
+
+#: index.docbook:86
+msgid ""
+ "<![CDATA[DomesticCat fritz = new DomesticCat();\n"
+ "fritz.setColor(Color.GINGER);\n"
+ "fritz.setSex('M');\n"
+ "fritz.setName(\"Fritz\");\n"
+ "Long generatedId = (Long) sess.save(fritz);]]>"
+msgstr ""
+
+#: index.docbook:88
+msgid "If <literal>Cat</literal> has a generated identifier, the identifier is generated and assigned to the <literal>cat</literal> when <literal>save()</literal> is called. If <literal>Cat</literal> has an <literal>assigned</literal> identifier, or a composite key, the identifier should be assigned to the <literal>cat</literal> instance before calling <literal>save()</literal>. You may also use <literal>persist()</literal> instead of <literal>save()</literal>, with the semantics defined in the EJB3 early draft."
+msgstr ""
+
+#: index.docbook:100
+msgid "<literal>persist()</literal> makes a transient instance persistent. However, it doesn't guarantee that the identifier value will be assigned to the persistent instance immediately, the assignment might happen at flush time. <literal>persist()</literal> also guarantees that it will not execute an <literal>INSERT</literal> statement if it is called outside of transaction boundaries. This is useful in long-running conversations with an extended Session/persistence context."
+msgstr ""
+
+#: index.docbook:111
+msgid "<literal>save()</literal> does guarantee to return an identifier. If an INSERT has to be executed to get the identifier ( e.g. \"identity\" generator, not \"sequence\"), this INSERT happens immediately, no matter if you are inside or outside of a transaction. This is problematic in a long-running conversation with an extended Session/persistence context."
+msgstr ""
+
+#: index.docbook:121
+msgid "Alternatively, you may assign the identifier using an overloaded version of <literal>save()</literal>."
+msgstr ""
+
+#: index.docbook:126
+msgid ""
+ "<![CDATA[DomesticCat pk = new DomesticCat();\n"
+ "pk.setColor(Color.TABBY);\n"
+ "pk.setSex('F');\n"
+ "pk.setName(\"PK\");\n"
+ "pk.setKittens( new HashSet() );\n"
+ "pk.addKitten(fritz);\n"
+ "sess.save( pk, new Long(1234) );]]>"
+msgstr ""
+
+#: index.docbook:128
+msgid "If the object you make persistent has associated objects (e.g. the <literal>kittens</literal> collection in the previous example), these objects may be made persistent in any order you like unless you have a <literal>NOT NULL</literal> constraint upon a foreign key column. There is never a risk of violating foreign key constraints. However, you might violate a <literal>NOT NULL</literal> constraint if you <literal>save()</literal> the objects in the wrong order."
+msgstr ""
+
+#: index.docbook:138
+msgid "Usually you don't bother with this detail, as you'll very likely use Hibernate's <emphasis>transitive persistence</emphasis> feature to save the associated objects automatically. Then, even <literal>NOT NULL</literal> constraint violations don't occur - Hibernate will take care of everything. Transitive persistence is discussed later in this chapter."
+msgstr ""
+
+#: index.docbook:149
+msgid "Loading an object"
+msgstr ""
+
+#: index.docbook:151
+msgid "The <literal>load()</literal> methods of <literal>Session</literal> gives you a way to retrieve a persistent instance if you already know its identifier. <literal>load()</literal> takes a class object and will load the state into a newly instantiated instance of that class, in persistent state."
+msgstr ""
+
+#: index.docbook:158
+msgid "<![CDATA[Cat fritz = (Cat) sess.load(Cat.class, generatedId);]]>"
+msgstr ""
+
+#: index.docbook:160
+msgid ""
+ "<![CDATA[// you need to wrap primitive identifiers\n"
+ "long id = 1234;\n"
+ "DomesticCat pk = (DomesticCat) sess.load( DomesticCat.class, new Long(id) );]]>"
+msgstr ""
+
+#: index.docbook:162
+msgid "Alternatively, you can load state into a given instance:"
+msgstr ""
+
+#: index.docbook:166
+msgid ""
+ "<![CDATA[Cat cat = new DomesticCat();\n"
+ "// load pk's state into cat\n"
+ "sess.load( cat, new Long(pkId) );\n"
+ "Set kittens = cat.getKittens();]]>"
+msgstr ""
+
+#: index.docbook:168
+msgid "Note that <literal>load()</literal> will throw an unrecoverable exception if there is no matching database row. If the class is mapped with a proxy, <literal>load()</literal> just returns an uninitialized proxy and does not actually hit the database until you invoke a method of the proxy. This behaviour is very useful if you wish to create an association to an object without actually loading it from the database. It also allows multiple instances to be loaded as a batch if <literal>batch-size</literal> is defined for the class mapping."
+msgstr ""
+
+#: index.docbook:179
+msgid "If you are not certain that a matching row exists, you should use the <literal>get()</literal> method, which hits the database immediately and returns null if there is no matching row."
+msgstr ""
+
+#: index.docbook:185
+msgid ""
+ "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id);\n"
+ "if (cat==null) {\n"
+ " cat = new Cat();\n"
+ " sess.save(cat, id);\n"
+ "}\n"
+ "return cat;]]>"
+msgstr ""
+
+#: index.docbook:187
+msgid "You may even load an object using an SQL <literal>SELECT ... FOR UPDATE</literal>, using a <literal>LockMode</literal>. See the API documentation for more information."
+msgstr ""
+
+#: index.docbook:192
+msgid "<![CDATA[Cat cat = (Cat) sess.get(Cat.class, id, LockMode.UPGRADE);]]>"
+msgstr ""
+
+#: index.docbook:194
+msgid "Note that any associated instances or contained collections are <emphasis>not</emphasis> selected <literal>FOR UPDATE</literal>, unless you decide to specify <literal>lock</literal> or <literal>all</literal> as a cascade style for the association."
+msgstr ""
+
+#: index.docbook:201
+msgid "It is possible to re-load an object and all its collections at any time, using the <literal>refresh()</literal> method. This is useful when database triggers are used to initialize some of the properties of the object."
+msgstr ""
+
+#: index.docbook:207
+msgid ""
+ "<![CDATA[sess.save(cat);\n"
+ "sess.flush(); //force the SQL INSERT\n"
+ "sess.refresh(cat); //re-read the state (after the trigger executes)]]>"
+msgstr ""
+
+#: index.docbook:209
+msgid "An important question usually appears at this point: How much does Hibernate load from the database and how many SQL <literal>SELECT</literal>s will it use? This depends on the <emphasis>fetching strategy</emphasis> and is explained in <xref linkend=\"performance-fetching\"/>."
+msgstr ""
+
+#: index.docbook:219
+msgid "Querying"
+msgstr ""
+
+#: index.docbook:221
+msgid "If you don't know the identifiers of the objects you are looking for, you need a query. Hibernate supports an easy-to-use but powerful object oriented query language (HQL). For programmatic query creation, Hibernate supports a sophisticated Criteria and Example query feature (QBC and QBE). You may also express your query in the native SQL of your database, with optional support from Hibernate for result set conversion into objects."
+msgstr ""
+
+#: index.docbook:231
+msgid "Executing queries"
+msgstr ""
+
+#: index.docbook:233
+msgid "HQL and native SQL queries are represented with an instance of <literal>org.hibernate.Query</literal>. This interface offers methods for parameter binding, result set handling, and for the execution of the actual query. You always obtain a <literal>Query</literal> using the current <literal>Session</literal>:"
+msgstr ""
+
+#: index.docbook:240
+msgid ""
+ "<![CDATA[List cats = session.createQuery(\n"
+ " \"from Cat as cat where cat.birthdate < ?\")\n"
+ " .setDate(0, date)\n"
+ " .list();\n"
+ "\n"
+ "List mothers = session.createQuery(\n"
+ " \"select mother from Cat as cat join cat.mother as mother where cat.name = ?\")\n"
+ " .setString(0, name)\n"
+ " .list();\n"
+ "\n"
+ "List kittens = session.createQuery(\n"
+ " \"from Cat as cat where cat.mother = ?\")\n"
+ " .setEntity(0, pk)\n"
+ " .list();\n"
+ "\n"
+ "Cat mother = (Cat) session.createQuery(\n"
+ " \"select cat.mother from Cat as cat where cat = ?\")\n"
+ " .setEntity(0, izi)\n"
+ " .uniqueResult();]]\n"
+ "\n"
+ "Query mothersWithKittens = (Cat) session.createQuery(\n"
+ " \"select mother from Cat as mother left join fetch mother.kittens\");\n"
+ "Set uniqueMothers = new HashSet(mothersWithKittens.list());]]>"
+msgstr ""
+
+#: index.docbook:242
+msgid "A query is usually executed by invoking <literal>list()</literal>, the result of the query will be loaded completely into a collection in memory. Entity instances retrieved by a query are in persistent state. The <literal>uniqueResult()</literal> method offers a shortcut if you know your query will only return a single object. Note that queries that make use of eager fetching of collections usually return duplicates of the root objects (but with their collections initialized). You can filter these duplicates simply through a <literal>Set</literal>."
+msgstr ""
+
+#: index.docbook:254
+msgid "Iterating results"
+msgstr ""
+
+#: index.docbook:256
+msgid "Occasionally, you might be able to achieve better performance by executing the query using the <literal>iterate()</literal> method. This will only usually be the case if you expect that the actual entity instances returned by the query will already be in the session or second-level cache. If they are not already cached, <literal>iterate()</literal> will be slower than <literal>list()</literal> and might require many database hits for a simple query, usually <emphasis>1</emphasis> for the initial select which only returns identifiers, and <emphasis>n</emphasis> additional selects to initialize the actual instances."
+msgstr ""
+
+#: index.docbook:268
+msgid ""
+ "<![CDATA[// fetch ids\n"
+ "Iterator iter = sess.createQuery(\"from eg.Qux q order by q.likeliness\").iterate();\n"
+ "while ( iter.hasNext() ) {\n"
+ " Qux qux = (Qux) iter.next(); // fetch the object\n"
+ " // something we couldnt express in the query\n"
+ " if ( qux.calculateComplicatedAlgorithm() ) {\n"
+ " // delete the current instance\n"
+ " iter.remove();\n"
+ " // dont need to process the rest\n"
+ " break;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:272
+msgid "Queries that return tuples"
+msgstr ""
+
+#: index.docbook:274
+msgid "Hibernate queries sometimes return tuples of objects, in which case each tuple is returned as an array:"
+msgstr ""
+
+#: index.docbook:279
+msgid ""
+ "<![CDATA[Iterator kittensAndMothers = sess.createQuery(\n"
+ " \"select kitten, mother from Cat kitten join kitten.mother mother\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( kittensAndMothers.hasNext() ) {\n"
+ " Object[] tuple = (Object[]) kittensAndMothers.next();\n"
+ " Cat kitten = (Cat) tuple[0];\n"
+ " Cat mother = (Cat) tuple[1];\n"
+ " ....\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:284
+msgid "Scalar results"
+msgstr ""
+
+#: index.docbook:286
+msgid "Queries may specify a property of a class in the <literal>select</literal> clause. They may even call SQL aggregate functions. Properties or aggregates are considered \"scalar\" results (and not entities in persistent state)."
+msgstr ""
+
+#: index.docbook:292
+msgid ""
+ "<![CDATA[Iterator results = sess.createQuery(\n"
+ " \"select cat.color, min(cat.birthdate), count(cat) from Cat cat \" +\n"
+ " \"group by cat.color\")\n"
+ " .list()\n"
+ " .iterator();\n"
+ "\n"
+ "while ( results.hasNext() ) {\n"
+ " Object[] row = (Object[]) results.next();\n"
+ " Color type = (Color) row[0];\n"
+ " Date oldest = (Date) row[1];\n"
+ " Integer count = (Integer) row[2];\n"
+ " .....\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:297
+msgid "Bind parameters"
+msgstr ""
+
+#: index.docbook:299
+msgid "Methods on <literal>Query</literal> are provided for binding values to named parameters or JDBC-style <literal>?</literal> parameters. <emphasis>Contrary to JDBC, Hibernate numbers parameters from zero.</emphasis> Named parameters are identifiers of the form <literal>:name</literal> in the query string. The advantages of named parameters are:"
+msgstr ""
+
+#: index.docbook:309
+msgid "named parameters are insensitive to the order they occur in the query string"
+msgstr ""
+
+#: index.docbook:315
+msgid "they may occur multiple times in the same query"
+msgstr ""
+
+#: index.docbook:320
+msgid "they are self-documenting"
+msgstr ""
+
+#: index.docbook:326
+msgid ""
+ "<![CDATA[//named parameter (preferred)\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = :name\");\n"
+ "q.setString(\"name\", \"Fritz\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr ""
+
+#: index.docbook:328
+msgid ""
+ "<![CDATA[//positional parameter\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name = ?\");\n"
+ "q.setString(0, \"Izi\");\n"
+ "Iterator cats = q.iterate();]]>"
+msgstr ""
+
+#: index.docbook:330
+msgid ""
+ "<![CDATA[//named parameter list\n"
+ "List names = new ArrayList();\n"
+ "names.add(\"Izi\");\n"
+ "names.add(\"Fritz\");\n"
+ "Query q = sess.createQuery(\"from DomesticCat cat where cat.name in (:namesList)\");\n"
+ "q.setParameterList(\"namesList\", names);\n"
+ "List cats = q.list();]]>"
+msgstr ""
+
+#: index.docbook:335
+msgid "Pagination"
+msgstr ""
+
+#: index.docbook:337
+msgid "If you need to specify bounds upon your result set (the maximum number of rows you want to retrieve and / or the first row you want to retrieve) you should use methods of the <literal>Query</literal> interface:"
+msgstr ""
+
+#: index.docbook:343
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"from DomesticCat cat\");\n"
+ "q.setFirstResult(20);\n"
+ "q.setMaxResults(10);\n"
+ "List cats = q.list();]]>"
+msgstr ""
+
+#: index.docbook:345
+msgid "Hibernate knows how to translate this limit query into the native SQL of your DBMS."
+msgstr ""
+
+#: index.docbook:353
+msgid "Scrollable iteration"
+msgstr ""
+
+#: index.docbook:355
+msgid "If your JDBC driver supports scrollable <literal>ResultSet</literal>s, the <literal>Query</literal> interface may be used to obtain a <literal>ScrollableResults</literal> object, which allows flexible navigation of the query results."
+msgstr ""
+
+#: index.docbook:362
+msgid ""
+ "<![CDATA[Query q = sess.createQuery(\"select cat.name, cat from DomesticCat cat \" +\n"
+ " \"order by cat.name\");\n"
+ "ScrollableResults cats = q.scroll();\n"
+ "if ( cats.first() ) {\n"
+ "\n"
+ " // find the first name on each page of an alphabetical list of cats by name\n"
+ " firstNamesOfPages = new ArrayList();\n"
+ " do {\n"
+ " String name = cats.getString(0);\n"
+ " firstNamesOfPages.add(name);\n"
+ " }\n"
+ " while ( cats.scroll(PAGE_SIZE) );\n"
+ "\n"
+ " // Now get the first page of cats\n"
+ " pageOfCats = new ArrayList();\n"
+ " cats.beforeFirst();\n"
+ " int i=0;\n"
+ " while( ( PAGE_SIZE > i++ ) && cats.next() ) pageOfCats.add( cats.get(1) );\n"
+ "\n"
+ "}\n"
+ "cats.close()]]>"
+msgstr ""
+
+#: index.docbook:364
+msgid "Note that an open database connection (and cursor) is required for this functionality, use <literal>setMaxResult()</literal>/<literal>setFirstResult()</literal> if you need offline pagination functionality."
+msgstr ""
+
+#: index.docbook:373
+msgid "Externalizing named queries"
+msgstr ""
+
+#: index.docbook:375
+msgid "You may also define named queries in the mapping document. (Remember to use a <literal>CDATA</literal> section if your query contains characters that could be interpreted as markup.)"
+msgstr ""
+
+#: index.docbook:381
+msgid ""
+ "<![CDATA[<query name=\"ByNameAndMaximumWeight\"><![CDATA[\n"
+ " from eg.DomesticCat as cat\n"
+ " where cat.name = ?\n"
+ " and cat.weight > ?\n"
+ "] ]></query>]]>"
+msgstr ""
+
+#: index.docbook:383
+msgid "Parameter binding and executing is done programatically:"
+msgstr ""
+
+#: index.docbook:387
+msgid ""
+ "<![CDATA[Query q = sess.getNamedQuery(\"ByNameAndMaximumWeight\");\n"
+ "q.setString(0, name);\n"
+ "q.setInt(1, minWeight);\n"
+ "List cats = q.list();]]>"
+msgstr ""
+
+#: index.docbook:389
+msgid "Note that the actual program code is independent of the query language that is used, you may also define native SQL queries in metadata, or migrate existing queries to Hibernate by placing them in mapping files."
+msgstr ""
+
+#: index.docbook:395
+msgid "Also note that a query declaration inside a <literal><hibernate-mapping></literal> element requires a global unique name for the query, while a query declaration inside a <literal><class></literal> element is made unique automatically by prepending the fully qualified name of the class, for example <literal>eg.Cat.ByNameAndMaximumWeight</literal>."
+msgstr ""
+
+#: index.docbook:408
+msgid "Filtering collections"
+msgstr ""
+
+#: index.docbook:409
+msgid "A collection <emphasis>filter</emphasis> is a special type of query that may be applied to a persistent collection or array. The query string may refer to <literal>this</literal>, meaning the current collection element."
+msgstr ""
+
+#: index.docbook:415
+msgid ""
+ "<![CDATA[Collection blackKittens = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"where this.color = ?\")\n"
+ " .setParameter( Color.BLACK, Hibernate.custom(ColorUserType.class) )\n"
+ " .list()\n"
+ ");]]>"
+msgstr ""
+
+#: index.docbook:417
+msgid "The returned collection is considered a bag, and it's a copy of the given collection. The original collection is not modified (this is contrary to the implication of the name \"filter\", but consistent with expected behavior)."
+msgstr ""
+
+#: index.docbook:423
+msgid "Observe that filters do not require a <literal>from</literal> clause (though they may have one if required). Filters are not limited to returning the collection elements themselves."
+msgstr ""
+
+#: index.docbook:428
+msgid ""
+ "<![CDATA[Collection blackKittenMates = session.createFilter(\n"
+ " pk.getKittens(), \n"
+ " \"select this.mate where this.color = eg.Color.BLACK.intValue\")\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:430
+msgid "Even an empty filter query is useful, e.g. to load a subset of elements in a huge collection:"
+msgstr ""
+
+#: index.docbook:435
+msgid ""
+ "<![CDATA[Collection tenKittens = session.createFilter(\n"
+ " mother.getKittens(), \"\")\n"
+ " .setFirstResult(0).setMaxResults(10)\n"
+ " .list();]]>"
+msgstr ""
+
+#: index.docbook:440
+msgid "Criteria queries"
+msgstr ""
+
+#: index.docbook:442
+msgid "HQL is extremely powerful but some developers prefer to build queries dynamically, using an object-oriented API, rather than building query strings. Hibernate provides an intuitive <literal>Criteria</literal> query API for these cases:"
+msgstr ""
+
+#: index.docbook:448
+msgid ""
+ "<![CDATA[Criteria crit = session.createCriteria(Cat.class);\n"
+ "crit.add( Restrictions.eq( \"color\", eg.Color.BLACK ) );\n"
+ "crit.setMaxResults(10);\n"
+ "List cats = crit.list();]]>"
+msgstr ""
+
+#: index.docbook:450
+msgid "The <literal>Criteria</literal> and the associated <literal>Example</literal> API are discussed in more detail in <xref linkend=\"querycriteria\"/>."
+msgstr ""
+
+#: index.docbook:458
+msgid "Queries in native SQL"
+msgstr ""
+
+#: index.docbook:460
+msgid "You may express a query in SQL, using <literal>createSQLQuery()</literal> and let Hibernate take care of the mapping from result sets to objects. Note that you may at any time call <literal>session.connection()</literal> and use the JDBC <literal>Connection</literal> directly. If you chose to use the Hibernate API, you must enclose SQL aliases in braces:"
+msgstr ""
+
+#: index.docbook:468
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\"SELECT {cat.*} FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list();]]>"
+msgstr ""
+
+#: index.docbook:470
+msgid ""
+ "<![CDATA[List cats = session.createSQLQuery(\n"
+ " \"SELECT {cat}.ID AS {cat.id}, {cat}.SEX AS {cat.sex}, \" +\n"
+ " \"{cat}.MATE AS {cat.mate}, {cat}.SUBCLASS AS {cat.class}, ... \" +\n"
+ " \"FROM CAT {cat} WHERE ROWNUM<10\")\n"
+ " .addEntity(\"cat\", Cat.class)\n"
+ ".list()]]>"
+msgstr ""
+
+#: index.docbook:472
+msgid "SQL queries may contain named and positional parameters, just like Hibernate queries. More information about native SQL queries in Hibernate can be found in <xref linkend=\"querysql\"/>."
+msgstr ""
+
+#: index.docbook:483
+msgid "Modifying persistent objects"
+msgstr ""
+
+#: index.docbook:485
+msgid "<emphasis>Transactional persistent instances</emphasis> (ie. objects loaded, saved, created or queried by the <literal>Session</literal>) may be manipulated by the application and any changes to persistent state will be persisted when the <literal>Session</literal> is <emphasis>flushed</emphasis> (discussed later in this chapter). There is no need to call a particular method (like <literal>update()</literal>, which has a different purpose) to make your modifications persistent. So the most straightforward way to update the state of an object is to <literal>load()</literal> it, and then manipulate it directly, while the <literal>Session</literal> is open:"
+msgstr ""
+
+#: index.docbook:496
+msgid ""
+ "<![CDATA[DomesticCat cat = (DomesticCat) sess.load( Cat.class, new Long(69) );\n"
+ "cat.setName(\"PK\");\n"
+ "sess.flush(); // changes to cat are automatically detected and persisted]]>"
+msgstr ""
+
+#: index.docbook:498
+msgid "Sometimes this programming model is inefficient since it would require both an SQL <literal>SELECT</literal> (to load an object) and an SQL <literal>UPDATE</literal> (to persist its updated state) in the same session. Therefore Hibernate offers an alternate approach, using detached instances."
+msgstr ""
+
+#: index.docbook:506
+msgid "Note that Hibernate does not offer its own API for direct execution of <literal>UPDATE</literal> or <literal>DELETE</literal> statements. Hibernate is a <emphasis>state management</emphasis> service, you don't have to think in <emphasis>statements</emphasis> to use it. JDBC is a perfect API for executing SQL statements, you can get a JDBC <literal>Connection</literal> at any time by calling <literal>session.connection()</literal>. Furthermore, the notion of mass operations conflicts with object/relational mapping for online transaction processing-oriented applications. Future versions of Hibernate may however provide special mass operation functions. See <xref linkend=\"batch\"/> for some possible batch operation tricks."
+msgstr ""
+
+#: index.docbook:521
+msgid "Modifying detached objects"
+msgstr ""
+
+#: index.docbook:523
+msgid "Many applications need to retrieve an object in one transaction, send it to the UI layer for manipulation, then save the changes in a new transaction. Applications that use this kind of approach in a high-concurrency environment usually use versioned data to ensure isolation for the \"long\" unit of work."
+msgstr ""
+
+#: index.docbook:530
+msgid "Hibernate supports this model by providing for reattachment of detached instances using the <literal>Session.update()</literal> or <literal>Session.merge()</literal> methods:"
+msgstr ""
+
+#: index.docbook:536
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catId);\n"
+ "Cat potentialMate = new Cat();\n"
+ "firstSession.save(potentialMate);\n"
+ "\n"
+ "// in a higher layer of the application\n"
+ "cat.setMate(potentialMate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.update(cat); // update cat\n"
+ "secondSession.update(mate); // update mate]]>"
+msgstr ""
+
+#: index.docbook:538
+msgid "If the <literal>Cat</literal> with identifier <literal>catId</literal> had already been loaded by <literal>secondSession</literal> when the application tried to reattach it, an exception would have been thrown."
+msgstr ""
+
+#: index.docbook:544
+msgid "Use <literal>update()</literal> if you are sure that the session does not contain an already persistent instance with the same identifier, and <literal>merge()</literal> if you want to merge your modifications at any time without consideration of the state of the session. In other words, <literal>update()</literal> is usually the first method you would call in a fresh session, ensuring that reattachment of your detached instances is the first operation that is executed."
+msgstr ""
+
+#: index.docbook:553
+msgid "The application should individually <literal>update()</literal> detached instances reachable from the given detached instance if and <emphasis>only</emphasis> if it wants their state also updated. This can be automated of course, using <emphasis>transitive persistence</emphasis>, see <xref linkend=\"objectstate-transitive\"/>."
+msgstr ""
+
+#: index.docbook:560
+msgid "The <literal>lock()</literal> method also allows an application to reassociate an object with a new session. However, the detached instance has to be unmodified!"
+msgstr ""
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[//just reassociate:\n"
+ "sess.lock(fritz, LockMode.NONE);\n"
+ "//do a version check, then reassociate:\n"
+ "sess.lock(izi, LockMode.READ);\n"
+ "//do a version check, using SELECT ... FOR UPDATE, then reassociate:\n"
+ "sess.lock(pk, LockMode.UPGRADE);]]>"
+msgstr ""
+
+#: index.docbook:567
+msgid "Note that <literal>lock()</literal> can be used with various <literal>LockMode</literal>s, see the API documentation and the chapter on transaction handling for more information. Reattachment is not the only usecase for <literal>lock()</literal>."
+msgstr ""
+
+#: index.docbook:574
+msgid "Other models for long units of work are discussed in <xref linkend=\"transactions-optimistic\"/>."
+msgstr ""
+
+#: index.docbook:581
+msgid "Automatic state detection"
+msgstr ""
+
+#: index.docbook:583
+msgid "Hibernate users have requested a general purpose method that either saves a transient instance by generating a new identifier or updates/reattaches the detached instances associated with its current identifier. The <literal>saveOrUpdate()</literal> method implements this functionality."
+msgstr ""
+
+#: index.docbook:590
+msgid ""
+ "<![CDATA[// in the first session\n"
+ "Cat cat = (Cat) firstSession.load(Cat.class, catID);\n"
+ "\n"
+ "// in a higher tier of the application\n"
+ "Cat mate = new Cat();\n"
+ "cat.setMate(mate);\n"
+ "\n"
+ "// later, in a new session\n"
+ "secondSession.saveOrUpdate(cat); // update existing state (cat has a non-null id)\n"
+ "secondSession.saveOrUpdate(mate); // save the new instance (mate has a null id)]]>"
+msgstr ""
+
+#: index.docbook:592
+msgid "The usage and semantics of <literal>saveOrUpdate()</literal> seems to be confusing for new users. Firstly, so long as you are not trying to use instances from one session in another new session, you should not need to use <literal>update()</literal>, <literal>saveOrUpdate()</literal>, or <literal>merge()</literal>. Some whole applications will never use either of these methods."
+msgstr ""
+
+#: index.docbook:600
+msgid "Usually <literal>update()</literal> or <literal>saveOrUpdate()</literal> are used in the following scenario:"
+msgstr ""
+
+#: index.docbook:607
+msgid "the application loads an object in the first session"
+msgstr ""
+
+#: index.docbook:612
+msgid "the object is passed up to the UI tier"
+msgstr ""
+
+#: index.docbook:617
+msgid "some modifications are made to the object"
+msgstr ""
+
+#: index.docbook:622
+msgid "the object is passed back down to the business logic tier"
+msgstr ""
+
+#: index.docbook:627
+msgid "the application persists these modifications by calling <literal>update()</literal> in a second session"
+msgstr ""
+
+#: index.docbook:634
+msgid "<literal>saveOrUpdate()</literal> does the following:"
+msgstr ""
+
+#: index.docbook:640
+msgid "if the object is already persistent in this session, do nothing"
+msgstr ""
+
+#: index.docbook:645
+msgid "if another object associated with the session has the same identifier, throw an exception"
+msgstr ""
+
+#: index.docbook:651
+msgid "if the object has no identifier property, <literal>save()</literal> it"
+msgstr ""
+
+#: index.docbook:656
+msgid "if the object's identifier has the value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr ""
+
+#: index.docbook:662
+msgid "if the object is versioned (by a <literal><version></literal> or <literal><timestamp></literal>), and the version property value is the same value assigned to a newly instantiated object, <literal>save()</literal> it"
+msgstr ""
+
+#: index.docbook:670
+msgid "otherwise <literal>update()</literal> the object"
+msgstr ""
+
+#: index.docbook:676
+msgid "and <literal>merge()</literal> is very different:"
+msgstr ""
+
+#: index.docbook:682
+msgid "if there is a persistent instance with the same identifier currently associated with the session, copy the state of the given object onto the persistent instance"
+msgstr ""
+
+#: index.docbook:689
+msgid "if there is no persistent instance currently associated with the session, try to load it from the database, or create a new persistent instance"
+msgstr ""
+
+#: index.docbook:695
+msgid "the persistent instance is returned"
+msgstr ""
+
+#: index.docbook:700
+msgid "the given instance does not become associated with the session, it remains detached"
+msgstr ""
+
+#: index.docbook:710
+msgid "Deleting persistent objects"
+msgstr ""
+
+#: index.docbook:712
+msgid "<literal>Session.delete()</literal> will remove an object's state from the database. Of course, your application might still hold a reference to a deleted object. It's best to think of <literal>delete()</literal> as making a persistent instance transient."
+msgstr ""
+
+#: index.docbook:719
+msgid "<![CDATA[sess.delete(cat);]]>"
+msgstr ""
+
+#: index.docbook:721
+msgid "You may delete objects in any order you like, without risk of foreign key constraint violations. It is still possible to violate a <literal>NOT NULL</literal> constraint on a foreign key column by deleting objects in the wrong order, e.g. if you delete the parent, but forget to delete the children."
+msgstr ""
+
+#: index.docbook:732
+msgid "Replicating object between two different datastores"
+msgstr ""
+
+#: index.docbook:734
+msgid "It is occasionally useful to be able to take a graph of persistent instances and make them persistent in a different datastore, without regenerating identifier values."
+msgstr ""
+
+#: index.docbook:740
+msgid ""
+ "<![CDATA[//retrieve a cat from one database\n"
+ "Session session1 = factory1.openSession();\n"
+ "Transaction tx1 = session1.beginTransaction();\n"
+ "Cat cat = session1.get(Cat.class, catId);\n"
+ "tx1.commit();\n"
+ "session1.close();\n"
+ "\n"
+ "//reconcile with a second database\n"
+ "Session session2 = factory2.openSession();\n"
+ "Transaction tx2 = session2.beginTransaction();\n"
+ "session2.replicate(cat, ReplicationMode.LATEST_VERSION);\n"
+ "tx2.commit();\n"
+ "session2.close();]]>"
+msgstr ""
+
+#: index.docbook:742
+msgid "The <literal>ReplicationMode</literal> determines how <literal>replicate()</literal> will deal with conflicts with existing rows in the database."
+msgstr ""
+
+#: index.docbook:749
+msgid "<literal>ReplicationMode.IGNORE</literal> - ignore the object when there is an existing database row with the same identifier"
+msgstr ""
+
+#: index.docbook:755
+msgid "<literal>ReplicationMode.OVERWRITE</literal> - overwrite any existing database row with the same identifier"
+msgstr ""
+
+#: index.docbook:761
+msgid "<literal>ReplicationMode.EXCEPTION</literal> - throw an exception if there is an existing database row with the same identifier"
+msgstr ""
+
+#: index.docbook:767
+msgid "<literal>ReplicationMode.LATEST_VERSION</literal> - overwrite the row if its version number is earlier than the version number of the object, or ignore the object otherwise"
+msgstr ""
+
+#: index.docbook:775
+msgid "Usecases for this feature include reconciling data entered into different database instances, upgrading system configuration information during product upgrades, rolling back changes made during non-ACID transactions and more."
+msgstr ""
+
+#: index.docbook:784
+msgid "Flushing the Session"
+msgstr ""
+
+#: index.docbook:786
+msgid "From time to time the <literal>Session</literal> will execute the SQL statements needed to synchronize the JDBC connection's state with the state of objects held in memory. This process, <emphasis>flush</emphasis>, occurs by default at the following points"
+msgstr ""
+
+#: index.docbook:795
+msgid "before some query executions"
+msgstr ""
+
+#: index.docbook:800
+msgid "from <literal>org.hibernate.Transaction.commit()</literal>"
+msgstr ""
+
+#: index.docbook:805
+msgid "from <literal>Session.flush()</literal>"
+msgstr ""
+
+#: index.docbook:811
+msgid "The SQL statements are issued in the following order"
+msgstr ""
+
+#: index.docbook:817
+msgid "all entity insertions, in the same order the corresponding objects were saved using <literal>Session.save()</literal>"
+msgstr ""
+
+#: index.docbook:823
+msgid "all entity updates"
+msgstr ""
+
+#: index.docbook:828
+msgid "all collection deletions"
+msgstr ""
+
+#: index.docbook:833
+msgid "all collection element deletions, updates and insertions"
+msgstr ""
+
+#: index.docbook:838
+msgid "all collection insertions"
+msgstr ""
+
+#: index.docbook:843
+msgid "all entity deletions, in the same order the corresponding objects were deleted using <literal>Session.delete()</literal>"
+msgstr ""
+
+#: index.docbook:850
+msgid "(An exception is that objects using <literal>native</literal> ID generation are inserted when they are saved.)"
+msgstr ""
+
+#: index.docbook:855
+msgid "Except when you explicity <literal>flush()</literal>, there are absolutely no guarantees about <emphasis>when</emphasis> the <literal>Session</literal> executes the JDBC calls, only the <emphasis>order</emphasis> in which they are executed. However, Hibernate does guarantee that the <literal>Query.list(..)</literal> will never return stale data; nor will they return the wrong data."
+msgstr ""
+
+#: index.docbook:863
+msgid "It is possible to change the default behavior so that flush occurs less frequently. The <literal>FlushMode</literal> class defines three different modes: only flush at commit time (and only when the Hibernate <literal>Transaction</literal> API is used), flush automatically using the explained routine, or never flush unless <literal>flush()</literal> is called explicitly. The last mode is useful for long running units of work, where a <literal>Session</literal> is kept open and disconnected for a long time (see <xref linkend=\"transactions-optimistic-longsession\"/>)."
+msgstr ""
+
+#: index.docbook:873
+msgid ""
+ "<![CDATA[sess = sf.openSession();\n"
+ "Transaction tx = sess.beginTransaction();\n"
+ "sess.setFlushMode(FlushMode.COMMIT); // allow queries to return stale state\n"
+ "\n"
+ "Cat izi = (Cat) sess.load(Cat.class, id);\n"
+ "izi.setName(iznizi);\n"
+ "\n"
+ "// might return stale data\n"
+ "sess.find(\"from Cat as cat left outer join cat.kittens kitten\");\n"
+ "\n"
+ "// change to izi is not flushed!\n"
+ "...\n"
+ "tx.commit(); // flush occurs\n"
+ "sess.close();]]>"
+msgstr ""
+
+#: index.docbook:875
+msgid "During flush, an exception might occur (e.g. if a DML operation violates a constraint). Since handling exceptions involves some understanding of Hibernate's transactional behavior, we discuss it in <xref linkend=\"transactions\"/>."
+msgstr ""
+
+#: index.docbook:884
+msgid "Transitive persistence"
+msgstr ""
+
+#: index.docbook:886
+msgid "It is quite cumbersome to save, delete, or reattach individual objects, especially if you deal with a graph of associated objects. A common case is a parent/child relationship. Consider the following example:"
+msgstr ""
+
+#: index.docbook:892
+msgid "If the children in a parent/child relationship would be value typed (e.g. a collection of addresses or strings), their life cycle would depend on the parent and no further action would be required for convenient \"cascading\" of state changes. When the parent is saved, the value-typed child objects are saved as well, when the parent is deleted, the children will be deleted, etc. This even works for operations such as the removal of a child from the collection; Hibernate will detect this and, since value-typed objects can't have shared references, delete the child from the database."
+msgstr ""
+
+#: index.docbook:903
+msgid "Now consider the same scenario with parent and child objects being entities, not value-types (e.g. categories and items, or parent and child cats). Entities have their own life cycle, support shared references (so removing an entity from the collection does not mean it can be deleted), and there is by default no cascading of state from one entity to any other associated entities. Hibernate does not implement <emphasis>persistence by reachability</emphasis> by default."
+msgstr ""
+
+#: index.docbook:912
+msgid "For each basic operation of the Hibernate session - including <literal>persist(), merge(), saveOrUpdate(), delete(), lock(), refresh(), evict(), replicate()</literal> - there is a corresponding cascade style. Respectively, the cascade styles are named <literal>create, merge, save-update, delete, lock, refresh, evict, replicate</literal>. If you want an operation to be cascaded along an association, you must indicate that in the mapping document. For example:"
+msgstr ""
+
+#: index.docbook:921
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist\"/>]]>"
+msgstr ""
+
+#: index.docbook:923
+msgid "Cascade styles my be combined:"
+msgstr ""
+
+#: index.docbook:927
+msgid "<![CDATA[<one-to-one name=\"person\" cascade=\"persist,delete,lock\"/>]]>"
+msgstr ""
+
+#: index.docbook:929
+msgid "You may even use <literal>cascade=\"all\"</literal> to specify that <emphasis>all</emphasis> operations should be cascaded along the association. The default <literal>cascade=\"none\"</literal> specifies that no operations are to be cascaded."
+msgstr ""
+
+#: index.docbook:935
+msgid "A special cascade style, <literal>delete-orphan</literal>, applies only to one-to-many associations, and indicates that the <literal>delete()</literal> operation should be applied to any child object that is removed from the association."
+msgstr ""
+
+#: index.docbook:942
+msgid "Recommendations:"
+msgstr ""
+
+#: index.docbook:948
+msgid "It doesn't usually make sense to enable cascade on a <literal><many-to-one></literal> or <literal><many-to-many></literal> association. Cascade is often useful for <literal><one-to-one></literal> and <literal><one-to-many></literal> associations."
+msgstr ""
+
+#: index.docbook:956
+msgid "If the child object's lifespan is bounded by the lifespan of the parent object, make it a <emphasis>life cycle object</emphasis> by specifying <literal>cascade=\"all,delete-orphan\"</literal>."
+msgstr ""
+
+#: index.docbook:963
+msgid "Otherwise, you might not need cascade at all. But if you think that you will often be working with the parent and children together in the same transaction, and you want to save yourself some typing, consider using <literal>cascade=\"persist,merge,save-update\"</literal>."
+msgstr ""
+
+#: index.docbook:971
+msgid "Mapping an association (either a single valued association, or a collection) with <literal>cascade=\"all\"</literal> marks the association as a <emphasis>parent/child</emphasis> style relationship where save/update/delete of the parent results in save/update/delete of the child or children."
+msgstr ""
+
+#: index.docbook:977
+msgid "Futhermore, a mere reference to a child from a persistent parent will result in save/update of the child. This metaphor is incomplete, however. A child which becomes unreferenced by its parent is <emphasis>not</emphasis> automatically deleted, except in the case of a <literal><one-to-many></literal> association mapped with <literal>cascade=\"delete-orphan\"</literal>. The precise semantics of cascading operations for a parent/child relationship are as follows:"
+msgstr ""
+
+#: index.docbook:988
+msgid "If a parent is passed to <literal>persist()</literal>, all children are passed to <literal>persist()</literal>"
+msgstr ""
+
+#: index.docbook:994
+msgid "If a parent is passed to <literal>merge()</literal>, all children are passed to <literal>merge()</literal>"
+msgstr ""
+
+#: index.docbook:1000
+msgid "If a parent is passed to <literal>save()</literal>, <literal>update()</literal> or <literal>saveOrUpdate()</literal>, all children are passed to <literal>saveOrUpdate()</literal>"
+msgstr ""
+
+#: index.docbook:1006
+msgid "If a transient or detached child becomes referenced by a persistent parent, it is passed to <literal>saveOrUpdate()</literal>"
+msgstr ""
+
+#: index.docbook:1012
+msgid "If a parent is deleted, all children are passed to <literal>delete()</literal>"
+msgstr ""
+
+#: index.docbook:1017
+msgid "If a child is dereferenced by a persistent parent, <emphasis>nothing special happens</emphasis> - the application should explicitly delete the child if necessary - unless <literal>cascade=\"delete-orphan\"</literal>, in which case the \"orphaned\" child is deleted."
+msgstr ""
+
+#: index.docbook:1026
+msgid "Finally, note that cascading of operations can be applied to an object graph at <emphasis>call time</emphasis> or at <emphasis>flush time</emphasis>. All operations, if enabled, are cascaded to associated entities reachable when the operation is executed. However, <literal>save-upate</literal> and <literal>delete-orphan</literal> are transitive for all associated entities reachable during flush of the <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:1038
+msgid "Using metadata"
+msgstr ""
+
+#: index.docbook:1040
+msgid "Hibernate requires a very rich meta-level model of all entity and value types. From time to time, this model is very useful to the application itself. For example, the application might use Hibernate's metadata to implement a \"smart\" deep-copy algorithm that understands which objects should be copied (eg. mutable value types) and which should not (eg. immutable value types and, possibly, associated entities)."
+msgstr ""
+
+#: index.docbook:1047
+msgid "Hibernate exposes metadata via the <literal>ClassMetadata</literal> and <literal>CollectionMetadata</literal> interfaces and the <literal>Type</literal> hierarchy. Instances of the metadata interfaces may be obtained from the <literal>SessionFactory</literal>."
+msgstr ""
+
+#: index.docbook:1054
+msgid ""
+ "<![CDATA[Cat fritz = ......;\n"
+ "ClassMetadata catMeta = sessionfactory.getClassMetadata(Cat.class);\n"
+ "\n"
+ "Object[] propertyValues = catMeta.getPropertyValues(fritz);\n"
+ "String[] propertyNames = catMeta.getPropertyNames();\n"
+ "Type[] propertyTypes = catMeta.getPropertyTypes();\n"
+ "\n"
+ "// get a Map of all properties which are not collections or associations\n"
+ "Map namedValues = new HashMap();\n"
+ "for ( int i=0; i<propertyNames.length; i++ ) {\n"
+ " if ( !propertyTypes[i].isEntityType() && !propertyTypes[i].isCollectionType() ) {\n"
+ " namedValues.put( propertyNames[i], propertyValues[i] );\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/toolset_guide.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/toolset_guide.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/toolset_guide.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,744 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Toolset Guide"
+msgstr "å·¥å
·ç®±æå"
+
+#: index.docbook:7
+msgid "Roundtrip engineering with Hibernate is possible using a set of Eclipse plugins, commandline tools, as well as Ant tasks."
+msgstr "å¯ä»¥éè¿ä¸ç³»åEclipseæ件ãå½ä»¤è¡å·¥å
·åAntä»»å¡æ¥è¿è¡ä¸Hibernateå
³èç转æ¢ã"
+
+#: index.docbook:12
+msgid "The <emphasis>Hibernate Tools</emphasis> currently include plugins for the Eclipse IDE as well as Ant tasks for reverse engineering of existing databases:"
+msgstr "é¤äºAntä»»å¡å¤ï¼å½åç<emphasis>Hibernate Tools</emphasis>ä¹å
å«äºEclipse IDEçæ件ï¼ç¨äºä¸ç°åæ°æ®åºçéåå·¥ç¨ã"
+
+#: index.docbook:18
+msgid "<emphasis>Mapping Editor:</emphasis> An editor for Hibernate XML mapping files, supporting auto-completion and syntax highlighting. It also supports semantic auto-completion for class names and property/field names, making it much more versatile than a normal XML editor."
+msgstr "<emphasis>Mapping Editor:</emphasis> Hibernate XMLæ å°æ件çç¼è¾å¨ï¼æ¯æèªå¨å®æåè¯æ³é«äº®ãå®ä¹æ¯æ对类ååå±æ§/å段åçè¯ä¹èªå¨å®æï¼æ¯é常çXMLç¼è¾å¨æ¹ä¾¿å¾å¤ã"
+
+#: index.docbook:23
+msgid "<emphasis>Console:</emphasis> The console is a new view in Eclipse. In addition to a tree overview of your console configurations, you also get an interactive view of your persistent classes and their relationships. The console allows you to execute HQL queries against your database and browse the result directly in Eclipse."
+msgstr "<emphasis>Console:</emphasis> Consoleæ¯Eclipseçä¸ä¸ªæ°è§å¾ãé¤äºå¯¹ä½ çconsoleé
ç½®çæ ç¶æ¦è§ï¼ä½ è¿å¯ä»¥è·å¾å¯¹ä½ æä¹
åç±»åå
¶å
³èç交äºå¼è§å¾ãConsoleå
è®¸ä½ å¯¹æ°æ®åºæ§è¡HQLæ¥è¯¢ï¼å¹¶ç´æ¥å¨Eclipseä¸æµè§ç»æã"
+
+#: index.docbook:30
+msgid "<emphasis>Development Wizards:</emphasis> Several wizards are provided with the Hibernate Eclipse tools; you can use a wizard to quickly generate Hibernate configuration (cfg.xml) files, or you may even completely reverse engineer an existing database schema into POJO source files and Hibernate mapping files. The reverse engineering wizard supports customizable templates."
+msgstr "<emphasis>Development Wizards:</emphasis> å¨Hibernate Eclipse toolsä¸è¿æä¾äºå 个å导ï¼ä½ å¯ä»¥ç¨å导快éçæHibernate é
ç½®æ件ï¼cfg.xmlï¼ï¼ä½ çè³è¿å¯ä»¥åç°åçæ°æ®åºschemaä¸ååå·¥ç¨åºPOJOæºä»£ç ä¸Hibernate æ å°æ件ãååå·¥ç¨æ¯æå¯å®å¶ç模çã"
+
+#: index.docbook:38
+msgid "Ant Tasks:"
+msgstr "Ant Tasks:"
+
+#: index.docbook:43
+msgid "Please refer to the <emphasis>Hibernate Tools</emphasis> package and it's documentation for more information."
+msgstr "è¦å¾å°æ´å¤ä¿¡æ¯ï¼è¯·æ¥é
<emphasis>Hibernate Tools</emphasis> å
åå
¶ææ¡£ã"
+
+#: index.docbook:48
+msgid "However, the Hibernate main package comes bundled with an integrated tool (it can even be used from \"inside\" Hibernate on-the-fly): <emphasis>SchemaExport</emphasis> aka <literal>hbm2ddl</literal>."
+msgstr "åæ¶ï¼Hibernate主åè¡å
è¿é带äºä¸ä¸ªéæçå·¥å
·ï¼å®çè³å¯ä»¥å¨Hibernateâå
é¨âå¿«éè¿è¡ï¼<emphasis>SchemaExport</emphasis> ï¼ä¹å°±æ¯ <literal>hbm2ddl</literal>ã"
+
+#: index.docbook:55
+msgid "Automatic schema generation"
+msgstr "Schemaèªå¨çæï¼Automatic schema generationï¼"
+
+#: index.docbook:57
+msgid "DDL may be generated from your mapping files by a Hibernate utility. The generated schema includes referential integrity constraints (primary and foreign keys) for entity and collection tables. Tables and sequences are also created for mapped identifier generators."
+msgstr "å¯ä»¥ä»ä½ çæ å°æ件使ç¨ä¸ä¸ªHibernateå·¥å
·çæDDLã çæçschemaå
å«æ对å®ä½åéå类表çå®æ´æ§å¼ç¨çº¦æï¼ä¸»é®åå¤é®ï¼ãæ¶åå°çæ 示符çæå¨æéç表åsequenceä¹ä¼åæ¶çæã"
+
+#: index.docbook:64
+msgid "You <emphasis>must</emphasis> specify a SQL <literal>Dialect</literal> via the <literal>hibernate.dialect</literal> property when using this tool, as DDL is highly vendor specific."
+msgstr "å¨ä½¿ç¨è¿ä¸ªå·¥å
·çæ¶åï¼ä½ <emphasis>å¿
é¡»</emphasis> éè¿<literal>hibernate.dialet</literal>å±æ§æå®ä¸ä¸ªSQL<literal>æ¹è¨(Dialet)</literal>ï¼å 为DDLæ¯ä¸ä¾åºåé«åº¦ç¸å
³çã"
+
+#: index.docbook:70
+msgid "First, customize your mapping files to improve the generated schema."
+msgstr "é¦å
ï¼è¦å®å¶ä½ çæ å°æ件ï¼æ¥æ¹åçæçschemaã"
+
+#: index.docbook:75
+msgid "Customizing the schema"
+msgstr "对schemaå®å¶å(Customizing the schema)"
+
+#: index.docbook:77
+msgid "Many Hibernate mapping elements define optional attributes named <literal>length</literal>, <literal>precision</literal> and <literal>scale</literal>. You may set the length, precision and scale of a column with this attribute."
+msgstr "å¾å¤Hibernateæ å°å
ç´ å®ä¹äºå¯éç<literal>length</literal>ã<literal>precision</literal> æè
<literal>scale</literal>å±æ§ãä½ å¯ä»¥éè¿è¿ä¸ªå±æ§è®¾ç½®å段çé¿åº¦ã精度ãå°æ°ç¹ä½æ°ã"
+
+#: index.docbook:84
+msgid "<![CDATA[<property name=\"zip\" length=\"5\"/>]]>"
+msgstr "<![CDATA[<property name=\"zip\" length=\"5\"/>]]>"
+
+#: index.docbook:85
+msgid "<![CDATA[<property name=\"balance\" precision=\"12\" scale=\"2\"/>]]>"
+msgstr "<![CDATA[<property name=\"balance\" precision=\"12\" scale=\"2\"/>]]>"
+
+#: index.docbook:87
+msgid "Some tags also accept a <literal>not-null</literal> attribute (for generating a <literal>NOT NULL</literal> constraint on table columns) and a <literal>unique</literal> attribute (for generating <literal>UNIQUE</literal> constraint on table columns)."
+msgstr "æäºtagè¿æ¥å<literal>not-null</literal>å±æ§ï¼ç¨æ¥å¨è¡¨å段ä¸çæ<literal>NOT NULL</literal>约æï¼å<literal>unique</literal>å±æ§ï¼ç¨æ¥å¨è¡¨å段ä¸çæ<literal>UNIQUE</literal>约æï¼ã"
+
+#: index.docbook:93
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" not-null=\"true\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" not-null=\"true\"/>]]>"
+
+#: index.docbook:95
+msgid "<![CDATA[<element column=\"serialNumber\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+msgstr "<![CDATA[<element column=\"serialNumber\" type=\"long\" not-null=\"true\" unique=\"true\"/>]]>"
+
+#: index.docbook:97
+msgid "A <literal>unique-key</literal> attribute may be used to group columns in a single unique key constraint. Currently, the specified value of the <literal>unique-key</literal> attribute is <emphasis>not</emphasis> used to name the constraint in the generated DDL, only to group the columns in the mapping file."
+msgstr "<literal>unique-key</literal>å±æ§å¯ä»¥å¯¹æç»çå段æå®ä¸ä¸ªå¯ä¸é®çº¦æ(unique key constraint)ãç®åï¼<literal>unique-key</literal>å±æ§æå®çå¼å¨çæDDLæ¶<emphasis>并ä¸ä¼</emphasis>被å½ä½è¿ä¸ªçº¦æçååï¼å®ä»¬åªæ¯å¨ç¨æ¥å¨æ å°æ件å
é¨ç¨ä½åºåçã"
+
+#: index.docbook:105
+msgid ""
+ "<![CDATA[<many-to-one name=\"org\" column=\"orgId\" unique-key=\"OrgEmployeeId\"/>\n"
+ "<property name=\"employeeId\" unique-key=\"OrgEmployee\"/>]]>"
+msgstr ""
+ "<![CDATA[<many-to-one name=\"org\" column=\"orgId\" unique-key=\"OrgEmployeeId\"/>\n"
+ "<property name=\"employeeId\" unique-key=\"OrgEmployee\"/>]]>"
+
+#: index.docbook:107
+msgid "An <literal>index</literal> attribute specifies the name of an index that will be created using the mapped column or columns. Multiple columns may be grouped into the same index, simply by specifying the same index name."
+msgstr "<literal>index</literal>å±æ§ä¼ç¨å¯¹åºçå段ï¼ä¸ä¸ªæå¤ä¸ªï¼çæä¸ä¸ªindex,å®æåºäºè¿ä¸ªindexçååãå¦æå¤ä¸ªå段对åºçindexååç¸åï¼å°±ä¼çæå
å«è¿äºå段çindexã"
+
+#: index.docbook:113
+msgid ""
+ "<![CDATA[<property name=\"lastName\" index=\"CustName\"/>\n"
+ "<property name=\"firstName\" index=\"CustName\"/>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"lastName\" index=\"CustName\"/>\n"
+ "<property name=\"firstName\" index=\"CustName\"/>]]>"
+
+#: index.docbook:115
+msgid "A <literal>foreign-key</literal> attribute may be used to override the name of any generated foreign key constraint."
+msgstr "<literal>foreign-key</literal>å±æ§å¯ä»¥ç¨æ¥è¦çä»»ä½çæçå¤é®çº¦æçååã"
+
+#: index.docbook:120
+msgid "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" foreign-key=\"FKFooBar\"/>]]>"
+msgstr "<![CDATA[<many-to-one name=\"bar\" column=\"barId\" foreign-key=\"FKFooBar\"/>]]>"
+
+#: index.docbook:122
+msgid "Many mapping elements also accept a child <literal><column></literal> element. This is particularly useful for mapping multi-column types:"
+msgstr "å¾å¤æ å°å
ç´ è¿æ¥å<literal><column></literal>åå
ç´ ãè¿å¨å®ä¹è·¨è¶å¤å段çç±»åæ¶ç¹å«æç¨ã"
+
+#: index.docbook:127
+msgid ""
+ "<![CDATA[<property name=\"name\" type=\"my.customtypes.Name\"/>\n"
+ " <column name=\"last\" not-null=\"true\" index=\"bar_idx\" length=\"30\"/>\n"
+ " <column name=\"first\" not-null=\"true\" index=\"bar_idx\" length=\"20\"/>\n"
+ " <column name=\"initial\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"name\" type=\"my.customtypes.Name\"/>\n"
+ " <column name=\"last\" not-null=\"true\" index=\"bar_idx\" length=\"30\"/>\n"
+ " <column name=\"first\" not-null=\"true\" index=\"bar_idx\" length=\"20\"/>\n"
+ " <column name=\"initial\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:129
+msgid "The <literal>default</literal> attribute lets you specify a default value for a column (you should assign the same value to the mapped property before saving a new instance of the mapped class)."
+msgstr "<literal>default</literal>å±æ§ä¸ºå段æå®ä¸ä¸ªé»è®¤å¼ (å¨ä¿å被æ å°çç±»çæ°å®ä¾ä¹åï¼ä½ åºè¯¥å°åæ ·çå¼èµäºå¯¹åºçå±æ§)ã"
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<property name=\"credits\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"credits\" default=\"10\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"credits\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"credits\" default=\"10\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:137
+msgid ""
+ "<![CDATA[<version name=\"version\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"version\" default=\"0\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<version name=\"version\" type=\"integer\" insert=\"false\">\n"
+ " <column name=\"version\" default=\"0\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:139
+msgid "The <literal>sql-type</literal> attribute allows the user to override the default mapping of a Hibernate type to SQL datatype."
+msgstr "<literal>sql-type</literal>å±æ§å
许ç¨æ·è¦çé»è®¤çHibernateç±»åå°SQLæ°æ®ç±»åçæ å°ã"
+
+#: index.docbook:144
+msgid ""
+ "<![CDATA[<property name=\"balance\" type=\"float\">\n"
+ " <column name=\"balance\" sql-type=\"decimal(13,3)\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"balance\" type=\"float\">\n"
+ " <column name=\"balance\" sql-type=\"decimal(13,3)\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:146
+msgid "The <literal>check</literal> attribute allows you to specify a check constraint."
+msgstr "<literal>check</literal>å±æ§å
许ç¨æ·æå®ä¸ä¸ªçº¦ææ£æ¥ã"
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"foo\" type=\"integer\">\n"
+ " <column name=\"foo\" check=\"foo > 10\"/>\n"
+ "</property>]]>"
+
+#: index.docbook:152
+msgid ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">\n"
+ " ...\n"
+ " <property name=\"bar\" type=\"float\"/>\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Foo\" table=\"foos\" check=\"bar < 100.0\">\n"
+ " ...\n"
+ " <property name=\"bar\" type=\"float\"/>\n"
+ "</class>]]>"
+
+#: index.docbook:156
+msgid "Summary"
+msgstr "Summary"
+
+#: index.docbook:163
+msgid "Attribute"
+msgstr "å±æ§(Attribute)"
+
+#: index.docbook:164
+msgid "Values"
+msgstr "å¼ï¼Valuesï¼"
+
+#: index.docbook:165
+msgid "Interpretation"
+msgstr "解éï¼Interpretationï¼"
+
+#: index.docbook:170
+msgid "length"
+msgstr "length"
+
+#: index.docbook:171, index.docbook:176, index.docbook:181
+msgid "number"
+msgstr "<entry>æ°å</entry>"
+
+#: index.docbook:172
+msgid "column length"
+msgstr "å段é¿åº¦"
+
+#: index.docbook:175
+msgid "precision"
+msgstr "precision"
+
+#: index.docbook:177
+msgid "column decimal precision"
+msgstr "精度(decimal precision)"
+
+#: index.docbook:180
+msgid "scale"
+msgstr "scale"
+
+#: index.docbook:182
+msgid "column decimal scale"
+msgstr "å°æ°ç¹ä½æ°(decimal scale)"
+
+#: index.docbook:185
+msgid "not-null"
+msgstr "not-null"
+
+#: index.docbook:186, index.docbook:191
+msgid "true|false"
+msgstr "true|false"
+
+#: index.docbook:187
+msgid "specfies that the column should be non-nullable"
+msgstr "ææå段æ¯å¦åºè¯¥æ¯é空ç"
+
+#: index.docbook:190
+msgid "unique"
+msgstr "unique"
+
+#: index.docbook:192
+msgid "specifies that the column should have a unique constraint"
+msgstr "æææ¯å¦è¯¥å段å
·ææä¸çº¦æ"
+
+#: index.docbook:195
+msgid "index"
+msgstr "index"
+
+#: index.docbook:196
+msgid "index_name"
+msgstr "index_name"
+
+#: index.docbook:197
+msgid "specifies the name of a (multi-column) index"
+msgstr "ææä¸ä¸ªï¼å¤å段ï¼çç´¢å¼(index)çåå"
+
+#: index.docbook:200
+msgid "unique-key"
+msgstr "unique-key"
+
+#: index.docbook:201
+msgid "unique_key_name"
+msgstr "unique_key_name"
+
+#: index.docbook:202
+msgid "specifies the name of a multi-column unique constraint"
+msgstr "ææå¤å段æä¸çº¦æçååï¼åè§ä¸é¢ç说æï¼"
+
+#: index.docbook:205
+msgid "foreign-key"
+msgstr "foreign-key"
+
+#: index.docbook:206
+msgid "foreign_key_name"
+msgstr "foreign_key_name"
+
+#: index.docbook:207
+msgid "specifies the name of the foreign key constraint generated for an association, for a <literal><one-to-one></literal>, <literal><many-to-one></literal>, <literal><key></literal>, or <literal><many-to-many></literal> mapping element. Note that <literal>inverse=\"true\"</literal> sides will not be considered by <literal>SchemaExport</literal>."
+msgstr "specifies the name of the foreign key constraint generated for an association, for a <literal><one-to-one></literal>, <literal><many-to-one></literal>, <literal><key></literal>, or <literal><many-to-many></literal> mapping element. Note that <literal>inverse=\"true\"</literal> sides will not be considered by <literal>SchemaExport</literal>. ææä¸ä¸ªå¤é®çååï¼å®æ¯ä¸ºå
³èçæçï¼æè
<literal><one-to-one></literal>ï¼<literal><many-to-one></literal>, <literal><key></literal>, æè
<literal><many-to-many></literal>æ å°å
ç´ ã注æ<literal>inverse=\"true\"</literal>å¨<literal>SchemaExport</literal>æ¶ä¼è¢«å¿½ç¥ã"
+
+#: index.docbook:217
+msgid "sql-type"
+msgstr "sql-type"
+
+#: index.docbook:218
+msgid "SQL column type"
+msgstr "SQL å段类å"
+
+#: index.docbook:219
+msgid "overrides the default column type (attribute of <literal><column></literal> element only)"
+msgstr "è¦çé»è®¤çå段类å(åªè½ç¨äº<literal><column></literal>å±æ§ï¼"
+
+#: index.docbook:225
+msgid "default"
+msgstr "default"
+
+#: index.docbook:226, index.docbook:233
+msgid "SQL expression"
+msgstr "SQL表达å¼"
+
+#: index.docbook:227
+msgid "specify a default value for the column"
+msgstr "为å段æå®é»è®¤å¼"
+
+#: index.docbook:232
+msgid "check"
+msgstr "check"
+
+#: index.docbook:234
+msgid "create an SQL check constraint on either column or table"
+msgstr "对å段æ表å å
¥SQL约ææ£æ¥"
+
+#: index.docbook:242
+msgid "The <literal><comment></literal> element allows you to specify comments for the generated schema."
+msgstr "<literal><comment></literal>å
ç´ å¯ä»¥è®©ä½ å¨çæçschemaä¸å å
¥æ³¨éã"
+
+#: index.docbook:247
+msgid ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">\n"
+ " <comment>Current customers only</comment>\n"
+ " ...\n"
+ "</class>]]>"
+msgstr ""
+ "<![CDATA[<class name=\"Customer\" table=\"CurCust\">\n"
+ " <comment>Current customers only</comment>\n"
+ " ...\n"
+ "</class>]]>"
+
+#: index.docbook:249
+msgid ""
+ "<![CDATA[<property name=\"balance\">\n"
+ " <column name=\"bal\">\n"
+ " <comment>Balance in USD</comment>\n"
+ " </column>\n"
+ "</property>]]>"
+msgstr ""
+ "<![CDATA[<property name=\"balance\">\n"
+ " <column name=\"bal\">\n"
+ " <comment>Balance in USD</comment>\n"
+ " </column>\n"
+ "</property>]]>"
+
+#: index.docbook:251
+msgid "This results in a <literal>comment on table</literal> or <literal>comment on column</literal> statement in the generated DDL (where supported)."
+msgstr "ç»ææ¯å¨çæçDDLä¸å
å«<literal>comment on table</literal> æè
<literal>comment on column</literal>è¯å¥(åè¥æ¯æçè¯)ã"
+
+#: index.docbook:260
+msgid "Running the tool"
+msgstr "è¿è¡è¯¥å·¥å
·"
+
+#: index.docbook:262
+msgid "The <literal>SchemaExport</literal> tool writes a DDL script to standard out and/or executes the DDL statements."
+msgstr "<literal>SchemaExport</literal>å·¥å
·æDDLèæ¬åå°æ åè¾åºï¼åæ¶/æè
æ§è¡DDLè¯å¥ã"
+
+#: index.docbook:267
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaExport</literal> <emphasis>options mapping_files</emphasis>"
+
+#: index.docbook:273
+msgid "<literal>SchemaExport</literal> Command Line Options"
+msgstr "<literal>SchemaExport</literal>å½ä»¤è¡é项"
+
+#: index.docbook:279, index.docbook:429, index.docbook:498
+msgid "Option"
+msgstr "<entry>é项</entry>"
+
+#: index.docbook:280, index.docbook:367, index.docbook:430, index.docbook:499
+msgid "Description"
+msgstr "<entry>说æ</entry>"
+
+#: index.docbook:285, index.docbook:435
+msgid "--quiet"
+msgstr "--quiet"
+
+#: index.docbook:286, index.docbook:436
+msgid "don't output the script to stdout"
+msgstr "ä¸è¦æèæ¬è¾åºå°stdout"
+
+#: index.docbook:289
+msgid "--drop"
+msgstr "--drop"
+
+#: index.docbook:290
+msgid "only drop the tables"
+msgstr "åªè¿è¡drop tablesçæ¥éª¤"
+
+#: index.docbook:293
+msgid "--create"
+msgstr "--create"
+
+#: index.docbook:294
+msgid "only create the tables"
+msgstr "åªå建表"
+
+#: index.docbook:297, index.docbook:439
+msgid "--text"
+msgstr "--text"
+
+#: index.docbook:298
+msgid "don't export to the database"
+msgstr "ä¸æ§è¡å¨æ°æ®åºä¸è¿è¡çæ¥éª¤"
+
+#: index.docbook:301
+msgid "--output=my_schema.ddl"
+msgstr "--output=my_schema.ddl"
+
+#: index.docbook:302
+msgid "output the ddl script to a file"
+msgstr "æè¾åºçddlèæ¬è¾åºå°ä¸ä¸ªæ件"
+
+#: index.docbook:305, index.docbook:443, index.docbook:504
+msgid "--naming=eg.MyNamingStrategy"
+msgstr "--naming=eg.MyNamingStrategy"
+
+#: index.docbook:306, index.docbook:444, index.docbook:505
+msgid "select a <literal>NamingStrategy</literal>"
+msgstr "éæ©ä¸ä¸ªå½åçç¥(<literal>NamingStrategy</literal>)"
+
+#: index.docbook:309, index.docbook:451, index.docbook:512
+msgid "--config=hibernate.cfg.xml"
+msgstr "--config=hibernate.cfg.xml"
+
+#: index.docbook:310
+msgid "read Hibernate configuration from an XML file"
+msgstr "ä»XMLæ件读å
¥Hibernateé
ç½®"
+
+#: index.docbook:313, index.docbook:447, index.docbook:508
+msgid "--properties=hibernate.properties"
+msgstr "--properties=hibernate.properties"
+
+#: index.docbook:314, index.docbook:448, index.docbook:509
+msgid "read database properties from a file"
+msgstr "ä»æ件读å
¥æ°æ®åºå±æ§"
+
+#: index.docbook:317
+msgid "--format"
+msgstr "--format"
+
+#: index.docbook:318
+msgid "format the generated SQL nicely in the script"
+msgstr "æèæ¬ä¸çSQLè¯å¥å¯¹é½åç¾å"
+
+#: index.docbook:321
+msgid "--delimiter=;"
+msgstr "--delimiter=;"
+
+#: index.docbook:322
+msgid "set an end of line delimiter for the script"
+msgstr "为èæ¬è®¾ç½®è¡ç»æ符"
+
+#: index.docbook:328
+msgid "You may even embed <literal>SchemaExport</literal> in your application:"
+msgstr "ä½ çè³å¯ä»¥å¨ä½ çåºç¨ç¨åºä¸åµå
¥<literal>SchemaExport</literal>å·¥å
·:"
+
+#: index.docbook:332
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaExport(cfg).create(false, true);]]>"
+
+#: index.docbook:337
+msgid "Properties"
+msgstr "å±æ§(Properties)"
+
+#: index.docbook:339
+msgid "Database properties may be specified"
+msgstr "å¯ä»¥éè¿å¦ä¸æ¹å¼æå®æ°æ®åºå±æ§:"
+
+#: index.docbook:345
+msgid "as system properties with <literal>-D</literal><emphasis><property></emphasis>"
+msgstr "éè¿<literal>-D</literal><emphasis><property></emphasis>ç³»ç»åæ°"
+
+#: index.docbook:348
+msgid "in <literal>hibernate.properties</literal>"
+msgstr "å¨<literal>hibernate.properties</literal>æ件ä¸"
+
+#: index.docbook:351
+msgid "in a named properties file with <literal>--properties</literal>"
+msgstr "ä½äºä¸ä¸ªå
¶å®ååçpropertiesæ件ä¸,ç¶åç¨ <literal>--properties</literal>åæ°æå®"
+
+#: index.docbook:355
+msgid "The needed properties are:"
+msgstr "æéçåæ°å
æ¬:"
+
+#: index.docbook:360
+msgid "SchemaExport Connection Properties"
+msgstr "SchemaExport è¿æ¥å±æ§"
+
+#: index.docbook:366
+msgid "Property Name"
+msgstr "<entry>å±æ§å</entry>"
+
+#: index.docbook:372
+msgid "hibernate.connection.driver_class"
+msgstr "hibernate.connection.driver_class"
+
+#: index.docbook:373
+msgid "jdbc driver class"
+msgstr "jdbc driver class"
+
+#: index.docbook:376
+msgid "hibernate.connection.url"
+msgstr "hibernate.connection.url"
+
+#: index.docbook:377
+msgid "jdbc url"
+msgstr "jdbc url"
+
+#: index.docbook:380
+msgid "hibernate.connection.username"
+msgstr "hibernate.connection.username"
+
+#: index.docbook:381
+msgid "database user"
+msgstr "database user"
+
+#: index.docbook:384
+msgid "hibernate.connection.password"
+msgstr "hibernate.connection.password"
+
+#: index.docbook:385
+msgid "user password"
+msgstr "user password"
+
+#: index.docbook:388
+msgid "hibernate.dialect"
+msgstr "hibernate.dialect"
+
+#: index.docbook:389
+msgid "dialect"
+msgstr "æ¹è¨(dialect)"
+
+#: index.docbook:398
+msgid "Using Ant"
+msgstr "使ç¨Ant(Using Ant)"
+
+#: index.docbook:400
+msgid "You can call <literal>SchemaExport</literal> from your Ant build script:"
+msgstr "ä½ å¯ä»¥å¨ä½ çAnt buildèæ¬ä¸è°ç¨<literal>SchemaExport</literal>:"
+
+#: index.docbook:404
+msgid ""
+ "<![CDATA[<target name=\"schemaexport\">\n"
+ " <taskdef name=\"schemaexport\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaexport\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\"\n"
+ " text=\"no\"\n"
+ " drop=\"no\"\n"
+ " delimiter=\";\"\n"
+ " output=\"schema-export.sql\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaexport>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"schemaexport\">\n"
+ " <taskdef name=\"schemaexport\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaExportTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaexport\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\"\n"
+ " text=\"no\"\n"
+ " drop=\"no\"\n"
+ " delimiter=\";\"\n"
+ " output=\"schema-export.sql\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaexport>\n"
+ "</target>]]>"
+
+#: index.docbook:409
+msgid "Incremental schema updates"
+msgstr "对schemaçå¢éæ´æ°(Incremental schema updates)"
+
+#: index.docbook:411
+msgid "The <literal>SchemaUpdate</literal> tool will update an existing schema with \"incremental\" changes. Note that <literal>SchemaUpdate</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers."
+msgstr "<literal>SchemaUpdate</literal>å·¥å
·å¯¹å·²åå¨çschemaéç¨\"å¢é\"æ¹å¼è¿è¡æ´æ°ã注æ<literal>SchemaUpdate</literal>严éä¾èµäºJDBC metadata API,æ以å®å¹¶é对ææJDBC驱å¨é½ææã"
+
+#: index.docbook:417
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaUpdate</literal> <emphasis>options mapping_files</emphasis>"
+
+#: index.docbook:423
+msgid "<literal>SchemaUpdate</literal> Command Line Options"
+msgstr "<literal>SchemaUpdate</literal>å½ä»¤è¡é项"
+
+#: index.docbook:440
+msgid "don't export the script to the database"
+msgstr "ä¸æèæ¬è¾åºå°æ°æ®åº"
+
+#: index.docbook:452, index.docbook:513
+msgid "specify a <literal>.cfg.xml</literal> file"
+msgstr "æå®ä¸ä¸ª <literal>.cfg.xml</literal>æ件"
+
+#: index.docbook:458
+msgid "You may embed <literal>SchemaUpdate</literal> in your application:"
+msgstr "ä½ å¯ä»¥å¨ä½ çåºç¨ç¨åºä¸åµå
¥<literal>SchemaUpdate</literal>å·¥å
·:"
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaUpdate(cfg).execute(false);]]>"
+
+#: index.docbook:467
+msgid "Using Ant for incremental schema updates"
+msgstr "ç¨Antæ¥å¢éæ´æ°schema(Using Ant for incremental schema updates)"
+
+#: index.docbook:469
+msgid "You can call <literal>SchemaUpdate</literal> from the Ant script:"
+msgstr "ä½ å¯ä»¥å¨Antèæ¬ä¸è°ç¨<literal>SchemaUpdate</literal>ï¼"
+
+#: index.docbook:473
+msgid ""
+ "<![CDATA[<target name=\"schemaupdate\">\n"
+ " <taskdef name=\"schemaupdate\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaupdate\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaupdate>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"schemaupdate\">\n"
+ " <taskdef name=\"schemaupdate\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaUpdateTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemaupdate\n"
+ " properties=\"hibernate.properties\"\n"
+ " quiet=\"no\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemaupdate>\n"
+ "</target>]]>"
+
+#: index.docbook:478
+msgid "Schema validation"
+msgstr "Schema æ ¡éª"
+
+#: index.docbook:480
+msgid "The <literal>SchemaValidator</literal> tool will validate that the existing database schema \"matches\" your mapping documents. Note that <literal>SchemaValidator</literal> depends heavily upon the JDBC metadata API, so it will not work with all JDBC drivers. This tool is extremely useful for testing."
+msgstr "<literal>SchemaValidator</literal>å·¥å
·ä¼æ¯è¾æ°æ®åºç°ç¶æ¯å¦ä¸æ å°ææ¡£âå¹é
âã注æï¼<literal>SchemaValidator</literal> 严éä¾èµäºJDBCçmetadata APIï¼å æ¤ä¸æ¯å¯¹ææçJDBC驱å¨é½éç¨ãè¿ä¸å·¥å
·å¨æµè¯çæ¶åç¹å«æç¨ã"
+
+#: index.docbook:486
+msgid "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaValidator</literal> <emphasis>options mapping_files</emphasis>"
+msgstr "<literal>java -cp </literal><emphasis>hibernate_classpaths</emphasis> <literal>org.hibernate.tool.hbm2ddl.SchemaValidator</literal> <emphasis>options mapping_files</emphasis>"
+
+#: index.docbook:492
+msgid "<literal>SchemaValidator</literal> Command Line Options"
+msgstr "<literal>SchemaValidator</literal>å½ä»¤è¡åæ°"
+
+#: index.docbook:519
+msgid "You may embed <literal>SchemaValidator</literal> in your application:"
+msgstr "ä½ å¯ä»¥å¨ä½ çåºç¨ç¨åºä¸åµå
¥<literal>SchemaValidator</literal>ï¼"
+
+#: index.docbook:523
+msgid ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaValidator(cfg).validate();]]>"
+msgstr ""
+ "<![CDATA[Configuration cfg = ....;\n"
+ "new SchemaValidator(cfg).validate();]]>"
+
+#: index.docbook:528
+msgid "Using Ant for schema validation"
+msgstr "使ç¨Antè¿è¡schemaæ ¡éª"
+
+#: index.docbook:530
+msgid "You can call <literal>SchemaValidator</literal> from the Ant script:"
+msgstr "ä½ å¯ä»¥å¨Antèæ¬ä¸è°ç¨<literal>SchemaValidator</literal>:"
+
+#: index.docbook:534
+msgid ""
+ "<![CDATA[<target name=\"schemavalidate\">\n"
+ " <taskdef name=\"schemavalidator\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaValidatorTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemavalidator\n"
+ " properties=\"hibernate.properties\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemavalidator>\n"
+ "</target>]]>"
+msgstr ""
+ "<![CDATA[<target name=\"schemavalidate\">\n"
+ " <taskdef name=\"schemavalidator\"\n"
+ " classname=\"org.hibernate.tool.hbm2ddl.SchemaValidatorTask\"\n"
+ " classpathref=\"class.path\"/>\n"
+ " \n"
+ " <schemavalidator\n"
+ " properties=\"hibernate.properties\">\n"
+ " <fileset dir=\"src\">\n"
+ " <include name=\"**/*.hbm.xml\"/>\n"
+ " </fileset>\n"
+ " </schemavalidator>\n"
+ "</target>]]>"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/transactions.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/transactions.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/transactions.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,673 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "Transactions And Concurrency"
+msgstr ""
+
+#: index.docbook:7
+msgid "The most important point about Hibernate and concurrency control is that it is very easy to understand. Hibernate directly uses JDBC connections and JTA resources without adding any additional locking behavior. We highly recommend you spend some time with the JDBC, ANSI, and transaction isolation specification of your database management system."
+msgstr ""
+
+#: index.docbook:14
+msgid "Hibernate does not lock objects in memory. Your application can expect the behavior as defined by the isolation level of your database transactions. Note that thanks to the <literal>Session</literal>, which is also a transaction-scoped cache, Hibernate provides repeatable reads for lookup by identifier and entity queries (not reporting queries that return scalar values)."
+msgstr ""
+
+#: index.docbook:22
+msgid "In addition to versioning for automatic optimistic concurrency control, Hibernate also offers a (minor) API for pessimistic locking of rows, using the <literal>SELECT FOR UPDATE</literal> syntax. Optimistic concurrency control and this API are discussed later in this chapter."
+msgstr ""
+
+#: index.docbook:29
+msgid "We start the discussion of concurrency control in Hibernate with the granularity of <literal>Configuration</literal>, <literal>SessionFactory</literal>, and <literal>Session</literal>, as well as database transactions and long conversations."
+msgstr ""
+
+#: index.docbook:36
+msgid "Session and transaction scopes"
+msgstr ""
+
+#: index.docbook:38
+msgid "A <literal>SessionFactory</literal> 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</literal> instance."
+msgstr ""
+
+#: index.docbook:44
+msgid "A <literal>Session</literal> is an inexpensive, non-threadsafe object that should be used once, for a single request, a conversation, single unit of work, and then discarded. A <literal>Session</literal> will not obtain a JDBC <literal>Connection</literal> (or a <literal>Datasource</literal>) unless it is needed, hence consume no resources until used."
+msgstr ""
+
+#: index.docbook:52
+msgid "To complete this picture you also have to think about database transactions. A database transaction has to be as short as possible, to reduce lock contention in the database. Long database transactions will prevent your application from scaling to highly concurrent load. Hence, it is almost never good design to hold a database transaction open during user think time, until the unit of work is complete."
+msgstr ""
+
+#: index.docbook:61
+msgid "What is the scope of a unit of work? Can a single Hibernate <literal>Session</literal> span several database transactions or is this a one-to-one relationship of scopes? When should you open and close a <literal>Session</literal> and how do you demarcate the database transaction boundaries?"
+msgstr ""
+
+#: index.docbook:69
+msgid "Unit of work"
+msgstr ""
+
+#: index.docbook:71
+msgid "First, don't use the <emphasis>session-per-operation</emphasis> antipattern, that is, don't open and close a <literal>Session</literal> for every simple database call in a single thread! Of course, 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. (Note that this also means that auto-commit after every single SQL statement is useless in an application, this mode is intended for ad-hoc SQL console work. Hibernate disables, or expects the application server to do so, auto-commit mode immediately.) Database transactions are never optional, all communication with a database has to occur inside a transaction, no matter if you read or write data. As explained, 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 much more maintainable and extensible."
+msgstr ""
+
+#: index.docbook:87
+msgid "The most common pattern in a multi-user client/server application is <emphasis>session-per-request</emphasis>. In this model, a request from the client is send to the server (where the Hibernate persistence layer runs), a new Hibernate <literal>Session</literal> is opened, and all database operations are executed in this unit of work. Once the work has been completed (and the response for the client has been prepared), the session is flushed and closed. You would also use a single database transaction to serve the clients request, starting and committing it when you open and close the <literal>Session</literal>. The relationship between the two is one-to-one and this model is a perfect fit for many applications."
+msgstr ""
+
+#: index.docbook:99
+msgid "The challenge lies in the implementation. Hibernate provides built-in management of the \"current session\" to simplify this pattern. All you have to do is start a transaction when a server request has to be processed, and end the transaction before the response is send to the client. You can do this in any way you like, common solutions are <literal>ServletFilter</literal>, 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 decide to use programmatic transaction demarcation, prefer the Hibernate <literal>Transaction</literal> API shown later in this chapter, for ease of use and code portability."
+msgstr ""
+
+#: index.docbook:112
+msgid "Your application code can access a \"current session\" to process the request by simply calling <literal>sessionFactory.getCurrentSession()</literal> anywhere and as often as needed. You will always get a <literal>Session</literal> 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 ""
+
+#: index.docbook:120
+msgid "Sometimes it is convenient to extend the scope of a <literal>Session</literal> 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 complete is easy to do if you implement your own interceptor. However, it is not easily doable if you rely on EJBs with container-managed transactions, as 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 around this <emphasis>Open Session in View</emphasis> pattern."
+msgstr ""
+
+#: index.docbook:135
+msgid "Long conversations"
+msgstr ""
+
+#: index.docbook:137
+msgid "The session-per-request pattern is not the only useful concept you can use to design units of work. Many business processes require a whole series of interactions with the user interleaved with database accesses. In web and enterprise applications it is not acceptable for a database transaction to span a user interaction. Consider the following example:"
+msgstr ""
+
+#: index.docbook:147
+msgid "The first screen of a dialog opens, the data seen by the user has been loaded in a particular <literal>Session</literal> and database transaction. The user is free to modify the objects."
+msgstr ""
+
+#: index.docbook:154
+msgid "The user clicks \"Save\" after 5 minutes and expects his modifications to be made persistent; he also expects that he was the only person editing this information and that no conflicting modification can occur."
+msgstr ""
+
+#: index.docbook:162
+msgid "We call this unit of work, from the point of view of the user, a long running <emphasis>conversation</emphasis> (or <emphasis>application transaction</emphasis>). There are many ways how you can implement this in your application."
+msgstr ""
+
+#: index.docbook:168
+msgid "A first naive implementation might keep the <literal>Session</literal> 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 of course an anti-pattern, since lock contention would not allow the application to scale with the number of concurrent users."
+msgstr ""
+
+#: index.docbook:176
+msgid "Clearly, we have to use several database transactions to implement the converastion. 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 (e.g. in a wizard-style dialog spanning several request/response cycles). This is easier to implement than it might sound, especially if you use Hibernate's features:"
+msgstr ""
+
+#: index.docbook:189
+msgid "<emphasis>Automatic Versioning</emphasis> - Hibernate can do automatic optimistic concurrency control for you, it can automatically detect if a concurrent modification occured during user think time. Usually we only check at the end of the conversation."
+msgstr ""
+
+#: index.docbook:197
+msgid "<emphasis>Detached Objects</emphasis> - If you decide to use the already discussed <emphasis>session-per-request</emphasis> pattern, all loaded instances will be in 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</emphasis>. Automatic versioning is used to isolate concurrent modifications."
+msgstr ""
+
+#: index.docbook:207
+msgid "<emphasis>Extended (or Long) Session</emphasis> - The Hibernate <literal>Session</literal> may 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</literal> is usually not allowed to be flushed automatically, but explicitely."
+msgstr ""
+
+#: index.docbook:220
+msgid "Both <emphasis>session-per-request-with-detached-objects</emphasis> and <emphasis>session-per-conversation</emphasis> have advantages and disadvantages, we discuss them later in this chapter in the context of optimistic concurrency control."
+msgstr ""
+
+#: index.docbook:229
+msgid "Considering object identity"
+msgstr ""
+
+#: index.docbook:231
+msgid "An application may concurrently access the same persistent state in two different <literal>Session</literal>s. However, an instance of a persistent class is never shared between two <literal>Session</literal> instances. Hence there are two different notions of identity:"
+msgstr ""
+
+#: index.docbook:240
+msgid "Database Identity"
+msgstr ""
+
+#: index.docbook:243
+msgid "foo.getId().equals( bar.getId() )"
+msgstr ""
+
+#: index.docbook:248
+msgid "JVM Identity"
+msgstr ""
+
+#: index.docbook:251
+msgid "foo==bar"
+msgstr ""
+
+#: index.docbook:257
+msgid "Then for objects attached to a <emphasis>particular</emphasis> <literal>Session</literal> (i.e. in the scope of a <literal>Session</literal>) the two notions are equivalent, and JVM identity for database identity is guaranteed by Hibernate. However, 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 (automatic versioning) at flush/commit time, using an optimistic approach."
+msgstr ""
+
+#: index.docbook:266
+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 only doesn't need expensive locking or other means of synchronization. The application never needs to synchronize on any business object, as long as it sticks to a single thread per <literal>Session</literal>. Within a <literal>Session</literal> the application may safely use <literal>==</literal> to compare objects."
+msgstr ""
+
+#: index.docbook:275
+msgid "However, an application that uses <literal>==</literal> outside of a <literal>Session</literal>, might see unexpected results. This might occur even in some unexpected places, for example, if you put two detached instances into the same <literal>Set</literal>. Both might have the same database identity (i.e. they represent the same row), but JVM identity is by definition not guaranteed for instances in detached state. The developer has to override the <literal>equals()</literal> and <literal>hashCode()</literal> methods in persistent classes and implement his own notion of object equality. There is one caveat: Never use the database identifier to implement equality, use a business key, 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</literal>, changing the hashcode breaks the contract of t!
he <literal>Set</literal>. Attributes for business keys don't 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</literal>. See the Hibernate website for a more thorough discussion of this issue. Also note that this is not a Hibernate issue, but simply how Java object identity and equality has to be implemented."
+msgstr ""
+
+#: index.docbook:296
+msgid "Common issues"
+msgstr ""
+
+#: index.docbook:298
+msgid "Never use the anti-patterns <emphasis>session-per-user-session</emphasis> or <emphasis>session-per-application</emphasis> (of course, there are rare exceptions to this rule). Note that some of the following issues might also appear with the recommended patterns, make sure you understand the implications before making a design decision:"
+msgstr ""
+
+#: index.docbook:307
+msgid "A <literal>Session</literal> is not thread-safe. Things which are supposed to work concurrently, like HTTP requests, session beans, or Swing workers, will cause race conditions if a <literal>Session</literal> instance would be shared. If you keep your Hibernate <literal>Session</literal> in your <literal>HttpSession</literal> (discussed later), you should consider synchronizing access to your Http session. Otherwise, a user that clicks reload fast enough may use the same <literal>Session</literal> in two concurrently running threads."
+msgstr ""
+
+#: index.docbook:318
+msgid "An exception thrown by Hibernate means you have to rollback your database transaction and close the <literal>Session</literal> immediately (discussed later in more detail). If your <literal>Session</literal> is bound to the application, you have to stop the application. Rolling back the database transaction doesn't put your business objects back into the state they were at the start of the transaction. This means the database state and the business objects do get out of sync. Usually this is not a problem, because exceptions are not recoverable and you have to start over after rollback anyway."
+msgstr ""
+
+#: index.docbook:330
+msgid "The <literal>Session</literal> caches every object that is in persistent state (watched and checked for dirty state by Hibernate). This means it grows endlessly until you get an OutOfMemoryException, if you keep it open for a long time or simply load too much data. One solution for this is to call <literal>clear()</literal> and <literal>evict()</literal> to manage the <literal>Session</literal> cache, but you most likely should consider a Stored Procedure if you need mass data operations. Some solutions are shown in <xref linkend=\"batch\"/>. Keeping a <literal>Session</literal> open for the duration of a user session also means a high probability of stale data."
+msgstr ""
+
+#: index.docbook:348
+msgid "Database transaction demarcation"
+msgstr ""
+
+#: index.docbook:350
+msgid "Datatabase (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 ""
+
+#: index.docbook:360
+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, in other words, begin, commit, or rollback database transactions himself. 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 ""
+
+#: index.docbook:370
+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 you'd use programmatic transaction demaracation. Hibernate offers a wrapper API called <literal>Transaction</literal> 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 ""
+
+#: index.docbook:379
+msgid "Usually, ending a <literal>Session</literal> involves four distinct phases:"
+msgstr ""
+
+#: index.docbook:385
+msgid "flush the session"
+msgstr ""
+
+#: index.docbook:390
+msgid "commit the transaction"
+msgstr ""
+
+#: index.docbook:395
+msgid "close the session"
+msgstr ""
+
+#: index.docbook:400
+msgid "handle exceptions"
+msgstr ""
+
+#: index.docbook:406
+msgid "Flushing the session has been discussed earlier, we'll now have a closer look at transaction demarcation and exception handling in both managed- and non-managed environments."
+msgstr ""
+
+#: index.docbook:413
+msgid "Non-managed environment"
+msgstr ""
+
+#: index.docbook:415
+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 ""
+
+#: index.docbook:422
+msgid ""
+ "<![CDATA[// Non-managed environment idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:424
+msgid "You don't have to <literal>flush()</literal> the <literal>Session</literal> explicitly - the call to <literal>commit()</literal> automatically triggers the synchronization (depending upon the <xref linkend=\"objectstate-flushing\"/>FlushMode for the session. A call to <literal>close()</literal> marks the end of a session. The main implication of <literal>close()</literal> is that the JDBC connection will be relinquished by the session. This Java code is portable and runs in both non-managed and JTA environments."
+msgstr ""
+
+#: index.docbook:433
+msgid "A much more flexible solution is Hibernate's built-in \"current session\" context management, as described earlier:"
+msgstr ""
+
+#: index.docbook:438
+msgid ""
+ "<![CDATA[// Non-managed environment idiom with getCurrentSession()\n"
+ "try {\n"
+ " factory.getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " factory.getCurrentSession().getTransaction().commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " factory.getCurrentSession().getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:440
+msgid "You will very likely never 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</literal> (and usually can only clean up and exit) are in different layers. The current context management by Hibernate can significantly simplify this design, as all you need is access to a <literal>SessionFactory</literal>. Exception handling is discussed later in this chapter."
+msgstr ""
+
+#: index.docbook:450
+msgid "Note that you should select <literal>org.hibernate.transaction.JDBCTransactionFactory</literal> (which is the default), and for the second example <literal>\"thread\"</literal> as your <literal>hibernate.current_session_context_class</literal>."
+msgstr ""
+
+#: index.docbook:459
+msgid "Using JTA"
+msgstr ""
+
+#: index.docbook:461
+msgid "If your persistence layer runs in an application server (e.g. 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 ""
+
+#: index.docbook:468
+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</literal> API. So, the transaction management code is identical to the non-managed environment."
+msgstr ""
+
+#: index.docbook:474
+msgid ""
+ "<![CDATA[// BMT idiom\n"
+ "Session sess = factory.openSession();\n"
+ "Transaction tx = null;\n"
+ "try {\n"
+ " tx = sess.beginTransaction();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " if (tx != null) tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:476
+msgid "If you want to use a transaction-bound <literal>Session</literal>, that is, the <literal>getCurrentSession()</literal> functionality for easy context propagation, you will have to use the JTA <literal>UserTransaction</literal> API directly:"
+msgstr ""
+
+#: index.docbook:482
+msgid ""
+ "<![CDATA[// BMT idiom with getCurrentSession()\n"
+ "try {\n"
+ " UserTransaction tx = (UserTransaction)new InitialContext()\n"
+ " .lookup(\"java:comp/UserTransaction\");\n"
+ "\n"
+ " tx.begin();\n"
+ "\n"
+ " // Do some work on Session bound to transaction\n"
+ " factory.getCurrentSession().load(...);\n"
+ " factory.getCurrentSession().persist(...);\n"
+ "\n"
+ " tx.commit();\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " tx.rollback();\n"
+ " throw e; // or display error message\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:484
+msgid "With CMT, transaction demarcation is done in session bean deployment descriptors, not programatically, hence, the code is reduced to:"
+msgstr ""
+
+#: index.docbook:489
+msgid ""
+ "<![CDATA[// CMT idiom\n"
+ " Session sess = factory.getCurrentSession();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "]]>"
+msgstr ""
+
+#: index.docbook:491
+msgid "In a CMT/EJB even rollback happens automatically, since an unhandled <literal>RuntimeException</literal> thrown by a session bean method tells the container to set the global transaction to rollback. <emphasis>This means you do not need to use the Hibernate <literal>Transaction</literal> API at all with BMT or CMT, and you get automatic propagation of the \"current\" Session bound to the transaction.</emphasis>"
+msgstr ""
+
+#: index.docbook:499
+msgid "Note that you should 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, when you configure Hibernate's transaction factory. Remember to also set <literal>hibernate.transaction.manager_lookup_class</literal>. Furthermore, make sure that your <literal>hibernate.current_session_context_class</literal> is either unset (backwards compatiblity), or set to <literal>\"jta\"</literal>."
+msgstr ""
+
+#: index.docbook:508
+msgid "The <literal>getCurrentSession()</literal> operation has one downside in a JTA environment. There is one caveat to the use of <literal>after_statement</literal> connection release mode, which is then used by default. Due to a silly limitation of the JTA spec, it is not possible for Hibernate to automatically clean up any unclosed <literal>ScrollableResults</literal> or <literal>Iterator</literal> instances returned by <literal>scroll()</literal> or <literal>iterate()</literal>. You <emphasis>must</emphasis> release the underlying database cursor by calling <literal>ScrollableResults.close()</literal> or <literal>Hibernate.close(Iterator)</literal> explicity from a <literal>finally</literal> block. (Of course, most applications can easily avoid using <literal>scroll()</literal> or <literal>iterate()</literal> at all from the JTA or CMT code.)"
+msgstr ""
+
+#: index.docbook:524
+msgid "Exception handling"
+msgstr ""
+
+#: index.docbook:526
+msgid "If the <literal>Session</literal> throws an exception (including any <literal>SQLException</literal>), you should immediately rollback the database transaction, call <literal>Session.close()</literal> and discard the <literal>Session</literal> instance. Certain methods of <literal>Session</literal> will <emphasis>not</emphasis> leave the session in a consistent state. No exception thrown by Hibernate can be treated as recoverable. Ensure that the <literal>Session</literal> will be closed by calling <literal>close()</literal> in a <literal>finally</literal> block."
+msgstr ""
+
+#: index.docbook:537
+msgid "The <literal>HibernateException</literal>, which wraps most of the errors that can occur in a Hibernate persistence layer, is an unchecked exception (it wasn't in older versions of Hibernate). In our opinion, we shouldn't 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 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 which are not a <literal>HibernateException</literal>. These are, again, not recoverable and appropriate action should be taken."
+msgstr ""
+
+#: index.docbook:549
+msgid "Hibernate wraps <literal>SQLException</literal>s thrown while interacting with the database in a <literal>JDBCException</literal>. In fact, Hibernate will attempt to convert the eexception into a more meningful subclass of <literal>JDBCException</literal>. The underlying <literal>SQLException</literal> is always available via <literal>JDBCException.getCause()</literal>. Hibernate converts the <literal>SQLException</literal> into an appropriate <literal>JDBCException</literal> subclass using the <literal>SQLExceptionConverter</literal> attached to the <literal>SessionFactory</literal>. By default, the <literal>SQLExceptionConverter</literal> is defined by the configured dialect; however, it is also possible to plug in a custom implementation (see the javadocs for the <literal>SQLExceptionConverterFactory</literal> class for details). The standard <literal>JDBCException</literal> subtypes are:"
+msgstr ""
+
+#: index.docbook:565
+msgid "<literal>JDBCConnectionException</literal> - indicates an error with the underlying JDBC communication."
+msgstr ""
+
+#: index.docbook:571
+msgid "<literal>SQLGrammarException</literal> - indicates a grammar or syntax problem with the issued SQL."
+msgstr ""
+
+#: index.docbook:577
+msgid "<literal>ConstraintViolationException</literal> - indicates some form of integrity constraint violation."
+msgstr ""
+
+#: index.docbook:583
+msgid "<literal>LockAcquisitionException</literal> - indicates an error acquiring a lock level necessary to perform the requested operation."
+msgstr ""
+
+#: index.docbook:589
+msgid "<literal>GenericJDBCException</literal> - a generic exception which did not fall into any of the other categories."
+msgstr ""
+
+#: index.docbook:599
+msgid "Transaction timeout"
+msgstr ""
+
+#: index.docbook:601
+msgid "One extremely 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 functioanlity is abstracted by the Hibernate <literal>Transaction</literal> object."
+msgstr ""
+
+#: index.docbook:614
+msgid ""
+ "<![CDATA[\n"
+ "Session sess = factory.openSession();\n"
+ "try {\n"
+ " //set transaction timeout to 3 seconds\n"
+ " sess.getTransaction().setTimeout(3);\n"
+ " sess.getTransaction().begin();\n"
+ "\n"
+ " // do some work\n"
+ " ...\n"
+ "\n"
+ " sess.getTransaction().commit()\n"
+ "}\n"
+ "catch (RuntimeException e) {\n"
+ " sess.getTransaction().rollback();\n"
+ " throw e; // or display error message\n"
+ "}\n"
+ "finally {\n"
+ " sess.close();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:616
+msgid "Note that <literal>setTimeout()</literal> may not be called in a CMT bean, where transaction timeouts must be defined declaratively."
+msgstr ""
+
+#: index.docbook:626
+msgid "Optimistic concurrency control"
+msgstr ""
+
+#: index.docbook:628
+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 for three possible approaches to writing application code that uses optimistic concurrency. The use cases we show are in the context of long conversations, but version checking also has the benefit of preventing lost updates in single database transactions."
+msgstr ""
+
+#: index.docbook:639
+msgid "Application version checking"
+msgstr ""
+
+#: index.docbook:641
+msgid "In an implementation without much help from Hibernate, each interaction with the database occurs in a new <literal>Session</literal> and the developer is responsible for reloading all persistent instances from the database before manipulating them. This approach forces the application 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 ""
+
+#: index.docbook:650
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "\n"
+ "int oldVersion = foo.getVersion();\n"
+ "session.load( foo, foo.getKey() ); // load the current state\n"
+ "if ( oldVersion != foo.getVersion() ) throw new StaleObjectStateException();\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:652
+msgid "The <literal>version</literal> property is mapped using <literal><version></literal>, and Hibernate will automatically increment it during flush if the entity is dirty."
+msgstr ""
+
+#: index.docbook:658
+msgid "Of course, if you are operating in a low-data-concurrency environment and don't require version checking, you may use this approach and just skip the version check. In that case, <emphasis>last commit wins</emphasis> will be the default strategy for your long conversations. Keep in mind 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 ""
+
+#: index.docbook:667
+msgid "Clearly, manual version checking is only feasible in very trivial circumstances and not practical for most applications. Often not only single instances, but complete graphs of modified ojects have to be checked. Hibernate offers automatic version checking with either an extended <literal>Session</literal> or detached instances as the design paradigm."
+msgstr ""
+
+#: index.docbook:678
+msgid "Extended session and automatic versioning"
+msgstr ""
+
+#: index.docbook:680
+msgid "A single <literal>Session</literal> instance and its persistent instances are used for the whole conversation, known as <emphasis>session-per-conversation</emphasis>. Hibernate checks instance versions at flush time, throwing an exception if concurrent modification is detected. It's 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 ""
+
+#: index.docbook:689
+msgid "The <literal>Session</literal> 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 need not concern itself with version checking or with reattaching detached instances, nor does it have to reload instances in every database transaction."
+msgstr ""
+
+#: index.docbook:697
+msgid ""
+ "<![CDATA[// foo is an instance loaded earlier by the old session\n"
+ "Transaction t = session.beginTransaction(); // Obtain a new JDBC connection, start transaction\n"
+ "\n"
+ "foo.setProperty(\"bar\");\n"
+ "\n"
+ "session.flush(); // Only for last transaction in conversation\n"
+ "t.commit(); // Also return JDBC connection\n"
+ "session.close(); // Only for last transaction in conversation]]>"
+msgstr ""
+
+#: index.docbook:698
+msgid "The <literal>foo</literal> object still knows which <literal>Session</literal> 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 aren't updating, you may call <literal>Session.lock()</literal> with <literal>LockMode.READ</literal> on any objects that might have been updated by another transaction. You don't need to lock any data that you <emphasis>are</emphasis> updating. Usually you would set <literal>FlushMode.MANUAL</literal> on an extended <literal>Session</literal>, so that only the last database transaction cycle is allowed to actually persist all modifications made in this conversation. Hence, only this last database transaction would include the <literal>flush()</literal> operation, and then also <literal>close()!
</literal> the session to end the conversation."
+msgstr ""
+
+#: index.docbook:713
+msgid "This pattern is problematic if the <literal>Session</literal> is too big to be stored during user think time, e.g. an <literal>HttpSession</literal> should be kept as small as possible. As the <literal>Session</literal> is also the (mandatory) first-level cache and contains all loaded objects, we can probably use this strategy only for a few request/response cycles. You should use a <literal>Session</literal> only for a single conversation, as it will soon also have stale data."
+msgstr ""
+
+#: index.docbook:723
+msgid "(Note that earlier Hibernate versions required explicit disconnection and reconnection of a <literal>Session</literal>. These methods are deprecated, as beginning and ending a transaction has the same effect.)"
+msgstr ""
+
+#: index.docbook:729
+msgid "Also note that you should keep the disconnected <literal>Session</literal> close to the persistence layer. In other words, use an EJB stateful session bean to hold the <literal>Session</literal> in a three-tier environment, and don't transfer it to the web layer (or even serialize it to a separate tier) to store it in the <literal>HttpSession</literal>."
+msgstr ""
+
+#: index.docbook:737
+msgid "The extended session pattern, or <emphasis>session-per-conversation</emphasis>, is more difficult to implement with automatic current session context management. You need to supply your own implementation of the <literal>CurrentSessionContext</literal> for this, see the Hibernate Wiki for examples."
+msgstr ""
+
+#: index.docbook:747
+msgid "Detached objects and automatic versioning"
+msgstr ""
+
+#: index.docbook:749
+msgid "Each interaction with the persistent store occurs in a new <literal>Session</literal>. However, the same persistent instances are reused for each interaction with the database. The application manipulates the state of detached instances originally loaded in another <literal>Session</literal> and then reattaches them using <literal>Session.update()</literal>, <literal>Session.saveOrUpdate()</literal>, or <literal>Session.merge()</literal>."
+msgstr ""
+
+#: index.docbook:757
+msgid ""
+ "<![CDATA[// foo is an instance loaded by a previous Session\n"
+ "foo.setProperty(\"bar\");\n"
+ "session = factory.openSession();\n"
+ "Transaction t = session.beginTransaction();\n"
+ "session.saveOrUpdate(foo); // Use merge() if \"foo\" might have been loaded already\n"
+ "t.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:759
+msgid "Again, Hibernate will check instance versions during flush, throwing an exception if conflicting updates occured."
+msgstr ""
+
+#: index.docbook:764
+msgid "You may also call <literal>lock()</literal> instead of <literal>update()</literal> and use <literal>LockMode.READ</literal> (performing a version check, bypassing all caches) if you are sure that the object has not been modified."
+msgstr ""
+
+#: index.docbook:773
+msgid "Customizing automatic versioning"
+msgstr ""
+
+#: index.docbook:775
+msgid "You may disable Hibernate's automatic version increment for particular properties and collections by setting the <literal>optimistic-lock</literal> mapping attribute to <literal>false</literal>. Hibernate will then no longer increment versions if the property is dirty."
+msgstr ""
+
+#: index.docbook:782
+msgid "Legacy database schemas are often static and can't be modified. Or, other applications might also access the same database and don't know how to handle version numbers or even timestamps. In both cases, versioning can't rely on a particular column in a table. To force a version check without a version or timestamp property mapping, with a comparison of the state of all fields in a row, turn on <literal>optimistic-lock=\"all\"</literal> in the <literal><class></literal> mapping. Note that this concepetually only works if Hibernate can compare the old and new state, i.e. if you use a single long <literal>Session</literal> and not session-per-request-with-detached-objects."
+msgstr ""
+
+#: index.docbook:793
+msgid "Sometimes concurrent modification can be permitted as long as the changes that have been made don't overlap. If you set <literal>optimistic-lock=\"dirty\"</literal> when mapping the <literal><class></literal>, Hibernate will only compare dirty fields during flush."
+msgstr ""
+
+#: index.docbook:799
+msgid "In both cases, with dedicated version/timestamp columns or with full/dirty field comparison, Hibernate uses a single <literal>UPDATE</literal> statement (with an appropriate <literal>WHERE</literal> clause) per entity to execute the version check and update the information. If you use transitive persistence to cascade reattachment to associated entities, Hibernate might execute uneccessary updates. This is usually not a problem, but <emphasis>on update</emphasis> 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\"</literal> in the <literal><class></literal> mapping, forcing Hibernate to <literal>SELECT</literal> the instance to ensure that changes did actually occur, before updating the row."
+msgstr ""
+
+#: index.docbook:817
+msgid "Pessimistic Locking"
+msgstr ""
+
+#: index.docbook:819
+msgid "It is not intended that users spend much time worring about locking strategies. Its 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 sometimes wish to obtain exclusive pessimistic locks, or re-obtain locks at the start of a new transaction."
+msgstr ""
+
+#: index.docbook:826
+msgid "Hibernate will always use the locking mechanism of the database, never lock objects in memory!"
+msgstr ""
+
+#: index.docbook:831
+msgid "The <literal>LockMode</literal> class defines the different lock levels that may be acquired by Hibernate. A lock is obtained by the following mechanisms:"
+msgstr ""
+
+#: index.docbook:838
+msgid "<literal>LockMode.WRITE</literal> is acquired automatically when Hibernate updates or inserts a row."
+msgstr ""
+
+#: index.docbook:844
+msgid "<literal>LockMode.UPGRADE</literal> may be acquired upon explicit user request using <literal>SELECT ... FOR UPDATE</literal> on databases which support that syntax."
+msgstr ""
+
+#: index.docbook:850
+msgid "<literal>LockMode.UPGRADE_NOWAIT</literal> may be acquired upon explicit user request using a <literal>SELECT ... FOR UPDATE NOWAIT</literal> under Oracle."
+msgstr ""
+
+#: index.docbook:856
+msgid "<literal>LockMode.READ</literal> is acquired automatically when Hibernate reads data under Repeatable Read or Serializable isolation level. May be re-acquired by explicit user request."
+msgstr ""
+
+#: index.docbook:863
+msgid "<literal>LockMode.NONE</literal> represents the absence of a lock. All objects switch to this lock mode at the end of a <literal>Transaction</literal>. Objects associated with the session via a call to <literal>update()</literal> or <literal>saveOrUpdate()</literal> also start out in this lock mode."
+msgstr ""
+
+#: index.docbook:872
+msgid "The \"explicit user request\" is expressed in one of the following ways:"
+msgstr ""
+
+#: index.docbook:878
+msgid "A call to <literal>Session.load()</literal>, specifying a <literal>LockMode</literal>."
+msgstr ""
+
+#: index.docbook:883
+msgid "A call to <literal>Session.lock()</literal>."
+msgstr ""
+
+#: index.docbook:888
+msgid "A call to <literal>Query.setLockMode()</literal>."
+msgstr ""
+
+#: index.docbook:894
+msgid "If <literal>Session.load()</literal> is called with <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, and the requested object was not yet loaded by the session, the object is loaded using <literal>SELECT ... FOR UPDATE</literal>. If <literal>load()</literal> is called for an object that is already loaded with a less restrictive lock than the one requested, Hibernate calls <literal>lock()</literal> for that object."
+msgstr ""
+
+#: index.docbook:903
+msgid "<literal>Session.lock()</literal> performs a version number check if the specified lock mode is <literal>READ</literal>, <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>. (In the case of <literal>UPGRADE</literal> or <literal>UPGRADE_NOWAIT</literal>, <literal>SELECT ... FOR UPDATE</literal> is used.)"
+msgstr ""
+
+#: index.docbook:910
+msgid "If the database does not support the requested lock mode, Hibernate will use an appropriate alternate mode (instead of throwing an exception). This ensures that applications will be portable."
+msgstr ""
+
+#: index.docbook:919
+msgid "Connection Release Modes"
+msgstr ""
+
+#: index.docbook:921
+msgid "The legacy (2.x) behavior of Hibernate in regards to JDBC connection management was that a <literal>Session</literal> would obtain a connection when it was first needed and then hold unto that connection until the session was closed. Hibernate 3.x introduced the notion of connection release modes to tell a session how to handle its JDBC connections. Note that the following discussion is pertinent only to connections provided through a configured <literal>ConnectionProvider</literal>; 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</literal>:"
+msgstr ""
+
+#: index.docbook:935
+msgid "<literal>ON_CLOSE</literal> - is essentially the legacy behavior described above. The Hibernate session obatins a connection when it first needs to perform some JDBC access and holds unto that connection until the session is closed."
+msgstr ""
+
+#: index.docbook:942
+msgid "<literal>AFTER_TRANSACTION</literal> - says to release connections after a <literal>org.hibernate.Transaction</literal> has completed."
+msgstr ""
+
+#: index.docbook:948
+msgid "<literal>AFTER_STATEMENT</literal> (also referred to as aggressive release) - says to release connections after each and 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</literal>."
+msgstr ""
+
+#: index.docbook:958
+msgid "The configuration parameter <literal>hibernate.connection.release_mode</literal> is used to specify which release mode to use. The possible values:"
+msgstr ""
+
+#: index.docbook:965
+msgid "<literal>auto</literal> (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. It is rarely a good idea to 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 ""
+
+#: index.docbook:975
+msgid "<literal>on_close</literal> - says to use ConnectionReleaseMode.ON_CLOSE. This setting is left for backwards compatibility, but its use is highly discouraged."
+msgstr ""
+
+#: index.docbook:981
+msgid "<literal>after_transaction</literal> - says to use 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 ""
+
+#: index.docbook:989
+msgid "<literal>after_statement</literal> - says to use ConnectionReleaseMode.AFTER_STATEMENT. Additionally, the configured <literal>ConnectionProvider</literal> is consulted to see if it supports this setting (<literal>supportsAggressiveRelease()</literal>). 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 we make a call into <literal>ConnectionProvider.getConnection()</literal> or in auto-commit environments where it does not matter whether we get back the same connection."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/tutorial.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/tutorial.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/tutorial.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,1315 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:7
+msgid "Introduction to Hibernate"
+msgstr ""
+
+#: index.docbook:10
+msgid "Preface"
+msgstr ""
+
+#: index.docbook:12
+msgid "This chapter is an introductory tutorial for new users of Hibernate. We start with a simple command line application using an in-memory database and develop it in easy to understand steps."
+msgstr ""
+
+#: index.docbook:18
+msgid "This tutorial is intended for new users of Hibernate but requires Java and SQL knowledge. It is based on a tutorial by Michael Gloegl, the third-party libraries we name are for JDK 1.4 and 5.0. You might need others for JDK 1.3."
+msgstr ""
+
+#: index.docbook:24
+msgid "The source code for the tutorial is included in the distribution in the <literal>doc/reference/tutorial/</literal> directory."
+msgstr ""
+
+#: index.docbook:32
+msgid "Part 1 - The first Hibernate Application"
+msgstr ""
+
+#: index.docbook:34
+msgid "First, we'll create a simple console-based Hibernate application. We use an Java database (HSQL DB), so we do not have to install any database server."
+msgstr ""
+
+#: index.docbook:39
+msgid "Let's assume we need a small database application that can store events we want to attend, and information about the hosts of these events."
+msgstr ""
+
+#: index.docbook:44
+msgid "The first thing we do, is set up our development directory and put all the Java libraries we need into it. Download the Hibernate distribution from the Hibernate website. Extract the package and place all required libraries found in <literal>/lib</literal> into into the <literal>/lib</literal> directory of your new development working directory. It should look like this:"
+msgstr ""
+
+#: index.docbook:52
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " antlr.jar\n"
+ " cglib.jar\n"
+ " asm.jar\n"
+ " asm-attrs.jars\n"
+ " commons-collections.jar\n"
+ " commons-logging.jar\n"
+ " hibernate3.jar\n"
+ " jta.jar\n"
+ " dom4j.jar\n"
+ " log4j.jar ]]>"
+msgstr ""
+
+#: index.docbook:54
+msgid "This is the minimum set of required libraries (note that we also copied hibernate3.jar, the main archive) for Hibernate <emphasis>at the time of writing</emphasis>. The Hibernate release you are using might require more or less libraries. See the <literal>README.txt</literal> file in the <literal>lib/</literal> directory of the Hibernate distribution for more information about required and optional third-party libraries. (Actually, Log4j is not required but preferred by many developers.)"
+msgstr ""
+
+#: index.docbook:63
+msgid "Next we create a class that represents the event we want to store in database."
+msgstr ""
+
+#: index.docbook:68
+msgid "The first class"
+msgstr ""
+
+#: index.docbook:70
+msgid "Our first persistent class is a simple JavaBean class with some properties:"
+msgstr ""
+
+#: index.docbook:74
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "public class Event {\n"
+ " private Long id;\n"
+ "\n"
+ " private String title;\n"
+ " private Date date;\n"
+ "\n"
+ " public Event() {}\n"
+ "\n"
+ " public Long getId() {\n"
+ " return id;\n"
+ " }\n"
+ "\n"
+ " private void setId(Long id) {\n"
+ " this.id = id;\n"
+ " }\n"
+ "\n"
+ " public Date getDate() {\n"
+ " return date;\n"
+ " }\n"
+ "\n"
+ " public void setDate(Date date) {\n"
+ " this.date = date;\n"
+ " }\n"
+ "\n"
+ " public String getTitle() {\n"
+ " return title;\n"
+ " }\n"
+ "\n"
+ " public void setTitle(String title) {\n"
+ " this.title = title;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:76
+msgid "You can see that this class uses standard JavaBean naming conventions for property getter and setter methods, as well as private visibility for the fields. This is a recommended design - but not required. Hibernate can also access fields directly, the benefit of accessor methods is robustness for refactoring. The no-argument constructor is required to instantiate an object of this class through reflection."
+msgstr ""
+
+#: index.docbook:84
+msgid "The <literal>id</literal> property holds a unique identifier value for a particular event. All persistent entity classes (there are less important dependent classes as well) will need such an identifier property if we want to use the full feature set of Hibernate. In fact, most applications (esp. web applications) need to distinguish objects by identifier, so you should consider this a feature rather than a limitation. However, we usually don't manipulate the identity of an object, hence the setter method should be private. Only Hibernate will assign identifiers when an object is saved. You can see that Hibernate can access public, private, and protected accessor methods, as well as (public, private, protected) fields directly. The choice is up to you and you can match it to fit your application design."
+msgstr ""
+
+#: index.docbook:96
+msgid "The no-argument constructor is a requirement for all persistent classes; Hibernate has to create objects for you, using Java Reflection. The constructor can be private, however, package visibility is required for runtime proxy generation and efficient data retrieval without bytecode instrumentation."
+msgstr ""
+
+#: index.docbook:103
+msgid "Place this Java source file in a directory called <literal>src</literal> in the development folder, and in its correct package. The directory should now look like this:"
+msgstr ""
+
+#: index.docbook:108
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java]]>"
+msgstr ""
+
+#: index.docbook:110
+msgid "In the next step, we tell Hibernate about this persistent class."
+msgstr ""
+
+#: index.docbook:117
+msgid "The mapping file"
+msgstr ""
+
+#: index.docbook:119
+msgid "Hibernate needs to know how to load and store objects of the persistent class. This is where the Hibernate mapping file comes into play. The mapping file tells Hibernate what table in the database it has to access, and what columns in that table it should use."
+msgstr ""
+
+#: index.docbook:126
+msgid "The basic structure of a mapping file looks like this:"
+msgstr ""
+
+#: index.docbook:130
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\"?>\n"
+ "<!DOCTYPE hibernate-mapping PUBLIC\n"
+ " \"-//Hibernate/Hibernate Mapping DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-mapping>\n"
+ "[...]\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:132
+msgid "Note that the Hibernate DTD is very sophisticated. You can use it for auto-completion of XML mapping elements and attributes in your editor or IDE. You also should open up the DTD file in your text editor - it's the easiest way to get an overview of all elements and attributes and to see the defaults, as well as some comments. Note that Hibernate will not load the DTD file from the web, but first look it up from the classpath of the application. The DTD file is included in <literal>hibernate3.jar</literal> as well as in the <literal>src/</literal> directory of the Hibernate distribution."
+msgstr ""
+
+#: index.docbook:143
+msgid "We will omit the DTD declaration in future examples to shorten the code. It is of course not optional."
+msgstr ""
+
+#: index.docbook:148
+msgid "Between the two <literal>hibernate-mapping</literal> tags, include a <literal>class</literal> element. All persistent entity classes (again, there might be dependent classes later on, which are not first-class entities) need such a mapping, to a table in the SQL database:"
+msgstr ""
+
+#: index.docbook:155
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ "\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:157
+msgid "So far we told Hibernate how to persist and load object of class <literal>Event</literal> to the table <literal>EVENTS</literal>, each instance represented by a row in that table. Now we continue with a mapping of the unique identifier property to the tables primary key. In addition, as we don't want to care about handling this identifier, we configure Hibernate's identifier generation strategy for a surrogate primary key column:"
+msgstr ""
+
+#: index.docbook:165
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:167
+msgid "The <literal>id</literal> element is the declaration of the identifer property, <literal>name=\"id\"</literal> declares the name of the Java property - Hibernate will use the getter and setter methods to access the property. The column attribute tells Hibernate which column of the <literal>EVENTS</literal> table we use for this primary key. The nested <literal>generator</literal> element specifies the identifier generation strategy, in this case we used <literal>native</literal>, which picks the best strategy depending on the configured database (dialect). Hibernate supports database generated, globally unique, as well as application assigned identifiers (or any strategy you have written an extension for)."
+msgstr ""
+
+#: index.docbook:180
+msgid "Finally we include declarations for the persistent properties of the class in the mapping file. By default, no properties of the class are considered persistent:"
+msgstr ""
+
+#: index.docbook:186
+msgid ""
+ "<![CDATA[\n"
+ "<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Event\" table=\"EVENTS\">\n"
+ " <id name=\"id\" column=\"EVENT_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"date\" type=\"timestamp\" column=\"EVENT_DATE\"/>\n"
+ " <property name=\"title\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:188
+msgid "Just as with the <literal>id</literal> element, the <literal>name</literal> attribute of the <literal>property</literal> element tells Hibernate which getter and setter methods to use. So, in this case, Hibernate will look for <literal>getDate()/setDate()</literal>, as well as <literal>getTitle()/setTitle()</literal>."
+msgstr ""
+
+#: index.docbook:195
+msgid "Why does the <literal>date</literal> property mapping include the <literal>column</literal> attribute, but the <literal>title</literal> doesn't? Without the <literal>column</literal> attribute Hibernate by default uses the property name as the column name. This works fine for <literal>title</literal>. However, <literal>date</literal> is a reserved keyword in most database, so we better map it to a different name."
+msgstr ""
+
+#: index.docbook:204
+msgid "The next interesting thing is that the <literal>title</literal> mapping also lacks a <literal>type</literal> attribute. The types we declare and use in the mapping files are not, as you might expect, Java data types. They are also not SQL database types. These types are so called <emphasis>Hibernate mapping types</emphasis>, converters which can translate from Java to SQL data types and vice versa. Again, Hibernate will try to determine the correct conversion and mapping type itself if the <literal>type</literal> attribute is not present in the mapping. In some cases this automatic detection (using Reflection on the Java class) might not have the default you expect or need. This is the case with the <literal>date</literal> property. Hibernate can't know if the property (which is of <literal>java.util.Date</literal>) should map to a SQL <literal>date</literal>, <literal>timestamp</literal>, or <literal>time</literal> column. We preserve full date and time information !
by mapping the property with a <literal>timestamp</literal> converter."
+msgstr ""
+
+#: index.docbook:220
+msgid "This mapping file should be saved as <literal>Event.hbm.xml</literal>, right in the directory next to the <literal>Event</literal> Java class source file. The naming of mapping files can be arbitrary, however the <literal>hbm.xml</literal> suffix is a convention in the Hibernate developer community. The directory structure should now look like this:"
+msgstr ""
+
+#: index.docbook:228
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml]]>"
+msgstr ""
+
+#: index.docbook:230
+msgid "We continue with the main configuration of Hibernate."
+msgstr ""
+
+#: index.docbook:237
+msgid "Hibernate configuration"
+msgstr ""
+
+#: index.docbook:239
+msgid "We now have a persistent class and its mapping file in place. It is time to configure Hibernate. Before we do this, we will need a database. HSQL DB, a java-based SQL DBMS, can be downloaded from the HSQL DB website(http://hsqldb.org/). Actually, you only need the <literal>hsqldb.jar</literal> from this download. Place this file in the <literal>lib/</literal> directory of the development folder."
+msgstr ""
+
+#: index.docbook:247
+msgid "Create a directory called <literal>data</literal> in the root of the development directory - this is where HSQL DB will store its data files. Now start the database by running <literal>java -classpath ../lib/hsqldb.jar org.hsqldb.Server</literal> in this data directory. You can see it start up and bind to a TCP/IP socket, this is where our application will connect later. If you want to start with a fresh database during this tutorial, shutdown HSQL DB (press <literal>CTRL + C</literal> in the window), delete all files in the <literal>data/</literal> directory, and start HSQL DB again."
+msgstr ""
+
+#: index.docbook:257
+msgid "Hibernate is the layer in your application which connects to this database, so it needs connection information. The connections are made through a JDBC connection pool, which we also have to configure. The Hibernate distribution contains several open source JDBC connection pooling tools, but will use the Hibernate built-in connection pool for this tutorial. Note that you have to copy the required library into your classpath and use different connection pooling settings if you want to use a production-quality third party JDBC pooling software."
+msgstr ""
+
+#: index.docbook:267
+msgid "For Hibernate's configuration, we can use a simple <literal>hibernate.properties</literal> file, a slightly more sophisticated <literal>hibernate.cfg.xml</literal> file, or even complete programmatic setup. Most users prefer the XML configuration file:"
+msgstr ""
+
+#: index.docbook:273
+msgid ""
+ "<![CDATA[<?xml version='1.0' encoding='utf-8'?>\n"
+ "<!DOCTYPE hibernate-configuration PUBLIC\n"
+ " \"-//Hibernate/Hibernate Configuration DTD 3.0//EN\"\n"
+ " \"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd\">\n"
+ "\n"
+ "<hibernate-configuration>\n"
+ "\n"
+ " <session-factory>\n"
+ "\n"
+ " <!-- Database connection settings -->\n"
+ " <property name=\"connection.driver_class\">org.hsqldb.jdbcDriver</property>\n"
+ " <property name=\"connection.url\">jdbc:hsqldb:hsql://localhost</property>\n"
+ " <property name=\"connection.username\">sa</property>\n"
+ " <property name=\"connection.password\"></property>\n"
+ "\n"
+ " <!-- JDBC connection pool (use the built-in) -->\n"
+ " <property name=\"connection.pool_size\">1</property>\n"
+ "\n"
+ " <!-- SQL dialect -->\n"
+ " <property name=\"dialect\">org.hibernate.dialect.HSQLDialect</property>\n"
+ "\n"
+ " <!-- Enable Hibernate's automatic session context management -->\n"
+ " <property name=\"current_session_context_class\">thread</property>\n"
+ "\n"
+ " <!-- Disable the second-level cache -->\n"
+ " <property name=\"cache.provider_class\">org.hibernate.cache.NoCacheProvider</property>\n"
+ "\n"
+ " <!-- Echo all executed SQL to stdout -->\n"
+ " <property name=\"show_sql\">true</property>\n"
+ "\n"
+ " <!-- Drop and re-create the database schema on startup -->\n"
+ " <property name=\"hbm2ddl.auto\">create</property>\n"
+ "\n"
+ " <mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "\n"
+ " </session-factory>\n"
+ "\n"
+ "</hibernate-configuration>]]>"
+msgstr ""
+
+#: index.docbook:275
+msgid "Note that this XML configuration uses a different DTD. We configure Hibernate's <literal>SessionFactory</literal> - a global factory responsible for a particular database. If you have several databases, use several <literal><session-factory></literal> configurations, usually in several configuration files (for easier startup)."
+msgstr ""
+
+#: index.docbook:283
+msgid "The first four <literal>property</literal> elements contain the necessary configuration for the JDBC connection. The dialect <literal>property</literal> element specifies the particular SQL variant Hibernate generates. Hibernate's automatic session management for persistence contexts will come in handy as you will soon see. The <literal>hbm2ddl.auto</literal> option turns on automatic generation of database schemas - directly into the database. This can of course also be turned off (by removing the config option) or redirected to a file with the help of the <literal>SchemaExport</literal> Ant task. Finally, we add the mapping file(s) for persistent classes to the configuration."
+msgstr ""
+
+#: index.docbook:296
+msgid "Copy this file into the source directory, so it will end up in the root of the classpath. Hibernate automatically looks for a file called <literal>hibernate.cfg.xml</literal> in the root of the classpath, on startup."
+msgstr ""
+
+#: index.docbook:305
+msgid "Building with Ant"
+msgstr ""
+
+#: index.docbook:307
+msgid "We'll now build the tutorial with Ant. You will need to have Ant installed - get it from the <ulink url=\"http://ant.apache.org/bindownload.cgi\">Ant download page</ulink>. How to install Ant will not be covered here. Please refer to the <ulink url=\"http://ant.apache.org/manual/index.html\">Ant manual</ulink>. After you have installed Ant, we can start to create the buildfile. It will be called <literal>build.xml</literal> and placed directly in the development directory."
+msgstr ""
+
+#: index.docbook:316
+msgid "A basic build file looks like this:"
+msgstr ""
+
+#: index.docbook:320
+msgid ""
+ "<![CDATA[<project name=\"hibernate-tutorial\" default=\"compile\">\n"
+ "\n"
+ " <property name=\"sourcedir\" value=\"${basedir}/src\"/>\n"
+ " <property name=\"targetdir\" value=\"${basedir}/bin\"/>\n"
+ " <property name=\"librarydir\" value=\"${basedir}/lib\"/>\n"
+ "\n"
+ " <path id=\"libraries\">\n"
+ " <fileset dir=\"${librarydir}\">\n"
+ " <include name=\"*.jar\"/>\n"
+ " </fileset>\n"
+ " </path>\n"
+ "\n"
+ " <target name=\"clean\">\n"
+ " <delete dir=\"${targetdir}\"/>\n"
+ " <mkdir dir=\"${targetdir}\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"compile\" depends=\"clean, copy-resources\">\n"
+ " <javac srcdir=\"${sourcedir}\"\n"
+ " destdir=\"${targetdir}\"\n"
+ " classpathref=\"libraries\"/>\n"
+ " </target>\n"
+ "\n"
+ " <target name=\"copy-resources\">\n"
+ " <copy todir=\"${targetdir}\">\n"
+ " <fileset dir=\"${sourcedir}\">\n"
+ " <exclude name=\"**/*.java\"/>\n"
+ " </fileset>\n"
+ " </copy>\n"
+ " </target>\n"
+ "\n"
+ "</project>]]>"
+msgstr ""
+
+#: index.docbook:322
+msgid "This will tell Ant to add all files in the lib directory ending with <literal>.jar</literal> to the classpath used for compilation. It will also copy all non-Java source files to the target directory, e.g. configuration and Hibernate mapping files. If you now run Ant, you should get this output:"
+msgstr ""
+
+#: index.docbook:329
+msgid ""
+ "<![CDATA[C:\\hibernateTutorial\\>ant\n"
+ "Buildfile: build.xml\n"
+ "\n"
+ "copy-resources:\n"
+ " [copy] Copying 2 files to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "compile:\n"
+ " [javac] Compiling 1 source file to C:\\hibernateTutorial\\bin\n"
+ "\n"
+ "BUILD SUCCESSFUL\n"
+ "Total time: 1 second ]]>"
+msgstr ""
+
+#: index.docbook:334
+msgid "Startup and helpers"
+msgstr ""
+
+#: index.docbook:336
+msgid "It's time to load and store some <literal>Event</literal> objects, but first we have to complete the setup with some infrastructure code. We have to startup Hibernate. This startup includes building a global <literal>SessionFactory</literal> object and to store it somewhere for easy access in application code. A <literal>SessionFactory</literal> can open up new <literal>Session</literal>'s. A <literal>Session</literal> represents a single-threaded unit of work, the <literal>SessionFactory</literal> is a thread-safe global object, instantiated once."
+msgstr ""
+
+#: index.docbook:346
+msgid "We'll create a <literal>HibernateUtil</literal> helper class which takes care of startup and makes accessing a <literal>SessionFactory</literal> convenient. Let's have a look at the implementation:"
+msgstr ""
+
+#: index.docbook:352
+msgid ""
+ "<![CDATA[package util;\n"
+ "\n"
+ "import org.hibernate.*;\n"
+ "import org.hibernate.cfg.*;\n"
+ "\n"
+ "public class HibernateUtil {\n"
+ "\n"
+ " private static final SessionFactory sessionFactory;\n"
+ "\n"
+ " static {\n"
+ " try {\n"
+ " // Create the SessionFactory from hibernate.cfg.xml\n"
+ " sessionFactory = new Configuration().configure().buildSessionFactory();\n"
+ " } catch (Throwable ex) {\n"
+ " // Make sure you log the exception, as it might be swallowed\n"
+ " System.err.println(\"Initial SessionFactory creation failed.\" + ex);\n"
+ " throw new ExceptionInInitializerError(ex);\n"
+ " }\n"
+ " }\n"
+ "\n"
+ " public static SessionFactory getSessionFactory() {\n"
+ " return sessionFactory;\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:354
+msgid "This class does not only produce the global <literal>SessionFactory</literal> in its static initializer (called once by the JVM when the class is loaded), but also hides the fact that it uses a static singleton. It might as well lookup the <literal>SessionFactory</literal> from JNDI in an application server."
+msgstr ""
+
+#: index.docbook:361
+msgid "If you give the <literal>SessionFactory</literal> a name in your configuration file, Hibernate will in fact try to bind it to JNDI after it has been built. To avoid this code completely you could also use JMX deployment and let the JMX-capable container instantiate and bind a <literal>HibernateService</literal> to JNDI. These advanced options are discussed in the Hibernate reference documentation."
+msgstr ""
+
+#: index.docbook:370
+msgid "Place <literal>HibernateUtil.java</literal> in the development source directory, in a package next to <literal>events</literal>:"
+msgstr ""
+
+#: index.docbook:375
+msgid ""
+ "<![CDATA[.\n"
+ "+lib\n"
+ " <Hibernate and third-party libraries>\n"
+ "+src\n"
+ " +events\n"
+ " Event.java\n"
+ " Event.hbm.xml\n"
+ " +util\n"
+ " HibernateUtil.java\n"
+ " hibernate.cfg.xml\n"
+ "+data\n"
+ "build.xml]]>"
+msgstr ""
+
+#: index.docbook:377
+msgid "This should again compile without problems. We finally need to configure a logging system - Hibernate uses commons logging and leaves you the choice between Log4j and JDK 1.4 logging. Most developers prefer Log4j: copy <literal>log4j.properties</literal> from the Hibernate distribution (it's in the <literal>etc/</literal> directory) to your <literal>src</literal> directory, next to <literal>hibernate.cfg.xml</literal>. Have a look at the example configuration and change the settings if you like to have more verbose output. By default, only Hibernate startup message are shown on stdout."
+msgstr ""
+
+#: index.docbook:387
+msgid "The tutorial infrastructure is complete - and we are ready to do some real work with Hibernate."
+msgstr ""
+
+#: index.docbook:395
+msgid "Loading and storing objects"
+msgstr ""
+
+#: index.docbook:397
+msgid "Finally, we can use Hibernate to load and store objects. We write an <literal>EventManager</literal> class with a <literal>main()</literal> method:"
+msgstr ""
+
+#: index.docbook:402
+msgid ""
+ "<![CDATA[package events;\n"
+ "import org.hibernate.Session;\n"
+ "\n"
+ "import java.util.Date;\n"
+ "\n"
+ "import util.HibernateUtil;\n"
+ "\n"
+ "public class EventManager {\n"
+ "\n"
+ " public static void main(String[] args) {\n"
+ " EventManager mgr = new EventManager();\n"
+ "\n"
+ " if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " }\n"
+ "\n"
+ " HibernateUtil.getSessionFactory().close();\n"
+ " }\n"
+ "\n"
+ " private void createAndStoreEvent(String title, Date theDate) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " session.save(theEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:404
+msgid "We create a new <literal>Event</literal> object, and hand it over to Hibernate. Hibernate now takes care of the SQL and executes <literal>INSERT</literal>s on the database. Let's have a look at the <literal>Session</literal> and <literal>Transaction</literal>-handling code before we run this."
+msgstr ""
+
+#: index.docbook:411
+msgid "A <literal>Session</literal> is a single unit of work. For now we'll keep things simple and assume a one-to-one granularity between a Hibernate <literal>Session</literal> and a database transaction. To shield our code from the actual underlying transaction system (in this case plain JDBC, but it could also run with JTA) we use the <literal>Transaction</literal> API that is available on the Hibernate <literal>Session</literal>."
+msgstr ""
+
+#: index.docbook:419
+msgid "What does <literal>sessionFactory.getCurrentSession()</literal> do? First, you can call it as many times and anywhere you like, once you get hold of your <literal>SessionFactory</literal> (easy thanks to <literal>HibernateUtil</literal>). The <literal>getCurrentSession()</literal> method always returns the \"current\" unit of work. Remember that we switched the configuration option for this mechanism to \"thread\" in <literal>hibernate.cfg.xml</literal>? Hence, the current unit of work is bound to the current Java thread that executes our application. However, this is not the full picture, you also have to consider scope, when a unit of work begins and when it ends."
+msgstr ""
+
+#: index.docbook:430
+msgid "A <literal>Session</literal> begins when it is first needed, when the first call to <literal>getCurrentSession()</literal> is made. It is then bound by Hibernate to the current thread. When the transaction ends, either through commit or rollback, Hibernate automatically unbinds the <literal>Session</literal> from the thread and closes it for you. If you call <literal>getCurrentSession()</literal> again, you get a new <literal>Session</literal> and can start a new unit of work. This <emphasis>thread-bound</emphasis> programming model is the most popular way of using Hibernate, as it allows flexible layering of your code (transaction demarcation code can be separated from data access code, we'll do this later in this tutorial)."
+msgstr ""
+
+#: index.docbook:441
+msgid "Related to the unit of work scope, should the Hibernate <literal>Session</literal> be used to execute one or several database operations? The above example uses one <literal>Session</literal> for one operation. This is pure coincidence, the example is just not complex enough to show any other approach. The scope of a Hibernate <literal>Session</literal> is flexible but you should never design your application to use a new Hibernate <literal>Session</literal> for <emphasis>every</emphasis> database operation. So even if you see it a few more times in the following (very trivial) examples, consider <emphasis>session-per-operation</emphasis> an anti-pattern. A real (web) application is shown later in this tutorial."
+msgstr ""
+
+#: index.docbook:452
+msgid "Have a look at <xref linkend=\"transactions\"/> for more information about transaction handling and demarcation. We also skipped any error handling and rollback in the previous example."
+msgstr ""
+
+#: index.docbook:458
+msgid "To run this first routine we have to add a callable target to the Ant build file:"
+msgstr ""
+
+#: index.docbook:462
+msgid ""
+ "<![CDATA[<target name=\"run\" depends=\"compile\">\n"
+ " <java fork=\"true\" classname=\"events.EventManager\" classpathref=\"libraries\">\n"
+ " <classpath path=\"${targetdir}\"/>\n"
+ " <arg value=\"${action}\"/>\n"
+ " </java>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:464
+msgid "The value of the <literal>action</literal> argument is set on the command line when calling the target:"
+msgstr ""
+
+#: index.docbook:469
+msgid "<![CDATA[C:\\hibernateTutorial\\>ant run -Daction=store]]>"
+msgstr ""
+
+#: index.docbook:471
+msgid "You should see, after compilation, Hibernate starting up and, depending on your configuration, lots of log output. At the end you will find the following line:"
+msgstr ""
+
+#: index.docbook:476
+msgid "<![CDATA[[java] Hibernate: insert into EVENTS (EVENT_DATE, title, EVENT_ID) values (?, ?, ?)]]>"
+msgstr ""
+
+#: index.docbook:478
+msgid "This is the <literal>INSERT</literal> executed by Hibernate, the question marks represent JDBC bind parameters. To see the values bound as arguments, or to reduce the verbosity of the log, check your <literal>log4j.properties</literal>."
+msgstr ""
+
+#: index.docbook:484
+msgid "Now we'd like to list stored events as well, so we add an option to the main method:"
+msgstr ""
+
+#: index.docbook:488
+msgid ""
+ "<![CDATA[if (args[0].equals(\"store\")) {\n"
+ " mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ "}\n"
+ "else if (args[0].equals(\"list\")) {\n"
+ " List events = mgr.listEvents();\n"
+ " for (int i = 0; i < events.size(); i++) {\n"
+ " Event theEvent = (Event) events.get(i);\n"
+ " System.out.println(\"Event: \" + theEvent.getTitle() +\n"
+ " \" Time: \" + theEvent.getDate());\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:490
+msgid "We also add a new <literal>listEvents() method</literal>:"
+msgstr ""
+
+#: index.docbook:494
+msgid ""
+ "<![CDATA[private List listEvents() {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ "\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " List result = session.createQuery(\"from Event\").list();\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " return result;\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:496
+msgid "What we do here is use an HQL (Hibernate Query Language) query to load all existing <literal>Event</literal> objects from the database. Hibernate will generate the appropriate SQL, send it to the database and populate <literal>Event</literal> objects with the data. You can create more complex queries with HQL, of course."
+msgstr ""
+
+#: index.docbook:503
+msgid "Now, to execute and test all of this, follow these steps:"
+msgstr ""
+
+#: index.docbook:509
+msgid "Run <literal>ant run -Daction=store</literal> to store something into the database and, of course, to generate the database schema before through hbm2ddl."
+msgstr ""
+
+#: index.docbook:515
+msgid "Now disable hbm2ddl by commenting out the property in your <literal>hibernate.cfg.xml</literal> file. Usually you only leave it turned on in continous unit testing, but another run of hbm2ddl would <emphasis>drop</emphasis> everything you have stored - the <literal>create</literal> configuration setting actually translates into \"drop all tables from the schema, then re-create all tables, when the SessionFactory is build\"."
+msgstr ""
+
+#: index.docbook:525
+msgid "If you now call Ant with <literal>-Daction=list</literal>, you should see the events you have stored so far. You can of course also call the <literal>store</literal> action a few times more."
+msgstr ""
+
+#: index.docbook:531
+msgid "Note: Most new Hibernate users fail at this point and we see questions about <emphasis>Table not found</emphasis> error messages regularly. However, if you follow the steps outlined above you will not have this problem, as hbm2ddl creates the database schema on the first run, and subsequent application restarts will use this schema. If you change the mapping and/or database schema, you have to re-enable hbm2ddl once again."
+msgstr ""
+
+#: index.docbook:544
+msgid "Part 2 - Mapping associations"
+msgstr ""
+
+#: index.docbook:546
+msgid "We mapped a persistent entity class to a table. Let's build on this and add some class associations. First we'll add people to our application, and store a list of events they participate in."
+msgstr ""
+
+#: index.docbook:552
+msgid "Mapping the Person class"
+msgstr ""
+
+#: index.docbook:554
+msgid "The first cut of the <literal>Person</literal> class is simple:"
+msgstr ""
+
+#: index.docbook:558
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "public class Person {\n"
+ "\n"
+ " private Long id;\n"
+ " private int age;\n"
+ " private String firstname;\n"
+ " private String lastname;\n"
+ "\n"
+ " public Person() {}\n"
+ "\n"
+ " // Accessor methods for all properties, private setter for 'id'\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:560
+msgid "Create a new mapping file called <literal>Person.hbm.xml</literal> (don't forget the DTD reference at the top):"
+msgstr ""
+
+#: index.docbook:565
+msgid ""
+ "<![CDATA[<hibernate-mapping>\n"
+ "\n"
+ " <class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ " </class>\n"
+ "\n"
+ "</hibernate-mapping>]]>"
+msgstr ""
+
+#: index.docbook:567
+msgid "Finally, add the new mapping to Hibernate's configuration:"
+msgstr ""
+
+#: index.docbook:571
+msgid ""
+ "<![CDATA[<mapping resource=\"events/Event.hbm.xml\"/>\n"
+ "<mapping resource=\"events/Person.hbm.xml\"/>]]>"
+msgstr ""
+
+#: index.docbook:573
+msgid "We'll now create an association between these two entities. Obviously, persons can participate in events, and events have participants. The design questions we have to deal with are: directionality, multiplicity, and collection behavior."
+msgstr ""
+
+#: index.docbook:583
+msgid "A unidirectional Set-based association"
+msgstr ""
+
+#: index.docbook:585
+msgid "We'll add a collection of events to the <literal>Person</literal> class. That way we can easily navigate to the events for a particular person, without executing an explicit query - by calling <literal>aPerson.getEvents()</literal>. We use a Java collection, a <literal>Set</literal>, because the collection will not contain duplicate elements and the ordering is not relevant for us."
+msgstr ""
+
+#: index.docbook:592
+msgid "We need a unidirectional, many-valued associations, implemented with a <literal>Set</literal>. Let's write the code for this in the Java classes and then map it:"
+msgstr ""
+
+#: index.docbook:597
+msgid ""
+ "<![CDATA[public class Person {\n"
+ "\n"
+ " private Set events = new HashSet();\n"
+ "\n"
+ " public Set getEvents() {\n"
+ " return events;\n"
+ " }\n"
+ "\n"
+ " public void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:599
+msgid "Before we map this association, think about the other side. Clearly, we could just keep this unidirectional. Or, we could create another collection on the <literal>Event</literal>, if we want to be able to navigate it bi-directional, i.e. <literal>anEvent.getParticipants()</literal>. This is not necessary, from a functional perspective. You could always execute an explicit query to retrieve the participants for a particular event. This is a design choice left to you, but what is clear from this discussion is the multiplicity of the association: \"many\" valued on both sides, we call this a <emphasis>many-to-many</emphasis> association. Hence, we use Hibernate's many-to-many mapping:"
+msgstr ""
+
+#: index.docbook:610
+msgid ""
+ "<![CDATA[<class name=\"events.Person\" table=\"PERSON\">\n"
+ " <id name=\"id\" column=\"PERSON_ID\">\n"
+ " <generator class=\"native\"/>\n"
+ " </id>\n"
+ " <property name=\"age\"/>\n"
+ " <property name=\"firstname\"/>\n"
+ " <property name=\"lastname\"/>\n"
+ "\n"
+ " <set name=\"events\" table=\"PERSON_EVENT\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <many-to-many column=\"EVENT_ID\" class=\"events.Event\"/>\n"
+ " </set>\n"
+ "\n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:612
+msgid "Hibernate supports all kinds of collection mappings, a <literal><set></literal> being most common. For a many-to-many association (or <emphasis>n:m</emphasis> entity relationship), an association table is needed. Each row in this table represents a link between a person and an event. The table name is configured with the <literal>table</literal> attribute of the <literal>set</literal> element. The identifier column name in the association, for the person's side, is defined with the <literal><key></literal> element, the column name for the event's side with the <literal>column</literal> attribute of the <literal><many-to-many></literal>. You also have to tell Hibernate the class of the objects in your collection (correct: the class on the other side of the collection of references)."
+msgstr ""
+
+#: index.docbook:624
+msgid "The database schema for this mapping is therefore:"
+msgstr ""
+
+#: index.docbook:628
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | |\n"
+ " |_____________| |__________________| | PERSON |\n"
+ " | | | | |_____________|\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | |\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE |\n"
+ " |_____________| | FIRSTNAME |\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:633
+msgid "Working the association"
+msgstr ""
+
+#: index.docbook:635
+msgid "Let's bring some people and events together in a new method in <literal>EventManager</literal>:"
+msgstr ""
+
+#: index.docbook:639
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:641
+msgid "After loading a <literal>Person</literal> and an <literal>Event</literal>, simply modify the collection using the normal collection methods. As you can see, there is no explicit call to <literal>update()</literal> or <literal>save()</literal>, Hibernate automatically detects that the collection has been modified and needs to be updated. This is called <emphasis>automatic dirty checking</emphasis>, and you can also try it by modifying the name or the date property of any of your objects. As long as they are in <emphasis>persistent</emphasis> state, that is, bound to a particular Hibernate <literal>Session</literal> (i.e. they have been just loaded or saved in a unit of work), Hibernate monitors any changes and executes SQL in a write-behind fashion. The process of synchronizing the memory state with the database, usually only at the end of a unit of work, is called <emphasis>flushing</emphasis>. In our code, the unit of work ends with a commit (or rollback) of the dat!
abase transaction - as defined by the <literal>thread</literal> configuration option for the <literal>CurrentSessionContext</literal> class."
+msgstr ""
+
+#: index.docbook:656
+msgid "You might of course load person and event in different units of work. Or you modify an object outside of a <literal>Session</literal>, when it is not in persistent state (if it was persistent before, we call this state <emphasis>detached</emphasis>). You can even modify a collection when it is detached:"
+msgstr ""
+
+#: index.docbook:663
+msgid ""
+ "<![CDATA[private void addPersonToEvent(Long personId, Long eventId) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session\n"
+ " .createQuery(\"select p from Person p left join fetch p.events where p.id = :pid\")\n"
+ " .setParameter(\"pid\", personId)\n"
+ " .uniqueResult(); // Eager fetch the collection so we can use it detached\n"
+ "\n"
+ " Event anEvent = (Event) session.load(Event.class, eventId);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "\n"
+ " // End of first unit of work\n"
+ "\n"
+ " aPerson.getEvents().add(anEvent); // aPerson (and its collection) is detached\n"
+ "\n"
+ " // Begin second unit of work\n"
+ "\n"
+ " Session session2 = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session2.beginTransaction();\n"
+ "\n"
+ " session2.update(aPerson); // Reattachment of aPerson\n"
+ "\n"
+ " session2.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:665
+msgid "The call to <literal>update</literal> makes a detached object persistent again, you could say it binds it to a new unit of work, so any modifications you made to it while detached can be saved to the database. This includes any modifications (additions/deletions) you made to a collection of that entity object."
+msgstr ""
+
+#: index.docbook:672
+msgid "Well, this is not much use in our current situation, but it's an important concept you can design into your own application. For now, complete this exercise by adding a new action to the <literal>EventManager</literal>'s main method and call it from the command line. If you need the identifiers of a person and an event - the <literal>save()</literal> method returns it (you might have to modify some of the previous methods to return that identifier):"
+msgstr ""
+
+#: index.docbook:680
+msgid ""
+ "<![CDATA[else if (args[0].equals(\"addpersontoevent\")) {\n"
+ " Long eventId = mgr.createAndStoreEvent(\"My Event\", new Date());\n"
+ " Long personId = mgr.createAndStorePerson(\"Foo\", \"Bar\");\n"
+ " mgr.addPersonToEvent(personId, eventId);\n"
+ " System.out.println(\"Added person \" + personId + \" to event \" + eventId);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:682
+msgid "This was an example of an association between two equally important classes, two entities. As mentioned earlier, there are other classes and types in a typical model, usually \"less important\". Some you have already seen, like an <literal>int</literal> or a <literal>String</literal>. We call these classes <emphasis>value types</emphasis>, and their instances <emphasis>depend</emphasis> on a particular entity. Instances of these types don't have their own identity, nor are they shared between entities (two persons don't reference the same <literal>firstname</literal> object, even if they have the same first name). Of course, value types can not only be found in the JDK (in fact, in a Hibernate application all JDK classes are considered value types), but you can also write dependent classes yourself, <literal>Address</literal> or <literal>MonetaryAmount</literal>, for example."
+msgstr ""
+
+#: index.docbook:695
+msgid "You can also design a collection of value types. This is conceptually very different from a collection of references to other entities, but looks almost the same in Java."
+msgstr ""
+
+#: index.docbook:703
+msgid "Collection of values"
+msgstr ""
+
+#: index.docbook:705
+msgid "We add a collection of value typed objects to the <literal>Person</literal> entity. We want to store email addresses, so the type we use is <literal>String</literal>, and the collection is again a <literal>Set</literal>:"
+msgstr ""
+
+#: index.docbook:710
+msgid ""
+ "<![CDATA[private Set emailAddresses = new HashSet();\n"
+ "\n"
+ "public Set getEmailAddresses() {\n"
+ " return emailAddresses;\n"
+ "}\n"
+ "\n"
+ "public void setEmailAddresses(Set emailAddresses) {\n"
+ " this.emailAddresses = emailAddresses;\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:712
+msgid "The mapping of this <literal>Set</literal>:"
+msgstr ""
+
+#: index.docbook:716
+msgid ""
+ "<![CDATA[<set name=\"emailAddresses\" table=\"PERSON_EMAIL_ADDR\">\n"
+ " <key column=\"PERSON_ID\"/>\n"
+ " <element type=\"string\" column=\"EMAIL_ADDR\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:718
+msgid "The difference compared with the earlier mapping is the <literal>element</literal> part, which tells Hibernate that the collection does not contain references to another entity, but a collection of elements of type <literal>String</literal> (the lowercase name tells you it's a Hibernate mapping type/converter). Once again, the <literal>table</literal> attribute of the <literal>set</literal> element determines the table name for the collection. The <literal>key</literal> element defines the foreign-key column name in the collection table. The <literal>column</literal> attribute in the <literal>element</literal> element defines the column name where the <literal>String</literal> values will actually be stored."
+msgstr ""
+
+#: index.docbook:728
+msgid "Have a look at the updated schema:"
+msgstr ""
+
+#: index.docbook:732
+msgid ""
+ "<![CDATA[\n"
+ " _____________ __________________\n"
+ " | | | | _____________\n"
+ " | EVENTS | | PERSON_EVENT | | | ___________________\n"
+ " |_____________| |__________________| | PERSON | | |\n"
+ " | | | | |_____________| | PERSON_EMAIL_ADDR |\n"
+ " | *EVENT_ID | <--> | *EVENT_ID | | | |___________________|\n"
+ " | EVENT_DATE | | *PERSON_ID | <--> | *PERSON_ID | <--> | *PERSON_ID |\n"
+ " | TITLE | |__________________| | AGE | | *EMAIL_ADDR |\n"
+ " |_____________| | FIRSTNAME | |___________________|\n"
+ " | LASTNAME |\n"
+ " |_____________|\n"
+ " ]]>"
+msgstr ""
+
+#: index.docbook:734
+msgid "You can see that the primary key of the collection table is in fact a composite key, using both columns. This also implies that there can't be duplicate email addresses per person, which is exactly the semantics we need for a set in Java."
+msgstr ""
+
+#: index.docbook:740
+msgid "You can now try and add elements to this collection, just like we did before by linking persons and events. It's the same code in Java:"
+msgstr ""
+
+#: index.docbook:745
+msgid ""
+ "<![CDATA[private void addEmailToPerson(Long personId, String emailAddress) {\n"
+ "\n"
+ " Session session = HibernateUtil.getSessionFactory().getCurrentSession();\n"
+ " session.beginTransaction();\n"
+ "\n"
+ " Person aPerson = (Person) session.load(Person.class, personId);\n"
+ "\n"
+ " // The getEmailAddresses() might trigger a lazy load of the collection\n"
+ " aPerson.getEmailAddresses().add(emailAddress);\n"
+ "\n"
+ " session.getTransaction().commit();\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:747
+msgid "This time we didnt' use a <emphasis>fetch</emphasis> query to initialize the collection. Hence, the call to its getter method will trigger an additional select to initialize it, so we can add an element to it. Monitor the SQL log and try to optimize this with an eager fetch."
+msgstr ""
+
+#: index.docbook:757
+msgid "Bi-directional associations"
+msgstr ""
+
+#: index.docbook:759
+msgid "Next we are going to map a bi-directional association - making the association between person and event work from both sides in Java. Of course, the database schema doesn't change, we still have many-to-many multiplicity. A relational database is more flexible than a network programming language, so it doesn't need anything like a navigation direction - data can be viewed and retrieved in any possible way."
+msgstr ""
+
+#: index.docbook:767
+msgid "First, add a collection of participants to the <literal>Event</literal> Event class:"
+msgstr ""
+
+#: index.docbook:771
+msgid ""
+ "<![CDATA[private Set participants = new HashSet();\n"
+ "\n"
+ "public Set getParticipants() {\n"
+ " return participants;\n"
+ "}\n"
+ "\n"
+ "public void setParticipants(Set participants) {\n"
+ " this.participants = participants;\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:773
+msgid "Now map this side of the association too, in <literal>Event.hbm.xml</literal>."
+msgstr ""
+
+#: index.docbook:777
+msgid ""
+ "<![CDATA[<set name=\"participants\" table=\"PERSON_EVENT\" inverse=\"true\">\n"
+ " <key column=\"EVENT_ID\"/>\n"
+ " <many-to-many column=\"PERSON_ID\" class=\"events.Person\"/>\n"
+ "</set>]]>"
+msgstr ""
+
+#: index.docbook:779
+msgid "As you see, these are normal <literal>set</literal> mappings in both mapping documents. Notice that the column names in <literal>key</literal> and <literal>many-to-many</literal> are swapped in both mapping documents. The most important addition here is the <literal>inverse=\"true\"</literal> attribute in the <literal>set</literal> element of the <literal>Event</literal>'s collection mapping."
+msgstr ""
+
+#: index.docbook:787
+msgid "What this means is that Hibernate should take the other side - the <literal>Person</literal> class - when it needs to find out information about the link between the two. This will be a lot easier to understand once you see how the bi-directional link between our two entities is created ."
+msgstr ""
+
+#: index.docbook:796
+msgid "Working bi-directional links"
+msgstr ""
+
+#: index.docbook:798
+msgid "First, keep in mind that Hibernate does not affect normal Java semantics. How did we create a link between a <literal>Person</literal> and an <literal>Event</literal> in the unidirectional example? We added an instance of <literal>Event</literal> to the collection of event references, of an instance of <literal>Person</literal>. So, obviously, if we want to make this link working bi-directional, we have to do the same on the other side - adding a <literal>Person</literal> reference to the collection in an <literal>Event</literal>. This \"setting the link on both sides\" is absolutely necessary and you should never forget doing it."
+msgstr ""
+
+#: index.docbook:808
+msgid "Many developers program defensive and create link management methods to correctly set both sides, e.g. in <literal>Person</literal>:"
+msgstr ""
+
+#: index.docbook:813
+msgid ""
+ "<![CDATA[protected Set getEvents() {\n"
+ " return events;\n"
+ "}\n"
+ "\n"
+ "protected void setEvents(Set events) {\n"
+ " this.events = events;\n"
+ "}\n"
+ "\n"
+ "public void addToEvent(Event event) {\n"
+ " this.getEvents().add(event);\n"
+ " event.getParticipants().add(this);\n"
+ "}\n"
+ "\n"
+ "public void removeFromEvent(Event event) {\n"
+ " this.getEvents().remove(event);\n"
+ " event.getParticipants().remove(this);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:815
+msgid "Notice that the get and set methods for the collection are now protected - this allows classes in the same package and subclasses to still access the methods, but prevents everybody else from messing with the collections directly (well, almost). You should probably do the same with the collection on the other side."
+msgstr ""
+
+#: index.docbook:822
+msgid "What about the <literal>inverse</literal> mapping attribute? For you, and for Java, a bi-directional link is simply a matter of setting the references on both sides correctly. Hibernate however doesn't have enough information to correctly arrange SQL <literal>INSERT</literal> and <literal>UPDATE</literal> statements (to avoid constraint violations), and needs some help to handle bi-directional associations properly. Making one side of the association <literal>inverse</literal> tells Hibernate to basically ignore it, to consider it a <emphasis>mirror</emphasis> of the other side. That's all that is necessary for Hibernate to work out all of the issues when transformation a directional navigation model to a SQL database schema. The rules you have to remember are straightforward: All bi-directional associations need one side as <literal>inverse</literal>. In a one-to-many association it has to be the many-side, in many-to-many association you can pick either side, there!
is no difference."
+msgstr ""
+
+#: index.docbook:837
+msgid "Let's turn this into a small web application."
+msgstr ""
+
+#: index.docbook:844
+msgid "Part 3 - The EventManager web application"
+msgstr ""
+
+#: index.docbook:846
+msgid "A Hibernate web application uses <literal>Session</literal> and <literal>Transaction</literal> almost like a standalone application. However, some common patterns are useful. We now write an <literal>EventManagerServlet</literal>. This servlet can list all events stored in the database, and it provides an HTML form to enter new events."
+msgstr ""
+
+#: index.docbook:854
+msgid "Writing the basic servlet"
+msgstr ""
+
+#: index.docbook:856
+msgid "Create a new class in your source directory, in the <literal>events</literal> package:"
+msgstr ""
+
+#: index.docbook:861
+msgid ""
+ "<![CDATA[package events;\n"
+ "\n"
+ "// Imports\n"
+ "\n"
+ "public class EventManagerServlet extends HttpServlet {\n"
+ "\n"
+ " // Servlet code\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:863
+msgid "The servlet handles HTTP <literal>GET</literal> requests only, hence, the method we implement is <literal>doGet()</literal>:"
+msgstr ""
+
+#: index.docbook:868
+msgid ""
+ "<![CDATA[protected void doGet(HttpServletRequest request,\n"
+ " HttpServletResponse response)\n"
+ " throws ServletException, IOException {\n"
+ "\n"
+ " SimpleDateFormat dateFormatter = new SimpleDateFormat(\"dd.MM.yyyy\");\n"
+ "\n"
+ " try {\n"
+ " // Begin unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().beginTransaction();\n"
+ "\n"
+ " // Process request and render page...\n"
+ "\n"
+ " // End unit of work\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().commit();\n"
+ "\n"
+ " } catch (Exception ex) {\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().getTransaction().rollback();\n"
+ " throw new ServletException(ex);\n"
+ " }\n"
+ "\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:870
+msgid "The pattern we are applying here is called <emphasis>session-per-request</emphasis>. When a request hits the servlet, a new Hibernate <literal>Session</literal> is opened through the first call to <literal>getCurrentSession()</literal> on the <literal>SessionFactory</literal>. Then a database transaction is started—all data access as to occur inside a transaction, no matter if data is read or written (we don't use the auto-commit mode in applications)."
+msgstr ""
+
+#: index.docbook:879
+msgid "Do <emphasis>not</emphasis> use a new Hibernate <literal>Session</literal> for every database operation. Use one Hibernate <literal>Session</literal> that is scoped to the whole request. Use <literal>getCurrentSession()</literal>, so that it is automatically bound to the current Java thread."
+msgstr ""
+
+#: index.docbook:886
+msgid "Next, the possible actions of the request are processed and the response HTML is rendered. We'll get to that part soon."
+msgstr ""
+
+#: index.docbook:891
+msgid "Finally, the unit of work ends when processing and rendering is complete. If any problem occured during processing or rendering, an exception will be thrown and the database transaction rolled back. This completes the <literal>session-per-request</literal> pattern. Instead of the transaction demarcation code in every servlet you could also write a servlet filter. See the Hibernate website and Wiki for more information about this pattern, called <emphasis>Open Session in View</emphasis>—you'll need it as soon as you consider rendering your view in JSP, not in a servlet."
+msgstr ""
+
+#: index.docbook:905
+msgid "Processing and rendering"
+msgstr ""
+
+#: index.docbook:907
+msgid "Let's implement the processing of the request and rendering of the page."
+msgstr ""
+
+#: index.docbook:911
+msgid ""
+ "<![CDATA[// Write HTML header\n"
+ "PrintWriter out = response.getWriter();\n"
+ "out.println(\"<html><head><title>Event Manager</title></head><body>\");\n"
+ "\n"
+ "// Handle actions\n"
+ "if ( \"store\".equals(request.getParameter(\"action\")) ) {\n"
+ "\n"
+ " String eventTitle = request.getParameter(\"eventTitle\");\n"
+ " String eventDate = request.getParameter(\"eventDate\");\n"
+ "\n"
+ " if ( \"\".equals(eventTitle) || \"\".equals(eventDate) ) {\n"
+ " out.println(\"<b><i>Please enter event title and date.</i></b>\");\n"
+ " } else {\n"
+ " createAndStoreEvent(eventTitle, dateFormatter.parse(eventDate));\n"
+ " out.println(\"<b><i>Added event.</i></b>\");\n"
+ " }\n"
+ "}\n"
+ "\n"
+ "// Print page\n"
+ "printEventForm(out);\n"
+ "listEvents(out, dateFormatter);\n"
+ "\n"
+ "// Write HTML footer\n"
+ "out.println(\"</body></html>\");\n"
+ "out.flush();\n"
+ "out.close();]]>"
+msgstr ""
+
+#: index.docbook:913
+msgid "Granted, this coding style with a mix of Java and HTML would not scale in a more complex application—keep in mind that we are only illustrating basic Hibernate concepts in this tutorial. The code prints an HTML header and a footer. Inside this page, an HTML form for event entry and a list of all events in the database are printed. The first method is trivial and only outputs HTML:"
+msgstr ""
+
+#: index.docbook:922
+msgid ""
+ "<![CDATA[private void printEventForm(PrintWriter out) {\n"
+ " out.println(\"<h2>Add new event:</h2>\");\n"
+ " out.println(\"<form>\");\n"
+ " out.println(\"Title: <input name='eventTitle' length='50'/><br/>\");\n"
+ " out.println(\"Date (e.g. 24.12.2009): <input name='eventDate' length='10'/><br/>\");\n"
+ " out.println(\"<input type='submit' name='action' value='store'/>\");\n"
+ " out.println(\"</form>\");\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:924
+msgid "The <literal>listEvents()</literal> method uses the Hibernate <literal>Session</literal> bound to the current thread to execute a query:"
+msgstr ""
+
+#: index.docbook:930
+msgid ""
+ "<![CDATA[private void listEvents(PrintWriter out, SimpleDateFormat dateFormatter) {\n"
+ "\n"
+ " List result = HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().createCriteria(Event.class).list();\n"
+ " if (result.size() > 0) {\n"
+ " out.println(\"<h2>Events in database:</h2>\");\n"
+ " out.println(\"<table border='1'>\");\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<th>Event title</th>\");\n"
+ " out.println(\"<th>Event date</th>\");\n"
+ " out.println(\"</tr>\");\n"
+ " for (Iterator it = result.iterator(); it.hasNext();) {\n"
+ " Event event = (Event) it.next();\n"
+ " out.println(\"<tr>\");\n"
+ " out.println(\"<td>\" + event.getTitle() + \"</td>\");\n"
+ " out.println(\"<td>\" + dateFormatter.format(event.getDate()) + \"</td>\");\n"
+ " out.println(\"</tr>\");\n"
+ " }\n"
+ " out.println(\"</table>\");\n"
+ " }\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:932
+msgid "Finally, the <literal>store</literal> action is dispatched to the <literal>createAndStoreEvent()</literal> method, which also uses the <literal>Session</literal> of the current thread:"
+msgstr ""
+
+#: index.docbook:938
+msgid ""
+ "<![CDATA[protected void createAndStoreEvent(String title, Date theDate) {\n"
+ " Event theEvent = new Event();\n"
+ " theEvent.setTitle(title);\n"
+ " theEvent.setDate(theDate);\n"
+ "\n"
+ " HibernateUtil.getSessionFactory()\n"
+ " .getCurrentSession().save(theEvent);\n"
+ "}]]>"
+msgstr ""
+
+#: index.docbook:940
+msgid "That's it, the servlet is complete. A request to the servlet will be processed in a single <literal>Session</literal> and <literal>Transaction</literal>. As earlier in the standalone application, Hibernate can automatically bind these ojects to the current thread of execution. This gives you the freedom to layer your code and access the <literal>SessionFactory</literal> in any way you like. Usually you'd use a more sophisticated design and move the data access code into data access objects (the DAO pattern). See the Hibernate Wiki for more examples."
+msgstr ""
+
+#: index.docbook:954
+msgid "Deploying and testing"
+msgstr ""
+
+#: index.docbook:956
+msgid "To deploy this application you have to create a web archive, a WAR. Add the following Ant target to your <literal>build.xml</literal>:"
+msgstr ""
+
+#: index.docbook:961
+msgid ""
+ "<![CDATA[<target name=\"war\" depends=\"compile\">\n"
+ " <war destfile=\"hibernate-tutorial.war\" webxml=\"web.xml\">\n"
+ " <lib dir=\"${librarydir}\">\n"
+ " <exclude name=\"jsdk*.jar\"/>\n"
+ " </lib>\n"
+ "\n"
+ " <classes dir=\"${targetdir}\"/>\n"
+ " </war>\n"
+ "</target>]]>"
+msgstr ""
+
+#: index.docbook:963
+msgid "This target creates a file called <literal>hibernate-tutorial.war</literal> in your project directory. It packages all libraries and the <literal>web.xml</literal> descriptor, which is expected in the base directory of your project:"
+msgstr ""
+
+#: index.docbook:969
+msgid ""
+ "<![CDATA[<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<web-app version=\"2.4\"\n"
+ " xmlns=\"http://java.sun.com/xml/ns/j2ee\"\n"
+ " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
+ " xsi:schemaLocation=\"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd\">\n"
+ "\n"
+ " <servlet>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <servlet-class>events.EventManagerServlet</servlet-class>\n"
+ " </servlet>\n"
+ "\n"
+ " <servlet-mapping>\n"
+ " <servlet-name>Event Manager</servlet-name>\n"
+ " <url-pattern>/eventmanager</url-pattern>\n"
+ " </servlet-mapping>\n"
+ "</web-app>]]>"
+msgstr ""
+
+#: index.docbook:971
+msgid "Before you compile and deploy the web application, note that an additional library is required: <literal>jsdk.jar</literal>. This is the Java servlet development kit, if you don't have this library already, get it from the Sun website and copy it to your library directory. However, it will be only used for compliation and excluded from the WAR package."
+msgstr ""
+
+#: index.docbook:979
+msgid "To build and deploy call <literal>ant war</literal> in your project directory and copy the <literal>hibernate-tutorial.war</literal> file into your Tomcat <literal>webapp</literal> directory. If you don't have Tomcat installed, download it and follow the installation instructions. You don't have to change any Tomcat configuration to deploy this application though."
+msgstr ""
+
+#: index.docbook:987
+msgid "Once deployed and Tomcat is running, access the application at <literal>http://localhost:8080/hibernate-tutorial/eventmanager</literal>. Make sure you watch the Tomcat log to see Hibernate initialize when the first request hits your servlet (the static initializer in <literal>HibernateUtil</literal> is called) and to get the detailed output if any exceptions occurs."
+msgstr ""
+
+#: index.docbook:1000
+msgid "Summary"
+msgstr ""
+
+#: index.docbook:1002
+msgid "This tutorial covered the basics of writing a simple standalone Hibernate application and a small web application."
+msgstr ""
+
+#: index.docbook:1007
+msgid "If you already feel confident with Hibernate, continue browsing through the reference documentation table of contents for topics you find interesting - most asked are transactional processing (<xref linkend=\"transactions\"/>), fetch performance (<xref linkend=\"performance\"/>), or the usage of the API (<xref linkend=\"objectstate\"/>) and the query features (<xref linkend=\"objectstate-querying\"/>)."
+msgstr ""
+
+#: index.docbook:1015
+msgid "Don't forget to check the Hibernate website for more (specialized) tutorials."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/content/xml.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/content/xml.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/content/xml.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,284 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:5
+msgid "XML Mapping"
+msgstr ""
+
+#: index.docbook:7
+msgid "Note that this is an experimental feature in Hibernate 3.0 and is under extremely active development."
+msgstr ""
+
+#: index.docbook:13
+msgid "Working with XML data"
+msgstr ""
+
+#: index.docbook:15
+msgid "Hibernate lets you work with persistent XML data in much the same way you work with persistent POJOs. A parsed XML tree can be thought of as just another way to represent the relational data at the object level, instead of POJOs."
+msgstr ""
+
+#: index.docbook:22
+msgid "Hibernate supports dom4j as API for manipulating XML trees. You can write queries that retrieve dom4j trees from the database and have any modification you make to the tree automatically synchronized to the database. You can even take an XML document, parse it using dom4j, and write it to the database with any of Hibernate's basic operations: <literal>persist(), saveOrUpdate(), merge(), delete(), replicate()</literal> (merging is not yet supported)."
+msgstr ""
+
+#: index.docbook:32
+msgid "This feature has many applications including data import/export, externalization of entity data via JMS or SOAP and XSLT-based reporting."
+msgstr ""
+
+#: index.docbook:37
+msgid "A single mapping may be used to simultaneously map properties of a class and nodes of an XML document to the database, or, if there is no class to map, it may be used to map just the XML."
+msgstr ""
+
+#: index.docbook:44
+msgid "Specifying XML and class mapping together"
+msgstr ""
+
+#: index.docbook:46
+msgid "Here is an example of mapping a POJO and XML simultaneously:"
+msgstr ""
+
+#: index.docbook:50
+msgid ""
+ "<![CDATA[<class name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"accountId\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <many-to-one name=\"customer\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:54
+msgid "Specifying only an XML mapping"
+msgstr ""
+
+#: index.docbook:56
+msgid "Here is an example where there is no POJO class:"
+msgstr ""
+
+#: index.docbook:60
+msgid ""
+ "<![CDATA[<class entity-name=\"Account\" \n"
+ " table=\"ACCOUNTS\" \n"
+ " node=\"account\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"ACCOUNT_ID\" \n"
+ " node=\"@id\" \n"
+ " type=\"string\"/>\n"
+ " \n"
+ " <many-to-one name=\"customerId\" \n"
+ " column=\"CUSTOMER_ID\" \n"
+ " node=\"customer/@id\" \n"
+ " embed-xml=\"false\" \n"
+ " entity-name=\"Customer\"/>\n"
+ " \n"
+ " <property name=\"balance\" \n"
+ " column=\"BALANCE\" \n"
+ " node=\"balance\" \n"
+ " type=\"big_decimal\"/>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:62
+msgid "This mapping allows you to access the data as a dom4j tree, or as a graph of property name/value pairs (java <literal>Map</literal>s). The property names are purely logical constructs that may be referred to in HQL queries."
+msgstr ""
+
+#: index.docbook:73
+msgid "XML mapping metadata"
+msgstr ""
+
+#: index.docbook:75
+msgid "Many Hibernate mapping elements accept the <literal>node</literal> attribute. This let's you specify the name of an XML attribute or element that holds the property or entity data. The format of the <literal>node</literal> attribute must be one of the following:"
+msgstr ""
+
+#: index.docbook:84
+msgid "<literal>\"element-name\"</literal> - map to the named XML element"
+msgstr ""
+
+#: index.docbook:87
+msgid "<literal>\"@attribute-name\"</literal> - map to the named XML attribute"
+msgstr ""
+
+#: index.docbook:90
+msgid "<literal>\".\"</literal> - map to the parent element"
+msgstr ""
+
+#: index.docbook:93
+msgid "<literal>\"element-name/@attribute-name\"</literal> - map to the named attribute of the named element"
+msgstr ""
+
+#: index.docbook:100
+msgid "For collections and single valued associations, there is an additional <literal>embed-xml</literal> attribute. If <literal>embed-xml=\"true\"</literal>, the default, the XML tree for the associated entity (or collection of value type) will be embedded directly in the XML tree for the entity that owns the association. Otherwise, if <literal>embed-xml=\"false\"</literal>, then only the referenced identifier value will appear in the XML for single point associations and collections will simply not appear at all."
+msgstr ""
+
+#: index.docbook:110
+msgid "You should be careful not to leave <literal>embed-xml=\"true\"</literal> for too many associations, since XML does not deal well with circularity!"
+msgstr ""
+
+#: index.docbook:115
+msgid ""
+ "<![CDATA[<class name=\"Customer\" \n"
+ " table=\"CUSTOMER\" \n"
+ " node=\"customer\">\n"
+ " \n"
+ " <id name=\"id\" \n"
+ " column=\"CUST_ID\" \n"
+ " node=\"@id\"/>\n"
+ " \n"
+ " <map name=\"accounts\" \n"
+ " node=\".\" \n"
+ " embed-xml=\"true\">\n"
+ " <key column=\"CUSTOMER_ID\" \n"
+ " not-null=\"true\"/>\n"
+ " <map-key column=\"SHORT_DESC\" \n"
+ " node=\"@short-desc\" \n"
+ " type=\"string\"/>\n"
+ " <one-to-many entity-name=\"Account\"\n"
+ " embed-xml=\"false\" \n"
+ " node=\"account\"/>\n"
+ " </map>\n"
+ " \n"
+ " <component name=\"name\" \n"
+ " node=\"name\">\n"
+ " <property name=\"firstName\" \n"
+ " node=\"first-name\"/>\n"
+ " <property name=\"initial\" \n"
+ " node=\"initial\"/>\n"
+ " <property name=\"lastName\" \n"
+ " node=\"last-name\"/>\n"
+ " </component>\n"
+ " \n"
+ " ...\n"
+ " \n"
+ "</class>]]>"
+msgstr ""
+
+#: index.docbook:117
+msgid "in this case, we have decided to embed the collection of account ids, but not the actual account data. The following HQL query:"
+msgstr ""
+
+#: index.docbook:122
+msgid "<![CDATA[from Customer c left join fetch c.accounts where c.lastName like :lastName]]>"
+msgstr ""
+
+#: index.docbook:124
+msgid "Would return datasets such as this:"
+msgstr ""
+
+#: index.docbook:128
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account short-desc=\"Savings\">987632567</account>\n"
+ " <account short-desc=\"Credit Card\">985612323</account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+
+#: index.docbook:130
+msgid "If you set <literal>embed-xml=\"true\"</literal> on the <literal><one-to-many></literal> mapping, the data might look more like this:"
+msgstr ""
+
+#: index.docbook:135
+msgid ""
+ "<![CDATA[<customer id=\"123456789\">\n"
+ " <account id=\"987632567\" short-desc=\"Savings\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>100.29</balance>\n"
+ " </account>\n"
+ " <account id=\"985612323\" short-desc=\"Credit Card\">\n"
+ " <customer id=\"123456789\"/>\n"
+ " <balance>-2370.34</balance>\n"
+ " </account>\n"
+ " <name>\n"
+ " <first-name>Gavin</first-name>\n"
+ " <initial>A</initial>\n"
+ " <last-name>King</last-name>\n"
+ " </name>\n"
+ " ...\n"
+ "</customer>]]>"
+msgstr ""
+
+#: index.docbook:141
+msgid "Manipulating XML data"
+msgstr ""
+
+#: index.docbook:143
+msgid "Let's rearead and update XML documents in the application. We do this by obtaining a dom4j session:"
+msgstr ""
+
+#: index.docbook:148
+msgid ""
+ "<![CDATA[Document doc = ....;\n"
+ " \n"
+ "Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "List results = dom4jSession\n"
+ " .createQuery(\"from Customer c left join fetch c.accounts where c.lastName like :lastName\")\n"
+ " .list();\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " //add the customer data to the XML document\n"
+ " Element customer = (Element) results.get(i);\n"
+ " doc.add(customer);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:150
+msgid ""
+ "<![CDATA[Session session = factory.openSession();\n"
+ "Session dom4jSession = session.getSession(EntityMode.DOM4J);\n"
+ "Transaction tx = session.beginTransaction();\n"
+ "\n"
+ "Element cust = (Element) dom4jSession.get(\"Customer\", customerId);\n"
+ "for ( int i=0; i<results.size(); i++ ) {\n"
+ " Element customer = (Element) results.get(i);\n"
+ " //change the customer name in the XML and database\n"
+ " Element name = customer.element(\"name\");\n"
+ " name.element(\"first-name\").setText(firstName);\n"
+ " name.element(\"initial\").setText(initial);\n"
+ " name.element(\"last-name\").setText(lastName);\n"
+ "}\n"
+ "\n"
+ "tx.commit();\n"
+ "session.close();]]>"
+msgstr ""
+
+#: index.docbook:152
+msgid "It is extremely useful to combine this feature with Hibernate's <literal>replicate()</literal> operation to implement XML-based data import/export."
+msgstr ""
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
Added: core/trunk/documentation/manual/translations/zh-CN/legal_notice.po
===================================================================
--- core/trunk/documentation/manual/translations/zh-CN/legal_notice.po (rev 0)
+++ core/trunk/documentation/manual/translations/zh-CN/legal_notice.po 2007-10-22 15:48:10 UTC (rev 14128)
@@ -0,0 +1,48 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Content-Type: text/plain; charset=utf-8\n"
+#: index.docbook:20
+msgid "Legal Notice"
+msgstr "Legal Notice"
+
+#: index.docbook:22
+msgid "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+msgstr "<street>1801 Varsity Drive</street> <city>Raleigh</city>, <state>NC</state><postcode>27606-2072</postcode><country>USA</country> <phone>Phone: +1 919 754 3700</phone> <phone>Phone: 888 733 4281</phone> <fax>Fax: +1 919 754 3701</fax> <pob>PO Box 13588</pob><city>Research Triangle Park</city>, <state>NC</state><postcode>27709</postcode><country>USA</country>"
+
+#: index.docbook:31
+msgid "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+msgstr "Copyright <trademark class=\"copyright\"></trademark> 2007 by Red Hat, Inc. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at <ulink url=\"http://www.opencontent.org/openpub/\">http://www.opencontent.org/openpub/</ulink>)."
+
+#: index.docbook:34
+msgid "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+msgstr "Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder."
+
+#: index.docbook:37
+msgid "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+msgstr "Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder."
+
+#: index.docbook:40
+msgid "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+msgstr "Red Hat and the Red Hat \"Shadow Man\" logo are registered trademarks of Red Hat, Inc. in the United States and other countries."
+
+#: index.docbook:43
+msgid "All other trademarks referenced herein are the property of their respective owners."
+msgstr "All other trademarks referenced herein are the property of their respective owners."
+
+#: index.docbook:46
+msgid "The GPG fingerprint of the security at redhat.com key is:"
+msgstr "The GPG fingerprint of the security at redhat.com key is:"
+
+#: index.docbook:49
+msgid "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+msgstr "CA 20 86 86 2B D6 9D FC 65 F6 EC C4 21 91 80 CD DB 42 A6 0E"
+
+msgid "ROLES_OF_TRANSLATORS"
+msgstr "<!--TRANS:ROLES_OF_TRANSLATORS-->"
+
+msgid "CREDIT_FOR_TRANSLATORS"
+msgstr "<!--TRANS:CREDIT_FOR_TRANSLATORS-->"
+
More information about the hibernate-commits
mailing list